免责声明:本文不构成任何投资建议,我来为大家科普一下关于区块链智能合约如何编写?以下内容希望对你有帮助!
区块链智能合约如何编写
免责声明:本文不构成任何投资建议。
小编:记得关注哦!
智能合约其实是一个智能的合同,未来也很可能会出现可编程的经济、经济学等,改变经济领域的一些方面以及交互方式。
要点速览:
1.POS共识算法需要解决的问题太多,太多的状态需要在协议考虑到,这也是Casper协议被推迟的原因。2.不建议自己开发一种新的语言或者使用自己开发虚拟机技术,区块链行业的研发实力并没有那么强大。3.公链进展还是属于比较早期,我们需要解决的问题也会比较多,比如隐私性的问题,包括一些数据类型的使用。
11月27日21:00,虫洞项目负责人姜家志做客「火星财经创始学习群」,做了主题为“ETH、EOS与BCH智能合约框架比较”的分享。
姜家志表示,ETH、EOS与BCH三者相比,在共识机制、出块速度、Gas费用、TPS等方面均存在差异。整体来说,ETH还需在工程上有巨大进步,不然会很快被其他公链超越,EOS上的超级权限的确会让人顾忌,对于上面运行一个项目主要资产时,会有让人会担心超级权限的控制,这是EOS上需要解决的问题。
他同时表示,公链进展还属于比较早期,公链创新者的荆棘之处在于勇于创新的永远是少部分人,在很长时间内都有可能不会被认可,但这也是区块链给的自由,不用妥协,要自由就做好承担代价的准备。
以下为姜家志分享内容,由火星财经(ID:hxcj24h)整理:
今天要分享的是ETH、EOS与BCH智能合约框架的比较。BCH的智能合约主要介绍下Wormhole的开发和想法。
比特币的脚本系统其实也是一种编程语言,早期的时候也用来实现一些简单的合约http://ivy.copernet.io/。我们也改了一个基于脚本的编程,但是这个脚本系统很不好用,而且也不适合写我们现在理解的智能合约。
这是因为UTXO和账户模型的不同,一个大的问题就是比特币里面只有私钥能够控制币,代码无法控制币。
用合约语言的方式写代码,会被翻译成BCH的脚本。上面的合约会被翻译成下面的脚本。
下面我要聊的BCH智能合约不是这个,是指我们在设计和开发的Wormhole的智能合约。
三个做对比的话,首先是共识的不同:POW 、POS、DPOS。
工作量证明(Proof Of Work,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作,PoW模型是目前最去中心化的区块链系统,是不需要许可的系统,任何人都可以通过获取算力加入POW中,但是它也有自己的问题,POW的币种进化速度会很慢,各种新特性的发展速度会很慢。
POW达成共识的时间会很慢,ETH通过GHOST协议才只能做到15秒一个出块时间,这会严重影响POW上的智能合约的确认时间。
至于POS协议,目前并没有看到一个好的安全的POS协议在运行。众所周知,ETH未来的协议演进方向是Casper协议,POS共识算法需要解决的问题太多,太多的状态需要在协议考虑到,这也是Casper协议被推迟的原因,目前来看对于Casper协议的未来,我个人并不是那么乐观。
DPOS是牺牲了去中心化,但它又不是完全的中心化,是一种弱中心化的架构。牺牲去中心化的原因是它想提升性能,这个方向是会能给我带来很多的思考,在整个区块链运行上,如果我们说能把BTC、BCH,现在的ETH这种POW模型认为是最去中心化的话,到中心化之间还有很多中间状态的,是不是能选一个方式来满足需求?
这是一个很值得思考的问题,基于一个弱中心化的信任网络,能给我们带来多少价值,EOS是值得观察和学习的。
DPOS的治理模型已经和之前的区块链的治理模型发生了很大的变化,它现在的模型已经在形成比较稳定的结构了,它的开发者很少直接面对普通用户了,中间有一个超级节点的角色,超级节点直接对自己的选民负责,这在很多的政治结构里都出现过。全民投票的政治模型里,每个人都需要投票。还有一种是选出一个代表,这个代表帮选民做决定,这种方式更加的专业。好的治理模型是未来公链发展的一个重要特性。
出块速度上不同
EOS上的出块时间可以做到0.5的出块,这样一个智能合约可以秒级的时间被确认。
共识的不同
这造成了出块的不同,DPOS可以做0.5秒的出块时间,这也是目前很多菠菜应用选择EOS的原因,而ETH上是15秒,确认时间会给应用带来很多的问题,人们更倾向于确定性,而不是非确定性,目前BCH上的确认时间是10分钟,长的确认时间也会严重的限制应用的使用,希望未来BCH能在这些方向上做更多的改进。
从15秒的确定时间到0.5秒,EOS上的确让以前在ETH不是那么火爆的应用重新焕发了生命力。
Gas费用的不同
EOS采用了抵押模型,导致了很多应用没有办法获取到资源,在EOS上开一个账户都需要有人提供专门的服务,而内存和CPU价格被爆炒也反映了这种模型存在的问题。
ETH采用Gas模型,这是目前运行比较合理的一种方式,但是也有另外的问题就是资源是动态变化的,CPU、内存的价格一直在变化,所以ETH的Gas也在不断的调整,而使用智能合约的价格不稳定也是ETH一直在尝试解决的问题。
在Wormhole开发智能合约的时候我们一直比较重视Gas的使用,最好的方式有可能是Gas只用在收取需要高消耗资源的情况,对于真实的用户想办法让他们以更低的成本使用整个网络,这是一个非常有挑战的事情,目前我们团队也在一直优化这部分的算法,也会在Gas的定价上采取更多的灵活性。
TPS的不同
EOS目前能够处理2000-3000TPS(非智能合约运行数据),随着代码的优化以及超级节点处理能力的提高,这个数据还会上升。
ETH目前是15-20TPS,这是ETH目前面对的一个最好的问题,从加密猫到现在ETH在TPS上没有什么进步,目前市场也对于ETH出现了一些偏悲观的判断就是技术上没有太多的进步。
BCH: 目前的TPS是100左右,Wormhole上的智能合约运行并不需要BCH的节点运行智能合约,所以Wormhole的智能合约的TPS只依赖于BCH的网络处理能力。借助与分片、UTXO证明等技术未来BCH能够处理更大的交易,但这样也是只有Wormhole的节点需要运行智能合约,这样的好处就是智能合约的运行和交易运行分离开,能够处理更多的交易。
DOS攻击的问题
交易需要支付收费自然就能解决DOS的问题,在ETH上智能合约的运行在消耗完Gas之后自然停止运行,这样就可以避免一个合约在节点中一直运行。
EOS上因为不向用户收取手续费,只需要应用提供商抵押EOS即可,EOS的智能合约的限制,每个合约必须在30ms内执行完成,不然就认为执行失败。这样虽然解决了停机问题,但是还是没有解决用户通过抵押EOS发垃圾交易的问题,EOS上面有一些账户就在不断的发送垃圾交易,目前EOS需要不断的去解决这些垃圾交易的账户。
Wormhole的合约,倾向于提供给智能合约更长的执行时间,会更加的选择使用Gas模型,也需要有一个合理的算法机制让真实的用户可以方便的简单便宜的使用Wormhole合约。Gas模型 算法选择的方式是我们未来重点考虑的一个方向,同时也要避免对于系统的攻击,这是一个需要不断摸索和不断调整的问题,让真实用户使用,但是也要让攻击者的成本不断提高,另外发送BCH交易需要支付BCH的矿工费用。
主要数据结构的不同
ETH中的MPT树是其最重要的一个数据结构。
使用前缀树来进行查询拥有共同前缀key的数据时十分高效,例如在字典中查找前缀为pre的单词, 对于哈希表来说,需要遍历整个表,时间效率为O(n);然而对于前缀树来说,只需要在树中找到前缀为pre的节点, 且遍历以这个节点为根节点的子树即可。 但是对于最差的情况(前缀为空串),时间效率为O(n),仍然需要遍历整棵树,此时效率与哈希表相同。 相比于哈希表,在前缀树不会存在哈希冲突的问题。
这个不是太好理解,大家明白他很复杂就好了。这棵树有很多的劣势:
直接查找效率低下,且一次查找会有m次IO开销,相比于直接查找,无论是速率、还是对磁盘的压力都比较大。
可能会造成空间浪费,当存在一个节点,当树中没有与他相同前缀的分支时,为了存储该节 点,需要创建许多非叶子节点来构建根节点到该节点间的路径,造成了存储空间的浪费。
MPT树会导致ETH中一个数据库操作放大7次以上,这是ETH慢的最重要原因,不改进MPT树ETH的TPS很难有很大的进展,邓草原老师的项目就是在尝试减少这棵的访问时间。
POW的优势并没有被释放。不可能三角也是一个神话,ETH慢的原因是因为这个树的拖累,造成了大量的IO操作。
优化这棵树,ETH提高1-2个数量级的TPS不是太大的问题。
MPT一个很大的好处是SPV钱包能够更好的好处,但是目前来看ETH生态上基本上没有SPV钱包的应用。
Wormhole上在设计主要数据结构的时候会选择和EOS一样的简单数据结构,比如merkle tree 可以用来快速算hash,以及做merkle proof即可,完成存在性证明和不存在性证明。
存储方式不同
ETH使用的是LevelDB,需要存储MPT中的每一个节点。EOS使用的是MongoDB,很多数据都使用了JSON,互联网里面比较常用的一种格式。
Wormhole上的智能合约未来是使用我们自己设计的针对区块链存储的存储引擎,目前还在开发中,完成的时候会一起开源。
合约语言的不同
ETH :Solidity语言, Solidity 是一个面向合约的高级语言,其语法类似于JavaScript ,是运行在以太坊虚拟机中的代码。
EOS: WebAssembly,目前支持最好的是C 未来会支持主流的编程语言,WebAssembly 是一种新的字节码格式,主流浏览器都已经支持 WebAssembly,包括微软、Google、苹果都已经在支持WebAssembly。
Wormhole:我们也使用WebAssembly,我个人并不建议自己开发一种新的语言或者使用自己开发虚拟机技术,区块链行业的研发实力并没有那么强大。WebAssembly的研发基本上聚集了主要大的互联网公司研发力量。
应用场景不同
ETH: 无许可的智能合约应用,受限与TPS,上面的运行了很多的偏金融类的智能合约。
EOS: 较高的TPS,但是因为对于超级权限的顾虑,上面运行的大多都是菠菜和游戏相关的智能合约应用,高价值的智能合约对于EOS平台会有所顾虑,比如稳定币。
Wormhole: 因为有POW做了安全保证,也保证了无许可特性,再有就是BCH社区在努力的提高TPS,我们觉得在Wormhole上能够运行一些价值转移的智能合约以及一些无许可的智能合约。
整体来说,ETH还需要在工程上能够看到巨大的进步,不然被其他公链超越基本上是很快的事情。
EOS上的超级权限的确会让人顾忌,对于上面运行一个项目主要资产的时候,会有让人会担心超级权限的控制,这个是EOS上需要解决的问题。
公链进展还是属于比较早期,我们需要解决的问题也会比较多,比如隐私性的问题,包括一些数据类型的使用。
公链创新者的荆棘之处在于勇于创新的永远是少部分人,在很长时间内都有可能不会被认可,但这也是区块链给的自由,不用妥协,要自由就做好承担代价的准备。
我个人非常看好区块链未来的发展,因为,从本质上来讲,区块链是一个分布式的公共账本,所有人对这个账本都有查询的权利,没有一个单一的用户可以对它进行控制。那整个区块链系统的参与者就会维护整个账本的更新,它需要按照严格的规则共识来进行修改。
其次,不可篡改性从根本上改变了中心化信任的创造方式,它是依赖于数学以及机器去建立的信任而不是人去建立的,信任的建立是非常难的。在整个人类的发展过程中,人类之所以发展到现在其实是通过一些语言或者说和陌生人交流来达到大规模协作的目的,如果没有这种方式协作的话,很难去高效地组建团队,整个过程其实是信任的基础。
互联网其实是一个大的合作网络,它所带来的信任其实是一种领袖的信任值,比如说我们信马云、马化腾等,是因为理解他们的背后是淘宝和腾讯,这种信任的积累是长时间打造的。
现在社会更多的是一种制度化信任,比如说我们对议会制这种制度是认可和鼓励的。当然到了区块链的时代,整个信任的建立是由机器达到的,就是出现代码,整个代码在区块链上会被执行,然后会达到让大家更好的去协作,更低成本的构建一个大型的网络。人类历史上有可能第一次达到零成本去建立信任。因为区块链上的的数据是可以直接相信的。
这个变革会非常巨大,还有就是价值的传递,区块链本身是一个地址到另外一个地址的转移,这就是价值的传递。之前的互联网没有公众号的出现,也没有打赏这种工具出现,其实意味着互联网上没有一个万亿级的市场,现在因为打赏的出现,价值可以高速流通,所以出现了一种知识创新的模式。
现在我们都知道跨国转账是非常困难的,大概要三到五天的时间才能做到,而且手续费还不固定,即使我们坐飞机坐到北美那边也顶多二十多个小时,这样你人都到了你汇的钱还不一定到,这本身是非常不合理的,区块链是能够改变这些的。
智能合约其实是一个智能的合同,未来也很可能会出现可编程的经济、经济学等,改变经济领域的一些方面以及交互方式,这些都对于未来的发展是非常重要的。
互联网及制度带来的发展是信息的高速流转,但是互联网没有解决的问题是价值的传递及价值的高速流动,那这个问题是区块链能够解决的。如果说区块链能做到这一步的话,整个人类会发生比互联网所带来的影响力更大的一次变革。那这个变革所释放出来的自由、所能达到的透明度,能营造一个更加公平的环境,这在人类历史上是从来没有过的。价值转移、信任建立以及智能合约会给整个人类带来不一样的世界。
嘉宾简介
姜家志 / 虫洞项目负责人
对话发起人
刘昌用 / 知密大学 发起人
文章声明:本文根据「火星财经创始学习群」嘉宾分享内容整理,不代表火星财经立场,转载须在文章标题后注明“文章来源:火星财经(ID:hxcj24h)”。