- eip: 1404
- 標(biāo)題: Simple Restricted Token Standard
- 作者: Ron Gierlach <@rongierlach>, James Poole <@pooleja>, Mason Borda <@masonicGIT>, Lawson Baker <@lwsnbaker>
- 狀態(tài): Draft
- 類型: Standards
- 范疇: ERC
- 創(chuàng)建時(shí)間: 2018-07-27
摘要
這是一種簡(jiǎn)單且可互相操作的標(biāo)準(zhǔn)展鸡,用于發(fā)行具有轉(zhuǎn)賬限制的代幣叫编。以下的內(nèi)容來(lái)自頂級(jí)發(fā)行商,律師事務(wù)所臣嚣,相關(guān)美國(guó)監(jiān)管機(jī)構(gòu)和交易所的意見(jiàn)娇昙。
當(dāng)前的ERC代幣標(biāo)準(zhǔn)為社區(qū)提供了一個(gè)平臺(tái)尺迂,在平臺(tái)上面開(kāi)發(fā)一個(gè)專注于為現(xiàn)實(shí)世界構(gòu)建以太坊應(yīng)用程序的去中心化的經(jīng)濟(jì)體。隨著這些應(yīng)用程序的成熟并面臨消費(fèi)者的使用,它們開(kāi)始與公司的治理需求和法規(guī)相關(guān)聯(lián)枪狂。他們不僅必須要能滿足公司和監(jiān)管的要求危喉,還必須能夠與支持其相關(guān)業(yè)務(wù)的技術(shù)平臺(tái)集成宋渔。以下是一個(gè)簡(jiǎn)單且可拓展的標(biāo)準(zhǔn)州疾,旨在減輕錢(qián)包,交易所和發(fā)行人在整合過(guò)程中的負(fù)擔(dān)皇拣。
動(dòng)機(jī)
代幣發(fā)行人需要一種方式去限制ERC-20標(biāo)準(zhǔn)代幣的轉(zhuǎn)賬严蓖,以符合證券法和其他合同義務(wù)。目前的實(shí)現(xiàn)并不滿足這些要求氧急。
有一些需求急迫的例子:
- 執(zhí)行代幣的鎖定周期
- 執(zhí)行AML/KYC的通過(guò)檢查
- 私人的資產(chǎn)投資信托基金
- 特拉華州公司法
此外颗胡,在代幣發(fā)行方之間的標(biāo)準(zhǔn)采用有可能演變?yōu)樽詣?dòng)合規(guī)的動(dòng)態(tài)的和可互相操作的環(huán)境
一下的設(shè)計(jì)為代幣發(fā)行方提供了更大的自由度/可升級(jí)性,同時(shí)降低了開(kāi)發(fā)人員和交易所的整合負(fù)擔(dān)吩坝。
此外毒姨,我們認(rèn)為提供一種模式,通過(guò)該模式在代幣轉(zhuǎn)賬被回退時(shí)返回人類可讀的信息是非常合適的钉寝。代幣轉(zhuǎn)賬遭到回退的原因的透明度與成功執(zhí)行有限制的轉(zhuǎn)賬本身是同樣重要的弧呐。
一個(gè)用于檢測(cè)代幣轉(zhuǎn)賬過(guò)程中的限制條件和錯(cuò)誤信息的被廣泛采用的標(biāo)準(zhǔn),將極大地方便未來(lái)的交易所嵌纲,錢(qián)包和發(fā)行者俘枫。
規(guī)范
ERC-20代幣標(biāo)準(zhǔn)提供了以下的基本特征:
contract ERC20 {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
event Transfer(address indexed from, address indexed to, uint256 value);
}
ERC-1404標(biāo)準(zhǔn)基于ERC-20接口,加入了兩個(gè)函數(shù):
contract ERC1404 is ERC20 {
function detectTransferRestriction (address from, address to, uint256 value) public view returns (uint8);
function messageForTransferRestriction (uint8 restrictionCode) public view returns (string);
}
detectTransferRestriction
和messageForTransferRestriction
函數(shù)的實(shí)現(xiàn)邏輯交由發(fā)行方逮走。
唯一的要求是detectTransferRestriction
必須在transfer
和transferFrom
方法內(nèi)部執(zhí)行判斷鸠蚪。
如果,在這些轉(zhuǎn)賬方法中师溅,detectTransferRestriction
返回的值不是0
茅信,事務(wù)將回退。
基本原理
此標(biāo)準(zhǔn)在ERC-20標(biāo)準(zhǔn)的基礎(chǔ)上提出了兩個(gè)函數(shù)和一個(gè)事件墓臭。讓我們討論其合理性蘸鲸。
-
detectTransferRestriction
—— 這個(gè)函數(shù)是發(fā)行者執(zhí)行代幣轉(zhuǎn)賬的限制邏輯的地方∑鸨悖可能包含這幾個(gè)例子棚贾,檢查代幣接收者是否在白名單中,檢查代幣的發(fā)送者是否處于鎖定周期等榆综。因?yàn)榫唧w的實(shí)現(xiàn)取決于發(fā)行者妙痹,所以此函數(shù)僅用于將執(zhí)行此類邏輯的入口標(biāo)準(zhǔn)化。此外鼻疮,第三方可以公開(kāi)調(diào)用此函數(shù)來(lái)檢查一筆轉(zhuǎn)賬的預(yù)期結(jié)果怯伊。因?yàn)榇撕瘮?shù)返回一個(gè)uint8
類型的代碼而不是一個(gè)布爾值或僅僅只進(jìn)行回退,所以它允許函數(shù)的調(diào)用者知道轉(zhuǎn)賬失敗的原因并將其報(bào)告給相關(guān)方判沟。 -
messageForTransferRestriction
—— 此函數(shù)實(shí)際上是“消息”的訪問(wèn)者耿芹,這是一個(gè)人類可讀的解釋崭篡,說(shuō)明為什么一筆轉(zhuǎn)賬受到了限制。通過(guò)標(biāo)準(zhǔn)化信息的查找吧秕,我們使用戶界面的開(kāi)發(fā)者能有效地向用戶報(bào)錯(cuò)琉闪。
向后兼容性
ERC-1404在設(shè)計(jì)上完全向后兼容ERC-20。