比较好的文章:
1 https://www.8btc.com/article/281107
ERC1404实现
ERC1404继承了ERC20的所有优点, 同时在ERC20的基础上增加了两个新的函数, 用以适配转移通证过程中的合规条件。
解释:
detectTransferRestriction:
a) 必须由发行方实现
b) 必须在 transfer/transferFrom 中被调用。
c) 如果返回一个非0值, 则交易需要被revert。
d) 发行者需要在该函数中实现token的各种限制: 检查接收方是否在某个白名单上、检查发送方的token是否处于锁定期。第三方也可以通过调用该接口得知transfer是否受限。通过返回一个uint8,调用者可以得知失败的原因,并针对不同的原因做不同类型的处理。
需要说明的是:
a) 检查的逻辑没有限制一定在链上,可以利用Oracle接入线下官方资源进行合规性检查。
b) 也可以用一个第三方合约,实现检查逻辑,而第三方的合约是可以进行升级的。
messageForTransferRestriction
a) 必须由发行方实现
b) 用来将一个错误码解释为可读的错误信息。这在某些场景下非常有用(比如钱包跟交易所之间的交易)。
需要说明的是:此函数只是为了进行错误码的转换,如果错误码已经标准化,此函数就可以不需要了,ERC-1066正是在做这方面的努力。详情请参考小编上一篇文章《ERC1066标准解析》。
新增的这2个接口为ERC20通证带来了控制条件: 何时、何种条件下可以转移多少通证。比如发行方在转移通证之前, 可以查询客户是否在白名单, 以及发送的通证是否在锁定期内。
因此, ERC1404虽然只是增加了2个接口,却提供了新的灵活性。
ERC1404示例
单个账号份额限制 http://t.cn/E4UZuZ1
账号数量限制 http://t.cn/E4Uwykb
白名单管理 http://t.cn/E4UwMMz
Token精确拆分 http://t.cn/E4UwOjf