交易的生命周期¶
那么,交易发出去以后会经历什么呢?
交易的生命周期从用户通过某节点/软件广播该交易为起点,经过网络扩散、矿工挖矿记账、被共识算法选入最终区块链条,到达终点。
从最源头开始,一笔交易的流转过程如下所示。
- 客户端软件在收集完交易信息,组织成相应的结构体,需要使用用户的私钥来签名该交易。
- 交易后编码为一个公开消息,通过节点网络发出并逐渐扩散到网络中各个节点。
- 挖矿节点和众多其他普通节点同时收到该消息,矿工将其暂时缓存起来。
- 若矿工决定将该交易打包入某区块,则执行该消息内容并获得执行结果。
- 矿工把打包好的区块(包含该交易)广播到网络中,参与共识算法挑选。
- 区块进入最终的区块链被永久保存。
Danger
若该笔交易费过低,则可能被调低优先级,在矿工的交易等待池(pending transaction pool)中等待较长的时间,或者在等待时,被其他高交易费的交易挤出等待池子。
若所调用的智能合约在执行时Gas花费过高,超过用户在交易中指定的的Gas上限,则会导致交易失败。
实际世界里,在以太坊网络的拓扑结构中,普通的节点运行着不同厂家出品的节点程序,比如 Geth、Parity 等。节点之间通过“广播”的形式互相传递信息,用户的交易请求,在初始阶段经由某一个联网节点传递入网络中,如图所示。
以太坊上最常见的交易是:
- 以太币转账
- 智能合约调用
- 智能合约创建
这三种交易在交易发送时经历的步骤是一模一样的,区别仅在于填写交易时选择传递数据 data 还是传递价值 value 。 传递数据的即为合约相关操作,传递价值即为转账操作。 我们将在 第 6 章 手把手教你部署智能合约 中用动手实践的方式为读者展示具体的操作方法。