第1章 一台全球计算机
以太坊 历史 以太坊 发展阶段 以太坊 特色第2章 账户是什么
以太坊 基础知识 Keystore 与私钥保存 以太坊 常用钱包 以太坊 EIP-55 账户地址第3章 交易是驱动力
以太坊 交易是驱动力 以太坊 交易发送 以太坊 交易方法 以太坊 交易生命周期 共识与工作量证明 矿工与挖矿奖励第4章 数据结构
以太坊 数据结构 以太坊 Radix树 以太坊 Merkle树 Merkle Patricia树 以太坊 RLP编码 以太坊 状态树 以太坊 交易树 以太坊 收据树 以太坊 区块第5章 构建私链
以太坊 安装geth 以太坊 启动私链 以太坊 接收挖矿奖励 以太坊 转账与收款第6章 部署智能合约
以太坊 部署智能合约 以太坊 什么是智能合约 以太坊 安装编译器 Solc 编译智能合约 智能合约发布准备 部署智能合约 调用智能合约第7章 以太坊虚拟机
以太坊虚拟机 虚拟机的执行结果 虚拟机的执行资源 合约调用合约 虚拟机的输入输出 Gas 花费与退回 虚拟机指令集第8章 Solidity 语法
Solidity 语法练习 Solidity 基础语法 Solidity 语法进阶 Solidity 高级语法 Solidity 安全第9章 Truffle 开发
Truffle 合约开发 编译、测试工具安装 Truffle 启动样例 Truffle ERC20合约 Truffle ERC20合约测试Truffle 冷知识
Truffle 冷知识 短地址攻击 比特币的区块 以太坊与比特币账户的区别 “不可能的三角”问题 ETHASH 挖矿算法第1章 一台全球计算机
以太坊 历史 以太坊 发展阶段 以太坊 特色第2章 账户是什么
以太坊 基础知识 Keystore 与私钥保存 以太坊 常用钱包 以太坊 EIP-55 账户地址第3章 交易是驱动力
以太坊 交易是驱动力 以太坊 交易发送 以太坊 交易方法 以太坊 交易生命周期 共识与工作量证明 矿工与挖矿奖励第4章 数据结构
以太坊 数据结构 以太坊 Radix树 以太坊 Merkle树 Merkle Patricia树 以太坊 RLP编码 以太坊 状态树 以太坊 交易树 以太坊 收据树 以太坊 区块第5章 构建私链
以太坊 安装geth 以太坊 启动私链 以太坊 接收挖矿奖励 以太坊 转账与收款第6章 部署智能合约
以太坊 部署智能合约 以太坊 什么是智能合约 以太坊 安装编译器 Solc 编译智能合约 智能合约发布准备 部署智能合约 调用智能合约第7章 以太坊虚拟机
以太坊虚拟机 虚拟机的执行结果 虚拟机的执行资源 合约调用合约 虚拟机的输入输出 Gas 花费与退回 虚拟机指令集第8章 Solidity 语法
Solidity 语法练习 Solidity 基础语法 Solidity 语法进阶 Solidity 高级语法 Solidity 安全第9章 Truffle 开发
Truffle 合约开发 编译、测试工具安装 Truffle 启动样例 Truffle ERC20合约 Truffle ERC20合约测试Truffle 冷知识
Truffle 冷知识 短地址攻击 比特币的区块 以太坊与比特币账户的区别 “不可能的三角”问题 ETHASH 挖矿算法以太坊 交易方法
我们用 web3.js 代发的交易都是很简单的结构,寥寥数个字段。
{
nonce: web3.toHex(10),
GasPrice: web3.toHex(100000000000),
Gas: web3.toHex(140000),
from: '0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b',
to: '0xD1E1cdbCE15f1009B5A7874053E09C728Df91d47',
value: web3.toHex(0),
data: '0xcc9ab24952616d6100000000000000000000000000000000000000000000000000000000'
}
每个字段解释如下:
nonce 该账户已发送交易数量,一个正整数。
每次每当用户发出一笔交易后,这个字段需要自增 +1。例如我曾发送过 5 个交易,下次发送交易时变为 6。 一般使用者可以由客户端软件代为跟踪、指定该值,无须需自己手动填写。
GasPrice 和 Gas 与现实生活中的汽油费类似,用以支付交易费。
交易费 = Gas x GasPrice
汽油数量Gas由用户指定,汽油单价GasPrice由市场价格决定。运行交易后多余的Gas会退还给用户(惩罚性虚拟机指令assert例外,会扣除所有的剩余未花费的 Gas) 。Gas的数值人工预测并不准确,可以让客户端软件在签发交易时代为预测,无需无须自己手动填写。
一般智能合约部署是开销最大的交易,因为需要声明存储空间并执行初始化操作;而交易转账则花费较少;
From 该笔交易的发送方。
To 该笔交易的接收方。
若该交易为普通以太币转账交易,则接收方为受益人账户地址;若该交易为调用智能合约的交易,则接收方为智能合约的地址;若该交易为创建智能合约,则接收方地址可空缺。
value 具体转移多少以太币到接收方。
该数值以 wei 为单位(以太坊规定的数字运算最小不可分割单位),换算的公式为
\(1 {Ether}=1 x 10^{18} wei\)
因为以太坊虚拟机没有浮点数运算,所以一律转为 wei 进行大数字运算。一般转账时让客户端软件进行换算即可。
data 数据字段。
当若进行以太币纯转账交易时,该字段可空缺;若进行为智能合约调用,则该值包含编码后的函数名和参数的字节码;若为进行合约创建,则该值包含初始化合约的字节码。
下一章:以太坊 交易的生命周期
那么,交易发出去以后会经历什么呢?交易的生命周期从用户通过某节点/软件广播该交易为起点,经过网络扩散、矿工挖矿记账、被共识算法选入最终区块链条,到达终点。一笔交易的流转过程从最源头开始,一笔交易的流转过程如下所示。客 ...
AI 中文社