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提供了足够多的指令。