@vultisig/core-chain 5.1.0 → 5.3.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.
Files changed (105) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/chains/solana/spl/verification.d.ts +38 -0
  3. package/dist/chains/solana/spl/verification.d.ts.map +1 -0
  4. package/dist/chains/solana/spl/verification.js +45 -0
  5. package/dist/chains/solana/spl/verification.js.map +1 -0
  6. package/dist/chains/solana/spl/verifiedRegistry.d.ts +34 -0
  7. package/dist/chains/solana/spl/verifiedRegistry.d.ts.map +1 -0
  8. package/dist/chains/solana/spl/verifiedRegistry.js +65 -0
  9. package/dist/chains/solana/spl/verifiedRegistry.js.map +1 -0
  10. package/dist/chains/ton/failure.d.ts +70 -0
  11. package/dist/chains/ton/failure.d.ts.map +1 -0
  12. package/dist/chains/ton/failure.js +170 -0
  13. package/dist/chains/ton/failure.js.map +1 -0
  14. package/dist/chains/ton/jetton/symbol.d.ts +3 -5
  15. package/dist/chains/ton/jetton/symbol.d.ts.map +1 -1
  16. package/dist/chains/ton/jetton/symbol.js +5 -58
  17. package/dist/chains/ton/jetton/symbol.js.map +1 -1
  18. package/dist/chains/ton/jetton/verification.d.ts +1 -1
  19. package/dist/chains/ton/jetton/verification.d.ts.map +1 -1
  20. package/dist/chains/ton/jetton/verification.js +3 -3
  21. package/dist/chains/ton/jetton/verification.js.map +1 -1
  22. package/dist/chains/ton/jetton/verifiedRegistry.d.ts +1 -1
  23. package/dist/chains/ton/jetton/verifiedRegistry.d.ts.map +1 -1
  24. package/dist/chains/ton/jetton/verifiedRegistry.js +3 -3
  25. package/dist/chains/ton/jetton/verifiedRegistry.js.map +1 -1
  26. package/dist/chains/ton/wallet.d.ts +50 -0
  27. package/dist/chains/ton/wallet.d.ts.map +1 -0
  28. package/dist/chains/ton/wallet.js +54 -0
  29. package/dist/chains/ton/wallet.js.map +1 -0
  30. package/dist/chains/ton/walletV5R1.d.ts +27 -0
  31. package/dist/chains/ton/walletV5R1.d.ts.map +1 -0
  32. package/dist/chains/ton/walletV5R1.js +53 -0
  33. package/dist/chains/ton/walletV5R1.js.map +1 -0
  34. package/dist/coin/coingecko/coingeckoToken.d.ts +11 -0
  35. package/dist/coin/coingecko/coingeckoToken.d.ts.map +1 -1
  36. package/dist/coin/coingecko/getCoingeckoId.d.ts +10 -0
  37. package/dist/coin/coingecko/getCoingeckoId.d.ts.map +1 -1
  38. package/dist/coin/coingecko/getCoingeckoId.js +30 -1
  39. package/dist/coin/coingecko/getCoingeckoId.js.map +1 -1
  40. package/dist/coin/find/resolvers/solana/index.d.ts +22 -1
  41. package/dist/coin/find/resolvers/solana/index.d.ts.map +1 -1
  42. package/dist/coin/find/resolvers/solana/index.js +79 -11
  43. package/dist/coin/find/resolvers/solana/index.js.map +1 -1
  44. package/dist/coin/jupiter/api.d.ts +18 -0
  45. package/dist/coin/jupiter/api.d.ts.map +1 -0
  46. package/dist/coin/jupiter/api.js +52 -0
  47. package/dist/coin/jupiter/api.js.map +1 -0
  48. package/dist/coin/jupiter/token.d.ts +4 -0
  49. package/dist/coin/jupiter/token.d.ts.map +1 -1
  50. package/dist/coin/jupiter/token.js.map +1 -1
  51. package/dist/coin/token/metadata/resolvers/solana.d.ts +3 -1
  52. package/dist/coin/token/metadata/resolvers/solana.d.ts.map +1 -1
  53. package/dist/coin/token/metadata/resolvers/solana.js +10 -6
  54. package/dist/coin/token/metadata/resolvers/solana.js.map +1 -1
  55. package/dist/coin/tokenSymbol.d.ts +10 -0
  56. package/dist/coin/tokenSymbol.d.ts.map +1 -0
  57. package/dist/coin/tokenSymbol.js +62 -0
  58. package/dist/coin/tokenSymbol.js.map +1 -0
  59. package/dist/publicKey/address/deriveAddress.d.ts +8 -1
  60. package/dist/publicKey/address/deriveAddress.d.ts.map +1 -1
  61. package/dist/publicKey/address/deriveAddress.js +5 -1
  62. package/dist/publicKey/address/deriveAddress.js.map +1 -1
  63. package/dist/publicKey/address/getChainAddress.d.ts +4 -1
  64. package/dist/publicKey/address/getChainAddress.d.ts.map +1 -1
  65. package/dist/publicKey/address/getChainAddress.js +2 -2
  66. package/dist/publicKey/address/getChainAddress.js.map +1 -1
  67. package/dist/security/blockaid/tx/simulation/api/core.d.ts +17 -0
  68. package/dist/security/blockaid/tx/simulation/api/core.d.ts.map +1 -1
  69. package/dist/security/blockaid/tx/simulation/api/core.js +58 -41
  70. package/dist/security/blockaid/tx/simulation/api/core.js.map +1 -1
  71. package/dist/swap/general/GeneralSwapQuote.d.ts +10 -0
  72. package/dist/swap/general/GeneralSwapQuote.d.ts.map +1 -1
  73. package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
  74. package/dist/swap/general/swapkit/api/getSwapKitQuote.js +40 -14
  75. package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
  76. package/dist/swap/native/NativeSwapQuote.d.ts +6 -1
  77. package/dist/swap/native/NativeSwapQuote.d.ts.map +1 -1
  78. package/dist/tx/broadcast/resolvers/ton.d.ts.map +1 -1
  79. package/dist/tx/broadcast/resolvers/ton.js +8 -0
  80. package/dist/tx/broadcast/resolvers/ton.js.map +1 -1
  81. package/dist/tx/fee/evm/clampEvmPriorityFee.d.ts +10 -4
  82. package/dist/tx/fee/evm/clampEvmPriorityFee.d.ts.map +1 -1
  83. package/dist/tx/fee/evm/clampEvmPriorityFee.js +35 -14
  84. package/dist/tx/fee/evm/clampEvmPriorityFee.js.map +1 -1
  85. package/dist/tx/fee/evm/evmGasLimit.d.ts +29 -0
  86. package/dist/tx/fee/evm/evmGasLimit.d.ts.map +1 -1
  87. package/dist/tx/fee/evm/evmGasLimit.js +47 -17
  88. package/dist/tx/fee/evm/evmGasLimit.js.map +1 -1
  89. package/dist/tx/fee/evm/gasPrice.d.ts +4 -0
  90. package/dist/tx/fee/evm/gasPrice.d.ts.map +1 -0
  91. package/dist/tx/fee/evm/gasPrice.js +4 -0
  92. package/dist/tx/fee/evm/gasPrice.js.map +1 -0
  93. package/dist/tx/fee/evm/maxPriorityFeePerGas.d.ts +8 -0
  94. package/dist/tx/fee/evm/maxPriorityFeePerGas.d.ts.map +1 -1
  95. package/dist/tx/fee/evm/maxPriorityFeePerGas.js +30 -1
  96. package/dist/tx/fee/evm/maxPriorityFeePerGas.js.map +1 -1
  97. package/dist/tx/status/index.d.ts +2 -2
  98. package/dist/tx/status/index.d.ts.map +1 -1
  99. package/dist/tx/status/resolver.d.ts +15 -0
  100. package/dist/tx/status/resolver.d.ts.map +1 -1
  101. package/dist/tx/status/resolvers/ton.d.ts +5 -1
  102. package/dist/tx/status/resolvers/ton.d.ts.map +1 -1
  103. package/dist/tx/status/resolvers/ton.js +8 -29
  104. package/dist/tx/status/resolvers/ton.js.map +1 -1
  105. package/package.json +41 -1
@@ -42,29 +42,50 @@ const priorityFeeCeilingWeiByChain = {
42
42
  [EvmChain.Sei]: defaultPriorityFeeCeilingWei,
43
43
  };
44
44
  /**
45
- * Minimum tip (wei) to sign on chains where inclusion is a public tip
46
- * auction. In quiet fee markets the RPC-suggested maxPriorityFeePerGas
47
- * collapses to near zero (~0.0004 gwei observed on Ethereum L1); a tx signed
48
- * with that tip gives block builders no incentive to include it, so it sits
49
- * in the public mempool until evicted and shows up as "pending then
50
- * disappeared" on explorers. Mirrors the mobile clients, which floor
51
- * Ethereum at 1 gwei (iOS FeeService.calculateMaxPriorityFeePerGas, Android
52
- * EthereumFeeService) and Polygon at 30 gwei (Polygon validators enforce a
53
- * ~25 gwei minimum tip). L2 sequencers include txs regardless of tip, so
54
- * rollups deliberately have no floor.
45
+ * Minimum tip (wei) to sign with, per chain. In quiet fee markets the
46
+ * RPC-suggested maxPriorityFeePerGas collapses to near zero (~0.0004 gwei
47
+ * observed on Ethereum L1); on a chain where inclusion is a public tip auction
48
+ * that gives block builders no incentive to include the transaction, so it
49
+ * sits in the mempool until evicted and shows up as "pending then disappeared"
50
+ * on explorers. Tip-auction chains take 1 gwei, Polygon 30 gwei (its
51
+ * validators enforce a ~25 gwei minimum), and OP-stack rollups a nominal
52
+ * 20 wei so the signed field is never literally zero. Chains absent here
53
+ * (Avalanche, Zksync) sign whatever the RPC suggests.
55
54
  */
56
55
  const priorityFeeFloorWeiByChain = {
57
56
  [EvmChain.Ethereum]: 1n * GWEI,
57
+ [EvmChain.BSC]: 1n * GWEI,
58
+ [EvmChain.CronosChain]: 1n * GWEI,
59
+ [EvmChain.Hyperliquid]: 1n * GWEI,
60
+ [EvmChain.Sei]: 1n * GWEI,
58
61
  [EvmChain.Polygon]: 30n * GWEI,
62
+ [EvmChain.Base]: 20n,
63
+ [EvmChain.Blast]: 20n,
64
+ [EvmChain.Optimism]: 20n,
59
65
  };
66
+ /**
67
+ * Chains whose sequencer admits transactions first-come-first-served without a
68
+ * tip auction, so any priority fee is money paid for nothing. Signed with a
69
+ * zero tip regardless of what the RPC suggests.
70
+ */
71
+ const zeroPriorityFeeChains = [EvmChain.Arbitrum, EvmChain.Mantle, EvmChain.Robinhood];
72
+ /**
73
+ * True on a chain whose tip `clampEvmPriorityFee` pins to zero, so a caller can
74
+ * skip asking the network for a suggestion it would discard anyway.
75
+ */
76
+ export const isZeroPriorityFeeChain = (chain) => zeroPriorityFeeChains.includes(chain);
60
77
  /**
61
78
  * Clamps an RPC-reported EVM maxPriorityFeePerGas into a per-chain sane
62
- * range: a generous ceiling against a compromised RPC inflating the fee, and
63
- * a floor (tip-auction chains only) against an honest RPC suggesting a tip
64
- * too low to ever be mined. Never throws — a clamp still lets the tx go
65
- * through at a safe fee, whereas rejecting it would strand the user mid-flow.
79
+ * range: zero on chains that ignore the tip, a generous ceiling against a
80
+ * compromised RPC inflating the fee, and a floor (tip-auction chains) against
81
+ * an honest RPC suggesting a tip too low to ever be mined. Never throws — a
82
+ * clamp still lets the tx go through at a safe fee, whereas rejecting it would
83
+ * strand the user mid-flow.
66
84
  */
67
85
  export const clampEvmPriorityFee = (chain, rpcPriorityFeeWei) => {
86
+ if (zeroPriorityFeeChains.includes(chain)) {
87
+ return 0n;
88
+ }
68
89
  const ceiling = priorityFeeCeilingWeiByChain[chain];
69
90
  if (rpcPriorityFeeWei > ceiling) {
70
91
  console.warn(`[evm] RPC-reported maxPriorityFeePerGas for ${chain} (${rpcPriorityFeeWei} wei) exceeds the sanity ceiling (${ceiling} wei); clamping to the ceiling.`);
@@ -1 +1 @@
1
- {"version":3,"file":"clampEvmPriorityFee.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/clampEvmPriorityFee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,MAAM,IAAI,GAAG,WAAc,CAAA;AAC3B,MAAM,4BAA4B,GAAG,IAAI,GAAG,IAAI,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,4BAA4B,GAA6B;IAC7D,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAC/B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAC3B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI;IAC5B,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAC/B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI;IAC7B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI;IAC7B,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI;IAChC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,4BAA4B;IAClD,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B;IACpD,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B;IAC5C,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI;IAChC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAM,GAAG,IAAI;IACjC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B;IACpD,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B;CAC7C,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,0BAA0B,GAAsC;IACpE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,IAAI;IAC9B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;CAC/B,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAe,EAAE,iBAAyB,EAAU,EAAE;IACxF,MAAM,OAAO,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAA;IAEnD,IAAI,iBAAiB,GAAG,OAAO,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CACV,+CAA+C,KAAK,KAAK,iBAAiB,qCAAqC,OAAO,iCAAiC,CACxJ,CAAA;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IAErD,IAAI,iBAAiB,GAAG,KAAK,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,iBAAiB,CAAA;AAC1B,CAAC,CAAA"}
1
+ {"version":3,"file":"clampEvmPriorityFee.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/clampEvmPriorityFee.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,38 @@
1
1
  import { EvmChain } from '@vultisig/core-chain/Chain';
2
2
  import { CoinKey } from '../../../coin/Coin.js';
3
+ /**
4
+ * Lowest gas limit a plain transfer of `coin` is signed with. A live
5
+ * `eth_estimateGas` result is preferred and only raised to this when it comes
6
+ * in lower or cannot be obtained.
7
+ */
8
+ export declare const getEvmTransferGasLimit: ({ id, chain }: CoinKey<EvmChain>) => bigint;
9
+ /**
10
+ * Intrinsic gas the calldata of a plain transfer adds to the base cost. Sizes
11
+ * the fallback for a memo-carrying send that could not be simulated, since a
12
+ * node refuses a limit below the intrinsic cost outright.
13
+ */
14
+ export declare const getEvmCalldataGas: (data: `0x${string}`) => bigint;
15
+ /**
16
+ * Gas limit a contract call (aggregator swap, dApp transaction) falls back to
17
+ * when it cannot be simulated, e.g. a swap quoted before its token allowance
18
+ * exists. Mantle meters gas in far larger units than other chains.
19
+ */
20
+ export declare const getEvmContractCallGasLimit: (chain: EvmChain) => bigint;
21
+ /**
22
+ * Gas limit signed for a THORChain or Maya deposit leaving an EVM chain: a
23
+ * memo-carrying transfer to the inbound vault for the fee coin, a router
24
+ * `depositWithExpiry` call for a token. Sized like an ERC-20 transfer, which
25
+ * comfortably covers both.
26
+ */
27
+ export declare const evmRouterDepositGasLimit = 120000n;
3
28
  type DeriveEvmGasLimitInput = {
4
29
  coin: CoinKey<EvmChain>;
5
30
  data?: string;
6
31
  };
32
+ /**
33
+ * Fallback gas limit for a transaction that could not be simulated: the
34
+ * contract-call default when it carries calldata, the transfer default otherwise.
35
+ */
7
36
  export declare const deriveEvmGasLimit: ({ coin, data }: DeriveEvmGasLimitInput) => bigint;
8
37
  export {};
9
38
  //# sourceMappingURL=evmGasLimit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evmGasLimit.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/evmGasLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAyC5C,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,sBAAsB,WAOvE,CAAA"}
1
+ {"version":3,"file":"evmGasLimit.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/evmGasLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAwC5C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,eAAe,OAAO,CAAC,QAAQ,CAAC,KAAG,MACX,CAAA;AAU/D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,KAAK,MAAM,EAAE,KAAG,MAC6D,CAAA;AAErH;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,OAAO,QAAQ,KAAG,MACN,CAAA;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,UAAW,CAAA;AAEhD,KAAK,sBAAsB,GAAG;IAC5B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,sBAAsB,KAAG,MACG,CAAA"}
@@ -1,44 +1,74 @@
1
1
  import { EvmChain } from '@vultisig/core-chain/Chain';
2
+ import { hexToBytes } from 'viem';
2
3
  const zkSyncTransferGasLimit = 200000n;
3
- const mantleTransferGasLimit = 90000000n;
4
4
  const feeCoinTransferGasLimit = {
5
5
  [EvmChain.Ethereum]: 23000n,
6
- [EvmChain.Base]: 40000n,
6
+ [EvmChain.Base]: 50000n,
7
7
  [EvmChain.Arbitrum]: 120000n,
8
- [EvmChain.Polygon]: 23000n,
8
+ [EvmChain.Polygon]: 40000n,
9
9
  [EvmChain.Optimism]: 40000n,
10
10
  [EvmChain.CronosChain]: 40000n,
11
- [EvmChain.Blast]: 40000n,
12
- [EvmChain.BSC]: 40000n,
11
+ [EvmChain.Blast]: 200000n,
12
+ [EvmChain.BSC]: 23000n,
13
13
  [EvmChain.Avalanche]: 23000n,
14
14
  [EvmChain.Zksync]: zkSyncTransferGasLimit,
15
- [EvmChain.Mantle]: mantleTransferGasLimit,
15
+ [EvmChain.Mantle]: 23000n,
16
16
  [EvmChain.Hyperliquid]: 23000n,
17
- [EvmChain.Sei]: 30000n,
17
+ [EvmChain.Sei]: 23000n,
18
18
  [EvmChain.Robinhood]: 120000n,
19
19
  };
20
20
  const defaultErc20TransferGasLimit = 120000n;
21
21
  const erc20TransferGasLimit = {
22
22
  [EvmChain.Ethereum]: defaultErc20TransferGasLimit,
23
- [EvmChain.Base]: defaultErc20TransferGasLimit,
23
+ [EvmChain.Base]: 150000n,
24
24
  [EvmChain.Arbitrum]: defaultErc20TransferGasLimit,
25
25
  [EvmChain.Polygon]: defaultErc20TransferGasLimit,
26
26
  [EvmChain.Optimism]: defaultErc20TransferGasLimit,
27
27
  [EvmChain.CronosChain]: defaultErc20TransferGasLimit,
28
- [EvmChain.Blast]: defaultErc20TransferGasLimit,
28
+ [EvmChain.Blast]: 200000n,
29
29
  [EvmChain.BSC]: defaultErc20TransferGasLimit,
30
30
  [EvmChain.Avalanche]: defaultErc20TransferGasLimit,
31
31
  [EvmChain.Zksync]: zkSyncTransferGasLimit,
32
- [EvmChain.Mantle]: mantleTransferGasLimit,
32
+ [EvmChain.Mantle]: defaultErc20TransferGasLimit,
33
33
  [EvmChain.Hyperliquid]: defaultErc20TransferGasLimit,
34
34
  [EvmChain.Sei]: defaultErc20TransferGasLimit,
35
35
  [EvmChain.Robinhood]: defaultErc20TransferGasLimit,
36
36
  };
37
- export const deriveEvmGasLimit = ({ coin, data }) => {
38
- const { id, chain } = coin;
39
- if (data) {
40
- return chain === EvmChain.Mantle ? 3000000000n : 600000n;
41
- }
42
- return (id ? erc20TransferGasLimit : feeCoinTransferGasLimit)[chain];
43
- };
37
+ /**
38
+ * Lowest gas limit a plain transfer of `coin` is signed with. A live
39
+ * `eth_estimateGas` result is preferred and only raised to this when it comes
40
+ * in lower or cannot be obtained.
41
+ */
42
+ export const getEvmTransferGasLimit = ({ id, chain }) => (id ? erc20TransferGasLimit : feeCoinTransferGasLimit)[chain];
43
+ // Calldata is priced per byte at the higher of the execution rate (16 gas for a
44
+ // non-zero byte, 4 for a zero byte) and the floor introduced with EIP-7623
45
+ // (10 gas per token, where a zero byte is one token and a non-zero byte four).
46
+ // A plain transfer runs no code, so the floor is what it pays wherever that EIP
47
+ // is active, and it exceeds the execution rate everywhere else.
48
+ const calldataGasPerZeroByte = 10n;
49
+ const calldataGasPerNonZeroByte = 40n;
50
+ /**
51
+ * Intrinsic gas the calldata of a plain transfer adds to the base cost. Sizes
52
+ * the fallback for a memo-carrying send that could not be simulated, since a
53
+ * node refuses a limit below the intrinsic cost outright.
54
+ */
55
+ export const getEvmCalldataGas = (data) => hexToBytes(data).reduce((gas, byte) => gas + (byte === 0 ? calldataGasPerZeroByte : calldataGasPerNonZeroByte), 0n);
56
+ /**
57
+ * Gas limit a contract call (aggregator swap, dApp transaction) falls back to
58
+ * when it cannot be simulated, e.g. a swap quoted before its token allowance
59
+ * exists. Mantle meters gas in far larger units than other chains.
60
+ */
61
+ export const getEvmContractCallGasLimit = (chain) => chain === EvmChain.Mantle ? 3000000000n : 600000n;
62
+ /**
63
+ * Gas limit signed for a THORChain or Maya deposit leaving an EVM chain: a
64
+ * memo-carrying transfer to the inbound vault for the fee coin, a router
65
+ * `depositWithExpiry` call for a token. Sized like an ERC-20 transfer, which
66
+ * comfortably covers both.
67
+ */
68
+ export const evmRouterDepositGasLimit = 120000n;
69
+ /**
70
+ * Fallback gas limit for a transaction that could not be simulated: the
71
+ * contract-call default when it carries calldata, the transfer default otherwise.
72
+ */
73
+ export const deriveEvmGasLimit = ({ coin, data }) => data ? getEvmContractCallGasLimit(coin.chain) : getEvmTransferGasLimit(coin);
44
74
  //# sourceMappingURL=evmGasLimit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evmGasLimit.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/evmGasLimit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAIrD,MAAM,sBAAsB,GAAG,OAAO,CAAA;AACtC,MAAM,sBAAsB,GAAG,SAAW,CAAA;AAE1C,MAAM,uBAAuB,GAA6B;IACxD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM;IAC3B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACvB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO;IAC5B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IAC1B,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM;IAC3B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IAC9B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM;IACxB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM;IACtB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM;IAC5B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB;IACzC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB;IACzC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IAC9B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAO;IACvB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO;CAC9B,CAAA;AAED,MAAM,4BAA4B,GAAG,OAAQ,CAAA;AAE7C,MAAM,qBAAqB,GAA6B;IACtD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,4BAA4B;IACjD,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,4BAA4B;IAC7C,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,4BAA4B;IACjD,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,4BAA4B;IAChD,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,4BAA4B;IACjD,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B;IACpD,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,4BAA4B;IAC9C,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B;IAC5C,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,4BAA4B;IAClD,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB;IACzC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB;IACzC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B;IACpD,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,4BAA4B;IAC5C,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,4BAA4B;CACnD,CAAA;AAOD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAA0B,EAAE,EAAE;IAC1E,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;IAC1B,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAc,CAAC,CAAC,CAAC,OAAQ,CAAA;IAC9D,CAAC;IAED,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAA;AACtE,CAAC,CAAA"}
1
+ {"version":3,"file":"evmGasLimit.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/evmGasLimit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { EvmChain } from '@vultisig/core-chain/Chain';
2
+ /** The node's current legacy gas price (`eth_gasPrice`), in wei. */
3
+ export declare const getEvmGasPrice: (chain: EvmChain) => Promise<bigint>;
4
+ //# sourceMappingURL=gasPrice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gasPrice.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/gasPrice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGrD,oEAAoE;AACpE,eAAO,MAAM,cAAc,GAAU,OAAO,QAAQ,KAAG,OAAO,CAAC,MAAM,CAAsC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { getEvmClient } from '@vultisig/core-chain/chains/evm/client';
2
+ /** The node's current legacy gas price (`eth_gasPrice`), in wei. */
3
+ export const getEvmGasPrice = async (chain) => getEvmClient(chain).getGasPrice();
4
+ //# sourceMappingURL=gasPrice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gasPrice.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/gasPrice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAErE,oEAAoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,KAAe,EAAmB,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA"}
@@ -1,3 +1,11 @@
1
1
  import { EvmChain } from '@vultisig/core-chain/Chain';
2
+ /**
3
+ * Priority fee to sign with: the highest 5th-percentile tip paid in any of the
4
+ * last ten blocks, so the transaction clears even a busy block, falling back to
5
+ * the node's own suggestion when no history is available. Capped at the current
6
+ * gas price when that lookup succeeds; a failed lookup just leaves the tip
7
+ * uncapped rather than failing the quote, since an EIP-1559 tip stands on its
8
+ * own without it.
9
+ */
2
10
  export declare const getEvmMaxPriorityFeePerGas: (chain: EvmChain) => Promise<bigint>;
3
11
  //# sourceMappingURL=maxPriorityFeePerGas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"maxPriorityFeePerGas.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/maxPriorityFeePerGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAGrD,eAAO,MAAM,0BAA0B,GAAU,OAAO,QAAQ,oBAAuD,CAAA"}
1
+ {"version":3,"file":"maxPriorityFeePerGas.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/maxPriorityFeePerGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAQrD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,GAAU,OAAO,QAAQ,KAAG,OAAO,CAAC,MAAM,CAyBhF,CAAA"}
@@ -1,3 +1,32 @@
1
1
  import { getEvmClient } from '@vultisig/core-chain/chains/evm/client';
2
- export const getEvmMaxPriorityFeePerGas = async (chain) => getEvmClient(chain).estimateMaxPriorityFeePerGas();
2
+ import { attempt } from '@vultisig/lib-utils/attempt';
3
+ import { bigIntMax } from '@vultisig/lib-utils/bigint/bigIntMax';
4
+ const feeHistoryBlockCount = 10;
5
+ const feeHistoryRewardPercentile = 5;
6
+ /**
7
+ * Priority fee to sign with: the highest 5th-percentile tip paid in any of the
8
+ * last ten blocks, so the transaction clears even a busy block, falling back to
9
+ * the node's own suggestion when no history is available. Capped at the current
10
+ * gas price when that lookup succeeds; a failed lookup just leaves the tip
11
+ * uncapped rather than failing the quote, since an EIP-1559 tip stands on its
12
+ * own without it.
13
+ */
14
+ export const getEvmMaxPriorityFeePerGas = async (chain) => {
15
+ const client = getEvmClient(chain);
16
+ const [feeHistory, gasPrice] = await Promise.all([
17
+ attempt(client.getFeeHistory({
18
+ blockCount: feeHistoryBlockCount,
19
+ rewardPercentiles: [feeHistoryRewardPercentile],
20
+ })),
21
+ attempt(client.getGasPrice()),
22
+ ]);
23
+ const rewards = 'error' in feeHistory
24
+ ? []
25
+ : (feeHistory.data.reward ?? []).flatMap(([reward]) => (reward === undefined ? [] : [reward]));
26
+ const priorityFee = rewards.length > 0 ? bigIntMax(...rewards) : await client.estimateMaxPriorityFeePerGas();
27
+ if ('error' in gasPrice) {
28
+ return priorityFee;
29
+ }
30
+ return priorityFee > gasPrice.data ? gasPrice.data : priorityFee;
31
+ };
3
32
  //# sourceMappingURL=maxPriorityFeePerGas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"maxPriorityFeePerGas.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/maxPriorityFeePerGas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AAErE,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,KAAe,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,4BAA4B,EAAE,CAAA"}
1
+ {"version":3,"file":"maxPriorityFeePerGas.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/fee/evm/maxPriorityFeePerGas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AAEhE,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAC/B,MAAM,0BAA0B,GAAG,CAAC,CAAA;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,KAAe,EAAmB,EAAE;IACnF,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,OAAO,CACL,MAAM,CAAC,aAAa,CAAC;YACnB,UAAU,EAAE,oBAAoB;YAChC,iBAAiB,EAAE,CAAC,0BAA0B,CAAC;SAChD,CAAC,CACH;QACD,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;KAC9B,CAAC,CAAA;IAEF,MAAM,OAAO,GACX,OAAO,IAAI,UAAU;QACnB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAElG,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,4BAA4B,EAAE,CAAA;IAE5G,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QACxB,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,OAAO,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAA;AAClE,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { TxReceiptInfo, TxStatusInput } from './resolver.js';
1
+ import { TxFailureInfo, TxReceiptInfo, TxStatusInput } from './resolver.js';
2
2
  export declare const getTxStatus: (input: TxStatusInput) => Promise<import("./resolver.js").TxStatusResult>;
3
- export type { TxReceiptInfo, TxStatusInput };
3
+ export type { TxFailureInfo, TxReceiptInfo, TxStatusInput };
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAoB,MAAM,YAAY,CAAA;AA6B3E,eAAO,MAAM,WAAW,GAAI,OAAO,aAAa,iDAO/C,CAAA;AAED,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAoB,MAAM,YAAY,CAAA;AA6B1F,eAAO,MAAM,WAAW,GAAI,OAAO,aAAa,iDAO/C,CAAA;AAED,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,CAAA"}
@@ -14,10 +14,25 @@ export type TxReceiptInfo = {
14
14
  /** Present only for a multi-purpose-token delivery. */
15
15
  deliveredMptIssuanceId?: string;
16
16
  };
17
+ /**
18
+ * Why a transaction ended in `error`, when the chain exposes a reason. `reason`
19
+ * is a stable, chain-specific identifier (see `TonTxFailureReason`) a UI can
20
+ * translate; `message` is the English explanation with the remedy for consumers
21
+ * that only print text; `exitCode` is the raw contract/VM code when there is
22
+ * one, and `phase` names the execution phase that produced it (TON: `compute`
23
+ * or `action` — the same number means different things in each).
24
+ */
25
+ export type TxFailureInfo = {
26
+ reason: string;
27
+ message: string;
28
+ exitCode?: number;
29
+ phase?: string;
30
+ };
17
31
  export type TxStatusResult = {
18
32
  status: TxStatus;
19
33
  isKnown?: boolean;
20
34
  receipt?: TxReceiptInfo;
35
+ failure?: TxFailureInfo;
21
36
  };
22
37
  export type TxStatusInput<T extends Chain = Chain> = {
23
38
  chain: T;
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/status/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAOnC,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAA;AAEzE,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,0GAA0G;IAC1G,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACnD,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/tx/status/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAOnC,KAAK,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAA;AAEzE,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,0GAA0G;IAC1G,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI;IACnD,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAA"}
@@ -4,7 +4,11 @@ import { TxStatusResolver } from '../resolver.js';
4
4
  * Resolves a TON transaction by the hash of the external message that carried it.
5
5
  * Success requires the transaction to be un-aborted *and* to have cleared both the
6
6
  * compute and the action phase; a transaction the indexer knows but hasn't fully
7
- * described yet stays pending.
7
+ * described yet stays pending. The action phase matters because it is where the
8
+ * wallet actually emits the transfer: a transaction can pass compute and land
9
+ * un-aborted while moving nothing, with the seqno consumed either way. A failure
10
+ * comes back explained (`failure`) so the UI can say what went wrong and how to
11
+ * fix it.
8
12
  */
9
13
  export declare const getTonTxStatus: TxStatusResolver<OtherChain.Ton>;
10
14
  //# sourceMappingURL=ton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAM9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AA0D9C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAmC3D,CAAA"}
1
+ {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAO9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AA8B9C;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAgC3D,CAAA"}
@@ -1,37 +1,18 @@
1
1
  import { Chain } from '@vultisig/core-chain/Chain';
2
+ import { getTonTxFailure } from '@vultisig/core-chain/chains/ton/failure';
2
3
  import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
3
4
  import { rootApiUrl } from '@vultisig/core-config';
4
5
  import { attempt } from '@vultisig/lib-utils/attempt';
5
6
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
6
- /**
7
- * TVM exit codes 0 and 1 are the success conventions; any other code is a revert.
8
- * An absent code means the message had no compute phase (a plain transfer to a
9
- * wallet), which is not a failure.
10
- */
11
- const hasComputePhaseFailed = (computePhase) => {
12
- const exitCode = computePhase?.exit_code;
13
- return exitCode !== undefined && exitCode !== 0 && exitCode !== 1;
14
- };
15
- /**
16
- * The action phase is where the wallet contract actually emits the outgoing
17
- * transfer, so it is where the money moves. A transaction can pass its compute
18
- * phase and land un-aborted while its action phase moved nothing — the seqno is
19
- * consumed either way — so this is what separates a real send from a silent
20
- * no-op. `result_code` is checked alongside `success` because indexers do not
21
- * always populate both.
22
- */
23
- const hasActionPhaseFailed = (actionPhase) => {
24
- if (!actionPhase) {
25
- return false;
26
- }
27
- const { success, no_funds, result_code, skipped_actions } = actionPhase;
28
- return success === false || no_funds === true || (result_code ?? 0) !== 0 || (skipped_actions ?? 0) > 0;
29
- };
30
7
  /**
31
8
  * Resolves a TON transaction by the hash of the external message that carried it.
32
9
  * Success requires the transaction to be un-aborted *and* to have cleared both the
33
10
  * compute and the action phase; a transaction the indexer knows but hasn't fully
34
- * described yet stays pending.
11
+ * described yet stays pending. The action phase matters because it is where the
12
+ * wallet actually emits the transfer: a transaction can pass compute and land
13
+ * un-aborted while moving nothing, with the seqno consumed either way. A failure
14
+ * comes back explained (`failure`) so the UI can say what went wrong and how to
15
+ * fix it.
35
16
  */
36
17
  export const getTonTxStatus = async ({ hash }) => {
37
18
  const url = `${rootApiUrl}/ton/v3/transactionsByMessage?msg_hash=${hash}&direction=in&limit=1`;
@@ -55,9 +36,7 @@ export const getTonTxStatus = async ({ hash }) => {
55
36
  feeTicker: feeCoin.ticker,
56
37
  }
57
38
  : undefined;
58
- const failed = description.aborted === true ||
59
- hasComputePhaseFailed(description.compute_ph) ||
60
- hasActionPhaseFailed(description.action);
61
- return { status: failed ? 'error' : 'success', receipt };
39
+ const failure = getTonTxFailure(description);
40
+ return failure ? { status: 'error', receipt, failure } : { status: 'success', receipt };
62
41
  };
63
42
  //# sourceMappingURL=ton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AA+B7D;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,YAAyC,EAAW,EAAE;IACnF,MAAM,QAAQ,GAAG,YAAY,EAAE,SAAS,CAAA;IAExC,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAA;AACnE,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,oBAAoB,GAAG,CAAC,WAAuC,EAAW,EAAE;IAChF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,WAAW,CAAA;IAEvE,OAAO,OAAO,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;AACzG,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjF,MAAM,GAAG,GAAG,GAAG,UAAU,0CAA0C,IAAI,uBAAuB,CAAA;IAE9F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,CAA0B,GAAG,CAAC,CAAC,CAAA;IAEvF,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAA;IAE1B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,6EAA6E;QAC7E,8CAA8C;QAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAA;IAC5B,MAAM,OAAO,GACX,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,EAAE;QAC7B,CAAC,CAAC;YACE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,OAAO,CAAC,QAAQ;YAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;SAC1B;QACH,CAAC,CAAC,SAAS,CAAA;IAEf,MAAM,MAAM,GACV,WAAW,CAAC,OAAO,KAAK,IAAI;QAC5B,qBAAqB,CAAC,WAAW,CAAC,UAAU,CAAC;QAC7C,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAA;AAC1D,CAAC,CAAA"}
1
+ {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/tx/status/resolvers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAc,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAgC7D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjF,MAAM,GAAG,GAAG,GAAG,UAAU,0CAA0C,IAAI,uBAAuB,CAAA;IAE9F,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,CAAC,QAAQ,CAA0B,GAAG,CAAC,CAAC,CAAA;IAEvF,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IAC9C,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAA;IAE1B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,6EAA6E;QAC7E,8CAA8C;QAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC7C,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAA;IAC5B,MAAM,OAAO,GACX,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,EAAE;QAC7B,CAAC,CAAC;YACE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,OAAO,CAAC,QAAQ;YAC7B,SAAS,EAAE,OAAO,CAAC,MAAM;SAC1B;QACH,CAAC,CAAC,SAAS,CAAA;IAEf,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAA;IAE5C,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;AACzF,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/core-chain",
3
- "version": "5.1.0",
3
+ "version": "5.3.0",
4
4
  "description": "Blockchain chain logic shared across Vultisig clients",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -880,6 +880,16 @@
880
880
  "import": "./dist/chains/solana/spl/getSplAssociatedAccount.js",
881
881
  "default": "./dist/chains/solana/spl/getSplAssociatedAccount.js"
882
882
  },
883
+ "./chains/solana/spl/verification": {
884
+ "types": "./dist/chains/solana/spl/verification.d.ts",
885
+ "import": "./dist/chains/solana/spl/verification.js",
886
+ "default": "./dist/chains/solana/spl/verification.js"
887
+ },
888
+ "./chains/solana/spl/verifiedRegistry": {
889
+ "types": "./dist/chains/solana/spl/verifiedRegistry.d.ts",
890
+ "import": "./dist/chains/solana/spl/verifiedRegistry.js",
891
+ "default": "./dist/chains/solana/spl/verifiedRegistry.js"
892
+ },
883
893
  "./chains/solana/staking/apyResolver": {
884
894
  "types": "./dist/chains/solana/staking/apyResolver.d.ts",
885
895
  "import": "./dist/chains/solana/staking/apyResolver.js",
@@ -1010,6 +1020,11 @@
1010
1020
  "import": "./dist/chains/ton/config.js",
1011
1021
  "default": "./dist/chains/ton/config.js"
1012
1022
  },
1023
+ "./chains/ton/failure": {
1024
+ "types": "./dist/chains/ton/failure.d.ts",
1025
+ "import": "./dist/chains/ton/failure.js",
1026
+ "default": "./dist/chains/ton/failure.js"
1027
+ },
1013
1028
  "./chains/ton/jetton/symbol": {
1014
1029
  "types": "./dist/chains/ton/jetton/symbol.d.ts",
1015
1030
  "import": "./dist/chains/ton/jetton/symbol.js",
@@ -1055,6 +1070,16 @@
1055
1070
  "import": "./dist/chains/ton/staking.js",
1056
1071
  "default": "./dist/chains/ton/staking.js"
1057
1072
  },
1073
+ "./chains/ton/wallet": {
1074
+ "types": "./dist/chains/ton/wallet.d.ts",
1075
+ "import": "./dist/chains/ton/wallet.js",
1076
+ "default": "./dist/chains/ton/wallet.js"
1077
+ },
1078
+ "./chains/ton/walletV5R1": {
1079
+ "types": "./dist/chains/ton/walletV5R1.d.ts",
1080
+ "import": "./dist/chains/ton/walletV5R1.js",
1081
+ "default": "./dist/chains/ton/walletV5R1.js"
1082
+ },
1058
1083
  "./chains/tron/config": {
1059
1084
  "types": "./dist/chains/tron/config.d.ts",
1060
1085
  "import": "./dist/chains/tron/config.js",
@@ -1320,6 +1345,11 @@
1320
1345
  "import": "./dist/coin/find/resolvers/ton.js",
1321
1346
  "default": "./dist/coin/find/resolvers/ton.js"
1322
1347
  },
1348
+ "./coin/jupiter/api": {
1349
+ "types": "./dist/coin/jupiter/api.d.ts",
1350
+ "import": "./dist/coin/jupiter/api.js",
1351
+ "default": "./dist/coin/jupiter/api.js"
1352
+ },
1323
1353
  "./coin/jupiter/token": {
1324
1354
  "types": "./dist/coin/jupiter/token.d.ts",
1325
1355
  "import": "./dist/coin/jupiter/token.js",
@@ -1450,6 +1480,11 @@
1450
1480
  "import": "./dist/coin/token/metadata/resolvers/tron.js",
1451
1481
  "default": "./dist/coin/token/metadata/resolvers/tron.js"
1452
1482
  },
1483
+ "./coin/tokenSymbol": {
1484
+ "types": "./dist/coin/tokenSymbol.d.ts",
1485
+ "import": "./dist/coin/tokenSymbol.js",
1486
+ "default": "./dist/coin/tokenSymbol.js"
1487
+ },
1453
1488
  "./coin/tokenVerification": {
1454
1489
  "types": "./dist/coin/tokenVerification.d.ts",
1455
1490
  "import": "./dist/coin/tokenVerification.js",
@@ -2233,6 +2268,11 @@
2233
2268
  "import": "./dist/tx/fee/evm/evmGasLimit.js",
2234
2269
  "default": "./dist/tx/fee/evm/evmGasLimit.js"
2235
2270
  },
2271
+ "./tx/fee/evm/gasPrice": {
2272
+ "types": "./dist/tx/fee/evm/gasPrice.d.ts",
2273
+ "import": "./dist/tx/fee/evm/gasPrice.js",
2274
+ "default": "./dist/tx/fee/evm/gasPrice.js"
2275
+ },
2236
2276
  "./tx/fee/evm/gwei": {
2237
2277
  "types": "./dist/tx/fee/evm/gwei.d.ts",
2238
2278
  "import": "./dist/tx/fee/evm/gwei.js",