石墨烯区块链帐号体系的特点

这半年比较热门的EOS是石墨烯系列的最新区块链。(之前有BitShares, Steem, PeerPlay, 公信宝,yoyow) 石墨烯系列区块链有一个不同于比特币和以太坊的帐号体系,特点如下:

  • 帐号和公私钥是绑定关系,操作语义通过帐号来指定,交易签名通过私钥来签,公钥验证。
  • 每个帐号有多个角色的公私钥对,例如EOS包括owner和active。
  • 新帐号必须通过区块链注册。
  • 原生支持多重签名。

下面逐个说明。

帐号和公私钥绑定

在比特币区块链上,一个私钥对应拥有“花费该地址BTC余额”的权利。 而地址是公钥的一个变体。 一个钱包软件一般会管理很多组私钥和地址,需要收款时,可生成一个新的地址, 把这个新生成的地址直接发送给付款方即可,无需向区块链注册这个地址。 一个自然的设计就是,比特币的交易必须指定的收款方的地址,虽然那个地址人是没法记住的。

石墨烯系列则不同,多了一层显式的帐号,区块链使用者必须拥有帐号才能操作, 帐号是自己设定的便于记忆的名字,区块链的转帐交易内容是帐号到帐号, 与公钥(地址)或者私钥无关; 只有交易的签名需要使用相关帐号所关联的私钥来签, 区块链的p2p参与者(例如见证人或者超级节点)需要通过帐号关联的公钥来验证签名的有效性。

多个角色的公私钥对

有了帐号体系,是不是每一个帐号对应一个公私钥对呢?不是的, 一个帐号又分成了不同的角色,每个角色的权力不一样。owner角色拥有最大的权力, 可以进行任何操作; 而active角色则与转帐相关。在BitShares区块链上,有memo角色 的私钥并不参与签名,而是与对方的memo角色公钥一起,构成转帐私密备注的对称加密密钥来源 (搜索术语ECIES 或者 ECDH)。在Steem区块链上,还有一个特别的 posting角色,可以用于 发帖。

新帐号必须通过区块链注册

由于多了一层帐号,就涉及到帐号和公私钥对应关系的共识,解决的方法就是需要注册帐号, 通过已有的帐号向区块链广播一个”注册帐号”的交易来注册新帐号,这个交易的内容至少包括

  • 新的帐号名
  • 各个角色对应的公钥以及权重

除了注册帐号,还可以修改帐号,例如更换某个角色的公钥(需要使用owner角色的私钥来签名)。

原生支持多重签名

所谓多重签名,是指需要多个私钥共同签署确认一个交易,否则交易无法达成。帐号的每一个角色 都可以设定由多个公钥来共同管理:设定一个总的最低门限值和每个公钥的权重,签名有效的定义 是多个公钥的签名,并且这些公钥的权重之和大于该角色的最低门限值。举个例子,夫妻二人共同管理 一个帐号的active权限,那么可以一人生成一个公私钥对,注册/修改帐号时把该帐号的 active权限设为

  • 总的门限值2
  • 丈夫的公钥,权重为1
  • 妻子的公钥,权重为1

这样总是需要双方同意才能动用帐号的资金。(当然这是一个简化的例子,由于owner权限更高级,需要把 owner权限也做相应的限制,避免通过owner权限绕过active的多签)

所谓原生支持,是指石墨烯系列区块链提供了多签功能的简单易用的API,直接使用即可。与之对应,如果比特币要支持多签, 则需要编写脚本,涉及复杂的编程逻辑; 如果以太坊要支持多签,需要通过编写智能合约来实现,而编写智能 合约本身是很难的,特别容易出现漏洞。前不久,著名的Parity钱包的一个多签合约漏洞就导致的大量ETH“锁死”。

原生支持多签这个特点,在使用好的情况下可以大大提高安全性:因为黑客需要拿到更多的私钥才能黑掉 一个帐号。