Facebook的Libra既没区块也没链 这些技术问题你应该知道
Facebook 即将推出的加密货币 Libra 币并不是运行在 Facebook 系统上,它将运行于 Libra 区块链。Libra 将是一种稳定币,它的诸多属性,很大程度上会与 Libra 区块链的属性相关。
不同于一般的区块链系统,Libra 既没有区块也没有链,那么它还能被认为是区块链吗?Libra 从代码角度,改变了对数字资产和智能合约的设定,它为什么要这样去做?Libra 路线图显示它将从联盟链转为公链,这是一件容易达成的事情吗?
带着这些疑问,我们请链闻特约撰稿人李画与分布式存储项目 Genaro 联合创始人、趣派科技首席技术官吴为龙进行了一个对谈。年轻的吴为龙是第一批区块链开发者和经验丰富的技术极客,实战经验涉及区块链虚拟机、P2P 存储、共识算法等诸多底层技术。
这个对谈从三大焦点展开,包括了 17 个最值得关注的关于 Libra 的技术问题。了解 Libra 的技术特点和未来发展方向,可以从这里开始。
Q:李画 ,链闻特约撰稿人
A:吴为龙,分布式存储项目 Genaro 联合创始人、趣派科技首席技术官
焦点一:Libra 是区块链吗?
问:Libra 既没有区块也没有链,我们能称之为区块链项目吗?
吴为龙:Libra 是一个分布式账本项目,广义上讲区块链技术也称为分布式账本技术,所以可以认为 Libra 是区块链项目。这个定义在德勤 2016 年的 DLT (Distributed Ledger Technology)报告中就已经被提出来了。
问:Libra 似乎是用 Merkle 树这一数据结构代替了链式数据结构?
吴为龙:Libra 用 Merkle 维系着一个很大的树形结构数据库,Merkle 树中包含的可以认为是单一区块中包含的状态和交易;链的部分在其中则是通过状态列表和事件列表来表达的。
相当于说 Libra 是将整体区块链拆成了三个共同维护的树,一个记录交易,一个记录状态,一个记录事件。如果非要用区块的概念,可以把 Libra 看作是有几个巨大的区块,一直在往区块里写入新的经过验证的数据。
这么做的带来的好处是在账本维护中,Libra 不需要一直生成新的区块:有交易时做相应的数据库更改,没交易时就保持现状,甚至可以通过做 Merkle 树的剪枝来减少账户本地备份的数据量。
但也会带来问题,它会让节点收入少了最大的那一部分,也就是出块收益。在比特币和以太坊中,相较于交易费,出块收益是很大的一部分。至于这么做带来的其他的问题则需要看到实际的运行状况才能知道。
问:不再是链式结构后,还能保证区块链的难以篡改性和可验证性吗?
吴为龙:当然可以保证。难以篡改是通过共识来决定的,Libra 使用的 LibraBFT 本质上也是拜占庭型共识,保证了相关的确定性。树型结构只是用来保证查找的。
也可以验证。历史数据包括相关的状态和事件都是在通过了相关的共识达成一致后,被详细地记录在账本上的,任何计算机只要同步了账本备份都可以进行验证,只需要在 libra 上直接下载即可。
问:Libra 的这种数据结构适合于其他的公链项目吗?
吴为龙:不适合。最重要的原因是公链是需要激励节点的,出块收益是激励中重要的组成部分,而 libra 是没有出块收入的,只有大型机构才能做此类实验。
问:这一问题会制约 Libra 从联盟链转为公链吗,也就是说 Libra 的账本结构决定了它是没有出块收益的,而如果没有出块收益,怎么做 PoS?
吴为龙:当然会制约。那这个问题就只能交给它未来的设计了。
问:Libra 自定义为数据库,这种定义恰当吗?在我的理解中,数据库是一种不考虑拜占庭问题的系统。
吴为龙:Libra 完全的就是数据库。
本地数据库是不需要考虑拜占庭问题的,但分布式数据库很早就开始解决这些问题了,比如 RAFT (Replication and Fault Tolerant)就是保证分布式数据库强一致的,而 RAFT 就是简化版的拜占庭解决方案。Libra 是通过 LibraBFT 共识来保障更好的分布式数据库系统。
焦点二:Libra 区块链技术的几处重要不同
问:Libra 中很少提智能合约,与之相对应的概念似乎是「模块」,智能合约与模块有什么不同?
吴为龙:智能合约是单账户生成无复用,模块则可复用。这么做带来的好处就是可以通过设计模块来组成比较复杂的系统,这对以太坊智能合约功能基础的现状会有较大的改善。
也就是说,未来模块化的合约设计,通过调用合约可以很容易的将其中的资源合理地迁移,并且回调的时候也会减少漏洞的产生,从而可以设计出复杂的条件结算方式。
这么做带来的问题就是需要重新学习相关语言,从使用到上手的时间成本是很高的。
问:Libra 似乎是把数字资产定义为「资源」,而在其他区块链系统中数字资产被定义为「value」。你怎么看 Libra 做的这种改变?
吴为龙:Libra 中的资源更像是在比特币钱包中的钱,而模块就是将资源指定到某个特定的部分。
做个比较也许更好理解:以太坊是使用专用函数来通过账户生成智能合约的,同样的账户,在 nonce 固定的情况下生成的是固定的合约地址;而在 Libra 里面,通过类似的专用函数可以将模块和资源进行绑定,而不用拘泥于单账户的合约生成。
这么做带来的好处是系统的灵活度更高。在 Libra 中也可以有开发者专门来做模块,类似于模块提供相关的 function。
问:有观点认为「value」是可拷贝的,而「资源」满足线性逻辑,它所代表的数字资产不能被复制和凭空消失,因而可以减少记错账的情况。你怎么看这一问题?
答:Value 是可以拷贝,但是拷贝的动作是需要你提出交易,也是需要通过共识确认的。资源是不能凭空消失,但定义为资源与否只是表示这个数字资产本身是所有人都有可能使用的,不是只属于某个特定的账户,它是被持有者放上来,然后在 Libra 的人都用模块来使用这些资源。
问:Libra 注重安全,从技术白皮书看,它主要做了哪些工作来保证安全?
吴为龙:「记录每一次的状态,放进状态列表,同时将事件放进事件列表」。这种设计下,由于每次的状态都放进了状态列表,相关产生的事件放在事件列表,就保证了每次状态改变的原因和结果都是可追溯的。
「账本状态直接对具有实际价值的数字资产进行编码。事务执行必须确保在未经授权的情况下,不得复制、丢失或转让 Libra 币等资产」。这种设计下,账本状态在初始值进入的时候即是需要有价值的,内部不允许任何情况的无验证操作。
「事务只能生成事件,不能读取事件」。这种设计允许事务执行仅为当前状态的函数,而不是历史信息,也就是说时间生成后就是时间戳,攻击者无法通过回到过去的时间重新生成改变的事务,从而造成状态改变带来的资产损失。
「事务执行必须具有确定性和密封性」。这意味着事务执行的输出是完全可预测的,并且仅基于事务和当前账本状态中包含的信息,并不具有外部效应。将虚拟机维持在沙盒中,不通过外部信息来进行内部判断,好处就是维持一个稳定的可以验证的结果,防止一些外部状态影响。假设如果有网络交互牵扯进来,比如添加汇率这个因素,那么 10 分钟前程序员看到的汇率很有可能和验证的时候汇率不同,因此改变了结果。
总体而言,Libra 通过上述状态列表、事务事件等的设计来防止黑客利用「状态」进行攻击。
问:Libra 中的新语言 Move 的关键特点是能够定义「资源」类型,我们可以认为这是在说 Move 语言能够支持发币,也就是说 Libra 更大的野心是建立一个密码货币和数字资产的平台,而不仅仅是支持 Libra 币吗?
吴为龙:Move 支持发币。应该说它的野心是做一个模块完备的结算平台,未来以支持 Libra 为主。由于资源(此处指常规定义下的资源)会越用越少,所以在不同的模块下,应该会有不同的资源收费方式。
焦点三:Libra 带来哪些疑问
问:Libra 采用拜占庭容错共识,这是一种适用于联盟链的共识;但 Libra 计划以后转为 PoS 共识,你认为这种转换会有问题吗?
吴为龙:有问题。最大的问题就在于 PoS 是链式最终一致的共识,BFT 是通过大量通信做的一致性共识,这两种共识对于节点的定位不同。
PoS 节点主要是抵押出块,对机器要求一般,只需要签完名等待被随机就好;BFT 节点需要一直保持通信来实现共识一致性,对网络带宽的需求会高,比如 Libra 的 10 秒确认。从 BFT 到 PoS 的转换,是需要设计 PoS 的时候做一些调整的。
另一个问题就是 PoS 本身有一些问题需要克服,比如说纯 PoS 的长距离攻击。但因为 BFT 共识侧重在如何通过 Leader 进行通信的步骤上,所以带来的和转换有关的问题就是,LibraBFT 的经验或者工程改动如何迁移到 PoS 的设计上。
问:Libra 现在是联盟链,计划以后转为公链,联盟链与公链不同的特点会给转换带来什么问题吗?
吴为龙:联盟链的节点需要拥有多级的许可,本地可以直接跑 Docker,不用担心分布式资源的问题;公链的准入门槛就是只要能按照出块的共识来做就可以,分布式资源有限,需要设计对应的虚拟机。
但 Libra 的节点权利并不是多层级的,所以 Libra 未来的转换还是一个以共识变化为主的改动。
问:转为 PoS 时,会不会存在新的验证者需要被原先的验证者批准才能进入的情况,从而无法实现「无需许可的区块链」的愿景?
吴为龙:那要看 Libra 如何设计了。它可以设计成需要原先的验证者批准才能进入,也可以设计为用随机的方式挑选候选者。
问:Libra 提到许多支付事务将在链下进行,你认为这种链下交易是用户主动选择还是默认状态?这会不会带来中心化以及安全问题?
吴为龙:这个链下应该是用户主动选择,就与即便闪电网络存在,还是会有很多人使用比特币转账或者通过交易所交易一样。说不定会有 lightning network 版本的 Libra,毕竟 Libra 需要 10 秒才能确认。
中心化问题一直存在,安全问题完全取决于使用者是否信任这个第三方。
问:全节点的数量对于公链有重要的意义,但在 Libra 中,全节点是否还有重要意义?
吴为龙:全节点在这里只是一个账本备份。
问:Libra 中私钥在用户手中吗?
吴为龙:LIbra 的私钥在用户手中。Libra 是用户先在本地生成公私钥,再通过 Libra 提供的一个创建账户的事务,并在完成链上的共识后,在 Libra 中生成相关的账号。在逻辑上,LIbra 是可以做到隐私的,但这是每一个用户都会生成自己的公私钥的情况下。如果有一个第三方「方便」的工具帮你生成这个账号,那么数据就会在他人手里。
以上即是关于 Libra 区块链的问题与回答,希望能帮助你更加了解 Libra 区块链,进而更懂得 Libra 币。