@vultisig/core-chain 5.2.0 → 5.4.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 (122) hide show
  1. package/CHANGELOG.md +58 -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/jetton/symbol.d.ts +3 -5
  11. package/dist/chains/ton/jetton/symbol.d.ts.map +1 -1
  12. package/dist/chains/ton/jetton/symbol.js +5 -58
  13. package/dist/chains/ton/jetton/symbol.js.map +1 -1
  14. package/dist/chains/ton/jetton/verification.d.ts +1 -1
  15. package/dist/chains/ton/jetton/verification.d.ts.map +1 -1
  16. package/dist/chains/ton/jetton/verification.js +3 -3
  17. package/dist/chains/ton/jetton/verification.js.map +1 -1
  18. package/dist/chains/ton/jetton/verifiedRegistry.d.ts +1 -1
  19. package/dist/chains/ton/jetton/verifiedRegistry.d.ts.map +1 -1
  20. package/dist/chains/ton/jetton/verifiedRegistry.js +3 -3
  21. package/dist/chains/ton/jetton/verifiedRegistry.js.map +1 -1
  22. package/dist/coin/balance/resolvers/tron.d.ts.map +1 -1
  23. package/dist/coin/balance/resolvers/tron.js +22 -34
  24. package/dist/coin/balance/resolvers/tron.js.map +1 -1
  25. package/dist/coin/coingecko/coingeckoToken.d.ts +11 -0
  26. package/dist/coin/coingecko/coingeckoToken.d.ts.map +1 -1
  27. package/dist/coin/coingecko/getCoingeckoId.d.ts +10 -0
  28. package/dist/coin/coingecko/getCoingeckoId.d.ts.map +1 -1
  29. package/dist/coin/coingecko/getCoingeckoId.js +30 -1
  30. package/dist/coin/coingecko/getCoingeckoId.js.map +1 -1
  31. package/dist/coin/find/resolvers/solana/index.d.ts +22 -1
  32. package/dist/coin/find/resolvers/solana/index.d.ts.map +1 -1
  33. package/dist/coin/find/resolvers/solana/index.js +79 -11
  34. package/dist/coin/find/resolvers/solana/index.js.map +1 -1
  35. package/dist/coin/jupiter/api.d.ts +18 -0
  36. package/dist/coin/jupiter/api.d.ts.map +1 -0
  37. package/dist/coin/jupiter/api.js +52 -0
  38. package/dist/coin/jupiter/api.js.map +1 -0
  39. package/dist/coin/jupiter/token.d.ts +4 -0
  40. package/dist/coin/jupiter/token.d.ts.map +1 -1
  41. package/dist/coin/jupiter/token.js.map +1 -1
  42. package/dist/coin/token/metadata/resolvers/solana.d.ts +3 -1
  43. package/dist/coin/token/metadata/resolvers/solana.d.ts.map +1 -1
  44. package/dist/coin/token/metadata/resolvers/solana.js +10 -6
  45. package/dist/coin/token/metadata/resolvers/solana.js.map +1 -1
  46. package/dist/coin/tokenSymbol.d.ts +10 -0
  47. package/dist/coin/tokenSymbol.d.ts.map +1 -0
  48. package/dist/coin/tokenSymbol.js +62 -0
  49. package/dist/coin/tokenSymbol.js.map +1 -0
  50. package/dist/security/blockaid/evmChains.d.ts +1 -0
  51. package/dist/security/blockaid/evmChains.d.ts.map +1 -1
  52. package/dist/security/blockaid/evmChains.js +3 -2
  53. package/dist/security/blockaid/evmChains.js.map +1 -1
  54. package/dist/security/blockaid/simulationChains.d.ts +1 -1
  55. package/dist/security/blockaid/simulationChains.d.ts.map +1 -1
  56. package/dist/security/blockaid/tx/simulation/api/core.d.ts +17 -0
  57. package/dist/security/blockaid/tx/simulation/api/core.d.ts.map +1 -1
  58. package/dist/security/blockaid/tx/simulation/api/core.js +58 -41
  59. package/dist/security/blockaid/tx/simulation/api/core.js.map +1 -1
  60. package/dist/security/blockaid/validationChains.d.ts +1 -1
  61. package/dist/security/blockaid/validationChains.d.ts.map +1 -1
  62. package/dist/swap/general/GeneralSwapQuote.d.ts +13 -0
  63. package/dist/swap/general/GeneralSwapQuote.d.ts.map +1 -1
  64. package/dist/swap/general/cowswap/api/getCowSwapQuote.d.ts.map +1 -1
  65. package/dist/swap/general/cowswap/api/getCowSwapQuote.js +5 -0
  66. package/dist/swap/general/cowswap/api/getCowSwapQuote.js.map +1 -1
  67. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.d.ts.map +1 -1
  68. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js +4 -0
  69. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js.map +1 -1
  70. package/dist/swap/general/kyber/api/tx.d.ts.map +1 -1
  71. package/dist/swap/general/kyber/api/tx.js +9 -1
  72. package/dist/swap/general/kyber/api/tx.js.map +1 -1
  73. package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts.map +1 -1
  74. package/dist/swap/general/lifi/api/getLifiSwapQuote.js +2 -0
  75. package/dist/swap/general/lifi/api/getLifiSwapQuote.js.map +1 -1
  76. package/dist/swap/general/oneInch/api/getOneInchSwapQuote.d.ts.map +1 -1
  77. package/dist/swap/general/oneInch/api/getOneInchSwapQuote.js +5 -0
  78. package/dist/swap/general/oneInch/api/getOneInchSwapQuote.js.map +1 -1
  79. package/dist/swap/general/ruji/api/getRujiTradeSwapQuote.d.ts.map +1 -1
  80. package/dist/swap/general/ruji/api/getRujiTradeSwapQuote.js +1 -0
  81. package/dist/swap/general/ruji/api/getRujiTradeSwapQuote.js.map +1 -1
  82. package/dist/swap/general/swapkit/SwapKitEnabledChains.d.ts +3 -3
  83. package/dist/swap/general/swapkit/SwapKitEnabledChains.js +3 -3
  84. package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
  85. package/dist/swap/general/swapkit/api/getSwapKitQuote.js +41 -14
  86. package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
  87. package/dist/swap/native/NativeSwapQuote.d.ts +9 -1
  88. package/dist/swap/native/NativeSwapQuote.d.ts.map +1 -1
  89. package/dist/swap/native/api/affiliate.d.ts +6 -1
  90. package/dist/swap/native/api/affiliate.d.ts.map +1 -1
  91. package/dist/swap/native/api/affiliate.js +17 -6
  92. package/dist/swap/native/api/affiliate.js.map +1 -1
  93. package/dist/swap/native/api/getNativeSwapQuote.d.ts.map +1 -1
  94. package/dist/swap/native/api/getNativeSwapQuote.js +9 -10
  95. package/dist/swap/native/api/getNativeSwapQuote.js.map +1 -1
  96. package/dist/swap/quote/SwapQuote.d.ts +13 -0
  97. package/dist/swap/quote/SwapQuote.d.ts.map +1 -1
  98. package/dist/tx/fee/evm/clampEvmPriorityFee.d.ts +10 -4
  99. package/dist/tx/fee/evm/clampEvmPriorityFee.d.ts.map +1 -1
  100. package/dist/tx/fee/evm/clampEvmPriorityFee.js +35 -14
  101. package/dist/tx/fee/evm/clampEvmPriorityFee.js.map +1 -1
  102. package/dist/tx/fee/evm/evmGasLimit.d.ts +29 -0
  103. package/dist/tx/fee/evm/evmGasLimit.d.ts.map +1 -1
  104. package/dist/tx/fee/evm/evmGasLimit.js +47 -17
  105. package/dist/tx/fee/evm/evmGasLimit.js.map +1 -1
  106. package/dist/tx/fee/evm/gasPrice.d.ts +4 -0
  107. package/dist/tx/fee/evm/gasPrice.d.ts.map +1 -0
  108. package/dist/tx/fee/evm/gasPrice.js +4 -0
  109. package/dist/tx/fee/evm/gasPrice.js.map +1 -0
  110. package/dist/tx/fee/evm/maxPriorityFeePerGas.d.ts +8 -0
  111. package/dist/tx/fee/evm/maxPriorityFeePerGas.d.ts.map +1 -1
  112. package/dist/tx/fee/evm/maxPriorityFeePerGas.js +30 -1
  113. package/dist/tx/fee/evm/maxPriorityFeePerGas.js.map +1 -1
  114. package/dist/utils/isValidRecipient.d.ts +13 -0
  115. package/dist/utils/isValidRecipient.d.ts.map +1 -0
  116. package/dist/utils/isValidRecipient.js +22 -0
  117. package/dist/utils/isValidRecipient.js.map +1 -0
  118. package/dist/utils/isValidSolanaRecipient.d.ts +3 -0
  119. package/dist/utils/isValidSolanaRecipient.d.ts.map +1 -0
  120. package/dist/utils/isValidSolanaRecipient.js +13 -0
  121. package/dist/utils/isValidSolanaRecipient.js.map +1 -0
  122. package/package.json +38 -2
@@ -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"}
@@ -0,0 +1,13 @@
1
+ import { isValidAddress } from './isValidAddress.js';
2
+ type Input = Parameters<typeof isValidAddress>[0];
3
+ export { isValidSolanaRecipient } from './isValidSolanaRecipient.js';
4
+ /**
5
+ * Validate an address specifically for use as a wallet-controlled recipient.
6
+ *
7
+ * Generic Solana address validation intentionally accepts program-derived
8
+ * addresses and token accounts because they are valid account identifiers.
9
+ * A direct send recipient is narrower: it must be an on-curve public key that
10
+ * can be controlled by a wallet signer.
11
+ */
12
+ export declare const isValidRecipient: (input: Input) => boolean;
13
+ //# sourceMappingURL=isValidRecipient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidRecipient.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidRecipient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AAEjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,KAAG,OAU/C,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { Chain } from '@vultisig/core-chain/Chain';
2
+ import { isValidAddress } from './isValidAddress.js';
3
+ import { isValidSolanaRecipient } from './isValidSolanaRecipient.js';
4
+ export { isValidSolanaRecipient } from './isValidSolanaRecipient.js';
5
+ /**
6
+ * Validate an address specifically for use as a wallet-controlled recipient.
7
+ *
8
+ * Generic Solana address validation intentionally accepts program-derived
9
+ * addresses and token accounts because they are valid account identifiers.
10
+ * A direct send recipient is narrower: it must be an on-curve public key that
11
+ * can be controlled by a wallet signer.
12
+ */
13
+ export const isValidRecipient = (input) => {
14
+ if (!isValidAddress(input)) {
15
+ return false;
16
+ }
17
+ if (input.chain !== Chain.Solana) {
18
+ return true;
19
+ }
20
+ return isValidSolanaRecipient(input.address);
21
+ };
22
+ //# sourceMappingURL=isValidRecipient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidRecipient.js","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidRecipient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAIjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAW,EAAE;IACxD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC9C,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Check wallet-recipient curve membership without importing the Solana RPC stack. */
2
+ export declare const isValidSolanaRecipient: (address: string) => boolean;
3
+ //# sourceMappingURL=isValidSolanaRecipient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidSolanaRecipient.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidSolanaRecipient.ts"],"names":[],"mappings":"AAGA,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,OAOxD,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { ed25519 } from '@noble/curves/ed25519.js';
2
+ import bs58 from 'bs58';
3
+ /** Check wallet-recipient curve membership without importing the Solana RPC stack. */
4
+ export const isValidSolanaRecipient = (address) => {
5
+ try {
6
+ ed25519.Point.fromBytes(bs58.decode(address.trim()));
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ };
13
+ //# sourceMappingURL=isValidSolanaRecipient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidSolanaRecipient.js","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidSolanaRecipient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,sFAAsF;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAW,EAAE;IACjE,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QACpD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/core-chain",
3
- "version": "5.2.0",
3
+ "version": "5.4.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",
@@ -1335,6 +1345,11 @@
1335
1345
  "import": "./dist/coin/find/resolvers/ton.js",
1336
1346
  "default": "./dist/coin/find/resolvers/ton.js"
1337
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
+ },
1338
1353
  "./coin/jupiter/token": {
1339
1354
  "types": "./dist/coin/jupiter/token.d.ts",
1340
1355
  "import": "./dist/coin/jupiter/token.js",
@@ -1465,6 +1480,11 @@
1465
1480
  "import": "./dist/coin/token/metadata/resolvers/tron.js",
1466
1481
  "default": "./dist/coin/token/metadata/resolvers/tron.js"
1467
1482
  },
1483
+ "./coin/tokenSymbol": {
1484
+ "types": "./dist/coin/tokenSymbol.d.ts",
1485
+ "import": "./dist/coin/tokenSymbol.js",
1486
+ "default": "./dist/coin/tokenSymbol.js"
1487
+ },
1468
1488
  "./coin/tokenVerification": {
1469
1489
  "types": "./dist/coin/tokenVerification.d.ts",
1470
1490
  "import": "./dist/coin/tokenVerification.js",
@@ -2248,6 +2268,11 @@
2248
2268
  "import": "./dist/tx/fee/evm/evmGasLimit.js",
2249
2269
  "default": "./dist/tx/fee/evm/evmGasLimit.js"
2250
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
+ },
2251
2276
  "./tx/fee/evm/gwei": {
2252
2277
  "types": "./dist/tx/fee/evm/gwei.d.ts",
2253
2278
  "import": "./dist/tx/fee/evm/gwei.js",
@@ -2428,6 +2453,16 @@
2428
2453
  "import": "./dist/utils/isValidAddress.js",
2429
2454
  "default": "./dist/utils/isValidAddress.js"
2430
2455
  },
2456
+ "./utils/isValidRecipient": {
2457
+ "types": "./dist/utils/isValidRecipient.d.ts",
2458
+ "import": "./dist/utils/isValidRecipient.js",
2459
+ "default": "./dist/utils/isValidRecipient.js"
2460
+ },
2461
+ "./utils/isValidSolanaRecipient": {
2462
+ "types": "./dist/utils/isValidSolanaRecipient.d.ts",
2463
+ "import": "./dist/utils/isValidSolanaRecipient.js",
2464
+ "default": "./dist/utils/isValidSolanaRecipient.js"
2465
+ },
2431
2466
  "./utils/isValidTokenId": {
2432
2467
  "types": "./dist/utils/isValidTokenId.d.ts",
2433
2468
  "import": "./dist/utils/isValidTokenId.js",
@@ -2456,6 +2491,7 @@
2456
2491
  "@cosmjs/stargate": "^0.39.0",
2457
2492
  "@lifi/sdk": "^4.1.0",
2458
2493
  "@mysten/sui": "^2.22.1",
2494
+ "@noble/curves": "^2.2.0",
2459
2495
  "@noble/hashes": "^2.2.0",
2460
2496
  "@polkadot/api": "^16.5.6",
2461
2497
  "@polkadot/util": "^14.0.3",
@@ -2466,7 +2502,7 @@
2466
2502
  "@ton/crypto": "^3.3.0",
2467
2503
  "@trustwallet/wallet-core": "^4.7.3",
2468
2504
  "@vultisig/core-config": "0.9.1",
2469
- "@vultisig/lib-utils": "0.10.6",
2505
+ "@vultisig/lib-utils": "0.10.7",
2470
2506
  "@vultisig/mpc-types": "0.3.0",
2471
2507
  "bip32": "^5.0.1",
2472
2508
  "bitcoinjs-lib": "^7.0.1",