@wormhole-foundation/sdk-sui-tokenbridge 0.5.0-alpha.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.
@@ -0,0 +1,3 @@
1
+ export * from "./tokenBridge";
2
+ export * from "./utils";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ const sdk_sui_1 = require("@wormhole-foundation/sdk-sui");
18
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
19
+ const tokenBridge_1 = require("./tokenBridge");
20
+ (0, sdk_connect_1.registerProtocol)(sdk_sui_1._platform, "TokenBridge", tokenBridge_1.SuiTokenBridge);
21
+ __exportStar(require("./tokenBridge"), exports);
22
+ __exportStar(require("./utils"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAyD;AACzD,kEAAoE;AACpE,+CAA+C;AAE/C,IAAA,8BAAgB,EAAC,mBAAS,EAAE,aAAa,EAAE,4BAAc,CAAC,CAAC;AAE3D,gDAA8B;AAC9B,0CAAwB"}
@@ -0,0 +1,29 @@
1
+ import { SuiClient } from "@mysten/sui.js/client";
2
+ import { AccountAddress, Chain, ChainAddress, ChainsConfig, Contracts, NativeAddress, Network, Platform, TokenAddress, TokenBridge, TokenId } from "@wormhole-foundation/sdk-connect";
3
+ import { SuiChains, SuiUnsignedTransaction } from "@wormhole-foundation/sdk-sui";
4
+ import "@wormhole-foundation/sdk-sui-core";
5
+ export declare class SuiTokenBridge<N extends Network, C extends SuiChains> implements TokenBridge<N, C> {
6
+ readonly network: N;
7
+ readonly chain: C;
8
+ readonly provider: SuiClient;
9
+ readonly contracts: Contracts;
10
+ readonly coreBridgeObjectId: string;
11
+ readonly tokenBridgeObjectId: string;
12
+ readonly chainId: bigint;
13
+ private constructor();
14
+ static fromRpc<N extends Network>(provider: SuiClient, config: ChainsConfig<N, Platform>): Promise<SuiTokenBridge<N, SuiChains>>;
15
+ isWrappedAsset(token: TokenAddress<C>): Promise<boolean>;
16
+ getOriginalAsset(token: TokenAddress<C>): Promise<TokenId>;
17
+ hasWrappedAsset(token: TokenId): Promise<boolean>;
18
+ getWrappedAsset(token: TokenId<Chain>): Promise<NativeAddress<C>>;
19
+ isTransferCompleted(vaa: TokenBridge.VAA<"Transfer" | "TransferWithPayload">): Promise<boolean>;
20
+ createAttestation(token: TokenAddress<C>): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
21
+ submitAttestation(vaa: TokenBridge.VAA<"AttestMeta">, sender: AccountAddress<C>): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
22
+ transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, payload?: Uint8Array): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
23
+ redeem(sender: AccountAddress<C>, vaa: TokenBridge.VAA<"Transfer" | "TransferWithPayload">, unwrapNative?: boolean): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
24
+ getWrappedNative(): Promise<NativeAddress<C>>;
25
+ private getPackageIds;
26
+ private getCoinBuildOutput;
27
+ private createUnsignedTx;
28
+ }
29
+ //# sourceMappingURL=tokenBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenBridge.d.ts","sourceRoot":"","sources":["../../src/tokenBridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,EACL,cAAc,EACd,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EAET,aAAa,EACb,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,OAAO,EAUR,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAGL,SAAS,EAET,sBAAsB,EAiBvB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,mCAAmC,CAAC;AAE3C,qBAAa,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CAAE,YAAW,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAM5F,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAR/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO;WAoBM,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAChC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAUlC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IASxD,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IA+C1D,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAQjD,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAejE,mBAAmB,CACvB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,GAAG,qBAAqB,CAAC,GACvD,OAAO,CAAC,OAAO,CAAC;IA8BZ,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAmCvF,iBAAiB,CACtB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAClC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAgGxC,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,UAAU,GACnB,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAuJxC,MAAM,CACX,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,GAAG,qBAAqB,CAAC,EACxD,YAAY,GAAE,OAAc,GAC3B,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAgDzC,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAMrC,aAAa;YAQb,kBAAkB;IAkChC,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SuiTokenBridge = void 0;
4
+ const transactions_1 = require("@mysten/sui.js/transactions");
5
+ const utils_1 = require("@mysten/sui.js/utils");
6
+ const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
7
+ const sdk_sui_1 = require("@wormhole-foundation/sdk-sui");
8
+ const utils_2 = require("./utils");
9
+ require("@wormhole-foundation/sdk-sui-core");
10
+ class SuiTokenBridge {
11
+ network;
12
+ chain;
13
+ provider;
14
+ contracts;
15
+ coreBridgeObjectId;
16
+ tokenBridgeObjectId;
17
+ chainId;
18
+ constructor(network, chain, provider, contracts) {
19
+ this.network = network;
20
+ this.chain = chain;
21
+ this.provider = provider;
22
+ this.contracts = contracts;
23
+ this.chainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
24
+ const tokenBridgeAddress = this.contracts.tokenBridge;
25
+ if (!tokenBridgeAddress)
26
+ throw new Error(`Wormhole Token Bridge contract for domain ${chain} not found`);
27
+ const coreBridgeAddress = this.contracts.coreBridge;
28
+ if (!coreBridgeAddress)
29
+ throw new Error(`Wormhole Token Bridge contract for domain ${chain} not found`);
30
+ this.tokenBridgeObjectId = tokenBridgeAddress;
31
+ this.coreBridgeObjectId = coreBridgeAddress;
32
+ }
33
+ static async fromRpc(provider, config) {
34
+ const [network, chain] = await sdk_sui_1.SuiPlatform.chainFromRpc(provider);
35
+ const conf = config[chain];
36
+ if (conf.network !== network)
37
+ throw new Error(`Network mismatch: ${conf.network} != ${network}`);
38
+ return new SuiTokenBridge(network, chain, provider, conf.contracts);
39
+ }
40
+ async isWrappedAsset(token) {
41
+ try {
42
+ await this.getOriginalAsset(token);
43
+ return true;
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
49
+ async getOriginalAsset(token) {
50
+ let coinType = token.getCoinType();
51
+ if (!(0, sdk_sui_1.isValidSuiType)(coinType))
52
+ throw new Error(`Invalid Sui type: ${coinType}`);
53
+ const res = await (0, utils_2.getTokenFromTokenRegistry)(this.provider, this.tokenBridgeObjectId, coinType);
54
+ const fields = (0, sdk_sui_1.getFieldsFromObjectResponse)(res);
55
+ if (!fields)
56
+ throw (0, sdk_connect_1.ErrNotWrapped)(coinType);
57
+ if (!(0, sdk_sui_1.isMoveStructObject)(fields))
58
+ throw new Error("Expected fields to be a MoveStruct");
59
+ if (!("value" in fields))
60
+ throw new Error("Expected a `value` key in fields of MoveStruct");
61
+ const val = fields["value"];
62
+ if (!(0, sdk_sui_1.isMoveStructStruct)(val))
63
+ throw new Error("Expected fields to be a MoveStruct");
64
+ // Normalize types
65
+ const type = (0, sdk_sui_1.trimSuiType)(val.type);
66
+ coinType = (0, sdk_sui_1.trimSuiType)(coinType);
67
+ // Check if wrapped or native asset. We check inclusion instead of equality
68
+ // because it saves us from making an additional RPC call to fetch the package ID.
69
+ if (type.includes(`wrapped_asset::WrappedAsset<${coinType}>`)) {
70
+ const info = val.fields["info"];
71
+ if (!(0, sdk_sui_1.isMoveStructStruct)(info))
72
+ throw new Error("Expected fields to be a MoveStruct");
73
+ const address = info.fields["token_address"];
74
+ if (!(0, sdk_sui_1.isMoveStructStruct)(address))
75
+ throw new Error("Expected fields to be a MoveStruct");
76
+ if (!(0, sdk_sui_1.isMoveStructObject)(address.fields))
77
+ throw new Error("Expected address data to be a MoveObject");
78
+ if (!("value" in address.fields))
79
+ throw new Error("Expected a `value` key in fields of MoveStruct");
80
+ const addressVal = address.fields["value"];
81
+ if (!(0, sdk_sui_1.isMoveStructStruct)(addressVal))
82
+ throw new Error("Expected fields to be a MoveStruct");
83
+ return {
84
+ chain: (0, sdk_connect_1.toChain)(Number(info.fields["token_chain"])),
85
+ // @ts-ignore TODO
86
+ address: new sdk_connect_1.UniversalAddress(addressVal.fields["data"]),
87
+ };
88
+ }
89
+ throw (0, sdk_connect_1.ErrNotWrapped)(coinType);
90
+ }
91
+ async hasWrappedAsset(token) {
92
+ try {
93
+ await this.getWrappedAsset(token);
94
+ return true;
95
+ }
96
+ catch (e) { }
97
+ return false;
98
+ }
99
+ async getWrappedAsset(token) {
100
+ if ((0, sdk_connect_1.isNative)(token.address))
101
+ throw new Error("Token Address required, 'native' literal not supported");
102
+ const address = await (0, utils_2.getTokenCoinType)(this.provider, this.tokenBridgeObjectId, token.address.toUniversalAddress().toUint8Array(), (0, sdk_connect_1.toChainId)(token.chain));
103
+ if (!address)
104
+ throw (0, sdk_connect_1.ErrNotWrapped)((0, sdk_connect_1.canonicalAddress)(token));
105
+ return (0, sdk_connect_1.toNative)(this.chain, address);
106
+ }
107
+ async isTransferCompleted(vaa) {
108
+ const tokenBridgeStateFields = await (0, sdk_sui_1.getObjectFields)(this.provider, this.tokenBridgeObjectId);
109
+ if (!tokenBridgeStateFields)
110
+ throw new Error("Unable to fetch object fields from token bridge state");
111
+ const hashes = tokenBridgeStateFields["consumed_vaas"]?.fields?.hashes;
112
+ const keyType = (0, sdk_sui_1.getTableKeyType)(hashes?.fields?.items?.type);
113
+ if (!keyType)
114
+ throw new Error("Unable to get key type");
115
+ const tableObjectId = hashes?.fields?.items?.fields?.id?.id;
116
+ if (!tableObjectId)
117
+ throw new Error("Unable to fetch consumed VAAs table");
118
+ const response = await this.provider.getDynamicFieldObject({
119
+ parentId: tableObjectId,
120
+ name: {
121
+ type: keyType,
122
+ value: {
123
+ data: [...vaa.hash],
124
+ },
125
+ },
126
+ });
127
+ if (!response.error)
128
+ return true;
129
+ if (response.error.code === "dynamicFieldNotFound")
130
+ return false;
131
+ throw new Error(`Unexpected getDynamicFieldObject response ${response.error}`);
132
+ }
133
+ async *createAttestation(token) {
134
+ const feeAmount = 0n;
135
+ const nonce = 0n;
136
+ const coinType = token.toString();
137
+ const metadata = await this.provider.getCoinMetadata({ coinType });
138
+ if (metadata === null || metadata.id === null)
139
+ throw new Error(`Coin metadata ID for type ${coinType} not found`);
140
+ const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
141
+ const tx = new transactions_1.TransactionBlock();
142
+ const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure(feeAmount)]);
143
+ const [messageTicket] = tx.moveCall({
144
+ target: `${tokenBridgePackageId}::attest_token::attest_token`,
145
+ arguments: [tx.object(this.tokenBridgeObjectId), tx.object(metadata.id), tx.pure(nonce)],
146
+ typeArguments: [coinType],
147
+ });
148
+ tx.moveCall({
149
+ target: `${coreBridgePackageId}::publish_message::publish_message`,
150
+ arguments: [
151
+ tx.object(this.coreBridgeObjectId),
152
+ feeCoin,
153
+ messageTicket,
154
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
155
+ ],
156
+ });
157
+ yield this.createUnsignedTx(tx, "Sui.TokenBridge.CreateAttestation");
158
+ }
159
+ async *submitAttestation(vaa, sender) {
160
+ const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
161
+ const senderAddress = sender.toString();
162
+ const decimals = Math.min(vaa.payload.decimals, 8);
163
+ const build = await this.getCoinBuildOutput(coreBridgePackageId, tokenBridgePackageId, decimals);
164
+ const publishTx = await (0, sdk_sui_1.publishPackage)(build, senderAddress);
165
+ yield this.createUnsignedTx(publishTx, "Sui.TokenBridge.PrepareCreateWrapped");
166
+ // TODO: refactor this to something less embarassing
167
+ let coinPackageId = "";
168
+ let wrappedSetupObjectId = "";
169
+ let coinUpgradeCapId = "";
170
+ let coinMetadataObjectId = "";
171
+ let versionType = "";
172
+ let found = false;
173
+ while (!found) {
174
+ // wait for the result of the previous tx to fetch the new coinPackageId
175
+ await new Promise((r) => setTimeout(r, 500));
176
+ const txBlocks = await this.provider.queryTransactionBlocks({
177
+ filter: { FromAddress: senderAddress },
178
+ options: { showObjectChanges: true },
179
+ limit: 3,
180
+ });
181
+ // Find the txblock with both the coinPackageId and wrappedType
182
+ for (const txb of txBlocks.data) {
183
+ if (!("objectChanges" in txb))
184
+ continue;
185
+ for (const change of txb.objectChanges) {
186
+ if ((0, sdk_sui_1.isSuiPublishEvent)(change) && change.packageId !== undefined) {
187
+ coinPackageId = change.packageId;
188
+ }
189
+ else if ((0, sdk_sui_1.isSuiCreateEvent)(change) && change.objectType.includes("WrappedAssetSetup")) {
190
+ wrappedSetupObjectId = change.objectId;
191
+ // TODO: what
192
+ versionType = change.objectType.split(", ")[1].replace(">", ""); // ugh
193
+ }
194
+ else if ((0, sdk_sui_1.isSuiCreateEvent)(change) && change.objectType.includes("UpgradeCap")) {
195
+ coinUpgradeCapId = change.objectId;
196
+ }
197
+ else if ((0, sdk_sui_1.isSuiCreateEvent)(change) && change.objectType.includes("CoinMetadata")) {
198
+ coinMetadataObjectId = change.objectId;
199
+ }
200
+ }
201
+ if (coinPackageId !== "" &&
202
+ wrappedSetupObjectId !== "" &&
203
+ coinUpgradeCapId !== "" &&
204
+ coinMetadataObjectId !== "") {
205
+ found = true;
206
+ break;
207
+ }
208
+ else {
209
+ coinPackageId = "";
210
+ wrappedSetupObjectId = "";
211
+ coinUpgradeCapId = "";
212
+ coinMetadataObjectId = "";
213
+ }
214
+ }
215
+ }
216
+ const coinType = (0, sdk_sui_1.getCoinTypeFromPackageId)(coinPackageId);
217
+ const createTx = new transactions_1.TransactionBlock();
218
+ const [txVaa] = createTx.moveCall({
219
+ target: `${coreBridgePackageId}::vaa::parse_and_verify`,
220
+ arguments: [
221
+ createTx.object(this.coreBridgeObjectId),
222
+ createTx.pure((0, sdk_sui_1.uint8ArrayToBCS)((0, sdk_connect_1.serialize)(vaa))),
223
+ createTx.object(utils_1.SUI_CLOCK_OBJECT_ID),
224
+ ],
225
+ });
226
+ const [message] = createTx.moveCall({
227
+ target: `${tokenBridgePackageId}::vaa::verify_only_once`,
228
+ arguments: [createTx.object(this.tokenBridgeObjectId), txVaa],
229
+ });
230
+ createTx.moveCall({
231
+ target: `${tokenBridgePackageId}::create_wrapped::complete_registration`,
232
+ arguments: [
233
+ createTx.object(this.tokenBridgeObjectId),
234
+ createTx.object(coinMetadataObjectId),
235
+ createTx.object(wrappedSetupObjectId),
236
+ createTx.object(coinUpgradeCapId),
237
+ message,
238
+ ],
239
+ typeArguments: [coinType, versionType],
240
+ });
241
+ yield this.createUnsignedTx(createTx, "Sui.TokenBridge.SubmitAttestation");
242
+ }
243
+ async *transfer(sender, recipient, token, amount, payload) {
244
+ // TODO:
245
+ const feeAmount = 0n;
246
+ const relayerFee = 0n;
247
+ const nonce = 0;
248
+ const senderAddress = sender.toString();
249
+ const coinType = ((0, sdk_connect_1.isNative)(token) ? utils_1.SUI_TYPE_ARG : token).toString();
250
+ const coins = (await this.provider.getCoins({
251
+ owner: senderAddress,
252
+ coinType,
253
+ })).data;
254
+ const [primaryCoin, ...mergeCoins] = coins.filter((coin) => (0, sdk_sui_1.isSameType)(coin.coinType, coinType));
255
+ if (primaryCoin === undefined)
256
+ throw new Error(`Coins array doesn't contain any coins of type ${coinType}`);
257
+ const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
258
+ const tx = new transactions_1.TransactionBlock();
259
+ const [transferCoin] = (() => {
260
+ if (coinType === utils_1.SUI_TYPE_ARG) {
261
+ return tx.splitCoins(tx.gas, [tx.pure(amount)]);
262
+ }
263
+ else {
264
+ const primaryCoinInput = tx.object(primaryCoin.coinObjectId);
265
+ if (mergeCoins.length) {
266
+ tx.mergeCoins(primaryCoinInput, mergeCoins.map((coin) => tx.object(coin.coinObjectId)));
267
+ }
268
+ return tx.splitCoins(primaryCoinInput, [tx.pure(amount)]);
269
+ }
270
+ })();
271
+ const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure(feeAmount)]);
272
+ const [assetInfo] = tx.moveCall({
273
+ target: `${tokenBridgePackageId}::state::verified_asset`,
274
+ arguments: [tx.object(this.tokenBridgeObjectId)],
275
+ typeArguments: [coinType],
276
+ });
277
+ if (!payload) {
278
+ const [transferTicket, dust] = tx.moveCall({
279
+ target: `${tokenBridgePackageId}::transfer_tokens::prepare_transfer`,
280
+ arguments: [
281
+ assetInfo,
282
+ transferCoin,
283
+ tx.pure((0, sdk_connect_1.toChainId)(recipient.chain)),
284
+ tx.pure((0, sdk_sui_1.uint8ArrayToBCS)(recipient.address.toUint8Array())),
285
+ tx.pure(relayerFee),
286
+ tx.pure(nonce),
287
+ ],
288
+ typeArguments: [coinType],
289
+ });
290
+ tx.moveCall({
291
+ target: `${tokenBridgePackageId}::coin_utils::return_nonzero`,
292
+ arguments: [dust],
293
+ typeArguments: [coinType],
294
+ });
295
+ const [messageTicket] = tx.moveCall({
296
+ target: `${tokenBridgePackageId}::transfer_tokens::transfer_tokens`,
297
+ arguments: [tx.object(this.tokenBridgeObjectId), transferTicket],
298
+ typeArguments: [coinType],
299
+ });
300
+ tx.moveCall({
301
+ target: `${coreBridgePackageId}::publish_message::publish_message`,
302
+ arguments: [
303
+ tx.object(this.coreBridgeObjectId),
304
+ feeCoin,
305
+ messageTicket,
306
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
307
+ ],
308
+ });
309
+ yield this.createUnsignedTx(tx, "Sui.TokenBridge.Transfer");
310
+ }
311
+ else {
312
+ if (!senderAddress)
313
+ throw new Error("senderAddress is required for transfer with payload");
314
+ // Get or create a new `EmitterCap`
315
+ let isNewEmitterCap = false;
316
+ const emitterCap = await (async () => {
317
+ const objectId = await (0, sdk_sui_1.getOldestEmitterCapObjectId)(this.provider, coreBridgePackageId, senderAddress);
318
+ if (objectId !== null) {
319
+ return tx.object(objectId);
320
+ }
321
+ else {
322
+ const [emitterCap] = tx.moveCall({
323
+ target: `${coreBridgePackageId}::emitter::new`,
324
+ arguments: [tx.object(this.coreBridgeObjectId)],
325
+ });
326
+ isNewEmitterCap = true;
327
+ return emitterCap;
328
+ }
329
+ })();
330
+ const [transferTicket, dust] = tx.moveCall({
331
+ target: `${tokenBridgePackageId}::transfer_tokens_with_payload::prepare_transfer`,
332
+ arguments: [
333
+ emitterCap,
334
+ assetInfo,
335
+ transferCoin,
336
+ tx.pure((0, sdk_connect_1.toChainId)(recipient.chain)),
337
+ tx.pure(recipient.address.toUint8Array()),
338
+ tx.pure([...payload]),
339
+ tx.pure(nonce),
340
+ ],
341
+ typeArguments: [coinType],
342
+ });
343
+ tx.moveCall({
344
+ target: `${tokenBridgePackageId}::coin_utils::return_nonzero`,
345
+ arguments: [dust],
346
+ typeArguments: [coinType],
347
+ });
348
+ const [messageTicket] = tx.moveCall({
349
+ target: `${tokenBridgePackageId}::transfer_tokens_with_payload::transfer_tokens_with_payload`,
350
+ arguments: [tx.object(this.tokenBridgeObjectId), transferTicket],
351
+ typeArguments: [coinType],
352
+ });
353
+ tx.moveCall({
354
+ target: `${coreBridgePackageId}::publish_message::publish_message`,
355
+ arguments: [
356
+ tx.object(this.coreBridgeObjectId),
357
+ feeCoin,
358
+ messageTicket,
359
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
360
+ ],
361
+ });
362
+ if (isNewEmitterCap) {
363
+ tx.transferObjects([emitterCap], tx.pure(senderAddress));
364
+ }
365
+ yield this.createUnsignedTx(tx, "Sui.TokenBridge.TransferWithPayload");
366
+ }
367
+ }
368
+ async *redeem(sender, vaa, unwrapNative = true) {
369
+ const coinType = await (0, utils_2.getTokenCoinType)(this.provider, this.tokenBridgeObjectId, vaa.payload.token.address.toUint8Array(), (0, sdk_connect_1.toChainId)(vaa.payload.token.chain));
370
+ if (!coinType) {
371
+ throw new Error("Unable to fetch token coinType");
372
+ }
373
+ const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
374
+ const tx = new transactions_1.TransactionBlock();
375
+ const [verifiedVAA] = tx.moveCall({
376
+ target: `${coreBridgePackageId}::vaa::parse_and_verify`,
377
+ arguments: [
378
+ tx.object(this.coreBridgeObjectId),
379
+ tx.pure((0, sdk_sui_1.uint8ArrayToBCS)((0, sdk_connect_1.serialize)(vaa))),
380
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
381
+ ],
382
+ });
383
+ const [tokenBridgeMessage] = tx.moveCall({
384
+ target: `${tokenBridgePackageId}::vaa::verify_only_once`,
385
+ arguments: [tx.object(this.tokenBridgeObjectId), verifiedVAA],
386
+ });
387
+ const [relayerReceipt] = tx.moveCall({
388
+ target: `${tokenBridgePackageId}::complete_transfer::authorize_transfer`,
389
+ arguments: [tx.object(this.tokenBridgeObjectId), tokenBridgeMessage],
390
+ typeArguments: [coinType],
391
+ });
392
+ const [coins] = tx.moveCall({
393
+ target: `${tokenBridgePackageId}::complete_transfer::redeem_relayer_payout`,
394
+ arguments: [relayerReceipt],
395
+ typeArguments: [coinType],
396
+ });
397
+ tx.moveCall({
398
+ target: `${tokenBridgePackageId}::coin_utils::return_nonzero`,
399
+ arguments: [coins],
400
+ typeArguments: [coinType],
401
+ });
402
+ yield this.createUnsignedTx(tx, "Sui.TokenBridge.Redeem");
403
+ }
404
+ async getWrappedNative() {
405
+ const md = await this.provider.getCoinMetadata({ coinType: utils_1.SUI_TYPE_ARG });
406
+ if (!md)
407
+ throw new Error("Coin metadata not found");
408
+ return (0, sdk_connect_1.toNative)(this.chain, md.id);
409
+ }
410
+ async getPackageIds() {
411
+ // TODO: can these be cached?
412
+ return Promise.all([
413
+ (0, sdk_sui_1.getPackageId)(this.provider, this.coreBridgeObjectId),
414
+ (0, sdk_sui_1.getPackageId)(this.provider, this.tokenBridgeObjectId),
415
+ ]);
416
+ }
417
+ async getCoinBuildOutput(coreBridgePackageId, tokenBridgePackageId, decimals) {
418
+ if (decimals > 8)
419
+ throw new Error("Decimals is capped at 8");
420
+ // Construct bytecode, parametrized by token bridge package ID and decimals
421
+ const strippedTokenBridgePackageId = (await (0, sdk_sui_1.getOriginalPackageId)(this.provider, this.tokenBridgeObjectId))?.replace("0x", "");
422
+ if (!strippedTokenBridgePackageId) {
423
+ throw new Error(`Original token bridge package ID not found for object ID ${this.tokenBridgeObjectId}`);
424
+ }
425
+ const bytecodeHex = "a11ceb0b060000000901000a020a14031e1704350405392d07669f01088502600ae502050cea02160004010b010c0205020d000002000201020003030c020001000104020700000700010001090801010c020a050600030803040202000302010702080007080100020800080303090002070801010b020209000901010608010105010b0202080008030209000504434f494e095478436f6e7465787408565f5f305f325f3011577261707065644173736574536574757004636f696e0e6372656174655f777261707065640b64756d6d795f6669656c6404696e697414707265706172655f726567697374726174696f6e0f7075626c69635f7472616e736665720673656e646572087472616e736665720a74785f636f6e746578740f76657273696f6e5f636f6e74726f6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" +
426
+ strippedTokenBridgePackageId +
427
+ "00020106010000000001090b0031" +
428
+ decimals.toString(16).padStart(2, "0") +
429
+ "0a0138000b012e110238010200";
430
+ const bytecode = sdk_connect_1.encoding.b64.encode(sdk_connect_1.encoding.hex.decode(bytecodeHex));
431
+ return {
432
+ modules: [bytecode],
433
+ dependencies: ["0x1", "0x2", tokenBridgePackageId, coreBridgePackageId].map((d) => (0, utils_1.normalizeSuiObjectId)(d)),
434
+ };
435
+ }
436
+ createUnsignedTx(txReq, description, parallelizable = false) {
437
+ return new sdk_sui_1.SuiUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
438
+ }
439
+ }
440
+ exports.SuiTokenBridge = SuiTokenBridge;
441
+ //# sourceMappingURL=tokenBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenBridge.js","sourceRoot":"","sources":["../../src/tokenBridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { SuiClient, SuiObjectResponse } from "@mysten/sui.js/client";
2
+ export declare const getTokenFromTokenRegistry: (provider: SuiClient, tokenBridgeStateObjectId: string, tokenType: string) => Promise<SuiObjectResponse>;
3
+ export declare const getTokenCoinType: (provider: SuiClient, tokenBridgeStateObjectId: string, tokenAddress: Uint8Array, tokenChain: number) => Promise<string | null>;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAWrE,eAAO,MAAM,yBAAyB,aAC1B,SAAS,4BACO,MAAM,aACrB,MAAM,KAChB,QAAQ,iBAAiB,CAkC3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,aACjB,SAAS,4BACO,MAAM,gBAClB,UAAU,cACZ,MAAM,KACjB,QAAQ,MAAM,GAAG,IAAI,CAsCvB,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTokenCoinType = exports.getTokenFromTokenRegistry = void 0;
4
+ const sdk_sui_1 = require("@wormhole-foundation/sdk-sui");
5
+ const getTokenFromTokenRegistry = async (provider, tokenBridgeStateObjectId, tokenType) => {
6
+ if (!(0, sdk_sui_1.isValidSuiType)(tokenType)) {
7
+ throw new Error(`Invalid Sui type: ${tokenType}`);
8
+ }
9
+ const tokenBridgeStateFields = await (0, sdk_sui_1.getObjectFields)(provider, tokenBridgeStateObjectId);
10
+ if (!tokenBridgeStateFields) {
11
+ throw new Error(`Unable to fetch object fields from token bridge state. Object ID: ${tokenBridgeStateObjectId}`);
12
+ }
13
+ const tokenRegistryObjectId = tokenBridgeStateFields["token_registry"].fields?.id?.id;
14
+ if (!tokenRegistryObjectId) {
15
+ throw new Error("Unable to fetch token registry object ID");
16
+ }
17
+ const tokenRegistryPackageId = (0, sdk_sui_1.getPackageIdFromType)(tokenBridgeStateFields["token_registry"]?.type);
18
+ if (!tokenRegistryPackageId) {
19
+ throw new Error("Unable to fetch token registry package ID");
20
+ }
21
+ return provider.getDynamicFieldObject({
22
+ parentId: tokenRegistryObjectId,
23
+ name: {
24
+ type: `${tokenRegistryPackageId}::token_registry::Key<${tokenType}>`,
25
+ value: {
26
+ dummy_field: false,
27
+ },
28
+ },
29
+ });
30
+ };
31
+ exports.getTokenFromTokenRegistry = getTokenFromTokenRegistry;
32
+ const getTokenCoinType = async (provider, tokenBridgeStateObjectId, tokenAddress, tokenChain) => {
33
+ const tokenBridgeStateFields = await (0, sdk_sui_1.getObjectFields)(provider, tokenBridgeStateObjectId);
34
+ if (!tokenBridgeStateFields)
35
+ throw new Error("Unable to fetch object fields from token bridge state");
36
+ const coinTypes = tokenBridgeStateFields["token_registry"]?.fields?.coin_types;
37
+ const coinTypesObjectId = coinTypes?.fields?.id?.id;
38
+ if (!coinTypesObjectId) {
39
+ throw new Error("Unable to fetch coin types");
40
+ }
41
+ const keyType = (0, sdk_sui_1.getTableKeyType)(coinTypes?.type);
42
+ if (!keyType) {
43
+ throw new Error("Unable to get key type");
44
+ }
45
+ const response = await provider.getDynamicFieldObject({
46
+ parentId: coinTypesObjectId,
47
+ name: {
48
+ type: keyType,
49
+ value: {
50
+ addr: [...tokenAddress],
51
+ chain: tokenChain,
52
+ },
53
+ },
54
+ });
55
+ if (response.error) {
56
+ if (response.error.code === "dynamicFieldNotFound") {
57
+ return null;
58
+ }
59
+ throw new Error(`Unexpected getDynamicFieldObject response ${response.error}`);
60
+ }
61
+ const fields = (0, sdk_sui_1.getFieldsFromObjectResponse)(response);
62
+ if (!fields)
63
+ return null;
64
+ if (!(0, sdk_sui_1.isMoveStructObject)(fields))
65
+ throw new Error("What?");
66
+ return "value" in fields ? (0, sdk_sui_1.trimSuiType)(fields["value"]) : null;
67
+ };
68
+ exports.getTokenCoinType = getTokenCoinType;
69
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./tokenBridge";
2
+ export * from "./utils";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { _platform } from "@wormhole-foundation/sdk-sui";
2
+ import { registerProtocol } from "@wormhole-foundation/sdk-connect";
3
+ import { SuiTokenBridge } from "./tokenBridge";
4
+ registerProtocol(_platform, "TokenBridge", SuiTokenBridge);
5
+ export * from "./tokenBridge";
6
+ export * from "./utils";
7
+ //# sourceMappingURL=index.js.map