- eip: 1404
- 标题: Simple Restricted Token Standard
- 作者: Ron Gierlach <@rongierlach>, James Poole <@pooleja>, Mason Borda <@masonicGIT>, Lawson Baker <@lwsnbaker>
- 状态: Draft
- 类型: Standards
- 范畴: ERC
- 创建时间: 2018-07-27
摘要
这是一种简单且可互相操作的标准,用于发行具有转账限制的代币。以下的内容来自顶级发行商,律师事务所,相关美国监管机构和交易所的意见。
当前的ERC代币标准为社区提供了一个平台,在平台上面开发一个专注于为现实世界构建以太坊应用程序的去中心化的经济体。随着这些应用程序的成熟并面临消费者的使用,它们开始与公司的治理需求和法规相关联。他们不仅必须要能满足公司和监管的要求,还必须能够与支持其相关业务的技术平台集成。以下是一个简单且可拓展的标准,旨在减轻钱包,交易所和发行人在整合过程中的负担。
动机
代币发行人需要一种方式去限制ERC-20标准代币的转账,以符合证券法和其他合同义务。目前的实现并不满足这些要求。
有一些需求急迫的例子:
- 执行代币的锁定周期
- 执行AML/KYC的通过检查
- 私人的资产投资信托基金
- 特拉华州公司法
此外,在代币发行方之间的标准采用有可能演变为自动合规的动态的和可互相操作的环境
一下的设计为代币发行方提供了更大的自由度/可升级性,同时降低了开发人员和交易所的整合负担。
此外,我们认为提供一种模式,通过该模式在代币转账被回退时返回人类可读的信息是非常合适的。代币转账遭到回退的原因的透明度与成功执行有限制的转账本身是同样重要的。
一个用于检测代币转账过程中的限制条件和错误信息的被广泛采用的标准,将极大地方便未来的交易所,钱包和发行者。
规范
ERC-20代币标准提供了以下的基本特征:
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标准基于ERC-20接口,加入了两个函数:
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
函数的实现逻辑交由发行方。
唯一的要求是detectTransferRestriction
必须在transfer
和transferFrom
方法内部执行判断。
如果,在这些转账方法中,detectTransferRestriction
返回的值不是0
,事务将回退。
基本原理
此标准在ERC-20标准的基础上提出了两个函数和一个事件。让我们讨论其合理性。
-
detectTransferRestriction
—— 这个函数是发行者执行代币转账的限制逻辑的地方。可能包含这几个例子,检查代币接收者是否在白名单中,检查代币的发送者是否处于锁定周期等。因为具体的实现取决于发行者,所以此函数仅用于将执行此类逻辑的入口标准化。此外,第三方可以公开调用此函数来检查一笔转账的预期结果。因为此函数返回一个uint8
类型的代码而不是一个布尔值或仅仅只进行回退,所以它允许函数的调用者知道转账失败的原因并将其报告给相关方。 -
messageForTransferRestriction
—— 此函数实际上是“消息”的访问者,这是一个人类可读的解释,说明为什么一笔转账受到了限制。通过标准化信息的查找,我们使用户界面的开发者能有效地向用户报错。
向后兼容性
ERC-1404在设计上完全向后兼容ERC-20。
网友评论