Erc-777
tokensToSend() 和 OperatorSend() 的區別?
我閱讀了 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系統資料庫中註冊,並且必須在完成代幣轉移(通過send
或operatorSend
)之前由 ERC-777 合約呼叫。該tokensReceived
鉤子在發送者(例如令牌所有者)的上下文中被呼叫,並可用於“取消”交易。在 ERC-777 中發送令牌的整個過程如下所示:
send(to, amount, data)
發送方使用接收方的地址、金額和(可選)數據進行呼叫。- 代幣合約呼叫
getInterfaceImplementer(address, interfaceHash)
,帶有發送者的地址和ERC777TokensSender
(tokensToSend
hook) 的介面雜湊。- 如果指定了實現,則令牌合約呼叫
tokensToSend(operator, from, to, amount, userData, operatorData)
實現合約。- 代幣合約再次呼叫,帶上接收方地址和( hook)
getInterfaceImplementer(address, interfaceHash)
的介面雜湊。ERC777TokensRecipient``tokensReceived
- 如果指定了實現,則令牌合約呼叫
tokensReceived(operator, from, to, amount, data, operatorData)
實現合約。這假設發送者和接收者都是合約(為簡單起見),但同樣的想法適用於從正常地址到另一個正常地址的交易(除了地址將指定合約作為掛鉤的實現者)。
如果你有興趣,我在這裡寫了 ERC-777(以及 ERC-20 和 ERC-721)的詳細解釋。