@vultisig/core-chain 2.28.0 → 2.29.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.
- package/CHANGELOG.md +138 -0
- package/dist/chains/cosmos/cosmosGasLimitRecord.js +3 -3
- package/dist/chains/cosmos/cosmosGasLimitRecord.js.map +1 -1
- package/dist/chains/cosmos/gas.d.ts +28 -1
- package/dist/chains/cosmos/gas.d.ts.map +1 -1
- package/dist/chains/cosmos/gas.js +37 -5
- package/dist/chains/cosmos/gas.js.map +1 -1
- package/dist/chains/cosmos/resolveCosmosGasLimit.d.ts +82 -0
- package/dist/chains/cosmos/resolveCosmosGasLimit.d.ts.map +1 -0
- package/dist/chains/cosmos/resolveCosmosGasLimit.js +71 -0
- package/dist/chains/cosmos/resolveCosmosGasLimit.js.map +1 -0
- package/dist/chains/cosmos/terraClassicTax.d.ts +68 -0
- package/dist/chains/cosmos/terraClassicTax.d.ts.map +1 -1
- package/dist/chains/cosmos/terraClassicTax.js +85 -0
- package/dist/chains/cosmos/terraClassicTax.js.map +1 -1
- package/dist/chains/sui/client.d.ts +11 -2
- package/dist/chains/sui/client.d.ts.map +1 -1
- package/dist/chains/sui/client.js +5 -4
- package/dist/chains/sui/client.js.map +1 -1
- package/dist/chains/sui/config.d.ts +28 -0
- package/dist/chains/sui/config.d.ts.map +1 -1
- package/dist/chains/sui/config.js +27 -0
- package/dist/chains/sui/config.js.map +1 -1
- package/dist/chains/sui/listAllCoins.d.ts +44 -0
- package/dist/chains/sui/listAllCoins.d.ts.map +1 -0
- package/dist/chains/sui/listAllCoins.js +43 -0
- package/dist/chains/sui/listAllCoins.js.map +1 -0
- package/dist/chains/sui/transactionResult.d.ts +59 -0
- package/dist/chains/sui/transactionResult.d.ts.map +1 -0
- package/dist/chains/sui/transactionResult.js +43 -0
- package/dist/chains/sui/transactionResult.js.map +1 -0
- package/dist/coin/balance/resolvers/sui.d.ts.map +1 -1
- package/dist/coin/balance/resolvers/sui.js +6 -3
- package/dist/coin/balance/resolvers/sui.js.map +1 -1
- package/dist/coin/token/metadata/chains.d.ts +1 -1
- package/dist/coin/token/metadata/chains.d.ts.map +1 -1
- package/dist/coin/token/metadata/chains.js +1 -0
- package/dist/coin/token/metadata/chains.js.map +1 -1
- package/dist/coin/token/metadata/index.d.ts.map +1 -1
- package/dist/coin/token/metadata/index.js +2 -0
- package/dist/coin/token/metadata/index.js.map +1 -1
- package/dist/coin/token/metadata/resolvers/ripple.d.ts +17 -0
- package/dist/coin/token/metadata/resolvers/ripple.d.ts.map +1 -0
- package/dist/coin/token/metadata/resolvers/ripple.js +44 -0
- package/dist/coin/token/metadata/resolvers/ripple.js.map +1 -0
- package/dist/coin/token/metadata/resolvers/sui.d.ts +1 -1
- package/dist/coin/token/metadata/resolvers/sui.d.ts.map +1 -1
- package/dist/coin/token/metadata/resolvers/sui.js +6 -3
- package/dist/coin/token/metadata/resolvers/sui.js.map +1 -1
- package/dist/swap/general/jupiter/api/getJupiterSwapQuote.d.ts.map +1 -1
- package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js +2 -1
- package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js.map +1 -1
- package/dist/swap/native/limitSwapMemo.d.ts +35 -5
- package/dist/swap/native/limitSwapMemo.d.ts.map +1 -1
- package/dist/swap/native/limitSwapMemo.js +32 -7
- package/dist/swap/native/limitSwapMemo.js.map +1 -1
- package/dist/tx/broadcast/resolvers/sui.d.ts +2 -8
- package/dist/tx/broadcast/resolvers/sui.d.ts.map +1 -1
- package/dist/tx/broadcast/resolvers/sui.js +18 -17
- package/dist/tx/broadcast/resolvers/sui.js.map +1 -1
- package/dist/tx/broadcast/transientRetry.d.ts.map +1 -1
- package/dist/tx/broadcast/transientRetry.js +30 -2
- package/dist/tx/broadcast/transientRetry.js.map +1 -1
- package/dist/tx/hash/resolvers/sui.d.ts.map +1 -1
- package/dist/tx/hash/resolvers/sui.js +13 -3
- package/dist/tx/hash/resolvers/sui.js.map +1 -1
- package/dist/tx/status/resolvers/sui.d.ts.map +1 -1
- package/dist/tx/status/resolvers/sui.js +15 -6
- package/dist/tx/status/resolvers/sui.js.map +1 -1
- package/dist/utils/isValidTokenId.d.ts +11 -0
- package/dist/utils/isValidTokenId.d.ts.map +1 -1
- package/dist/utils/isValidTokenId.js +31 -2
- package/dist/utils/isValidTokenId.js.map +1 -1
- package/package.json +22 -7
- package/dist/chains/cosmos/resolveCosmosGasFee.d.ts +0 -49
- package/dist/chains/cosmos/resolveCosmosGasFee.d.ts.map +0 -1
- package/dist/chains/cosmos/resolveCosmosGasFee.js +0 -35
- package/dist/chains/cosmos/resolveCosmosGasFee.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isValidStructTag } from '@mysten/sui/utils';
|
|
2
2
|
import { Chain } from '@vultisig/core-chain/Chain';
|
|
3
|
-
import { isValidXrplCurrencyCode, parseRippleTokenId } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
|
|
3
|
+
import { isValidXrplCurrencyCode, parseRippleTokenId, rippleTokenId, toXrplCurrencyCode, } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
|
|
4
4
|
import { attempt } from '@vultisig/lib-utils/attempt';
|
|
5
5
|
import { isValidAddress } from './isValidAddress.js';
|
|
6
6
|
/**
|
|
@@ -22,8 +22,37 @@ export const isValidTokenId = ({ chain, id, walletCore }) => {
|
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
24
|
const { currency, issuer } = parsed.data;
|
|
25
|
-
|
|
25
|
+
// Accept either an on-ledger currency code (`USD`, or the 40-char hex form)
|
|
26
|
+
// or a human ticker (`SOLO`, `RLUSD`) — the latter is how tokens are
|
|
27
|
+
// referenced on explorers like xrpscan. `toXrplCurrencyCode` normalises a
|
|
28
|
+
// ticker to its on-ledger code; anything it cannot encode (e.g. a name
|
|
29
|
+
// longer than 20 bytes) is rejected.
|
|
30
|
+
const currencyCode = attempt(() => toXrplCurrencyCode(currency));
|
|
31
|
+
if ('error' in currencyCode) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return isValidXrplCurrencyCode(currencyCode.data) && isValidAddress({ chain, address: issuer, walletCore });
|
|
26
35
|
}
|
|
27
36
|
return isValidAddress({ chain, address: id, walletCore });
|
|
28
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* Canonical form of a custom token id, for storage and equality.
|
|
40
|
+
*
|
|
41
|
+
* Only XRPL needs normalising: a token may be entered by its human ticker
|
|
42
|
+
* (`SOLO.rsoLo…`, as shown on explorers) or by its on-ledger currency code, and
|
|
43
|
+
* both must resolve to the same id so a manually added token dedupes against the
|
|
44
|
+
* same token discovered from the ledger — which always uses the on-ledger code.
|
|
45
|
+
* `rippleTokenId` re-encodes the currency to that canonical form. For every other
|
|
46
|
+
* chain the id is already canonical and returned unchanged.
|
|
47
|
+
*/
|
|
48
|
+
export const normalizeTokenId = ({ chain, id }) => {
|
|
49
|
+
if (chain !== Chain.Ripple) {
|
|
50
|
+
return id;
|
|
51
|
+
}
|
|
52
|
+
const canonical = attempt(() => rippleTokenId(parseRippleTokenId(id.trim())));
|
|
53
|
+
if ('error' in canonical) {
|
|
54
|
+
return id;
|
|
55
|
+
}
|
|
56
|
+
return canonical.data;
|
|
57
|
+
};
|
|
29
58
|
//# sourceMappingURL=isValidTokenId.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isValidTokenId.js","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidTokenId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"isValidTokenId.js","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidTokenId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAQjD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAS,EAAE,EAAE;IACjE,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC3D,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAA;QAExC,4EAA4E;QAC5E,qEAAqE;QACrE,0EAA0E;QAC1E,uEAAuE;QACvE,qCAAqC;QACrC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;QAChE,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IAC7G,CAAC;IAED,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAA+B,EAAU,EAAE;IACrF,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7E,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,CAAA;AACvB,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-chain",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.29.1",
|
|
4
4
|
"description": "Blockchain chain logic shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -375,10 +375,10 @@
|
|
|
375
375
|
"import": "./dist/chains/cosmos/qbtc/waitForQbtcTxInclusion.js",
|
|
376
376
|
"default": "./dist/chains/cosmos/qbtc/waitForQbtcTxInclusion.js"
|
|
377
377
|
},
|
|
378
|
-
"./chains/cosmos/
|
|
379
|
-
"types": "./dist/chains/cosmos/
|
|
380
|
-
"import": "./dist/chains/cosmos/
|
|
381
|
-
"default": "./dist/chains/cosmos/
|
|
378
|
+
"./chains/cosmos/resolveCosmosGasLimit": {
|
|
379
|
+
"types": "./dist/chains/cosmos/resolveCosmosGasLimit.d.ts",
|
|
380
|
+
"import": "./dist/chains/cosmos/resolveCosmosGasLimit.js",
|
|
381
|
+
"default": "./dist/chains/cosmos/resolveCosmosGasLimit.js"
|
|
382
382
|
},
|
|
383
383
|
"./chains/cosmos/staking/lcdQueries": {
|
|
384
384
|
"types": "./dist/chains/cosmos/staking/lcdQueries.d.ts",
|
|
@@ -820,11 +820,21 @@
|
|
|
820
820
|
"import": "./dist/chains/sui/config.js",
|
|
821
821
|
"default": "./dist/chains/sui/config.js"
|
|
822
822
|
},
|
|
823
|
+
"./chains/sui/listAllCoins": {
|
|
824
|
+
"types": "./dist/chains/sui/listAllCoins.d.ts",
|
|
825
|
+
"import": "./dist/chains/sui/listAllCoins.js",
|
|
826
|
+
"default": "./dist/chains/sui/listAllCoins.js"
|
|
827
|
+
},
|
|
823
828
|
"./chains/sui/sign": {
|
|
824
829
|
"types": "./dist/chains/sui/sign.d.ts",
|
|
825
830
|
"import": "./dist/chains/sui/sign.js",
|
|
826
831
|
"default": "./dist/chains/sui/sign.js"
|
|
827
832
|
},
|
|
833
|
+
"./chains/sui/transactionResult": {
|
|
834
|
+
"types": "./dist/chains/sui/transactionResult.d.ts",
|
|
835
|
+
"import": "./dist/chains/sui/transactionResult.js",
|
|
836
|
+
"default": "./dist/chains/sui/transactionResult.js"
|
|
837
|
+
},
|
|
828
838
|
"./chains/thorchain/ruji/services/fetchMergeableTokenBalances": {
|
|
829
839
|
"types": "./dist/chains/thorchain/ruji/services/fetchMergeableTokenBalances.d.ts",
|
|
830
840
|
"import": "./dist/chains/thorchain/ruji/services/fetchMergeableTokenBalances.js",
|
|
@@ -1235,6 +1245,11 @@
|
|
|
1235
1245
|
"import": "./dist/coin/token/metadata/resolvers/evm.js",
|
|
1236
1246
|
"default": "./dist/coin/token/metadata/resolvers/evm.js"
|
|
1237
1247
|
},
|
|
1248
|
+
"./coin/token/metadata/resolvers/ripple": {
|
|
1249
|
+
"types": "./dist/coin/token/metadata/resolvers/ripple.d.ts",
|
|
1250
|
+
"import": "./dist/coin/token/metadata/resolvers/ripple.js",
|
|
1251
|
+
"default": "./dist/coin/token/metadata/resolvers/ripple.js"
|
|
1252
|
+
},
|
|
1238
1253
|
"./coin/token/metadata/resolvers/solana": {
|
|
1239
1254
|
"types": "./dist/coin/token/metadata/resolvers/solana.d.ts",
|
|
1240
1255
|
"import": "./dist/coin/token/metadata/resolvers/solana.js",
|
|
@@ -2159,13 +2174,13 @@
|
|
|
2159
2174
|
},
|
|
2160
2175
|
"dependencies": {
|
|
2161
2176
|
"7z-wasm": "^1.2.0",
|
|
2162
|
-
"@bufbuild/protobuf": "^2.
|
|
2177
|
+
"@bufbuild/protobuf": "^2.13.0",
|
|
2163
2178
|
"@cosmjs/amino": "^0.39.0",
|
|
2164
2179
|
"@cosmjs/encoding": "^0.39.0",
|
|
2165
2180
|
"@cosmjs/proto-signing": "^0.39.0",
|
|
2166
2181
|
"@cosmjs/stargate": "^0.39.0",
|
|
2167
2182
|
"@lifi/sdk": "^4.1.0",
|
|
2168
|
-
"@mysten/sui": "^2.
|
|
2183
|
+
"@mysten/sui": "^2.22.1",
|
|
2169
2184
|
"@noble/hashes": "^1.8.0",
|
|
2170
2185
|
"@polkadot/api": "^16.5.6",
|
|
2171
2186
|
"@polkadot/util": "^14.0.3",
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolves the effective Cosmos gas limit and fee amount for a native send,
|
|
3
|
-
* honoring a relayed dynamic `gas_limit` when present.
|
|
4
|
-
*
|
|
5
|
-
* Shared by the signing-inputs resolver (what gets signed) and the fee-display
|
|
6
|
-
* resolver (what the user sees) so the shown and signed fee can never drift —
|
|
7
|
-
* the gas limit is part of the SignDoc, so both sides MUST agree.
|
|
8
|
-
*
|
|
9
|
-
* When the relayed limit exceeds the static per-chain limit, the fee amount is
|
|
10
|
-
* scaled proportionally with a ceiling (exact integer math) so the tx pays for
|
|
11
|
-
* the extra gas. Below or equal to the static limit, both values are left
|
|
12
|
-
* untouched, keeping the non-dynamic path byte-identical.
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* COSMOS-02: an IBC transfer (ICS-20 `MsgTransfer`, optionally PFM-forwarded
|
|
16
|
-
* via memo) does measurably more work on the source leg than a plain bank
|
|
17
|
-
* send — channel-state writes plus a relayer event — so the flat per-chain
|
|
18
|
-
* limit (calibrated for `MsgSend`) is undersized and can run out of gas
|
|
19
|
-
* mid-execution: the fee is spent, the transfer fails, and funds don't move
|
|
20
|
-
* but the fee is still burned. PFM hops are budgeted by each forwarding
|
|
21
|
-
* chain, not the source leg here, so ×2 headroom on the source leg is
|
|
22
|
-
* sufficient. Mirrors the app's own `IBC_GAS_MULTIPLIER`
|
|
23
|
-
* (vultiagent-app/src/services/cosmosTx.ts).
|
|
24
|
-
*/
|
|
25
|
-
export declare const IBC_GAS_MULTIPLIER = 2n;
|
|
26
|
-
type ResolveCosmosGasFeeInput = {
|
|
27
|
-
/** static per-chain fee amount already stored in `CosmosSpecific.gas` */
|
|
28
|
-
gas: bigint;
|
|
29
|
-
/** relayed `CosmosSpecific.gas_limit` (undefined / 0 → use the static limit) */
|
|
30
|
-
relayedGasLimit: bigint | undefined;
|
|
31
|
-
/** static per-chain gas limit (`getCosmosGasLimit`) */
|
|
32
|
-
staticGasLimit: bigint;
|
|
33
|
-
/**
|
|
34
|
-
* Whether this tx is an IBC transfer (`MsgTransfer`, optionally
|
|
35
|
-
* PFM-forwarded). Applies `IBC_GAS_MULTIPLIER` to both the static gas
|
|
36
|
-
* limit and its matching fee before resolving against a relayed limit.
|
|
37
|
-
* Defaults to `false` so every other Cosmos message (plain sends, wasm
|
|
38
|
-
* executes, staking) keeps paying the calibrated flat fee — a blanket
|
|
39
|
-
* multiplier on all Cosmos messages would overpay non-IBC sends.
|
|
40
|
-
*/
|
|
41
|
-
isIbcTransfer?: boolean;
|
|
42
|
-
};
|
|
43
|
-
type ResolveCosmosGasFeeResult = {
|
|
44
|
-
resolvedGasLimit: bigint;
|
|
45
|
-
feeAmount: bigint;
|
|
46
|
-
};
|
|
47
|
-
export declare const resolveCosmosGasFee: ({ gas, relayedGasLimit, staticGasLimit, isIbcTransfer, }: ResolveCosmosGasFeeInput) => ResolveCosmosGasFeeResult;
|
|
48
|
-
export {};
|
|
49
|
-
//# sourceMappingURL=resolveCosmosGasFee.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolveCosmosGasFee.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/resolveCosmosGasFee.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAEpC,KAAK,wBAAwB,GAAG;IAC9B,yEAAyE;IACzE,GAAG,EAAE,MAAM,CAAA;IACX,gFAAgF;IAChF,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAA;IACtB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,KAAK,yBAAyB,GAAG;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,0DAKjC,wBAAwB,KAAG,yBAY7B,CAAA"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolves the effective Cosmos gas limit and fee amount for a native send,
|
|
3
|
-
* honoring a relayed dynamic `gas_limit` when present.
|
|
4
|
-
*
|
|
5
|
-
* Shared by the signing-inputs resolver (what gets signed) and the fee-display
|
|
6
|
-
* resolver (what the user sees) so the shown and signed fee can never drift —
|
|
7
|
-
* the gas limit is part of the SignDoc, so both sides MUST agree.
|
|
8
|
-
*
|
|
9
|
-
* When the relayed limit exceeds the static per-chain limit, the fee amount is
|
|
10
|
-
* scaled proportionally with a ceiling (exact integer math) so the tx pays for
|
|
11
|
-
* the extra gas. Below or equal to the static limit, both values are left
|
|
12
|
-
* untouched, keeping the non-dynamic path byte-identical.
|
|
13
|
-
*/
|
|
14
|
-
/**
|
|
15
|
-
* COSMOS-02: an IBC transfer (ICS-20 `MsgTransfer`, optionally PFM-forwarded
|
|
16
|
-
* via memo) does measurably more work on the source leg than a plain bank
|
|
17
|
-
* send — channel-state writes plus a relayer event — so the flat per-chain
|
|
18
|
-
* limit (calibrated for `MsgSend`) is undersized and can run out of gas
|
|
19
|
-
* mid-execution: the fee is spent, the transfer fails, and funds don't move
|
|
20
|
-
* but the fee is still burned. PFM hops are budgeted by each forwarding
|
|
21
|
-
* chain, not the source leg here, so ×2 headroom on the source leg is
|
|
22
|
-
* sufficient. Mirrors the app's own `IBC_GAS_MULTIPLIER`
|
|
23
|
-
* (vultiagent-app/src/services/cosmosTx.ts).
|
|
24
|
-
*/
|
|
25
|
-
export const IBC_GAS_MULTIPLIER = 2n;
|
|
26
|
-
export const resolveCosmosGasFee = ({ gas, relayedGasLimit, staticGasLimit, isIbcTransfer = false, }) => {
|
|
27
|
-
const effectiveStaticGasLimit = isIbcTransfer ? staticGasLimit * IBC_GAS_MULTIPLIER : staticGasLimit;
|
|
28
|
-
const effectiveGas = isIbcTransfer ? gas * IBC_GAS_MULTIPLIER : gas;
|
|
29
|
-
const resolvedGasLimit = relayedGasLimit && relayedGasLimit > 0n ? relayedGasLimit : effectiveStaticGasLimit;
|
|
30
|
-
const feeAmount = resolvedGasLimit > effectiveStaticGasLimit
|
|
31
|
-
? (effectiveGas * resolvedGasLimit + effectiveStaticGasLimit - 1n) / effectiveStaticGasLimit
|
|
32
|
-
: effectiveGas;
|
|
33
|
-
return { resolvedGasLimit, feeAmount };
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=resolveCosmosGasFee.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolveCosmosGasFee.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/cosmos/resolveCosmosGasFee.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAyBpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,GAAG,EACH,eAAe,EACf,cAAc,EACd,aAAa,GAAG,KAAK,GACI,EAA6B,EAAE;IACxD,MAAM,uBAAuB,GAAG,aAAa,CAAC,CAAC,CAAC,cAAc,GAAG,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAA;IACpG,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAA;IAEnE,MAAM,gBAAgB,GAAG,eAAe,IAAI,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAA;IAE5G,MAAM,SAAS,GACb,gBAAgB,GAAG,uBAAuB;QACxC,CAAC,CAAC,CAAC,YAAY,GAAG,gBAAgB,GAAG,uBAAuB,GAAG,EAAE,CAAC,GAAG,uBAAuB;QAC5F,CAAC,CAAC,YAAY,CAAA;IAElB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAA;AACxC,CAAC,CAAA"}
|