交易字段
在编码 Conflux Core Space 交易时,以下字段是必需的:
from
- 发送方地址,将对交易进行签名。 这将是一个外部拥有账户(EOA),因为合约账户不能发送交易。to
- 接收地址(如果是外部拥有账户,则交易将转移价值。 如果是合约账户,则交易将执行合 约代码)。value
- 从发送方转移到接收方的CFX数量 (以Drip为单位,其中1CFX等于1e+18Drip)。nonce
- 一个有序递增的计数器,表示账户的交易编号。data
(可选):包含任意数据的字段gas
- 交易可以消耗的最大 gas 单位量。 EVM 指定了每个计算步骤所需的gas单位量。gasPrice
- 消耗Gas的价格,作为小费包含在交易中来奖励执行该交易的验证者。storageLimit
- 该交易可消耗的最大存储空间。chainId
- 区块链的ID,用于防止重放攻击。epochHeight
- 区块链的纪元(epoch)编号,用于设置交易的过期时间。signature
(r,s,v) – 发送者的签名。 这是在发送者的私钥签署交易并确认发送者已经授权该交易时生成的。
基本字段
from
、to
和 value
是交易的基本字段。 这些字段分别对应于发送方账户的地址、接收方账户的地址和要转移的金额。
from
from
字段标识交易的发送者。 本质上,from
字段告诉您谁在发起交易以及谁在支付交易费用。 并且在签名阶段,交易将用 from
账户的私钥进行签名,所以你不能指定任何地址作为发送者。
还要记住,账户必须有足够的余额来 支付转账金额(value
字段)和交易费用,否则 RPC 将拒绝交易,交易将不会被发送。
值得一提的是,在一些特定的情况下,Conflux Core Space 的赞助机制可以允许其他账户支付交易费用,从而让余额为 0 的账户也能发送交易。
事实上,
from
字段并没有直接包含在编码后的交易中。 一般来说,SDK 等工具会在编码前从交易中移除from
字段,并用相应的私钥对交易进行签名。 其他人可以从交易的签名中恢复出发送者。
to
to
字段表示交易的接收者账户。
- 如果你是进行简单的 CFX 转账,这个字段应该设置为 CFX 接收者的账户。
- 如果你是修改合约状态,to 字段应该设置为合约的地址。
- 如果你是部署一个新的合约,
to
字段留空。
value
value
字段表示要转移的 CFX 数量,必须以 Drip(10e-18 CFX)为单位设置为整数。
nonce
nonce
是一个账户发送的交易的执行序号。 通常,你可以通过调用cfx_getNextNonce
RPC方法来获取它。
如果你想加快交易处理速度,你可能想进一步探索nonce管理机制。
data
交易的 data 字段可以留空或设置为十六进制编码的字节。 这大致可以分为三种情况:
- 普通的 CFX 转账交易:
data
字段通常为空,但也可以设置为十六进制编码的数据作为交易的备注或附言。 - 合约部署交易:
data
需要设置为合约的字节码和构造函数的参数(如果有的话) - 合约调用交易:
data
字段用于存储合约调用的输入数据。 数据通常是合约方法和参数 abi 编码后的结果。
智能合约通常用高级合约开发语言(Solidity,vyper)编写。 你可以用编译器获得字节码和 abi。 SDK 会提供 abi 编码方法,用于合约方法调用的编码(编码方法名和参数)。
费用相关字段
交易信息中有几个与费用相关的字段,每个字段都服务于不同的目的。
gas
在EVM中执行交易时,每个操作消耗一定量的gas。 为了防止过度消耗网络计算资源或被过度收费,有必要限制交易执行期间的gas消耗。 交易信息中的gas字段用于指定交易执行的gas消耗上限。 如果交易执行期间实际总共消耗的gas超过此限制,交易将失败。
交易执行期间实际消耗的gas量与交易的复杂性有关。 标准的CFX转账交易(无数据)通常消耗21,000 gas,而合约部署或交互可能消耗更多。
可以使用 cfx_estimateGasAndCollateral
方法估计执行交易所需的gas量,该方法返回gasUsed
、gasLimit
和storageCollaterized
字段。 建议使用gasLimit作为gas
字段。
调用 cfx_estimateGasAndCollateral
方法估计的gas可能不总是准确的,并且可能是更为保守的。 因此,在设置交易gas时,通常会将此方法返回的值乘以一个因子(例如1.3)以增加安全性。
有关 gas 的使用、估算和收费的更多信息,请参考 Gas 简介。
gasPrice
gasPrice 用于设置发送方愿意为每单位gas支付的CFX金额(以Drip为单位)。 交易的总gas费用为gasCharged * gasPrice。 矿工使用gasPrice来确定交易在块中的包含顺序。 通常来说,使用更高的gasPrice可以被更快得使得交易被打包。
可以使用 cfx_gasPrice
方法获得合适的gas价格。 在网络拥堵期间,可能需要手动设置更高的价格;详情请参考如何设置价格。