在恒星网络中配置这种智能合约将涉及恒星协议的更多高级特性。所以在您全力深入前请首先阅读:交易的时间约束,多重签名账户,批量操作。
设想今天是2016年12月份……Yoyodyne为某项“研究”筹集资金而发行债券。这些债券将以拍卖方式卖出。债券一年内每月偿还1000美元。在获得合适的监管机构许可之后,Yoyodyne明智地决定在恒星分布式网络上发行债券。
Yoyodyne有一个公众恒星账户,使用签名密钥keyA
的账户yoyoAccount
。
为发行债券,还需要准备一个新账户bondAccount
。
Yoyodyne为bondAccount
账户增加一个签名yoyoKey
。设置账户bondAccount
的master key权重为0。现在只有yoyoKey
能为账户bondAccount
签名交易。
现在Yoyodyne创建了如下12个交易:
Source Account ID : bondAccount
Sequence Number: 1
Time Bounds: anytime after 1st Jan 2016
Operations: yoyoAccount sends $1000 to bondAccount
Source Account ID : bondAccount
Sequence Number: 2
Time Bounds: anytime after 1st Feb 2016
Operations: yoyoAccount sends $1000 to bondAccount
Source Account ID : bondAccount
Sequence Number: 3
Time Bounds: anytime after 1st Mar 2016
Operations: yoyoAccount sends $1000 to bondAccount
…等等
Yoyodyne使用keyA
签名如上所有交易并且公布。所有的这些交易暂时还是无效的:它们还需要bondAccount
的签名,且时间约束未满足。
现在Yoyodyne开始债券拍卖。需要投标人发送以下形式的交易:
AccountID: accountBuyer
Operations:
bondAccount addSigner(keyBuyer,1)
bondAccount addSigner(yoyoKey,0)
accountBuyer sends $X to yoyoAccount
Signers: keyBuyer
Yoyodyne收集拍卖期间所有人们的交易。一旦拍卖结束,会为最高价格的交易进行签名并发送至恒星网络。
比方说Veronica是最高出价者且买了10000美元的债券。Yoyodyne收到了10000美元而Veronica现在就成为账户bondAccount
的唯一签名人。同时Veronica还有了Yoyodyne预签名的交易。当一个票面日期到期,Veronica可以为相应的交易添加她的签名并发行到恒星网络中。
只要Veronica愿意,她可以通过之前类似的交易再次出售债券:
AccountID: accountBuyer
Operations:
bondAccount addSigner(keyBuyer,1)
bondAccount addSigner(keyVeronica,0)
accountBuyer sends $X to accountVeronica
Signers: keyBuyer, keyVeronica
总结
有趣的是,账户bondAccount
自身变成了一种账户间可交易的资产,且能继续发行债券支付利息给拥有它的当前账户。很显然,还可以创建更复杂的机制。这里仅为您提供了一些可能的思路。
原文:http://jedmccaleb.com/blog/bonds-on-stellar/
翻译:林林