@vultisig/core-chain 2.2.3 → 2.2.4
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 +6 -0
- package/dist/station/importPrimitives.d.ts +57 -0
- package/dist/station/importPrimitives.d.ts.map +1 -0
- package/dist/station/importPrimitives.js +124 -0
- package/dist/station/importPrimitives.js.map +1 -0
- package/dist/swap/general/lifi/api/injectSolanaAtaIfMissing.d.ts +10 -0
- package/dist/swap/general/lifi/api/injectSolanaAtaIfMissing.d.ts.map +1 -1
- package/dist/swap/general/lifi/api/injectSolanaAtaIfMissing.js +38 -5
- package/dist/swap/general/lifi/api/injectSolanaAtaIfMissing.js.map +1 -1
- package/package.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 2.2.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#512](https://github.com/vultisig/vultisig-sdk/pull/512) [`72eb200`](https://github.com/vultisig/vultisig-sdk/commit/72eb200ec647a707d1ebdc1f8b6f0f5243780477) Thanks [@rcoderdev](https://github.com/rcoderdev)! - Add Station Terra import primitives for legacy seed-byte, mnemonic, and raw private-key migration flows.
|
|
8
|
+
|
|
3
9
|
## 2.2.3
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { WalletCore } from '@trustwallet/wallet-core';
|
|
2
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
3
|
+
export declare const stationTerraCoinTypes: readonly [330, 118];
|
|
4
|
+
export type StationTerraCoinType = (typeof stationTerraCoinTypes)[number];
|
|
5
|
+
export type StationTerraChain = typeof Chain.Terra | typeof Chain.TerraClassic;
|
|
6
|
+
type StationTerraDerivationOptions = {
|
|
7
|
+
/** Station account index from the legacy wallet. Defaults to 0. */
|
|
8
|
+
index?: number;
|
|
9
|
+
/** BIP44 account segment. Station uses 0 by default. */
|
|
10
|
+
account?: number;
|
|
11
|
+
/** Terra coin type. Station defaults to 330 and legacy wallets may use 118. */
|
|
12
|
+
coinType?: StationTerraCoinType;
|
|
13
|
+
};
|
|
14
|
+
export type StationSeedImportSource = StationTerraDerivationOptions & {
|
|
15
|
+
kind: 'seed';
|
|
16
|
+
/** BIP39 seed bytes, for example legacy Station encryptedSeed after decrypting. */
|
|
17
|
+
seed: Uint8Array;
|
|
18
|
+
};
|
|
19
|
+
export type StationMnemonicImportSource = StationTerraDerivationOptions & {
|
|
20
|
+
kind: 'mnemonic';
|
|
21
|
+
mnemonic: string;
|
|
22
|
+
};
|
|
23
|
+
export type StationPrivateKeyImportSource = {
|
|
24
|
+
kind: 'privateKey';
|
|
25
|
+
/** Raw secp256k1 private key as 64 hex characters, optionally prefixed with 0x. */
|
|
26
|
+
privateKeyHex: string;
|
|
27
|
+
};
|
|
28
|
+
export type StationImportSource = StationSeedImportSource | StationMnemonicImportSource | StationPrivateKeyImportSource;
|
|
29
|
+
export type StationTerraChainPublicData = {
|
|
30
|
+
chain: StationTerraChain;
|
|
31
|
+
publicKeyHex: string;
|
|
32
|
+
publicKeyBase64: string;
|
|
33
|
+
address: string;
|
|
34
|
+
isEddsa: false;
|
|
35
|
+
};
|
|
36
|
+
export type StationTerraKeyMaterial = {
|
|
37
|
+
source: StationImportSource['kind'];
|
|
38
|
+
privateKeyHex: string;
|
|
39
|
+
publicKeyHex: string;
|
|
40
|
+
publicKeyBase64: string;
|
|
41
|
+
address: string;
|
|
42
|
+
chainPublicKeys: StationTerraChainPublicData[];
|
|
43
|
+
derivePath?: string;
|
|
44
|
+
coinType?: StationTerraCoinType;
|
|
45
|
+
account?: number;
|
|
46
|
+
index?: number;
|
|
47
|
+
};
|
|
48
|
+
type DeriveStationTerraKeyMaterialInput = {
|
|
49
|
+
source: StationImportSource;
|
|
50
|
+
walletCore: WalletCore;
|
|
51
|
+
};
|
|
52
|
+
export declare const getStationTerraDerivationPath: (options?: StationTerraDerivationOptions) => string;
|
|
53
|
+
export declare const normalizeStationPrivateKeyHex: (input: string) => string;
|
|
54
|
+
export declare const validateStationPrivateKeyHex: (input: string) => string;
|
|
55
|
+
export declare const deriveStationTerraKeyMaterial: ({ source, walletCore, }: DeriveStationTerraKeyMaterialInput) => StationTerraKeyMaterial;
|
|
56
|
+
export {};
|
|
57
|
+
//# sourceMappingURL=importPrimitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importPrimitives.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/station/importPrimitives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAKlD,eAAO,MAAM,qBAAqB,qBAAsB,CAAA;AAExD,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAA;AACzE,MAAM,MAAM,iBAAiB,GAAG,OAAO,KAAK,CAAC,KAAK,GAAG,OAAO,KAAK,CAAC,YAAY,CAAA;AAE9E,KAAK,6BAA6B,GAAG;IACnC,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,oBAAoB,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,GAAG;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,mFAAmF;IACnF,IAAI,EAAE,UAAU,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,6BAA6B,GAAG;IACxE,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,YAAY,CAAA;IAClB,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,2BAA2B,GAAG,6BAA6B,CAAA;AAEvH,MAAM,MAAM,2BAA2B,GAAG;IACxC,KAAK,EAAE,iBAAiB,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,KAAK,CAAA;CACf,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACnC,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,2BAA2B,EAAE,CAAA;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,oBAAoB,CAAA;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,KAAK,kCAAkC,GAAG;IACxC,MAAM,EAAE,mBAAmB,CAAA;IAC3B,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAyBD,eAAO,MAAM,6BAA6B,GAAI,UAAS,6BAAkC,KAAG,MAI3F,CAAA;AAED,eAAO,MAAM,6BAA6B,GAAI,OAAO,MAAM,KAAG,MACM,CAAA;AAEpE,eAAO,MAAM,4BAA4B,GAAI,OAAO,MAAM,KAAG,MAY5D,CAAA;AA2FD,eAAO,MAAM,6BAA6B,GAAI,yBAG3C,kCAAkC,KAAG,uBAkBvC,CAAA"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
import { deriveAddress } from '@vultisig/core-chain/publicKey/address/deriveAddress';
|
|
3
|
+
import BIP32Factory from 'bip32';
|
|
4
|
+
import * as ecc from 'tiny-secp256k1';
|
|
5
|
+
export const stationTerraCoinTypes = [330, 118];
|
|
6
|
+
const stationTerraChains = [Chain.Terra, Chain.TerraClassic];
|
|
7
|
+
const assertNonNegativeInteger = (value, name) => {
|
|
8
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
9
|
+
throw new Error(`${name} must be a non-negative safe integer`);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const normalizeDerivationOptions = ({ account = 0, index = 0, coinType = 330, }) => {
|
|
13
|
+
assertNonNegativeInteger(account, 'account');
|
|
14
|
+
assertNonNegativeInteger(index, 'index');
|
|
15
|
+
if (!stationTerraCoinTypes.includes(coinType)) {
|
|
16
|
+
throw new Error(`Unsupported Station Terra coin type: ${coinType}`);
|
|
17
|
+
}
|
|
18
|
+
return { account, index, coinType };
|
|
19
|
+
};
|
|
20
|
+
export const getStationTerraDerivationPath = (options = {}) => {
|
|
21
|
+
const { account, index, coinType } = normalizeDerivationOptions(options);
|
|
22
|
+
return `m/44'/${coinType}'/${account}'/0/${index}`;
|
|
23
|
+
};
|
|
24
|
+
export const normalizeStationPrivateKeyHex = (input) => input.trim().replace(/^0x/i, '').replace(/\s+/g, '').toLowerCase();
|
|
25
|
+
export const validateStationPrivateKeyHex = (input) => {
|
|
26
|
+
const privateKeyHex = normalizeStationPrivateKeyHex(input);
|
|
27
|
+
if (!/^[0-9a-f]{64}$/.test(privateKeyHex)) {
|
|
28
|
+
throw new Error('Private key must be 64 hexadecimal characters');
|
|
29
|
+
}
|
|
30
|
+
if (!ecc.isPrivate(Buffer.from(privateKeyHex, 'hex'))) {
|
|
31
|
+
throw new Error('Invalid secp256k1 private key');
|
|
32
|
+
}
|
|
33
|
+
return privateKeyHex;
|
|
34
|
+
};
|
|
35
|
+
const derivePrivateKeyHexFromSeed = (source) => {
|
|
36
|
+
const { account, index, coinType } = normalizeDerivationOptions(source);
|
|
37
|
+
const bip32 = BIP32Factory(ecc);
|
|
38
|
+
const derived = bip32
|
|
39
|
+
.fromSeed(Buffer.from(source.seed))
|
|
40
|
+
.derivePath(getStationTerraDerivationPath({ account, index, coinType }));
|
|
41
|
+
const privateKey = derived.privateKey;
|
|
42
|
+
if (!privateKey) {
|
|
43
|
+
throw new Error('Failed to derive Station Terra private key from seed');
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
privateKeyHex: Buffer.from(privateKey).toString('hex'),
|
|
47
|
+
derivePath: getStationTerraDerivationPath({ account, index, coinType }),
|
|
48
|
+
account,
|
|
49
|
+
index,
|
|
50
|
+
coinType,
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
const walletCoreCoinTypeForStationTerra = (walletCore, coinType) => coinType === 330 ? walletCore.CoinType.terraV2 : walletCore.CoinType.terra;
|
|
54
|
+
const derivePrivateKeyHexFromMnemonic = (source, walletCore) => {
|
|
55
|
+
const { account, index, coinType } = normalizeDerivationOptions(source);
|
|
56
|
+
const derivePath = getStationTerraDerivationPath({ account, index, coinType });
|
|
57
|
+
const hdWallet = walletCore.HDWallet.createWithMnemonic(source.mnemonic.trim(), '');
|
|
58
|
+
try {
|
|
59
|
+
const privateKey = hdWallet.getKey(walletCoreCoinTypeForStationTerra(walletCore, coinType), derivePath);
|
|
60
|
+
try {
|
|
61
|
+
return {
|
|
62
|
+
privateKeyHex: Buffer.from(privateKey.data()).toString('hex'),
|
|
63
|
+
derivePath,
|
|
64
|
+
account,
|
|
65
|
+
index,
|
|
66
|
+
coinType,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
privateKey.delete?.();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
hdWallet.delete?.();
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const derivePublicDataFromPrivateKey = (privateKeyHex, walletCore) => {
|
|
78
|
+
const normalizedPrivateKeyHex = validateStationPrivateKeyHex(privateKeyHex);
|
|
79
|
+
const privateKey = walletCore.PrivateKey.createWithData(Buffer.from(normalizedPrivateKeyHex, 'hex'));
|
|
80
|
+
try {
|
|
81
|
+
const publicKey = privateKey.getPublicKeySecp256k1(true);
|
|
82
|
+
try {
|
|
83
|
+
const publicKeyHex = Buffer.from(publicKey.data()).toString('hex');
|
|
84
|
+
const publicKeyBase64 = Buffer.from(publicKey.data()).toString('base64');
|
|
85
|
+
const chainPublicKeys = stationTerraChains.map(chain => ({
|
|
86
|
+
chain,
|
|
87
|
+
publicKeyHex,
|
|
88
|
+
publicKeyBase64,
|
|
89
|
+
address: deriveAddress({ chain, publicKey, walletCore }),
|
|
90
|
+
isEddsa: false,
|
|
91
|
+
}));
|
|
92
|
+
return {
|
|
93
|
+
privateKeyHex: normalizedPrivateKeyHex,
|
|
94
|
+
publicKeyHex,
|
|
95
|
+
publicKeyBase64,
|
|
96
|
+
address: chainPublicKeys[0].address,
|
|
97
|
+
chainPublicKeys,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
publicKey.delete?.();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
privateKey.delete?.();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
export const deriveStationTerraKeyMaterial = ({ source, walletCore, }) => {
|
|
109
|
+
if (source.kind === 'privateKey') {
|
|
110
|
+
return {
|
|
111
|
+
source: source.kind,
|
|
112
|
+
...derivePublicDataFromPrivateKey(source.privateKeyHex, walletCore),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const seedFields = source.kind === 'mnemonic'
|
|
116
|
+
? derivePrivateKeyHexFromMnemonic(source, walletCore)
|
|
117
|
+
: derivePrivateKeyHexFromSeed(source);
|
|
118
|
+
return {
|
|
119
|
+
source: source.kind,
|
|
120
|
+
...seedFields,
|
|
121
|
+
...derivePublicDataFromPrivateKey(seedFields.privateKeyHex, walletCore),
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=importPrimitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importPrimitives.js","sourceRoot":"","sources":["../../../../../packages/core/chain/station/importPrimitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,16 @@ export type InjectSolanaAtaResult = {
|
|
|
15
15
|
* runtime so the correct token program (Token or Token-2022) is used for ATA
|
|
16
16
|
* derivation and instruction creation.
|
|
17
17
|
*
|
|
18
|
+
* Token-2022 extension limitation: this function handles ATA derivation and
|
|
19
|
+
* creation correctly for Token-2022 mints, but it does NOT inspect or handle
|
|
20
|
+
* Token-2022 extension data (e.g. TransferFee, ConfidentialTransfer,
|
|
21
|
+
* InterestBearingMint). Extensions that affect transfer semantics (e.g.
|
|
22
|
+
* TransferFee withholding, MemoRequired) are the responsibility of the LiFi
|
|
23
|
+
* route builder, not of this ATA injection layer. If a Token-2022 mint has
|
|
24
|
+
* extensions that require special instruction handling beyond ATA creation,
|
|
25
|
+
* the LiFi transaction itself must already encode those requirements.
|
|
26
|
+
* (#519 r-N NeO preferably-blocking #1 - document limitation.)
|
|
27
|
+
*
|
|
18
28
|
* @param txData Base64-encoded serialized VersionedTransaction from LiFi.
|
|
19
29
|
* @param mintAddress SPL token mint address (e.g. USDC mint on Solana).
|
|
20
30
|
* @param owner Wallet address that will own the ATA (swap destination).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectSolanaAtaIfMissing.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/injectSolanaAtaIfMissing.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,qBAAqB,GAAG;IAClC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"injectSolanaAtaIfMissing.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/injectSolanaAtaIfMissing.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,qBAAqB,GAAG;IAClC,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,EACd,aAAa,MAAM,EACnB,OAAO,MAAM,EACb,OAAO,MAAM,KACZ,OAAO,CAAC,qBAAqB,CAiK/B,CAAA"}
|
|
@@ -37,6 +37,16 @@ async function fetchLutWithRetry(client, accountKey) {
|
|
|
37
37
|
* runtime so the correct token program (Token or Token-2022) is used for ATA
|
|
38
38
|
* derivation and instruction creation.
|
|
39
39
|
*
|
|
40
|
+
* Token-2022 extension limitation: this function handles ATA derivation and
|
|
41
|
+
* creation correctly for Token-2022 mints, but it does NOT inspect or handle
|
|
42
|
+
* Token-2022 extension data (e.g. TransferFee, ConfidentialTransfer,
|
|
43
|
+
* InterestBearingMint). Extensions that affect transfer semantics (e.g.
|
|
44
|
+
* TransferFee withholding, MemoRequired) are the responsibility of the LiFi
|
|
45
|
+
* route builder, not of this ATA injection layer. If a Token-2022 mint has
|
|
46
|
+
* extensions that require special instruction handling beyond ATA creation,
|
|
47
|
+
* the LiFi transaction itself must already encode those requirements.
|
|
48
|
+
* (#519 r-N NeO preferably-blocking #1 - document limitation.)
|
|
49
|
+
*
|
|
40
50
|
* @param txData Base64-encoded serialized VersionedTransaction from LiFi.
|
|
41
51
|
* @param mintAddress SPL token mint address (e.g. USDC mint on Solana).
|
|
42
52
|
* @param owner Wallet address that will own the ATA (swap destination).
|
|
@@ -70,9 +80,20 @@ export const injectSolanaAtaIfMissing = async (txData, mintAddress, owner, payer
|
|
|
70
80
|
else {
|
|
71
81
|
throw new Error(`Mint ${mintAddress} is owned by unsupported program ${mintInfo.owner.toBase58()} - expected Token or Token-2022`);
|
|
72
82
|
}
|
|
73
|
-
//
|
|
83
|
+
// Validate that the owner is on the ed25519 curve (i.e. a normal wallet keypair).
|
|
84
|
+
// In Vultisig flows the swap destination is always a user wallet — off-curve
|
|
85
|
+
// addresses are PDAs (Program Derived Addresses) and are valid ATA owners in the
|
|
86
|
+
// broader Solana ecosystem but should never appear as the destination in a LiFi
|
|
87
|
+
// quote. Silently passing an off-curve owner with allowOwnerOffCurve=true would
|
|
88
|
+
// derive an ATA that the user likely can never sign for, producing an opaque
|
|
89
|
+
// simulation failure. (#519 r-N NeO should-fix #2.)
|
|
90
|
+
if (!PublicKey.isOnCurve(ownerPubkey.toBytes())) {
|
|
91
|
+
throw new Error(`Owner ${owner} is off the ed25519 curve (PDA or invalid key) - Vultisig LiFi swaps require an on-curve wallet address as destination`);
|
|
92
|
+
}
|
|
93
|
+
// allowOwnerOffCurve=false (default): we already validated above that the owner
|
|
94
|
+
// is on-curve, so we don't need to pass the flag — keeping it explicit for clarity.
|
|
74
95
|
const ataAddress = getAssociatedTokenAddressSync(mintPubkey, ownerPubkey,
|
|
75
|
-
/* allowOwnerOffCurve */
|
|
96
|
+
/* allowOwnerOffCurve */ false, tokenProgramId);
|
|
76
97
|
const ataInfo = await client.getAccountInfo(ataAddress);
|
|
77
98
|
// ATA already exists - verify it's actually a token account owned by the
|
|
78
99
|
// matching program before skipping injection. A non-token account squatting
|
|
@@ -105,9 +126,21 @@ export const injectSolanaAtaIfMissing = async (txData, mintAddress, owner, payer
|
|
|
105
126
|
// accepts both legacy and V0 messages, and compileToV0Message always produces
|
|
106
127
|
// a V0 message. LiFi does not send legacy Solana transactions in practice but
|
|
107
128
|
// the path is safe regardless.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
129
|
+
//
|
|
130
|
+
// When the tx references LUTs, decompile can fail if a referenced LUT account
|
|
131
|
+
// was not fetched (e.g. all retry attempts exhausted). Rather than letting the
|
|
132
|
+
// SDK throw an opaque "unknown account" message, we wrap here and re-throw with
|
|
133
|
+
// context so callers can distinguish a LUT-dependency failure from any other
|
|
134
|
+
// decompile error. (#519 r-N NeO should-fix #1.)
|
|
135
|
+
let decompiledMessage;
|
|
136
|
+
try {
|
|
137
|
+
decompiledMessage = TransactionMessage.decompile(versionedTx.message, {
|
|
138
|
+
addressLookupTableAccounts: lutAccounts,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
throw new Error(`Failed to decompile LiFi transaction message - one or more LUT accounts could not be resolved (fetched ${lutAccounts.length} of ${versionedTx.message.addressTableLookups?.length ?? 0} referenced LUTs). Original error: ${err instanceof Error ? err.message : String(err)}`);
|
|
143
|
+
}
|
|
111
144
|
// Validate the caller-supplied payer matches the tx's actual fee-payer.
|
|
112
145
|
// If LiFi ever changes the fee-payer convention (or the caller passes a
|
|
113
146
|
// wrong address), the createAtaIx would be funded by `payerPubkey` while
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectSolanaAtaIfMissing.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/injectSolanaAtaIfMissing.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iDAAiD,EACjD,6BAA6B,EAC7B,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAA6B,SAAS,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAChH,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAA;AAE3E,yDAAyD;AACzD,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAEhC;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAC9B,MAA0C,EAC1C,UAAqB;IAErB,MAAM,MAAM,GAAc,EAAE,CAAA;IAC5B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;QAClE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;YAC7D,OAAO,MAAM,CAAC,KAAK,IAAI,IAAI,CAAA;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAChB,IAAI,OAAO,GAAG,sBAAsB,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IACD,sEAAsE;IACtE,wEAAwE;IACxE,OAAO,CAAC,IAAI,CAAC,4DAA4D,EAAE,MAAM,CAAC,CAAA;IAClF,OAAO,IAAI,CAAA;AACb,CAAC;AASD
|
|
1
|
+
{"version":3,"file":"injectSolanaAtaIfMissing.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/injectSolanaAtaIfMissing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-chain",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.4",
|
|
4
4
|
"description": "Blockchain chain logic shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -1240,6 +1240,11 @@
|
|
|
1240
1240
|
"import": "./dist/signing/SignatureFormat.js",
|
|
1241
1241
|
"default": "./dist/signing/SignatureFormat.js"
|
|
1242
1242
|
},
|
|
1243
|
+
"./station/importPrimitives": {
|
|
1244
|
+
"types": "./dist/station/importPrimitives.d.ts",
|
|
1245
|
+
"import": "./dist/station/importPrimitives.js",
|
|
1246
|
+
"default": "./dist/station/importPrimitives.js"
|
|
1247
|
+
},
|
|
1243
1248
|
"./swap/affiliate": {
|
|
1244
1249
|
"types": "./dist/swap/affiliate/index.d.ts",
|
|
1245
1250
|
"import": "./dist/swap/affiliate/index.js",
|