深入浅出以太坊智能合约

Eth(以太坊)不知道你有没有听说过,ICO你一定听说过。但你知道ICO其实是借助Eth的智能合约实现的吗?什么是智能合约,Eth为啥这么火?智能合约的特点是什么,我怎么写智能合约?基于智能合约还有Dapp,即分布式app,Dapp又是什么?

本系列文章将全面讲述Ethereum的原理,特点和机制,以及涉及的各种概念。

区块链的运行机制

首先大家必须了解区块链。这里只做一个简单的描述,区块链就是一条全网账单链,链的使用者凭着自己的私钥加密交易内容,然后发送到网络上后,矿工通过比拼算力将内容加密提交到区块链上,同时获得使用者支付的手续费。

由于大家都在竞争加密内容,所以全网的算力都是使用者提交内容的见证人,因此区块链交易有迅速,不可逆的特点。

账户和消息传递

在区块链中的交易就是一个地址往另一个地址转移基本单位,Ethereum在这里将这种行为抽象成消息传递。每一次消息传递有发送者,也有接受者,消息内容可以是一笔交易,也有可能是一段信息。转账,其实就是一个消息传递。

在Ethereum中有两种账户,一种是人操作的正常账户,另一种是智能账户,正常账户中只有当前的Eth钱数,而智能账户中存储了两个东西:状态和代码,每当收到相应的消息时,这些代码就会被执行,从而改变其状态。这些账户也就是所谓的智能合约的载体。

这些智能账户就是智能合约的基础,要了解智能合约是怎么执行的,先要了解EVM。

EVM

前面提到了,真正的计算是在各个矿工的电脑中进行的。Ethereum的改进之处,就是在矿工收集足够消息,准备加密生成一个Block时,必须启动一个运行时环境,也就是EVM,来运行智能账户收到消息时对应的代码。

这个环境包含了一些内置变量,比如当前Block的Number,消息来源的地址等,还会提供一些API,一个stack供智能合约执行时使用。

通过EVM运行代码后,智能账户的状态发生了变化,然后矿工将这些状态同正常账户里的资金变化一起,加密生成新的block,链接到全网账单上。因此一个交易只会在一个Block里出现,并且要得到大多数算力的确认才能挂载,所以可以保证这些code执行的唯一性和正确性。

智能合约的示例

概念有时候比较晦涩,我们举一个募捐的智能合约的例子来帮助理解:

假设我们想向全网用户发起募捐,那就先可以定义一个智能账户,它有三个状态:当前募捐总量,捐款目标和被捐赠人的地址,然后给它定义两个函数:

接收募捐函数

接收募捐函数每次收到发过来的转账请求,先核对下发送者是否有足够多的钱(EVM会提供发送请求者的地址,程序可以通过地址获取到该人当前的区块链财务状况。)然后每次募捐函数调用时,都会比较下当前募捐总量跟捐款目标的比较,如果超过目标,就把当前收到的捐款全部发送到指定的被捐款人地址,否则的话,就只更新当前募捐总量状态值。

捐款函数

将所有捐款发送到保存的被捐赠人地址,并且将当前捐款总量清零。

每一个想要募捐的人,用自己的eth地址向该智能账户发起一笔转账,并且指明了要调用接受其募捐函数。

于是我们就有一个募捐智能合约啦,人们可以往里面捐款,达到限额后钱会自动发送到指定账户,全世界的矿工都在为这个合约进行计算和担保,不再需要人去盯着看有没有被挪用,这就是智能合约的魅力所在。

Ethereum最核心的智能合约机制大概就是这样,其实也并不复杂,接下来我们还会讲一下,ICO是怎么借助智能合约实现的,其实原理非常简单,等你明白了你一定会大吃一惊。

原文:http://baijiahao.baidu.com/s?id=1576362675066362360&wfr=spider&for=pc

--------------------------------------------------------------------

如果你希望高效的学习以太坊DApp开发,可以访问汇智网提供的最热门在线互动教程:

1. 适合区块链新手的以太坊DApp智能合约实战入门教程
2. 区块链+IPFS+Node.js+MongoDB+Express去中心化以太坊电商应用开发实战

3. 其他更多内容也可以访问这个以太坊博客

猜你喜欢

转载自blog.csdn.net/mongo_node/article/details/80231570