说明,这里只是做一个记录,便于后续查询,没有进行深入的分析。需要说明的是,以太坊黄皮书中文字和公式的比例是1:1大概,如果你一直追着不放,估计一天都看不了多少,所以第一遍看,看个大概懂就可以了。有些不必深究。如果为了研究和深入开发,第二遍深究。第一遍看的目的是,对整体黄皮书的轮廓以及对整个以太坊的技术实现细节在概念上有一个直观的映像。
另外,由于黄皮书公式太多,不便于记录。我会用自己的理解用白话说一下。
区块状态和交易
1.单位
最小单位wei,所有的货币值都按照wei的整数倍来记录。一个以太币等于10的18次方wei
2.交易
一个交易可能是一个消息或者是合约账户。他们的共同组成点
A。nonce,由交易发送者发送的交易数量
B。gasPrice,为了执行这个交易所需要的计算步骤总共所需花费的gas价格,用wei表示
C。gasLimit,为了执行这个交易的最大gas限制
D。to,160位交易接受者地址
E。value,转移或者接收的wei数量
F。v、r、s和交易有关的签名
G。init,evm代码片段,这块有疑问。,如下
如何理解
H。data,不限制大小的字节数组用来表示,交易的数据。
3.以太坊区块头结构
A。parentHash,父区块头的keccak256位hash
B。ommersHash,当前区块的ommers列表的keccak256的hash
C。beneficiary,挖到区块奖励的接收地址。
D。stateRoot,所有交易执行完成之后,定稿后的状态树的hash值
E。transactionsState,区块中所有交易组成的 树结构的根节点的默克尔hash
F。receiptsRoot,当前区块中所有接收交易组成的树结构根节点的默克尔hash
G。logsBloom,当前区块中所有的交易的的可索引组成的bloom过滤器
H。difficultly,当前去区块的难度,它可以由前一个区块的难度和时间戳通过计算获得。
I。number,当前区块的祖先数量
j。gasLimit,当前区块每个交易的gas上限
k。gasused,当前区块的gas之和
L。timestamp,当前区块初始化的时间戳
M。extraData,额外数据,32个字节最多。可以存储任何和当前区块有关的信息
N。mixHash,用来和nonce配合控制难度,说明区块的产生经过的足够的计算量
O。nonce,用来和mixHash配合控制难度,说明区块的产生经过的足够的计算量
4.交易有效性
为了让交易信息对搜索、零知识证明、索引都是高效且有用的。会将交易数据的关键信息提取并编码为收据,并把收据构建为一个以索引为键的树种,树的根节点放入区块头中。每笔交易的编码收据提取的关键信息是:
A。当前区块交易发生之后累积的gas数量
B。交易过程中创建的日志集合,
c。交易过程中的日志集合创建的bloom过滤器,
d。交易的状态码
5.整体有效性
当且仅当一个区块同时满足以下几个条件,才认为它是有效的。
它必须由内部一直的ommer和交易区块的hash值所组成,且按照起始状态(由前一个区块继承而来的)按顺序执行所有的给定交易后所达到的一个新的状态。
6.区块的序列化
首先需要定义一个严谨的数据结构,使得区块头和区块内容做好被序列化的准备。
之后通过RLP函数把这个结构转换为一个可以在网络传输或者本地存储的字节序列。
7.区块头验证
这块公式太多,截图只是其中一小部分公式。
最后区块头验证函数是