@wormhole-foundation/sdk-sui 0.5.0-beta.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/dist/cjs/address.d.ts +34 -0
- package/dist/cjs/address.d.ts.map +1 -0
- package/dist/cjs/address.js +120 -0
- package/dist/cjs/address.js.map +1 -0
- package/dist/cjs/chain.d.ts +5 -0
- package/dist/cjs/chain.d.ts.map +1 -0
- package/dist/cjs/chain.js +8 -0
- package/dist/cjs/chain.js.map +1 -0
- package/dist/cjs/constants.d.ts +3 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +6 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/platform.d.ts +25 -0
- package/dist/cjs/platform.d.ts.map +1 -0
- package/dist/cjs/platform.js +110 -0
- package/dist/cjs/platform.js.map +1 -0
- package/dist/cjs/signer.d.ts +15 -0
- package/dist/cjs/signer.d.ts.map +1 -0
- package/dist/cjs/signer.js +42 -0
- package/dist/cjs/signer.js.map +1 -0
- package/dist/cjs/testing/index.d.ts +2 -0
- package/dist/cjs/testing/index.d.ts.map +1 -0
- package/dist/cjs/testing/index.js +18 -0
- package/dist/cjs/testing/index.js.map +1 -0
- package/dist/cjs/testing/signer.d.ts +11 -0
- package/dist/cjs/testing/signer.d.ts.map +1 -0
- package/dist/cjs/testing/signer.js +27 -0
- package/dist/cjs/testing/signer.js.map +1 -0
- package/dist/cjs/types.d.ts +30 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +40 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/unsignedTransaction.d.ts +12 -0
- package/dist/cjs/unsignedTransaction.d.ts.map +1 -0
- package/dist/cjs/unsignedTransaction.js +19 -0
- package/dist/cjs/unsignedTransaction.js.map +1 -0
- package/dist/cjs/utils.d.ts +15 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +215 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/address.d.ts +34 -0
- package/dist/esm/address.d.ts.map +1 -0
- package/dist/esm/address.js +109 -0
- package/dist/esm/address.js.map +1 -0
- package/dist/esm/chain.d.ts +5 -0
- package/dist/esm/chain.d.ts.map +1 -0
- package/dist/esm/chain.js +4 -0
- package/dist/esm/chain.js.map +1 -0
- package/dist/esm/constants.d.ts +3 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +3 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +8 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/platform.d.ts +25 -0
- package/dist/esm/platform.d.ts.map +1 -0
- package/dist/esm/platform.js +106 -0
- package/dist/esm/platform.js.map +1 -0
- package/dist/esm/signer.d.ts +15 -0
- package/dist/esm/signer.d.ts.map +1 -0
- package/dist/esm/signer.js +37 -0
- package/dist/esm/signer.js.map +1 -0
- package/dist/esm/testing/index.d.ts +2 -0
- package/dist/esm/testing/index.d.ts.map +1 -0
- package/dist/esm/testing/index.js +2 -0
- package/dist/esm/testing/index.js.map +1 -0
- package/dist/esm/testing/signer.d.ts +11 -0
- package/dist/esm/testing/signer.d.ts.map +1 -0
- package/dist/esm/testing/signer.js +22 -0
- package/dist/esm/testing/signer.js.map +1 -0
- package/dist/esm/types.d.ts +30 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +30 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/unsignedTransaction.d.ts +12 -0
- package/dist/esm/unsignedTransaction.d.ts.map +1 -0
- package/dist/esm/unsignedTransaction.js +15 -0
- package/dist/esm/unsignedTransaction.js.map +1 -0
- package/dist/esm/utils.d.ts +15 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +202 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { PlatformContext, Wormhole, chainToPlatform, isNative, nativeChainIds, decimals as nativeDecimals, networkPlatformConfigs, } from "@wormhole-foundation/sdk-connect";
|
|
2
|
+
import { SuiClient } from "@mysten/sui.js/client";
|
|
3
|
+
import { SuiAddress } from "./address";
|
|
4
|
+
import { SuiChain } from "./chain";
|
|
5
|
+
import { SUI_COIN } from "./constants";
|
|
6
|
+
import { _platform } from "./types";
|
|
7
|
+
import { getObjectFields } from "./utils";
|
|
8
|
+
/**
|
|
9
|
+
* @category Sui
|
|
10
|
+
*/
|
|
11
|
+
export class SuiPlatform extends PlatformContext {
|
|
12
|
+
static _platform = _platform;
|
|
13
|
+
constructor(network, _config) {
|
|
14
|
+
super(network, _config ?? networkPlatformConfigs(network, SuiPlatform._platform));
|
|
15
|
+
}
|
|
16
|
+
getRpc(chain) {
|
|
17
|
+
if (chain in this.config)
|
|
18
|
+
return new SuiClient({ url: this.config[chain].rpc });
|
|
19
|
+
throw new Error("No configuration available for chain: " + chain);
|
|
20
|
+
}
|
|
21
|
+
getChain(chain) {
|
|
22
|
+
if (chain in this.config)
|
|
23
|
+
return new SuiChain(chain, this);
|
|
24
|
+
throw new Error("No configuration available for chain: " + chain);
|
|
25
|
+
}
|
|
26
|
+
static nativeTokenId(network, chain) {
|
|
27
|
+
if (!SuiPlatform.isSupportedChain(chain))
|
|
28
|
+
throw new Error(`invalid chain for ${_platform}: ${chain}`);
|
|
29
|
+
return Wormhole.tokenId(chain, SUI_COIN);
|
|
30
|
+
}
|
|
31
|
+
static isNativeTokenId(network, chain, tokenId) {
|
|
32
|
+
if (!SuiPlatform.isSupportedChain(chain))
|
|
33
|
+
return false;
|
|
34
|
+
if (tokenId.chain !== chain)
|
|
35
|
+
return false;
|
|
36
|
+
const native = this.nativeTokenId(network, chain);
|
|
37
|
+
return native === tokenId;
|
|
38
|
+
}
|
|
39
|
+
static isSupportedChain(chain) {
|
|
40
|
+
const platform = chainToPlatform(chain);
|
|
41
|
+
return platform === SuiPlatform._platform;
|
|
42
|
+
}
|
|
43
|
+
static async getDecimals(chain, rpc, token) {
|
|
44
|
+
if (isNative(token))
|
|
45
|
+
return nativeDecimals.nativeDecimals(SuiPlatform._platform);
|
|
46
|
+
const parsedAddress = new SuiAddress(token);
|
|
47
|
+
try {
|
|
48
|
+
const fields = await getObjectFields(rpc, parsedAddress.toString());
|
|
49
|
+
if (fields && "decimals" in fields)
|
|
50
|
+
return fields["decimals"];
|
|
51
|
+
}
|
|
52
|
+
catch { }
|
|
53
|
+
const metadata = await rpc.getCoinMetadata({ coinType: parsedAddress.getCoinType() });
|
|
54
|
+
if (metadata === null)
|
|
55
|
+
throw new Error(`Can't fetch decimals for token ${parsedAddress.toString()}`);
|
|
56
|
+
return metadata.decimals;
|
|
57
|
+
}
|
|
58
|
+
static async getBalance(chain, rpc, walletAddr, token) {
|
|
59
|
+
if (isNative(token)) {
|
|
60
|
+
const { totalBalance } = await rpc.getBalance({
|
|
61
|
+
owner: walletAddr,
|
|
62
|
+
});
|
|
63
|
+
return BigInt(totalBalance);
|
|
64
|
+
}
|
|
65
|
+
const { totalBalance } = await rpc.getBalance({
|
|
66
|
+
owner: walletAddr,
|
|
67
|
+
coinType: token.toString(),
|
|
68
|
+
});
|
|
69
|
+
return BigInt(totalBalance);
|
|
70
|
+
}
|
|
71
|
+
static async getBalances(chain, rpc, walletAddr, tokens) {
|
|
72
|
+
const balancesArr = await Promise.all(tokens.map(async (token) => {
|
|
73
|
+
const balance = await this.getBalance(chain, rpc, walletAddr, token);
|
|
74
|
+
const address = isNative(token) ? "native" : new SuiAddress(token).toString();
|
|
75
|
+
return { [address]: balance };
|
|
76
|
+
}));
|
|
77
|
+
return balancesArr.reduce((obj, item) => Object.assign(obj, item), {});
|
|
78
|
+
}
|
|
79
|
+
static async sendWait(chain, rpc, stxns) {
|
|
80
|
+
const txhashes = [];
|
|
81
|
+
for (const stxn of stxns) {
|
|
82
|
+
const pendingTx = await rpc.executeTransactionBlock(stxn);
|
|
83
|
+
await rpc.waitForTransactionBlock({ digest: pendingTx.digest });
|
|
84
|
+
txhashes.push(pendingTx.digest);
|
|
85
|
+
}
|
|
86
|
+
return txhashes;
|
|
87
|
+
}
|
|
88
|
+
static async getLatestBlock(rpc) {
|
|
89
|
+
return Number(await rpc.getLatestCheckpointSequenceNumber());
|
|
90
|
+
}
|
|
91
|
+
static async getLatestFinalizedBlock(rpc) {
|
|
92
|
+
return this.getLatestBlock(rpc);
|
|
93
|
+
}
|
|
94
|
+
static chainFromChainId(chainId) {
|
|
95
|
+
const networkChainPair = nativeChainIds.platformNativeChainIdToNetworkChain(SuiPlatform._platform, chainId);
|
|
96
|
+
if (networkChainPair === undefined)
|
|
97
|
+
throw new Error(`Unknown native chain id ${chainId}`);
|
|
98
|
+
const [network, chain] = networkChainPair;
|
|
99
|
+
return [network, chain];
|
|
100
|
+
}
|
|
101
|
+
static async chainFromRpc(rpc) {
|
|
102
|
+
const result = await rpc.call("sui_getChainIdentifier", []);
|
|
103
|
+
return this.chainFromChainId(result);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SuiClient } from "@mysten/sui.js/client";
|
|
2
|
+
import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519";
|
|
3
|
+
import { Network, SignAndSendSigner, Signer, TxHash, UnsignedTransaction } from "@wormhole-foundation/sdk-connect";
|
|
4
|
+
import { SuiChains } from "./types";
|
|
5
|
+
export declare function getSuiSigner(rpc: SuiClient, privateKey: string): Promise<Signer>;
|
|
6
|
+
export declare class SuiSigner<N extends Network, C extends SuiChains> implements SignAndSendSigner<N, C> {
|
|
7
|
+
private _chain;
|
|
8
|
+
private _client;
|
|
9
|
+
private _signer;
|
|
10
|
+
constructor(_chain: C, _client: SuiClient, _signer: Ed25519Keypair);
|
|
11
|
+
chain(): C;
|
|
12
|
+
address(): string;
|
|
13
|
+
signAndSend(txns: UnsignedTransaction[]): Promise<TxHash[]>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,wBAAsB,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGtF;AAGD,qBAAa,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CAAE,YAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;IAE7F,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;gBAFP,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,cAAc;IAGjC,KAAK,IAAI,CAAC;IAIV,OAAO,IAAI,MAAM;IAIX,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAelE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Ed25519Keypair } from "@mysten/sui.js/keypairs/ed25519";
|
|
2
|
+
import { SuiPlatform } from "./platform";
|
|
3
|
+
export async function getSuiSigner(rpc, privateKey) {
|
|
4
|
+
const [, chain] = await SuiPlatform.chainFromRpc(rpc);
|
|
5
|
+
return new SuiSigner(chain, rpc, Ed25519Keypair.deriveKeypair(privateKey, "m/44'/784'/0'/0'/0'"));
|
|
6
|
+
}
|
|
7
|
+
// SuiSigner implements SignOnlySender
|
|
8
|
+
export class SuiSigner {
|
|
9
|
+
_chain;
|
|
10
|
+
_client;
|
|
11
|
+
_signer;
|
|
12
|
+
constructor(_chain, _client, _signer) {
|
|
13
|
+
this._chain = _chain;
|
|
14
|
+
this._client = _client;
|
|
15
|
+
this._signer = _signer;
|
|
16
|
+
}
|
|
17
|
+
chain() {
|
|
18
|
+
return this._chain;
|
|
19
|
+
}
|
|
20
|
+
address() {
|
|
21
|
+
return this._signer.toSuiAddress();
|
|
22
|
+
}
|
|
23
|
+
async signAndSend(txns) {
|
|
24
|
+
const txids = [];
|
|
25
|
+
for (const tx of txns) {
|
|
26
|
+
const { description, transaction } = tx;
|
|
27
|
+
console.log(`Signing ${description} for ${this.address()}`);
|
|
28
|
+
const result = await this._client.signAndExecuteTransactionBlock({
|
|
29
|
+
transactionBlock: transaction,
|
|
30
|
+
signer: this._signer,
|
|
31
|
+
});
|
|
32
|
+
txids.push(result.digest);
|
|
33
|
+
}
|
|
34
|
+
return txids;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQjE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAc,EAAE,UAAkB;IACnE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,cAAc,CAAC,aAAa,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,sCAAsC;AACtC,MAAM,OAAO,SAAS;IAEV;IACA;IACA;IAHV,YACU,MAAS,EACT,OAAkB,EAClB,OAAuB;QAFvB,WAAM,GAAN,MAAM,CAAG;QACT,YAAO,GAAP,OAAO,CAAW;QAClB,YAAO,GAAP,OAAO,CAAgB;IAC9B,CAAC;IAEJ,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA2B;QAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE;YACrB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAkC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,QAAQ,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC;gBAC/D,gBAAgB,EAAE,WAAW;gBAC7B,MAAM,EAAE,IAAI,CAAC,OAAO;aACrB,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Chain, Network, SignOnlySigner, SignedTx, Signer, UnsignedTransaction } from "@wormhole-foundation/connect-sdk";
|
|
2
|
+
import { JsonRpcProvider } from "@mysten/sui.js";
|
|
3
|
+
export declare function getSuiSigner(rpc: JsonRpcProvider, privateKey: string): Promise<Signer>;
|
|
4
|
+
export declare class SuiSigner<N extends Network, C extends Chain> implements SignOnlySigner<N, C> {
|
|
5
|
+
private _chain;
|
|
6
|
+
constructor(_chain: C, _rpc: JsonRpcProvider, privateKey: string);
|
|
7
|
+
chain(): C;
|
|
8
|
+
address(): string;
|
|
9
|
+
sign(tx: UnsignedTransaction[]): Promise<SignedTx[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../src/testing/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,OAAO,EACP,cAAc,EACd,QAAQ,EACR,MAAM,EACN,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG5F;AAGD,qBAAa,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,KAAK,CAAE,YAAW,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtF,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,CAAC,EACjB,IAAI,EAAE,eAAe,EACrB,UAAU,EAAE,MAAM;IAGpB,KAAK,IAAI,CAAC;IAIV,OAAO,IAAI,MAAM;IAIX,IAAI,CAAC,EAAE,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;CAG3D"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SuiPlatform } from "../platform";
|
|
2
|
+
export async function getSuiSigner(rpc, privateKey) {
|
|
3
|
+
const [network, chain] = await SuiPlatform.chainFromRpc(rpc);
|
|
4
|
+
return new SuiSigner(chain, rpc, privateKey);
|
|
5
|
+
}
|
|
6
|
+
// SuiSigner implements SignOnlySender
|
|
7
|
+
export class SuiSigner {
|
|
8
|
+
_chain;
|
|
9
|
+
constructor(_chain, _rpc, privateKey) {
|
|
10
|
+
this._chain = _chain;
|
|
11
|
+
}
|
|
12
|
+
chain() {
|
|
13
|
+
return this._chain;
|
|
14
|
+
}
|
|
15
|
+
address() {
|
|
16
|
+
return "";
|
|
17
|
+
}
|
|
18
|
+
async sign(tx) {
|
|
19
|
+
throw new Error("Not implemented");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../../src/testing/signer.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAoB,EAAE,UAAkB;IACzE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,IAAI,SAAS,CAA+B,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AAC7E,CAAC;AAED,sCAAsC;AACtC,MAAM,OAAO,SAAS;IAEV;IADV,YACU,MAAS,EACjB,IAAqB,EACrB,UAAkB;QAFV,WAAM,GAAN,MAAM,CAAG;IAGhB,CAAC;IAEJ,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAyB;QAClC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MoveValue, SuiObjectResponse } from "@mysten/sui.js/client";
|
|
2
|
+
import { PlatformToChains, UniversalOrNative } from "@wormhole-foundation/sdk-connect";
|
|
3
|
+
export declare const _platform: "Sui";
|
|
4
|
+
export type SuiPlatformType = typeof _platform;
|
|
5
|
+
export type SuiChains = PlatformToChains<SuiPlatformType>;
|
|
6
|
+
export type UniversalOrSui = UniversalOrNative<SuiChains>;
|
|
7
|
+
export type AnySuiAddress = UniversalOrSui | string | Uint8Array;
|
|
8
|
+
export type SuiBuildOutput = {
|
|
9
|
+
modules: string[];
|
|
10
|
+
dependencies: string[];
|
|
11
|
+
};
|
|
12
|
+
export declare const getFieldsFromObjectResponse: (object: SuiObjectResponse) => import("@mysten/sui.js/client").MoveStruct | null;
|
|
13
|
+
export declare const isSameType: (a: string, b: string) => boolean;
|
|
14
|
+
export declare const isSuiCreateEvent: <T extends import("@mysten/sui.js/client").SuiObjectChange, K extends Extract<T, {
|
|
15
|
+
type: "created";
|
|
16
|
+
}>>(event: T) => event is K;
|
|
17
|
+
export declare const isSuiPublishEvent: <T extends import("@mysten/sui.js/client").SuiObjectChange, K extends Extract<T, {
|
|
18
|
+
type: "published";
|
|
19
|
+
}>>(event: T) => event is K;
|
|
20
|
+
export declare function isMoveStructArray(value: any): value is MoveValue[];
|
|
21
|
+
export declare function isMoveStructStruct(value: any): value is {
|
|
22
|
+
fields: {
|
|
23
|
+
[key: string]: MoveValue;
|
|
24
|
+
};
|
|
25
|
+
type: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function isMoveStructObject(value: any): value is {
|
|
28
|
+
[key: string]: MoveValue;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAA+B,MAAM,uBAAuB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGvF,eAAO,MAAM,SAAS,EAAE,KAAa,CAAC;AACtC,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC1D,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,2BAA2B,WAAY,iBAAiB,sDAGpE,CAAC;AAEF,eAAO,MAAM,UAAU,MAAO,MAAM,KAAK,MAAM,YAM9C,CAAC;AAGF,eAAO,MAAM,gBAAgB;UAEE,SAAS;2BAGE,CAAC;AAE3C,eAAO,MAAM,iBAAiB;UAEC,WAAW;2BAGE,CAAC;AAK7C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,SAAS,EAAE,CAElE;AACD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,GAAG,GACT,KAAK,IAAI;IAAE,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAEjE;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAEpF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { normalizeSuiType } from "./address";
|
|
2
|
+
export const _platform = "Sui";
|
|
3
|
+
export const getFieldsFromObjectResponse = (object) => {
|
|
4
|
+
const content = object.data?.content;
|
|
5
|
+
return content && content.dataType === "moveObject" ? content.fields : null;
|
|
6
|
+
};
|
|
7
|
+
export const isSameType = (a, b) => {
|
|
8
|
+
try {
|
|
9
|
+
return normalizeSuiType(a) === normalizeSuiType(b);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
// Event typeguard helpers
|
|
16
|
+
export const isSuiCreateEvent = (event) => event?.type === "created";
|
|
17
|
+
export const isSuiPublishEvent = (event) => event?.type === "published";
|
|
18
|
+
//
|
|
19
|
+
// MoveStruct typeguard helpers
|
|
20
|
+
//
|
|
21
|
+
export function isMoveStructArray(value) {
|
|
22
|
+
return Array.isArray(value);
|
|
23
|
+
}
|
|
24
|
+
export function isMoveStructStruct(value) {
|
|
25
|
+
return !Array.isArray(value) && typeof value === "object" && "fields" in value && "type" in value;
|
|
26
|
+
}
|
|
27
|
+
export function isMoveStructObject(value) {
|
|
28
|
+
return typeof value === "object" && !isMoveStructArray(value) && !isMoveStructStruct(value);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,SAAS,GAAU,KAAK,CAAC;AAYtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,MAAyB,EAAE,EAAE;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;IACrC,OAAO,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;IACjD,IAAI;QACF,OAAO,gBAAgB,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;KACpD;IAAC,MAAM;QACN,OAAO,KAAK,CAAC;KACd;AACH,CAAC,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAI9B,KAAQ,EACI,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,SAAS,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAI/B,KAAQ,EACI,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,WAAW,CAAC;AAE7C,EAAE;AACF,+BAA+B;AAC/B,EAAE;AACF,MAAM,UAAU,iBAAiB,CAAC,KAAU;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AACD,MAAM,UAAU,kBAAkB,CAChC,KAAU;IAEV,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC;AACpG,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAU;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC9F,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TransactionBlock } from "@mysten/sui.js/transactions";
|
|
2
|
+
import { Network, UnsignedTransaction } from "@wormhole-foundation/sdk-connect";
|
|
3
|
+
import { SuiChains } from "./types";
|
|
4
|
+
export declare class SuiUnsignedTransaction<N extends Network, C extends SuiChains> implements UnsignedTransaction<N, C> {
|
|
5
|
+
readonly transaction: TransactionBlock;
|
|
6
|
+
readonly network: N;
|
|
7
|
+
readonly chain: C;
|
|
8
|
+
readonly description: string;
|
|
9
|
+
readonly parallelizable: boolean;
|
|
10
|
+
constructor(transaction: TransactionBlock, network: N, chain: C, description: string, parallelizable?: boolean);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=unsignedTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsignedTransaction.d.ts","sourceRoot":"","sources":["../../src/unsignedTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,qBAAa,sBAAsB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CACxE,YAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGlC,QAAQ,CAAC,WAAW,EAAE,gBAAgB;IACtC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO;gBAJvB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,OAAe;CAE3C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class SuiUnsignedTransaction {
|
|
2
|
+
transaction;
|
|
3
|
+
network;
|
|
4
|
+
chain;
|
|
5
|
+
description;
|
|
6
|
+
parallelizable;
|
|
7
|
+
constructor(transaction, network, chain, description, parallelizable = false) {
|
|
8
|
+
this.transaction = transaction;
|
|
9
|
+
this.network = network;
|
|
10
|
+
this.chain = chain;
|
|
11
|
+
this.description = description;
|
|
12
|
+
this.parallelizable = parallelizable;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=unsignedTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsignedTransaction.js","sourceRoot":"","sources":["../../src/unsignedTransaction.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,sBAAsB;IAItB;IACA;IACA;IACA;IACA;IALX,YACW,WAA6B,EAC7B,OAAU,EACV,KAAQ,EACR,WAAmB,EACnB,iBAA0B,KAAK;QAJ/B,gBAAW,GAAX,WAAW,CAAkB;QAC7B,YAAO,GAAP,OAAO,CAAG;QACV,UAAK,GAAL,KAAK,CAAG;QACR,gBAAW,GAAX,WAAW,CAAQ;QACnB,mBAAc,GAAd,cAAc,CAAiB;IACvC,CAAC;CACL"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SuiClient } from "@mysten/sui.js/client";
|
|
2
|
+
import { TransactionBlock } from "@mysten/sui.js/transactions";
|
|
3
|
+
import { SuiBuildOutput } from "./types";
|
|
4
|
+
export declare const UPGRADE_CAP_TYPE = "0x2::package::UpgradeCap";
|
|
5
|
+
export declare const uint8ArrayToBCS: (arr: Uint8Array) => Uint8Array;
|
|
6
|
+
export declare const getOriginalPackageId: (provider: SuiClient, stateObjectId: string) => Promise<string>;
|
|
7
|
+
export declare const getObjectFields: (provider: SuiClient, objectId: string) => Promise<Record<string, any> | null>;
|
|
8
|
+
export declare function getPackageId(provider: SuiClient, objectId: string): Promise<string>;
|
|
9
|
+
export declare const getOldestEmitterCapObjectId: (provider: SuiClient, coreBridgePackageId: string, owner: string) => Promise<string | null>;
|
|
10
|
+
export declare const getOwnedObjectId: (provider: SuiClient, owner: string, type: string) => Promise<string | null>;
|
|
11
|
+
export declare const getOwnedObjectIdPaginated: (provider: SuiClient, owner: string, type: string, cursor?: string) => Promise<string | null>;
|
|
12
|
+
export declare const getUpgradeCapObjectId: (provider: SuiClient, owner: string, packageId: string) => Promise<string | null>;
|
|
13
|
+
export declare const publishPackage: (buildOutput: SuiBuildOutput, signerAddress: string) => Promise<TransactionBlock>;
|
|
14
|
+
export declare const newEmitterCap: (coreBridgePackageId: string, coreBridgeStateObjectId: string, owner: string) => TransactionBlock;
|
|
15
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAI/D,OAAO,EACL,cAAc,EAKf,MAAM,SAAS,CAAC;AAGjB,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAG3D,eAAO,MAAM,eAAe,QAAS,UAAU,eAC4B,CAAC;AAM5E,eAAO,MAAM,oBAAoB,aAAoB,SAAS,iBAAiB,MAAM,oBAWpF,CAAC;AAEF,eAAO,MAAM,eAAe,aAChB,SAAS,YACT,MAAM,KACf,QAAQ,OAAO,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAWpC,CAAC;AAEF,wBAAsB,YAAY,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BzF;AAED,eAAO,MAAM,2BAA2B,aAC5B,SAAS,uBACE,MAAM,SACpB,MAAM,KACZ,QAAQ,MAAM,GAAG,IAAI,CAgCvB,CAAC;AAEF,eAAO,MAAM,gBAAgB,aACjB,SAAS,SACZ,MAAM,QACP,MAAM,KACX,QAAQ,MAAM,GAAG,IAAI,CAuCvB,CAAC;AAEF,eAAO,MAAM,yBAAyB,aAC1B,SAAS,SACZ,MAAM,QACP,MAAM,WACH,MAAM,KACd,QAAQ,MAAM,GAAG,IAAI,CAsBvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,aACtB,SAAS,SACZ,MAAM,aACF,MAAM,KAChB,QAAQ,MAAM,GAAG,IAAI,CAgCvB,CAAC;AAGF,eAAO,MAAM,cAAc,gBACZ,cAAc,iBACZ,MAAM,KACpB,QAAQ,gBAAgB,CAS1B,CAAC;AAEF,eAAO,MAAM,aAAa,wBACH,MAAM,2BACF,MAAM,SACxB,MAAM,KACZ,gBAQF,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { bcs } from "@mysten/sui.js/bcs";
|
|
2
|
+
import { TransactionBlock } from "@mysten/sui.js/transactions";
|
|
3
|
+
import { isValidSuiAddress, normalizeSuiAddress, normalizeSuiObjectId } from "@mysten/sui.js/utils";
|
|
4
|
+
import { encoding } from "@wormhole-foundation/sdk-connect";
|
|
5
|
+
import { getFieldsFromObjectResponse, isMoveStructObject, isMoveStructStruct, isSameType, } from "./types";
|
|
6
|
+
import { getPackageIdFromType, normalizeSuiType } from "./address";
|
|
7
|
+
export const UPGRADE_CAP_TYPE = "0x2::package::UpgradeCap";
|
|
8
|
+
const MAX_PURE_ARGUMENT_SIZE = 16 * 1024;
|
|
9
|
+
export const uint8ArrayToBCS = (arr) => bcs.ser("vector<u8>", arr, { maxSize: MAX_PURE_ARGUMENT_SIZE }).toBytes();
|
|
10
|
+
//
|
|
11
|
+
// Utils to fetch data from Sui
|
|
12
|
+
//
|
|
13
|
+
export const getOriginalPackageId = async (provider, stateObjectId) => {
|
|
14
|
+
const { data, error } = await provider.getObject({
|
|
15
|
+
id: stateObjectId,
|
|
16
|
+
options: { showContent: true },
|
|
17
|
+
});
|
|
18
|
+
if (error)
|
|
19
|
+
throw new Error("Error getting object: " + error);
|
|
20
|
+
if (!data || !isMoveStructStruct(data.content))
|
|
21
|
+
throw new Error(`Cannot get oject for state id ${stateObjectId}: ` + data);
|
|
22
|
+
return getPackageIdFromType(data.content.type);
|
|
23
|
+
};
|
|
24
|
+
export const getObjectFields = async (provider, objectId) => {
|
|
25
|
+
if (!isValidSuiAddress(objectId)) {
|
|
26
|
+
throw new Error(`Invalid object ID: ${objectId}`);
|
|
27
|
+
}
|
|
28
|
+
const res = await provider.getObject({
|
|
29
|
+
id: objectId,
|
|
30
|
+
options: {
|
|
31
|
+
showContent: true,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
return getFieldsFromObjectResponse(res);
|
|
35
|
+
};
|
|
36
|
+
export async function getPackageId(provider, objectId) {
|
|
37
|
+
let currentPackage;
|
|
38
|
+
let nextCursor;
|
|
39
|
+
do {
|
|
40
|
+
const dynamicFields = await provider.getDynamicFields({
|
|
41
|
+
parentId: objectId,
|
|
42
|
+
cursor: nextCursor,
|
|
43
|
+
});
|
|
44
|
+
currentPackage = dynamicFields.data.find((field) => field.name.type.endsWith("CurrentPackage"));
|
|
45
|
+
nextCursor = dynamicFields.hasNextPage ? dynamicFields.nextCursor : null;
|
|
46
|
+
} while (nextCursor && !currentPackage);
|
|
47
|
+
if (!currentPackage)
|
|
48
|
+
throw new Error("CurrentPackage not found");
|
|
49
|
+
const obj = await provider.getObject({
|
|
50
|
+
id: currentPackage.objectId,
|
|
51
|
+
options: {
|
|
52
|
+
showContent: true,
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
const fields = getFieldsFromObjectResponse(obj);
|
|
56
|
+
if (!fields || !isMoveStructObject(fields))
|
|
57
|
+
throw new Error("Unable to get fields from object response");
|
|
58
|
+
if (!("value" in fields) || !isMoveStructStruct(fields["value"]))
|
|
59
|
+
throw new Error("Unable to get package id");
|
|
60
|
+
return fields["value"].fields["package"];
|
|
61
|
+
}
|
|
62
|
+
export const getOldestEmitterCapObjectId = async (provider, coreBridgePackageId, owner) => {
|
|
63
|
+
let oldestVersion = null;
|
|
64
|
+
let oldestObjectId = null;
|
|
65
|
+
let response = null;
|
|
66
|
+
let nextCursor;
|
|
67
|
+
do {
|
|
68
|
+
response = await provider.getOwnedObjects({
|
|
69
|
+
owner,
|
|
70
|
+
filter: {
|
|
71
|
+
StructType: `${coreBridgePackageId}::emitter::EmitterCap`,
|
|
72
|
+
},
|
|
73
|
+
options: {
|
|
74
|
+
showContent: true,
|
|
75
|
+
},
|
|
76
|
+
cursor: nextCursor,
|
|
77
|
+
});
|
|
78
|
+
if (!response || !response.data) {
|
|
79
|
+
throw Error("Failed to get owned objects");
|
|
80
|
+
}
|
|
81
|
+
for (const objectResponse of response.data) {
|
|
82
|
+
if (!objectResponse.data)
|
|
83
|
+
continue;
|
|
84
|
+
const { version, objectId } = objectResponse.data;
|
|
85
|
+
if (oldestVersion === null || version < oldestVersion) {
|
|
86
|
+
oldestVersion = version;
|
|
87
|
+
oldestObjectId = objectId;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
nextCursor = response.hasNextPage ? response.nextCursor : undefined;
|
|
91
|
+
} while (nextCursor);
|
|
92
|
+
return oldestObjectId;
|
|
93
|
+
};
|
|
94
|
+
export const getOwnedObjectId = async (provider, owner, type) => {
|
|
95
|
+
// Upgrade caps are a special case
|
|
96
|
+
if (isSameType(type, UPGRADE_CAP_TYPE)) {
|
|
97
|
+
throw new Error("`getOwnedObjectId` should not be used to get the object ID of an `UpgradeCap`. Use `getUpgradeCapObjectId` instead.");
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const res = await provider.getOwnedObjects({
|
|
101
|
+
owner,
|
|
102
|
+
filter: { StructType: type },
|
|
103
|
+
options: {
|
|
104
|
+
showContent: true,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
if (!res || !res.data) {
|
|
108
|
+
throw new Error("Failed to get owned objects");
|
|
109
|
+
}
|
|
110
|
+
const objects = res.data.filter((o) => o.data?.objectId);
|
|
111
|
+
if (!objects || objects.length === 0)
|
|
112
|
+
return null;
|
|
113
|
+
if (objects.length === 1) {
|
|
114
|
+
return objects[0].data?.objectId ?? null;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
const objectsStr = JSON.stringify(objects, null, 2);
|
|
118
|
+
throw new Error(`Found multiple objects owned by ${owner} of type ${type}. This may mean that we've received an unexpected response from the Sui RPC and \`worm\` logic needs to be updated to handle this. Objects: ${objectsStr}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
// Handle 504 error by using findOwnedObjectByType method
|
|
123
|
+
const is504HttpError = `${error}`.includes("504 Gateway Time-out");
|
|
124
|
+
if (error && is504HttpError) {
|
|
125
|
+
return getOwnedObjectIdPaginated(provider, owner, type);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
export const getOwnedObjectIdPaginated = async (provider, owner, type, cursor) => {
|
|
133
|
+
const res = await provider.getOwnedObjects({
|
|
134
|
+
owner,
|
|
135
|
+
filter: undefined,
|
|
136
|
+
cursor: cursor || undefined,
|
|
137
|
+
options: {
|
|
138
|
+
showType: true,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
if (!res || !res.data) {
|
|
142
|
+
throw new Error("Could not fetch owned object id");
|
|
143
|
+
}
|
|
144
|
+
const object = res.data.find((d) => isSameType(d.data?.type || "", type));
|
|
145
|
+
if (!object && res.hasNextPage) {
|
|
146
|
+
return getOwnedObjectIdPaginated(provider, owner, type, res.nextCursor);
|
|
147
|
+
}
|
|
148
|
+
else if (!object && !res.hasNextPage) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
return object?.data?.objectId ?? null;
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
export const getUpgradeCapObjectId = async (provider, owner, packageId) => {
|
|
156
|
+
const res = await provider.getOwnedObjects({
|
|
157
|
+
owner,
|
|
158
|
+
filter: { StructType: normalizeSuiType(UPGRADE_CAP_TYPE) },
|
|
159
|
+
options: {
|
|
160
|
+
showContent: true,
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
if (!res || !res.data) {
|
|
164
|
+
throw new Error("Failed to get upgrade caps");
|
|
165
|
+
}
|
|
166
|
+
const objects = res.data.filter((o) => {
|
|
167
|
+
const fields = getFieldsFromObjectResponse(o);
|
|
168
|
+
return (isMoveStructStruct(fields) &&
|
|
169
|
+
normalizeSuiAddress(fields.fields["package"]) === normalizeSuiAddress(packageId));
|
|
170
|
+
});
|
|
171
|
+
if (!objects || objects.length === 0)
|
|
172
|
+
return null;
|
|
173
|
+
if (objects.length === 1) {
|
|
174
|
+
// We've found the object we're looking for
|
|
175
|
+
return objects[0].data?.objectId ?? null;
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
const objectsStr = JSON.stringify(objects, null, 2);
|
|
179
|
+
throw new Error(`Found multiple upgrade capabilities owned by ${owner} from package ${packageId}. Objects: ${objectsStr}`);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
// Create a TransactionBlock to publish a package
|
|
183
|
+
export const publishPackage = async (buildOutput, signerAddress) => {
|
|
184
|
+
const tx = new TransactionBlock();
|
|
185
|
+
const [upgradeCap] = tx.publish({
|
|
186
|
+
modules: buildOutput.modules.map((m) => Array.from(encoding.b64.decode(m))),
|
|
187
|
+
dependencies: buildOutput.dependencies.map((d) => normalizeSuiObjectId(d)),
|
|
188
|
+
});
|
|
189
|
+
// Transfer upgrade capability to recipient
|
|
190
|
+
tx.transferObjects([upgradeCap], tx.pure(signerAddress));
|
|
191
|
+
return tx;
|
|
192
|
+
};
|
|
193
|
+
export const newEmitterCap = (coreBridgePackageId, coreBridgeStateObjectId, owner) => {
|
|
194
|
+
const tx = new TransactionBlock();
|
|
195
|
+
const [emitterCap] = tx.moveCall({
|
|
196
|
+
target: `${coreBridgePackageId}::emitter::new`,
|
|
197
|
+
arguments: [tx.object(coreBridgeStateObjectId)],
|
|
198
|
+
});
|
|
199
|
+
tx.transferObjects([emitterCap], tx.pure(owner));
|
|
200
|
+
return tx;
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|