@vultisig/core-chain 2.10.2 → 2.12.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.
- package/CHANGELOG.md +32 -0
- package/dist/chains/cosmos/account/getCosmosAccountInfo.d.ts +7 -4
- package/dist/chains/cosmos/account/getCosmosAccountInfo.d.ts.map +1 -1
- package/dist/chains/cosmos/account/getCosmosAccountInfo.js +13 -6
- package/dist/chains/cosmos/account/getCosmosAccountInfo.js.map +1 -1
- package/dist/chains/sui/buildTransactionFromJson.d.ts +16 -0
- package/dist/chains/sui/buildTransactionFromJson.d.ts.map +1 -0
- package/dist/chains/sui/buildTransactionFromJson.js +15 -0
- package/dist/chains/sui/buildTransactionFromJson.js.map +1 -0
- package/dist/chains/sui/sign.d.ts +25 -0
- package/dist/chains/sui/sign.d.ts.map +1 -0
- package/dist/chains/sui/sign.js +66 -0
- package/dist/chains/sui/sign.js.map +1 -0
- 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/sui.d.ts +8 -0
- package/dist/coin/token/metadata/resolvers/sui.d.ts.map +1 -0
- package/dist/coin/token/metadata/resolvers/sui.js +16 -0
- package/dist/coin/token/metadata/resolvers/sui.js.map +1 -0
- package/dist/utils/isValidTokenId.d.ts +18 -0
- package/dist/utils/isValidTokenId.d.ts.map +1 -0
- package/dist/utils/isValidTokenId.js +18 -0
- package/dist/utils/isValidTokenId.js.map +1 -0
- package/package.json +22 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# @vultisig/core-chain
|
|
2
2
|
|
|
3
|
+
## 2.12.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#651](https://github.com/vultisig/vultisig-sdk/pull/651) [`e9c4997`](https://github.com/vultisig/vultisig-sdk/commit/e9c4997bae3a499785295b76dbc956807cc704f5) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add Sui dApp signing helpers to `@vultisig/core-chain/chains/sui`. Two new
|
|
8
|
+
public modules:
|
|
9
|
+
- `./chains/sui/sign` exports `suiTransactionDataIntent` /
|
|
10
|
+
`suiPersonalMessageIntent` (defensive clones of the 3-byte intent
|
|
11
|
+
prefixes), `getSuiTransactionDataDigest(txBytes)` and
|
|
12
|
+
`getSuiPersonalMessageDigest(messageBytes)` for the intent-prefixed
|
|
13
|
+
blake2b-256 digests the wallet's Ed25519 signer signs, and
|
|
14
|
+
`buildSuiSerializedSignature({ signature, publicKey })` for the 97-byte
|
|
15
|
+
`flag(1) || sig(64) || pubkey(32)` Wallet Standard wire signature.
|
|
16
|
+
- `./chains/sui/buildTransactionFromJson` exports
|
|
17
|
+
`buildSuiTransactionFromJson({ transactionJson, sender })` which hydrates
|
|
18
|
+
a serialized Sui `Transaction` (V1 or V2 JSON) and resolves it to BCS
|
|
19
|
+
bytes via `Transaction.build({ client: getSuiClient() })`. Lets
|
|
20
|
+
extension callers move the build step off the dApp page (where the dApp
|
|
21
|
+
page's Content Security Policy blocks the Sui RPC) and into the
|
|
22
|
+
extension's own context.
|
|
23
|
+
|
|
24
|
+
## 2.11.0
|
|
25
|
+
|
|
26
|
+
### Minor Changes
|
|
27
|
+
|
|
28
|
+
- [#649](https://github.com/vultisig/vultisig-sdk/pull/649) [`9271864`](https://github.com/vultisig/vultisig-sdk/commit/9271864c7cf1030b613f52b5564fc04d9309f069) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - Add custom token support for SUI. SUI is now included in
|
|
29
|
+
`chainsWithTokenMetadataDiscovery`, and a new resolver fetches coin metadata
|
|
30
|
+
(ticker, decimals, logo) from the SUI RPC via `suix_getCoinMetadata`. A new
|
|
31
|
+
`isValidTokenId` helper validates token identifiers per chain — SUI tokens are
|
|
32
|
+
validated as Move struct tags (e.g. `0x2::sui::SUI`) while all other chains keep
|
|
33
|
+
delegating to `isValidAddress`.
|
|
34
|
+
|
|
3
35
|
## 2.10.2
|
|
4
36
|
|
|
5
37
|
### Patch Changes
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import type { Pubkey } from '@cosmjs/amino';
|
|
1
2
|
import { CosmosChain } from '@vultisig/core-chain/Chain';
|
|
2
3
|
import { ChainAccount } from '@vultisig/core-chain/ChainAccount';
|
|
3
|
-
|
|
4
|
+
type CosmosAccountInfo = {
|
|
4
5
|
address: string;
|
|
5
|
-
pubkey:
|
|
6
|
-
accountNumber:
|
|
6
|
+
pubkey: Pubkey | null;
|
|
7
|
+
accountNumber: bigint;
|
|
7
8
|
sequence: number;
|
|
8
9
|
latestBlock: string;
|
|
9
|
-
}
|
|
10
|
+
};
|
|
11
|
+
export declare const getCosmosAccountInfo: ({ chain, address, }: ChainAccount<CosmosChain>) => Promise<CosmosAccountInfo>;
|
|
12
|
+
export {};
|
|
10
13
|
//# sourceMappingURL=getCosmosAccountInfo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"getCosmosAccountInfo.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAS,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AA0HhE,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,qBAGxC,YAAY,CAAC,WAAW,CAAC,KAAG,OAAO,CAAC,iBAAiB,CAgCvD,CAAA"}
|
|
@@ -7,11 +7,18 @@ const parseLcdAccount = (resp) => {
|
|
|
7
7
|
if (!acc)
|
|
8
8
|
return null;
|
|
9
9
|
const base = acc.base_vesting_account?.base_account ?? acc.base_account ?? acc;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
try {
|
|
11
|
+
const accountNumber = BigInt(base.account_number ?? '0');
|
|
12
|
+
const sequence = Number(base.sequence ?? '0');
|
|
13
|
+
if (!Number.isFinite(sequence))
|
|
14
|
+
return null;
|
|
15
|
+
return { accountNumber, sequence };
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// BigInt() throws on malformed input (non-numeric string, decimal,
|
|
19
|
+
// empty). Match the old Number.isFinite gate by failing closed.
|
|
13
20
|
return null;
|
|
14
|
-
|
|
21
|
+
}
|
|
15
22
|
};
|
|
16
23
|
// LCD fallback for Tendermint-RPC account lookups that return null.
|
|
17
24
|
// Native @cosmjs/stargate.getAccount() returns null in TWO indistinguishable
|
|
@@ -72,7 +79,7 @@ const fetchAccountViaLcd = async (chain, address) => {
|
|
|
72
79
|
return null;
|
|
73
80
|
return tryLcd(fallback, address);
|
|
74
81
|
};
|
|
75
|
-
export const getCosmosAccountInfo = async ({ chain, address }) => {
|
|
82
|
+
export const getCosmosAccountInfo = async ({ chain, address, }) => {
|
|
76
83
|
const client = await getCosmosClient(chain);
|
|
77
84
|
const [accountInfo, block] = await Promise.all([client.getAccount(address), client.getBlock()]);
|
|
78
85
|
let accountNumber = accountInfo?.accountNumber;
|
|
@@ -95,7 +102,7 @@ export const getCosmosAccountInfo = async ({ chain, address }) => {
|
|
|
95
102
|
return {
|
|
96
103
|
address,
|
|
97
104
|
pubkey: accountInfo?.pubkey ?? null,
|
|
98
|
-
accountNumber: accountNumber ??
|
|
105
|
+
accountNumber: accountNumber ?? 0n,
|
|
99
106
|
sequence: sequence ?? 0,
|
|
100
107
|
latestBlock,
|
|
101
108
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getCosmosAccountInfo.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/chains/cosmos/account/getCosmosAccountInfo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type BuildSuiTransactionFromJsonInput = {
|
|
2
|
+
/** JSON output of `Transaction.toJSON()` or `Transaction.serialize()` (V1 or V2). */
|
|
3
|
+
transactionJson: string;
|
|
4
|
+
/** Sui address of the sender. Used when the serialized transaction omits a sender. */
|
|
5
|
+
sender: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Hydrate a serialized Sui Transaction and resolve it to BCS bytes via
|
|
9
|
+
* `Transaction.build({ client })`. Runs inside the SDK so the network call
|
|
10
|
+
* uses the SDK's pinned Sui RPC client and isn't subject to the dApp page's
|
|
11
|
+
* Content Security Policy — callers that run under a dApp's CSP (extension
|
|
12
|
+
* inpage scripts) must route through this from a background context.
|
|
13
|
+
*/
|
|
14
|
+
export declare const buildSuiTransactionFromJson: ({ transactionJson, sender, }: BuildSuiTransactionFromJsonInput) => Promise<Uint8Array>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=buildTransactionFromJson.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTransactionFromJson.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/sui/buildTransactionFromJson.ts"],"names":[],"mappings":"AAIA,KAAK,gCAAgC,GAAG;IACtC,qFAAqF;IACrF,eAAe,EAAE,MAAM,CAAA;IACvB,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GAAU,8BAG/C,gCAAgC,KAAG,OAAO,CAAC,UAAU,CAIvD,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Transaction } from '@mysten/sui/transactions';
|
|
2
|
+
import { getSuiClient } from './client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Hydrate a serialized Sui Transaction and resolve it to BCS bytes via
|
|
5
|
+
* `Transaction.build({ client })`. Runs inside the SDK so the network call
|
|
6
|
+
* uses the SDK's pinned Sui RPC client and isn't subject to the dApp page's
|
|
7
|
+
* Content Security Policy — callers that run under a dApp's CSP (extension
|
|
8
|
+
* inpage scripts) must route through this from a background context.
|
|
9
|
+
*/
|
|
10
|
+
export const buildSuiTransactionFromJson = async ({ transactionJson, sender, }) => {
|
|
11
|
+
const tx = Transaction.from(transactionJson);
|
|
12
|
+
tx.setSenderIfNotSet(sender);
|
|
13
|
+
return tx.build({ client: getSuiClient() });
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=buildTransactionFromJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTransactionFromJson.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/sui/buildTransactionFromJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AASvC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAAE,EAChD,eAAe,EACf,MAAM,GAC2B,EAAuB,EAAE;IAC1D,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAC5C,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC5B,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA;AAC7C,CAAC,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const suiTransactionDataIntent: Uint8Array<ArrayBuffer>;
|
|
2
|
+
export declare const suiPersonalMessageIntent: Uint8Array<ArrayBuffer>;
|
|
3
|
+
/**
|
|
4
|
+
* Produce the Sui intent-prefixed blake2b-256 digest of a built PTB. This is
|
|
5
|
+
* the 32-byte hash that the wallet's Ed25519 signer signs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const getSuiTransactionDataDigest: (txBytes: Uint8Array) => Uint8Array;
|
|
8
|
+
/**
|
|
9
|
+
* Produce the Sui intent-prefixed blake2b-256 digest of a personal message.
|
|
10
|
+
* The message is BCS-wrapped as `vector<u8>` (uleb128 length || bytes) before
|
|
11
|
+
* hashing.
|
|
12
|
+
*/
|
|
13
|
+
export declare const getSuiPersonalMessageDigest: (messageBytes: Uint8Array) => Uint8Array;
|
|
14
|
+
type BuildSuiSerializedSignatureInput = {
|
|
15
|
+
signature: Uint8Array;
|
|
16
|
+
publicKey: Uint8Array;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Assemble a Sui Wallet Standard wire signature for an Ed25519 vault:
|
|
20
|
+
* `flag(1) || signature(64) || publicKey(32)`. The result is 97 bytes; callers
|
|
21
|
+
* typically base64-encode it before returning to the dApp.
|
|
22
|
+
*/
|
|
23
|
+
export declare const buildSuiSerializedSignature: ({ signature, publicKey }: BuildSuiSerializedSignatureInput) => Uint8Array;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/sui/sign.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,wBAAwB,yBAAgD,CAAA;AACrF,eAAO,MAAM,wBAAwB,yBAAgD,CAAA;AAwBrF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,SAAS,UAAU,KAAG,UACW,CAAA;AAE7E;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,GAAI,cAAc,UAAU,KAAG,UAC+C,CAAA;AAMtH,KAAK,gCAAgC,GAAG;IACtC,SAAS,EAAE,UAAU,CAAA;IACrB,SAAS,EAAE,UAAU,CAAA;CACtB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,GAAI,0BAA0B,gCAAgC,KAAG,UAYxG,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { blake2b } from '@noble/hashes/blake2';
|
|
2
|
+
/**
|
|
3
|
+
* Sui intent prefixes — `[scope, version, app_id]`. Version is always `0` (V0)
|
|
4
|
+
* and `app_id` is always `0` (Sui). See `@mysten/sui/cryptography/intent`.
|
|
5
|
+
*
|
|
6
|
+
* The public exports are separate `Uint8Array` instances cloned from the
|
|
7
|
+
* private source buffers, so a consumer mutating an imported intent can't
|
|
8
|
+
* corrupt the bytes the digest helpers below feed into every blake2b call.
|
|
9
|
+
*/
|
|
10
|
+
const suiTransactionDataIntentBytes = new Uint8Array([0, 0, 0]);
|
|
11
|
+
const suiPersonalMessageIntentBytes = new Uint8Array([3, 0, 0]);
|
|
12
|
+
export const suiTransactionDataIntent = new Uint8Array(suiTransactionDataIntentBytes);
|
|
13
|
+
export const suiPersonalMessageIntent = new Uint8Array(suiPersonalMessageIntentBytes);
|
|
14
|
+
const concatBytes = (...parts) => {
|
|
15
|
+
const total = parts.reduce((n, p) => n + p.length, 0);
|
|
16
|
+
const out = new Uint8Array(total);
|
|
17
|
+
let off = 0;
|
|
18
|
+
for (const p of parts) {
|
|
19
|
+
out.set(p, off);
|
|
20
|
+
off += p.length;
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
};
|
|
24
|
+
const encodeUleb128 = (n) => {
|
|
25
|
+
const out = [];
|
|
26
|
+
let v = n;
|
|
27
|
+
while (v >= 0x80) {
|
|
28
|
+
out.push((v & 0x7f) | 0x80);
|
|
29
|
+
v >>>= 7;
|
|
30
|
+
}
|
|
31
|
+
out.push(v & 0x7f);
|
|
32
|
+
return new Uint8Array(out);
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Produce the Sui intent-prefixed blake2b-256 digest of a built PTB. This is
|
|
36
|
+
* the 32-byte hash that the wallet's Ed25519 signer signs.
|
|
37
|
+
*/
|
|
38
|
+
export const getSuiTransactionDataDigest = (txBytes) => blake2b(concatBytes(suiTransactionDataIntentBytes, txBytes), { dkLen: 32 });
|
|
39
|
+
/**
|
|
40
|
+
* Produce the Sui intent-prefixed blake2b-256 digest of a personal message.
|
|
41
|
+
* The message is BCS-wrapped as `vector<u8>` (uleb128 length || bytes) before
|
|
42
|
+
* hashing.
|
|
43
|
+
*/
|
|
44
|
+
export const getSuiPersonalMessageDigest = (messageBytes) => blake2b(concatBytes(suiPersonalMessageIntentBytes, encodeUleb128(messageBytes.length), messageBytes), { dkLen: 32 });
|
|
45
|
+
const ed25519SchemeFlag = 0x00;
|
|
46
|
+
const ed25519SignatureLength = 64;
|
|
47
|
+
const ed25519PublicKeyLength = 32;
|
|
48
|
+
/**
|
|
49
|
+
* Assemble a Sui Wallet Standard wire signature for an Ed25519 vault:
|
|
50
|
+
* `flag(1) || signature(64) || publicKey(32)`. The result is 97 bytes; callers
|
|
51
|
+
* typically base64-encode it before returning to the dApp.
|
|
52
|
+
*/
|
|
53
|
+
export const buildSuiSerializedSignature = ({ signature, publicKey }) => {
|
|
54
|
+
if (signature.length !== ed25519SignatureLength) {
|
|
55
|
+
throw new Error(`Sui Ed25519 signature must be ${ed25519SignatureLength} bytes, got ${signature.length}`);
|
|
56
|
+
}
|
|
57
|
+
if (publicKey.length !== ed25519PublicKeyLength) {
|
|
58
|
+
throw new Error(`Sui Ed25519 public key must be ${ed25519PublicKeyLength} bytes, got ${publicKey.length}`);
|
|
59
|
+
}
|
|
60
|
+
const out = new Uint8Array(1 + ed25519SignatureLength + ed25519PublicKeyLength);
|
|
61
|
+
out[0] = ed25519SchemeFlag;
|
|
62
|
+
out.set(signature, 1);
|
|
63
|
+
out.set(publicKey, 1 + ed25519SignatureLength);
|
|
64
|
+
return out;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=sign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/sui/sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeriveChainKind } from '@vultisig/core-chain/ChainKind';
|
|
2
2
|
import { OtherChain } from '../../../Chain.js';
|
|
3
|
-
export declare const chainsWithTokenMetadataDiscovery: readonly ("Arbitrum" | "Base" | "Blast" | "Optimism" | "Zksync" | "Mantle" | "Avalanche" | "CronosChain" | "BSC" | "Ethereum" | "Polygon" | "Hyperliquid" | "Sei" | "Cosmos" | "Osmosis" | "Dydx" | "Kujira" | "Terra" | "TerraClassic" | "Noble" | "Akash" | "THORChain" | "MayaChain" | OtherChain.Solana | OtherChain.Ton | OtherChain.Tron | OtherChain.Cardano)[];
|
|
3
|
+
export declare const chainsWithTokenMetadataDiscovery: readonly ("Arbitrum" | "Base" | "Blast" | "Optimism" | "Zksync" | "Mantle" | "Avalanche" | "CronosChain" | "BSC" | "Ethereum" | "Polygon" | "Hyperliquid" | "Sei" | "Cosmos" | "Osmosis" | "Dydx" | "Kujira" | "Terra" | "TerraClassic" | "Noble" | "Akash" | "THORChain" | "MayaChain" | OtherChain.Sui | OtherChain.Solana | OtherChain.Ton | OtherChain.Tron | OtherChain.Cardano)[];
|
|
4
4
|
export type ChainWithTokenMetadataDiscovery = (typeof chainsWithTokenMetadataDiscovery)[number];
|
|
5
5
|
export type ChainKindWithTokenMetadataDiscovery = DeriveChainKind<ChainWithTokenMetadataDiscovery>;
|
|
6
6
|
//# sourceMappingURL=chains.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEhE,OAAO,EAAyB,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEhE,OAAO,EAAyB,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,eAAO,MAAM,gCAAgC,yXAQnC,CAAA;AAEV,MAAM,MAAM,+BAA+B,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/F,MAAM,MAAM,mCAAmC,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC1B,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,GAAG;IACd,UAAU,CAAC,IAAI;IACf,UAAU,CAAC,OAAO;IAClB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;CACrB,CAAA"}
|
|
1
|
+
{"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC1B,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,GAAG;IACd,UAAU,CAAC,IAAI;IACf,UAAU,CAAC,OAAO;IAClB,UAAU,CAAC,GAAG;IACd,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;CACrB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAmBlD,eAAO,MAAM,gBAAgB,EAAE,qBAM9B,CAAA"}
|
|
@@ -3,6 +3,7 @@ import { getCardanoTokenMetadata } from './resolvers/cardano.js';
|
|
|
3
3
|
import { getCosmosTokenMetadata } from './resolvers/cosmos.js';
|
|
4
4
|
import { getEvmTokenMetadata } from './resolvers/evm.js';
|
|
5
5
|
import { getSolanaTokenMetadata } from './resolvers/solana.js';
|
|
6
|
+
import { getSuiTokenMetadata } from './resolvers/sui.js';
|
|
6
7
|
import { getTonTokenMetadata } from './resolvers/ton.js';
|
|
7
8
|
import { getTronTokenMetadata } from './resolvers/tron.js';
|
|
8
9
|
const resolvers = {
|
|
@@ -12,6 +13,7 @@ const resolvers = {
|
|
|
12
13
|
ton: getTonTokenMetadata,
|
|
13
14
|
tron: getTronTokenMetadata,
|
|
14
15
|
cardano: getCardanoTokenMetadata,
|
|
16
|
+
sui: getSuiTokenMetadata,
|
|
15
17
|
};
|
|
16
18
|
export const getTokenMetadata = async (input) => {
|
|
17
19
|
const chainKind = getChainKind(input.chain);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAI7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,SAAS,GAA4E;IACzF,GAAG,EAAE,mBAAmB;IACxB,MAAM,EAAE,sBAAsB;IAC9B,MAAM,EAAE,sBAAsB;IAC9B,GAAG,EAAE,mBAAmB;IACxB,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAI7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,SAAS,GAA4E;IACzF,GAAG,EAAE,mBAAmB;IACxB,MAAM,EAAE,sBAAsB;IAC9B,MAAM,EAAE,sBAAsB;IAC9B,GAAG,EAAE,mBAAmB;IACxB,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,uBAAuB;IAChC,GAAG,EAAE,mBAAmB;CACzB,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA0B,KAAK,EAAC,KAAK,EAAC,EAAE;IACnE,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE3C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;IAErC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { OtherChain } from '@vultisig/core-chain/Chain';
|
|
2
|
+
import { TokenMetadataResolver } from '../resolver.js';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves SUI coin metadata via the `suix_getCoinMetadata` JSON-RPC method.
|
|
5
|
+
* The `id` is the fully-qualified coin type (e.g. `0x...::module::TYPE`).
|
|
6
|
+
*/
|
|
7
|
+
export declare const getSuiTokenMetadata: TokenMetadataResolver<OtherChain.Sui>;
|
|
8
|
+
//# sourceMappingURL=sui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/sui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAIvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAUrE,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getSuiClient } from '@vultisig/core-chain/chains/sui/client';
|
|
2
|
+
import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
|
|
3
|
+
/**
|
|
4
|
+
* Resolves SUI coin metadata via the `suix_getCoinMetadata` JSON-RPC method.
|
|
5
|
+
* The `id` is the fully-qualified coin type (e.g. `0x...::module::TYPE`).
|
|
6
|
+
*/
|
|
7
|
+
export const getSuiTokenMetadata = async ({ id }) => {
|
|
8
|
+
const client = getSuiClient();
|
|
9
|
+
const metadata = shouldBePresent(await client.getCoinMetadata({ coinType: id }), `SUI coin metadata for ${id}`);
|
|
10
|
+
return {
|
|
11
|
+
ticker: metadata.symbol,
|
|
12
|
+
decimals: metadata.decimals,
|
|
13
|
+
logo: metadata.iconUrl ?? undefined,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=sui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sui.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/sui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAI5E;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA0C,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzF,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;IAE7B,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAA;IAE/G,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,IAAI,EAAE,QAAQ,CAAC,OAAO,IAAI,SAAS;KACpC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { WalletCore } from '@trustwallet/wallet-core';
|
|
2
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
3
|
+
type Input = {
|
|
4
|
+
chain: Chain;
|
|
5
|
+
id: string;
|
|
6
|
+
walletCore: WalletCore;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Validates a custom token identifier for a given chain.
|
|
10
|
+
*
|
|
11
|
+
* For most chains a token is identified by an address (contract/mint), so this
|
|
12
|
+
* delegates to {@link isValidAddress}. SUI tokens are identified by their fully
|
|
13
|
+
* qualified coin type (e.g. `0x2::sui::SUI`), which is a Move struct tag rather
|
|
14
|
+
* than an account address, so it is validated separately.
|
|
15
|
+
*/
|
|
16
|
+
export declare const isValidTokenId: ({ chain, id, walletCore }: Input) => boolean;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=isValidTokenId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isValidTokenId.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/utils/isValidTokenId.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,KAAK,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAI,2BAA2B,KAAK,YAM9D,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isValidStructTag } from '@mysten/sui/utils';
|
|
2
|
+
import { Chain } from '@vultisig/core-chain/Chain';
|
|
3
|
+
import { isValidAddress } from './isValidAddress.js';
|
|
4
|
+
/**
|
|
5
|
+
* Validates a custom token identifier for a given chain.
|
|
6
|
+
*
|
|
7
|
+
* For most chains a token is identified by an address (contract/mint), so this
|
|
8
|
+
* delegates to {@link isValidAddress}. SUI tokens are identified by their fully
|
|
9
|
+
* qualified coin type (e.g. `0x2::sui::SUI`), which is a Move struct tag rather
|
|
10
|
+
* than an account address, so it is validated separately.
|
|
11
|
+
*/
|
|
12
|
+
export const isValidTokenId = ({ chain, id, walletCore }) => {
|
|
13
|
+
if (chain === Chain.Sui) {
|
|
14
|
+
return isValidStructTag(id.trim());
|
|
15
|
+
}
|
|
16
|
+
return isValidAddress({ chain, address: id, walletCore });
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=isValidTokenId.js.map
|
|
@@ -0,0 +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;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAQjD;;;;;;;GAOG;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,OAAO,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAA;AAC3D,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vultisig/core-chain",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "Blockchain chain logic shared across Vultisig clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -614,6 +614,11 @@
|
|
|
614
614
|
"import": "./dist/chains/solana/spl/getSplAssociatedAccount.js",
|
|
615
615
|
"default": "./dist/chains/solana/spl/getSplAssociatedAccount.js"
|
|
616
616
|
},
|
|
617
|
+
"./chains/sui/buildTransactionFromJson": {
|
|
618
|
+
"types": "./dist/chains/sui/buildTransactionFromJson.d.ts",
|
|
619
|
+
"import": "./dist/chains/sui/buildTransactionFromJson.js",
|
|
620
|
+
"default": "./dist/chains/sui/buildTransactionFromJson.js"
|
|
621
|
+
},
|
|
617
622
|
"./chains/sui/client": {
|
|
618
623
|
"types": "./dist/chains/sui/client.d.ts",
|
|
619
624
|
"import": "./dist/chains/sui/client.js",
|
|
@@ -624,6 +629,11 @@
|
|
|
624
629
|
"import": "./dist/chains/sui/config.js",
|
|
625
630
|
"default": "./dist/chains/sui/config.js"
|
|
626
631
|
},
|
|
632
|
+
"./chains/sui/sign": {
|
|
633
|
+
"types": "./dist/chains/sui/sign.d.ts",
|
|
634
|
+
"import": "./dist/chains/sui/sign.js",
|
|
635
|
+
"default": "./dist/chains/sui/sign.js"
|
|
636
|
+
},
|
|
627
637
|
"./chains/thorchain/ruji/services/fetchMergeableTokenBalances": {
|
|
628
638
|
"types": "./dist/chains/thorchain/ruji/services/fetchMergeableTokenBalances.d.ts",
|
|
629
639
|
"import": "./dist/chains/thorchain/ruji/services/fetchMergeableTokenBalances.js",
|
|
@@ -1014,6 +1024,11 @@
|
|
|
1014
1024
|
"import": "./dist/coin/token/metadata/resolvers/solana.js",
|
|
1015
1025
|
"default": "./dist/coin/token/metadata/resolvers/solana.js"
|
|
1016
1026
|
},
|
|
1027
|
+
"./coin/token/metadata/resolvers/sui": {
|
|
1028
|
+
"types": "./dist/coin/token/metadata/resolvers/sui.d.ts",
|
|
1029
|
+
"import": "./dist/coin/token/metadata/resolvers/sui.js",
|
|
1030
|
+
"default": "./dist/coin/token/metadata/resolvers/sui.js"
|
|
1031
|
+
},
|
|
1017
1032
|
"./coin/token/metadata/resolvers/ton": {
|
|
1018
1033
|
"types": "./dist/coin/token/metadata/resolvers/ton.d.ts",
|
|
1019
1034
|
"import": "./dist/coin/token/metadata/resolvers/ton.js",
|
|
@@ -1790,6 +1805,11 @@
|
|
|
1790
1805
|
"import": "./dist/utils/isValidAddress.js",
|
|
1791
1806
|
"default": "./dist/utils/isValidAddress.js"
|
|
1792
1807
|
},
|
|
1808
|
+
"./utils/isValidTokenId": {
|
|
1809
|
+
"types": "./dist/utils/isValidTokenId.d.ts",
|
|
1810
|
+
"import": "./dist/utils/isValidTokenId.js",
|
|
1811
|
+
"default": "./dist/utils/isValidTokenId.js"
|
|
1812
|
+
},
|
|
1793
1813
|
"./utils/protobuf/toCompressedString": {
|
|
1794
1814
|
"types": "./dist/utils/protobuf/toCompressedString.d.ts",
|
|
1795
1815
|
"import": "./dist/utils/protobuf/toCompressedString.js",
|
|
@@ -1810,7 +1830,7 @@
|
|
|
1810
1830
|
"@cosmjs/amino": "^0.38.1",
|
|
1811
1831
|
"@cosmjs/encoding": "^0.39.0",
|
|
1812
1832
|
"@cosmjs/proto-signing": "^0.38.1",
|
|
1813
|
-
"@cosmjs/stargate": "^0.
|
|
1833
|
+
"@cosmjs/stargate": "^0.39.0",
|
|
1814
1834
|
"@lifi/sdk": "^3.16.2",
|
|
1815
1835
|
"@mysten/sui": "^2.17.0",
|
|
1816
1836
|
"@noble/hashes": "^1.8.0",
|