以太坊:Qitmeer课堂:# MeerContract 之设计篇

自从上一讲跟大家解释为什么MeerContract要跨链后,我们进一步解释下具体的实现。

部署

跨链首先要解决的是合约链的部署问题,经典的做法需要分别独立地去维护主链和合约链,直观的说就是节点维护者每次都要同时启动主链节点和合约链节点。这样会产生一定的维护成本,比如说节点维护者,忘记开启合约节点了,或者合约节点意外终止了,造成合约无法被处理的问题。

目前MeerContract的解决方案是将合约链的客户端以网络库的形式集成到主链客户端中,虽然表面上看只运行了一条链,但实际上是两条链同时在运行。而且两条链之间的通信也是以RPC的方式进行交互,而非直接调用彼此之间的函数。

共识

合约链和主链是独立的两条链,因此可以有独立的共识,这也是MeerContract技术上的优势。合约链比较耗费计算资源,很有可能某个应用比较热门,造成整个主链拥堵。合约链可以根据合约交易的负载程度采用支持更高交易吞吐量的共识,即使合约链因为意外情况造成了拥堵,也不会影响主链的正常运行。

值得注意的是,由于初期合约链上的交易量不够,完全独立的共识将会存在安全隐患。因此,MeerContract会将每笔合约交易在主链上进行同步共识,利用主链基于工作量证明的MeerDAG共识协议的高安全性保证合约链共识的安全。未来等合约交易量稳定后,会逐渐降低对主链共识的依赖,以保证合约的高效以及主链的稳定。

数据结构

目前在交易的类型中加入了三种类型的交易:

将通证从主链转入合约链

将通证从合约链转入主链

智能合约

由于MeerDAG是基于UTXO模型,其交易的的数据结构和以太坊的基于账户模型的交易数据结构并不兼容。为了保持UTXO交易结构,MeerDAG巧妙地利用了交易结构中的输入中的签名脚本以及序列字段

typeTxInputstruct{

??

????PreviousOutTxOutPoint?//thesignaturescript(orwitnessscript?or

?redeemscript?)

????SignScriptbyte

???????Sequenceuint32//workwithLockTime(disableuse0xffffffff,bitcoin?

historical)

??

???AmountInAmount?

}

其中Sequence字段在一般的交易中用得并不多,因此MeerDAG将此字段用于区分不同的交易类型,比如上述三种合约交易类型以及MeerToken资产发行系统的多种操作类型。由于确定了交易类型,SignScript这个字段就可以根据不同类型有不同的交易数据规则。因此,MeerDAG完全保留了UTXO数据结构,既可以兼容经典的UTXO交易,也具有非常强的可扩展性。

总结

MeerContract的具有两大设计创新,首先合约链跨链的设计可以让合约链具有更大的独立性,因此可以保证合约链的高效和主链的稳定;其次,通过巧妙的重新了定义了UTXO的数据结构,可以让MeerContract具有更强的可扩展性,也解决了UTXO模型的交易和账户模型的交易不兼容的问题。

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:31ms0-8:889ms