Q1ngying

今朝梦醒与君别,遥盼春风寄相思

0%

登链-第一课

以太坊节点:

  • 以太坊可以被认为是一个交易基础的状态机(transaction-based state machine),以太坊是由一部分状态组成的,而状态的迁移是由于一系列的交易的发生

在以太坊交易中,可用把交易分成两类

  • 简单交易(就是单纯的转账)如:从一个 address 向一个 address 转账一个 Ether
  • 智能合约的交互:因为智能合约的交互也改变了以太坊的状态,所以在以太坊中,智能合约的交互也被称为交易

States(状态):

在以太坊中关注三种状态:

  • Account balance and nonce
    • balance:账户中有多少钱(如 ETH 等网络原生代币(native token),不包含 ERC20 Token,ERC20 Token balance 是 Contract Storage)
    • nonce:表示该账户从一开始到现在一共发起了多少比交易
  • Contract Code and Storage:
    • Contract Code:在链上可以允许的智能合约代码
    • Storage:该合约中存储的变量的值(智能合约中持久化存储的数据)
  • Other consensus-related data(在智能合约层用不到)

以太坊节点分类

最长接触的两个节点类型为:Archive Node 和 Full Node

Archive Node(归档节点):

一个 Archive 节点会存储:区块链中每一个区块的所有历史状态(history states)

Full Node(全节点):

只存储最近的 128 块的状态,(节省存储空间的目的)

大多数情况下是不关注历史状态的,有一个 Full Node 节点即可。节点的实现是通过不同语言实现的(Go,Rust等,以太坊是使用 Go 语言实现的节点)

Account(账户)

在以太坊中存在两种账户:

  • Externally owned accounts(EOA)—— 外部拥有账户(简称外部账户)
  • Smart contract account —— 智能合约账户

EOA 账户和智能合约账户本质的区别就是:EOA账户没有 Code,而 Smart contract account 有 Code

Account 的信息是存储在区块链上的,Account 是否有 Code 也是存在区块链的 States 的,通过查看一个 Account 是否拥有 Code 即可判断账户是否为 EOA 账户。

EOA Account:Valid Ethereum Address(有效的以太坊地址)

  • 一个公、私钥对
  • balance(native Token 原声代币 余额)
  • nonce
  • code-Hash(一个 Account 里的 Code 代码的哈希值,如果是一个 EOA 账户,其中不存在 Code,但是无论是否为 EOA 都有 code-Hash)

Contract Account:存储和执行智能合约代码的账户

  • balance 和 nonce (一个合约也有 native Token 余额,nonce)
  • code-Hash:关联的智能合约代码的哈希
  • storageRoot 包含关联存储数据的默克尔树(contains Merkel tree of associated storage data)

Transactions(交易)

交易:更改区块链中的状态一个请求

交易可分为三种:

  • 账户之间的转账(Fund Transfer)
  • 智能合约的部署
  • 智能合约函数的调用

根据交易的类型还可分为:外部交易(External Transaction)和内部交易(Internal Transaction)

Fund Transfer

image-20231106150926697

Gas

为什么要设置 Gas 的机制?

补偿提供计算资源的人,如果没有 Gas 的存在,可能存在攻击者对智能合约平台进行毫无代价的 DDos 攻击

  • Gas Limit:每一笔交易都要指出你对这笔交易最多支付的 Gas 单元,这个值就是 Gas Limit
  • Gas Price:每一笔基本单元的 Gas 花费多少 native Token。
  • Gas Cost:每笔交易真正花费的 gas:gas = gasUsed * gasPrice如果 gas > gas limit,交易会回滚

image-20231106152027547

gas > gas limit时:

image-20231106152254147

当 Out of Gas 时,交易会发生回滚(revert),但是之前指定的 gas 不会返还,因为在发起这笔交易时,已经花费了区块链网络的算力,所以依然会花费 gas。

在 EIP-1559 后,Gas 的计算变得复杂。详细查看 EIP-1559。