以太坊智能合约介绍

in #blockchain6 years ago (edited)

第1章前言

1.1背景
以太坊最早是由Vitalik于2013年提出,14年开始众筹,作为第一个支持智能合约的区块链平台,发展迅速。截至2018年1月,已经开发了200多个应用(简称DApp:简单说就是区块链上的一个智能合约)。本文从以太坊,智能合约基本概念展开讨论,进而延伸到智能合约的部署,以太坊对智能合约的执行原理。其中有理解不对的地方,希望各位大神指正。

1.2本文适用对象
本文的阅读对象为了解区块链基本概念,想知道以太坊及智能合约运行原理的读者。

第2章以太坊智能合约
2.1基本概念
以太坊是一个区块链平台。任何人都能够去创建智能合约和去中心化应用,并在其中设立他们所定义的所有规则,交易方式和状态转移函数。
智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议。一份合约由代码(合约的函数)和数据(合约的状态)组成。

2.2工作流程

我们通过一个智能合约的完整流程来解释以太坊执行智能合约原理

1,编写智能合约

合约中数据部分是storedData, 代码部分有set, get两个函数。可以看到智能合约的代码很简单,这也是以太坊发展迅速的原因。

2,编译智能合约的原始码成为可以在Ethereum Virtual Machine(EVM)上可执行的代码,EVM不是真正的虚拟机,只是一个代码解释器。当EVM运行时,需要读取存储空间的数据。

3,部署智能合约,就是把可执行的代码存储在链上(transaction),并生成合约地址。

4,调用合约,选择合适函数和参数。
再调用合约时,会涉及到对智能合约数据状态的改变,由于区块链上的数据时无法被更改的,这里利用了Merkle Patricia Trie的特性。
以太坊和比特币的块最大的差别在于以太坊的块不仅包含了transaction,还包含了智能合约数据最近的状态。在调用智能合约时,如果修改了智能合约变量状态,在新加的块上会记录状态的改变。这看上去效率很低,因为需要保存每一个智能合约的状态,但实际上和比特币的效率是差不多的。原因是每生成一个块,只有改变了树的一小部分。

2.3其他
ABI(application binary interface):是一个接口结构,利用abi可以创建调用该合约的结构.abi由合约所有方自己保存和提供。在智能合约编译时会生成对应的ABI。

第3章结论
从前面的分析中可以得出以下结论:
1,以太坊能够运行智能合约代码依赖EVM代码解释器;
2,智能合约能够实现对智能合约状态的操作是通过patricia tree 实现了对 Merkle tree 状态改变的存储。

参考文献
1,https://github.com/ethereum/wiki/wiki/Patricia-Tree
2,https://github.com/ethereum/wiki/wiki/White-Paper
3,https://en.wikipedia.org/wiki/Ethereum
4,https://en.wikipedia.org/wiki/Smart_contract
5,https://ethfans.org/topics/1538 以太坊中文资料

Coin Marketplace

STEEM 0.20
TRX 0.15
JST 0.030
BTC 65531.60
ETH 2644.26
USDT 1.00
SBD 2.81