张三和李四拟定了一份合约,合约内容是“张三完成李四给的外包任务后,李四会自动给张三1000块RMB 并且由于合约是被打包在区块链里面的,区块是不可修改的,所以合约是非常安全的。”
简直就是合约未来的发展方向是不是?但问题来了,系统如何评判张三是否完成任务,系统怎么又是怎么给张三转钱的?想法总是优秀的,
下面,我们来谈一下智能合约的工作方式:
张三写的一个关于投票的智能合约:
有函数1:vote(elected_person),合约会检测调用者是否已经投过票, 再检测参数elected_person是否在被选举人的列表中,如果有,则该被选举人的选票+1.
函数2:view(),可以查看所有被选举人当前的选票数,(像发钱一样把返回值发到对应账户上)。
张三把合约以二进制文件部署到以太坊(区块链)上,以太坊会给这个合约(程序)一个地址。
李四或其他任何人(除非合约中有其他声明)可以通过合约的地址调用vote和view两个函数(和转钱一样转函数),(同样以二进制编码发送到链上)。
有些人有疑惑了,区块链不就是交易的吗,为啥还能跑代码和调用函数。这就是以太坊比BTC更优秀的地方,他在设计之初就考虑到了 智能合约的问题,链上不仅可以保存交易数据,还可以保存与运行二进制文件,详细内容可以搜索EVM以太坊虚拟机。
值得注意的是虽然智能合约是“图灵完备”的,可以完成任何的复杂计算。但是当下区块链运行速度很慢,所以对程序会有限制, 以太坊有一个GAS的感念,调用函数要使用合约账户的GAS,越复杂的函数使用的GAS越多,这是要花钱的。(合约也具有交换代币的功能)