# ERC-777 :新一代的 ERC-20 ## ERC-20 :::info [官方標準](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/) ::: - ERC-20 是以太坊區塊鏈上的一種智能合約協議標準,其定義了一些界面( interface )及其須實做的內容 - 只要根據 ERC-20 實做的所有代幣都能稱為 ERC-20 token - 截至 2022 年 3 月 10 日,有在以太坊主網上有 501,141 種 ERC-20 代幣(後來過幾分鐘後看變成 501,140 :slightly_smiling_face: ,[網址](https://etherscan.io/tokens)) - 目前最有名的實做為 [OpenZeppelin 所提供](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.5.0/contracts/token/ERC20/ERC20.sol) ### ERC-20 缺點 - 若收 token 的合約沒有可以處理 ERC-20 的 function ,則 token 會被卡死在合約內(也因此造成數百萬美元的損失) - 若使用者需要將 token 交由其他人或合約操作,則須先呼叫 ERC-20 的 `approve` 函式以授權該人或合約,再由授權人或合約呼叫 `transferFrom` 來轉帳(**兩次 function call** ) - 轉帳時無法攜帶額外訊息( `transfer(dest, value)` )  ## ERC-777 :::info [官方標準](https://ethereum.org/en/developers/docs/standards/tokens/erc-777/) ::: - ERC-777 和 ERC-20 同樣是 fungible token ,並向後/下兼容 ERC-20 - 轉帳時可以攜帶訊息( `send(dest, value, data)` ) - 原本的 `transfer` 仍然保留(向後/下兼容) - 引入**操作員**( operator )機制,可以將 token 授權給操作員操作 - 若讓交易所成為你的操作員時,可以讓交易所更方便處理你的 token - 分**默認操作者**(權限大)和**指定操作者** - 讓代幣發送方和接收方都能夠自訂代幣處理方式,在轉帳時自動觸發執行 - 即 **hooks** - 例如:自訂黑白名單等 ### ERC-1820 :::info [官方文件](https://eips.ethereum.org/EIPS/eip-1820) ::: - **簡單而言**,任何和 ERC-777 token 操作相關的合約應該要和 ERC-1820 合約註冊 - 詳見 ERC-777 和 ERC-1820 的文件 - ERC-1820 合約在各個以太鏈(無論是主網還是測試網)上的位置都是 `0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24` ,並且是唯一一份實做 - OpenZeppelin 已經幫你實做好了 ### 快速實做 ```solidity // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.7; import "@openzeppelin/contracts/token/ERC777/ERC777.sol"; contract ABC is ERC777 { constructor(address[] memory defaultOperators) ERC777("Alphabet Coin", "ABC", defaultOperators) { _mint(msg.sender, 2022 * 10 ** 18, "", ""); // 2022 ABC } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up