@across-protocol/sdk 4.4.17 → 4.4.19-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,11 +31,14 @@ async function averageBlockTime(provider, { highBlock, highBlockOffset, blockRan
31
31
  return { average: cache.average, blockRange: cache.blockRange };
32
32
  }
33
33
  if (!(0, TypeGuards_1.isDefined)(highBlock)) {
34
- highBlock = await provider.getBlockNumber();
35
- highBlock -= highBlockOffset ?? defaultHighBlockOffset;
34
+ const latestBlock = await provider.getBlockNumber();
35
+ highBlock = latestBlock - (highBlockOffset ?? defaultHighBlockOffset);
36
+ if (highBlock <= 0) {
37
+ highBlock = latestBlock;
38
+ }
36
39
  }
37
40
  blockRange ??= defaultBlockRange;
38
- const earliestBlockNumber = highBlock - blockRange;
41
+ const earliestBlockNumber = Math.max(highBlock - blockRange, 0);
39
42
  const [firstBlock, lastBlock] = await Promise.all([
40
43
  provider.getBlock(earliestBlockNumber),
41
44
  provider.getBlock(highBlock),
@@ -47,9 +50,11 @@ async function averageBlockTime(provider, { highBlock, highBlockOffset, blockRan
47
50
  throw new Error(`BlockFinder: Failed to fetch block ${blockNumber} on ${network}`);
48
51
  }
49
52
  });
50
- const average = (lastBlock.timestamp - firstBlock.timestamp) / blockRange;
51
- blockTimes[chainId] = { timestamp: now, average, blockRange };
52
- return { average, blockRange };
53
+ const sampledRange = lastBlock.number - firstBlock.number;
54
+ (0, assert_1.default)(sampledRange > 0, `averageBlockTime: no block range to sample on ${(0, NetworkUtils_1.getNetworkName)(chainId)}`);
55
+ const average = (lastBlock.timestamp - firstBlock.timestamp) / sampledRange;
56
+ blockTimes[chainId] = { timestamp: now, average, blockRange: sampledRange };
57
+ return { average, blockRange: sampledRange };
53
58
  }
54
59
  async function estimateBlocksElapsed(seconds, cushionPercentage = 0.0, provider) {
55
60
  const cushionMultiplier = cushionPercentage + 1.0;
@@ -1 +1 @@
1
- {"version":3,"file":"BlockUtils.js","sourceRoot":"","sources":["../../../../../src/arch/evm/BlockUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlockUtils.js","sourceRoot":"","sources":["../../../../../src/arch/evm/BlockUtils.ts"],"names":[],"mappings":"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"}
@@ -5,14 +5,17 @@ exports.simulateTransaction = simulateTransaction;
5
5
  const utils_1 = require("../../utils");
6
6
  async function submitTransaction(tronWeb, populatedTx, feeLimit, callValue = 0) {
7
7
  const { to, data } = populatedTx;
8
- if (!to || !data) {
9
- throw new Error("submitTransaction: populatedTx must have both 'to' and 'data' fields");
8
+ if (!to) {
9
+ throw new Error("submitTransaction: populatedTx must have a 'to' field");
10
10
  }
11
11
  const tronAddress = utils_1.TvmAddress.from(to).toNative();
12
12
  const ownerAddress = tronWeb.defaultAddress?.base58;
13
13
  if (!ownerAddress) {
14
14
  throw new Error("submitTransaction: TronWeb instance must have a default address configured");
15
15
  }
16
+ if (!(0, utils_1.isDefined)(data) || data === "0x") {
17
+ return transferNative(tronWeb, tronAddress, callValue);
18
+ }
16
19
  const input = data.startsWith("0x") ? data.slice(2) : data;
17
20
  const txWrapper = await tronWeb.transactionBuilder.triggerSmartContract(tronAddress, "", { feeLimit, input, callValue }, [], ownerAddress);
18
21
  if (!txWrapper?.result?.result) {
@@ -26,6 +29,16 @@ async function submitTransaction(tronWeb, populatedTx, feeLimit, callValue = 0)
26
29
  result: broadcast.result ?? false,
27
30
  };
28
31
  }
32
+ async function transferNative(tronWeb, recipient, amount) {
33
+ if (amount <= 0) {
34
+ throw new Error("submitTransaction: a transaction with no calldata must transfer a non-zero value");
35
+ }
36
+ const broadcast = await tronWeb.trx.sendTransaction(recipient, amount);
37
+ return {
38
+ txid: broadcast.txid ?? broadcast.transaction.txID,
39
+ result: broadcast.result ?? false,
40
+ };
41
+ }
29
42
  async function simulateTransaction(tronWeb, populatedTx, feeLimit, callValue = 0) {
30
43
  const { to, data } = populatedTx;
31
44
  if (!to || !data) {
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"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"}
@@ -41,11 +41,18 @@ export async function averageBlockTime(provider, { highBlock, highBlockOffset, b
41
41
  // If the caller was not specific about highBlock, resolve it via the RPC provider. Subtract an offset
42
42
  // to account for various RPC provider sync issues that might occur when querting the latest block.
43
43
  if (!isDefined(highBlock)) {
44
- highBlock = await provider.getBlockNumber();
45
- highBlock -= highBlockOffset ?? defaultHighBlockOffset;
44
+ const latestBlock = await provider.getBlockNumber();
45
+ highBlock = latestBlock - (highBlockOffset ?? defaultHighBlockOffset);
46
+ // The offset presumes a chain with more blocks than the offset itself. Below that it puts the entire
47
+ // sample window at or before genesis, leaving nothing to measure, so fall back to the head.
48
+ if (highBlock <= 0) {
49
+ highBlock = latestBlock;
50
+ }
46
51
  }
47
52
  blockRange ??= defaultBlockRange;
48
- const earliestBlockNumber = highBlock - blockRange;
53
+ // Clamp the window to blocks that exist. A negative block number is not an error to ethers: it resolves
54
+ // relative to the head, which slides the window instead of starting it at genesis.
55
+ const earliestBlockNumber = Math.max(highBlock - blockRange, 0);
49
56
  const [firstBlock, lastBlock] = await Promise.all([
50
57
  provider.getBlock(earliestBlockNumber),
51
58
  provider.getBlock(highBlock),
@@ -57,9 +64,14 @@ export async function averageBlockTime(provider, { highBlock, highBlockOffset, b
57
64
  throw new Error(`BlockFinder: Failed to fetch block ${blockNumber} on ${network}`);
58
65
  }
59
66
  });
60
- const average = (lastBlock.timestamp - firstBlock.timestamp) / blockRange;
61
- blockTimes[chainId] = { timestamp: now, average, blockRange };
62
- return { average, blockRange };
67
+ // Divide by the range actually sampled, which is narrower than blockRange on a chain holding less
68
+ // history than that. Dividing by the requested range instead under-reports the block time in proportion
69
+ // to how much of the window does not exist, and reports 0 when none of it does.
70
+ const sampledRange = lastBlock.number - firstBlock.number;
71
+ assert(sampledRange > 0, `averageBlockTime: no block range to sample on ${getNetworkName(chainId)}`);
72
+ const average = (lastBlock.timestamp - firstBlock.timestamp) / sampledRange;
73
+ blockTimes[chainId] = { timestamp: now, average, blockRange: sampledRange };
74
+ return { average, blockRange: sampledRange };
63
75
  }
64
76
  async function estimateBlocksElapsed(seconds, cushionPercentage = 0.0, provider) {
65
77
  const cushionMultiplier = cushionPercentage + 1.0;
@@ -1 +1 @@
1
- {"version":3,"file":"BlockUtils.js","sourceRoot":"","sources":["../../../../../src/arch/evm/BlockUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlockUtils.js","sourceRoot":"","sources":["../../../../../src/arch/evm/BlockUtils.ts"],"names":[],"mappings":"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"}
@@ -21,8 +21,12 @@ export interface TronSimulationResult {
21
21
  * converts the target address to TRON Base58 format, and uses TronWeb's
22
22
  * `triggerSmartContract` → `sign` → `sendRawTransaction` pipeline.
23
23
  *
24
+ * TRON models a native TRX transfer as its own transaction type (`TransferContract`), distinct from
25
+ * the `TriggerSmartContract` used for calls. A populated transaction carrying no calldata is
26
+ * therefore dispatched to TronWeb's `sendTransaction` instead; see {@link transferNative}.
27
+ *
24
28
  * @param tronWeb An authenticated TronWeb instance (with private key set).
25
- * @param populatedTx The populated transaction containing `to` and `data`.
29
+ * @param populatedTx The populated transaction containing `to`, and `data` for a contract call.
26
30
  * @param feeLimit The maximum TRX to burn for energy consumption, in SUN (1 TRX = 1,000,000 SUN).
27
31
  * @returns The transaction ID and result status.
28
32
  */
@@ -1,4 +1,4 @@
1
- import { TvmAddress } from "../../utils";
1
+ import { isDefined, TvmAddress } from "../../utils";
2
2
  /**
3
3
  * Submit a populated EVM transaction to TRON via TronWeb.
4
4
  *
@@ -7,21 +7,30 @@ import { TvmAddress } from "../../utils";
7
7
  * converts the target address to TRON Base58 format, and uses TronWeb's
8
8
  * `triggerSmartContract` → `sign` → `sendRawTransaction` pipeline.
9
9
  *
10
+ * TRON models a native TRX transfer as its own transaction type (`TransferContract`), distinct from
11
+ * the `TriggerSmartContract` used for calls. A populated transaction carrying no calldata is
12
+ * therefore dispatched to TronWeb's `sendTransaction` instead; see {@link transferNative}.
13
+ *
10
14
  * @param tronWeb An authenticated TronWeb instance (with private key set).
11
- * @param populatedTx The populated transaction containing `to` and `data`.
15
+ * @param populatedTx The populated transaction containing `to`, and `data` for a contract call.
12
16
  * @param feeLimit The maximum TRX to burn for energy consumption, in SUN (1 TRX = 1,000,000 SUN).
13
17
  * @returns The transaction ID and result status.
14
18
  */
15
19
  export async function submitTransaction(tronWeb, populatedTx, feeLimit, callValue = 0) {
16
20
  const { to, data } = populatedTx;
17
- if (!to || !data) {
18
- throw new Error("submitTransaction: populatedTx must have both 'to' and 'data' fields");
21
+ if (!to) {
22
+ throw new Error("submitTransaction: populatedTx must have a 'to' field");
19
23
  }
20
24
  const tronAddress = TvmAddress.from(to).toNative();
21
25
  const ownerAddress = tronWeb.defaultAddress?.base58;
22
26
  if (!ownerAddress) {
23
27
  throw new Error("submitTransaction: TronWeb instance must have a default address configured");
24
28
  }
29
+ // No calldata means this is a value transfer, which triggerSmartContract cannot express: it
30
+ // requires a deployed contract at the target address, so it can never fund an EOA.
31
+ if (!isDefined(data) || data === "0x") {
32
+ return transferNative(tronWeb, tronAddress, callValue);
33
+ }
25
34
  // Use triggerSmartContract with the `input` option to pass pre-encoded calldata.
26
35
  // The function selector is empty — the full calldata (selector + params) is in `input`.
27
36
  const input = data.startsWith("0x") ? data.slice(2) : data;
@@ -39,6 +48,27 @@ export async function submitTransaction(tronWeb, populatedTx, feeLimit, callValu
39
48
  result: broadcast.result ?? false,
40
49
  };
41
50
  }
51
+ /**
52
+ * Transfer native TRX to an account via a `TransferContract` transaction.
53
+ *
54
+ * TronWeb's `sendTransaction` builds, signs and broadcasts in one call, using the instance's default
55
+ * private key. No fee limit applies, since transfers consume bandwidth rather than energy.
56
+ *
57
+ * @param tronWeb An authenticated TronWeb instance (with private key set).
58
+ * @param recipient Base58 recipient address.
59
+ * @param amount Transfer amount in SUN (1 TRX = 1,000,000 SUN).
60
+ * @returns The transaction ID and result status.
61
+ */
62
+ async function transferNative(tronWeb, recipient, amount) {
63
+ if (amount <= 0) {
64
+ throw new Error("submitTransaction: a transaction with no calldata must transfer a non-zero value");
65
+ }
66
+ const broadcast = await tronWeb.trx.sendTransaction(recipient, amount);
67
+ return {
68
+ txid: broadcast.txid ?? broadcast.transaction.txID,
69
+ result: broadcast.result ?? false,
70
+ };
71
+ }
42
72
  /**
43
73
  * Simulate a populated EVM transaction against TRON via TronWeb (constant call / `eth_call`-style).
44
74
  *
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BlockUtils.d.ts","sourceRoot":"","sources":["../../../../../src/arch/evm/BlockUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAIlF,OAAO,EACL,WAAW,EACX,KAAK,KAAK,EACV,KAAK,eAAe,IAAI,IAAI,EAC5B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAKjC,UAAU,QAAS,SAAQ,KAAK,EAAE,WAAW;CAAG;AAyBhD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,GAAE,IAAS,GACpD,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC,CAqC3D;AAQD,qBAAa,cAAe,SAAQ,WAAW,CAAC,QAAQ,CAAC;IAErD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,QAAQ,EAClB,MAAM,GAAE,QAAQ,EAAO;IAK1C;;;;OAIG;IACU,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,GAAE,gBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;YA+ChG,cAAc;YAQd,QAAQ;YAiBR,SAAS;CAgCxB"}
1
+ {"version":3,"file":"BlockUtils.d.ts","sourceRoot":"","sources":["../../../../../src/arch/evm/BlockUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAIlF,OAAO,EACL,WAAW,EACX,KAAK,KAAK,EACV,KAAK,eAAe,IAAI,IAAI,EAC5B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAKjC,UAAU,QAAS,SAAQ,KAAK,EAAE,WAAW;CAAG;AAyBhD;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,GAAE,IAAS,GACpD,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC,CAmD3D;AAQD,qBAAa,cAAe,SAAQ,WAAW,CAAC,QAAQ,CAAC;IAErD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,QAAQ,EAClB,MAAM,GAAE,QAAQ,EAAO;IAK1C;;;;OAIG;IACU,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,GAAE,gBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;YA+ChG,cAAc;YAQd,QAAQ;YAiBR,SAAS;CAgCxB"}
@@ -21,8 +21,12 @@ export interface TronSimulationResult {
21
21
  * converts the target address to TRON Base58 format, and uses TronWeb's
22
22
  * `triggerSmartContract` → `sign` → `sendRawTransaction` pipeline.
23
23
  *
24
+ * TRON models a native TRX transfer as its own transaction type (`TransferContract`), distinct from
25
+ * the `TriggerSmartContract` used for calls. A populated transaction carrying no calldata is
26
+ * therefore dispatched to TronWeb's `sendTransaction` instead; see {@link transferNative}.
27
+ *
24
28
  * @param tronWeb An authenticated TronWeb instance (with private key set).
25
- * @param populatedTx The populated transaction containing `to` and `data`.
29
+ * @param populatedTx The populated transaction containing `to`, and `data` for a contract call.
26
30
  * @param feeLimit The maximum TRX to burn for energy consumption, in SUN (1 TRX = 1,000,000 SUN).
27
31
  * @returns The transaction ID and result status.
28
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionUtils.d.ts","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAG9C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,yFAAyF;AACzF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,oBAAoB,EACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAU,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAoChC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,oBAAoB,EACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAU,GACpB,OAAO,CAAC,oBAAoB,CAAC,CAkC/B"}
1
+ {"version":3,"file":"TransactionUtils.d.ts","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAG9C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,yFAAyF;AACzF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,oBAAoB,EACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAU,GACpB,OAAO,CAAC,qBAAqB,CAAC,CA0ChC;AA0BD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,oBAAoB,EACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAAU,GACpB,OAAO,CAAC,oBAAoB,CAAC,CAkC/B"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@across-protocol/sdk",
3
3
  "author": "UMA Team",
4
- "version": "4.4.17",
4
+ "version": "4.4.19-alpha.0",
5
5
  "license": "AGPL-3.0",
6
6
  "homepage": "https://docs.across.to/reference/sdk",
7
7
  "repository": {
@@ -61,12 +61,20 @@ export async function averageBlockTime(
61
61
  // If the caller was not specific about highBlock, resolve it via the RPC provider. Subtract an offset
62
62
  // to account for various RPC provider sync issues that might occur when querting the latest block.
63
63
  if (!isDefined(highBlock)) {
64
- highBlock = await provider.getBlockNumber();
65
- highBlock -= highBlockOffset ?? defaultHighBlockOffset;
64
+ const latestBlock = await provider.getBlockNumber();
65
+ highBlock = latestBlock - (highBlockOffset ?? defaultHighBlockOffset);
66
+
67
+ // The offset presumes a chain with more blocks than the offset itself. Below that it puts the entire
68
+ // sample window at or before genesis, leaving nothing to measure, so fall back to the head.
69
+ if (highBlock <= 0) {
70
+ highBlock = latestBlock;
71
+ }
66
72
  }
67
73
  blockRange ??= defaultBlockRange;
68
74
 
69
- const earliestBlockNumber = highBlock - blockRange;
75
+ // Clamp the window to blocks that exist. A negative block number is not an error to ethers: it resolves
76
+ // relative to the head, which slides the window instead of starting it at genesis.
77
+ const earliestBlockNumber = Math.max(highBlock - blockRange, 0);
70
78
  const [firstBlock, lastBlock] = await Promise.all([
71
79
  provider.getBlock(earliestBlockNumber),
72
80
  provider.getBlock(highBlock),
@@ -79,10 +87,16 @@ export async function averageBlockTime(
79
87
  }
80
88
  });
81
89
 
82
- const average = (lastBlock.timestamp - firstBlock.timestamp) / blockRange;
83
- blockTimes[chainId] = { timestamp: now, average, blockRange };
90
+ // Divide by the range actually sampled, which is narrower than blockRange on a chain holding less
91
+ // history than that. Dividing by the requested range instead under-reports the block time in proportion
92
+ // to how much of the window does not exist, and reports 0 when none of it does.
93
+ const sampledRange = lastBlock.number - firstBlock.number;
94
+ assert(sampledRange > 0, `averageBlockTime: no block range to sample on ${getNetworkName(chainId)}`);
95
+
96
+ const average = (lastBlock.timestamp - firstBlock.timestamp) / sampledRange;
97
+ blockTimes[chainId] = { timestamp: now, average, blockRange: sampledRange };
84
98
 
85
- return { average, blockRange };
99
+ return { average, blockRange: sampledRange };
86
100
  }
87
101
 
88
102
  async function estimateBlocksElapsed(seconds: number, cushionPercentage = 0.0, provider: Provider): Promise<number> {
@@ -1,6 +1,6 @@
1
1
  import { TronWeb } from "tronweb";
2
2
  import { PopulatedTransaction } from "ethers";
3
- import { TvmAddress } from "../../utils";
3
+ import { isDefined, TvmAddress } from "../../utils";
4
4
 
5
5
  export interface TronTransactionResult {
6
6
  txid: string;
@@ -25,8 +25,12 @@ export interface TronSimulationResult {
25
25
  * converts the target address to TRON Base58 format, and uses TronWeb's
26
26
  * `triggerSmartContract` → `sign` → `sendRawTransaction` pipeline.
27
27
  *
28
+ * TRON models a native TRX transfer as its own transaction type (`TransferContract`), distinct from
29
+ * the `TriggerSmartContract` used for calls. A populated transaction carrying no calldata is
30
+ * therefore dispatched to TronWeb's `sendTransaction` instead; see {@link transferNative}.
31
+ *
28
32
  * @param tronWeb An authenticated TronWeb instance (with private key set).
29
- * @param populatedTx The populated transaction containing `to` and `data`.
33
+ * @param populatedTx The populated transaction containing `to`, and `data` for a contract call.
30
34
  * @param feeLimit The maximum TRX to burn for energy consumption, in SUN (1 TRX = 1,000,000 SUN).
31
35
  * @returns The transaction ID and result status.
32
36
  */
@@ -37,8 +41,8 @@ export async function submitTransaction(
37
41
  callValue: number = 0
38
42
  ): Promise<TronTransactionResult> {
39
43
  const { to, data } = populatedTx;
40
- if (!to || !data) {
41
- throw new Error("submitTransaction: populatedTx must have both 'to' and 'data' fields");
44
+ if (!to) {
45
+ throw new Error("submitTransaction: populatedTx must have a 'to' field");
42
46
  }
43
47
 
44
48
  const tronAddress = TvmAddress.from(to).toNative();
@@ -47,6 +51,12 @@ export async function submitTransaction(
47
51
  throw new Error("submitTransaction: TronWeb instance must have a default address configured");
48
52
  }
49
53
 
54
+ // No calldata means this is a value transfer, which triggerSmartContract cannot express: it
55
+ // requires a deployed contract at the target address, so it can never fund an EOA.
56
+ if (!isDefined(data) || data === "0x") {
57
+ return transferNative(tronWeb, tronAddress, callValue);
58
+ }
59
+
50
60
  // Use triggerSmartContract with the `input` option to pass pre-encoded calldata.
51
61
  // The function selector is empty — the full calldata (selector + params) is in `input`.
52
62
  const input = data.startsWith("0x") ? data.slice(2) : data;
@@ -73,6 +83,30 @@ export async function submitTransaction(
73
83
  };
74
84
  }
75
85
 
86
+ /**
87
+ * Transfer native TRX to an account via a `TransferContract` transaction.
88
+ *
89
+ * TronWeb's `sendTransaction` builds, signs and broadcasts in one call, using the instance's default
90
+ * private key. No fee limit applies, since transfers consume bandwidth rather than energy.
91
+ *
92
+ * @param tronWeb An authenticated TronWeb instance (with private key set).
93
+ * @param recipient Base58 recipient address.
94
+ * @param amount Transfer amount in SUN (1 TRX = 1,000,000 SUN).
95
+ * @returns The transaction ID and result status.
96
+ */
97
+ async function transferNative(tronWeb: TronWeb, recipient: string, amount: number): Promise<TronTransactionResult> {
98
+ if (amount <= 0) {
99
+ throw new Error("submitTransaction: a transaction with no calldata must transfer a non-zero value");
100
+ }
101
+
102
+ const broadcast = await tronWeb.trx.sendTransaction(recipient, amount);
103
+
104
+ return {
105
+ txid: broadcast.txid ?? broadcast.transaction.txID,
106
+ result: broadcast.result ?? false,
107
+ };
108
+ }
109
+
76
110
  /**
77
111
  * Simulate a populated EVM transaction against TRON via TronWeb (constant call / `eth_call`-style).
78
112
  *