ERC1410(相当于ERC1411)在天平上增加了ERC20/ERC777中没有的附加信息,使其可以分成不同的部分,并可以进行一些操作限制。。而ERC1400(相当于ERC1411)是对ERC1410标准的继承和完善。
1。ERC1410是STO环境中使用的以太网协议标准。。辉哥专注于深度理解和编码实现,从以下几个方面阐述对ERC1410的理解。
1)ERC1410与ERC1411(ERC1400)与ERC1404的区别
2)同质性证明。、非同质卡与部分同质卡的区别
3)ERC1410标准的数据结构分析
4)ERC1410的接口功能分析
5)ERC1410的场景尝试
。6)codedeploymentandtesting
2.ThedifferencebetweenERC1410andERC1411(ERC1400)andERC1404
ERC1410standardwaswrittenbyAdamDosaGoselin.PabloRuiz和FabianVogelsteller,其中Gosselin和Dossa为Polymath工作,Polymath是发布ST20帮助资产实现证券化证书的平台公司。
ERC1410是以太坊实现STO的技术方案,兼容ERC20和ERC777。引入了部分同质令牌标准的概念。
ItsaddressintheopensourcecodebaseisERC1410:PartialReplaceableTokenStandard#1410.
ERC1400andERC1411arethesamestandard.现在已经在GITHUB上合并了。ERC1411(ERC1400)继承了ERC1410标准,增加了证券相关业务中会用到的功能:证券发行、相关法律文件存储等。
它在GITHUB中的地址是ERC1400:安全令牌标准#1411。
ERC1404指的是简单的受限令牌标准。ERC-1404在ERC-20标准的基础上增加了两个功能。
detecttransferrestriction:该函数是发卡方强制传递的限制逻辑。例子包括(1)检查通行证的接收者是否在白名单中,(2)检查发送者是否';s通行证在锁定期内被冻结,以此类推。该功能的实现只针对发布者。此外,第三方可以公开调用该函数来检查传输的预期结果。因为这个函数会返回一个uint8代码。因此,它允许函数调用方知道传输失败的原因,并将其报告给相关方。
messagefortransforrestriction:这个函数实际上是一个消息访问器。它负责以人类可读的方式解释为什么事务受到限制。通过标准化消息查找,开发人员授权用户界面构建器有效地向用户报告错误。
其在GITHUB的地址。
3。均匀化通过(英尺)NFT和PFT
ERC1410的区别在于引入了部分同质令牌标准的概念。在此之前,介绍了同质传球和异质传球的概念。
所有ERC20内标识都是"同质令牌"(英尺)。在同一遍中,两个相等单元的Token没有区别。这和美元差不多。作为通用等价物,假设都是真钞,你手里的美元和我手里的美元在购物能力上没有区别。
ERC721令牌是一个"非同质令牌"(NFT)。异质性代表独特性。以神秘猫为例。每只猫都被赋予了基因,都是独一无二的(一只猫就是一个NFTs)。猫是不能直接替代的。
异质性其实广泛存在于我们的生活中,比如图书馆里的每一本书,宠物店里的每一只宠物,歌手表演的歌曲,花店里不同的花等等。所以ERC721契约必须有广泛的应用场景。,如房地产、绘画等等,具有广泛的意义。
ERC1410令牌是部分可替换的令牌。PFT(PFT的简称)是一种通用的卡片形式,具有可替代性和不可替代性。它可以把代币等同于证券,可以做一些安全代币的功能。ERC1410标准引入了名称"份额"。在证券行业,它通常被翻译为"分级"(如AAA级、AA级和二级),目的是将不同证书持有人账户中的代币分为不同的份额等级。举个例子,,辉哥发起并领导了一个名为"大STO计划",由辉哥、欧阳、ELLA小姐参与,历经天使轮(A资本投资)和A轮(I资本)。项目发展良好。我准备申请美国的STO。然后,创始团队(创始股)、A资本(天使轮)、I资本(A轮)等投资方的价格和资金到期时间不同,份额可以分别定义为1级、2级和3级。
这三个等级的TOKEN有相同点也有不同点,后面试玩场景的时候会深入分析。
令牌位置
4。ERC1410标准的数据结构分析
1。Token
uint256公共总供给的总供给;
2。Tokenname
stringcommonname;
3。Tokenidentification
stringcommonsymbol;
4。每个账户地址下所有投资者持有的所有凭证的总余额
//Mappingoftotalbalancefrominvestorstoallinvestortokensets
mapping(address=
uint256)balance;
5。Themappingfrominvestorstogradedshares[]
//mappingfrominvestorstotheirshares
mapping(address=
share[])share;
//indicatesasetofreplaceabletags.
Structureshare{
uint256amount;
byte32part;
}
6。TrancheToIndex-gradedshareindex
//Indexmappedfrom(investor,share)tocorrespondingsharein
//Three-dimensionalarray即分级股份额的指数
映射(地址=
)。映射(字节32=
uint256))trancheToIndex;
7.交易员针对份额,的授权状态//Mappingfrom(investor,share,operator)toapprovalstatus
//Four-dimensionalarray,whichistheauthorizationstatus
mapping(address=
mapping(byte32=
)ofthree-dimensionalarrays(investors,sharesandoperators).映射(address=
bool)))trancheaprovals;
8.交易员针对投资人的授权状态//Mappingfrom(investor,operator)toapprovalstatus(availableforanyshare)
//三维数组是投资人的授权状态,操作员)
映射(地址=
映射(地址=
bool)]批准;
5。ERC1410
5.1与份额
相关的查询接口的接口功能分析5.1.1Querythebalanceofthespecifiedpartunderanaccount:
FunctionBalanceofByTranch(bytes32_Tranche,address_tokenHolder)externalviewreturn(uint256);
Queryallsharesunderanaccount:
函数tranchesOf(地址_令牌持有者)外部视图返回(字节32[]);
5.2与份额相关的转账接口
5.2.1将指定金额从调用方的指定份额转账至目的账户
函数sendbytranch(字节32_份额,地址_收件人,uint256_金额,bytes_data)外部返回(bytes32);
表示上述接口意味着将指定金额从调用者的指定份额转移到目的账户。
如果转账交易无法完成,,函数必须恢复;
如果传输成功,必须发送emitSentByTranche事件;
如果转账成功但接收方';的份额不同于发送者';s档。,必须发出ChangedTranche事件;
返回值是目的账户接受该转账的份额;
最后一个参数_data,可直接用于指定目标份额。或者存储与交易相关的任何数据,例如授权信息。
5.2.2将资金从多个指定部分转移到多个目标地址。
函数sendByTranches(字节32[]_份额,地址[]_tos,uint256[]_数量,bytes_data)外部返回(bytes32);
上面的接口是sendByTranche接口的升级版,它是从指定的多个部分中选择的。,把钱转到多个目的地址。
如果转账交易无法完成,功能必须还原;
如果传输成功,必须发送emitSentByTranche事件;
如果转账成功,但接收方';的份额不同于发送者';s部分,您必须发出ChangedTranche事件
。sendByTranche和sendByTranches接口是事务发起方(msg.sender)对其自身帐户的操作。
5.2.3交易商转让特定份额
ERC1410继承了基于ERC777的操作员概念,允许交易者代表账户持有人根据份额进行转账。。operatorSendByTranche和operatorsendbytrangesdieseArtvonInterface
函数运算符sendbytranch(字节32_tranche,地址_from,地址_to,uint256_amount、字节数据、字节操作数据)外部返回(字节32);
如果调用了未经授权的地址,该功能必须恢复;
如果传输成功,必须发送emitSentByTranche事件;
如果转账成功且接收方';的份额不同于发送者';s部分,有必要发出ChangedTranche事件。
5.2.4交易商转移多个份额:
函数运算符sendbytranches(bytes32[]_tranches,address_from,address_to,uint256[]_amountsbytes_data,bytes_operatorData)外部返回(字节32[]);
如果调用了未经授权的地址,该功能必须恢复;
如果传输成功,必须发送emitSentByTranche事件;
如果转账成功且接收方';的份额不同于发送者';s部分,有必要发出ChangedTranche事件。
5.3默认份额管理
5.3.1设置默认中继线
为了保证与ERC777sendERC20兼容,在调用sending时,,您需要决定从哪些部分或哪些部分转移。要解决这个问题,您可以指定一个或几个部分作为默认值。
functionsetdefaulttrance(bytes32[]_trance)outside;
Setthedefaultshare,sothatwhendispatchingiscalled.,将从默认切片转移
5.3.2Erhalten默认值字符串(getDefaultTranches)
函数getDefaultTranches(地址令牌持有者)外部视图返回(字节32[]);
获取帐户的默认份额。如果返回值为空,调用send将引发异常。如果返回的不止一个,可以按照一定的策略转出。
5.3.3操作员相关界面
交易者可以被授权操作:
所有账户的所有份额
所有账户的特定份额
特定账户的所有份额(包括现在和将来)
。(XY001)EinbestimmtesKonto切片5.3.3.1默认操作者
函数defaultOperatorsByTranche(字节32_tranche)外部视图返回(地址[]);
返回包含所有帐户的特定份额的默认操作员列表。5.3.3.2授权操作者分支
函数authorizeoperatorbytranch(字节32_份额,地址_运算符)外部;
消息发送者授权交易者操作特定份额。每次调用它时,都必须发出授权的operatorbytranscheevent。
5。3.3.3revokeoperatorbytranch
函数revokeoperatorbytranch(字节32_tranche,address_operator)外部;
消息发送者撤销交易者';操作特定份额的权利。每次调用它时。,必须发出RevokedOperatorByTranche事件。
(Note:itisstillpossibleforthisoperatortohavetherighttooperatethispartthroughthedefaultOperatorsByTrancheorthedefaultoperator.xy002])
5。3.3.4isoperatorfortranch:
函数isoperatorfortranch(字节32_份额、地址_操作符、地址_令牌持有者)外部视图返回(bool);
查询_operator是否是账户特定部分的操作员。
6。ERC1410[XY002][XY001]的场景尝试回到文章前一章的故事。辉哥发起并领导了一个名为"大Sto计划",由辉哥、欧阳、ELLA小姐共同出资,已完成天使轮(A轮资本投资)和A轮(I资本),项目发展良好。我准备申请美国的STO。
我们假设以下是合格投资者对应的钱包地址:
辉哥地址:0xD1f7922e8b78CEB182250753ade8379D1e0949
。欧阳地址:0x17b1177e0491d25a13a8329A8D2c46621b6ca19f
埃拉地址:0x3d7DFB80e71096F2C4ee63c42C4d849F2cbb363
A资本地址:0x8fc02f03c15179F8c6d37C3a29Fe7a338DC68192
我资本地址:0xce689dbb962DBF45534af13e4414CCB2dfc78c30
操盘手:0xd55da111FBFCC671966d138de7DFA249a6e76cc
我们假设创始团队(创始股)、A资本(天使轮)、I资本(A轮)对应的价格。基金的到期时间不同,份额可以定义为一级、二级、三级等。
份额:
00000000000000000000000000000000000001创始团队。
[XY001]天使轮[XY002][XY001]天使轮[XY002][XY001]天使轮[XY001]6.1创始团队发起原始令牌
";大STO计划",由辉哥/欧阳/ELLA发起,分配总额和份额属性。
根据三位参与者投入的资金量,,总发行量1000万,由辉哥账户创造,发行份额如下:辉哥400万,欧阳300万,ELLA3亿。
1)首先,创建一个PartialFungibleToken合同,并按如下方式设置初始属性:
总供应量=0;
name=";大长期定货(standingorder)项目"
symbol=";BST";
2)Calltheinterfacetoissue10milliontokens.
mint('000000000000000000000000001''0xd1f7922E8b78cbeb182250753ade8379D1e09949''100000000000000.00000000000000000''Foundingteamshare')
3)辉哥转发给欧阳,ELLA'的对应份额
发送份额(';0000000000000000000000000001''0x17b1177e0491d25a13a8329A8D2c46621b6ca19f';'300000000000.0000000000000''创始团队欧阳份额,1等级切片');
发送传送(';00000000000000000000000000000001''0x3d7DFB80e71096F2C4e63c42C4d849F2cbb363';'3000000.000000000000000000''grundungsgruppe艾拉份额,一级份额';);
6.2A资本参与天使轮
A资本参与天使轮,然后发行200万股,其中辉哥持股100万,A持股100万,锁仓一年;与辉哥签订赌约。该公司';2018年s营收达到1000万元,运营商账户设置为辉哥令牌股份质押。1)发行200万元人民币'Mint('000000000000000000000000000000002''0xd1f7922E8b78cbeb182250753ade8379D1e09949''2000000.000000000000000000''Spinelcapitaljoining')
2)A占100万;辉哥100万,反赌有业绩;
sendtranch(';00000000000000000000000000000002'0x8fc02f03c15179F8c6d37C3a29Fe7a338DC68192';'1000000.000000000000000000''一';这是一个天使之轮,锁定1年';);
3)辉哥';s的表现是对赌,TOKEN指定交易者授权;
authorizeoperator(';0xdd55da111FBFCC671966d138de7DFA249a6e76cc';)
4)DasProjektverluftgut,VersagenderWette(XY002)
项目进展顺利,对赌无效,辉哥要收回授权。
revokeoperator(';0xdd55da111FBFCC671966d138de7DFA249a6e76cc';)
6.3I资本参与A轮
项目于2018年11月完成年度目标,项目发展良好。I资本决定参与A轮。再发200万代币,其中辉哥50万,A50万,I100万.
1)增发200万TOKEN
mint(';0000000000000000000000000001''0xd1f7922e8b78cbeb182250753ade8379D1e09949';'200000000000.00000000000000000''我的资本加入了!')
发送传送(';0000000000000000000000000003'0x8fc02f03c15179F8c6d37C3a29Fe7a338DC68192';'500000.000000000000000000''一';资本参与A的轮,锁仓一年');
发送部分(';00000000000000000000000000003''0xce689dbb962DBF45534af13e4414CCB2dfc78c30';'100000000000000000000000''我资本参与A轮,锁定1年';);
2)与辉哥对赌100万的二级股权
I资本与辉哥有对赌条款,约定2018年底总收益可达1500万人民币,质押辉哥天使轮对应的令牌,授权交易者。
authorizeoperatorranch(';00000000000000000000000002''0xDD55da111FBFCC671966d138de7DFA249a6e76cc';)
结果项目进展非常顺利,对赌失败,辉哥撤回授权。
revokeOperatorTranch(';0000000000000000000000000002''0xdd55da111FBFCC671966d138de7DFA249a6e76cc';)
6.4A质押50万二级代币,向I资本寻求5000万,再转100万给I资本退出项目
。authorizeoperatorranch(';000000000000000000000000000002''0xDD55da111FBFCC671966d138de7DFA249a6e76cc';)
后来A资本和I资本的代表到交易所办理过户交割手续。
operatorSendTranche('0000000000000000000000000000002''0x8fc02f03c15179F8c6d37c3a29Fe7A338DC68192''0xce689dbb962DBF45534af13e44144cCB2dfc78c30''5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,'DeliveredbythepollimannStockExchangetradermask)
6.5ELLA退出操作,销毁相应令牌
ELLA想和男票一起去苏南乡下做ELLA别墅,享受田园生活。因此,我申请退出"大STO计划"。公司回购300万元。,destroythecorrespondingtokenburn('000000000000000000000000000000000000001''0x3d7DFB80e71096F2C4ee63c42c4d849F2cbb363''300000000000000000000''Ellaquittheoperation.,收缩份额并销毁令牌。)
7。代码部署和测试
故事结束了,下一步是部署测试。
这部分代码量有点大,所以辉哥赢了';不要一一列举。有需要的小伙伴可以去知识星球下载运行。。
工程代码没有经过商业测试,仅作为练习使用。