深入浅出Ethereum 1 ----- 智能合约
Eth(以太坊)不知道你有没有听说过,ICO你一定听说过。
但你知道ICO其实是借助Eth的智能合约实现的吗?
什么是智能合约,Eth为啥这么火?
智能合约的特点是什么,我怎么写智能合约?
基于智能合约还有Dapp,即分布式app,Dapp又是什么?
本系列文章将讲述Ethereum的原理,特点和机制。
区块链的运行机制
首先大家必须了解区块链,可以阅读之前的文章。
这里只做一个简单的描述,区块链就是一条全网账单链,链的使用者凭着自己的私钥加密交易内容,然后发送到网络上后,矿工通过比拼算力将内容加密提交到区块链上,同时获得使用者支付的手续费。
由于大家都在竞争加密内容,所以全网的算力都是使用者提交内容的见证人,因此区块链交易有迅速,不可逆的特点。
账户和消息传递
Ethereum把交易抽象成消息传递,在Ethereum中,每一个区块(block)都包含多个消息。
每一次消息传递有发送者,也有接受者,消息内容可以是一笔交易,也有可能是一段代码。
在Ethereum中有两种账户,一种是人操作的正常账户,另一种是智能账户,正常账户中只有当前的Eth钱数,而智能账户中存储了两个东西:状态和代码,每当收到相应的消息时,这些代码就会被执行,从而改变其状态。这些账户也就是所谓的智能合约的载体。
这些智能账户就是智能合约的基础,要了解智能合约是怎么执行的,先要了解EVM。
EVM
前面提到了,真正的计算是在各个矿工的电脑中进行的。Ethereum的改进之处,就是在矿工收集消息,准备加密生成一个Block时,必须启动一个运行时环境,也就是EVM,来运行智能账户收到消息时对应的代码。
通过EVM运行代码后,智能账户的状态发生了变化,这些状态同正常账户里的资金转移合起来的内容加密生成新block,链接到全网账单上。因此只有code执行结果在大部分以太坊节点上都能验证,才可以成功挂载,保证了代码执行的正确性。
智能合约的示例
概念有时候比较晦涩,我们举一个募捐的智能合约的例子来帮助理解:
假设我们想向全网用户发起募捐,那就先可以定义一个智能账户,它有三个状态:当前募捐总量,捐款目标和被捐赠人的地址,然后给它定义两个函数:
- 接收募捐函数
接收募捐函数每次收到发过来的转账请求,先核对下发送者是否有足够多的钱(EVM会提供发送请求者的地址,程序可以通过地址获取到该人当前的区块链财务状况)
然后每次募捐函数调用时,都会比较下当前募捐总量跟捐款目标的比较,如果超过目标,就把当前收到的捐款全部发送到指定的被捐款人地址,否则的话,就只更新当前募捐总量状态值。
- 捐款函数
将所有捐款发送到保存的被捐赠人地址,并且将当前捐款总量清零。
每一个想要募捐的人,用自己的eth地址向该智能账户发起一笔转账,并且指明了要调用接受其募捐函数。
于是我们就有一个募捐智能合约啦,人们可以往里面捐款,达到限额后钱会自动发送到指定账户,全世界的矿工都在为这个合约进行计算和担保,不再需要人去盯着看有没有被挪用,这就是智能合约的魅力所在。
Ethereum最核心的智能合约机制大概就是这样,其实也并不复杂,接下来我们还会讲一下,ICO是怎么借助智能合约实现的,其实原理非常简单,等你明白了你一定会大吃一惊。
QQ群:654894791
微信公众号: 94ETH
头条号: 周期与泡沫