本文由幣乎(bihu.com)優(yōu)質(zhì)內(nèi)容計劃支持
什么是 ERC20
ERC-20 標(biāo)準(zhǔn)是在2015年11月份推出的,使用這種規(guī)則的代幣戈二,表現(xiàn)出一種通用的和可預(yù)測的方式舒裤。
簡單地說,任何 ERC-20 代幣都能立即兼容以太坊錢包(幾乎所有支持以太幣的錢包觉吭,包括Jaxx腾供、MEW、imToken等鲜滩,也支持 erc-20的代幣)伴鳖,由于交易所已經(jīng)知道這些代幣是如何操作的,它們可以很容易地整合這些代幣徙硅。這就意味著榜聂,在很多情況下,這些代幣都是可以立即進(jìn)行交易的嗓蘑。
標(biāo)準(zhǔn)化非常有利须肆,也就意味著這些資產(chǎn)可以用于不同的平臺和項目,否則只能用在特定的場合桩皿。
代幣(Token)是區(qū)塊鏈中定義價值的方式豌汇,用于標(biāo)定金融或數(shù)字資產(chǎn)。在以太坊上业簿,代幣使用相同的標(biāo)準(zhǔn)瘤礁,這樣代幣之間的兌換和DAPP支持就會變得容易。
標(biāo)準(zhǔn)規(guī)定了哪些內(nèi)容
ERC20 是各個代幣的標(biāo)準(zhǔn)接口梅尤。ERC20 代幣僅僅是以太坊代幣的子集柜思。為了充分兼容 ERC20岩调,開發(fā)者需要將一組特定的函數(shù)(接口)集成到他們的智能合約中,以便在高層面能夠執(zhí)行以下操作:
- 獲得代幣總供應(yīng)量
- 獲得賬戶余額
- 轉(zhuǎn)讓代幣
- 批準(zhǔn)花費代幣
ERC20 讓以太坊區(qū)塊鏈上的其他智能合約和去中心化應(yīng)用之間無縫交互赡盘。一些具有部分但非所有ERC20標(biāo)準(zhǔn)功能的代幣被認(rèn)為是部分 ERC20兼容号枕,這還要視其具體缺失的功能而定,但總體是它們?nèi)匀缓苋菀着c外部交互陨享。
ERC20 標(biāo)準(zhǔn)
ERC20 標(biāo)準(zhǔn)定義了一個兼容協(xié)議, 需要實現(xiàn)的函數(shù). 具體如下.
// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
contract ERC20Interface {
function totalSupply() public constant returns (uint);
function balanceOf(address tokenOwner) public constant returns (uint balance);
function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
同時規(guī)定了三個必須定義的變量,分別是
- 合約名稱
- 合約代號
- 合約進(jìn)制
string public constant name = "Token Name";
string public constant symbol = "SYM";
uint8 public constant decimals = 18; // 18 is the most common number of decimal places
ERC20 并不是完美的
ERC-20標(biāo)準(zhǔn)還有待完善葱淳。
其中一個障礙是,將令牌直接發(fā)送給令牌的智能合同將導(dǎo)致資金損失抛姑。這是因為一個令牌的合同只會跟蹤和分配資金赞厕。例如,當(dāng)您從錢包中向另一個用戶發(fā)送令牌時定硝,該錢包將調(diào)用令牌的合約來更新數(shù)據(jù)庫皿桑。所以如果您試圖將令牌直接傳輸?shù)搅钆频暮霞s中,那么由于該令牌的合約無法響應(yīng)蔬啡,所以金錢就“丟失”了诲侮。
ERC20標(biāo)準(zhǔn)無法通過接收方合同處理傳入的交易。這是該令牌存在的最大問題箱蟆,也是開發(fā)者一直希望改進(jìn)的地方沟绪。ERC20令牌無法將令牌發(fā)送給一個與這些令牌不兼容的契約,也正因為這樣空猜,部分資金存在丟失的風(fēng)險绽慈。
Reddit上的一篇文章指出,由于被發(fā)送到“錯誤”的合同上抄肖,大約價值40萬美元的ERC20令牌被困久信,這對整個以太坊生態(tài)系統(tǒng)而言是一個巨大的威脅。幸運的是漓摩,ERC223令牌可以解決這一難題,前提是該令牌能夠獲得批準(zhǔn)并被引入入客。
ERC233
ERC223要解決的首要問題是什么管毙?
自從引入ERC20令牌標(biāo)準(zhǔn)以來,幾乎所有的基于以太坊的令牌都成功的接受了這個新標(biāo)準(zhǔn)桌硫。然而其自身的缺點需要及時解決夭咬,這便是ERC223令牌誕生的原因。
防止丟失
ERC223令牌標(biāo)準(zhǔn)將向現(xiàn)有的ERC20標(biāo)準(zhǔn)引入一個新功能铆隘,以防止意外轉(zhuǎn)移的發(fā)生卓舵。ERC223令牌標(biāo)準(zhǔn)可以防止令牌在以太坊網(wǎng)絡(luò)上丟失。
困難的轉(zhuǎn)換
假設(shè) ERC223 令牌標(biāo)準(zhǔn)能夠取代ERC20成為新的標(biāo)準(zhǔn)膀钠,現(xiàn)有令牌的發(fā)行方需要做一些艱難的決定掏湾。因為裹虫,從現(xiàn)實情況來看,不管用何種方式融击,從ERC20轉(zhuǎn)換到ERC223是不可能的筑公,同樣的,所有ERC20令牌都需要在ERC223標(biāo)準(zhǔn)下重新部署尊浪。這也意味著任何交易平臺的上市都需要更新他們的信息和地址匣屡。這是一個艱苦的過程,這也就意味著拇涤,在未來很少有現(xiàn)有的令牌被有效地轉(zhuǎn)換為ERC223捣作。
正如Alex van de Sande在Reddit上指出的那樣,“更方便”的過程可能是創(chuàng)建新的令牌鹅士,它們是通過持有舊令牌的合同支持的虾宇。這可能是大多數(shù)項目最合理的選擇,但只有時間才能確定哪些選項將被實施如绸。
參考 https://theethereum.wiki/w/index.php/ERC20_Token_Standard