您好,登錄后才能下訂單哦!
這篇文章主要講解了“ERC777規(guī)范內(nèi)容是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“ERC777規(guī)范內(nèi)容是什么”吧!
有別于ERC20的自由散漫,ERC777利用了新的ERC820標(biāo)準(zhǔn)提供的集中式的智能合約注冊(cè)表和合約接口實(shí)現(xiàn)查詢功能,以實(shí)現(xiàn)某種程度的內(nèi)省。中心化的注冊(cè)機(jī)制有助于后向兼容性以及更好的功能擴(kuò)展。一個(gè)期望調(diào)用ERC777的DApp或智能合約,就可以利用EIP-820返回的ITokenReceipt接口來(lái)確定目標(biāo)合約是否實(shí)現(xiàn)了期望的接口。
ERC777改進(jìn)了ERC20代幣中存在的很多不足,例如,ERC777支持操作員白名單,提供以太幣兼容的send()
接口,利用ERC20實(shí)現(xiàn)后向兼容等。下圖展示了ERC777代幣的轉(zhuǎn)賬實(shí)現(xiàn)流程:
要快速掌握以太坊區(qū)塊鏈應(yīng)用開(kāi)發(fā),推薦匯智網(wǎng)的在線互動(dòng)教程:
以太坊DApp開(kāi)發(fā)入門 | 以太坊電商DApp實(shí)戰(zhàn) | ERC721以太坊通證實(shí)戰(zhàn) Web3j以太坊開(kāi)發(fā)詳解 | Php以太坊開(kāi)發(fā)詳解 | Python以太坊開(kāi)發(fā)詳解 | C#以太坊開(kāi)發(fā)詳解 | Flutter以太坊開(kāi)發(fā)詳解 |
與ERC20相比,ERC777有以下方面的優(yōu)勢(shì):
采用與以太幣一致的哲學(xué)發(fā)送代幣,即采用接口send(dest,value,data)
。
任何合約都可以定義收到代幣時(shí)觸發(fā)的tokensReceived
事件,這避免了在ERC20代幣 中存在的雙重調(diào)用問(wèn)題。
合約和常規(guī)地址都可以通過(guò)注冊(cè)一個(gè)tokensToSend
或tokensReceivedFunction
函數(shù)來(lái)控制或拒絕發(fā)送或接收的代幣,避免ERC20代幣中存在的代幣卡死問(wèn)題。
代幣持有者可以授權(quán)或回收管理其代幣的操作員權(quán)限。這些操作員通常是交易所 合約或自動(dòng)收費(fèi)系統(tǒng)中的支付處理器。
每個(gè)代幣交易都包含userData
數(shù)據(jù)字段,在操作員操作時(shí)也有類似的operatorData
字段,從而可以自由地將數(shù)據(jù)傳遞給接收方。
可以后向兼容那些不支持tokensReceived
函數(shù)的錢包。
下面是ERC777規(guī)范的內(nèi)容,完整描述可以到官網(wǎng)查看:
interface ERC777Token { function name() external view returns (string memory); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function balanceOf(address holder) external view returns (uint256); function granularity() external view returns (uint256); function defaultOperators() external view returns (address[] memory); function isOperatorFor( address operator, address holder ) external view returns (bool); function authorizeOperator(address operator) external; function revokeOperator(address operator) external; function send(address to, uint256 amount, bytes calldata data) external; function operatorSend( address from, address to, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; function burn(uint256 amount, bytes calldata data) external; function operatorBurn( address from, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; event Sent( address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData ); event Minted( address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData ); event Burned( address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData ); event AuthorizedOperator( address indexed operator, address indexed holder ); event RevokedOperator(address indexed operator, address indexed holder); }
ERC777代幣合約必須通過(guò)ERC820標(biāo)準(zhǔn)注冊(cè)ERC777Token
接口?;鶞?zhǔn)單位必須是101?。
ERC777代幣logo采用Creative Commons Attribution-ShareAlike 4.0授權(quán),并且不可以用于廣告、推廣或其他任何不兼容ERC777的技術(shù)。
ERC777沒(méi)有引入后向不兼容問(wèn)題,因此可以兼容之前的ERC20代幣標(biāo)準(zhǔn)。
在這個(gè)RIP中,沒(méi)有使用transfer
和transferFrom
進(jìn)行代幣轉(zhuǎn)賬,而是使用send
和operatorSend
來(lái)避免混淆與潛在的錯(cuò)誤。與此同時(shí),ERC777允許你實(shí)現(xiàn)ERC20中的transfer
、transferFrom
、approve
和allowance
以便兼容ERC20。
因此一個(gè)代幣合約可以同時(shí)實(shí)現(xiàn)ERC20和ERC777。只讀函數(shù)例如name
、symbol
、balanceOf
、tokenSupply
以及內(nèi)部數(shù)據(jù)例如余額映射表等都可以毫無(wú)問(wèn)題的重疊使用。但是需要注意的是,以下函數(shù)是ERC777規(guī)范強(qiáng)制要求的:name
、 symbol
,不過(guò)decimal
并非ERC777標(biāo)準(zhǔn)中的要求。
兩個(gè)標(biāo)準(zhǔn)中的寫(xiě)操作函數(shù)都是解耦的,可以彼此獨(dú)立的操作。注意ERC20函數(shù)應(yīng)當(dāng)僅限于既有合約的調(diào)用。
如果代幣合約實(shí)現(xiàn)了ERC20,那么它必須通過(guò)ERC820注冊(cè)ERC20Token接口。如果合約支持切換啟用或禁止ERC20的方法,那么每次進(jìn)行切換時(shí),該代幣合約必須通過(guò)ERC820注冊(cè)或解除RC20Token接口的注冊(cè)。
對(duì)于實(shí)現(xiàn)ERC20的新合約而言,唯一的區(qū)別在于ERC777TokensSender和ERC777TokensRecipient通過(guò)ERC820的注冊(cè)必須早于ERC20的注冊(cè)。這意味著即使是對(duì)ERC20的transfer
方法的調(diào)用,代幣合約也必須通過(guò)ERC820檢查from
或to
是否實(shí)現(xiàn)了tokensToSend
/tokensReceived
接口并在可用時(shí)進(jìn)行調(diào)用。注意當(dāng)調(diào)用合約的ERC20的transfer
方法時(shí),如果合約沒(méi)有實(shí)現(xiàn)tokensReceived
接口,那么transfer
也應(yīng)當(dāng)被接受,這意味著代幣可能會(huì)被鎖定。
感謝各位的閱讀,以上就是“ERC777規(guī)范內(nèi)容是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)ERC777規(guī)范內(nèi)容是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。