交易的样子¶
我们用 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的数值人工预测并不准确,可以让客户端软件在签发交易时代为预测,无需无须自己手动填写。
Note
一般智能合约部署是开销最大的交易,因为需要声明存储空间并执行初始化操作;而交易转账则花费较少;
From 该笔交易的发送方。
To 该笔交易的接收方。
若该交易为普通以太币转账交易,则接收方为受益人账户地址;若该交易为调用智能合约的交易,则接收方为智能合约的地址;若该交易为创建智能合约,则接收方地址可空缺。
value 具体转移多少以太币到接收方。
该数值以 wei
为单位(以太坊规定的数字运算最小不可分割单位),换算的公式为
\(1 {Ether}=1 x 10^{18} wei\)
因为以太坊虚拟机没有浮点数运算,所以一律转为 wei
进行大数字运算。一般转账时让客户端软件进行换算即可。
data 数据字段。
当若进行以太币纯转账交易时,该字段可空缺;若进行为智能合约调用,则该值包含编码后的函数名和参数的字节码;若为进行合约创建,则该值包含初始化合约的字节码。