少妇伦子伦精品无吗,国产在线精品一区在线观看,精品久久久久久无码专区不卡,99久久免费国产精精品

Hero Circle Shape
Hero Moon Shape
Hero Right Shape
imtoken錢包網(wǎng)站下載|erc20是屬于什么錢包

imtoken錢包網(wǎng)站下載|erc20是屬于什么錢包

  • 作者: imtoken錢包網(wǎng)站下載
  • 2024-03-16 05:19:29

USDT充幣提幣ERC20、TRC20、Omni如何選擇?有啥區(qū)別? - 知乎

USDT充幣提幣ERC20、TRC20、Omni如何選擇?有啥區(qū)別? - 知乎切換模式寫文章登錄/注冊(cè)USDT充幣提幣ERC20、TRC20、Omni如何選擇?有啥區(qū)別?usdt區(qū)塊鏈?zhǔn)乾F(xiàn)在,區(qū)塊鏈?zhǔn)俏磥?lái)。在充提USDT的時(shí)候,投資者發(fā)現(xiàn)有3個(gè)不同的鏈類型供選擇,分別是ERC20、TRC20和Omni,而大多數(shù)投資者就卡在這里了,在三者之間不知道該如何選擇,甚至都不了解這三者是什么,簡(jiǎn)單點(diǎn)說(shuō)ERC20是以太坊區(qū)塊鏈的鏈類型,TRC20是波場(chǎng)區(qū)塊鏈的鏈類型,而Omni是比特幣區(qū)塊鏈網(wǎng)絡(luò)的鏈類型。USDT充幣提幣ERC20、TRC20、Omni如何選擇?除了地址不同之外,選擇不同的鏈類型,轉(zhuǎn)轉(zhuǎn)賬的速度和手續(xù)費(fèi)也是不一樣的。如果你希望可以快速轉(zhuǎn)賬,追求的是速度,那就應(yīng)該選擇波場(chǎng)區(qū)塊鏈的TRC20鏈類型。波場(chǎng)網(wǎng)絡(luò)TPS達(dá)到1500TPS,目前來(lái)說(shuō)轉(zhuǎn)賬最快到賬的是波場(chǎng)USDT。如果你在意的是手續(xù)費(fèi),希望轉(zhuǎn)賬手續(xù)費(fèi)能低一些,那也應(yīng)該選擇TRC20鏈類型。因?yàn)門RC20鏈類型轉(zhuǎn)賬,手續(xù)費(fèi)為0。而ERC20鏈類型的手續(xù)費(fèi)是2USDT,大概是14塊錢。OMIN鏈類型手續(xù)費(fèi)最貴,需要5個(gè)USDT,大概是35人民幣。但是如果你希望轉(zhuǎn)賬能安全一點(diǎn),那就選擇比特幣網(wǎng)絡(luò)的OMIN鏈類型,這個(gè)鏈類型雖然手續(xù)費(fèi)高了一點(diǎn),但是安全性好。貴,也是有道理的嘛。USDT充幣提幣ERC20、TRC20、Omni有啥區(qū)別?1、Omni-USDT的安全性最好,但轉(zhuǎn)賬速度太慢。要是你有不著急交易的大額訂單,可以優(yōu)先選擇Omni-USDT。2014年,USDT于比特幣網(wǎng)絡(luò)上誕生,于2015年2月正式上線幾大主流交易所。在2018年之前,USDT的轉(zhuǎn)賬路徑只有一條,那就是基于比特幣網(wǎng)絡(luò)的Omni-USDT。Omni-USDT存儲(chǔ)在比特幣地址上,因此每次轉(zhuǎn)賬的時(shí)候,需要支付比特幣作為礦工手續(xù)費(fèi)。Omni-USDT于比特幣網(wǎng)絡(luò)的鏈上,黑客攻擊的成本很高,所以資產(chǎn)相對(duì)安全性較高。但是其交易速度非常慢,已經(jīng)無(wú)法滿足當(dāng)今加密交易市場(chǎng)的需求,但很多大宗交易還是會(huì)傾向于Omni-USDT。2、ERC20-USDT的安全性和轉(zhuǎn)賬速度居中。適用于數(shù)字貨幣市場(chǎng)的頻繁交易。要是你經(jīng)常做短線交易,可以優(yōu)先選擇ERC20-USDT。2018年,以太坊網(wǎng)絡(luò)開始流行,在區(qū)塊鏈應(yīng)用也大面積展開,ERC20-USDT出現(xiàn)。和Omni-USDT一樣,使用ERC20-USDT同樣需要支付曠工費(fèi),但轉(zhuǎn)賬速度有了顯著的提升。由于安全性好、轉(zhuǎn)賬速度快,ERC20-USDT被市場(chǎng)廣泛接受,USDT的發(fā)行者泰達(dá)公司也開始支持更高效的以太坊ERC20。由于綜合指數(shù)比較高,在主流交易平臺(tái)比較受歡迎。3、TRC20-USDT的轉(zhuǎn)賬速度最快,而且鏈上轉(zhuǎn)賬無(wú)需手續(xù)費(fèi),但安全性比較低。適合需要快速到賬的朋友,建議小額為主,現(xiàn)在一次轉(zhuǎn)賬一般都只需要幾分鐘時(shí)間。2019年,泰達(dá)公司宣布在波場(chǎng)上發(fā)行了基于TRC-20協(xié)議的USDT,TRC20-USDT誕生。發(fā)行時(shí)承諾完全公開透明,零轉(zhuǎn)賬費(fèi),秒級(jí)到賬。和前兩者不同的是,目前TRC20-USDT轉(zhuǎn)賬是不收取手續(xù)費(fèi)的。ERC20、TRC20、Omni這三種類型的USDT在交易所內(nèi)并沒(méi)有差別,但在鏈上是不互通的,也就是說(shuō)Omni上的USDT是無(wú)法轉(zhuǎn)到另外兩條鏈上的,所以在交易所充提USDT時(shí)一定要留意地址種類。發(fā)布于 2021-03-15 14:34比特幣 (Bitcoin)USDT比特幣合約?贊同 136??30 條評(píng)論?分享?喜歡?收藏?申請(qǐng)

ERC-20是什么? - 知乎

ERC-20是什么? - 知乎切換模式寫文章登錄/注冊(cè)ERC-20是什么?愛(ài)麗森夢(mèng)游市場(chǎng)MBA/ 金融管理/區(qū)塊鏈/人工智能什么是Token(代幣)?在Ethereum中,代幣幾乎可以代表任何東西,從在線平臺(tái)的信譽(yù)點(diǎn)、游戲中角色的技能、彩票到金融資產(chǎn)債券,再到真正的商品,如公司的股份、貨幣、金盎司等!如此強(qiáng)大的功能,值得也必須處理好。如此強(qiáng)大的功能,理應(yīng)也必須由一個(gè)強(qiáng)大的標(biāo)準(zhǔn)來(lái)處理,對(duì)嗎?這正是ERC-20的作用所在,ERC-20就是針對(duì)這些發(fā)布的Token(代幣)制定的一個(gè)固定的基礎(chǔ)的標(biāo)準(zhǔn)原則。什么是ERC-20?ERC-20引入了可替代Token(代幣)的標(biāo)準(zhǔn),換句話說(shuō),它們具有使每個(gè)Token(代幣)與另一個(gè)Token(代幣)完全相同(在類型和價(jià)值上)的屬性。例如,ERC-20,Token(代幣)的行為與ETH相同,這意味著任意1個(gè)遵循ERC-20規(guī)則的Token(代幣)與所有其他所有Token(代幣)是平等和相同的。由Fabian Vogelsteller在2015年11月提出的ERC-20(以太坊請(qǐng)求注釋20)是一種Token標(biāo)準(zhǔn),在智能合約中實(shí)現(xiàn)了Token的API。(注:API(token)是一個(gè)通用術(shù)語(yǔ)。通常,API(token)是請(qǐng)求訪問(wèn)您的服務(wù)的應(yīng)用程序的唯一標(biāo)識(shí)符。您的服務(wù)將為應(yīng)用程序生成API(token),以供您在請(qǐng)求服務(wù)時(shí)使用。然后,您可以將它們提供的令牌與您存儲(chǔ)的令牌進(jìn)行匹配,以進(jìn)行身份 驗(yàn)證)它提供的功能類似于將Token(代幣)從一個(gè)帳戶轉(zhuǎn)移到另一個(gè)帳戶,以獲取帳戶的當(dāng)前Token(代幣)錢包內(nèi)的余額以及網(wǎng)絡(luò)上可用Token(代幣)的總供應(yīng)量。除了這些之外,它還具有其他一些功能,例如批準(zhǔn)第三方帳戶可以使用帳戶中的Token(代幣)數(shù)量。如果智能合約實(shí)施以下方法和事件,則可以稱為ERC-20 ,Token(代幣)合約,一旦部署,它將負(fù)責(zé)在以太坊上跟蹤創(chuàng)建的Token(代幣)(注:網(wǎng)上擁有這種標(biāo)準(zhǔn)的ERC-20代碼,就是為了方便程序員編程時(shí)候可以直接應(yīng)用,有興趣的可以自己搜索看看)ERC-20 定義通用規(guī)則?截至2019年10月,以太坊的主網(wǎng)絡(luò)上存在超過(guò)200,000個(gè)與ERC-20兼容的Token(代幣)。ERC-20至關(guān)重要。它定義了所有以太坊Token(代幣)必須遵守的通用規(guī)則列表。這些規(guī)則中,包括如何傳輸Token(代幣),如何批準(zhǔn)交易,用戶如何訪問(wèn)有關(guān)Token(代幣)的數(shù)據(jù)以及Token(代幣)的總供應(yīng)量。 因此,這個(gè)特殊的Token(代幣)使所有類型的開發(fā)人員都能準(zhǔn)確地預(yù)測(cè)新Token(代幣)在更大的以太坊系統(tǒng)中將如何運(yùn)行。這簡(jiǎn)化了為開發(fā)人員設(shè)定的任務(wù);他們可以繼續(xù)進(jìn)行自己的工作,因?yàn)橹灰猅oken(代幣)遵循規(guī)則,就不需要在每次發(fā)布新Token(代幣)時(shí)都重做每個(gè)新項(xiàng)目。它確保以太坊發(fā)行的許多不同令牌之間的兼容性。許多著名的數(shù)字貨幣都使用ERC-20標(biāo)準(zhǔn):包括Maker(MKR),Basic Attention Token(BAT),Augur(REP)和OmiseGO(OMG)等,以及今年火爆的Defi(去中心化金融概念),誕生了如AAVE、Compound等優(yōu)質(zhì)項(xiàng)目,用戶擁有USDT便可參與這些項(xiàng)目。如果您打算購(gòu)買任何以ERC-20,Token(代幣)發(fā)行的數(shù)字貨幣,則必須擁有一個(gè)與這些Token(代幣)兼容的錢包。幸運(yùn)的是,由于ERC-20,Token(代幣)非常流行,因此錢包有很多不同的選擇。如何確定某個(gè)代幣是否為ERC20,Token(代幣)呢?通過(guò)etherscan或者其他區(qū)塊鏈平臺(tái)查詢:ERC-20代幣有什么用?ERC20代幣的出現(xiàn),大幅降低了代幣發(fā)行門檻。只要復(fù)制網(wǎng)上的標(biāo)準(zhǔn)代碼,一個(gè)不懂編程的人也能在幾分鐘內(nèi),發(fā)行出一種新的Token(代幣)。這一便利,也催生了2017年的「1CO」熱潮,從而進(jìn)一步推動(dòng)了比特幣牛市。目前全球Token(代幣)總數(shù)超過(guò)5000種,絕大部分是ERC20的代幣,據(jù)估計(jì),至少占比超過(guò)95%,由此可見(jiàn),ERC20是一種十分流行的代幣格式。因?yàn)镋RC20的標(biāo)準(zhǔn)token(代幣)規(guī)則的便利性和統(tǒng)一性,前段時(shí)間的Defi熱潮中ERC20,Token(代幣)項(xiàng)目也表現(xiàn)得非常火爆:例如:LINK(預(yù)言機(jī)概念)取得了超過(guò)100倍的漲幅、UNI(去中心化交易所代幣)創(chuàng)出了史上最強(qiáng)空投(人均1000美元)、UMA(衍生資產(chǎn)概念)獲得了50倍的漲幅等等。發(fā)布于 2020-11-26 14:06token智能合約?贊同 16??4 條評(píng)論?分享?喜歡?收藏?申請(qǐng)

ERC-20 代幣標(biāo)準(zhǔn) | ethereum.org

20 代幣標(biāo)準(zhǔn) | ethereum.org跳轉(zhuǎn)至主要內(nèi)容學(xué)習(xí)用法構(gòu)建參與研究搜索????語(yǔ)言?ZH幫助更新此頁(yè)面本頁(yè)面有新版本,但現(xiàn)在只有英文版。請(qǐng)幫助我們翻譯最新版本。翻譯頁(yè)面沒(méi)有錯(cuò)誤!此頁(yè)面未翻譯,因此特意以英文顯示。不再顯示Change page概述基礎(chǔ)主題以太坊簡(jiǎn)介以太幣簡(jiǎn)介去中心化應(yīng)用程序簡(jiǎn)介Web2 與 Web3 的對(duì)比帳戶交易區(qū)塊以太坊虛擬機(jī) (EVM)操作碼Gas費(fèi)用節(jié)點(diǎn)和客戶端運(yùn)行節(jié)點(diǎn)客戶端多樣性節(jié)點(diǎn)即服務(wù)節(jié)點(diǎn)架構(gòu)輕客戶端歸檔節(jié)點(diǎn)引導(dǎo)節(jié)點(diǎn)網(wǎng)絡(luò)共識(shí)機(jī)制工作量證明礦工挖礦算法Dagger-HashimotoEthash權(quán)益證明Gasper弱主觀性認(rèn)證權(quán)益證明機(jī)制的獎(jiǎng)勵(lì)和懲罰權(quán)益證明攻擊與防御密鑰權(quán)益證明與工作量證明提出區(qū)塊權(quán)益正明常見(jiàn)問(wèn)題以太坊堆棧堆棧簡(jiǎn)介智能合約智能合約語(yǔ)言智能合約結(jié)構(gòu)智能合約庫(kù)測(cè)試用智能合約編譯智能合約部署智能合約驗(yàn)證智能合約升級(jí)智能合約智能合約安全性智能合約形式化驗(yàn)證可組合性開發(fā)網(wǎng)絡(luò)開發(fā)框架以太坊客戶端APIJavaScript API后端APIJSON-RPC數(shù)據(jù)和分析區(qū)塊瀏覽器存儲(chǔ)集成開發(fā)環(huán)境 (IDE)編程語(yǔ)言DartDelphi.NETGolangJavaJavaScriptPythonRubyRust語(yǔ)言高級(jí)鏈橋標(biāo)準(zhǔn)令牌標(biāo)準(zhǔn)ERC-20:同質(zhì)化代幣ERC-721:非同質(zhì)化代幣 (NFT)ERC-777ERC-1155ERC-4626最大可提取價(jià)值 (MEV)預(yù)言機(jī)縮放樂(lè)觀卷疊零知識(shí)卷疊狀態(tài)通道側(cè)鏈以太坊 Plasma 擴(kuò)容解決方案Validium數(shù)據(jù)可用性網(wǎng)絡(luò)層網(wǎng)絡(luò)地址門戶網(wǎng)絡(luò)數(shù)據(jù)結(jié)構(gòu)與編碼默克爾前綴樹遞歸長(zhǎng)度前綴編碼 (RLP)簡(jiǎn)單序列化 (SSZ)Web3 密鑰存儲(chǔ)定義設(shè)計(jì)基礎(chǔ)設(shè)計(jì)和用戶體驗(yàn)簡(jiǎn)介ERC-20 代幣標(biāo)準(zhǔn)p上次修改時(shí)間: @penglaishan.cn(opens in a new tab), Invalid DateTime查看貢獻(xiàn)者在本頁(yè)面介紹前提條件正文方法事件示例延伸閱讀介紹什么叫做代幣?代幣可以在以太坊中表示任何東西:在線平臺(tái)中的信譽(yù)積分游戲中一個(gè)角色的技能彩票卷金融資產(chǎn)類似于公司股份的資產(chǎn)像美元一樣的法定貨幣一盎司黃金及更多...以太坊的這種強(qiáng)大特點(diǎn)必須以強(qiáng)有力的標(biāo)準(zhǔn)來(lái)處理,對(duì)嗎? 這正是 ERC-20 發(fā)揮其作用的地方! 此標(biāo)準(zhǔn)允許開發(fā)者構(gòu)建可與其他產(chǎn)品和服務(wù)互相操作的代幣應(yīng)用程序。什么是 ERC-20?ERC-20 提出了一個(gè)同質(zhì)化代幣的標(biāo)準(zhǔn),換句話說(shuō),它們具有一種屬性,使得每個(gè)代幣都與另一個(gè)代幣(在類型和價(jià)值上)完全相同。 例如,一個(gè) ERC-20 代幣就像以太幣一樣,意味著一個(gè)代幣會(huì)并永遠(yuǎn)會(huì)與其他代幣一樣。前提條件帳戶智能合約代幣標(biāo)準(zhǔn)正文ERC-20(以太坊意見(jiàn)征求 20)由 Fabian Vogelsteller 提出于 2015 年 11 月。這是一個(gè)能實(shí)現(xiàn)智能合約中代幣的應(yīng)用程序接口標(biāo)準(zhǔn)。ERC-20 的功能示例包括:將代幣從一個(gè)帳戶轉(zhuǎn)到另一個(gè)帳戶獲取帳戶的當(dāng)前代幣余額獲取網(wǎng)絡(luò)上可用代幣的總供應(yīng)量批準(zhǔn)一個(gè)帳戶中一定的代幣金額由第三方帳戶使用如果智能合約實(shí)施了下列方法和事件,它可以被稱為 ERC-20 代幣合約,一旦部署,將負(fù)責(zé)跟蹤以太坊上創(chuàng)建的代幣。來(lái)自 EIP-20(opens in a new tab):方法1function name() public view returns (string)2function symbol() public view returns (string)3function decimals() public view returns (uint8)4function totalSupply() public view returns (uint256)5function balanceOf(address _owner) public view returns (uint256 balance)6function transfer(address _to, uint256 _value) public returns (bool success)7function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)8function approve(address _spender, uint256 _value) public returns (bool success)9function allowance(address _owner, address _spender) public view returns (uint256 remaining)顯示全部 復(fù)制事件1event Transfer(address indexed _from, address indexed _to, uint256 _value)2event Approval(address indexed _owner, address indexed _spender, uint256 _value) 復(fù)制示例讓我們看看如此重要的一個(gè)標(biāo)準(zhǔn)是如何使我們能夠簡(jiǎn)單地檢查以太坊上的任何 ERC-20 代幣合約。 我們只需要合約的應(yīng)用程序二進(jìn)制接口 (ABI) 來(lái)創(chuàng)造一個(gè) ERC-20 代幣界面。 下面我們將使用一個(gè)簡(jiǎn)化的應(yīng)用程序二進(jìn)制接口,讓例子變得更為簡(jiǎn)單。Web3.py 示例首先,請(qǐng)確保您已安裝 Web3.py(opens in a new tab) Python 庫(kù):1pip install web31from web3 import Web3234w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))56dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI7weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Wrapped ether (WETH)89acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 21011# This is a simplified Contract Application Binary Interface (ABI) of an ERC-20 Token Contract.12# It will expose only the methods: balanceOf(address), decimals(), symbol() and totalSupply()13simplified_abi = [14 {15 'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}],16 'name': 'balanceOf',17 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],18 'stateMutability': 'view', 'type': 'function', 'constant': True19 },20 {21 'inputs': [],22 'name': 'decimals',23 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}],24 'stateMutability': 'view', 'type': 'function', 'constant': True25 },26 {27 'inputs': [],28 'name': 'symbol',29 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],30 'stateMutability': 'view', 'type': 'function', 'constant': True31 },32 {33 'inputs': [],34 'name': 'totalSupply',35 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],36 'stateMutability': 'view', 'type': 'function', 'constant': True37 }38]3940dai_contract = w3.eth.contract(address=w3.to_checksum_address(dai_token_addr), abi=simplified_abi)41symbol = dai_contract.functions.symbol().call()42decimals = dai_contract.functions.decimals().call()43totalSupply = dai_contract.functions.totalSupply().call() / 10**decimals44addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals4546# DAI47print("===== %s =====" % symbol)48print("Total Supply:", totalSupply)49print("Addr Balance:", addr_balance)5051weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi)52symbol = weth_contract.functions.symbol().call()53decimals = weth_contract.functions.decimals().call()54totalSupply = weth_contract.functions.totalSupply().call() / 10**decimals55addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals5657# WETH58print("===== %s =====" % symbol)59print("Total Supply:", totalSupply)60print("Addr Balance:", addr_balance)顯示全部 復(fù)制延伸閱讀EIP-20:ERC-20 代幣標(biāo)準(zhǔn)(opens in a new tab)OpenZeppelin - 代幣(opens in a new tab)OpenZeppelin - ERC-20 實(shí)施(opens in a new tab)back-to-top ↑本文對(duì)你有幫助嗎?是否前一頁(yè)令牌標(biāo)準(zhǔn)下一頁(yè)ERC-721:非同質(zhì)化代幣 (NFT)編輯頁(yè)面(opens in a new tab)在本頁(yè)面介紹前提條件正文方法事件示例延伸閱讀網(wǎng)站最后更新: 2024年3月13日(opens in a new tab)(opens in a new tab)(opens in a new tab)學(xué)習(xí)學(xué)習(xí)中心什么是以太坊?什么是以太幣 (ETH)?以太坊錢包什么是 Web3?智能合約Gas fees運(yùn)行節(jié)點(diǎn)以太坊安全和預(yù)防欺詐措施測(cè)試中心以太坊詞匯表用法指南選擇錢包獲取以太幣Dapps - 去中心化應(yīng)用穩(wěn)定幣NFT - 非同質(zhì)化代幣DeFi - 去中心化金融DAO - 去中心化自治組織去中心化身份質(zhì)押ETH二層網(wǎng)絡(luò)構(gòu)建構(gòu)建者首頁(yè)教程相關(guān)文檔通過(guò)編碼來(lái)學(xué)習(xí)設(shè)置本地環(huán)境資助基礎(chǔ)主題用戶體驗(yàn)/用戶界面設(shè)計(jì)基礎(chǔ)Enterprise - Mainnet EthereumEnterprise - Private Ethereum參與社區(qū)中心在線社區(qū)以太坊活動(dòng)為 ethereum.org 做貢獻(xiàn)翻譯計(jì)劃以太坊漏洞懸賞計(jì)劃以太坊基金會(huì)以太坊基金會(huì)的博客(opens in a new tab)生態(tài)系統(tǒng)支持方案(opens in a new tab)Devcon(opens in a new tab)研究以太坊白皮書以太坊路線圖安全性增強(qiáng)以太坊技術(shù)史開放研究以太坊改進(jìn)提案 (Eip)以太坊治理關(guān)于我們以太坊品牌資產(chǎn)Code of conduct工作機(jī)會(huì)隱私政策使用條款緩存政策聯(lián)系我們(opens in a new tab)本頁(yè)面對(duì)你有幫

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Error 403 Forbidden - This request is blocked.

For security reasons you can't connect to the server for this app or website at this time.

It maybe that you have too many requests or the illegal request payload is identified as an attack.

Please try again later.

什么是ERC-20?關(guān)于ERC代幣你應(yīng)該了解的知識(shí)點(diǎn) - 知乎

什么是ERC-20?關(guān)于ERC代幣你應(yīng)該了解的知識(shí)點(diǎn) - 知乎首發(fā)于AAX學(xué)院切換模式寫文章登錄/注冊(cè)什么是ERC-20?關(guān)于ERC代幣你應(yīng)該了解的知識(shí)點(diǎn)AAX學(xué)院高流動(dòng),低點(diǎn)差——盡在aax.com你應(yīng)該聽說(shuō)過(guò)ERC-20代幣,特別是如果你關(guān)注過(guò)2017年ICO熱潮期間的加密領(lǐng)域。然而,除了ERC-20之外,還有許多其他的以太坊代幣標(biāo)準(zhǔn),比如ERC-721和ERC-223,它們給代幣提供了更多的用例。在這篇文章中,作為以太坊區(qū)塊鏈之旅的一部分,我們主要探索最重要的ERC代幣標(biāo)準(zhǔn)?!癊RC”是什么意思?ERC是Ethereum Request for Comment的縮寫,用于對(duì)代幣和以太坊生態(tài)系統(tǒng)提出改進(jìn)建議。提交ERC后,以太坊社區(qū)將對(duì)其進(jìn)行評(píng)估,并決定是否接受或拒絕該建議。獲得綠燈后,ERC將被正式確定為以太坊改進(jìn)建議(EIP)。雖然ERC大多是初始和非正式的建議,但EIP總是由以太坊核心開發(fā)者進(jìn)行審核和評(píng)估。說(shuō)到這里,”ERC “這個(gè)詞在加密貨幣社區(qū)中廣為人知,它是以太坊網(wǎng)絡(luò)上代幣的標(biāo)準(zhǔn)。簡(jiǎn)而言之,代幣標(biāo)準(zhǔn)是用來(lái)定義數(shù)據(jù)和實(shí)現(xiàn)它的每個(gè)代幣的功能。代幣的標(biāo)準(zhǔn)化使得創(chuàng)作者更容易發(fā)行幣,并將其與應(yīng)用程序集成。ERC-20范例: Tether (USDT), Chainlink (LINK), AAX Token (AAB)ERC-20是以太坊生態(tài)系統(tǒng)中最流行的代幣標(biāo)準(zhǔn),也是整個(gè)加密貨幣行業(yè)中最流行的代幣標(biāo)準(zhǔn)。ERC-20是由以太坊聯(lián)合創(chuàng)始人Vitalik Buterin在2015年6月提出的,它是一個(gè)簡(jiǎn)單的接口,允許開發(fā)者在以太坊區(qū)塊鏈之上創(chuàng)建他們的代幣,并將其與第三方應(yīng)用程序(如錢包和交易所)集成。除了允許創(chuàng)建者使用簡(jiǎn)單的功能,比如限制他們的幣的總供應(yīng)量,ERC-20代幣、去中心化應(yīng)用(DApps)和智能合約之間也有直接的互動(dòng)。需要強(qiáng)調(diào)的是,ERC-20代幣是可以互換的資產(chǎn)。就像百元大鈔或標(biāo)準(zhǔn)金條一樣,可互換代幣是具有等值單位的相同資產(chǎn)。由于創(chuàng)建ERC-20代幣很容易,大多數(shù)加密項(xiàng)目在2017年的ICO熱潮中使用該標(biāo)準(zhǔn)來(lái)發(fā)行他們的原生幣,并將其出售給出資者。因此,ERC-20是加密行業(yè)最廣泛接受的代幣標(biāo)準(zhǔn),大多數(shù)數(shù)字資產(chǎn)錢包、交易所(包括AAX)和其他服務(wù)都支持該標(biāo)準(zhǔn)。ERC223范例:暫無(wú)ERC-223是以太坊生態(tài)系統(tǒng)中的一個(gè)可互換代幣標(biāo)準(zhǔn),其主要目標(biāo)是解決ERC-20的一些問(wèn)題。雖然ERC-20在加密項(xiàng)目和用戶中非常受歡迎,但它允許人們將加密貨幣發(fā)送到智能合約而不是錢包。因此,一些用戶由于合約失敗或其他原因而失去了他們的資金。為了解決這個(gè)問(wèn)題,ERC-223有一個(gè)功能,在用戶不小心將代幣發(fā)送到智能合約的情況下,會(huì)自動(dòng)提醒用戶。這樣的交易會(huì)被自動(dòng)取消,讓用戶收回資金(但還是要支付礦工費(fèi))。雖然它向下兼容ERC-20幣,但ERC-223的特點(diǎn)是比之更低廉的礦工費(fèi)。然而,盡管ERC-223具有優(yōu)勢(shì),但它未能被以太坊社區(qū)采用,也尚未有加密項(xiàng)目使用該代幣標(biāo)準(zhǔn)。ERC-721范例: CryptoKitties, Sorare與ERC-20和ERC-223相反,ERC-721是一個(gè)不可替代的代幣(NFT)標(biāo)準(zhǔn)。這里的每個(gè)代幣不是相同的硬幣,而是獨(dú)一無(wú)二的,具有自己的標(biāo)識(shí)符,便于通過(guò)區(qū)塊鏈進(jìn)行驗(yàn)證。雖然可互換代幣具有類似于標(biāo)準(zhǔn)金條或同值美元鈔票的功能,但ERC-721幣更像是藝術(shù)品或其他(復(fù)雜的)手工制作的物品,每件物品都是獨(dú)一無(wú)二的,在某些方面與其他物品不同。雖然它們有多種應(yīng)用,但NFT最受歡迎的用例是在區(qū)塊鏈游戲解決方案中。通過(guò)非同質(zhì)的代幣,區(qū)塊鏈游戲玩家可以收集、擁有和交易獨(dú)特的游戲物品,如武器、角色、衣服、坐騎和車輛。此外,ERC-721代幣標(biāo)準(zhǔn)允許創(chuàng)作者在多個(gè)區(qū)塊鏈游戲和應(yīng)用中集成NFT,讓游戲玩家無(wú)論在哪里玩都能使用他們的數(shù)字收藏品。ERC-1155范例:EnjinERC-1155是一種混合代幣標(biāo)準(zhǔn),允許開發(fā)人員在一個(gè)智能合約下創(chuàng)建無(wú)限的可替代代幣和不可替代代幣。開發(fā)者在使用ERC-721時(shí)必須為每個(gè)NFT創(chuàng)建一個(gè)新的智能合約,而在使用ERC-1155時(shí),他們只需要為非可替代代幣和可互替代代幣部署一個(gè)智能合約,從而縮短了開發(fā)時(shí)間,并最大限度地減少了創(chuàng)建者使用的資源。在區(qū)塊鏈游戲中,這使得加密貨幣項(xiàng)目可以使用單一的智能合約來(lái)發(fā)行他們的游戲內(nèi)貨幣作為可替代的代幣,同時(shí)讓用戶在參與游戲的過(guò)程中收集NFT項(xiàng)目。關(guān)于AAX學(xué)院AAX是由LSEG Technology公司提供技術(shù)支持的數(shù)字資產(chǎn)交易所。AAX學(xué)院是AAX打造的一檔用戶教育頻道,旨在幫助更多用戶學(xué)習(xí)新手教程和了解到關(guān)于區(qū)塊鏈的基礎(chǔ)知識(shí)。 發(fā)布于 2020-09-22 08:38首次代幣發(fā)行(ICO)數(shù)字化資產(chǎn)token?贊同 5??1 條評(píng)論?分享?喜歡?收藏?申請(qǐng)轉(zhuǎn)載?文章被以下專欄收錄AAX學(xué)院帶來(lái)最前沿的區(qū)塊鏈資訊知識(shí),探究區(qū)塊鏈背后

ERC20解讀 | 登鏈社區(qū) | 區(qū)塊鏈技術(shù)社區(qū)

ERC20解讀 | 登鏈社區(qū) | 區(qū)塊鏈技術(shù)社區(qū)

文章

問(wèn)答

講堂

專欄

集市

更多

提問(wèn)

發(fā)表文章

活動(dòng)

文檔

招聘

發(fā)現(xiàn)

Toggle navigation

首頁(yè) (current)

文章

問(wèn)答

講堂

專欄

活動(dòng)

招聘

文檔

集市

搜索

登錄/注冊(cè)

ERC20解讀

Confucian

更新于 2022-04-04 19:54

閱讀 6967

對(duì)ERC20代幣標(biāo)準(zhǔn)的個(gè)人解讀

# ERC20解讀

**參考 **[**OpenZepplin文檔**](https://docs.openzeppelin.com/contracts/4.x/erc20)** 和 **[**以太坊官方開發(fā)者文檔**](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)**,結(jié)合自己的理解。**

博客的 Markdown 編輯器暫不支持 Solidity 語(yǔ)法高亮,為了更好閱讀代碼,可以去 [**我的GitHub倉(cāng)庫(kù)**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/tree/main/ERC20) 。

## **什么是ERC20**

**ERC20(Ethereum Request for Comments 20)一種代幣標(biāo)準(zhǔn)。**[**EIP-20**](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) 中提出。

**ERC20 代幣合約跟蹤同質(zhì)化(可替代)代幣:任何一個(gè)代幣都完全等同于任何其他代幣;沒(méi)有任何代幣具有與之相關(guān)的特殊權(quán)利或行為。這使得 ERC20 代幣可用于交換貨幣、投票權(quán)、質(zhì)押等媒介。**

## **為什么要遵守ERC20**

**EIP-20 中的動(dòng)機(jī):**

> **允許以太坊上的任何代幣被其他應(yīng)用程序(從錢包到去中心化交易所)重新使用的標(biāo)準(zhǔn)接口。**

**以太坊上的所有應(yīng)用都默認(rèn)支持 ERC20 ,如果你想自己發(fā)幣,那么你的代碼必須遵循 ERC20 標(biāo)準(zhǔn),這樣錢包(如MetaMask)等應(yīng)用才能將你的幣顯示出來(lái)。**

## **代碼實(shí)現(xiàn)**

**需要實(shí)現(xiàn)以下函數(shù)和事件:**

```

function name() public view returns (string)

function symbol() public view returns (string)

function decimals() public view returns (uint8)

function totalSupply() public view returns (uint256)

function balanceOf(address _owner) public view returns (uint256 balance)

function transfer(address _to, uint256 _value) public returns (bool success)

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

function approve(address _spender, uint256 _value) public returns (bool success)

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

?

event Transfer(address indexed _from, address indexed _to, uint256 _value)

event Approval(address indexed _owner, address indexed _spender, uint256 _value)

```

**使用 OpenZeppllin 提供的庫(kù)能夠輕松快速地構(gòu)建 ERC20 Token 。**

### **快速構(gòu)建**

**這是一個(gè) GLD token 。**

```

// contracts/GLDToken.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

?

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

?

contract GLDToken is ERC20 {

constructor(uint256 initialSupply) ERC20("Gold", "GLD") {

_mint(msg.sender, initialSupply);

}

}

```

**通常,我們定義代幣的發(fā)行量和代幣名稱及符號(hào)。**

### **IERC20**

**先來(lái)看下 ERC20 的接口(IERC20),這方便我們?cè)陂_發(fā)中直接定義 ERC20 代幣。**

**同樣地,OpenZepplin 為我們提供了相應(yīng)的庫(kù),方便開發(fā)者導(dǎo)入即用。**

```

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

```

****EIP 中定義的 ERC20 標(biāo)準(zhǔn)接口:****

```

pragma solidity ^0.8.0;

?

interface IERC20 {

event Transfer(address indexed from, address indexed to, uint256 value);

event Approval(address indexed owner, address indexed spender, uint256 value);

function totalSupply() external view returns (uint256);

function balanceOf(address account) external view returns (uint256);

function transfer(address to, uint256 amount) external returns (bool);

function allowance(address owner, address spender) external view returns (uint256);

function approve(address spender, uint256 amount) external returns (bool);

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

}

```

#### **逐一分析**

**函數(shù):**

* `totalSupply()` :返回總共的代幣數(shù)量。

* `balanceOf(address account)` :返回 `account` 地址擁有的代幣數(shù)量。

* `transfer(address to, uint256 amount)` :將 **`amount`** 數(shù)量的代幣發(fā)送給 **`to`** 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) **`Transfer`** 事件。

* `allowance(address owner, address spender)` :返回授權(quán)花費(fèi)者 **`spender`** 通過(guò) **`transferFrom`** 代表所有者花費(fèi)的剩余代幣數(shù)量。默認(rèn)情況下為零。當(dāng) **`approve`** 和 **`transferFrom`** 被調(diào)用時(shí),值將改變。

* `approve(address spender, uint256 amount)` :授權(quán) **`spender`** 可以花費(fèi) **`amount`** 數(shù)量的代幣,返回布爾值告知是否執(zhí)行成功。觸發(fā) **`Approval`** 事件。

* `transferFrom(address from, address to, uint256 amount)` :將 **`amount`** 數(shù)量的代幣從 **`from`** 地址發(fā)送到 **`to`** 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) **`Transfer`** 事件。

**事件(定義中的 **`indexed`** 便于查找過(guò)濾):**

* `Transfer(address from, address to, uint256 value)` :當(dāng)代幣被一個(gè)地址轉(zhuǎn)移到另一個(gè)地址時(shí)觸發(fā)。注意:轉(zhuǎn)移的值可能是 0 。

* `Approval(address owner, address spender, uint256 value)` :當(dāng)代幣所有者授權(quán)別人使用代幣時(shí)觸發(fā),即調(diào)用 **`approve`** 方法。

#### **元數(shù)據(jù)**

**一般除了上述必須實(shí)現(xiàn)的函數(shù)外,還有一些別的方法:**

* `name()` :返回代幣名稱

* `symbol()` :返回代幣符號(hào)

* `decimals()` :返回代幣小數(shù)點(diǎn)后位數(shù)

### **ERC20**

**來(lái)看下 ERC20 代幣具體是怎么寫的。**

**同樣,OpenZepplin 提供了現(xiàn)成的合約代碼:**

```

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

```

這里貼一個(gè)GitHub源碼鏈接 [**OpenZepplin ERC20**](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol)

#### **函數(shù)概覽**

```

constructor(name_, symbol_)

name()

symbol()

decimals()

totalSupply()

balanceOf(account)

transfer(to, amount)

allowance(owner, spender)

approve(spender, amount)

transferFrom(from, to, amount)

increaseAllowance(spender, addedValue)

decreaseAllowance(spender, subtractedValue)

_transfer(from, to, amount)

_mint(account, amount)

_burn(account, amount)

_approve(owner, spender, amount)

_spendAllowance(owner, spender, amount)

_beforeTokenTransfer(from, to, amount)

_afterTokenTransfer(from, to, amount)

```

****事件(同 IERC20)****

```

Transfer(from, to, value)

Approval(owner, spender, value)

```

#### **逐一分析**

* `constructor(string name, string symbol)` :設(shè)定代幣的名稱和符號(hào)。**`decimals`** 默認(rèn)是 18 ,要修改成不同的值你應(yīng)該重載它。這兩個(gè)值是不變的,只在構(gòu)造時(shí)賦值一次。

* `name()` :返回代幣的名稱。

* `symbol()` :返回代幣的符號(hào),通常是名稱的縮寫。

* `decimals()` :返回小數(shù)點(diǎn)后位數(shù),通常是 18 ,模仿 Ether 和 wei 。要更改就重寫它。

`totalSupply()、balanceOf(address account)、transfer(address to, uint256 amount)、 allowance(address owner, address spender)、approve(address spender, uint256 amount)、transferFrom(address from, address to, uint256 amount)` 都參考 IERC20 。

* `increaseAllowance(address spender, uint256 addedValue)` :以原子的方式增加 **`spender`** 額度。返回布爾值告知是否執(zhí)行成功,觸發(fā) **`Approval`** 事件。

* `_transfer(address from, address to, uint256 amount)` :轉(zhuǎn)賬。這個(gè)內(nèi)部函數(shù)相當(dāng)于 **`transfer`** ,可以用于例如實(shí)施自動(dòng)代幣費(fèi)用,削減機(jī)制等。觸發(fā) **`Transfer`** 事件。

* `_mint(address account, uint256 amount)` :鑄造 **`amount`** 數(shù)量的代幣給 **`account`** 地址,增加總發(fā)行量。觸發(fā) **`Transfer`** 事件,其中參數(shù) **`from`** 是零地址。

* `_burn(address account, uint256 amount)` :從 **`account`** 地址中燒毀 **`amount`** 數(shù)量的代幣,減少總發(fā)行量。觸發(fā) **`Transfer`** 事件,其中參數(shù) **`to`** 是零地址。

* `_approve(address owner, uint256 spender, uint256 amount)` :設(shè)定允許 **`spender`** 花費(fèi) **`owner`** 的代幣數(shù)量。這個(gè)內(nèi)部函數(shù)相當(dāng)于 **`approve`** ,可以用于例如為某些子系統(tǒng)設(shè)置自動(dòng)限額等。

* `spendAllowance(address owner, address spender, uint256 amount)` :花費(fèi) **`amount`** 數(shù)量的 **`owner`** 授權(quán) **`spender`** 的代幣。在無(wú)限 allowance 的情況下不更新 allowance 金額。如果沒(méi)有足夠的余量,則恢復(fù)??赡苡|發(fā) **`Approval`** 事件。

* `_beforeTokenTransfer(address from, address to, uint256 amount)` :在任何代幣轉(zhuǎn)賬前的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

* **當(dāng) **`from`** 和 **`to`** 都不是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將發(fā)送給 **`to`** 。

* **當(dāng) **`from`** 是零地址時(shí),將給 **`to`** 鑄造 **`amount`** 數(shù)量的代幣。**

* **當(dāng) **`to`** 是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將被燒毀。

* `from` 和 **`to`** 不能同時(shí)為零地址。

* `_afterTokenTransfer(address from, address to, uint256 amount)` :在任何代幣轉(zhuǎn)賬后的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

* **當(dāng) **`from`** 和 **`to`** 都不是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將發(fā)送給 **`to`** 。

* **當(dāng) **`from`** 是零地址時(shí),將給 **`to`** 鑄造 **`amount`** 數(shù)量的代幣。**

* **當(dāng) **`to`** 是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將被燒毀。

* `from` 和 **`to`** 不能同時(shí)為零地址。

#### **小結(jié)**

**ERC20 代碼中的 **`_transfer`**、**`_mint`**、**`_burn`**、**`_approve`**、**`_spendAllowance`**、**`_beforeTokenTransfer`**、**`_afterTokenTransfer` 都是 **`internal`** 函數(shù)(其余為 **`public`** ),也就是說(shuō)它們只能被派生合約調(diào)用。

## **從零開始,自己動(dòng)手**

### **1.編寫IERC20**

[**IERC20.sol**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/blob/main/ERC20/contracts/IERC20.sol)

```

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

interface IERC20 {

/// @dev 總發(fā)行量

function totoalSupply() external view returns (uint256);

/// @dev 查看地址余額

function balanceOf(address account) external view returns (uint256);

/// @dev 單地址轉(zhuǎn)賬

function transfer(address account, uint256 amount) external returns (bool);

/// @dev 查看被授權(quán)人代表所有者花費(fèi)的代幣余額

function allowance(address owner, address spender) external view returns (uint256);

/// @dev 授權(quán)別人花費(fèi)你擁有的代幣

function approve(address spender, uint256 amount) external returns (bool);

/// @dev 雙地址轉(zhuǎn)賬

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

?

/// @dev 發(fā)生代幣轉(zhuǎn)移時(shí)觸發(fā)

event Transfer(address indexed from, address indexed to, uint256 value);

/// @dev 授權(quán)時(shí)觸發(fā)

event Approval(address indexed owner, address indexed spender, uint256 value);

}

```

### **2.加上Metadata**

[**IERC20Metadata.sol**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/blob/main/ERC20/contracts/IERC20Metadata.sol)

```

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "IERC20.sol";

?

interface IERC20Metadata is IERC20 {

/// @dev 代幣名稱

function name() external view returns (string memory);

/// @dev 代幣符號(hào)

function symbol() external view returns (string memory);

/// @dev 小數(shù)點(diǎn)后位數(shù)

function decimals() external view returns (uint8);

}

```

### **3.編寫ERC20**

[**ERC20.sol**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/blob/main/ERC20/contracts/ERC20.sol)

```

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "./IERC20.sol";

import "./IERC20Metadata.sol";

?

contract ERC20 is IERC20, IERC30Metadata {

// 地址余額

mapping(address => uint256) private _balances;

// 授權(quán)地址余額

mapping(address => mapping(address => uint256)) private _allowances;

?

uint256 private _totalSupply;

?

string private _name;

string private _symbol;

?

/// @dev 設(shè)定代幣名稱符號(hào)

constructor(string memory name_, string memory symbol_) {

_name = name_;

_symbol = symbol_;

}

?

function name() public view virtual override returns (string memory) {

return _name;

}

?

function symbol() public view virtual override returns (string memory) {

return _symbol;

}

?

/// @dev 小數(shù)點(diǎn)位數(shù)一般為 18

function decimals() public view virtual override returns (uint8) {

return 18;

}

?

function totalSupply() public view virtual override returns (uint256) {

return _totalSupply;

}

?

function balanceOf(address account) public view virtual override returns (uint256) {

return _balances[account];

}

?

function transfer(address to, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_transfer(owner, to, amount);

return true;

}

?

function allowance(address owner, address spender) public view virtual override returns (uint256) {

return _allowances[owner][spender];

}

?

function approve(address spender, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_approve(owner, spender, amount);

return true;

}

?

function transferFrom(

address from,

address to,

uint256 amount

) public virtual override returns (bool) {

address spender = msg.sender;

_spendAllowance(from, spender, amount);

_transfer(from, to, amount);

return true;

}

?

function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {

address owner = msg.sender;

_approve(owner, spender, _allowances[owner][spender] + addedValue);

return true;

}

?

function decreaseAllowance(address spender, uint256 substractedValue) public virtual returns (bool) {

address owner = msg.sender;

uint256 currentAllowance = _allowances[owner][spender];

require(currentAllowance >= substractedValue, "ERC20: decreased allowance below zero");

unchecked {

_approval(owner, spender, currentAllowance - substractedValue);

}

return true;

}

?

function _transfer(

address from,

address to,

uint256 amount

) internal virtual {

require(from != address(0), "ERC20: transfer from the zero address");

require(to != address(0), "ERC20: transfer to the zero address");

?

_beforeTokenTransfer(from, to, amount);

?

uint256 fromBalance = _balances[from];

require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

unchecked {

_balances[from] = fromBalance - amount;

}

_balances[to] += amount;

?

emit Transfer(from, to, amount);

?

_afterTokenTransfer(from, to, amount);

}

?

function _mint(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: mint to the zero address");

?

_beforeTokenTransfer(address(0), account, amount);

?

_totalSupply += amount;

_balances[account] += amount;

emit Transfer(address(0), account, amount);

?

_afterTokenTransfer(address(0), account, amount);

}

?

function _burn(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: burn from the zero address");

?

_beforeTokenTransfer(account, address(0), amount);

?

uint256 accountBalance = _balances[account];

require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

unchecked {

_balances[account] = accountBalance - amount;

}

_totalSupply -= amount;

?

emit Transfer(account, address(0), amount);

?

_afterTokenTransfer(account, address(0), amount);

}

?

function _approve(

address owner,

address spender,

uint256 amount

) internal virtual {

require(owner != address(0), "ERC20: approve from the zero address");

require(spender != address(0), "ERC20: approve to the zero address");

?

_allowances[owner][spender];

emit Approval(owner, spender, amount);

}

?

function _spendAllowance(

address owner,

address spender,

uint256 amount

) internal virtual {

uint256 currentAllowance = allowance(owner, spender);

if (currentAllowance != type(uint256).max) {

require(currentAllowance >= amount, "ERC20: insufficient allowance");

unchecked {

_approve(owner, spender, currentAllowance - amount);

}

}

}

?

function _beforeTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

?

function _afterTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

}

```

## **總結(jié)**

**ERC20 其實(shí)就是一種最常見(jiàn)的代幣標(biāo)準(zhǔn),它明確了同質(zhì)化代幣的經(jīng)典功能并規(guī)范了開發(fā)者編寫 token 時(shí)的代碼,從而方便各種應(yīng)用適配。**

ERC20解讀

參考 OpenZepplin文檔 和 以太坊官方開發(fā)者文檔,結(jié)合自己的理解。

博客的 Markdown 編輯器暫不支持 Solidity 語(yǔ)法高亮,為了更好閱讀代碼,可以去 我的GitHub倉(cāng)庫(kù) 。

什么是ERC20

ERC20(Ethereum Request for Comments 20)一種代幣標(biāo)準(zhǔn)。EIP-20 中提出。

ERC20 代幣合約跟蹤同質(zhì)化(可替代)代幣:任何一個(gè)代幣都完全等同于任何其他代幣;沒(méi)有任何代幣具有與之相關(guān)的特殊權(quán)利或行為。這使得 ERC20 代幣可用于交換貨幣、投票權(quán)、質(zhì)押等媒介。

為什么要遵守ERC20

EIP-20 中的動(dòng)機(jī):

允許以太坊上的任何代幣被其他應(yīng)用程序(從錢包到去中心化交易所)重新使用的標(biāo)準(zhǔn)接口。

以太坊上的所有應(yīng)用都默認(rèn)支持 ERC20 ,如果你想自己發(fā)幣,那么你的代碼必須遵循 ERC20 標(biāo)準(zhǔn),這樣錢包(如MetaMask)等應(yīng)用才能將你的幣顯示出來(lái)。

代碼實(shí)現(xiàn)

需要實(shí)現(xiàn)以下函數(shù)和事件:

function name() public view returns (string)

function symbol() public view returns (string)

function decimals() public view returns (uint8)

function totalSupply() public view returns (uint256)

function balanceOf(address _owner) public view returns (uint256 balance)

function transfer(address _to, uint256 _value) public returns (bool success)

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

function approve(address _spender, uint256 _value) public returns (bool success)

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

?

event Transfer(address indexed _from, address indexed _to, uint256 _value)

event Approval(address indexed _owner, address indexed _spender, uint256 _value)

使用 OpenZeppllin 提供的庫(kù)能夠輕松快速地構(gòu)建 ERC20 Token 。

快速構(gòu)建

這是一個(gè) GLD token 。

// contracts/GLDToken.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

?

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

?

contract GLDToken is ERC20 {

constructor(uint256 initialSupply) ERC20("Gold", "GLD") {

_mint(msg.sender, initialSupply);

}

}

通常,我們定義代幣的發(fā)行量和代幣名稱及符號(hào)。

IERC20

先來(lái)看下 ERC20 的接口(IERC20),這方便我們?cè)陂_發(fā)中直接定義 ERC20 代幣。

同樣地,OpenZepplin 為我們提供了相應(yīng)的庫(kù),方便開發(fā)者導(dǎo)入即用。

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

EIP 中定義的 ERC20 標(biāo)準(zhǔn)接口:

pragma solidity ^0.8.0;

?

interface IERC20 {

event Transfer(address indexed from, address indexed to, uint256 value);

event Approval(address indexed owner, address indexed spender, uint256 value);

function totalSupply() external view returns (uint256);

function balanceOf(address account) external view returns (uint256);

function transfer(address to, uint256 amount) external returns (bool);

function allowance(address owner, address spender) external view returns (uint256);

function approve(address spender, uint256 amount) external returns (bool);

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

}

逐一分析

函數(shù):

totalSupply() :返回總共的代幣數(shù)量。

balanceOf(address account) :返回 account 地址擁有的代幣數(shù)量。

transfer(address to, uint256 amount) :將 amount 數(shù)量的代幣發(fā)送給 to 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) Transfer 事件。

allowance(address owner, address spender) :返回授權(quán)花費(fèi)者 spender 通過(guò) transferFrom 代表所有者花費(fèi)的剩余代幣數(shù)量。默認(rèn)情況下為零。當(dāng) approve 和 transferFrom 被調(diào)用時(shí),值將改變。

approve(address spender, uint256 amount) :授權(quán) spender 可以花費(fèi) amount 數(shù)量的代幣,返回布爾值告知是否執(zhí)行成功。觸發(fā) Approval 事件。

transferFrom(address from, address to, uint256 amount) :將 amount 數(shù)量的代幣從 from 地址發(fā)送到 to 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) Transfer 事件。

事件(定義中的 indexed 便于查找過(guò)濾):

Transfer(address from, address to, uint256 value) :當(dāng)代幣被一個(gè)地址轉(zhuǎn)移到另一個(gè)地址時(shí)觸發(fā)。注意:轉(zhuǎn)移的值可能是 0 。

Approval(address owner, address spender, uint256 value) :當(dāng)代幣所有者授權(quán)別人使用代幣時(shí)觸發(fā),即調(diào)用 approve 方法。

元數(shù)據(jù)

一般除了上述必須實(shí)現(xiàn)的函數(shù)外,還有一些別的方法:

name() :返回代幣名稱

symbol() :返回代幣符號(hào)

decimals() :返回代幣小數(shù)點(diǎn)后位數(shù)

ERC20

來(lái)看下 ERC20 代幣具體是怎么寫的。

同樣,OpenZepplin 提供了現(xiàn)成的合約代碼:

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

這里貼一個(gè)GitHub源碼鏈接 OpenZepplin ERC20

函數(shù)概覽

constructor(name_, symbol_)

name()

symbol()

decimals()

totalSupply()

balanceOf(account)

transfer(to, amount)

allowance(owner, spender)

approve(spender, amount)

transferFrom(from, to, amount)

increaseAllowance(spender, addedValue)

decreaseAllowance(spender, subtractedValue)

_transfer(from, to, amount)

_mint(account, amount)

_burn(account, amount)

_approve(owner, spender, amount)

_spendAllowance(owner, spender, amount)

_beforeTokenTransfer(from, to, amount)

_afterTokenTransfer(from, to, amount)

事件(同 IERC20)

Transfer(from, to, value)

Approval(owner, spender, value)

逐一分析

constructor(string name, string symbol) :設(shè)定代幣的名稱和符號(hào)。decimals 默認(rèn)是 18 ,要修改成不同的值你應(yīng)該重載它。這兩個(gè)值是不變的,只在構(gòu)造時(shí)賦值一次。

name() :返回代幣的名稱。

symbol() :返回代幣的符號(hào),通常是名稱的縮寫。

decimals() :返回小數(shù)點(diǎn)后位數(shù),通常是 18 ,模仿 Ether 和 wei 。要更改就重寫它。

totalSupply()、balanceOf(address account)、transfer(address to, uint256 amount)、 allowance(address owner, address spender)、approve(address spender, uint256 amount)、transferFrom(address from, address to, uint256 amount) 都參考 IERC20 。

increaseAllowance(address spender, uint256 addedValue) :以原子的方式增加 spender 額度。返回布爾值告知是否執(zhí)行成功,觸發(fā) Approval 事件。

_transfer(address from, address to, uint256 amount) :轉(zhuǎn)賬。這個(gè)內(nèi)部函數(shù)相當(dāng)于 transfer ,可以用于例如實(shí)施自動(dòng)代幣費(fèi)用,削減機(jī)制等。觸發(fā) Transfer 事件。

_mint(address account, uint256 amount) :鑄造 amount 數(shù)量的代幣給 account 地址,增加總發(fā)行量。觸發(fā) Transfer 事件,其中參數(shù) from 是零地址。

_burn(address account, uint256 amount) :從 account 地址中燒毀 amount 數(shù)量的代幣,減少總發(fā)行量。觸發(fā) Transfer 事件,其中參數(shù) to 是零地址。

_approve(address owner, uint256 spender, uint256 amount) :設(shè)定允許 spender 花費(fèi) owner 的代幣數(shù)量。這個(gè)內(nèi)部函數(shù)相當(dāng)于 approve ,可以用于例如為某些子系統(tǒng)設(shè)置自動(dòng)限額等。

spendAllowance(address owner, address spender, uint256 amount) :花費(fèi) amount 數(shù)量的 owner 授權(quán) spender 的代幣。在無(wú)限 allowance 的情況下不更新 allowance 金額。如果沒(méi)有足夠的余量,則恢復(fù)??赡苡|發(fā) Approval 事件。

_beforeTokenTransfer(address from, address to, uint256 amount) :在任何代幣轉(zhuǎn)賬前的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

當(dāng) from 和 to 都不是零地址時(shí),from 手里 amount 數(shù)量的代幣將發(fā)送給 to 。

當(dāng) from 是零地址時(shí),將給 to 鑄造 amount 數(shù)量的代幣。

當(dāng) to 是零地址時(shí),from 手里 amount 數(shù)量的代幣將被燒毀。

from 和 to 不能同時(shí)為零地址。

_afterTokenTransfer(address from, address to, uint256 amount) :在任何代幣轉(zhuǎn)賬后的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

當(dāng) from 和 to 都不是零地址時(shí),from 手里 amount 數(shù)量的代幣將發(fā)送給 to 。

當(dāng) from 是零地址時(shí),將給 to 鑄造 amount 數(shù)量的代幣。

當(dāng) to 是零地址時(shí),from 手里 amount 數(shù)量的代幣將被燒毀。

from 和 to 不能同時(shí)為零地址。

小結(jié)

ERC20 代碼中的 _transfer、_mint、_burn、_approve、_spendAllowance、_beforeTokenTransfer、_afterTokenTransfer 都是 internal 函數(shù)(其余為 public ),也就是說(shuō)它們只能被派生合約調(diào)用。

從零開始,自己動(dòng)手

1.編寫IERC20

IERC20.sol

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

interface IERC20 {

/// @dev 總發(fā)行量

function totoalSupply() external view returns (uint256);

/// @dev 查看地址余額

function balanceOf(address account) external view returns (uint256);

/// @dev 單地址轉(zhuǎn)賬

function transfer(address account, uint256 amount) external returns (bool);

/// @dev 查看被授權(quán)人代表所有者花費(fèi)的代幣余額

function allowance(address owner, address spender) external view returns (uint256);

/// @dev 授權(quán)別人花費(fèi)你擁有的代幣

function approve(address spender, uint256 amount) external returns (bool);

/// @dev 雙地址轉(zhuǎn)賬

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

?

/// @dev 發(fā)生代幣轉(zhuǎn)移時(shí)觸發(fā)

event Transfer(address indexed from, address indexed to, uint256 value);

/// @dev 授權(quán)時(shí)觸發(fā)

event Approval(address indexed owner, address indexed spender, uint256 value);

}

2.加上Metadata

IERC20Metadata.sol

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "IERC20.sol";

?

interface IERC20Metadata is IERC20 {

/// @dev 代幣名稱

function name() external view returns (string memory);

/// @dev 代幣符號(hào)

function symbol() external view returns (string memory);

/// @dev 小數(shù)點(diǎn)后位數(shù)

function decimals() external view returns (uint8);

}

3.編寫ERC20

ERC20.sol

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "./IERC20.sol";

import "./IERC20Metadata.sol";

?

contract ERC20 is IERC20, IERC30Metadata {

// 地址余額

mapping(address => uint256) private _balances;

// 授權(quán)地址余額

mapping(address => mapping(address => uint256)) private _allowances;

?

uint256 private _totalSupply;

?

string private _name;

string private _symbol;

?

/// @dev 設(shè)定代幣名稱符號(hào)

constructor(string memory name_, string memory symbol_) {

_name = name_;

_symbol = symbol_;

}

?

function name() public view virtual override returns (string memory) {

return _name;

}

?

function symbol() public view virtual override returns (string memory) {

return _symbol;

}

?

/// @dev 小數(shù)點(diǎn)位數(shù)一般為 18

function decimals() public view virtual override returns (uint8) {

return 18;

}

?

function totalSupply() public view virtual override returns (uint256) {

return _totalSupply;

}

?

function balanceOf(address account) public view virtual override returns (uint256) {

return _balances[account];

}

?

function transfer(address to, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_transfer(owner, to, amount);

return true;

}

?

function allowance(address owner, address spender) public view virtual override returns (uint256) {

return _allowances[owner][spender];

}

?

function approve(address spender, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_approve(owner, spender, amount);

return true;

}

?

function transferFrom(

address from,

address to,

uint256 amount

) public virtual override returns (bool) {

address spender = msg.sender;

_spendAllowance(from, spender, amount);

_transfer(from, to, amount);

return true;

}

?

function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {

address owner = msg.sender;

_approve(owner, spender, _allowances[owner][spender] + addedValue);

return true;

}

?

function decreaseAllowance(address spender, uint256 substractedValue) public virtual returns (bool) {

address owner = msg.sender;

uint256 currentAllowance = _allowances[owner][spender];

require(currentAllowance >= substractedValue, "ERC20: decreased allowance below zero");

unchecked {

_approval(owner, spender, currentAllowance - substractedValue);

}

return true;

}

?

function _transfer(

address from,

address to,

uint256 amount

) internal virtual {

require(from != address(0), "ERC20: transfer from the zero address");

require(to != address(0), "ERC20: transfer to the zero address");

?

_beforeTokenTransfer(from, to, amount);

?

uint256 fromBalance = _balances[from];

require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

unchecked {

_balances[from] = fromBalance - amount;

}

_balances[to] += amount;

?

emit Transfer(from, to, amount);

?

_afterTokenTransfer(from, to, amount);

}

?

function _mint(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: mint to the zero address");

?

_beforeTokenTransfer(address(0), account, amount);

?

_totalSupply += amount;

_balances[account] += amount;

emit Transfer(address(0), account, amount);

?

_afterTokenTransfer(address(0), account, amount);

}

?

function _burn(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: burn from the zero address");

?

_beforeTokenTransfer(account, address(0), amount);

?

uint256 accountBalance = _balances[account];

require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

unchecked {

_balances[account] = accountBalance - amount;

}

_totalSupply -= amount;

?

emit Transfer(account, address(0), amount);

?

_afterTokenTransfer(account, address(0), amount);

}

?

function _approve(

address owner,

address spender,

uint256 amount

) internal virtual {

require(owner != address(0), "ERC20: approve from the zero address");

require(spender != address(0), "ERC20: approve to the zero address");

?

_allowances[owner][spender];

emit Approval(owner, spender, amount);

}

?

function _spendAllowance(

address owner,

address spender,

uint256 amount

) internal virtual {

uint256 currentAllowance = allowance(owner, spender);

if (currentAllowance != type(uint256).max) {

require(currentAllowance >= amount, "ERC20: insufficient allowance");

unchecked {

_approve(owner, spender, currentAllowance - amount);

}

}

}

?

function _beforeTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

?

function _afterTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

}

總結(jié)

ERC20 其實(shí)就是一種最常見(jiàn)的代幣標(biāo)準(zhǔn),它明確了同質(zhì)化代幣的經(jīng)典功能并規(guī)范了開發(fā)者編寫 token 時(shí)的代碼,從而方便各種應(yīng)用適配。

學(xué)分: 39

分類: 以太坊

標(biāo)簽:

ERC20?

點(diǎn)贊 3

收藏 5

分享

Twitter分享

微信掃碼分享

本文參與登鏈社區(qū)寫作激勵(lì)計(jì)劃 ,好文好收益,歡迎正在閱讀的你也加入。

你可能感興趣的文章

花式發(fā)幣法之發(fā)行各類 ERC20 代幣

3968 瀏覽

Michael.W基于Foundry精讀Openzeppelin第39期——ERC20.sol

506 瀏覽

教程:如何在沒(méi)有 Web 界面的情況下創(chuàng)建 ERC20橋

1574 瀏覽

一個(gè)簡(jiǎn)單的ERC20代幣空投合約

2653 瀏覽

發(fā)布一款ERC20代幣,并開發(fā)成Dapp

1548 瀏覽

Aptos合約開發(fā)之部署ERC20合約

3944 瀏覽

相關(guān)問(wèn)題

請(qǐng)教下大家,Swap如何實(shí)現(xiàn)賣幣手續(xù)費(fèi)

2 回答

如何從發(fā)起部署的地址中,轉(zhuǎn)移一部分代幣到已經(jīng)部署的合約地址中,麻煩那位大佬看一下

5 回答

空投的默克爾樹如何防止生日攻擊?

2 回答

bsc鏈上的erc20合約,要求只有一點(diǎn)買賣的時(shí)候2%兌換成bnb發(fā)送到營(yíng)銷錢包,現(xiàn)在的問(wèn)題是添加流動(dòng)性會(huì)一直報(bào)錯(cuò)Fail with error 'TransferHelper::transferFrom: transferFrom failed'

2 回答

eth中如何判斷合約是erc20合約

2 回答

尋找使用Vyper部署的帶有交易稅的ERC20代幣模版

1 回答

0 條評(píng)論

請(qǐng)先 登錄 后評(píng)論

Confucian

關(guān)注

貢獻(xiàn)值: 57

學(xué)分: 83

Keep Learning

文章目錄

關(guān)于

關(guān)于我們

社區(qū)公約

學(xué)分規(guī)則

Github

伙伴們

DeCert

ChainTool

GCC

合作

廣告投放

發(fā)布課程

聯(lián)系我們

友情鏈接

關(guān)注社區(qū)

Discord

Twitter

Youtube

B 站

公眾號(hào)

關(guān)注不錯(cuò)過(guò)動(dòng)態(tài)

微信群

加入技術(shù)圈子

?2024 登鏈社區(qū) 版權(quán)所有 |

Powered By Tipask3.5|

粵公網(wǎng)安備 44049102496617號(hào)

粵ICP備17140514號(hào)

粵B2-20230927

增值電信業(yè)務(wù)經(jīng)營(yíng)許可證

×

發(fā)送私信

請(qǐng)將文檔鏈接發(fā)給曉娜,我們會(huì)盡快安排上架,感謝您的推薦!

發(fā)給:

內(nèi)容:

取消

發(fā)送

×

舉報(bào)此文章

垃圾廣告信息:

廣告、推廣、測(cè)試等內(nèi)容

違規(guī)內(nèi)容:

色情、暴力、血腥、敏感信息等內(nèi)容

不友善內(nèi)容:

人身攻擊、挑釁辱罵、惡意行為

其他原因:

請(qǐng)補(bǔ)充說(shuō)明

舉報(bào)原因:

取消

舉報(bào)

×

如果覺(jué)得我的文章對(duì)您有用,請(qǐng)隨意打賞。你的支持將鼓勵(lì)我繼續(xù)創(chuàng)作!

什么是ERC20?以太坊代幣標(biāo)準(zhǔn)指南

什么是ERC20?以太坊代幣標(biāo)準(zhǔn)指南

產(chǎn)品

加密支付網(wǎng)關(guān)

徹底改變支付方式

加密錢包

保護(hù)數(shù)字資產(chǎn)

加密貨幣發(fā)票

輕松的計(jì)費(fèi)解決方案

批量支付

簡(jiǎn)化批量傳輸

White Label

定制品牌解決方案

Donations

通過(guò)加密貨幣增強(qiáng)捐贈(zèng)能力

連接

API

整合與創(chuàng)新

整合解決方案

優(yōu)化的插件和庫(kù)以實(shí)現(xiàn)平滑集成

學(xué)習(xí)

博客

見(jiàn)解和更新

常問(wèn)問(wèn)題

澄清您的疑問(wèn)

幫助

支持與指導(dǎo)

公司

安全

保護(hù)您的數(shù)字資產(chǎn)

漏洞賞金

獎(jiǎng)勵(lì)安全研究

聯(lián)系我們

尋求幫助

價(jià)錢

登錄

報(bào)名

什么是ERC20?以太坊代幣標(biāo)準(zhǔn)指南

發(fā)表于 Feb 8, 2024

分享到

ERC20 是在以太坊區(qū)塊鏈上制定和部署智能合約的關(guān)鍵標(biāo)準(zhǔn),是該生態(tài)系統(tǒng)中數(shù)字化代幣的支柱。源于以太坊托管智能合約的能力——自動(dòng)執(zhí)行合約,協(xié)議條款直接寫入代碼行——ERC20 代幣是以太坊功能的基石。這些代幣支持創(chuàng)建各種去中心化應(yīng)用程序 (dApp)和平臺(tái),從實(shí)用代幣到去中心化金融 (DeFi)解決方案,所有這些都遵循 ERC20 準(zhǔn)則以確保網(wǎng)絡(luò)兼容性。以太坊是世界領(lǐng)先的可編程區(qū)塊鏈,允許用戶利用其技術(shù)鑄造自己的代幣,這些代幣可以體現(xiàn)各種資產(chǎn)或權(quán)利,例如數(shù)字積分、公司股票,甚至法定貨幣的數(shù)字表示形式。 ERC20 標(biāo)準(zhǔn)概述了一組規(guī)則,確保這些代幣在以太坊生態(tài)系統(tǒng)中無(wú)縫集成和運(yùn)行,從而促進(jìn)不同應(yīng)用程序和服務(wù)之間的互操作性和功能。 ERC-20 是什么意思? ERC-20 標(biāo)準(zhǔn)是以太坊區(qū)塊鏈上可替代代幣創(chuàng)建的基石,由以太坊開發(fā)者Fabian Vogelsteller于 2015 年 11 月 19 日提出。該技術(shù)規(guī)范的正式名稱為以太坊征求意見(jiàn)20 (ERC-20),為在以太坊生態(tài)系統(tǒng)中發(fā)行、創(chuàng)建和部署可互換代幣奠定了基礎(chǔ)。名稱“ERC”表示開發(fā)人員建議增強(qiáng)區(qū)塊鏈的方法,“20”標(biāo)記專用于這套操作規(guī)則的具體提案編號(hào)。 Fungible token 的特點(diǎn)是能夠在一對(duì)一的基礎(chǔ)上無(wú)區(qū)別地進(jìn)行交換,已廣泛采用 ERC-20 標(biāo)準(zhǔn),這表明它在以太坊網(wǎng)絡(luò)上數(shù)十萬(wàn)個(gè)合約的擴(kuò)散和運(yùn)行中發(fā)揮著關(guān)鍵作用。該標(biāo)準(zhǔn)不僅促進(jìn)了代幣創(chuàng)建的統(tǒng)一方法,而且還通過(guò)為開發(fā)人員提供強(qiáng)大的框架來(lái)刺激以太坊平臺(tái)的發(fā)展。 ERC-20 作為以太坊改進(jìn)協(xié)議(稱為 EIP-20)的認(rèn)可和正式采用發(fā)生在 2017 年底。EIP-20 由 Vogelsteller 和以太坊聯(lián)合創(chuàng)始人Vitalik Buterin共同撰寫,EIP-20 的認(rèn)可鞏固了其作為重要協(xié)議的地位。以太坊區(qū)塊鏈中的協(xié)議,支撐了大量可替代代幣,這些代幣已成為平臺(tái)生態(tài)系統(tǒng)和更廣泛的區(qū)塊鏈社區(qū)不可或缺的一部分。 ERC-20 的工作原理ERC-20 標(biāo)準(zhǔn)為以太坊區(qū)塊鏈上的加密代幣功能制定了一個(gè)全面的框架,將操作分類為 getter、函數(shù)和事件,以確保生態(tài)系統(tǒng)內(nèi)集成的一致性和易用性。 Getters 的目的是在不改變區(qū)塊鏈狀態(tài)的情況下檢索和顯示數(shù)據(jù)。 ERC-20 中概述的主要吸氣劑包括:總供應(yīng)量:此函數(shù)報(bào)告已發(fā)行的代幣總數(shù),提供對(duì)特定代幣流通規(guī)模的深入了解。 Balance Of :返回特定賬戶的代幣余額,讓用戶輕松驗(yàn)證其持有情況。津貼:這一獨(dú)特功能促進(jìn)了委托支出,其中一個(gè)賬戶可以授權(quán)另一個(gè)賬戶代表其支出指定的代幣金額。例如,如果用戶 A 授權(quán)用戶 B 使用 50 個(gè)代幣,則用戶 B 可以使用這些代幣進(jìn)行交易,最多可達(dá)分配的金額,但不能超過(guò)。函數(shù)是面向操作的命令,可實(shí)現(xiàn)代幣管理和傳輸:轉(zhuǎn)賬:這一核心功能用于將代幣從一個(gè)賬戶轉(zhuǎn)移到另一個(gè)賬戶,這是代幣流通的一個(gè)基本方面。批準(zhǔn):它允許代幣持有者指定另一個(gè)帳戶的支出限額,從而實(shí)現(xiàn)以太坊網(wǎng)絡(luò)內(nèi)的自動(dòng)支付和津貼等場(chǎng)景。轉(zhuǎn)賬來(lái)源:基于“批準(zhǔn)”功能,允許第三方在批準(zhǔn)的限額內(nèi)在賬戶之間轉(zhuǎn)移代幣,從而簡(jiǎn)化涉及多方的交易。事件是智能合約發(fā)出的信號(hào),表明已發(fā)生重大操作,提供透明度和可追溯性:轉(zhuǎn)移事件:每當(dāng)轉(zhuǎn)移代幣時(shí)都會(huì)觸發(fā)該事件,該事件會(huì)記錄交易,提供代幣移動(dòng)的可見(jiàn)性和驗(yàn)證。批準(zhǔn)事件:當(dāng)一個(gè)帳戶批準(zhǔn)另一個(gè)帳戶花費(fèi)特定代幣金額時(shí),會(huì)發(fā)出此事件,作為對(duì)委托權(quán)限的公開確認(rèn)。除了核心功能之外,值得注意的是 ERC-20 在促進(jìn)以太坊上去中心化應(yīng)用程序 (dApp) 之間的互操作性方面的重要性。通過(guò)遵守一套標(biāo)準(zhǔn)化規(guī)則,ERC-20 代幣可以輕松集成到錢包、交易所和其他 dApp 中,從而增強(qiáng)整個(gè)生態(tài)系統(tǒng)的流動(dòng)性和實(shí)用性。此外,該標(biāo)準(zhǔn)為創(chuàng)新的金融應(yīng)用程序和協(xié)議鋪平了道路,通過(guò)支持從簡(jiǎn)單的轉(zhuǎn)賬到復(fù)雜的智能合約執(zhí)行等廣泛的交易,為去中心化金融(DeFi)的發(fā)展做出了重大貢獻(xiàn)。作為其基礎(chǔ)作用的證明,ERC-20 標(biāo)準(zhǔn)繼續(xù)影響新代幣標(biāo)準(zhǔn)和區(qū)塊鏈技術(shù)的開發(fā),突顯其對(duì)以太坊區(qū)塊鏈和更廣泛的加密領(lǐng)域的關(guān)鍵影響。創(chuàng)建 ERC-20 代幣ERC-20 代幣通過(guò)在以太坊區(qū)塊鏈上部署智能合約而存在。這些嵌入了自動(dòng)執(zhí)行代碼的合約為代幣創(chuàng)建和分配開辟了可能性領(lǐng)域,反映了傳統(tǒng)金融機(jī)制的某些方面,但又具有創(chuàng)新性。一個(gè)說(shuō)明性的場(chǎng)景涉及一個(gè)智能合約,旨在接受上限數(shù)量的以太坊,例如 10 ETH。收到 ETH 后,合約會(huì)激活其代幣鑄造功能,直接向貢獻(xiàn)者的錢包發(fā)行預(yù)定義數(shù)量的代幣(例如,每個(gè) ETH 100 個(gè)代幣)。這種機(jī)制可以有效地生成 100,000 個(gè)假設(shè)的“ABC”代幣,并將它們分散給參與者以換取他們的以太坊貢獻(xiàn)。這種方法類似于股票市場(chǎng)中首次公開募股(IPO)的概念,即公司向公眾發(fā)行股票以換取投資資本。同樣,智能合約的代幣發(fā)行過(guò)程充當(dāng)籌集資金的去中心化變體,投資者收到代幣而不是股票。這種方法不僅通過(guò)消除中央機(jī)構(gòu)實(shí)現(xiàn)投資民主化,而且還引入了一種在數(shù)字生態(tài)系統(tǒng)內(nèi)資助項(xiàng)目和分配資產(chǎn)的新方式。除了籌款之外,ERC-20 代幣標(biāo)準(zhǔn)還促進(jìn)了各種應(yīng)用程序,從在去中心化自治組織 (DAO)中授予投票權(quán)的治理代幣到提供平臺(tái)內(nèi)服務(wù)訪問(wèn)權(quán)限的實(shí)用代幣。智能合約的可編程特性允許實(shí)現(xiàn)限時(shí)釋放、股息分配和自動(dòng)獎(jiǎng)勵(lì)等創(chuàng)造性功能,通過(guò)靈活和創(chuàng)新的金融工具豐富生態(tài)系統(tǒng)。什么是天然氣?在以太坊區(qū)塊鏈生態(tài)系統(tǒng)中,“gas”表示用于量化進(jìn)行交易或執(zhí)行智能合約所需的計(jì)算量的計(jì)量單位。用“ gwei ”表示——以太坊原生加密貨幣以太幣(ETH)的較小面額,通常等同于 nanoeth——?dú)怏w充當(dāng)將資源分配給以太坊虛擬機(jī)(EVM)的媒介。這種分配有利于去中心化應(yīng)用程序的自主運(yùn)行,包括以安全和去中心化的方式執(zhí)行智能合約。天然氣成本是通過(guò)供應(yīng)和需求的動(dòng)態(tài)相互作用來(lái)確定的,其中包括提供交易處理和智能合約執(zhí)行所需計(jì)算能力的礦工,以及尋求這些處理能力的網(wǎng)絡(luò)用戶。如果提供的 Gas 價(jià)格未能符合其運(yùn)營(yíng)成本預(yù)期,礦工可以自行決定拒絕交易,從而建立一個(gè) Gas 價(jià)格根據(jù)網(wǎng)絡(luò)活動(dòng)水平和礦工需求波動(dòng)的市場(chǎng)。該機(jī)制通過(guò)防止垃圾郵件交易并將資源分配給那些愿意為計(jì)算服務(wù)支付市場(chǎng)價(jià)格的人來(lái)確保以太坊網(wǎng)絡(luò)保持高效。它還強(qiáng)調(diào)了以太坊的去中心化性質(zhì),其中交易和智能合約的執(zhí)行是通過(guò)平衡網(wǎng)絡(luò)參與者的需求與礦工的運(yùn)營(yíng)能力的系統(tǒng)來(lái)激勵(lì)的。 ERC-20 代幣的種類ERC-20 代幣通過(guò)提供通用且標(biāo)準(zhǔn)化的代幣創(chuàng)建框架,徹底改變了以太坊區(qū)塊鏈,支持跨不同領(lǐng)域的廣泛應(yīng)用。這些代幣可以代表一切,從類似于公司股票的金融資產(chǎn)(在某些司法管轄區(qū)可能作為證券進(jìn)行監(jiān)管)到忠誠(chéng)獎(jiǎng)勵(lì)和黃金或房地產(chǎn)等實(shí)物資產(chǎn)。例如,一些 ERC-20 代幣的運(yùn)作方式與公司股票類似,根據(jù)監(jiān)管角度,其發(fā)行人可能需要承擔(dān)特定的法律義務(wù)。另一些則在數(shù)字生態(tài)系統(tǒng)中提供創(chuàng)新的實(shí)用性,例如來(lái)自在線預(yù)訂平臺(tái)的忠誠(chéng)度積分,可用于未來(lái)的服務(wù)或與其他人進(jìn)行交易,從而在其原始背景之外增加一層價(jià)值和實(shí)用性。這種多功能性延伸到了像 Tether (USDT) 這樣的穩(wěn)定幣,它們與現(xiàn)實(shí)世界的貨幣掛鉤,并提供傳統(tǒng)貨幣的數(shù)字對(duì)應(yīng)物,并具有區(qū)塊鏈技術(shù)的額外優(yōu)勢(shì),例如易于轉(zhuǎn)移和通過(guò)智能合約產(chǎn)生潛在收益。然而,用 ERC-20 代幣代表物理對(duì)象或法定貨幣會(huì)帶來(lái)挑戰(zhàn),特別是在維持?jǐn)?shù)字到物理鏈接的準(zhǔn)確性方面。例如,USDT 的價(jià)值與 Tether Limited 持有的美元掛鉤,需要信任傳統(tǒng)的審計(jì)方法以確保支持的存在,這凸顯了數(shù)字領(lǐng)域和物理領(lǐng)域之間潛在的脫節(jié)。 ERC-20 代幣的采用進(jìn)一步體現(xiàn)在它們與各種應(yīng)用程序的集成: 美元硬幣 (USDC) 和 Tether (USDT) 等穩(wěn)定幣為加密市場(chǎng)提供了穩(wěn)定性。治理代幣,例如 Maker (MKR),可以參與去中心化決策。實(shí)用令牌授予對(duì)特定服務(wù)的訪問(wèn)權(quán)限,例如 Brave 瀏覽器中的基本注意令牌 (BAT) 。資產(chǎn)支持代幣將數(shù)字代幣與現(xiàn)實(shí)世界的資產(chǎn)聯(lián)系起來(lái),提供有形的價(jià)值。游戲內(nèi)貨幣和Metaverse 平臺(tái)利用 ERC-20 代幣來(lái)管理虛擬經(jīng)濟(jì)并促進(jìn)數(shù)字世界中的交易。去中心化金融 (DeFi)應(yīng)用程序使用Aave (AAVE)等代幣來(lái)實(shí)現(xiàn)治理和實(shí)用目的。成功的 ERC-20 代幣,包括Uniswap (UNI) 、ApeCoin (APE)、 Wrapped Bitcoin (WBTC)和 Chainlink (LINK),展示了該標(biāo)準(zhǔn)的適應(yīng)性及其在以太坊生態(tài)系統(tǒng)內(nèi)促進(jìn)創(chuàng)新方面的作用。這些代幣具有多種功能,從促進(jìn)數(shù)字社區(qū)內(nèi)的去中心化交易和治理,到在DeFi應(yīng)用程序中使用比特幣,以及將智能合約與外部數(shù)據(jù)連接起來(lái)。 ERC-20 代幣的廣泛采用和成功凸顯了促進(jìn)整個(gè)以太坊網(wǎng)絡(luò)兼容性和互操作性的統(tǒng)一標(biāo)準(zhǔn)的重要性。這種標(biāo)準(zhǔn)化對(duì)于使區(qū)塊鏈技術(shù)超越那些具有深厚技術(shù)知識(shí)的人來(lái)說(shuō)至關(guān)重要,為數(shù)字代幣繼續(xù)豐富數(shù)字世界和物理世界的未來(lái)鋪平了道路。 ERC-20、ERC-721、ERC-1155以太坊區(qū)塊鏈支持各種代幣標(biāo)準(zhǔn),每個(gè)標(biāo)準(zhǔn)旨在滿足生態(tài)系統(tǒng)內(nèi)的不同需求。除了眾所周知的 ERC-20 標(biāo)準(zhǔn)之外,另外兩個(gè)重要標(biāo)準(zhǔn)是 ERC-721 和 ERC-1155,它們擴(kuò)展了可以在區(qū)塊鏈上表示的資產(chǎn)的功能和類型。 ERC-20 設(shè)定了可替代代幣的標(biāo)準(zhǔn),這意味著每個(gè)代幣在類型和價(jià)值上都與另一個(gè)代幣相同,類似于傳統(tǒng)加密貨幣的運(yùn)作方式。該標(biāo)準(zhǔn)對(duì)于創(chuàng)建可互換且統(tǒng)一的數(shù)字貨幣至關(guān)重要。 ERC-721引入了不可替代代幣(NFT)的概念,它們彼此不同并代表獨(dú)特的資產(chǎn)。該標(biāo)準(zhǔn)通常用于數(shù)字收藏品和藝術(shù)品,可以對(duì)具有特定特征的單個(gè)物品進(jìn)行標(biāo)記化。 ERC-1155 被稱為多代幣標(biāo)準(zhǔn),提供多功能智能合約接口,能夠在單個(gè)合約中處理多種代幣類型。這種創(chuàng)新方法允許 ERC-1155 代幣封裝 ERC-20 和 ERC-721 標(biāo)準(zhǔn)的功能,支持可替代和不可替代代幣。這種靈活性使得 ERC-1155 對(duì)于需要混合可替代和不可替代資產(chǎn)的應(yīng)用程序特別有用,例如游戲或去中心化金融。這些標(biāo)準(zhǔn)共同增強(qiáng)了以太坊生態(tài)系統(tǒng)托管廣泛數(shù)字資產(chǎn)的能力,從可互換的貨幣代幣到獨(dú)特的數(shù)字收藏品和混合應(yīng)用程序,展示了該平臺(tái)的適應(yīng)性和區(qū)塊鏈領(lǐng)域的巨大創(chuàng)新潛力。 ERC-20 代幣的優(yōu)點(diǎn)和缺點(diǎn)ERC-20代幣的優(yōu)點(diǎn)互操作性:ERC-20 代幣的一個(gè)突出特點(diǎn)是它們能夠在以太坊生態(tài)系統(tǒng)中無(wú)縫交互,從而實(shí)現(xiàn)不同代幣之間的輕松交換。這種互操作性支持從交易到項(xiàng)目融資的各種應(yīng)用程序。增強(qiáng)的安全性:ERC-20 代幣建立在以太坊區(qū)塊鏈之上,受益于其強(qiáng)大的安全措施。不變性和去中心化等功能可防止操縱,確保代幣完整性。定制靈活性:開發(fā)人員可以自由定制 ERC-20 代幣以滿足項(xiàng)目特定要求,包括代幣供應(yīng)、小數(shù)精度和獨(dú)特功能。透明交易:以太坊區(qū)塊鏈的透明度允許跟蹤 ERC-20 代幣變動(dòng),提供清晰的交易歷史并增強(qiáng)參與者之間的信任。市場(chǎng)流動(dòng)性:ERC-20代幣以其流動(dòng)性而聞名,這使其對(duì)投資者和交易者具有吸引力。在交易所買賣這些代幣的便捷性有助于其受歡迎。用戶友好:通過(guò) MyEtherWallet 和 MetaMask 等工具促進(jìn) ERC-20 代幣的可訪問(wèn)性,促進(jìn)區(qū)塊鏈社區(qū)內(nèi)的廣泛使用和創(chuàng)新。 ERC-20代幣的缺點(diǎn)功能有限:盡管穩(wěn)定,但 ERC-20 代幣的標(biāo)準(zhǔn)化性質(zhì)可能會(huì)限制復(fù)雜智能合約或自動(dòng)化流程所需的高級(jí)功能,從而給需要更大多功能性的項(xiàng)目帶來(lái)挑戰(zhàn)。安全漏洞:ERC-20代幣在繼承以太坊安全特性的同時(shí),也存在一些漏洞,包括易受智能合約漏洞和網(wǎng)絡(luò)擁塞等影響,從而導(dǎo)致潛在的安全風(fēng)險(xiǎn)。可變汽油費(fèi):涉及 ERC-20 代幣的交易會(huì)產(chǎn)生汽油費(fèi),該費(fèi)用可能會(huì)隨著網(wǎng)絡(luò)擁塞而大幅波動(dòng),影響成本可預(yù)測(cè)性,并可能給小投資者帶來(lái)負(fù)擔(dān)。交易所兼容性問(wèn)題:并非所有加密貨幣交易所都支持 ERC-20 代幣,這可能會(huì)限制其流動(dòng)性和投資者的交易選擇。對(duì)兼容交易所的研究對(duì)于獲得最佳交易體驗(yàn)至關(guān)重要。治理和透明度問(wèn)題:治理不善和缺乏透明度可能會(huì)導(dǎo)致代幣傾銷和內(nèi)幕交易等問(wèn)題,從而損害投資者的信心和代幣的可信度。無(wú)可否認(rèn),ERC-20 代幣標(biāo)準(zhǔn)塑造了以太坊區(qū)塊鏈的格局,提供了促進(jìn)創(chuàng)新和參與的一系列好處。然而,它帶來(lái)的挑戰(zhàn),包括安全問(wèn)題和某些應(yīng)用程序的有限功能,凸顯了生態(tài)系統(tǒng)內(nèi)持續(xù)開發(fā)和治理改進(jìn)的重要性。

請(qǐng)注意,Plisio 還為您提供:

單擊 2 次即可創(chuàng)建加密發(fā)票 and 接受加密捐贈(zèng)

12 整合

BigCommerce

Ecwid

Magento

Opencart

osCommerce

PrestaShop

VirtueMart

WHMCS

WooCommerce

X-Cart

Zen Cart

Easy Digital Downloads

6 最流行的編程語(yǔ)言庫(kù)

PHP 圖書館

Python 圖書館

React 圖書館

Vue 圖書館

NodeJS 圖書館

Android sdk 圖書館

19 加密貨幣和 12 區(qū)塊鏈

Bitcoin (BTC)

Ethereum (ETH)

Ethereum Classic (ETC)

Tron (TRX)

Litecoin (LTC)

Dash (DASH)

DogeCoin (DOGE)

Zcash (ZEC)

Bitcoin Cash (BCH)

Tether (USDT) ERC20 and TRX20 and BEP-20

Shiba INU (SHIB) ERC-20

BitTorrent (BTT) TRC-20

Binance Coin(BNB) BEP-20

Binance USD (BUSD) BEP-20

USD Coin (USDC) ERC-20

TrueUSD (TUSD) ERC-20

Monero (XMR)

分享到

最新的文章

CoinSpot 評(píng)論:2024 年的詳細(xì)信息、費(fèi)用和功能

Mar 15, 2024

Dex Screener:2024 年如何使用

Mar 14, 2024

2024 年葡萄牙加密貨幣稅收指南

Mar 13, 2024

什么是 Chainlink(LINK)?

Mar 13, 2024

Bybit 評(píng)論:優(yōu)點(diǎn)、缺點(diǎn)和特點(diǎn)

Mar 12, 2024

2024 年如何兌現(xiàn)加密貨幣和比特幣

Mar 12, 2024

美國(guó)國(guó)稅局 (IRS) 能否在 2024 年追蹤加密貨幣?

Mar 11, 2024

最佳 DeFi 交易所

Mar 11, 2024

dYdX 評(píng)論:優(yōu)點(diǎn)、缺點(diǎn)和功能

Mar 10, 2024

托管錢包與非托管加密錢包

Mar 10, 2024

Exodus 錢包評(píng)論:2024 年的優(yōu)點(diǎn)、缺點(diǎn)和功能

Mar 8, 2024

Kraken 評(píng)論:2024 年的優(yōu)點(diǎn)、缺點(diǎn)和功能

Mar 8, 2024

加拿大加密貨幣稅收指南(2024 年 CRA 規(guī)則)

Mar 7, 2024

Polymarket:去中心化預(yù)測(cè)市場(chǎng)如何運(yùn)作

Mar 6, 2024

2024 年最佳 DeFi 加密貨幣

Mar 6, 2024

體育用品進(jìn)入加密世界。輕松接受付款。

Mar 6, 2024

MEV Bot:以太坊套利分步手冊(cè)

Mar 6, 2024

什么是閃電貸?

Mar 5, 2024

最佳區(qū)塊鏈游戲公司

Mar 5, 2024

2024 年最佳白標(biāo) NFT 市場(chǎng)

Mar 4, 2024

產(chǎn)品

商業(yè)

個(gè)人的

價(jià)錢

批量支付

白色標(biāo)簽

發(fā)票

捐款

集成

資源

應(yīng)用程序接口

博客

安全

漏洞賞金

常問(wèn)問(wèn)題

聯(lián)系我們

政策

隱私政策

服務(wù)條款

跟著我們

簡(jiǎn)體中文

English

???????????????

Deutsch

ελληνικ?

Espa?ol

?????

Fran?ais

??????

Bahasa Indonesia

Italiano

日本語(yǔ)

???

Polski

Português

Русский

???

Türk?e

Укра?нська

Ti?ng Vi?t

簡(jiǎn)體中文

? 2024 Plisio, 公司。保留所有權(quán)利。

ERC20 錢包 - 保護(hù)您的 ERC20 (ERC20) 資產(chǎn) | Ledger

ERC20 錢包 - 保護(hù)您的 ERC20 (ERC20) 資產(chǎn) | Ledger

抓住比特幣的漲勢(shì)。 即刻入手比特幣版 Ledger 硬件錢包

在此購(gòu)買

Our Website now exists in . Do you want to change languages?

Yes, please

No, I'm good

You can revert to English at any time by clicking on the language menu on the top right corner of the page.

產(chǎn)品

Ledger Stax

Ledger Nano X

Ledger Nano S Plus

比較我們的設(shè)備

套裝

配件

品牌合作

查看所有產(chǎn)品

下載 Ledger Live

已支持的幣種

應(yīng)用程序和服務(wù)

Ledger Live

Ledger Recover

CL 卡

支持的服務(wù)

加密貨幣價(jià)格

學(xué)習(xí)

Ledger 學(xué)院

學(xué)而賺取

課堂

博客

什么是加密錢包

如何購(gòu)買

如何互換

如何質(zhì)押

企業(yè)

Ledger 企業(yè)解決方案

Ledger 合作伙伴

Ledger 聯(lián)名合作

Ledger 開發(fā)

支持

簡(jiǎn)體中文

???????

Fran?ais

Deutsch

Русский

Espa?ol

日本語(yǔ)

???

Türk?e

Português

ERC20 錢包

保護(hù)您的 ERC20 資產(chǎn)

使用最受信任的硬件錢包來(lái)保護(hù)您的 ERC20 資產(chǎn)。 冷存儲(chǔ)錢包通常是加密設(shè)備,可離線存儲(chǔ)用戶的 ERC20 資產(chǎn),提供一層安全保護(hù),以抵御因連接至互聯(lián)網(wǎng)而出現(xiàn)的不斷演變的威脅。

一流的 安全性

簡(jiǎn)單

多幣種

探索我們的錢包

了解如何使用 Ledger Live 管理 ERC20

保護(hù)您的 ERC20 (ERC20)

使用 Ledger 硬件錢包保護(hù)多種資產(chǎn),包括 ERC20。認(rèn)證安全芯片安全存儲(chǔ)著訪問(wèn)您加密資產(chǎn)的私鑰。

Ledger Nano S

使用市場(chǎng)上首款也是唯一一款經(jīng)獨(dú)立認(rèn)證的硬件錢包來(lái)保護(hù)您的 ERC20 資產(chǎn)。

了解更多

Ledger Nano X

Ledger Nano X 是一款支持藍(lán)牙、安全且榮獲 CES 大獎(jiǎng)的設(shè)備保護(hù)您的 ERC20 資產(chǎn)

了解更多

如何管理您的 ERC20 (ERC20)

Ledger Live

通過(guò)我們自己的桌面和手機(jī)應(yīng)用程序 Ledger Live 直接管理您的 ERC20 代幣。 直接通過(guò) Ledger Live 實(shí)時(shí)查看余額以及收發(fā) ERC20 代幣等 5500 余種資產(chǎn)。

了解如何使用 Ledger Live 管理 ERC20

深受社區(qū)贊賞

Maria R.

我認(rèn)為 Ledger 錢包是安全保護(hù)加密貨幣的最佳解決方案。

Dennis G.

安心是質(zhì)量的標(biāo)準(zhǔn)。

Walter F.

買了 3 臺(tái) nano-s。一切都好。產(chǎn)品好,送貨快。感謝!

Antonio B.

很棒的設(shè)備,我 100% 推薦,做你自己的銀行?。。。。?!

查看更多

什么是 ERC20 (ERC20)

ERC20 是一個(gè)協(xié)議標(biāo)準(zhǔn),它定義了在以太坊網(wǎng)絡(luò)上發(fā)行代幣的具體規(guī)則和標(biāo)準(zhǔn)。 在以太坊區(qū)塊鏈上發(fā)行的大多數(shù)代幣都符合 ERC-20。 它允許將一種代幣與另一種代幣進(jìn)行交易。

ERC20 (ERC20) 功能

ERC-20(以太坊意見(jiàn)征求)是一項(xiàng)正式的以太坊改進(jìn)提案,已作為公共區(qū)塊鏈上的智能合約代幣標(biāo)準(zhǔn)予以采納。 ERC-20 最初由開發(fā)人員 Fabian Vogelsteller 提出,目前已擴(kuò)張至包含一系列功能,如支持 2017 年的 ICO 募資方法和 ICO 熱潮,強(qiáng)調(diào)公共網(wǎng)絡(luò)中標(biāo)準(zhǔn)化協(xié)議的潛力等。

概括而言,以太坊是一個(gè)公共區(qū)塊鏈網(wǎng)絡(luò),用于使用智能合約開發(fā)去中心化應(yīng)用程序 (DApp),其中智能合約采用編程語(yǔ)言 Solidity 編寫。 以太坊的原生加密貨幣稱為以太幣 (ETH),用于在網(wǎng)絡(luò)上轉(zhuǎn)移價(jià)值并支付 Gas 費(fèi)用,這些費(fèi)用需要覆蓋整個(gè)網(wǎng)絡(luò)的計(jì)算成本并阻止垃圾郵件。

然而,網(wǎng)絡(luò)上智能合約的存在(表面上是自主賬戶和計(jì)算機(jī)程序)在以太坊中啟用了一套比特幣中未提供的全新功能。 以太坊是一個(gè)圖靈完備性平臺(tái),這意味著幾乎任何邏輯均可通過(guò)編程寫入網(wǎng)絡(luò)上的應(yīng)用程序中。 智能合約是在網(wǎng)絡(luò)上自動(dòng)執(zhí)行各項(xiàng)功能的賬戶,共同達(dá)成更廣泛用途的一組智能合約將形成 DApp(去中心化應(yīng)用程序)。

為便于溝通,同時(shí)簡(jiǎn)化可互操作的功能性 DApp 和智能合約的開發(fā),創(chuàng)建了一個(gè)標(biāo)準(zhǔn)化的代幣智能合約框架。 此框架中最引人注目的便是 ERC-20。

ERC-20 是一種用于在以太坊上創(chuàng)建、發(fā)行和管理可替代代幣的標(biāo)準(zhǔn)化格式。 這些代幣具有不同的用例和應(yīng)用程序(如實(shí)用型代幣),且由開發(fā)人員以 ERC-20 作為參考創(chuàng)建。 該標(biāo)準(zhǔn)提供了用于傳輸 ERC-20 代幣以及與 ERC-20 代幣交互的基本格式,隨后各種錢包使用此類格式來(lái)支持代幣的存儲(chǔ)、傳輸和管理。

標(biāo)準(zhǔn)化促進(jìn)了快速創(chuàng)新且強(qiáng)調(diào)互聯(lián)網(wǎng)的設(shè)計(jì)。

借助 ERC-20,項(xiàng)目可以輕松創(chuàng)建和發(fā)行代幣,以在各種 DApp 中用作激勵(lì)結(jié)構(gòu)或籌款工具。 值得注意的是,ERC-20 是首次代幣發(fā)行 (ICO) 的基礎(chǔ),其中 ICO 是一種直接以加密貨幣形式籌集資金來(lái)為項(xiàng)目注資的工具,如以太坊上的 DApp。 ICO 在 2018 年籌集了 63 億美元,獨(dú)特的眾籌方法將用戶和投資者直接與項(xiàng)目對(duì)接。

ERC-20 代幣設(shè)計(jì)為可替代代幣,這意味著每個(gè)代幣單位都與下一個(gè)等值。 例如,使用 Maker DAO ERC20,1 MKR 在價(jià)值上總是等價(jià)于 1 MKR。

ERC-20 的標(biāo)準(zhǔn)化技術(shù)格式和不斷擴(kuò)張的網(wǎng)絡(luò)效應(yīng)相結(jié)合,使該標(biāo)準(zhǔn)在以太坊上得到廣泛采用。 網(wǎng)絡(luò)上的大多數(shù)代幣都兼容 ERC-20,且可以在網(wǎng)絡(luò)上無(wú)縫兌換和轉(zhuǎn)移。 您在幣聚合網(wǎng)站上找到的大多數(shù)與以太坊相關(guān)的代幣均為 ERC-20 代幣,如 Maker、Dai 和 Augur REP。

重要的一點(diǎn)是,ERC-20 代幣在加密貨幣領(lǐng)域引發(fā)了有關(guān)標(biāo)準(zhǔn)化協(xié)議和合約所充當(dāng)角色的更廣泛對(duì)話,目的是提高創(chuàng)新和互操作性。 區(qū)塊鏈的發(fā)展目標(biāo)是能夠在彼此間傳輸價(jià)值和數(shù)據(jù),因此協(xié)議的標(biāo)準(zhǔn)化成為討論的核心。

除了以太坊上的 ERC-20 之外,還出現(xiàn)了其他幾個(gè)標(biāo)準(zhǔn)(即 ERC-721),它們分別專注于不同類型的代幣,如非同質(zhì)化代幣。 這些非同質(zhì)化代幣旨在代表獨(dú)特的數(shù)字資產(chǎn),如虛擬貓,隨著《迷戀貓》的興起,虛擬貓成為非同質(zhì)化代幣可實(shí)現(xiàn)內(nèi)容的最佳示例。

ERC-20 的總體影響是以太坊上資產(chǎn)、DApp 和創(chuàng)新(即 DeFi)生態(tài)系統(tǒng)的長(zhǎng)足發(fā)展。 ERC-20 作為代幣標(biāo)準(zhǔn)的流行程度揭示了將標(biāo)準(zhǔn)化進(jìn)一步擴(kuò)張到公共區(qū)塊鏈的潛在可能,而該行業(yè)才剛剛開始加足馬力。

請(qǐng)記住,ERC-20 代幣雖然建立在以太坊上,但和 DApp 一樣是存在于網(wǎng)絡(luò)生態(tài)系統(tǒng)中的代幣,這一點(diǎn)很重要。

支持的加密貨幣

直接使用 Ledger Live 安全管理 種幣和 ERC20 代幣。 更多使用外部錢包。

VET

VeChain

幣安幣(BNB)

幣安幣

TRX

波場(chǎng)(Tron)

LINK

ChainLink

EOS

EOS

聯(lián)系我們

可以在我們的博客查看公告。 媒體聯(lián)系: [email?protected]

訂閱我們的 簡(jiǎn)報(bào)

在收件箱中直接查看支持的新幣種、博客更新以及專屬優(yōu)惠

輸入您的電子郵件地址

注冊(cè)訂閱新聞簡(jiǎn)報(bào)

您的電子郵件地址將僅用于向您發(fā)送我們的簡(jiǎn)報(bào),以及更新和優(yōu)惠信息。您可通過(guò)簡(jiǎn)報(bào)中的鏈接隨時(shí)取消訂閱。

詳細(xì)了解我們?nèi)绾喂芾砟臄?shù)據(jù)和您的權(quán)利。

簡(jiǎn)體中文

???????

Fran?ais

Deutsch

Русский

Espa?ol

日本語(yǔ)

???

Türk?e

Português

版權(quán)所有 ? Ledger SAS。 保留所有權(quán)利。 Ledger、Ledger Stax、Ledger Nano S、Ledger Vault、Bolos 是 Ledger SAS 擁有的商標(biāo)。

1 rue du Mail, 75002 Paris, France

付款方式

?

?

?

?

?

?

?

產(chǎn)品Ledger Stax

Ledger Nano X

Ledger Nano S Plus

比較我們的設(shè)備

捆綁銷售

配件

所有產(chǎn)品

下載

加密資產(chǎn)比特幣錢包

以太坊錢包

卡爾達(dá)諾錢包

瑞波幣錢包

門羅幣錢包

泰達(dá)幣錢包

查看所有資產(chǎn)

加密服務(wù)加密貨幣價(jià)格

買入加密貨幣

權(quán)益質(zhì)押

互換加密貨幣

企業(yè)Ledger 企業(yè)解決方案

對(duì)于初創(chuàng)公司來(lái)自 Ledger Cathay Capital 的資金

開發(fā)者開發(fā)者門戶

使用入門開始使用 Ledger 設(shè)備

兼容的錢包和服務(wù)

如何購(gòu)買比特幣

比特幣購(gòu)買指南

比特幣硬件錢包

其他鏈接支持

賞金計(jì)劃

轉(zhuǎn)銷商

Ledger 媒體資料包

聯(lián)署營(yíng)銷

狀態(tài)

合作伙伴

職場(chǎng)加入我們

全部職位

簡(jiǎn)介我們的愿景

Ledger 學(xué)院

公司

人員

多樣性

博客

法律銷售條款與條件

網(wǎng)站使用條款

Ledger Live 使用條款

隱私政策

Cookie 政策

Ledger 保修

免責(zé)聲明

其他

小白入門-什么是ERC(以太坊智能合約) - 知乎

小白入門-什么是ERC(以太坊智能合約) - 知乎切換模式寫文章登錄/注冊(cè)小白入門-什么是ERC(以太坊智能合約)psitoken海神錢包什么是ERC?ERC全稱“Ethereum Request for Comment"(備注1),翻譯過(guò)來(lái)即Ethereum版的意見(jiàn)征求稿,用以記錄以太坊上應(yīng)用級(jí)的各種開發(fā)標(biāo)準(zhǔn)和協(xié)議(application-level standards and conventions)。ERC是Ethereum開發(fā)者為以太坊社區(qū)編寫的,所以在ERC的創(chuàng)建流程中,開發(fā)人員為了創(chuàng)建一個(gè)以太坊平臺(tái)的標(biāo)準(zhǔn),提交了一個(gè)以太坊改進(jìn)方案(EIP,Ethereum Improvement Protocol), 用以改進(jìn)方案中包括協(xié)議規(guī)范和合約標(biāo)準(zhǔn)。 一旦EIP被委員會(huì)批準(zhǔn)并最終確定,它就成為ERC。 EIP的完整原始信息可以在https://github.com/ethereum/EIPs找到。所有的ERC都是EIP。但,反之則未必。ERC目前種類:1.最典型的Token標(biāo)準(zhǔn)(ERC20, ERC721)2.名字注冊(cè)(ERC26, ERC13)3.URI范式(ERC67)4.Library/Package格式(EIP82)5.錢包格式(EIP75,EIP85)。其他種類我們先不展開,先就最典型的Token標(biāo)準(zhǔn)(ERC20\ERC721)簡(jiǎn)單介紹下:什么是ERC20?ERC20 是是2015年11月份推出的一種技術(shù)標(biāo)準(zhǔn),我們經(jīng)??吹降腅OS,USDT(ERC20),OMG等就是基于ERC20標(biāo)準(zhǔn)開發(fā)的代幣;ERC20的優(yōu)勢(shì):ERC20標(biāo)準(zhǔn)規(guī)定了各個(gè)代幣的基本功能,非常方便第三方使用;基于ERC20標(biāo)準(zhǔn)開發(fā)的同種代幣價(jià)值都是相同的,它們可以進(jìn)行互換;ERC20代幣能兼容ETH錢包,也就是說(shuō),ETH的錢包地址可以接收所有的ERC20代幣。因此ERC20代幣能被交易所整合,立即進(jìn)行交易。ERC20的劣勢(shì):ERC20標(biāo)準(zhǔn)無(wú)法通過(guò)接收方合同處理傳入的交易。這是該令牌存在的最大問(wèn)題,也是開發(fā)者一直希望改進(jìn)的地方。ERC20令牌無(wú)法將令牌發(fā)送給一個(gè)與這些令牌不兼容的契約,也正因?yàn)檫@樣,部分資金存在丟失的風(fēng)險(xiǎn)。什么是ERC721和ERC20一樣,ERC721同樣是一個(gè)代幣標(biāo)準(zhǔn),ERC721的官方解釋是是“Non-Fungible Tokens”,英文簡(jiǎn)寫為”NFT”,翻譯過(guò)來(lái)即不可互換的非同質(zhì)Token。簡(jiǎn)單地說(shuō),就是每個(gè)Token都是獨(dú)一無(wú)二的,是不能互換的;舉個(gè)例子,之前大火的擼貓游戲CryptoKitties也是基于ERC721標(biāo)準(zhǔn)開發(fā)的,CryptoKitties中的貓都是ERC721的Token,不同基因的貓其實(shí)只是不同屬性的Token,正是由于ERC721的獨(dú)一無(wú)二性(NFT)讓CryptoKitties的貓變得極具收藏價(jià)值,單只貓的價(jià)值更是達(dá)到了1000個(gè)ETH??!ERC20和ERC721的區(qū)別1.Token之間是否可以互換基于ERC20標(biāo)準(zhǔn)開發(fā)的Token沒(méi)有價(jià)值的區(qū)別,是可以互換的,基于ERC721標(biāo)準(zhǔn)開發(fā)的Token則是獨(dú)一無(wú)二,不可以互換的;2.Token是否可以分割ERC20的Token是可以分割的,而ERC721的Token最小的單位為1,它是不能分割的。備注1:Request for Comment由互聯(lián)網(wǎng)工程任務(wù)組制定的一個(gè)概念,是由IETF發(fā)布的一系列備忘錄。其文件收集了有關(guān)Internet相關(guān)信息,以及UNIX和Internet社區(qū)的軟件文件,以編號(hào)排定。RFC文件是由Internet協(xié)會(huì)(ISOC)贊助發(fā)行。發(fā)布于 2019-08-27 17:47區(qū)塊鏈(Blockchain)數(shù)字貨幣錢包?贊同 5??1 條評(píng)論?分享?喜歡?收藏?申請(qǐng)

什么是 ERC 代幣,我們?yōu)楹我褂眠@種代幣? | Ledger

什么是 ERC 代幣,我們?yōu)楹我褂眠@種代幣? | Ledger

抓住比特幣的漲勢(shì)。 即刻入手比特幣版 Ledger 硬件錢包

在此購(gòu)買

購(gòu)買 Ledger

學(xué)而賺取

搜索

術(shù)語(yǔ)

主題

Blockchain

NFT(非同質(zhì)化代幣)

加密貨幣

安全性

教程

硬件錢包

系列

ON THE LEDGER

區(qū)塊學(xué)校

確保加密貨幣安全

閱覽室

開始學(xué)習(xí)

簡(jiǎn)體中文

???????

English

Fran?ais

Deutsch

Русский

Espa?ol

日本語(yǔ)

???

Türk?e

Português

區(qū)塊學(xué)校

主題

Blockchain

NFT(非同質(zhì)化代幣)

加密貨幣

安全性

教程

硬件錢包

系列

ON THE LEDGER

區(qū)塊學(xué)校

確保加密貨幣安全

閱覽室

購(gòu)買 Ledger

學(xué)而賺取

搜索

術(shù)語(yǔ)

簡(jiǎn)體中文

???????

English

Fran?ais

Deutsch

Русский

Espa?ol

日本語(yǔ)

???

Türk?e

Português

Ledger 學(xué)院

加密貨幣

...

什么是 ERC 代幣,我們?yōu)楹我褂眠@種代幣?

什么是 ERC 代幣,我們?yōu)楹我褂眠@種代幣?

作者 Mohammad Musharraf

2022年5月12日

| 更新于 2023年6月29日

閱讀

5 分鐘

初階

分享

要點(diǎn)總結(jié): – 術(shù)語(yǔ)“加密代幣”和“加密貨幣”經(jīng)?;Q使用,但它們之間存在細(xì)微差別。 加密貨幣是某個(gè)區(qū)塊鏈的原生貨幣,而代幣則沒(méi)有專屬的區(qū)塊鏈。– 在以太坊區(qū)塊鏈上,可以有不同類型的加密代幣,每種類型都是通過(guò)它們是否可替代來(lái)定義。 – 代幣的可替代程度由以太坊上的三個(gè)代幣標(biāo)準(zhǔn)之一來(lái)表示 – ERC20、ERC721 和 ERC1155。 – 本文將探討 ERC 代幣的一般含義,并深入研究這三種代幣標(biāo)準(zhǔn)。

初次接觸加密貨幣圈的人可能會(huì)有些困擾。 在本文中,考慮諸如代幣標(biāo)準(zhǔn)、ERC20、ERC721 等術(shù)語(yǔ)。 現(xiàn)在您可能覺(jué)得一切都很陌生,但一旦您了解了它們的作用,再理解它們的概念就會(huì)非常簡(jiǎn)單。 什么是 ERC 代幣? 我們?cè)谶@里用大白話講一講。

首先,幣或代幣:它們是什么?

先來(lái)講一下幣。 這要從比特幣說(shuō)起,即第一個(gè)區(qū)塊鏈網(wǎng)絡(luò)。 比特幣旨在讓人們使用其原生貨幣(也稱為比特幣或 BTC)進(jìn)行全球點(diǎn)對(duì)點(diǎn)支付。 隨后出現(xiàn)了類似的區(qū)塊鏈,如萊特幣 (LTC) 和狗幣 (DOGE),它們的用途類似。

所有這些依托于自己的區(qū)塊鏈網(wǎng)絡(luò)的加密貨幣都稱為幣。

然后以太坊出現(xiàn),并引入了基于區(qū)塊鏈的去中心化應(yīng)用和協(xié)議的概念。 盡管以太坊也有自己的“幣”,名為 ETH,且使用方式與 BTC 相同,但它的主要用途是助推基于網(wǎng)絡(luò)搭建的應(yīng)用和協(xié)議的交易和運(yùn)作。

此外,這些應(yīng)用的開發(fā)者可以創(chuàng)建應(yīng)用內(nèi)貨幣,這類貨幣沒(méi)有專屬區(qū)塊鏈,而是存放在以太坊中。 借助以太坊,用戶還可以創(chuàng)建其他形式的獨(dú)立數(shù)字資產(chǎn),這些數(shù)字資產(chǎn)能夠以不可更改的方式存放在以太坊中。 這些在以太坊中創(chuàng)建和存放的應(yīng)用內(nèi)貨幣或數(shù)字資產(chǎn)就是我們所說(shuō)的代幣。

總而言之,擁有專屬區(qū)塊鏈的加密資產(chǎn)從技術(shù)上來(lái)說(shuō)是一種幣,而在第三方區(qū)塊鏈上創(chuàng)建的所有其他資產(chǎn)則稱為代幣。

那什么是 ERC 代幣呢?

以太坊生態(tài)系統(tǒng)是去中心化的,但仍需要有人來(lái)制定規(guī)則,發(fā)出升級(jí)要求,并制定標(biāo)準(zhǔn)來(lái)定義區(qū)塊鏈上的各種可能。 為此,以太坊的大部分用戶需要提交以太坊提案 (EIP),討論具體細(xì)節(jié),并投票決定是否決還是開始實(shí)施提案。

現(xiàn)在,有幾種類型的 EIP 分別對(duì)應(yīng)不同類別的改進(jìn)和補(bǔ)充。 其中一種類型是以太坊核心開發(fā)者定義的,用于提出、討論和實(shí)施在以太坊上創(chuàng)建代幣、智能合約、應(yīng)用程序、錢包格式等的不同技術(shù)標(biāo)準(zhǔn)。

該子類別的 EIP 稱為以太坊征求意見(jiàn)提案,又稱 ERC。 到目前為止,已經(jīng)可利用多個(gè)“以太坊征求意見(jiàn)提案”為可在以太坊上創(chuàng)建的代幣制定標(biāo)準(zhǔn)。 而以太坊上創(chuàng)建的所有代幣都必須遵循這些 ERC 制定的標(biāo)準(zhǔn)。 因此,這些代表稱為 ERC 代幣。

目前有三種 ERC 標(biāo)準(zhǔn)在以太坊上使用最廣泛:ERC20、ERC721 或 ERC1155。 為了不讓您感到困惑,這里說(shuō)明一下,ERC 后面的數(shù)字只是提出這些標(biāo)準(zhǔn)的“意見(jiàn)征求”序號(hào)。

但是,這些標(biāo)準(zhǔn)具體指什么呢,我們?yōu)槭裁葱枰@些標(biāo)準(zhǔn)? 讓我們弄清楚這個(gè)問(wèn)題。

了解 ERC 代幣標(biāo)準(zhǔn)

ERC20:可替代的/同質(zhì)化代幣標(biāo)準(zhǔn)

ERC20 于 2015 年首次實(shí)施,利用該代幣標(biāo)準(zhǔn),開發(fā)者可為基于以太坊的應(yīng)用程序或協(xié)議創(chuàng)建可替代的/同質(zhì)化代幣。 什么?

首先,您可以將“同質(zhì)化代幣”想象成任何基于區(qū)塊鏈的常規(guī)貨幣。 術(shù)語(yǔ)“同質(zhì)化”僅意味著您可以將一個(gè)單位的代幣交換為任何其他一個(gè)單位的該種代幣,因?yàn)樗鼈兇淼膬r(jià)值相同。 在這一點(diǎn)上,以 UNI 或 LINK 這樣的加密資產(chǎn)為例,即基于以太坊的協(xié)議 Uniswap 或Chainlink 的 ERC20 代幣。 每一種此類代幣都是同質(zhì)化的,因?yàn)橐粋€(gè) UNI 或 LINK 代幣始終等于任何其他 UNI 或 LINK 代幣。

這意味著您可以一比一交換上述代幣。 您擁有哪個(gè) UNI 并不重要,因?yàn)樗鼈兊幕A(chǔ)價(jià)值始終與所有其他 UNI 代幣相同。

ERC721:非同質(zhì)化代幣標(biāo)準(zhǔn)

隨著區(qū)塊鏈的用途越來(lái)越廣泛,需要對(duì)區(qū)塊鏈上的唯一數(shù)據(jù)進(jìn)行代幣化和表示。 由此便引入了 ERC721 代幣標(biāo)準(zhǔn)。 利用 ERC721 標(biāo)準(zhǔn),您可以創(chuàng)建不可替代/非同質(zhì)化代幣,即每個(gè)代幣都具有獨(dú)特價(jià)值,代表可驗(yàn)證的唯一數(shù)字對(duì)象,不能像 ERC20 代幣那樣相互交換。

因此,假設(shè)您想在區(qū)塊鏈上表示一件數(shù)字藝術(shù)品。 顯然不能用 ERC20 代幣來(lái)表示。 您可以改用 ERC721 標(biāo)準(zhǔn)代幣來(lái)創(chuàng)建 NFT 藝術(shù)作品。 這個(gè)數(shù)字藝術(shù)作品的 NFT 可輕松證明該藝術(shù)作品的真實(shí)性及其所有權(quán)記錄。

由于 NFT 藝術(shù)品的所有權(quán)記錄和身份是不可更改的,且存儲(chǔ)在區(qū)塊鏈上,此舉也避免了對(duì)任何藝術(shù)家原創(chuàng)作品的偽造。

ERC1155:多重代幣標(biāo)準(zhǔn)

ERC20 和 ERC721 標(biāo)準(zhǔn)的問(wèn)題在于,它們僅允許一個(gè)智能合約支持單一類型的可替代/同質(zhì)化或不可替代的/非同質(zhì)化代幣。 因此,每次要部署新代幣時(shí),都必須編寫一個(gè)新的智能合約。 此外,上述兩個(gè)標(biāo)準(zhǔn)均未提供創(chuàng)建半可替代/半同質(zhì)化代幣的方法。

由此 ERC1155 代幣標(biāo)準(zhǔn)應(yīng)運(yùn)而生,讓以太坊開發(fā)者能夠使用同一標(biāo)準(zhǔn)創(chuàng)建同質(zhì)化、半同質(zhì)化和非同質(zhì)化的代幣。 此外,利用 ERC1155,制定一份合約即可支持多種類型的可單獨(dú)配置的代幣,從而降低了代幣創(chuàng)建過(guò)程的復(fù)雜性。 這樣說(shuō)有點(diǎn)復(fù)雜,對(duì)嗎? 我們來(lái)簡(jiǎn)化一下。

假設(shè)一個(gè)開發(fā)者想開發(fā)一款 NFT 游戲,他們計(jì)劃創(chuàng)建一種同質(zhì)化的代幣作為游戲中使用的貨幣,同時(shí)計(jì)劃創(chuàng)建多種非同質(zhì)化代幣,來(lái)代表游戲中的獨(dú)特資產(chǎn),如皮膚、槍支、商品等。 如果采用 ERC20 和 ERC721 標(biāo)準(zhǔn),那么創(chuàng)建每一種新的資產(chǎn)類型時(shí)他們都必須要編寫新的智能合約作為支持。 然而,借助 ERC1155,他們只要編寫一份合約即可支持他們想在游戲中擁有的所有種類的代幣。

這些并不能說(shuō)明某個(gè)標(biāo)準(zhǔn)比其他標(biāo)準(zhǔn)好;它們只是用途不同。

以太坊上的無(wú)限可能

以太坊大大推動(dòng)了區(qū)塊鏈的發(fā)展,其作用遠(yuǎn)不止是一種安全數(shù)字貨幣技術(shù)。 它能夠提出和制定新的代幣標(biāo)準(zhǔn),拓寬了以太坊網(wǎng)絡(luò)的用途。

多虧了這項(xiàng)創(chuàng)新,今天,藝術(shù)家可以創(chuàng)造出代表其藝術(shù)作品的獨(dú)特代幣,創(chuàng)作者可以表達(dá)出其創(chuàng)作的稀缺性并實(shí)現(xiàn)作品的貨幣化,游戲開發(fā)者可以使用游戲中的道具向玩家傳遞現(xiàn)實(shí)世界的價(jià)值,另外還能在互聯(lián)網(wǎng)上打造出一種由用戶管理的全新經(jīng)濟(jì)…這些都是聞所未聞、前所未有的。

知識(shí)就是力量

相信自己,不斷學(xué)習(xí)! 如果您喜歡學(xué)習(xí)加密貨幣和區(qū)塊鏈的知識(shí),請(qǐng)觀看我們極其有趣的 School of Block(區(qū)塊學(xué)校)視頻。

Mohammad Musharraf

[email?protected]

Mohammad Musharraf 是一名內(nèi)容策略師和作家,在區(qū)塊鏈和加密項(xiàng)目方面工作了三年有余。在業(yè)余時(shí)間,他最愛(ài)花時(shí)間和家人相伴,看看 Netflix,讀讀書。

分享

下一個(gè): 將 MetaMask 與 Ledger 硬件錢包配合使用時(shí)最為安全的方式

相關(guān)資源

什么是索拉納 Solana?

閱讀

5 分鐘

初階

通過(guò) Ledger Live 賺取加密貨幣:輕松進(jìn)行權(quán)益質(zhì)押

閱讀

初階

如何選擇加密錢包

閱讀

初階

什么是軟件錢包?

閱讀

初階

暢覽在線世界,密鑰離線保管。 Ledger 如何保護(hù)您的加密貨幣。

閱讀

4 分鐘

Medium

什么是硬件錢包?

閱讀

6 分鐘

Medium

硬件錢包對(duì)比冷錢包:有什么不同?

閱讀

4 分鐘

初階

數(shù)字工作:在元宇宙中工作

閱讀

7 分鐘

初階

什么是區(qū)塊鏈卷疊?

閱讀

6 分鐘

專家

聯(lián)系我們

可以在我們的博客查看公告。 媒體聯(lián)系: [email?protected]

訂閱我們的 簡(jiǎn)報(bào)

在收件箱中直接查看支持的新幣種、博客更新以及專屬優(yōu)惠

輸入您的電子郵件地址

注冊(cè)訂閱新聞簡(jiǎn)報(bào)

您的電子郵件地址將僅用于向您發(fā)送我們的簡(jiǎn)報(bào),以及更新和優(yōu)惠信息。您可通過(guò)簡(jiǎn)報(bào)中的鏈接隨時(shí)取消訂閱。

詳細(xì)了解我們?nèi)绾喂芾砟臄?shù)據(jù)和您的權(quán)利。

簡(jiǎn)體中文

???????

English

Fran?ais

Deutsch

Русский

Espa?ol

日本語(yǔ)

???

Türk?e

Português

版權(quán)所有 ? Ledger SAS。 保留所有權(quán)利。 Ledger、Ledger Stax、Ledger Nano S、Ledger Vault、Bolos 是 Ledger SAS 擁有的商標(biāo)。

1 rue du Mail, 75002 Paris, France

付款方式

?

?

?

?

?

?

?

產(chǎn)品Ledger Stax

Ledger Nano X

Ledger Nano S Plus

比較我們的設(shè)備

捆綁銷售

配件

所有產(chǎn)品

下載

加密資產(chǎn)比特幣錢包

以太坊錢包

卡爾達(dá)諾錢包

瑞波幣錢包

門羅幣錢包

泰達(dá)幣錢包

查看所有資產(chǎn)

加密服務(wù)加密貨幣價(jià)格

買入加密貨幣

權(quán)益質(zhì)押

互換加密貨幣

企業(yè)Ledger 企業(yè)解決方案

對(duì)于初創(chuàng)公司來(lái)自 Ledger Cathay Capital 的資金

開發(fā)者開發(fā)者門戶

使用入門開始使用 Ledger 設(shè)備

兼容的錢包和服務(wù)

如何購(gòu)買比特幣

比特幣購(gòu)買指南

比特幣硬件錢包

其他鏈接支持

賞金計(jì)劃

轉(zhuǎn)銷商

Ledger 媒體資料包

聯(lián)署營(yíng)銷

狀態(tài)

合作伙伴

職場(chǎng)加入我們

全部職位

簡(jiǎn)介我們的愿景

Ledger 學(xué)院

公司

人員

多樣性

博客

法律銷售條款與條件

網(wǎng)站使用條款

Ledger Live 使用條款

隱私政策

Cookie 政策

Ledger 保修

免責(zé)聲明

其他

小白入門-什么是ERC(以太坊智能合約) - 知乎

小白入門-什么是ERC(以太坊智能合約) - 知乎切換模式寫文章登錄/注冊(cè)小白入門-什么是ERC(以太坊智能合約)psitoken海神錢包什么是ERC?ERC全稱“Ethereum Request for Comment"(備注1),翻譯過(guò)來(lái)即Ethereum版的意見(jiàn)征求稿,用以記錄以太坊上應(yīng)用級(jí)的各種開發(fā)標(biāo)準(zhǔn)和協(xié)議(application-level standards and conventions)。ERC是Ethereum開發(fā)者為以太坊社區(qū)編寫的,所以在ERC的創(chuàng)建流程中,開發(fā)人員為了創(chuàng)建一個(gè)以太坊平臺(tái)的標(biāo)準(zhǔn),提交了一個(gè)以太坊改進(jìn)方案(EIP,Ethereum Improvement Protocol), 用以改進(jìn)方案中包括協(xié)議規(guī)范和合約標(biāo)準(zhǔn)。 一旦EIP被委員會(huì)批準(zhǔn)并最終確定,它就成為ERC。 EIP的完整原始信息可以在https://github.com/ethereum/EIPs找到。所有的ERC都是EIP。但,反之則未必。ERC目前種類:1.最典型的Token標(biāo)準(zhǔn)(ERC20, ERC721)2.名字注冊(cè)(ERC26, ERC13)3.URI范式(ERC67)4.Library/Package格式(EIP82)5.錢包格式(EIP75,EIP85)。其他種類我們先不展開,先就最典型的Token標(biāo)準(zhǔn)(ERC20\ERC721)簡(jiǎn)單介紹下:什么是ERC20?ERC20 是是2015年11月份推出的一種技術(shù)標(biāo)準(zhǔn),我們經(jīng)常看到的EOS,USDT(ERC20),OMG等就是基于ERC20標(biāo)準(zhǔn)開發(fā)的代幣;ERC20的優(yōu)勢(shì):ERC20標(biāo)準(zhǔn)規(guī)定了各個(gè)代幣的基本功能,非常方便第三方使用;基于ERC20標(biāo)準(zhǔn)開發(fā)的同種代幣價(jià)值都是相同的,它們可以進(jìn)行互換;ERC20代幣能兼容ETH錢包,也就是說(shuō),ETH的錢包地址可以接收所有的ERC20代幣。因此ERC20代幣能被交易所整合,立即進(jìn)行交易。ERC20的劣勢(shì):ERC20標(biāo)準(zhǔn)無(wú)法通過(guò)接收方合同處理傳入的交易。這是該令牌存在的最大問(wèn)題,也是開發(fā)者一直希望改進(jìn)的地方。ERC20令牌無(wú)法將令牌發(fā)送給一個(gè)與這些令牌不兼容的契約,也正因?yàn)檫@樣,部分資金存在丟失的風(fēng)險(xiǎn)。什么是ERC721和ERC20一樣,ERC721同樣是一個(gè)代幣標(biāo)準(zhǔn),ERC721的官方解釋是是“Non-Fungible Tokens”,英文簡(jiǎn)寫為”NFT”,翻譯過(guò)來(lái)即不可互換的非同質(zhì)Token。簡(jiǎn)單地說(shuō),就是每個(gè)Token都是獨(dú)一無(wú)二的,是不能互換的;舉個(gè)例子,之前大火的擼貓游戲CryptoKitties也是基于ERC721標(biāo)準(zhǔn)開發(fā)的,CryptoKitties中的貓都是ERC721的Token,不同基因的貓其實(shí)只是不同屬性的Token,正是由于ERC721的獨(dú)一無(wú)二性(NFT)讓CryptoKitties的貓變得極具收藏價(jià)值,單只貓的價(jià)值更是達(dá)到了1000個(gè)ETH??!ERC20和ERC721的區(qū)別1.Token之間是否可以互換基于ERC20標(biāo)準(zhǔn)開發(fā)的Token沒(méi)有價(jià)值的區(qū)別,是可以互換的,基于ERC721標(biāo)準(zhǔn)開發(fā)的Token則是獨(dú)一無(wú)二,不可以互換的;2.Token是否可以分割ERC20的Token是可以分割的,而ERC721的Token最小的單位為1,它是不能分割的。備注1:Request for Comment由互聯(lián)網(wǎng)工程任務(wù)組制定的一個(gè)概念,是由IETF發(fā)布的一系列備忘錄。其文件收集了有關(guān)Internet相關(guān)信息,以及UNIX和Internet社區(qū)的軟件文件,以編號(hào)排定。RFC文件是由Internet協(xié)會(huì)(ISOC)贊助發(fā)行。發(fā)布于 2019-08-27 17:47區(qū)塊鏈(Blockchain)數(shù)字貨幣錢包?贊同 5??1 條評(píng)論?分享?喜歡?收藏?申請(qǐng)

ERC20解讀 | 登鏈社區(qū) | 區(qū)塊鏈技術(shù)社區(qū)

ERC20解讀 | 登鏈社區(qū) | 區(qū)塊鏈技術(shù)社區(qū)

文章

問(wèn)答

講堂

專欄

集市

更多

提問(wèn)

發(fā)表文章

活動(dòng)

文檔

招聘

發(fā)現(xiàn)

Toggle navigation

首頁(yè) (current)

文章

問(wèn)答

講堂

專欄

活動(dòng)

招聘

文檔

集市

搜索

登錄/注冊(cè)

ERC20解讀

Confucian

更新于 2022-04-04 19:54

閱讀 6967

對(duì)ERC20代幣標(biāo)準(zhǔn)的個(gè)人解讀

# ERC20解讀

**參考 **[**OpenZepplin文檔**](https://docs.openzeppelin.com/contracts/4.x/erc20)** 和 **[**以太坊官方開發(fā)者文檔**](https://ethereum.org/en/developers/docs/standards/tokens/erc-20/)**,結(jié)合自己的理解。**

博客的 Markdown 編輯器暫不支持 Solidity 語(yǔ)法高亮,為了更好閱讀代碼,可以去 [**我的GitHub倉(cāng)庫(kù)**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/tree/main/ERC20) 。

## **什么是ERC20**

**ERC20(Ethereum Request for Comments 20)一種代幣標(biāo)準(zhǔn)。**[**EIP-20**](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) 中提出。

**ERC20 代幣合約跟蹤同質(zhì)化(可替代)代幣:任何一個(gè)代幣都完全等同于任何其他代幣;沒(méi)有任何代幣具有與之相關(guān)的特殊權(quán)利或行為。這使得 ERC20 代幣可用于交換貨幣、投票權(quán)、質(zhì)押等媒介。**

## **為什么要遵守ERC20**

**EIP-20 中的動(dòng)機(jī):**

> **允許以太坊上的任何代幣被其他應(yīng)用程序(從錢包到去中心化交易所)重新使用的標(biāo)準(zhǔn)接口。**

**以太坊上的所有應(yīng)用都默認(rèn)支持 ERC20 ,如果你想自己發(fā)幣,那么你的代碼必須遵循 ERC20 標(biāo)準(zhǔn),這樣錢包(如MetaMask)等應(yīng)用才能將你的幣顯示出來(lái)。**

## **代碼實(shí)現(xiàn)**

**需要實(shí)現(xiàn)以下函數(shù)和事件:**

```

function name() public view returns (string)

function symbol() public view returns (string)

function decimals() public view returns (uint8)

function totalSupply() public view returns (uint256)

function balanceOf(address _owner) public view returns (uint256 balance)

function transfer(address _to, uint256 _value) public returns (bool success)

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

function approve(address _spender, uint256 _value) public returns (bool success)

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

?

event Transfer(address indexed _from, address indexed _to, uint256 _value)

event Approval(address indexed _owner, address indexed _spender, uint256 _value)

```

**使用 OpenZeppllin 提供的庫(kù)能夠輕松快速地構(gòu)建 ERC20 Token 。**

### **快速構(gòu)建**

**這是一個(gè) GLD token 。**

```

// contracts/GLDToken.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

?

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

?

contract GLDToken is ERC20 {

constructor(uint256 initialSupply) ERC20("Gold", "GLD") {

_mint(msg.sender, initialSupply);

}

}

```

**通常,我們定義代幣的發(fā)行量和代幣名稱及符號(hào)。**

### **IERC20**

**先來(lái)看下 ERC20 的接口(IERC20),這方便我們?cè)陂_發(fā)中直接定義 ERC20 代幣。**

**同樣地,OpenZepplin 為我們提供了相應(yīng)的庫(kù),方便開發(fā)者導(dǎo)入即用。**

```

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

```

****EIP 中定義的 ERC20 標(biāo)準(zhǔn)接口:****

```

pragma solidity ^0.8.0;

?

interface IERC20 {

event Transfer(address indexed from, address indexed to, uint256 value);

event Approval(address indexed owner, address indexed spender, uint256 value);

function totalSupply() external view returns (uint256);

function balanceOf(address account) external view returns (uint256);

function transfer(address to, uint256 amount) external returns (bool);

function allowance(address owner, address spender) external view returns (uint256);

function approve(address spender, uint256 amount) external returns (bool);

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

}

```

#### **逐一分析**

**函數(shù):**

* `totalSupply()` :返回總共的代幣數(shù)量。

* `balanceOf(address account)` :返回 `account` 地址擁有的代幣數(shù)量。

* `transfer(address to, uint256 amount)` :將 **`amount`** 數(shù)量的代幣發(fā)送給 **`to`** 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) **`Transfer`** 事件。

* `allowance(address owner, address spender)` :返回授權(quán)花費(fèi)者 **`spender`** 通過(guò) **`transferFrom`** 代表所有者花費(fèi)的剩余代幣數(shù)量。默認(rèn)情況下為零。當(dāng) **`approve`** 和 **`transferFrom`** 被調(diào)用時(shí),值將改變。

* `approve(address spender, uint256 amount)` :授權(quán) **`spender`** 可以花費(fèi) **`amount`** 數(shù)量的代幣,返回布爾值告知是否執(zhí)行成功。觸發(fā) **`Approval`** 事件。

* `transferFrom(address from, address to, uint256 amount)` :將 **`amount`** 數(shù)量的代幣從 **`from`** 地址發(fā)送到 **`to`** 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) **`Transfer`** 事件。

**事件(定義中的 **`indexed`** 便于查找過(guò)濾):**

* `Transfer(address from, address to, uint256 value)` :當(dāng)代幣被一個(gè)地址轉(zhuǎn)移到另一個(gè)地址時(shí)觸發(fā)。注意:轉(zhuǎn)移的值可能是 0 。

* `Approval(address owner, address spender, uint256 value)` :當(dāng)代幣所有者授權(quán)別人使用代幣時(shí)觸發(fā),即調(diào)用 **`approve`** 方法。

#### **元數(shù)據(jù)**

**一般除了上述必須實(shí)現(xiàn)的函數(shù)外,還有一些別的方法:**

* `name()` :返回代幣名稱

* `symbol()` :返回代幣符號(hào)

* `decimals()` :返回代幣小數(shù)點(diǎn)后位數(shù)

### **ERC20**

**來(lái)看下 ERC20 代幣具體是怎么寫的。**

**同樣,OpenZepplin 提供了現(xiàn)成的合約代碼:**

```

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

```

這里貼一個(gè)GitHub源碼鏈接 [**OpenZepplin ERC20**](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol)

#### **函數(shù)概覽**

```

constructor(name_, symbol_)

name()

symbol()

decimals()

totalSupply()

balanceOf(account)

transfer(to, amount)

allowance(owner, spender)

approve(spender, amount)

transferFrom(from, to, amount)

increaseAllowance(spender, addedValue)

decreaseAllowance(spender, subtractedValue)

_transfer(from, to, amount)

_mint(account, amount)

_burn(account, amount)

_approve(owner, spender, amount)

_spendAllowance(owner, spender, amount)

_beforeTokenTransfer(from, to, amount)

_afterTokenTransfer(from, to, amount)

```

****事件(同 IERC20)****

```

Transfer(from, to, value)

Approval(owner, spender, value)

```

#### **逐一分析**

* `constructor(string name, string symbol)` :設(shè)定代幣的名稱和符號(hào)。**`decimals`** 默認(rèn)是 18 ,要修改成不同的值你應(yīng)該重載它。這兩個(gè)值是不變的,只在構(gòu)造時(shí)賦值一次。

* `name()` :返回代幣的名稱。

* `symbol()` :返回代幣的符號(hào),通常是名稱的縮寫。

* `decimals()` :返回小數(shù)點(diǎn)后位數(shù),通常是 18 ,模仿 Ether 和 wei 。要更改就重寫它。

`totalSupply()、balanceOf(address account)、transfer(address to, uint256 amount)、 allowance(address owner, address spender)、approve(address spender, uint256 amount)、transferFrom(address from, address to, uint256 amount)` 都參考 IERC20 。

* `increaseAllowance(address spender, uint256 addedValue)` :以原子的方式增加 **`spender`** 額度。返回布爾值告知是否執(zhí)行成功,觸發(fā) **`Approval`** 事件。

* `_transfer(address from, address to, uint256 amount)` :轉(zhuǎn)賬。這個(gè)內(nèi)部函數(shù)相當(dāng)于 **`transfer`** ,可以用于例如實(shí)施自動(dòng)代幣費(fèi)用,削減機(jī)制等。觸發(fā) **`Transfer`** 事件。

* `_mint(address account, uint256 amount)` :鑄造 **`amount`** 數(shù)量的代幣給 **`account`** 地址,增加總發(fā)行量。觸發(fā) **`Transfer`** 事件,其中參數(shù) **`from`** 是零地址。

* `_burn(address account, uint256 amount)` :從 **`account`** 地址中燒毀 **`amount`** 數(shù)量的代幣,減少總發(fā)行量。觸發(fā) **`Transfer`** 事件,其中參數(shù) **`to`** 是零地址。

* `_approve(address owner, uint256 spender, uint256 amount)` :設(shè)定允許 **`spender`** 花費(fèi) **`owner`** 的代幣數(shù)量。這個(gè)內(nèi)部函數(shù)相當(dāng)于 **`approve`** ,可以用于例如為某些子系統(tǒng)設(shè)置自動(dòng)限額等。

* `spendAllowance(address owner, address spender, uint256 amount)` :花費(fèi) **`amount`** 數(shù)量的 **`owner`** 授權(quán) **`spender`** 的代幣。在無(wú)限 allowance 的情況下不更新 allowance 金額。如果沒(méi)有足夠的余量,則恢復(fù)??赡苡|發(fā) **`Approval`** 事件。

* `_beforeTokenTransfer(address from, address to, uint256 amount)` :在任何代幣轉(zhuǎn)賬前的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

* **當(dāng) **`from`** 和 **`to`** 都不是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將發(fā)送給 **`to`** 。

* **當(dāng) **`from`** 是零地址時(shí),將給 **`to`** 鑄造 **`amount`** 數(shù)量的代幣。**

* **當(dāng) **`to`** 是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將被燒毀。

* `from` 和 **`to`** 不能同時(shí)為零地址。

* `_afterTokenTransfer(address from, address to, uint256 amount)` :在任何代幣轉(zhuǎn)賬后的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

* **當(dāng) **`from`** 和 **`to`** 都不是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將發(fā)送給 **`to`** 。

* **當(dāng) **`from`** 是零地址時(shí),將給 **`to`** 鑄造 **`amount`** 數(shù)量的代幣。**

* **當(dāng) **`to`** 是零地址時(shí),**`from` 手里 **`amount`** 數(shù)量的代幣將被燒毀。

* `from` 和 **`to`** 不能同時(shí)為零地址。

#### **小結(jié)**

**ERC20 代碼中的 **`_transfer`**、**`_mint`**、**`_burn`**、**`_approve`**、**`_spendAllowance`**、**`_beforeTokenTransfer`**、**`_afterTokenTransfer` 都是 **`internal`** 函數(shù)(其余為 **`public`** ),也就是說(shuō)它們只能被派生合約調(diào)用。

## **從零開始,自己動(dòng)手**

### **1.編寫IERC20**

[**IERC20.sol**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/blob/main/ERC20/contracts/IERC20.sol)

```

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

interface IERC20 {

/// @dev 總發(fā)行量

function totoalSupply() external view returns (uint256);

/// @dev 查看地址余額

function balanceOf(address account) external view returns (uint256);

/// @dev 單地址轉(zhuǎn)賬

function transfer(address account, uint256 amount) external returns (bool);

/// @dev 查看被授權(quán)人代表所有者花費(fèi)的代幣余額

function allowance(address owner, address spender) external view returns (uint256);

/// @dev 授權(quán)別人花費(fèi)你擁有的代幣

function approve(address spender, uint256 amount) external returns (bool);

/// @dev 雙地址轉(zhuǎn)賬

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

?

/// @dev 發(fā)生代幣轉(zhuǎn)移時(shí)觸發(fā)

event Transfer(address indexed from, address indexed to, uint256 value);

/// @dev 授權(quán)時(shí)觸發(fā)

event Approval(address indexed owner, address indexed spender, uint256 value);

}

```

### **2.加上Metadata**

[**IERC20Metadata.sol**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/blob/main/ERC20/contracts/IERC20Metadata.sol)

```

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "IERC20.sol";

?

interface IERC20Metadata is IERC20 {

/// @dev 代幣名稱

function name() external view returns (string memory);

/// @dev 代幣符號(hào)

function symbol() external view returns (string memory);

/// @dev 小數(shù)點(diǎn)后位數(shù)

function decimals() external view returns (uint8);

}

```

### **3.編寫ERC20**

[**ERC20.sol**](https://github.com/Blockchain-Engineer-Learning/Contract-Interpretation/blob/main/ERC20/contracts/ERC20.sol)

```

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "./IERC20.sol";

import "./IERC20Metadata.sol";

?

contract ERC20 is IERC20, IERC30Metadata {

// 地址余額

mapping(address => uint256) private _balances;

// 授權(quán)地址余額

mapping(address => mapping(address => uint256)) private _allowances;

?

uint256 private _totalSupply;

?

string private _name;

string private _symbol;

?

/// @dev 設(shè)定代幣名稱符號(hào)

constructor(string memory name_, string memory symbol_) {

_name = name_;

_symbol = symbol_;

}

?

function name() public view virtual override returns (string memory) {

return _name;

}

?

function symbol() public view virtual override returns (string memory) {

return _symbol;

}

?

/// @dev 小數(shù)點(diǎn)位數(shù)一般為 18

function decimals() public view virtual override returns (uint8) {

return 18;

}

?

function totalSupply() public view virtual override returns (uint256) {

return _totalSupply;

}

?

function balanceOf(address account) public view virtual override returns (uint256) {

return _balances[account];

}

?

function transfer(address to, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_transfer(owner, to, amount);

return true;

}

?

function allowance(address owner, address spender) public view virtual override returns (uint256) {

return _allowances[owner][spender];

}

?

function approve(address spender, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_approve(owner, spender, amount);

return true;

}

?

function transferFrom(

address from,

address to,

uint256 amount

) public virtual override returns (bool) {

address spender = msg.sender;

_spendAllowance(from, spender, amount);

_transfer(from, to, amount);

return true;

}

?

function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {

address owner = msg.sender;

_approve(owner, spender, _allowances[owner][spender] + addedValue);

return true;

}

?

function decreaseAllowance(address spender, uint256 substractedValue) public virtual returns (bool) {

address owner = msg.sender;

uint256 currentAllowance = _allowances[owner][spender];

require(currentAllowance >= substractedValue, "ERC20: decreased allowance below zero");

unchecked {

_approval(owner, spender, currentAllowance - substractedValue);

}

return true;

}

?

function _transfer(

address from,

address to,

uint256 amount

) internal virtual {

require(from != address(0), "ERC20: transfer from the zero address");

require(to != address(0), "ERC20: transfer to the zero address");

?

_beforeTokenTransfer(from, to, amount);

?

uint256 fromBalance = _balances[from];

require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

unchecked {

_balances[from] = fromBalance - amount;

}

_balances[to] += amount;

?

emit Transfer(from, to, amount);

?

_afterTokenTransfer(from, to, amount);

}

?

function _mint(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: mint to the zero address");

?

_beforeTokenTransfer(address(0), account, amount);

?

_totalSupply += amount;

_balances[account] += amount;

emit Transfer(address(0), account, amount);

?

_afterTokenTransfer(address(0), account, amount);

}

?

function _burn(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: burn from the zero address");

?

_beforeTokenTransfer(account, address(0), amount);

?

uint256 accountBalance = _balances[account];

require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

unchecked {

_balances[account] = accountBalance - amount;

}

_totalSupply -= amount;

?

emit Transfer(account, address(0), amount);

?

_afterTokenTransfer(account, address(0), amount);

}

?

function _approve(

address owner,

address spender,

uint256 amount

) internal virtual {

require(owner != address(0), "ERC20: approve from the zero address");

require(spender != address(0), "ERC20: approve to the zero address");

?

_allowances[owner][spender];

emit Approval(owner, spender, amount);

}

?

function _spendAllowance(

address owner,

address spender,

uint256 amount

) internal virtual {

uint256 currentAllowance = allowance(owner, spender);

if (currentAllowance != type(uint256).max) {

require(currentAllowance >= amount, "ERC20: insufficient allowance");

unchecked {

_approve(owner, spender, currentAllowance - amount);

}

}

}

?

function _beforeTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

?

function _afterTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

}

```

## **總結(jié)**

**ERC20 其實(shí)就是一種最常見(jiàn)的代幣標(biāo)準(zhǔn),它明確了同質(zhì)化代幣的經(jīng)典功能并規(guī)范了開發(fā)者編寫 token 時(shí)的代碼,從而方便各種應(yīng)用適配。**

ERC20解讀

參考 OpenZepplin文檔 和 以太坊官方開發(fā)者文檔,結(jié)合自己的理解。

博客的 Markdown 編輯器暫不支持 Solidity 語(yǔ)法高亮,為了更好閱讀代碼,可以去 我的GitHub倉(cāng)庫(kù) 。

什么是ERC20

ERC20(Ethereum Request for Comments 20)一種代幣標(biāo)準(zhǔn)。EIP-20 中提出。

ERC20 代幣合約跟蹤同質(zhì)化(可替代)代幣:任何一個(gè)代幣都完全等同于任何其他代幣;沒(méi)有任何代幣具有與之相關(guān)的特殊權(quán)利或行為。這使得 ERC20 代幣可用于交換貨幣、投票權(quán)、質(zhì)押等媒介。

為什么要遵守ERC20

EIP-20 中的動(dòng)機(jī):

允許以太坊上的任何代幣被其他應(yīng)用程序(從錢包到去中心化交易所)重新使用的標(biāo)準(zhǔn)接口。

以太坊上的所有應(yīng)用都默認(rèn)支持 ERC20 ,如果你想自己發(fā)幣,那么你的代碼必須遵循 ERC20 標(biāo)準(zhǔn),這樣錢包(如MetaMask)等應(yīng)用才能將你的幣顯示出來(lái)。

代碼實(shí)現(xiàn)

需要實(shí)現(xiàn)以下函數(shù)和事件:

function name() public view returns (string)

function symbol() public view returns (string)

function decimals() public view returns (uint8)

function totalSupply() public view returns (uint256)

function balanceOf(address _owner) public view returns (uint256 balance)

function transfer(address _to, uint256 _value) public returns (bool success)

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)

function approve(address _spender, uint256 _value) public returns (bool success)

function allowance(address _owner, address _spender) public view returns (uint256 remaining)

?

event Transfer(address indexed _from, address indexed _to, uint256 _value)

event Approval(address indexed _owner, address indexed _spender, uint256 _value)

使用 OpenZeppllin 提供的庫(kù)能夠輕松快速地構(gòu)建 ERC20 Token 。

快速構(gòu)建

這是一個(gè) GLD token 。

// contracts/GLDToken.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

?

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

?

contract GLDToken is ERC20 {

constructor(uint256 initialSupply) ERC20("Gold", "GLD") {

_mint(msg.sender, initialSupply);

}

}

通常,我們定義代幣的發(fā)行量和代幣名稱及符號(hào)。

IERC20

先來(lái)看下 ERC20 的接口(IERC20),這方便我們?cè)陂_發(fā)中直接定義 ERC20 代幣。

同樣地,OpenZepplin 為我們提供了相應(yīng)的庫(kù),方便開發(fā)者導(dǎo)入即用。

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

EIP 中定義的 ERC20 標(biāo)準(zhǔn)接口:

pragma solidity ^0.8.0;

?

interface IERC20 {

event Transfer(address indexed from, address indexed to, uint256 value);

event Approval(address indexed owner, address indexed spender, uint256 value);

function totalSupply() external view returns (uint256);

function balanceOf(address account) external view returns (uint256);

function transfer(address to, uint256 amount) external returns (bool);

function allowance(address owner, address spender) external view returns (uint256);

function approve(address spender, uint256 amount) external returns (bool);

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

}

逐一分析

函數(shù):

totalSupply() :返回總共的代幣數(shù)量。

balanceOf(address account) :返回 account 地址擁有的代幣數(shù)量。

transfer(address to, uint256 amount) :將 amount 數(shù)量的代幣發(fā)送給 to 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) Transfer 事件。

allowance(address owner, address spender) :返回授權(quán)花費(fèi)者 spender 通過(guò) transferFrom 代表所有者花費(fèi)的剩余代幣數(shù)量。默認(rèn)情況下為零。當(dāng) approve 和 transferFrom 被調(diào)用時(shí),值將改變。

approve(address spender, uint256 amount) :授權(quán) spender 可以花費(fèi) amount 數(shù)量的代幣,返回布爾值告知是否執(zhí)行成功。觸發(fā) Approval 事件。

transferFrom(address from, address to, uint256 amount) :將 amount 數(shù)量的代幣從 from 地址發(fā)送到 to 地址,返回布爾值告知是否執(zhí)行成功。觸發(fā) Transfer 事件。

事件(定義中的 indexed 便于查找過(guò)濾):

Transfer(address from, address to, uint256 value) :當(dāng)代幣被一個(gè)地址轉(zhuǎn)移到另一個(gè)地址時(shí)觸發(fā)。注意:轉(zhuǎn)移的值可能是 0 。

Approval(address owner, address spender, uint256 value) :當(dāng)代幣所有者授權(quán)別人使用代幣時(shí)觸發(fā),即調(diào)用 approve 方法。

元數(shù)據(jù)

一般除了上述必須實(shí)現(xiàn)的函數(shù)外,還有一些別的方法:

name() :返回代幣名稱

symbol() :返回代幣符號(hào)

decimals() :返回代幣小數(shù)點(diǎn)后位數(shù)

ERC20

來(lái)看下 ERC20 代幣具體是怎么寫的。

同樣,OpenZepplin 提供了現(xiàn)成的合約代碼:

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

這里貼一個(gè)GitHub源碼鏈接 OpenZepplin ERC20

函數(shù)概覽

constructor(name_, symbol_)

name()

symbol()

decimals()

totalSupply()

balanceOf(account)

transfer(to, amount)

allowance(owner, spender)

approve(spender, amount)

transferFrom(from, to, amount)

increaseAllowance(spender, addedValue)

decreaseAllowance(spender, subtractedValue)

_transfer(from, to, amount)

_mint(account, amount)

_burn(account, amount)

_approve(owner, spender, amount)

_spendAllowance(owner, spender, amount)

_beforeTokenTransfer(from, to, amount)

_afterTokenTransfer(from, to, amount)

事件(同 IERC20)

Transfer(from, to, value)

Approval(owner, spender, value)

逐一分析

constructor(string name, string symbol) :設(shè)定代幣的名稱和符號(hào)。decimals 默認(rèn)是 18 ,要修改成不同的值你應(yīng)該重載它。這兩個(gè)值是不變的,只在構(gòu)造時(shí)賦值一次。

name() :返回代幣的名稱。

symbol() :返回代幣的符號(hào),通常是名稱的縮寫。

decimals() :返回小數(shù)點(diǎn)后位數(shù),通常是 18 ,模仿 Ether 和 wei 。要更改就重寫它。

totalSupply()、balanceOf(address account)、transfer(address to, uint256 amount)、 allowance(address owner, address spender)、approve(address spender, uint256 amount)、transferFrom(address from, address to, uint256 amount) 都參考 IERC20 。

increaseAllowance(address spender, uint256 addedValue) :以原子的方式增加 spender 額度。返回布爾值告知是否執(zhí)行成功,觸發(fā) Approval 事件。

_transfer(address from, address to, uint256 amount) :轉(zhuǎn)賬。這個(gè)內(nèi)部函數(shù)相當(dāng)于 transfer ,可以用于例如實(shí)施自動(dòng)代幣費(fèi)用,削減機(jī)制等。觸發(fā) Transfer 事件。

_mint(address account, uint256 amount) :鑄造 amount 數(shù)量的代幣給 account 地址,增加總發(fā)行量。觸發(fā) Transfer 事件,其中參數(shù) from 是零地址。

_burn(address account, uint256 amount) :從 account 地址中燒毀 amount 數(shù)量的代幣,減少總發(fā)行量。觸發(fā) Transfer 事件,其中參數(shù) to 是零地址。

_approve(address owner, uint256 spender, uint256 amount) :設(shè)定允許 spender 花費(fèi) owner 的代幣數(shù)量。這個(gè)內(nèi)部函數(shù)相當(dāng)于 approve ,可以用于例如為某些子系統(tǒng)設(shè)置自動(dòng)限額等。

spendAllowance(address owner, address spender, uint256 amount) :花費(fèi) amount 數(shù)量的 owner 授權(quán) spender 的代幣。在無(wú)限 allowance 的情況下不更新 allowance 金額。如果沒(méi)有足夠的余量,則恢復(fù)??赡苡|發(fā) Approval 事件。

_beforeTokenTransfer(address from, address to, uint256 amount) :在任何代幣轉(zhuǎn)賬前的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

當(dāng) from 和 to 都不是零地址時(shí),from 手里 amount 數(shù)量的代幣將發(fā)送給 to 。

當(dāng) from 是零地址時(shí),將給 to 鑄造 amount 數(shù)量的代幣。

當(dāng) to 是零地址時(shí),from 手里 amount 數(shù)量的代幣將被燒毀。

from 和 to 不能同時(shí)為零地址。

_afterTokenTransfer(address from, address to, uint256 amount) :在任何代幣轉(zhuǎn)賬后的 Hook 。它包括鑄幣和燒毀。調(diào)用條件:

當(dāng) from 和 to 都不是零地址時(shí),from 手里 amount 數(shù)量的代幣將發(fā)送給 to 。

當(dāng) from 是零地址時(shí),將給 to 鑄造 amount 數(shù)量的代幣。

當(dāng) to 是零地址時(shí),from 手里 amount 數(shù)量的代幣將被燒毀。

from 和 to 不能同時(shí)為零地址。

小結(jié)

ERC20 代碼中的 _transfer、_mint、_burn、_approve、_spendAllowance、_beforeTokenTransfer、_afterTokenTransfer 都是 internal 函數(shù)(其余為 public ),也就是說(shuō)它們只能被派生合約調(diào)用。

從零開始,自己動(dòng)手

1.編寫IERC20

IERC20.sol

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

interface IERC20 {

/// @dev 總發(fā)行量

function totoalSupply() external view returns (uint256);

/// @dev 查看地址余額

function balanceOf(address account) external view returns (uint256);

/// @dev 單地址轉(zhuǎn)賬

function transfer(address account, uint256 amount) external returns (bool);

/// @dev 查看被授權(quán)人代表所有者花費(fèi)的代幣余額

function allowance(address owner, address spender) external view returns (uint256);

/// @dev 授權(quán)別人花費(fèi)你擁有的代幣

function approve(address spender, uint256 amount) external returns (bool);

/// @dev 雙地址轉(zhuǎn)賬

function transferFrom(

address from,

address to,

uint256 amount

) external returns (bool);

?

/// @dev 發(fā)生代幣轉(zhuǎn)移時(shí)觸發(fā)

event Transfer(address indexed from, address indexed to, uint256 value);

/// @dev 授權(quán)時(shí)觸發(fā)

event Approval(address indexed owner, address indexed spender, uint256 value);

}

2.加上Metadata

IERC20Metadata.sol

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "IERC20.sol";

?

interface IERC20Metadata is IERC20 {

/// @dev 代幣名稱

function name() external view returns (string memory);

/// @dev 代幣符號(hào)

function symbol() external view returns (string memory);

/// @dev 小數(shù)點(diǎn)后位數(shù)

function decimals() external view returns (uint8);

}

3.編寫ERC20

ERC20.sol

// SPDX-License-Identifier: MIT

?

pragma solidity ^0.8.0;

?

import "./IERC20.sol";

import "./IERC20Metadata.sol";

?

contract ERC20 is IERC20, IERC30Metadata {

// 地址余額

mapping(address => uint256) private _balances;

// 授權(quán)地址余額

mapping(address => mapping(address => uint256)) private _allowances;

?

uint256 private _totalSupply;

?

string private _name;

string private _symbol;

?

/// @dev 設(shè)定代幣名稱符號(hào)

constructor(string memory name_, string memory symbol_) {

_name = name_;

_symbol = symbol_;

}

?

function name() public view virtual override returns (string memory) {

return _name;

}

?

function symbol() public view virtual override returns (string memory) {

return _symbol;

}

?

/// @dev 小數(shù)點(diǎn)位數(shù)一般為 18

function decimals() public view virtual override returns (uint8) {

return 18;

}

?

function totalSupply() public view virtual override returns (uint256) {

return _totalSupply;

}

?

function balanceOf(address account) public view virtual override returns (uint256) {

return _balances[account];

}

?

function transfer(address to, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_transfer(owner, to, amount);

return true;

}

?

function allowance(address owner, address spender) public view virtual override returns (uint256) {

return _allowances[owner][spender];

}

?

function approve(address spender, uint256 amount) public virtual override returns (bool) {

address owner = msg.sender;

_approve(owner, spender, amount);

return true;

}

?

function transferFrom(

address from,

address to,

uint256 amount

) public virtual override returns (bool) {

address spender = msg.sender;

_spendAllowance(from, spender, amount);

_transfer(from, to, amount);

return true;

}

?

function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {

address owner = msg.sender;

_approve(owner, spender, _allowances[owner][spender] + addedValue);

return true;

}

?

function decreaseAllowance(address spender, uint256 substractedValue) public virtual returns (bool) {

address owner = msg.sender;

uint256 currentAllowance = _allowances[owner][spender];

require(currentAllowance >= substractedValue, "ERC20: decreased allowance below zero");

unchecked {

_approval(owner, spender, currentAllowance - substractedValue);

}

return true;

}

?

function _transfer(

address from,

address to,

uint256 amount

) internal virtual {

require(from != address(0), "ERC20: transfer from the zero address");

require(to != address(0), "ERC20: transfer to the zero address");

?

_beforeTokenTransfer(from, to, amount);

?

uint256 fromBalance = _balances[from];

require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

unchecked {

_balances[from] = fromBalance - amount;

}

_balances[to] += amount;

?

emit Transfer(from, to, amount);

?

_afterTokenTransfer(from, to, amount);

}

?

function _mint(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: mint to the zero address");

?

_beforeTokenTransfer(address(0), account, amount);

?

_totalSupply += amount;

_balances[account] += amount;

emit Transfer(address(0), account, amount);

?

_afterTokenTransfer(address(0), account, amount);

}

?

function _burn(address account, uint256 amount) internal virtual {

require(account != address(0), "ERC20: burn from the zero address");

?

_beforeTokenTransfer(account, address(0), amount);

?

uint256 accountBalance = _balances[account];

require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

unchecked {

_balances[account] = accountBalance - amount;

}

_totalSupply -= amount;

?

emit Transfer(account, address(0), amount);

?

_afterTokenTransfer(account, address(0), amount);

}

?

function _approve(

address owner,

address spender,

uint256 amount

) internal virtual {

require(owner != address(0), "ERC20: approve from the zero address");

require(spender != address(0), "ERC20: approve to the zero address");

?

_allowances[owner][spender];

emit Approval(owner, spender, amount);

}

?

function _spendAllowance(

address owner,

address spender,

uint256 amount

) internal virtual {

uint256 currentAllowance = allowance(owner, spender);

if (currentAllowance != type(uint256).max) {

require(currentAllowance >= amount, "ERC20: insufficient allowance");

unchecked {

_approve(owner, spender, currentAllowance - amount);

}

}

}

?

function _beforeTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

?

function _afterTokenTransfer(

address from,

address to,

uint256 amount

) internal virtual {}

}

總結(jié)

ERC20 其實(shí)就是一種最常見(jiàn)的代幣標(biāo)準(zhǔn),它明確了同質(zhì)化代幣的經(jīng)典功能并規(guī)范了開發(fā)者編寫 token 時(shí)的代碼,從而方便各種應(yīng)用適配。

學(xué)分: 39

分類: 以太坊

標(biāo)簽:

ERC20?

點(diǎn)贊 3

收藏 5

分享

Twitter分享

微信掃碼分享

本文參與登鏈社區(qū)寫作激勵(lì)計(jì)劃 ,好文好收益,歡迎正在閱讀的你也加入。

你可能感興趣的文章

花式發(fā)幣法之發(fā)行各類 ERC20 代幣

3968 瀏覽

Michael.W基于Foundry精讀Openzeppelin第39期——ERC20.sol

506 瀏覽

教程:如何在沒(méi)有 Web 界面的情況下創(chuàng)建 ERC20橋

1574 瀏覽

一個(gè)簡(jiǎn)單的ERC20代幣空投合約

2653 瀏覽

發(fā)布一款ERC20代幣,并開發(fā)成Dapp

1548 瀏覽

Aptos合約開發(fā)之部署ERC20合約

3944 瀏覽

相關(guān)問(wèn)題

請(qǐng)教下大家,Swap如何實(shí)現(xiàn)賣幣手續(xù)費(fèi)

2 回答

如何從發(fā)起部署的地址中,轉(zhuǎn)移一部分代幣到已經(jīng)部署的合約地址中,麻煩那位大佬看一下

5 回答

空投的默克爾樹如何防止生日攻擊?

2 回答

bsc鏈上的erc20合約,要求只有一點(diǎn)買賣的時(shí)候2%兌換成bnb發(fā)送到營(yíng)銷錢包,現(xiàn)在的問(wèn)題是添加流動(dòng)性會(huì)一直報(bào)錯(cuò)Fail with error 'TransferHelper::transferFrom: transferFrom failed'

2 回答

eth中如何判斷合約是erc20合約

2 回答

尋找使用Vyper部署的帶有交易稅的ERC20代幣模版

1 回答

0 條評(píng)論

請(qǐng)先 登錄 后評(píng)論

Confucian

關(guān)注

貢獻(xiàn)值: 57

學(xué)分: 83

Keep Learning

文章目錄

關(guān)于

關(guān)于我們

社區(qū)公約

學(xué)分規(guī)則

Github

伙伴們

DeCert

ChainTool

GCC

合作

廣告投放

發(fā)布課程

聯(lián)系我們

友情鏈接

關(guān)注社區(qū)

Discord

Twitter

Youtube

B 站

公眾號(hào)

關(guān)注不錯(cuò)過(guò)動(dòng)態(tài)

微信群

加入技術(shù)圈子

?2024 登鏈社區(qū) 版權(quán)所有 |

Powered By Tipask3.5|

粵公網(wǎng)安備 44049102496617號(hào)

粵ICP備17140514號(hào)

粵B2-20230927

增值電信業(yè)務(wù)經(jīng)營(yíng)許可證

×

發(fā)送私信

請(qǐng)將文檔鏈接發(fā)給曉娜,我們會(huì)盡快安排上架,感謝您的推薦!

發(fā)給:

內(nèi)容:

取消

發(fā)送

×

舉報(bào)此文章

垃圾廣告信息:

廣告、推廣、測(cè)試等內(nèi)容

違規(guī)內(nèi)容:

色情、暴力、血腥、敏感信息等內(nèi)容

不友善內(nèi)容:

人身攻擊、挑釁辱罵、惡意行為

其他原因:

請(qǐng)補(bǔ)充說(shuō)明

舉報(bào)原因:

取消

舉報(bào)

×

如果覺(jué)得我的文章對(duì)您有用,請(qǐng)隨意打賞。你的支持將鼓勵(lì)我繼續(xù)創(chuàng)作!

小白入門-什么是ERC(以太坊智能合約) - 知乎

小白入門-什么是ERC(以太坊智能合約) - 知乎切換模式寫文章登錄/注冊(cè)小白入門-什么是ERC(以太坊智能合約)psitoken海神錢包什么是ERC?ERC全稱“Ethereum Request for Comment"(備注1),翻譯過(guò)來(lái)即Ethereum版的意見(jiàn)征求稿,用以記錄以太坊上應(yīng)用級(jí)的各種開發(fā)標(biāo)準(zhǔn)和協(xié)議(application-level standards and conventions)。ERC是Ethereum開發(fā)者為以太坊社區(qū)編寫的,所以在ERC的創(chuàng)建流程中,開發(fā)人員為了創(chuàng)建一個(gè)以太坊平臺(tái)的標(biāo)準(zhǔn),提交了一個(gè)以太坊改進(jìn)方案(EIP,Ethereum Improvement Protocol), 用以改進(jìn)方案中包括協(xié)議規(guī)范和合約標(biāo)準(zhǔn)。 一旦EIP被委員會(huì)批準(zhǔn)并最終確定,它就成為ERC。 EIP的完整原始信息可以在https://github.com/ethereum/EIPs找到。所有的ERC都是EIP。但,反之則未必。ERC目前種類:1.最典型的Token標(biāo)準(zhǔn)(ERC20, ERC721)2.名字注冊(cè)(ERC26, ERC13)3.URI范式(ERC67)4.Library/Package格式(EIP82)5.錢包格式(EIP75,EIP85)。其他種類我們先不展開,先就最典型的Token標(biāo)準(zhǔn)(ERC20\ERC721)簡(jiǎn)單介紹下:什么是ERC20?ERC20 是是2015年11月份推出的一種技術(shù)標(biāo)準(zhǔn),我們經(jīng)??吹降腅OS,USDT(ERC20),OMG等就是基于ERC20標(biāo)準(zhǔn)開發(fā)的代幣;ERC20的優(yōu)勢(shì):ERC20標(biāo)準(zhǔn)規(guī)定了各個(gè)代幣的基本功能,非常方便第三方使用;基于ERC20標(biāo)準(zhǔn)開發(fā)的同種代幣價(jià)值都是相同的,它們可以進(jìn)行互換;ERC20代幣能兼容ETH錢包,也就是說(shuō),ETH的錢包地址可以接收所有的ERC20代幣。因此ERC20代幣能被交易所整合,立即進(jìn)行交易。ERC20的劣勢(shì):ERC20標(biāo)準(zhǔn)無(wú)法通過(guò)接收方合同處理傳入的交易。這是該令牌存在的最大問(wèn)題,也是開發(fā)者一直希望改進(jìn)的地方。ERC20令牌無(wú)法將令牌發(fā)送給一個(gè)與這些令牌不兼容的契約,也正因?yàn)檫@樣,部分資金存在丟失的風(fēng)險(xiǎn)。什么是ERC721和ERC20一樣,ERC721同樣是一個(gè)代幣標(biāo)準(zhǔn),ERC721的官方解釋是是“Non-Fungible Tokens”,英文簡(jiǎn)寫為”NFT”,翻譯過(guò)來(lái)即不可互換的非同質(zhì)Token。簡(jiǎn)單地說(shuō),就是每個(gè)Token都是獨(dú)一無(wú)二的,是不能互換的;舉個(gè)例子,之前大火的擼貓游戲CryptoKitties也是基于ERC721標(biāo)準(zhǔn)開發(fā)的,CryptoKitties中的貓都是ERC721的Token,不同基因的貓其實(shí)只是不同屬性的Token,正是由于ERC721的獨(dú)一無(wú)二性(NFT)讓CryptoKitties的貓變得極具收藏價(jià)值,單只貓的價(jià)值更是達(dá)到了1000個(gè)ETH??!ERC20和ERC721的區(qū)別1.Token之間是否可以互換基于ERC20標(biāo)準(zhǔn)開發(fā)的Token沒(méi)有價(jià)值的區(qū)別,是可以互換的,基于ERC721標(biāo)準(zhǔn)開發(fā)的Token則是獨(dú)一無(wú)二,不可以互換的;2.Token是否可以分割ERC20的Token是可以分割的,而ERC721的Token最小的單位為1,它是不能分割的。備注1:Request for Comment由互聯(lián)網(wǎng)工程任務(wù)組制定的一個(gè)概念,是由IETF發(fā)布的一系列備忘錄。其文件收集了有關(guān)Internet相關(guān)信息,以及UNIX和Internet社區(qū)的軟件文件,以編號(hào)排定。RFC文件是由Internet協(xié)會(huì)(ISOC)贊助發(fā)行。發(fā)布于 2019-08-27 17:47區(qū)塊鏈(Blockchain)數(shù)字貨幣錢包?贊同 5??1 條評(píng)論?分享?喜歡?收藏?申請(qǐng)

404 Not Found


nginx/1.25.2
精品人妻系列无码专区首列精品88| 亚洲av无码片在线观看| 各种少妇正面着bbw撒尿视频| 欧美成人国产精品视频| 日本边添边摸边做边爱的视频| 午夜乱人伦精品视频在线| 久久99精品久久久久久齐齐| 欧美交换配乱吟粗大| 亚洲欧美日韩综合在线丁香| 爽爽影院现观看免费| 欧美亚洲综合另类色妞网| 国产成人精品一区二区秒拍| 国语做受对白XXXXX在线| 国产精品 无码专区| 2023国产精品一卡2卡三卡4卡| 亚洲AV日韩AV永久无码绿巨人| 又大又长粗又爽又黄少妇毛片| 亚洲成A人一区二区三区| 亚洲AV激情无码专区在线下载| 久久久99精品免费观看| 成 年 人 黄 色 大 片大 全| 国产特级毛片AAAAAA高清| 人人妻久久人人澡人人爽人人精品| 成人免费无码毛片黄网| 成人精品一区二区三区电影| 国产精品久久久久久不卡| 老太脱裤让老头玩ⅹxxxx| 人妻少妇精品无码专区吞精| 国产丝袜无码一区二区三区视频| 中国杭州少妇xxxx做受| 国产免费福利在线视频| 国内精品久久久久久久影视麻豆| 中文字字幕在线成人AV电影| 高清乱码一卡二卡视频| 男人扒开女人腿桶到爽免费| 日日av色欲香天天综合网| 精品无码AV人妻受辱系列| 欧美日韩人成综合在线播放| 久久久中文久久久无码| 亚洲成色AV网站午夜影视| 久久亚洲精品情侣|