# 《区块链技术与应用》14 ETH以太坊 智能合约

By [Minna Yu](https://paragraph.com/@minna-yu) · 2022-06-19

---

**这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理，以及部分延伸的思考。文末附有公开课链接。**

**课程发布18年中，基于18年5月份以太坊的版本进行分享，本篇主要回答以7个问题：**

1、智能合约的含义是什么？

2、以太坊的智能合约内保存了哪些信息？

3、智能合约的运行方式，如何创建，外部账户如何调用？

4、Gas fee的含义和目的是什么？

5、以太坊的数据包含哪三颗树？分别的数据结构是怎么样的？

6、以太坊的智能合约执行过程是在本地还是链上？

7、Code is law的好处和坏处分别是什么？

### 智能合约的含义

智能合约是运行在区块链上的一段代码，代码的逻辑定义了合约的内容 智能合约的账户保存了合约当前的运行状态，包括

*   balance，当前余额
    
*   nonce，交易次数
    
*   code，合约代码
    
*   storage，存储，数据结构是一颗MPT
    

**外部账户如何调用智能合约？** 创建一个交易，接收地址为要调用的那个智能合约的地址，data域填写要调用的函数及其他参数的编码值

**一个合约如何调用另外一个合约中的函数？**

特殊的fallback函数，实际上没有可以调用的函数，就用fallback，不是必须定义的

![](https://storage.googleapis.com/papyrus_images/b13a1650b9d65ca6479995011e607241025e6bda32007145258ae7585df3ab8c.png)

**智能合约的创建和运行** 发起一个转账交易，到0x0的地址，转账的金额是0，但是需要支付gas fee 合约的代码放在data域里面 智能合约运行在EVM（Ethereum Virtual Machine）上，也叫worldwide computer，EVM是256位。目前通常服务器是32位和64位的。通过一层虚拟机，通过一个一致性的平台。

用的是solidity语句，执行的时候修改的都是本地状态。

### Gas fee汽油费

![](https://storage.googleapis.com/papyrus_images/8f5d07656aa31aef9ae7a7b29af65c67c6fb4c5e2b0a8ffd83c8c850661dc133.png)

比特币设计语言是简单的，以太坊的设计理念是图灵完备的turing-complete programming model 以太坊的弊端，可能会出现死循环，Halting problem停机问题，这个是不可解的。 以太坊的解决方案是，收取汽油费，由发起交易的人来支付。金额不一样，简答的指令比较便宜，复杂的或者需要存储的指令贵。

智能合约的执行有原子性，要么执行，要么完全不执行，不存在执行一部分的情况。如果汽油费不够，就回滚，并且汽油费不会退回。

### receipt收据数的数据结构

三颗树，状态树，交易树，收据树，都是全节点在本地维护的数据结构。

状态的修改，都是在本地进行修改，智能合约的执行都是对本地的数据结构进行修改，执行完了发布到区块链，才会变成外部可见，变成区块链的共识。如果是收到了新的区块信息，那么本地的三棵树更新一下。

先执行智能合约，才能更新三棵树，才能挖矿，不先执行没有三棵树的哈希值，没法挖矿。

*   那么如果有人先执行了合约，但是挖矿失败，就没有收益。比较难过。 并且每个全节点，需要本地独立验证一遍，算一遍根哈希值，进行对比。
    
*   如果矿工不验证，会怎么样？ 不验证，三颗树的状态没有更新，无法进行后续的挖矿。
    

**发布到区块链上的交易，是不是都成功执行的？**

*   不是。因为需要发布到区块链上，才能扣汽油费，成为自己账户的资金。 如何知道是不是执行成功？有个status域，告诉是否执行成功。
    
*   智能合约是不是支持多线程？ 状态机，必须完全确定。三棵树的根哈希值才能对上。
    
    多线程最核心的问题是多核对内存访问不同，结果可能不一致。 智能合约的执行，不会有真正的随机数，不然节点执行结果会不一致。
    

### Code is law.

没有人能篡改规则，坏处是规则设计不好，会有永久的损失。发布之前测试好了，没问题再发布。 类似于irrevocable trust，不可撤销的信托。

Q：是否可以设置一个超级管理员？

A：前提是所有人得信任超级管理员，和去中心化的理念也是相违背的。

**视频课程地址：**

[https://www.bilibili.com/video/BV1Vt411X7JF?p=22&vd\_source=6807dc8dcddb18fe6db9d949c12b670c](https://www.bilibili.com/video/BV1Vt411X7JF?p=22&vd_source=6807dc8dcddb18fe6db9d949c12b670c)

---

*Originally published on [Minna Yu](https://paragraph.com/@minna-yu/14-eth)*
