1
板块介绍
在上一期分享中,开发者通过以太坊可以跳过底层区块链开发,直接发布分布式应用。而持有分布式应用的逻辑代码则是以太坊的智能合约(Smart Contract)。这一期蓝教兽将简单的介绍一下智能合约。
2
以太坊智能合约是什么
智能合约是分布式应用后台逻辑的承载器,现在比较成熟的编写语言有solidity,viper等。如果现在蓝教兽需要做一个以区块链为基础的卡牌收集应用,那么蓝教兽所需要做的只是把卡牌收集的逻辑编写到一个或几个智能合约上,完全不需要考虑区块链建设方面的代码编写。而当应用在运行的时候,卡牌收集的逻辑是由智能合约完成,而底层的区块链信息认证储存等则由以太坊完成。这样便可以大大减少开发者所花费的时间,因为以太坊已经提供了非常成熟的底层区块链支持。
3
智能合约如何执行
当开发者将智能合约发布到以太坊的时候,以太坊会把智能合约的代码编译成字节码(byte code),以便跳过不同操作系统的限制, 由以太坊虚拟机EVM(Ethereum Virtual Machine)进行执行。然后发布者要根据字节码所占储存空间的大小支付相应的gas并将信息发布到区块链网络上,为了储存智能合约的字节码,以太坊会创建一个全新的合约账户,然后将该合约储存到新创建的帐号下面。一旦矿工认证成功并把信息储存到区块中,那么该智能合约就能生效。一般来讲,触发智能合约上的代码有两种方式,一个是向该智能合约对应的合约账户地址发送以太币,从而触发默认代码运行,这也是一般ICO会使用的方式。第二种则是用户可以直接请求该合约的公开函数进行运行。而运行的费用(gas)则由发起请求的用户账户承担。
4
智能合约的局限性在哪里
正如之前所说,智能合约是以数据形式存在于合约账户底下。智能合约一旦发布,以太坊便会建立相应的合约账户并把智能合约放置在账户下面。基于区块链的特性,数据一旦写入区块链便无法被修改,同样的,一旦智能合约被发布到主网上面那么便无法再被修改。也就是说,如果现在我们发布一个带漏洞的智能合约,而且我们在编码设置的时候没有植入可销毁函数的话,那么这个漏洞就会永久存在于以太坊区块链上,恶意用户可以持续利用该合约伤害不知情合约用户的利益。举个例子,现在蓝教兽发布一个卡牌游戏的合约,然后很不巧这个合约有个漏洞允许黑客窃取该卡牌游戏用户的以太币。那么蓝教兽是没有办法对该智能合约进行升级打补丁的,蓝教兽所能做的是通知该游戏当前的用户说,合约有漏洞,已经被弃用。然后再重新发布一个没有漏洞的合约。如果说蓝教兽在第一个带漏洞的合约里面有编入数据移植跟合约销毁的函数的话,那么蓝教兽还可以将原来的数据转移到新合约上,然后销毁原有的智能合约。如果合约无法被销毁的话,那么黑客便可以继续透过漏洞窃取不知情用户的以太币。
智能合约的局限性是因为现有区块链设计的特性导致的,目前并没有很好的解决方法。所以一般做智能合约开发的小伙伴除了自己得特别小心谨慎之外,在架构的时候,也是越精简越好,在开发完成后也会送交外部团队或机构进行进一步的代码安全审核,以确保智能合约的安全风险被降到最低。
本文章为一克拉区块链原创,如有转载请联系我们,非法转载必究!
领取专属 10元无门槛券
私享最新 技术干货