- 1.前言
- 2.为什么是区块链编程而不是比特币编程?
- 3.为什么是 C#?
- 4.预备条件
- 5.本书众筹
- 6.补充阅读
- 7.图标
- 8.许可: CC (ASA 3U)
- 9.项目设置
- 1.比特币地址
- 2.交易
- 3.区块链
- 4. 区块链不仅仅是比特币
- 5.支付比特币
- 6.作为真实性验证方法的所有权证明
- 1.足够随机了吗?
- 2.秘钥加密
- 3.秘钥的生成
- 1.P2PK[H] (向公钥付款 [Hash])
- 2.多重签名
- 3.P2SH ( 向脚本哈希付款)
- 4.灵活机动性
- 5.使用 TransactionBuilder
- 1.颜色币
- 2.发行一项资产
- 3.传输资产
- 4.单元测试
- 5.李嘉图合约
- 6.流动的民主
- 7.烧钱和声誉证明
- 8.存在性证明
- 1.比特币发展的挑战
- 2.如何证明一个币存在于区块链上
- 3.如何证明一个颜色币存在于区块链上
- 4.断开与第三方 API 的信任关系
- 5.防止延展性攻击
- 6.保护你的私钥
5.李嘉图合约
这部分是我在 Coinprism 博客上的一篇文章。在撰写本文时,NBitcoin 还没有关于李嘉图合约的代码。
a.什么是李嘉图合约
一般来说,一项资产代表在一定条件下向发行者要求赎回或者兑付的权利 。
- 公司股份给予获取股息的权利,
- 债券给予到期兑付本金的权利,息票代表每期获取利息的权利,
- 投票令牌给予相关实体投票决策的权利(公司,选举)
- 可能是以上几项的混合:股份同时也是公司领导人选举的投票令牌
这些权利通常在一项合约里面列举出来,并由发行人签名。(如果需要,有一个可信第三方,比如认证机构) 一项李嘉图合约是由发行人加密签名的合约,不可能与资产脱钩。 所以合约不能否认、篡改,并且可以证明就是发行人签名的。. 这种合约可以在发行人和赎回人之间保密,或者公开。 开放资产已经可以支持以上所有事项,除了改变核心协议。下面是如何改变核心协议的内容。
b.开放资产里面的李嘉图合约
这是李嘉图合约的正式定义:
- 一项由发行人提供给持有人的合约,
- 服务于持有人拥有、发行人管理的有价值权利,
- 人工可读(就像是纸质合约),
- 程序可读(就像数据库那样可以解析),
- 数字签名,
- 带有秘钥和服务器信息
- 附有唯一的安全识别标志。
资产 ID 由 OpenAsset 按下列方式具体定义: 把 ScriptPubKey 转换成 P2SH 形式: 这里: 对于一个简单的发行人而言,IssuerScript 表示一个典型的 P2PKH,如果发行人需要多个同意意见,它表示多重签名。(举例来说:issuer + notary )
需要注意的是,从比特币 0.10 开始, IssuerScript 是机动灵活的,可以是任何事情。
李嘉图是机动灵活的,并且可以保持私密性。任何持有合约的人都可以通过 ScriptPubKey 哈希值证明,合约是适用于这笔资产的。
在资产定义协议下,这些李嘉图合约在客户钱包面前是可发现和可验证的。
假设我们正在向候选人 A、B、C 发行投票令牌。
增加开放资产标记的内容,加入下列资产定义网址 : u=http://issuer.com/contract
在网页 http://issuer.com/contract 中,创建下列资产定义文件:
现在我们可以定义李嘉图合约了:
这就结束了我们在 OA 中的李嘉图合约实现
c.检查列表
由发行人提供给持有人的合约
合约由发行人管理,不可更改,发行人每次发行一项新资产就签名一次。
服务于持有人拥有、发行人管理的有价值权利
在这个例子中的权利就是候选人 A、B、C 的选举权利,可以在 2015 年 1 月 10 日以前赎回。
人工可读(就像是纸质合约)
人工可读的合约可在 contract_url 看到,但是 JSON 可能已经足够了。
程序可读(就像数据库那样可以解析)
选举的细节在 AssetDefinitionFile 里面,是 JSON 格式的,合约的真实性由 IssuerScript 通过软件验证,哈希值在 ScriptPubKey 里面。
数字签名
当发行人发行资产时,ScriptPubKey 就被签名,并且合约的哈希值以及合约本身也被签名。
带有秘钥和服务器信息
IssuerScript 包含在合约里面
附有唯一的安全识别标志。
AssetId 由 Hash(ScriptPubKey) 定义,并且是唯一、不能更改的。
d.它有什么作用?
没有李嘉图合约,恶意的发行人就很容易更改或者否认资产定义文件。
李嘉图合约保证了不可否认性,让合约不可更改,因此它在赎回人和发行人之间建立起了仲裁机制。
同时,由于资产定义文件不可更改,就可以把它保存在赎回人自己的存储上,避免了恶意发行人断开合约访问。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论