Solidity

是否可以通過接收 ERC20 令牌來觸發 ERC777 接收器掛鉤?

  • April 14, 2021

我注意到在使用一些 ERC777 函式時呼叫了callTokensReceived鉤子,但我想知道如果向它發送了 ERC20 令牌,如何觸發它?

範例(虛擬碼):

  1. 使用者執行 erc20.transfer(erc777.address)
  2. erc777receiverHook 觸發 someFunction() 引用 erc20 令牌及其發送者

是否必須批准 ERC777 合約/給予津貼,然後 ERC777 可以使用transferFrom函式將代幣提取到合約中,這將觸發callTokensReceived

我無法想像這會是這種方法,因為使用 ERC777 的一大優勢是刪除這兩個步驟批准/轉移方法。

持有者

代幣持有者。持有者可以“授權”和“撤銷”可以代表他們發送代幣的運營商。這些運營商旨在成為經過驗證的合約,例如交易所、支票處理器或自動收費系統。

操作員

運營商是允許代表某個持有者發送和銷毀代幣的地址。

來自文件:

tokensReceived 掛鉤允許將代幣發送到合約並在單個交易中通知它,這與 ERC-20 不同,ERC-20 需要雙重呼叫(approve/transferFrom)來實現這一點。

持有者可以“授權”和“撤銷”可以代表他們發送代幣的運營商。這些運營商旨在成為經過驗證的合約,例如交易所、支票處理器或自動收費系統。

ERC-20 兼容性要求

代幣的小數點必須始終為 18。對於純 ERC777 代幣,ERC-20 小數點功能是可選的,在與代幣合約互動時不應依賴其存在。(隱含十進制值 18。)對於 ERC-20 兼容的令牌,十進制函式是必需的,並且必須返回 18。(在 ERC-20 中,十進制函式是可選的。如果該函式不存在,則十進制值沒有明確定義,可能被假定為 0。因此,出於兼容性原因,必須為 ERC-20 兼容令牌實現小數。)

如果令牌實現了 ERC-20,它必須通過 ERC-1820 用自己的地址註冊 ERC20Token 介面。這是通過呼叫 ERC1820 系統資料庫上的 setInterfaceImplementer 函式來完成的,其中代幣合約地址作為地址和實現者,ERC20Token 的 keccak256 雜湊 (0xaea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a) 作為介面雜湊。

結論

是的,如果運營商被批准代表持有人在 上消費tokensReceived,它可以立即轉移。operatorSend介面中定義的代幣數量代表地址from發送到地址to

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