【霍炬文章转发】PRESSone采用的混合架构分析和解释
原文作者霍炬,复制文章过来仅作个人记录及帮助传播,如本文产生任何收入,都将全数转付给霍炬本人。
为什么基于XIN
在PRS整个系统里面,基于规则-合约的交易是核心功能之一,这使得我们必须寻找一个稳定可靠、吞吐容量巨大,又足够灵活的P2P网络来满足交易需求。Mixin Network是一个基于DAG的交易处理链,它的特点是交易处理速度极快,能满足大容量的需求,并且XIN可以处理跨链资产交易,这让PRS未来发展具有足够弹性,这种弹性包括:
- PRS从ERC-20 token转换到其他链的可能性。比如映射到自己的区块链系统?或者ERC-20出现严重问题时候全部迁移到下一代主流公链?我们不打算预测未来如何发展,但是从技术上说,一个安全、可靠的架构,需要保留足够的弹性应对未来的变化。MIXIN的设计充分提供了这种弹性,在未来一旦有必要的迁移需求时,可以使得整个迁移过程非常平滑,甚至绝大多数用户无需进行任何操作就可以完成转换。
- 安全性和交易速度。PRS的核心是基于合约的交易(交易数字内容),但除此之外,还存在各种日常交易,比如用户A转移给用户币一定量的PRS token,而没有任何需要合约确认的理由(举个例子:发红包)。在目前的混合架构下,这种交易可以100%由XIN完成,PRS网络不承担负载,甚至不关心这笔交易的存在。这种设计兼顾了安全性,负载和交易速度,以及保护用户的隐私。
- 使得PRS合约有可能支持其他关联token,甚至更复杂的应用。Mixin domain的设计可以让各种不同的资产接入Mixin network,基于这种特性,PRS可以设立某些token和PRS token的映射关系,帮助Dapp开发者提供更好的服务。
合约和共识
如果仔细观察以太坊近年来的发展,会发现以太坊上大部分所谓安全问题,是出在用户编写的智能合约上,而不是出在以太坊本身系统上。到目前为止,使用一种图灵完全的通用语言编写业务逻辑,仍然是非常困难的,即使是专业程序员也经常出现意想不到的bug。在传统软件世界里,这类bug通常不会造成太大损失,而且容易修补。在区块链世界里面,修补它很困难,造成的损失往往很大。
PRS正在开发的合约功能,是基于一种自己设计的DSL(领域专用语言)。和以太坊自创solidity以及EOS直接使用C++不同,PRS短期内不会提供图灵完全语言进行合约开发,而是专注于提供基于PRSC(PRS Contract DSL)的合约脚本。和其他系统内的DSL一样,PRSC不是通用语言,不打算提供一个万能的编程解决方案,而是专门用来描述业务逻辑,在PRS系统里面,就是数字内容的交易,引用,销售分成等基本业务逻辑。在这种应用场景下,DSL提供了更简单的语法和更可靠的安全性,使得编写合约的门槛下降,安全性提高。同时DSL一般采用近似应用自然语言的声明式语法,这也让非程序员有机会编写自己的合约脚本。同时,我们会不断丰富PRSC脚本功能,提供更多的命令和功能,包装更多操作,使得这种简单的脚本可以适合更多业务模式。
一个区块链系统还包括网络层和共识层。在PRS系统里面,有相当多数据需要达成各方共识变成不可篡改的数据,比如合约是否成立,各方是否按照合约运行结果履行合约,交易支付是否完成等操作。考虑到业务逻辑本身的复杂,将来还有进一步引入链外资源或者其他链上资源的需求,这些外部引入的数据更需要在PRS系统内达成各方共识。
各种共识比起单纯的财产交易复杂得多,因此PRS应该基于一种由少量可信社区节点做为代理人,依次确认各种数据是否正确,并且形成最终共识的共识协议。这才能同时保准效率,安全以及权力的分散。在目前所有共识算法中,Tendermint BFT 和 EOS DPOS都是符合需求的共识算法。其中EOS DPOS有更长的历史和应用经验,尤其在社区和可信节点如何选出方面有更多社区/社会实验成果,非常值得关注。
这里特别应该注意,不同群体提起的EOS代表的是完全不同的意思。EOS可以是:
- 一种代币资产
- 一条具有21个BP(超级节点)的共有区块链网络
- 一套区块链基础操作系统开源代码
我们这里所指的EOS系统是以上几种可能中的第3条,一套区块链基础操作系统开源代码。为了节约开发时间和成本,PRS会使用部分EOS开源的代码完成PRS的DPOS链,这些代码主要集中在网络层和共识层。如前文所述,自合约层以上都是自己开发的,更符合PRS业务需求的系统。这种使用方式是符合EOS开源协议的。请特别注意这种使用方式和EOS代币,EOS主链都没有关系,它只是按照开源协议使用一部分EOS的开源代码而已,当然在此基础上,我们会密切关注在EOS世界发生的一切,包括安全问题和应对方案,社区选举过程和疑虑,治理模型等,这些对PRS系统未来的发展都有参考作用。
简单描述PRS系统的工作模式:使用PRSC合约脚本描述业务逻辑建立合约,在MIXIN network上按照合约运行结果完成交易,把交易结果和合约脚本交给验证节点验证,按照DPOS共识,n个节点独立验证交易和脚本执行正确之后,这笔交易就成为不可篡改的公开数据。
对了,我们很快会开源PRSC解释器的代码(虽然它还很简单)。另外如果你对Lisp/Scheme/Clojure有兴趣,或者对设计DLS有兴趣,或者对通过这样的DSL包装区块链功能和逻辑有兴趣,都可以和我们联系,大家可以基于PRSC来讨论未来需要增加的特性甚至参与开发。