交易的样子

我们用 web3.js 代发的交易都是很简单的结构,寥寥数个字段。

代码清单3-1
{
  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。 一般使用者可以由客户端软件代为跟踪、指定该值,无须需自己手动填写。

GasPriceGas 与现实生活中的汽油费类似,用以支付交易费。

交易费 = Gas x GasPrice

汽油数量Gas由用户指定,汽油单价GasPrice由市场价格决定。运行交易后多余的Gas会退还给用户(惩罚性虚拟机指令assert例外,会扣除所有的剩余未花费的 Gas) 。Gas的数值人工预测并不准确,可以让客户端软件在签发交易时代为预测,无需无须自己手动填写。

Note

一般智能合约部署是开销最大的交易,因为需要声明存储空间并执行初始化操作;而交易转账则花费较少;

From 该笔交易的发送方。

To 该笔交易的接收方。

若该交易为普通以太币转账交易,则接收方为受益人账户地址;若该交易为调用智能合约的交易,则接收方为智能合约的地址;若该交易为创建智能合约,则接收方地址可空缺。

value 具体转移多少以太币到接收方。

该数值以 wei 为单位(以太坊规定的数字运算最小不可分割单位),换算的公式为

\(1 {Ether}=1 x 10^{18} wei\)

因为以太坊虚拟机没有浮点数运算,所以一律转为 wei 进行大数字运算。一般转账时让客户端软件进行换算即可。

data 数据字段。

当若进行以太币纯转账交易时,该字段可空缺;若进行为智能合约调用,则该值包含编码后的函数名和参数的字节码;若为进行合约创建,则该值包含初始化合约的字节码。