【Web3技术分享系列专题】【笔记】以太坊账户与GAS

举报
yd_280102075 发表于 2023/05/26 16:45:42 2023/05/26
【摘要】 【笔记】以太坊账户与GAS

账户

账户种类

image.png
这里展示了两处我们能够感知到账户的地方,但账户远远不是向上图展示的一样只是简单的一个地址。以太坊中定义了两种账户: 1. EOA外部账户;2.CA合约账户。依据其特点,我做了一张表格来展示异同。
image.png
值得注意的是,以太坊区块链上发生的任何操作都始终由外部受控帐户触发的交易处理。可以是EOA转账EOA,也可以是EOA调用CA。
image.png

账户创建

首先,一张图概括创建的流程,也区分下几个容易混淆的概念
账户 || 地址 || 私钥 || 公钥
image.png

账户的创建可以分为如下三步

1.创建私钥

伪随机数产生的256bit私钥示例(256bit 16进制32字节)
18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725

2.根据私钥计算公钥

采用椭圆曲线数字签名算法ECDSA-secp256k1将私钥(32字节)映射成公钥(65字节)(前缀04+X公钥+Y公钥):

04 +
50863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352 +
2cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582b

拿公钥(非压缩公钥)来hash,计算公钥的 Keccak-256 哈希值(32bytes):

fc12ad814631ba689f7abe671016f75c54c607f082ae6b0881fac0abeda21781

3.从公钥中获取账户地址

上一步结果取后20bytes即以太坊地址
fc12ad814631ba689f7abe67 0x + 1016f75c54c607f082ae6b0881fac0abeda21781

账户数据结构

image.png
具体的,在以太坊中账户包含四个部分

Nonce

image.png

A scalar value equal to the number of transactions sent from this address or, in the case of accounts with associated code, the number of contract-creations made by this account. For account of address a in state σ, this would be formally denoted σ[a]n
显示从帐户发送的交易数量的计数器,确保交易只处理一次。在合约帐户中,这个数字代表该帐户创建的合约数量。每发起一笔交易,nonce就会加一。
对于发起的解释:

  1. 外部账户(EOA)每发送一笔交易;
  2. 合约账户(Contract Wallet) 每创建一个合约
  3. 转入交易、合约调用其他合约等属于内部调用, nonce 值不变。

Nonce 用于确认交易的顺序,可以避免重放攻击。Nonce是一个在加密通信只能使用一次的数字。没有nonce,每次交易序列化的结果都是一样的,别人可以重复提交。
同时,Nonce可以用于加速已经提交的交易,发送同样nonce的交易但给更多的gas/手续费。新交易会被优先打包,旧交易在处理时会被抛弃。
交易队列只保存最多64个从同一个账户发出的交易,也就是说,如果要批量转账,同一节点不要发出超过64笔交易。当发送一个比较大的nonce值,然后补齐开始 nonce 到那个值之间的nonce,那么交易依旧可以被执行。

Balance

image.png

A scalar value equal to the number of Wei owned by this address. Formally denoted σ[a]b.
这个地址拥有的 Wei 数量。Wei 是以太币的计数单位,每个 ETH 有10^18 Wei。

Root\

image.png

EOA 该字段为空
A 256-bit hash of the root node of a Merkle Patricia tree that encodes the storage contents of the account (a mapping between 256-bit integer values), encoded into the trie as a mapping from the Keccak 256-bit hash of the 256-bit integer keys to the RLP-encoded 256-bit integer values. The hash is formally denoted σ[a]s.
Merkle Patricia树的根节点Hash值。是合约所拥有的方法、字段信息构成的一颗默克尔压缩前缀树(Merkle Patricia Tree 后续独立文章讲解)的根值。 合约状态中的任意一项细微变动都最终引起 StateRoot 变化,因此合约状态变化会反映在账户的StateRoot上。image.png

全局状态/ 世界状态:
The world state (state), is a mapping between addresses (160-bit identifiers) and account states (a data structure serialised as RLP). Though not stored on the blockchain, it is assumed that the implementation will maintain this mapping in a modified Merkle Patricia tree
世界状态 (state)由无数的账户信息组成,每个账户均存在一个唯一的账户信息。

image.png

1)一个交易T,在当前时刻t的状态σ的情况下,通过交易状态变更函数Υ将状态转向了一个新的状态
2)太坊将一个区块B,通过区块状态变更函数Π将以太坊的状态转向了一个新的状态
3)区块内数据实质就是将多个交易T0,T1…打包的数据
4)全局状态变更,根据当前的区块的交易改变块内状态,然后把状态变更施加在本区块之前的所有区块上
7)通过MPT数存储, 当前的全局状态是一个所有账号与账号状态的对应关系的集合
8)单个账号与账号状态的对应关系的描述

image.png

image.png

CodeHash

image.png

EOA 该字段为空
The hash of the EVM code of this account—this is the code that gets executed should this address receive a message call. All such code fragments are contained in the state database under their corresponding hashes for later retrieval. This hash is formally denoted σ[a]c, and thus the code may be denoted as b, given that KEC(b) = σ[a]c.
合约帐户具有编程的代码片段,可以执行不同的操作。 如果帐户收到消息调用,则执行此 EVM 代码。 与其他帐户字段不同,不能更改。 所有代码片段都被保存在状态数据库的相应哈希下,供后续检索。 此哈希值称为 codeHash。

GAS

image.png

基础概念

由于每笔以太坊交易都需要计算资源才能执行,每笔交易都需要付费。 在这个方面上,Gas 是指在以太坊成功进行交易所需的费用。

gas的单位: Gas 价格以 Gwei 标明。10^9 wei = 1 Gwei = 10^-9 ETH。在交易时花费的实际上是ETH,但在计算开销时用的单位是gwei

image.png

GAS LIMIT:燃料限额是指你愿意在交易中消耗的最大燃料数量。
GAS PRICE: gas的单价,一个单位的gas的价格
GAS REFUND = GAS LIMIT - GAS PRICE * Value
e.g.,如果你对简单的以太币转账设置 50,000 单位燃料限额,以太坊虚拟机将消耗 21,000 单位,你将收到剩余的 29,000 单位。 然而,如果你设置的燃料太少,比如说,对于简单的以太币转账,设置燃料限额为 20,000 单位,以太坊虚拟机将消耗 20,000 单位燃料并试图完成交易,但不会完成。 然后,以太坊虚拟机回滚所有变化,但由于矿工已经完成了价值 20k 单位燃料的工作,这些燃料就被消耗了。

image.png

为什么需要GAS

  1. 以太坊(不稳定的)价格和矿工工作报酬之间的缓冲
  2. 对拒绝服务(DoS)攻击的防御 (EIP150)

EIP1559

image.png

image.png

以太坊传统的费用市场经常出现区块链因为来自前一个区块出价最高的交易者的交易而堵塞,这种形式会导致不必要的竞价上升和ETH手续费和交易时间的不确定性。

区块的大小是弹性的,目标大小是15M,上限是30M。

gasprice =baseFee+ Tip

其中basefee 由协议根据区块大小计算,但这部分会被烧掉,矿工也拿不到。

矿工只能拿到Tip。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。