@wormhole-foundation/sdk-sui-tokenbridge 4.22.0 → 5.0.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.
Files changed (38) hide show
  1. package/dist/esm/automaticTokenBridge.d.ts +9 -5
  2. package/dist/esm/automaticTokenBridge.d.ts.map +1 -1
  3. package/dist/esm/automaticTokenBridge.js +51 -87
  4. package/dist/esm/automaticTokenBridge.js.map +1 -1
  5. package/dist/esm/executorTokenBridge.d.ts +6 -5
  6. package/dist/esm/executorTokenBridge.d.ts.map +1 -1
  7. package/dist/esm/executorTokenBridge.js +1 -3
  8. package/dist/esm/executorTokenBridge.js.map +1 -1
  9. package/dist/esm/tokenBridge.d.ts +4 -4
  10. package/dist/esm/tokenBridge.d.ts.map +1 -1
  11. package/dist/esm/tokenBridge.js +62 -113
  12. package/dist/esm/tokenBridge.js.map +1 -1
  13. package/dist/esm/utils.d.ts +8 -3
  14. package/dist/esm/utils.d.ts.map +1 -1
  15. package/dist/esm/utils.js +38 -45
  16. package/dist/esm/utils.js.map +1 -1
  17. package/package.json +13 -31
  18. package/dist/cjs/automaticTokenBridge.d.ts +0 -34
  19. package/dist/cjs/automaticTokenBridge.d.ts.map +0 -1
  20. package/dist/cjs/automaticTokenBridge.js +0 -315
  21. package/dist/cjs/automaticTokenBridge.js.map +0 -1
  22. package/dist/cjs/executorTokenBridge.d.ts +0 -26
  23. package/dist/cjs/executorTokenBridge.d.ts.map +0 -1
  24. package/dist/cjs/executorTokenBridge.js +0 -208
  25. package/dist/cjs/executorTokenBridge.js.map +0 -1
  26. package/dist/cjs/index.d.ts +0 -5
  27. package/dist/cjs/index.d.ts.map +0 -1
  28. package/dist/cjs/index.js +0 -28
  29. package/dist/cjs/index.js.map +0 -1
  30. package/dist/cjs/package.json +0 -1
  31. package/dist/cjs/tokenBridge.d.ts +0 -33
  32. package/dist/cjs/tokenBridge.d.ts.map +0 -1
  33. package/dist/cjs/tokenBridge.js +0 -478
  34. package/dist/cjs/tokenBridge.js.map +0 -1
  35. package/dist/cjs/utils.d.ts +0 -4
  36. package/dist/cjs/utils.d.ts.map +0 -1
  37. package/dist/cjs/utils.js +0 -69
  38. package/dist/cjs/utils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"type":"commonjs"}
@@ -1,33 +0,0 @@
1
- import type { SuiClient } from "@mysten/sui/client";
2
- import type { AccountAddress, Chain, ChainAddress, ChainsConfig, Contracts, NativeAddress, Network, Platform, TokenAddress, TokenBridge, TokenId } from "@wormhole-foundation/sdk-connect";
3
- import { UniversalAddress } from "@wormhole-foundation/sdk-connect";
4
- import type { SuiChains } from "@wormhole-foundation/sdk-sui";
5
- import { SuiUnsignedTransaction } from "@wormhole-foundation/sdk-sui";
6
- import "@wormhole-foundation/sdk-sui-core";
7
- export declare class SuiTokenBridge<N extends Network, C extends SuiChains> implements TokenBridge<N, C> {
8
- readonly network: N;
9
- readonly chain: C;
10
- readonly provider: SuiClient;
11
- readonly contracts: Contracts;
12
- readonly coreBridgeObjectId: string;
13
- readonly tokenBridgeObjectId: string;
14
- readonly chainId: bigint;
15
- constructor(network: N, chain: C, provider: SuiClient, contracts: Contracts);
16
- static fromRpc<N extends Network>(provider: SuiClient, config: ChainsConfig<N, Platform>): Promise<SuiTokenBridge<N, SuiChains>>;
17
- isWrappedAsset(token: TokenAddress<C>): Promise<boolean>;
18
- getOriginalAsset(token: TokenAddress<C>): Promise<TokenId>;
19
- getTokenUniversalAddress(token: NativeAddress<C>): Promise<UniversalAddress>;
20
- getTokenNativeAddress(originChain: Chain, token: UniversalAddress): Promise<NativeAddress<C>>;
21
- hasWrappedAsset(token: TokenId): Promise<boolean>;
22
- getWrappedAsset(token: TokenId<Chain>): Promise<NativeAddress<C>>;
23
- isTransferCompleted(vaa: TokenBridge.VAA<"Transfer" | "TransferWithPayload">): Promise<boolean>;
24
- createAttestation(token: TokenAddress<C>): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
25
- submitAttestation(vaa: TokenBridge.VAA<"AttestMeta">, sender: AccountAddress<C>): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
26
- transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, payload?: Uint8Array): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
27
- redeem(sender: AccountAddress<C>, vaa: TokenBridge.VAA<"Transfer" | "TransferWithPayload">, unwrapNative?: boolean): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
28
- getWrappedNative(): Promise<NativeAddress<C>>;
29
- private getPackageIds;
30
- private getCoinBuildOutput;
31
- private createUnsignedTx;
32
- }
33
- //# sourceMappingURL=tokenBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenBridge.d.ts","sourceRoot":"","sources":["../../src/tokenBridge.ts"],"names":[],"mappings":"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"}
@@ -1,478 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SuiTokenBridge = void 0;
4
- const transactions_1 = require("@mysten/sui/transactions");
5
- const utils_1 = require("@mysten/sui/utils");
6
- const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
7
- const sdk_sui_1 = require("@wormhole-foundation/sdk-sui");
8
- const sdk_sui_2 = require("@wormhole-foundation/sdk-sui");
9
- const utils_js_1 = require("./utils.js");
10
- require("@wormhole-foundation/sdk-sui-core");
11
- class SuiTokenBridge {
12
- network;
13
- chain;
14
- provider;
15
- contracts;
16
- coreBridgeObjectId;
17
- tokenBridgeObjectId;
18
- chainId;
19
- constructor(network, chain, provider, contracts) {
20
- this.network = network;
21
- this.chain = chain;
22
- this.provider = provider;
23
- this.contracts = contracts;
24
- this.chainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
25
- const tokenBridgeAddress = this.contracts.tokenBridge;
26
- if (!tokenBridgeAddress)
27
- throw new Error(`Wormhole Token Bridge contract for domain ${chain} not found`);
28
- const coreBridgeAddress = this.contracts.coreBridge;
29
- if (!coreBridgeAddress)
30
- throw new Error(`Wormhole Token Bridge contract for domain ${chain} not found`);
31
- this.tokenBridgeObjectId = tokenBridgeAddress;
32
- this.coreBridgeObjectId = coreBridgeAddress;
33
- }
34
- static async fromRpc(provider, config) {
35
- const [network, chain] = await sdk_sui_2.SuiPlatform.chainFromRpc(provider);
36
- const conf = config[chain];
37
- if (conf.network !== network)
38
- throw new Error(`Network mismatch: ${conf.network} != ${network}`);
39
- return new SuiTokenBridge(network, chain, provider, conf.contracts);
40
- }
41
- async isWrappedAsset(token) {
42
- try {
43
- await this.getOriginalAsset(token);
44
- return true;
45
- }
46
- catch {
47
- return false;
48
- }
49
- }
50
- async getOriginalAsset(token) {
51
- let coinType = token.getCoinType();
52
- if (!(0, sdk_sui_2.isValidSuiType)(coinType))
53
- throw new Error(`Invalid Sui type: ${coinType}`);
54
- const res = await (0, utils_js_1.getTokenFromTokenRegistry)(this.provider, this.tokenBridgeObjectId, coinType);
55
- const fields = (0, sdk_sui_2.getFieldsFromObjectResponse)(res);
56
- if (!fields)
57
- throw (0, sdk_connect_1.ErrNotWrapped)(coinType);
58
- if (!(0, sdk_sui_2.isMoveStructObject)(fields))
59
- throw new Error("Expected fields to be a MoveStruct");
60
- if (!("value" in fields))
61
- throw new Error("Expected a `value` key in fields of MoveStruct");
62
- const val = fields["value"];
63
- if (!(0, sdk_sui_2.isMoveStructStruct)(val))
64
- throw new Error("Expected fields to be a MoveStruct");
65
- // Normalize types
66
- const type = (0, sdk_sui_2.trimSuiType)(val.type);
67
- coinType = (0, sdk_sui_2.trimSuiType)(coinType);
68
- // Check if wrapped or native asset. We check inclusion instead of equality
69
- // because it saves us from making an additional RPC call to fetch the package ID.
70
- if (type.includes(`wrapped_asset::WrappedAsset<${coinType}>`)) {
71
- const info = val.fields["info"];
72
- if (!(0, sdk_sui_2.isMoveStructStruct)(info))
73
- throw new Error("Expected fields to be a MoveStruct");
74
- const address = info.fields["token_address"];
75
- if (!(0, sdk_sui_2.isMoveStructStruct)(address))
76
- throw new Error("Expected fields to be a MoveStruct");
77
- if (!(0, sdk_sui_2.isMoveStructObject)(address.fields))
78
- throw new Error("Expected address data to be a MoveObject");
79
- if (!("value" in address.fields))
80
- throw new Error("Expected a `value` key in fields of MoveStruct");
81
- const addressVal = address.fields["value"];
82
- if (!(0, sdk_sui_2.isMoveStructStruct)(addressVal))
83
- throw new Error("Expected fields to be a MoveStruct");
84
- const universalAddress = new Uint8Array(addressVal.fields["data"]);
85
- return {
86
- chain: (0, sdk_connect_1.toChain)(Number(info.fields["token_chain"])),
87
- address: new sdk_connect_1.UniversalAddress(universalAddress),
88
- };
89
- }
90
- throw (0, sdk_connect_1.ErrNotWrapped)(coinType);
91
- }
92
- async getTokenUniversalAddress(token) {
93
- let coinType = token.getCoinType();
94
- if (!(0, sdk_sui_2.isValidSuiType)(coinType))
95
- throw new Error(`Invalid Sui type: ${coinType}`);
96
- const res = await (0, utils_js_1.getTokenFromTokenRegistry)(this.provider, this.tokenBridgeObjectId, coinType);
97
- const fields = (0, sdk_sui_2.getFieldsFromObjectResponse)(res);
98
- if (!fields) {
99
- throw new Error(`Token of type ${coinType} has not been registered with the token bridge. Has it been attested?`);
100
- }
101
- if (!(0, sdk_sui_2.isMoveStructObject)(fields))
102
- throw new Error("Expected fields to be a MoveStruct");
103
- if (!("value" in fields))
104
- throw new Error("Expected a `value` key in fields of MoveStruct");
105
- const val = fields["value"];
106
- if (!(0, sdk_sui_2.isMoveStructStruct)(val))
107
- throw new Error("Expected fields to be a MoveStruct");
108
- // Normalize types
109
- const type = (0, sdk_sui_2.trimSuiType)(val.type);
110
- coinType = (0, sdk_sui_2.trimSuiType)(coinType);
111
- // Check if wrapped or native asset. We check inclusion instead of equality
112
- // because it saves us from making an additional RPC call to fetch the package ID.
113
- if (type.includes(`native_asset::NativeAsset<${coinType}>`)) {
114
- // fields.value.fields.token_address.fields.value.fields.data
115
- const address = val.fields["token_address"];
116
- if (!(0, sdk_sui_2.isMoveStructStruct)(address))
117
- throw new Error("Expected fields to be a MoveStruct");
118
- if (!("value" in address.fields))
119
- throw new Error("Expected a `value` key in fields of MoveStruct");
120
- const addressVal = address.fields["value"];
121
- if (!(0, sdk_sui_2.isMoveStructStruct)(addressVal))
122
- throw new Error("Expected fields to be a MoveStruct");
123
- const universalAddress = new Uint8Array(addressVal.fields["data"]);
124
- return new sdk_connect_1.UniversalAddress(universalAddress);
125
- }
126
- throw new Error(`Token of type ${coinType} is not a native asset`);
127
- }
128
- async getTokenNativeAddress(originChain, token) {
129
- const address = await (0, utils_js_1.getTokenCoinType)(this.provider, this.tokenBridgeObjectId, token.toUint8Array(), (0, sdk_connect_1.toChainId)(originChain));
130
- if (!address)
131
- throw new Error(`Token ${token.toString()} not found in token registry`);
132
- return new sdk_sui_1.SuiAddress(address);
133
- }
134
- async hasWrappedAsset(token) {
135
- try {
136
- await this.getWrappedAsset(token);
137
- return true;
138
- }
139
- catch (e) { }
140
- return false;
141
- }
142
- async getWrappedAsset(token) {
143
- if ((0, sdk_connect_1.isNative)(token.address))
144
- throw new Error("Token Address required, 'native' literal not supported");
145
- const address = await (0, utils_js_1.getTokenCoinType)(this.provider, this.tokenBridgeObjectId, token.address.toUniversalAddress().toUint8Array(), (0, sdk_connect_1.toChainId)(token.chain));
146
- if (!address)
147
- throw (0, sdk_connect_1.ErrNotWrapped)((0, sdk_connect_1.canonicalAddress)(token));
148
- return (0, sdk_connect_1.toNative)(this.chain, address);
149
- }
150
- async isTransferCompleted(vaa) {
151
- const tokenBridgeStateFields = await (0, sdk_sui_2.getObjectFields)(this.provider, this.tokenBridgeObjectId);
152
- if (!tokenBridgeStateFields)
153
- throw new Error("Unable to fetch object fields from token bridge state");
154
- const hashes = tokenBridgeStateFields["consumed_vaas"]?.fields?.hashes;
155
- const keyType = (0, sdk_sui_2.getTableKeyType)(hashes?.fields?.items?.type);
156
- if (!keyType)
157
- throw new Error("Unable to get key type");
158
- const tableObjectId = hashes?.fields?.items?.fields?.id?.id;
159
- if (!tableObjectId)
160
- throw new Error("Unable to fetch consumed VAAs table");
161
- const response = await this.provider.getDynamicFieldObject({
162
- parentId: tableObjectId,
163
- name: {
164
- type: keyType,
165
- value: {
166
- data: [...(0, sdk_connect_1.keccak256)(vaa.hash)],
167
- },
168
- },
169
- });
170
- if (!response.error)
171
- return true;
172
- if (response.error.code === "dynamicFieldNotFound")
173
- return false;
174
- throw new Error(`Unexpected getDynamicFieldObject response ${response.error}`);
175
- }
176
- async *createAttestation(token) {
177
- const feeAmount = 0n;
178
- const nonce = 0;
179
- const coinType = token.toString();
180
- const metadata = await this.provider.getCoinMetadata({ coinType });
181
- if (metadata === null || metadata.id === null)
182
- throw new Error(`Coin metadata ID for type ${coinType} not found`);
183
- const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
184
- const tx = new transactions_1.Transaction();
185
- const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(feeAmount)]);
186
- const [messageTicket] = tx.moveCall({
187
- target: `${tokenBridgePackageId}::attest_token::attest_token`,
188
- arguments: [tx.object(this.tokenBridgeObjectId), tx.object(metadata.id), tx.pure.u32(nonce)],
189
- typeArguments: [coinType],
190
- });
191
- tx.moveCall({
192
- target: `${coreBridgePackageId}::publish_message::publish_message`,
193
- arguments: [
194
- tx.object(this.coreBridgeObjectId),
195
- feeCoin,
196
- messageTicket,
197
- tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
198
- ],
199
- });
200
- yield this.createUnsignedTx(tx, "Sui.TokenBridge.CreateAttestation");
201
- }
202
- async *submitAttestation(vaa, sender) {
203
- const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
204
- const senderAddress = sender.toString();
205
- const decimals = Math.min(vaa.payload.decimals, 8);
206
- const build = await this.getCoinBuildOutput(coreBridgePackageId, tokenBridgePackageId, decimals);
207
- const publishTx = await (0, sdk_sui_2.publishPackage)(build, senderAddress);
208
- yield this.createUnsignedTx(publishTx, "Sui.TokenBridge.PrepareCreateWrapped");
209
- // TODO: refactor this to something less embarassing
210
- let coinPackageId = "";
211
- let wrappedSetupObjectId = "";
212
- let coinUpgradeCapId = "";
213
- let coinMetadataObjectId = "";
214
- let versionType = "";
215
- let found = false;
216
- while (!found) {
217
- // wait for the result of the previous tx to fetch the new coinPackageId
218
- await new Promise((r) => setTimeout(r, 500));
219
- const txBlocks = await this.provider.queryTransactionBlocks({
220
- filter: { FromAddress: senderAddress },
221
- options: { showObjectChanges: true },
222
- limit: 3,
223
- });
224
- // Find the txblock with both the coinPackageId and wrappedType
225
- for (const txb of txBlocks.data) {
226
- if (!("objectChanges" in txb))
227
- continue;
228
- for (const change of txb.objectChanges) {
229
- if ((0, sdk_sui_2.isSuiPublishEvent)(change) && change.packageId !== undefined) {
230
- coinPackageId = change.packageId;
231
- }
232
- else if ((0, sdk_sui_2.isSuiCreateEvent)(change) && change.objectType.includes("WrappedAssetSetup")) {
233
- wrappedSetupObjectId = change.objectId;
234
- // TODO: what
235
- versionType = change.objectType.split(", ")[1].replace(">", ""); // ugh
236
- }
237
- else if ((0, sdk_sui_2.isSuiCreateEvent)(change) && change.objectType.includes("UpgradeCap")) {
238
- coinUpgradeCapId = change.objectId;
239
- }
240
- else if ((0, sdk_sui_2.isSuiCreateEvent)(change) && change.objectType.includes("CoinMetadata")) {
241
- coinMetadataObjectId = change.objectId;
242
- }
243
- }
244
- if (coinPackageId !== "" &&
245
- wrappedSetupObjectId !== "" &&
246
- coinUpgradeCapId !== "" &&
247
- coinMetadataObjectId !== "") {
248
- found = true;
249
- break;
250
- }
251
- else {
252
- coinPackageId = "";
253
- wrappedSetupObjectId = "";
254
- coinUpgradeCapId = "";
255
- coinMetadataObjectId = "";
256
- }
257
- }
258
- }
259
- const coinType = (0, sdk_sui_2.getCoinTypeFromPackageId)(coinPackageId);
260
- const createTx = new transactions_1.Transaction();
261
- const [txVaa] = createTx.moveCall({
262
- target: `${coreBridgePackageId}::vaa::parse_and_verify`,
263
- arguments: [
264
- createTx.object(this.coreBridgeObjectId),
265
- createTx.pure.vector("u8", (0, sdk_connect_1.serialize)(vaa)),
266
- createTx.object(utils_1.SUI_CLOCK_OBJECT_ID),
267
- ],
268
- });
269
- const [message] = createTx.moveCall({
270
- target: `${tokenBridgePackageId}::vaa::verify_only_once`,
271
- arguments: [createTx.object(this.tokenBridgeObjectId), txVaa],
272
- });
273
- createTx.moveCall({
274
- target: `${tokenBridgePackageId}::create_wrapped::complete_registration`,
275
- arguments: [
276
- createTx.object(this.tokenBridgeObjectId),
277
- createTx.object(coinMetadataObjectId),
278
- createTx.object(wrappedSetupObjectId),
279
- createTx.object(coinUpgradeCapId),
280
- message,
281
- ],
282
- typeArguments: [coinType, versionType],
283
- });
284
- yield this.createUnsignedTx(createTx, "Sui.TokenBridge.SubmitAttestation");
285
- }
286
- async *transfer(sender, recipient, token, amount, payload) {
287
- // TODO:
288
- const feeAmount = 0n;
289
- const relayerFee = 0n;
290
- const nonce = 0;
291
- const senderAddress = sender.toString();
292
- const coinType = ((0, sdk_connect_1.isNative)(token) ? utils_1.SUI_TYPE_ARG : token).toString();
293
- const coins = await sdk_sui_2.SuiPlatform.getCoins(this.provider, sender, coinType);
294
- const [primaryCoin, ...mergeCoins] = coins.filter((coin) => (0, sdk_sui_2.isSameType)(coin.coinType, coinType));
295
- if (primaryCoin === undefined)
296
- throw new Error(`Coins array doesn't contain any coins of type ${coinType}`);
297
- const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
298
- const tx = new transactions_1.Transaction();
299
- const [transferCoin] = (() => {
300
- if (coinType === utils_1.SUI_TYPE_ARG) {
301
- return tx.splitCoins(tx.gas, [tx.pure.u64(amount)]);
302
- }
303
- else {
304
- const primaryCoinInput = tx.object(primaryCoin.coinObjectId);
305
- if (mergeCoins.length) {
306
- tx.mergeCoins(primaryCoinInput, mergeCoins.map((coin) => tx.object(coin.coinObjectId)));
307
- }
308
- return tx.splitCoins(primaryCoinInput, [tx.pure.u64(amount)]);
309
- }
310
- })();
311
- const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(feeAmount)]);
312
- const [assetInfo] = tx.moveCall({
313
- target: `${tokenBridgePackageId}::state::verified_asset`,
314
- arguments: [tx.object(this.tokenBridgeObjectId)],
315
- typeArguments: [coinType],
316
- });
317
- if (!payload) {
318
- const [transferTicket, dust] = tx.moveCall({
319
- target: `${tokenBridgePackageId}::transfer_tokens::prepare_transfer`,
320
- arguments: [
321
- assetInfo,
322
- transferCoin,
323
- tx.pure.u16((0, sdk_connect_1.toChainId)(recipient.chain)),
324
- tx.pure.vector("u8", recipient.address.toUint8Array()),
325
- tx.pure.u64(relayerFee),
326
- tx.pure.u32(nonce),
327
- ],
328
- typeArguments: [coinType],
329
- });
330
- tx.moveCall({
331
- target: `${tokenBridgePackageId}::coin_utils::return_nonzero`,
332
- arguments: [dust],
333
- typeArguments: [coinType],
334
- });
335
- const [messageTicket] = tx.moveCall({
336
- target: `${tokenBridgePackageId}::transfer_tokens::transfer_tokens`,
337
- arguments: [tx.object(this.tokenBridgeObjectId), transferTicket],
338
- typeArguments: [coinType],
339
- });
340
- tx.moveCall({
341
- target: `${coreBridgePackageId}::publish_message::publish_message`,
342
- arguments: [
343
- tx.object(this.coreBridgeObjectId),
344
- feeCoin,
345
- messageTicket,
346
- tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
347
- ],
348
- });
349
- yield this.createUnsignedTx(tx, "Sui.TokenBridge.Transfer");
350
- }
351
- else {
352
- if (!senderAddress)
353
- throw new Error("senderAddress is required for transfer with payload");
354
- // Get or create a new `EmitterCap`
355
- let isNewEmitterCap = false;
356
- const emitterCap = await (async () => {
357
- const objectId = await (0, sdk_sui_2.getOldestEmitterCapObjectId)(this.provider, coreBridgePackageId, senderAddress);
358
- if (objectId !== null) {
359
- return tx.object(objectId);
360
- }
361
- else {
362
- const [emitterCap] = tx.moveCall({
363
- target: `${coreBridgePackageId}::emitter::new`,
364
- arguments: [tx.object(this.coreBridgeObjectId)],
365
- });
366
- isNewEmitterCap = true;
367
- return emitterCap;
368
- }
369
- })();
370
- const [transferTicket, dust] = tx.moveCall({
371
- target: `${tokenBridgePackageId}::transfer_tokens_with_payload::prepare_transfer`,
372
- arguments: [
373
- emitterCap,
374
- assetInfo,
375
- transferCoin,
376
- tx.pure.u16((0, sdk_connect_1.toChainId)(recipient.chain)),
377
- tx.pure.vector("u8", recipient.address.toUint8Array()),
378
- tx.pure.vector("u8", payload),
379
- tx.pure.u32(nonce),
380
- ],
381
- typeArguments: [coinType],
382
- });
383
- tx.moveCall({
384
- target: `${tokenBridgePackageId}::coin_utils::return_nonzero`,
385
- arguments: [dust],
386
- typeArguments: [coinType],
387
- });
388
- const [messageTicket] = tx.moveCall({
389
- target: `${tokenBridgePackageId}::transfer_tokens_with_payload::transfer_tokens_with_payload`,
390
- arguments: [tx.object(this.tokenBridgeObjectId), transferTicket],
391
- typeArguments: [coinType],
392
- });
393
- tx.moveCall({
394
- target: `${coreBridgePackageId}::publish_message::publish_message`,
395
- arguments: [
396
- tx.object(this.coreBridgeObjectId),
397
- feeCoin,
398
- messageTicket,
399
- tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
400
- ],
401
- });
402
- if (isNewEmitterCap) {
403
- tx.transferObjects([emitterCap], tx.pure.address(senderAddress));
404
- }
405
- yield this.createUnsignedTx(tx, "Sui.TokenBridge.TransferWithPayload");
406
- }
407
- }
408
- async *redeem(sender, vaa, unwrapNative = true) {
409
- const coinType = await (0, utils_js_1.getTokenCoinType)(this.provider, this.tokenBridgeObjectId, vaa.payload.token.address.toUint8Array(), (0, sdk_connect_1.toChainId)(vaa.payload.token.chain));
410
- if (!coinType) {
411
- throw new Error("Unable to fetch token coinType");
412
- }
413
- const [coreBridgePackageId, tokenBridgePackageId] = await this.getPackageIds();
414
- const tx = new transactions_1.Transaction();
415
- const [verifiedVAA] = tx.moveCall({
416
- target: `${coreBridgePackageId}::vaa::parse_and_verify`,
417
- arguments: [
418
- tx.object(this.coreBridgeObjectId),
419
- tx.pure.vector("u8", (0, sdk_connect_1.serialize)(vaa)),
420
- tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
421
- ],
422
- });
423
- const [tokenBridgeMessage] = tx.moveCall({
424
- target: `${tokenBridgePackageId}::vaa::verify_only_once`,
425
- arguments: [tx.object(this.tokenBridgeObjectId), verifiedVAA],
426
- });
427
- const [relayerReceipt] = tx.moveCall({
428
- target: `${tokenBridgePackageId}::complete_transfer::authorize_transfer`,
429
- arguments: [tx.object(this.tokenBridgeObjectId), tokenBridgeMessage],
430
- typeArguments: [coinType],
431
- });
432
- const [coins] = tx.moveCall({
433
- target: `${tokenBridgePackageId}::complete_transfer::redeem_relayer_payout`,
434
- arguments: [relayerReceipt],
435
- typeArguments: [coinType],
436
- });
437
- tx.moveCall({
438
- target: `${tokenBridgePackageId}::coin_utils::return_nonzero`,
439
- arguments: [coins],
440
- typeArguments: [coinType],
441
- });
442
- yield this.createUnsignedTx(tx, "Sui.TokenBridge.Redeem");
443
- }
444
- async getWrappedNative() {
445
- return (0, sdk_connect_1.toNative)(this.chain, utils_1.SUI_TYPE_ARG);
446
- }
447
- async getPackageIds() {
448
- // TODO: can these be cached?
449
- return Promise.all([
450
- (0, sdk_sui_2.getPackageId)(this.provider, this.coreBridgeObjectId),
451
- (0, sdk_sui_2.getPackageId)(this.provider, this.tokenBridgeObjectId),
452
- ]);
453
- }
454
- async getCoinBuildOutput(coreBridgePackageId, tokenBridgePackageId, decimals) {
455
- if (decimals > 8)
456
- throw new Error("Decimals is capped at 8");
457
- // Construct bytecode, parametrized by token bridge package ID and decimals
458
- const strippedTokenBridgePackageId = (await (0, sdk_sui_2.getOriginalPackageId)(this.provider, this.tokenBridgeObjectId))?.replace("0x", "");
459
- if (!strippedTokenBridgePackageId) {
460
- throw new Error(`Original token bridge package ID not found for object ID ${this.tokenBridgeObjectId}`);
461
- }
462
- const bytecodeHex = "a11ceb0b060000000901000a020a14031e1704350405392d07669f01088502600ae502050cea02160004010b010c0205020d000002000201020003030c020001000104020700000700010001090801010c020a050600030803040202000302010702080007080100020800080303090002070801010b020209000901010608010105010b0202080008030209000504434f494e095478436f6e7465787408565f5f305f325f3011577261707065644173736574536574757004636f696e0e6372656174655f777261707065640b64756d6d795f6669656c6404696e697414707265706172655f726567697374726174696f6e0f7075626c69635f7472616e736665720673656e646572087472616e736665720a74785f636f6e746578740f76657273696f6e5f636f6e74726f6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002" +
463
- strippedTokenBridgePackageId +
464
- "00020106010000000001090b0031" +
465
- decimals.toString(16).padStart(2, "0") +
466
- "0a0138000b012e110238010200";
467
- const bytecode = sdk_connect_1.encoding.b64.encode(sdk_connect_1.encoding.hex.decode(bytecodeHex));
468
- return {
469
- modules: [bytecode],
470
- dependencies: ["0x1", "0x2", tokenBridgePackageId, coreBridgePackageId].map((d) => (0, utils_1.normalizeSuiObjectId)(d)),
471
- };
472
- }
473
- createUnsignedTx(txReq, description, parallelizable = false) {
474
- return new sdk_sui_2.SuiUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
475
- }
476
- }
477
- exports.SuiTokenBridge = SuiTokenBridge;
478
- //# sourceMappingURL=tokenBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokenBridge.js","sourceRoot":"","sources":["../../src/tokenBridge.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { SuiClient, SuiObjectResponse } from "@mysten/sui/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
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAWvE,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"}
package/dist/cjs/utils.js DELETED
@@ -1,69 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}