跳转至

创建交易

原文:https://docs.elrond.com/integrators/creating-transactions

## 交易结构

如第节签名交易所述,准备广播交易的结构如下:

{
    "nonce": 42,
    "value": "100000000000000000",
    "receiver": "erd1cux02zersde0l7hhklzhywcxk4u9n4py5tdxyx7vrvhnza2r4gmq4vw35r",
    "sender": "erd1ylzm22ngxl2tspgvwm0yth2myr6dx9avtx83zpxpu7rhxw4qltzs9tmjm9",
    "gasPrice": 1000000000,
    "gasLimit": 70000,
    "data": "Zm9vZCBmb3IgY2F0cw==",
    "chainID": "1",
    "version": 1,
    "signature": "5845301de8ca3a8576166fb3b7dd25124868ce54b07eec7022ae3ffd8d4629540dbb7d0ceed9455a259695e2665db614828728d0f9b0fb1cc46c07dd669d2f0e"
} 

支持创建和签署交易的 SDK 和工具

有支持与Elrond区块链交互的 SDK 或工具,因此可以使用以下 SDK 之一来执行交易创建和签名:

通用网络参数

通用网络参数,如链 ID最低气价最低气限最早可接受交易版本可在 API 端点获取网络配置获得。

{
    "config": {
        "erd_chain_id": "1",
        "erd_gas_per_data_byte": 1500,
        "erd_min_gas_limit": 50000,
        "erd_min_gas_price": 1000000000,
        "erd_min_transaction_version": 1,
        ...
    }
} 

随机数管理

广播到网络的每个交易必须具有与账户随机数一致的随机数字段。在网络中,给定发送者地址的交易根据交易现时按顺序处理。

账户随机数可以从 API 中获取:获取地址随机数

nonce 必须是一个严格递增的数字,范围是给定的发送者。以下部分描述了管理交易构造的随机数时的常见问题和可能的解决方案。

发布:竞争交易

到达具有相同发送者地址和相同随机数的内存池的广播交易是竞争交易,并且它们中只有一个将被处理(提供更高天然气价格的交易,或者,如果它们具有相同的天然气价格,则是第二个到达的交易——但是记住到达时间更难管理)。

提示

当广播相同发送者地址的交易时,通过保持严格递增的随机数序列来避免竞争交易。

尽管在网络中还没有明确的交易取消触发,但是如果在广播 T1 之后立即(例如 1 秒)广播具有相同现时 42 的第二交易 T2,其具有更高的燃气价格(并且没有要转移的价值),则具有现时 42 的交易 T1 的取消是可能的

问题:随机数缺口

如果广播的交易的随机数高于发送方的当前账户随机数,这被认为是一个随机数缺口,交易将保留在内存池中未被处理,直到来自同一发送方的新交易到达以解决随机数缺口- ,或者直到交易从内存池中被清除(清除定期发生)。

提示

通过定期获取当前帐户随机数来避免随机数间隙,以便在广播交易之前正确填充随机数字段。这种技术也被称为周期性地回忆随机数

发布:获取过期账户随机数

在广播交易后立即从 API 获取当前帐户 nonce 时,您应该小心。

示例:

  1. 时间 12:00:01 -发送者的 nonce 被调用,它的值是 42
  2. 时间 12:00:02 -发送方广播 nonce 为 42 的交易 T1
  3. 时间 12:00:03 -再次调用发送者的 nonce,以便广播新的交易。随机数仍然是 42。它是陈旧的,尚未在网络上递增(因为 T1 此时仍处于挂起或正在处理中)。
  4. 时间 12:00:04 -发送方使用随机数 42 广播 T2,这将与 T1 竞争,因为它们具有相同的随机数。
提示

通过定期调用随机数来避免获取过时的帐户随机数。

避免召回来自同一发送方的快速排序交易之间的随机数。对于快速排序的交易,您必须以编程方式管理,使用账户随机数本地镜像(副本)跟踪账户随机数,并适当地递增它。

气体极限计算

请关注燃气和费用

签约交易

请遵循签约交易

模拟交易执行

重要

关于交易模拟的文档是初步的,可能会有变化。



回到顶部