小白基础知识问答

以太坊分布式地运行在一个计算机网络上,作为一个区块链项目,它具有几大要素:一条完整记录所有交易的区块链,一个由数个节点组成的网络,一个大家公认的共识机制。它也具备两个特殊的要素:每个节点具备运行智能合约的环境,以及由交易推动的,随着每次交易不断变化的世界状态。我们下面用图文形式来分析这个分布式计算系统是如何运行的。

我的以太币记录在哪里?

你的以太币记载在 世界状态 (world state)里。

世界状态 = 每个人账户的状态的总集合

世界状态是一份不断变化的数据。 它在每个以太坊节点中都有一份一模一样的拷贝。 该状态记录了所有世界上以太坊账户的信息。

如下图所示,读者既可以将其理解为由 “地址+地址对应的账户的状态”所组成的无序大集合, 也可以理解为一种地址与地址对应账户的状态的映射的集合。 任何一次世界状态的改变都代表这个集合中某些账户的状态值发生了改变。

../_images/Picture4.png

世界状态是每个用户账户状态的总集合

我的以太币余额如何变化?

你的以太币余额因为交易而变化。

以太坊既可以看做看作静态的区块的串联, 也可以看做看作一个状态机, 随着用户不断地发起交易,促成这个状态机进行状态转移。

Note

促成 世界状态 (world state) 转移的手段过程是 交易

如下图所示:方框中弧线代表了交易过程, 每个交易由 \(T_{1}\), \(T_{2}\) , \(T_{3}\) 表示。而世界状态因为交易的发生,从 \(σ_{t}\) 状态 转移 到了 \(σ_{t+1}\) 。 每个用户的交易只要成功记录入区块链,都会引发世界状态的一小次局部变更。

如果这笔发起的交易牵涉到了你,你的账户余额就会变化。

../_images/Picture3.png

世界状态从 \(σ_{t}\) 状态 转移 到了 \(σ_{t+1}\)

什么是区块?

区块(block) 是多个合法签名的 交易的有序集合 。任何一个区块都包含几部分:其前一区块的哈希值、当前区块的哈希值、一个计算工作量的参数、一个时间戳以及该区块包含的交易列表的哈希值。在区块模型中,交易列表会用一棵树型结构来表示,并将该树的哈希值写入区块头进行防伪校验。哈希值的数据量较少,方便网络传输。以太坊的区块结构复杂,我们将单独在第4章来详细讲解。

Note

区块是 串联 成区块链的,一个区块包含了数笔交易。

区块和状态的关系

笔者在前文已经提到了世界状态的概念。以太坊不仅继承了比特币的交易区块链概念,而且创造出一个状态转移的链。 如下图所示,状态和交易链两者如同 “拉链的两面” 般密不可分 。 世界状态因为发生的交易而依序进行状态转移,而交易产生的前提是基于某一个时刻的世界状态。

../_images/Picture5.png

以太坊是区块的链与状态转换的合体

“巨大的账本”

前文提到,区块是“多个合法签名交易的有序集合”。这就好比是账本中的一页记录。

创世区块是账本的第一页。

随着时间的推移,区块链不断记账,经过共识算法挑选的合法区块 逐一 堆叠而成的区块链是一个巨大的交易账本, 而最早的创世区块交易记录被压在 最下方 。 如下图所示,从这个观点来看,区块所组成的链,就是一个 账本的堆栈 。 每一页都记载着数条交易记录。最古老的记录处在账本的最下方, 若想推翻压在下方的某一区块记录,就得重新计算该区块之后的所有区块。 这么大的计算量对攻击者而言,是不经济的。

../_images/Picture6.png

竖着看,区块链是账本的堆栈

我如何参与以太坊?

你可以通过一台计算机来联网参与以太坊网络。也可以下载手机钱包 App,参与以太坊网络。

../_images/Picture7.png

区块链网络由计算机节点组成

在以太坊网络中,没有中央服务器提供集中化的服务, 而是由全世界的计算机组成网络并协同运行对外提供服务。 在网络中的每个计算机节点都处于平等地位。

在早期,也就是只有爱好者们的 家庭计算机 参与组成网络时, 每个计算机都运行着同样一份开源软件的拷贝,矿工节点与普通验证节点的身份区别不是很明显。

但随着时间的推移,网络中节点的类型发生了分化。

有些节点例如 手机钱包,它并不保留完整区块链数据,仅做交易发送与校验;

有些节点运行在 服务器上 ,常年在线,参与日常区块的同步与校验工作;

有些节点运行高性能 专用硬件 进行挖矿(出块记账),我们称其为矿工节点。

虽然这些节点的侧重点不同,但在共识算法和通讯协议层面上统统遵循统一的标准,可以视为网络中逻辑上平等的计算机节点。

我如何与其他人同步账本?

以太坊节点之间的消息传递是将大块数据分割成小块后,用 点对点(P2P) 的技术传送、扩散的。

没有一个中央服务器负责数据校准或者消息扩散引导,这与分布式下载工具 比特彗星(BitComet) 有相似之处。 网络交易的发送、智能合约的调用、被挖掘出的新区块的播报,都是通过点对点网络进行广播的。 当发送交易时,用户将交易通过节点广播出去,在矿工成功打包出块后将区块广播到网络里。

所以你的本地账本是通过 P2P 网络分块下载的。就和BT下载差不多。

你发出的交易也是通过同一个 P2P 网络扩散出去的。

你的交易被打包后,最后也是通过P2P网络传消息回来,告诉你的。

在整个自治网络中,没有中央服务器,节点可以 随时* 选择自愿加入或者离开节点网络。