Chain
简介
chain设计了一种多种资产可以互相交易发布的分布式账本协议。用该协议的多条链可以独立的存在, 并且可以跨链交易, 这样不同的运营商可以以相同的形式互相交易。坚持最小权限原则, 资产的管理和分布式账本同步控制相分离。
链协议允许任何网络参与者通过编写自定义“发布程序”来定义和发行资产。一旦发行,资产单元由“控制程序”控制。 控制程序是用图灵完备的编程语言实现, 该语言可用于编写复杂的智能合约。
每个网络由“块签名者“组成的联盟来保护安全性。 只要法定的块签名者遵循协议, 该系统就可以安全的抵抗分叉。为了提高效率,所有出块人可以达成协议, 委托单个节点出块,类似于raft协议。 网络的任何节点都可以验证块并广播交易。
Chain 主要是面向企业软件产品的联盟链。 Chain的代码是长久开源的, 并且搭建了一个测试链,供大家自由测试。
设计Chain 的动机
当今社会的货币, 证券以及衍生品是以电子支付的形式进行交易的。电子支付需要太多的第三方中介参与,需要太多的人力物力去对帐。比特币虽然去中介化了,但堆栈式脚本实现的功能太少, 只支持本币的简单交易合约。以太坊的evm 又太过于复杂, 有太多的安全不确定性。再者, 他们是公有链,所有数据在公众的眼皮底下。 这时, Chain 恰好能够解决这些痛点。 Chain 是联盟链,支持多种资产的发布和交易, 也支持多种组织的跨链交易。
Chain 大部分思想来自于比特币和以太坊。
- 1.在比特币的基础上增加了多种资产自由发布。而比特币只支持btc。
- 2.evm的功能介于比特币和以太坊之间。主要用于资产的发布与管理。
- 3.采用了比特币的utxo模式并且采用隔离见证的数据格式,交易状态和交易验证相隔离。
- 4.加入了以太坊的PAT树用于世界状态, 但该世界状态不是面向账户的, 而是面向utxo的。
基本数据结构
Chain 的目的是管理数字资产的发行、所有权、 交易。资产的发布、转让和交换是通过向网络发送交易来完成的。 这些交易会被排序并分批打包成块,然后组成一条不可更改的区块链。
资产
每条区块链都可以支持多种类型的资产。 每种资产被一个256位字节的全局资产ID 所定位唯一(在所有的区块链中该ID唯一)。每种资产ID有相对应的发布程序,它定义了该资产的发布规则。一旦资产发布,资产的支出由控制程序决定。
交易
交易使用比特币的UTXO模式。但在这些基础上做了改进, inputs 可以选择发布资产或者是未消耗的发费,outputs可以选择控制程序的输出或者资产的销毁,并且在inputs和outputs上加了个资产ID字段,支持多种资产的混合交易, 只要inputs和outpus的价值相等即可。如下图:
为了提高性能,交易实现了类似比特币的隔离见证功能, 如下图:
区块
为了防止双花,块引入了类似以太坊的世界状态,但世界状态是针对UTXO 存储的, 即每一笔交易的执行,都是在该世界状态中执行两步
- 1.删除原来的已经发费了的outputs。
- 2.增加产生的outputs。
区块中存储每一笔排序的交易,并链接成一条不可更改的区块链。如下图
所有的交易在每一个块中排序好,成为不可更改的历史事实。世界状态作为当前区块链的快照。 当然块与块之间少不了共识, 共识程序的执行流程类似于上上图交易验证的流程。(recover(signature + message) ?= pubkey)
区块链的整体数据结构如下图:
程序设计
Chain 的协议使得编程非常灵活, 可根据不同的层次并行计算。
- 1.发行资产程序指定相应的规则发行新资产。
- 2.控制程序指定相应的规则在一种资产上作交易。
- 3.共识程序指定相应的规则产生新的区块。
这些程序根据内存和时间的限制, 可以并行的运行。正因为如此,程序是足够灵活以允许实施广泛的金融工具(如期权、债券、互换),安全方案(存储资产),应用如提供,契据,拍卖。虚拟机(CVM)
Chain 的虚拟机是一个栈式状态机: 任何指令都在该栈中执行。CVM 的指令集是图灵完备的,为了防止死循环, 采用了run limit 来限制陷入死循环, 协议允许网络去达成共识设置该run limit. 根据运行消耗来定价每一条指令的run limit。 这 非常类似于以太坊的gas机制, 和以太坊不同的是CVM 不会在每笔交易中给run limit 计费。CVM 指令集包含了push, pop等基本指令集, 同时还包括了SHA3, CHECKSIG, CHECKMULTISIG等复杂的数学加密运算。
自省功能 - 交易自省: 可以在执行过程判断是否超过预定的时间,也可以增加自带控制程序,来对(价格,资产,运行过程, 索引)做一定自由控制。
- 区块自省: 自省指令集(BLOCKHASH, NEXTPROGRAM),只能在共识程序中执行。
因为丰富的指令集,可以组合使用完成不仅仅是交易签名和验签的功能。如:多重签名,多方签名,提前部署(我最喜欢的是:类似于微信红包功能, A给B发送交易,需要B确认才能上链)CHECKPREDICATE 提供了强大的其它跨链功能,包括实现类似于BTCRelay的功能。共识
Chain 可以支持任意的共识程序, 目前实现的共识, 是不支持拜占庭容错的。 他是有N个节点对每个高度的块签名投票,当一个块收集到超过M个节点的签名时就出块。只要不超过2M-N-1的节点违反同时给同一高度的多个块签名投票, 就不会产生分叉。安全性
Chain 支持M-N 多重签名控制程序, 支持M-1 签名的发布程序来保证资产的安全。
隐私 - 1.链上登记,不需要第三方中介信任。
- 2.每一个控制程序都有一个唯一的公钥来防止同一个账户被别人发现。一个主密钥,该主密钥可以产生无数的公私钥对, 每次交易,不用主私钥,只需要衍生私钥, 这在一定程度上保证了安全性。
- 3.可以保证一些敏感数据的隐私, 如期限,价格和利率。 可以通过每个分支链的merkle 后的程序隐藏。 只有执行中的分支链需要执行期间被显示。这样的合约,可以在交易时多方签名认证,(私人合约链下解决, 在链上签名认证即可。)和合同在现实世界中的工作方式相似 - 虽然在法庭执行时通常要求将合同的条款公开,但大多数合同都是私下解决的,公共系统只能作为一个隐含的支持者。
- 4.共识安全性防范: 效率和安全不可兼得。
监管
Chain 允许本地的政策发布, 但监管方可以通过块生成器进行监管。如果块签名者在同一高度签署多个块,参与者可以使用不一致的签名来构建欺诈证据,以警告其他节点或为链下执行提供证据。伸缩性,扩展性, 互通性。
- 1.utxo 与以太坊账户模型不同, 可以并行验证交易, 只要用类似于nonce的机制保证每一个未花费outputs最多只能被一笔交易所引用。
- 2.Chain 天然的比以太坊瘦, 不需要完整的世界状态, 参与者只需要记住未花费的outpus就可了, 因为交易会自带其他相关信息(如资产ID, 量额, 控制程序), 超级轻客户端。
- 3.compact 验证 , 只允许客户端验证块中所相关的交易,而不需要验证所有的交易,只要信任签名者的数量即可。整个过程是用Merkle证明。客户端也可以将监视整个区块链的任务委托给自己信任的服务器。
块可以通过软分叉的方式向前向后版本兼容。
Chain 不仅支持在实现本协议的区块链间通信, 但需要保证全局唯一资产ID。每一条分链是从另外一条链的块高度叉出去的,根据这点能保证资产ID唯一。 并支持不同的协议的链互相交互, 因为CVM提供了足够多的指令。
星期四, 25. 五月 2017 10:06上午