Erc-777

tokensToSend() 和 OperatorSend() 的區別?

  • August 20, 2020

我閱讀了 eip777,但不知道 tokensToSend() 和 OperatorSend() 之間有什麼區別。你能幫我澄清一下嗎?

謝謝你。

ERC-777 定義了兩個發送令牌的函式:

  • send(address to, uint256 amount, bytes calldata data)
  • operatorSend(address from, address to, uint256 amount, bytes calldata data, bytes calldata operatorData)

當代幣的所有者想要轉移它們時使用第一個,而第二個是由操作員代表代幣所有者發送代幣。操作員基本上相當於 ERC-20 的津貼。該operatorSend功能相當於transferFrom,它可以將令牌從令牌所有者的地址轉移到另一個地址(假設呼叫者是操作員)。

如果您想從您的地址發送令牌,請使用send. 如果您想從另一個地址發送令牌,operatorSend請在您是授權操作員的情況下使用。

tokensToSend不是 ERC-777 中的“正常”函式,而是鉤子函式。Hooks 可以在ERC-1820系統資料庫中註冊,並且必須在完成代幣轉移(通過sendoperatorSend)之前由 ERC-777 合約呼叫。該tokensReceived 鉤子在發送者(例如令牌所有者)的上下文中被呼叫,並可用於“取消”交易。

在 ERC-777 中發送令牌的整個過程如下所示:

ERC-777 掛鉤

  1. send(to, amount, data)發送方使用接收方的地址、金額和(可選)數據進行呼叫。
  2. 代幣合約呼叫getInterfaceImplementer(address, interfaceHash),帶有發送者的地址和ERC777TokensSender( tokensToSendhook) 的介面雜湊。
  3. 如果指定了實現,則令牌合約呼叫tokensToSend(operator, from, to, amount, userData, operatorData)實現合約。
  4. 代幣合約再次呼叫,帶上接收方地址和( hook)getInterfaceImplementer(address, interfaceHash)的介面雜湊。ERC777TokensRecipient``tokensReceived
  5. 如果指定了實現,則令牌合約呼叫tokensReceived(operator, from, to, amount, data, operatorData)實現合約。

這假設發送者和接收者都是合約(為簡單起見),但同樣的想法適用於從正常地址到另一個正常地址的交易(除了地址將指定合約作為掛鉤的實現者)。

如果你有興趣,我在這裡寫了 ERC-777(以及 ERC-20 和 ERC-721)的詳細解釋

引用自:https://ethereum.stackexchange.com/questions/86802