ERC代幣協議
代幣(Token)是區塊鏈上很重要的一個元素,經過適當定義,它幾乎可以指稱各式各樣的東西,例如美元、股票、黃金、演唱會門票、購買證明、會員卡、折價券等等。多數鏈會有自己的Token Standards(代幣協議)來對其進行定義與規範。其存在的原因,從反面來看:假設一條鏈上沒有對代幣進行規範,則代幣之間無法進行協作,就不具有可組合性(composable),那麼可玩性就會很差。從正面來看:如果已經預設好一種代幣有什麼變數與功能,開發者則可以直接套模板,大大降低了發行代幣的成本。
想做「世界電腦」的以太坊是第一個建立這種代幣協議的鏈。以太坊上的技術協議標準是由EIPs (Ethereum Improvement Proposals) 來推動,每個人都有權利依照一定的格式,在論壇上發表EIP,但提出者有義務自行去取得社群內的共識。由於一份標準的EIP需要寫明清楚而準確的技術細節,還要走一個非常嚴謹的流程,所以門檻是很高的,多數是由資深開發者所提出。例如現在已封神的Vitalik Buterin與Gavin Wood等人,早期都擔任過EIP的編輯。
EIP這套邏輯,來源自Python Enhancement Proposals (PEPs),之後PEPs給了Bitcoin Improvement Proposals (BIPs)靈感,而BIPs又帶給EIPs靈感。是借鑑,不是抄襲😛
EIPs可以分為三大類:Standards Track、Meta、Informational。細節可以參考這邊。我們現在只需要知道ERC (Ethereum Requests for Comments)是在Standards Track之下的一種EIP,專門管理應用層面 (application-level) 的方案,而我們這次談的代幣協議就是在ERC這個子分類之下的一種。
在搞清楚背後原因與歷史因素之後,接下來我們就來簡單介紹一些以太坊上常聽到的代幣協議。
ERC-20
經過上面的論述,你會知道其實EIP-20是更標準的叫法,但因為其隸屬於ERC分類,大眾比較習慣ERC-20這個叫法,我們這邊也繼續沿用。畢竟語言是拿來溝通的,沒必要糾結。
在2015/11,由Fabian與Vitalik共同提出,是以太坊上最早的代幣協議。它主要定義了同質化代幣 (Fungible Token)的規格。同質化直接就是字面上的意思,例如任何一張五十美元的美元鈔票,在都是真鈔的前提下,不會因為新舊、擁有者、過去經手紀錄、地點、時空,而有價值上的差異。與其對應的概念就是非同質化(Non-Fungible),我們將在下一個協議提到。
在ERC20規定下,一種代幣是由一支智能合約來管理的,例如在etherscan上,可以點進WETH看,在Profile Summary那邊0xC02aa的那個地址,就是管理WETH的合約地址。這邊有個小細節,ETH本身並不符合ERC20標準,因為ETH誕生的比ERC20標準還要早。而WETH就是把ETH包裝成符合ERC20的樣子,所以在很多DeFi協議上,你拿ETH去進行互動,實際上用的會是WETH,否則DeFi協議上的代幣之間很難互動,而這就是我們前面說到的可組合性。
ERC20定義了一個合約地址之下,會有name、symbol、decimals、totalSupply、balanceOf等特性,也定義了Transfer與Approval兩種event。
繼續拿WETH來舉例:
- name: Wrapped Ether
- symbol: WETH
- decimals: 18 (最小單位是小數點後18位)
- totalSupply: 4070944 (目前在外的總流通量)
- balanceOf: 5140 (用這個函數,還要放入一個地址,這邊的5140是在0xC02aa這個合約地址上的)
Transfer:定義了一筆轉帳,裡面的變數有三個:發送者、接受者、金額。例如我們之前說過的鑄造(mint),在以太坊的規定下,發送者就是0x0這個空地址。
Approval:定義了授權一筆金額,裡面也有三個變數:代幣的原持有地址、要授權的地址、要授權的金額。
ERC-721
在以太坊上,規範非同質化代幣(Non-Fungible Token)的協議。很常聽到的NFT,指的就是在ERC721規則之下發行的代幣。非同質指的是,例如一張演唱會的票,一樓的票跟三樓的票肯定是不一樣的,每一張票都有專屬於自己的特質,用演唱會的例子就是幾樓幾排幾號,而這項資訊會被放在一個具有獨特性的tokenId之下。
因為每個NFT的tokenId是獨一無二的,生成式藝術(Generative Art)的創作者,能把tokenId作為input,用某個設計好的函數轉換,跑出一張有獨特屬性的NFT。推薦大家到Art Blocks上逛逛,裡面很多作品都很猛。
ERC-1155
又稱為Multi-Token Standard,主要是能讓fungible tokens、non-fungible tokens、semi-fungible tokens能一起互動的一個協議,能簡單想成是ERC-20跟ERC-721的綜合版,這背後的動機也是我們上面提過的可組合性。
它最主要加上了Batch Transfer、Batch Balance、Batch Approval這三個功能。眾所皆知,每次要跟以太坊區塊鏈互動,都是需要支付gas費用的,而這三個Batch的功能,可以理解成Transfer、Balance、Approval的加強版本,能在支付一筆gas費用情況下,就進行多筆的Transfer、Balance、Approval。
ERC-4626
這是一個特別為Vault設計的標準。Vault可以想像成一個資金池,這資金池可以是用來提供交易、借貸、跑交易策略、賣保險等等功能。一般的流程是,先存入(deposit)代幣,這資金會轉換成Vault Share,來代表使用者對一個Vault的佔比。過一段時間想退出了,可以贖回(redeem),除了原本資金外,通常還會有利息、交易策略的獲利、賣保險的利潤等等,取決於一開始是把錢放進哪一個Vault。最後,可以提款(withdraw)到自己的錢包去。這就是一個與Vault互動的基本流程。
而ERC-4626就是在以太坊上,這套流程的一個標準函式庫,它定義好了用ERC-20 token作為存款的Vualt所需要的各種功能。
在ERC與EIP中,有各式各樣的內容值得摸索,我們這次提了有關代幣協議的一小部分,其他有趣的東西之後有機會來講。Be Happy & Stay Tuned,回頭見!
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!