Chain 简介

作者:李康


1. 数据模型

Chain 区块链网络的目的是管理数字资产的发行、所有权。通过向 Chain 网络中提交交易来实现资产的发行、转移、交换。这些交易被排好序,批量存入区块中,这些区块构成了不可篡改的区块链

资产

一个 Chain 区块链能支持多种类型的资产。

每一种类型的资产拥有一个 asset ID。一个 asset ID 是一个256位的字符串,被设计为全局唯一 (不单单在一个区块链内,而且跨越所有的区块链)。

每一个 asset ID 对应一个发行程序 (issuance programs),它定义了发行资产单位的规则。一旦相应的资产单位被发行,花费这些资产单位将由 控制程序 (control programs) 决定。

交易

交易从 inputsoutputs 转移价值。每一个 input 具体了价值的来源:要么是一个资产单位的新发行,要么是一个来自以前交易的 output。

每一个 input 必须满足一个 发行程序 (如果价值的来源是一个资产单位的新发行) 或者是一个 控制程序 (如果价值的来源是一个先前的未花费的交易 output)。发行者或者花费者通过 witness 字段传相关参数给相关程序。例如,一个发行或者控制程序通过定义一个公钥以及需要使用相应私钥对交易生成的加密签名来实现一种认证检测。

区块

一旦一笔交易花费了一个特定的 output,其它的交易就不被允许花费相同的 output。为了阻止双花,Chain 网络维护了一个唯一且交易顺序不可变的区块链,外加一个由 UTXOs 组成的区块链状态。交易中的 input 只被允许索引 UTXOs 集合中的 output。一旦交易被应用,花费的 outputs 会从 UTXOs 集合中移除,并且添加新的 outputs 到 UTXOs 集合中。

一个区块包含它所有交易的哈希值以及当前状态的哈希值,例如,当前未花费 outputs 集合的哈希值。这个区块链状态的快照使得一个新加入 Chain 网络的节点更加容易,因为新的节点不用重放区块链的整个历史交易。哈希值是两棵 Merkle 树根节点的哈希值,提供了任何给定交易或者未花费输出存在的紧凑证明,并且允许并发下载和验证。

为了阻止未授权的参与者创建新的区块,每一个新的区块必须满足一个 共识程序 (consensus program),该共识程序在前一个区块的头部中定义。共识程序,就像发行和控制程序一样,从新区快的 witness 字段中接收参数。

例如,一个共识程序定义了一个公钥,并且需要下一区块的 witness 字段中相应私钥对区块哈希值的签名。这是目前在 Chain 联盟共识协议 (federated consensus protocol) 中使用的共识程序的基础。使用程序意味着,理论上该协议支持任意的共识程序,如 POW 与 POS。

虚拟机

一个程序是由字节码编写的 - Chain Virtual Machine (CVM) 支持的一些指令。CVM 是栈虚拟机:每一条指令在数据栈中执行相应的操作。

当验证一个程序是否有效时,CVM 使用程序参数 (从相应的 witness 字段中获得) 初始化数据栈,然后程序被执行,要么成功要么失败。

CVM 的指令集是图灵完备的,为了防止计算资源的无限制使用,CVM 协议允许 Chain 网络定义 运行限制 (run limit),程序的执行不允许超过该限制。每一条指令运行的时候,根据其运行时开销消耗一定的 limit。

Chain 的 run limit 与 ethereum 中的 gas 相似,不同的是,在 Chain 网络中,并未在链上对交易执行的开销做出解释。

共识

Chain 协议的第一个版本具体了一个默认的共识协议,基于来自区块签名者联盟的一致同意。

一个共识程序定义了 N 个公钥的集合,使用 CHECKMULTISIGBLOCKSIGHASH指令来确认区块 witness 包含了 M 个有效的区块哈希值的签名 (N 与 M 是算法的参数)。

每一个公钥对应着一个区块签名者。区块签名者从不会对相同高度的两个不同区块签名。只要没有超过 2M - N - 1 个区块签名者破坏这个规则,区块链就不会被分叉。

由于这个规则,区块签名者必须协调确认它们对一个相同区块进行签名。为了保证这个原则,它们依赖于一个区块生成者 (block generator)。区块生成者收集交易,周期性的把有效交易批量导入区块中。

区块生成者将新提议区块分发给区块签名者。区块签名者仅对区块生成者签名过的区块进行签名。

尽管区块生成者无法分叉区块链,但它确实是一个特权角色。区块生成者对网络可用性有控制权:如果它宕机,或者停止产生新的区块,整个 Chain 网络的区块链就会停止。区块生成者可以通过向不同的区块签名者发送不同的区块来使 Chain 网络发生死锁。还有,区块生成者有控制区块时间戳的能力,能够产生人工修改过的时间戳的区块。

基于目前商业使用情形,这些折衷是可接受的。如果区块生成者有恶意的表现,或者有意的宕机,对于 Chain 网络来说,停掉也许是更好的选择。如此的恶意行为可以被检测到,在链下处理。

results matching ""

    No results matching ""