主页 > imtoken苹果钱包 > 《区块链学习笔记》ETH-智能合约(上)

《区块链学习笔记》ETH-智能合约(上)

imtoken苹果钱包 2023-02-17 07:27:43

ETH-智能合约

北京大学肖震老师《区块链技术与应用》公开课笔记

什么是智能合约?

1. 智能合约是运行在区块链上的一段代码,代码的逻辑定义了合约的内容。

2、智能合约的账户保存了合约当前的运行状态。 有以下几个方面:

balance:当前余额 nonce:交易数量 code:合约代码 storage:存储,数据结构是一个MPT(状态树)

*solidity是智能合约最常用的语言,其语法类似于javascript。

合约代码展示

什么是以太坊汽油费_以太坊矿工费暴涨说明什么_以太坊为什么叫以太坊

外部账户如何调用智能合约?

创建一个交易,接收地址为要调用的智能合约的地址什么是以太坊汽油费,data字段填写要调用的函数及其参数的编码值。

转帐交易示例

其中,TXDATA是调用的函数。

一个合约如何调用另一个合约中的函数?

直接打电话

在这里插入图片描述

什么是以太坊汽油费_以太坊矿工费暴涨说明什么_以太坊为什么叫以太坊

使用地址类型的call()函数

在这里插入图片描述

代理调用 delegatecall()

在这里插入图片描述

fallback() 函数

在这里插入图片描述

转账金额可以为0,但gas费不能为0,否则没有矿工打包这笔交易。

以太坊为什么叫以太坊_什么是以太坊汽油费_以太坊矿工费暴涨说明什么

智能合约的创建和运行

在这里插入图片描述

煤气费

在这里插入图片描述

gas费在合约执行时扣除一次。 如果汽油费被扣除太多,多出的部分将被退还。 如果小于,交易将被回滚,但已经消耗的gas费不会退还。 之所以这样处理,是为了防止恶意用户发起DOS攻击,浪费算力什么是以太坊汽油费,导致以太坊处理交易的能力下降。

*拒绝服务(DoS)是一种分布式拒绝服务攻击软件。 DDoS攻击分为带宽消耗和资源消耗。

错误处理

以太坊矿工费暴涨说明什么_什么是以太坊汽油费_以太坊为什么叫以太坊

智能合约要么执行其全部内容,要么不执行,要么执行其中的一部分。

在这里插入图片描述

嵌套调用

在这里插入图片描述

块头

在这里插入图片描述

这里的 GasLimit 是指本区块内所有交易可以消耗的 Gas 值的上限。 设置这个值的原因是为了防止一个区块中有太多的交易。 后一个块可以选择将 GasLimit 值向上或向下调整 1/1024。

以太坊矿工费暴涨说明什么_什么是以太坊汽油费_以太坊为什么叫以太坊

**问题一:**假设一个全节点要将一些交易打包成一个区块,其中一些交易是对智能合约的调用,那么这些全节点是不是在完成智能合约的执行之后就去挖矿了? 还是先挖矿,拿到记账权后再执行智能合约?

**答:**先执行智能合约再去挖矿,通过执行交易实现状态同步。 每个全节点执行完智能合约后,会从本地数据库中扣除相应的Gas费用。

**问题2:**会不会有矿工因为拿不到Gas费而不验证交易?

**回答:**不能。不验证会危及区块链的安全。 如果跳过验证,挖矿将无法继续。 因为挖矿需要执行所有的交易得到哈希值,然后更新状态树。

**问题3:** 如果智能合约在执行的过程中出现错误,是不是应该不发送到区块链?

**回答:**是的,因为发布后必须形成共识,矿工才能拿到gas费。

收据数据结构

每一笔交易完成后,都会形成一张收据,如图是交易的内容。

在这里插入图片描述