@across-protocol/sdk 4.3.140-alpha.0 → 4.3.140-alpha.1

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.
@@ -4,4 +4,13 @@ export interface TronTransactionResult {
4
4
  txid: string;
5
5
  result: boolean;
6
6
  }
7
+ export interface TronSimulationResult {
8
+ success: boolean;
9
+ message?: string;
10
+ constantResult?: unknown;
11
+ energyUsed?: number;
12
+ energyRequired?: number;
13
+ energyPenalty?: number;
14
+ }
7
15
  export declare function submitTransaction(tronWeb: TronWeb, populatedTx: PopulatedTransaction, feeLimit: number, callValue?: number): Promise<TronTransactionResult>;
16
+ export declare function simulateTransaction(tronWeb: TronWeb, populatedTx: PopulatedTransaction, feeLimit: number, callValue?: number): Promise<TronSimulationResult>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.submitTransaction = submitTransaction;
4
+ exports.simulateTransaction = simulateTransaction;
4
5
  const utils_1 = require("../../utils");
5
6
  async function submitTransaction(tronWeb, populatedTx, feeLimit, callValue = 0) {
6
7
  const { to, data } = populatedTx;
@@ -25,4 +26,26 @@ async function submitTransaction(tronWeb, populatedTx, feeLimit, callValue = 0)
25
26
  result: broadcast.result ?? false,
26
27
  };
27
28
  }
29
+ async function simulateTransaction(tronWeb, populatedTx, feeLimit, callValue = 0) {
30
+ const { to, data } = populatedTx;
31
+ if (!to || !data) {
32
+ throw new Error("simulateTransaction: populatedTx must have both 'to' and 'data' fields");
33
+ }
34
+ const tronAddress = utils_1.TvmAddress.from(to).toNative();
35
+ const ownerAddress = tronWeb.defaultAddress?.base58;
36
+ if (!ownerAddress) {
37
+ throw new Error("simulateTransaction: TronWeb instance must have a default address configured");
38
+ }
39
+ const input = data.startsWith("0x") ? data.slice(2) : data;
40
+ const txWrapper = await tronWeb.transactionBuilder.triggerConstantContract(tronAddress, "", { feeLimit, input, callValue }, [], ownerAddress);
41
+ const success = txWrapper?.result?.result === true;
42
+ return {
43
+ success,
44
+ message: txWrapper?.result?.message,
45
+ constantResult: txWrapper?.constant_result,
46
+ energyUsed: txWrapper?.energy_used,
47
+ energyRequired: txWrapper?.energy_required,
48
+ energyPenalty: txWrapper?.energy_penalty,
49
+ };
50
+ }
28
51
  //# sourceMappingURL=TransactionUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":";;AAsBA,8CAyCC;AA7DD,uCAAyC;AAoBlC,KAAK,UAAU,iBAAiB,CACrC,OAAgB,EAChB,WAAiC,EACjC,QAAgB,EAChB,YAAoB,CAAC;IAErB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IACjC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,WAAW,GAAG,kBAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IAID,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CACrE,WAAW,EAEX,EAAE,EACF,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAC9B,EAAE,EACF,YAAY,CACb,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,IAAI,eAAe,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAEjE,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;QACrC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK;KAClC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"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"}
@@ -27,14 +27,25 @@ function _createBlockExplorerLinkMarkdown(addr, chainId = 1) {
27
27
  if (!(0, TypeGuards_1.isDefined)(explorerDomain)) {
28
28
  return `<unsupported chain/hash ${chainId}:${addr}>}`;
29
29
  }
30
- if (addr.substring(0, 2) !== "0x" && (0, NetworkUtils_1.chainIsEvm)(chainId)) {
30
+ if (addr.substring(0, 2) !== "0x" && (0, NetworkUtils_1.chainIsEvm)(chainId) && !(0, NetworkUtils_1.chainIsTvm)(chainId)) {
31
31
  addr = `0x${addr}`;
32
32
  if (!ethers_1.ethers.utils.isHexString(addr)) {
33
33
  return null;
34
34
  }
35
35
  }
36
36
  const shortURLString = (0, FormattingUtils_1.createShortenedString)(addr);
37
- if ((0, NetworkUtils_1.chainIsEvm)(chainId)) {
37
+ if ((0, NetworkUtils_1.chainIsTvm)(chainId)) {
38
+ const txHexNoPrefix = addr.startsWith("0x") ? addr.slice(2) : addr;
39
+ if (txHexNoPrefix.length === 64 && ethers_1.ethers.utils.isHexString(`0x${txHexNoPrefix}`)) {
40
+ const txIdForUrl = txHexNoPrefix.toLowerCase();
41
+ return `<${constructURL(explorerDomain, ["#", "transaction", txIdForUrl])} | ${shortURLString}>`;
42
+ }
43
+ if (/^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(addr)) {
44
+ return `<${constructURL(explorerDomain, ["#", "address", addr])} | ${shortURLString}>`;
45
+ }
46
+ return null;
47
+ }
48
+ else if ((0, NetworkUtils_1.chainIsEvm)(chainId)) {
38
49
  for (const [length, route] of [
39
50
  [66, "tx"],
40
51
  [42, "address"],
@@ -1 +1 @@
1
- {"version":3,"file":"BlockExplorerUtils.js","sourceRoot":"","sources":["../../../../src/utils/BlockExplorerUtils.ts"],"names":[],"mappings":";;AAaA,8CAEC;AAOD,gEAEC;AAuED,gDAEC;;AAjGD,mCAAgC;AAChC,4CAA+C;AAC/C,uDAA0D;AAC1D,iDAA4C;AAC5C,6CAAyC;AACzC,wDAAwB;AAQxB,SAAgB,iBAAiB,CAAC,eAAuB,EAAE,OAAwB;IACjF,OAAO,gCAAgC,CAAC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;AACpF,CAAC;AAOD,SAAgB,0BAA0B,CAAC,SAAiB;IAC1D,OAAO,2BAAe,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;AACnD,CAAC;AAYD,SAAS,YAAY,CAAC,MAAc,EAAE,KAAe;IAEnD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE7B,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAQD,SAAS,gCAAgC,CAAC,IAAY,EAAE,OAAO,GAAG,CAAC;IAEjE,MAAM,cAAc,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAE3D,IAAI,CAAC,IAAA,sBAAS,EAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO,2BAA2B,OAAO,IAAI,IAAI,IAAI,CAAC;IACxD,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,IAAA,yBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACzD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,IAAA,uCAAqB,EAAC,IAAI,CAAC,CAAC;IACnD,IAAI,IAAA,yBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QAExB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI;YAC5B,CAAC,EAAE,EAAE,IAAI,CAAC;YACV,CAAC,EAAE,EAAE,SAAS,CAAC;SACM,EAAE,CAAC;YAExB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,cAAc,GAAG,CAAC;YAChF,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,cAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC5C,MAAM,KAAK,GAAG,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,OAAO,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,cAAc,GAAG,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,SAAgB,kBAAkB,CAAC,mBAA6B,EAAE,OAAwB;IACxF,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7F,CAAC"}
1
+ {"version":3,"file":"BlockExplorerUtils.js","sourceRoot":"","sources":["../../../../src/utils/BlockExplorerUtils.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,15 @@ export interface TronTransactionResult {
4
4
  txid: string;
5
5
  result: boolean;
6
6
  }
7
+ /** Result of an off-chain contract call via `triggerConstantContract` (no broadcast). */
8
+ export interface TronSimulationResult {
9
+ success: boolean;
10
+ message?: string;
11
+ constantResult?: unknown;
12
+ energyUsed?: number;
13
+ energyRequired?: number;
14
+ energyPenalty?: number;
15
+ }
7
16
  /**
8
17
  * Submit a populated EVM transaction to TRON via TronWeb.
9
18
  *
@@ -18,3 +27,15 @@ export interface TronTransactionResult {
18
27
  * @returns The transaction ID and result status.
19
28
  */
20
29
  export declare function submitTransaction(tronWeb: TronWeb, populatedTx: PopulatedTransaction, feeLimit: number, callValue?: number): Promise<TronTransactionResult>;
30
+ /**
31
+ * Simulate a populated EVM transaction against TRON via TronWeb (constant call / `eth_call`-style).
32
+ *
33
+ * Same calldata path as {@link submitTransaction}: `to` and `data` from the populated tx,
34
+ * EVM `to` converted to TRON Base58, empty function selector with `{ input: data }`.
35
+ * Does not sign or broadcast.
36
+ *
37
+ * @param tronWeb TronWeb instance with a default address (used as `caller`).
38
+ * @param populatedTx Must contain `to` and `data`.
39
+ * @param feeLimit Maximum TRX for energy, in SUN (mirrors `submitTransaction`).
40
+ */
41
+ export declare function simulateTransaction(tronWeb: TronWeb, populatedTx: PopulatedTransaction, feeLimit: number, callValue?: number): Promise<TronSimulationResult>;
@@ -39,4 +39,40 @@ export async function submitTransaction(tronWeb, populatedTx, feeLimit, callValu
39
39
  result: broadcast.result ?? false,
40
40
  };
41
41
  }
42
+ /**
43
+ * Simulate a populated EVM transaction against TRON via TronWeb (constant call / `eth_call`-style).
44
+ *
45
+ * Same calldata path as {@link submitTransaction}: `to` and `data` from the populated tx,
46
+ * EVM `to` converted to TRON Base58, empty function selector with `{ input: data }`.
47
+ * Does not sign or broadcast.
48
+ *
49
+ * @param tronWeb TronWeb instance with a default address (used as `caller`).
50
+ * @param populatedTx Must contain `to` and `data`.
51
+ * @param feeLimit Maximum TRX for energy, in SUN (mirrors `submitTransaction`).
52
+ */
53
+ export async function simulateTransaction(tronWeb, populatedTx, feeLimit, callValue = 0) {
54
+ const { to, data } = populatedTx;
55
+ if (!to || !data) {
56
+ throw new Error("simulateTransaction: populatedTx must have both 'to' and 'data' fields");
57
+ }
58
+ const tronAddress = TvmAddress.from(to).toNative();
59
+ const ownerAddress = tronWeb.defaultAddress?.base58;
60
+ if (!ownerAddress) {
61
+ throw new Error("simulateTransaction: TronWeb instance must have a default address configured");
62
+ }
63
+ // `triggerConstantContract` is used to Invoke the readonly function (modified by the view or pure modifier) of a contract for contract data query;
64
+ // or to Invoke the non-readonly function of a contract for predicting whether the transaction can be successfully executed
65
+ // and estimating the energy consumption; or to estimate the energy consumption of contract deployment
66
+ const input = data.startsWith("0x") ? data.slice(2) : data;
67
+ const txWrapper = await tronWeb.transactionBuilder.triggerConstantContract(tronAddress, "", { feeLimit, input, callValue }, [], ownerAddress);
68
+ const success = txWrapper?.result?.result === true;
69
+ return {
70
+ success,
71
+ message: txWrapper?.result?.message,
72
+ constantResult: txWrapper?.constant_result,
73
+ energyUsed: txWrapper?.energy_used,
74
+ energyRequired: txWrapper?.energy_required,
75
+ energyPenalty: txWrapper?.energy_penalty,
76
+ };
77
+ }
42
78
  //# sourceMappingURL=TransactionUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAgB,EAChB,WAAiC,EACjC,QAAgB,EAChB,YAAoB,CAAC;IAErB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IACjC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC;IACpD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;IAChG,CAAC;IAED,iFAAiF;IACjF,wFAAwF;IACxF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CACrE,WAAW;IACX,+EAA+E;IAC/E,EAAE,EACF,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAC9B,EAAE,EACF,YAAY,CACb,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,IAAI,eAAe,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,mDAAmD,OAAO,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAEjE,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;QACrC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK;KAClC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"TransactionUtils.js","sourceRoot":"","sources":["../../../../../src/arch/tvm/TransactionUtils.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ethers } from "ethers";
2
2
  import { PUBLIC_NETWORKS } from "../constants";
3
3
  import { createShortenedString } from "./FormattingUtils";
4
- import { chainIsEvm } from "./NetworkUtils";
4
+ import { chainIsEvm, chainIsTvm } from "./NetworkUtils";
5
5
  import { isDefined } from "./TypeGuards";
6
6
  import bs58 from "bs58";
7
7
  /**
@@ -55,7 +55,7 @@ function _createBlockExplorerLinkMarkdown(addr, chainId = 1) {
55
55
  return `<unsupported chain/hash ${chainId}:${addr}>}`;
56
56
  }
57
57
  // Ensure that the first two characters are "0x". If they are not, append them.
58
- if (addr.substring(0, 2) !== "0x" && chainIsEvm(chainId)) {
58
+ if (addr.substring(0, 2) !== "0x" && chainIsEvm(chainId) && !chainIsTvm(chainId)) {
59
59
  addr = `0x${addr}`;
60
60
  if (!ethers.utils.isHexString(addr)) {
61
61
  return null;
@@ -63,7 +63,19 @@ function _createBlockExplorerLinkMarkdown(addr, chainId = 1) {
63
63
  }
64
64
  // Resolve the short URL string.
65
65
  const shortURLString = createShortenedString(addr);
66
- if (chainIsEvm(chainId)) {
66
+ if (chainIsTvm(chainId)) {
67
+ // TronScan-style URLs use `/#/transaction/...` and `/#/address/...`.
68
+ const txHexNoPrefix = addr.startsWith("0x") ? addr.slice(2) : addr;
69
+ if (txHexNoPrefix.length === 64 && ethers.utils.isHexString(`0x${txHexNoPrefix}`)) {
70
+ const txIdForUrl = txHexNoPrefix.toLowerCase();
71
+ return `<${constructURL(explorerDomain, ["#", "transaction", txIdForUrl])} | ${shortURLString}>`;
72
+ }
73
+ if (/^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(addr)) {
74
+ return `<${constructURL(explorerDomain, ["#", "address", addr])} | ${shortURLString}>`;
75
+ }
76
+ return null;
77
+ }
78
+ else if (chainIsEvm(chainId)) {
67
79
  // Iterate over the two possible addr lengths.
68
80
  for (const [length, route] of [
69
81
  [66, "tx"],
@@ -1 +1 @@
1
- {"version":3,"file":"BlockExplorerUtils.js","sourceRoot":"","sources":["../../../../src/utils/BlockExplorerUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BlockExplorerUtils.js","sourceRoot":"","sources":["../../../../src/utils/BlockExplorerUtils.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,15 @@ export interface TronTransactionResult {
4
4
  txid: string;
5
5
  result: boolean;
6
6
  }
7
+ /** Result of an off-chain contract call via `triggerConstantContract` (no broadcast). */
8
+ export interface TronSimulationResult {
9
+ success: boolean;
10
+ message?: string;
11
+ constantResult?: unknown;
12
+ energyUsed?: number;
13
+ energyRequired?: number;
14
+ energyPenalty?: number;
15
+ }
7
16
  /**
8
17
  * Submit a populated EVM transaction to TRON via TronWeb.
9
18
  *
@@ -18,4 +27,16 @@ export interface TronTransactionResult {
18
27
  * @returns The transaction ID and result status.
19
28
  */
20
29
  export declare function submitTransaction(tronWeb: TronWeb, populatedTx: PopulatedTransaction, feeLimit: number, callValue?: number): Promise<TronTransactionResult>;
30
+ /**
31
+ * Simulate a populated EVM transaction against TRON via TronWeb (constant call / `eth_call`-style).
32
+ *
33
+ * Same calldata path as {@link submitTransaction}: `to` and `data` from the populated tx,
34
+ * EVM `to` converted to TRON Base58, empty function selector with `{ input: data }`.
35
+ * Does not sign or broadcast.
36
+ *
37
+ * @param tronWeb TronWeb instance with a default address (used as `caller`).
38
+ * @param populatedTx Must contain `to` and `data`.
39
+ * @param feeLimit Maximum TRX for energy, in SUN (mirrors `submitTransaction`).
40
+ */
41
+ export declare function simulateTransaction(tronWeb: TronWeb, populatedTx: PopulatedTransaction, feeLimit: number, callValue?: number): Promise<TronSimulationResult>;
21
42
  //# sourceMappingURL=TransactionUtils.d.ts.map
@@ -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;;;;;;;;;;;;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"}
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 +1 @@
1
- {"version":3,"file":"BlockExplorerUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/BlockExplorerUtils.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE3F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhF;AAgED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAElG"}
1
+ {"version":3,"file":"BlockExplorerUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/BlockExplorerUtils.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE3F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEhF;AA2ED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,mBAAmB,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAElG"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@across-protocol/sdk",
3
3
  "author": "UMA Team",
4
- "version": "4.3.140-alpha.0",
4
+ "version": "4.3.140-alpha.1",
5
5
  "license": "AGPL-3.0",
6
6
  "homepage": "https://docs.across.to/reference/sdk",
7
7
  "repository": {
@@ -123,7 +123,7 @@
123
123
  "superstruct": "^0.15.4",
124
124
  "tronweb": "^6.2.2",
125
125
  "tslib": "^2.6.2",
126
- "viem": "^2.21.15",
126
+ "viem": "^2.47.10",
127
127
  "winston": "^3.17.0",
128
128
  "winston-transport": "^4.9.0"
129
129
  },
@@ -7,6 +7,16 @@ export interface TronTransactionResult {
7
7
  result: boolean;
8
8
  }
9
9
 
10
+ /** Result of an off-chain contract call via `triggerConstantContract` (no broadcast). */
11
+ export interface TronSimulationResult {
12
+ success: boolean;
13
+ message?: string;
14
+ constantResult?: unknown;
15
+ energyUsed?: number;
16
+ energyRequired?: number;
17
+ energyPenalty?: number;
18
+ }
19
+
10
20
  /**
11
21
  * Submit a populated EVM transaction to TRON via TronWeb.
12
22
  *
@@ -62,3 +72,55 @@ export async function submitTransaction(
62
72
  result: broadcast.result ?? false,
63
73
  };
64
74
  }
75
+
76
+ /**
77
+ * Simulate a populated EVM transaction against TRON via TronWeb (constant call / `eth_call`-style).
78
+ *
79
+ * Same calldata path as {@link submitTransaction}: `to` and `data` from the populated tx,
80
+ * EVM `to` converted to TRON Base58, empty function selector with `{ input: data }`.
81
+ * Does not sign or broadcast.
82
+ *
83
+ * @param tronWeb TronWeb instance with a default address (used as `caller`).
84
+ * @param populatedTx Must contain `to` and `data`.
85
+ * @param feeLimit Maximum TRX for energy, in SUN (mirrors `submitTransaction`).
86
+ */
87
+ export async function simulateTransaction(
88
+ tronWeb: TronWeb,
89
+ populatedTx: PopulatedTransaction,
90
+ feeLimit: number,
91
+ callValue: number = 0
92
+ ): Promise<TronSimulationResult> {
93
+ const { to, data } = populatedTx;
94
+ if (!to || !data) {
95
+ throw new Error("simulateTransaction: populatedTx must have both 'to' and 'data' fields");
96
+ }
97
+
98
+ const tronAddress = TvmAddress.from(to).toNative();
99
+ const ownerAddress = tronWeb.defaultAddress?.base58;
100
+ if (!ownerAddress) {
101
+ throw new Error("simulateTransaction: TronWeb instance must have a default address configured");
102
+ }
103
+
104
+ // `triggerConstantContract` is used to Invoke the readonly function (modified by the view or pure modifier) of a contract for contract data query;
105
+ // or to Invoke the non-readonly function of a contract for predicting whether the transaction can be successfully executed
106
+ // and estimating the energy consumption; or to estimate the energy consumption of contract deployment
107
+ const input = data.startsWith("0x") ? data.slice(2) : data;
108
+ const txWrapper = await tronWeb.transactionBuilder.triggerConstantContract(
109
+ tronAddress,
110
+ "",
111
+ { feeLimit, input, callValue },
112
+ [],
113
+ ownerAddress
114
+ );
115
+
116
+ const success = txWrapper?.result?.result === true;
117
+
118
+ return {
119
+ success,
120
+ message: txWrapper?.result?.message,
121
+ constantResult: txWrapper?.constant_result,
122
+ energyUsed: txWrapper?.energy_used,
123
+ energyRequired: txWrapper?.energy_required,
124
+ energyPenalty: txWrapper?.energy_penalty,
125
+ };
126
+ }
@@ -1,7 +1,7 @@
1
1
  import { ethers } from "ethers";
2
2
  import { PUBLIC_NETWORKS } from "../constants";
3
3
  import { createShortenedString } from "./FormattingUtils";
4
- import { chainIsEvm } from "./NetworkUtils";
4
+ import { chainIsEvm, chainIsTvm } from "./NetworkUtils";
5
5
  import { isDefined } from "./TypeGuards";
6
6
  import bs58 from "bs58";
7
7
 
@@ -59,7 +59,7 @@ function _createBlockExplorerLinkMarkdown(addr: string, chainId = 1): string | n
59
59
  return `<unsupported chain/hash ${chainId}:${addr}>}`;
60
60
  }
61
61
  // Ensure that the first two characters are "0x". If they are not, append them.
62
- if (addr.substring(0, 2) !== "0x" && chainIsEvm(chainId)) {
62
+ if (addr.substring(0, 2) !== "0x" && chainIsEvm(chainId) && !chainIsTvm(chainId)) {
63
63
  addr = `0x${addr}`;
64
64
  if (!ethers.utils.isHexString(addr)) {
65
65
  return null;
@@ -67,7 +67,18 @@ function _createBlockExplorerLinkMarkdown(addr: string, chainId = 1): string | n
67
67
  }
68
68
  // Resolve the short URL string.
69
69
  const shortURLString = createShortenedString(addr);
70
- if (chainIsEvm(chainId)) {
70
+ if (chainIsTvm(chainId)) {
71
+ // TronScan-style URLs use `/#/transaction/...` and `/#/address/...`.
72
+ const txHexNoPrefix = addr.startsWith("0x") ? addr.slice(2) : addr;
73
+ if (txHexNoPrefix.length === 64 && ethers.utils.isHexString(`0x${txHexNoPrefix}`)) {
74
+ const txIdForUrl = txHexNoPrefix.toLowerCase();
75
+ return `<${constructURL(explorerDomain, ["#", "transaction", txIdForUrl])} | ${shortURLString}>`;
76
+ }
77
+ if (/^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(addr)) {
78
+ return `<${constructURL(explorerDomain, ["#", "address", addr])} | ${shortURLString}>`;
79
+ }
80
+ return null;
81
+ } else if (chainIsEvm(chainId)) {
71
82
  // Iterate over the two possible addr lengths.
72
83
  for (const [length, route] of [
73
84
  [66, "tx"],