@wormhole-foundation/sdk-sui-tokenbridge 4.7.3 → 4.8.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.
@@ -0,0 +1,26 @@
1
+ import type { SuiClient } from "@mysten/sui/client";
2
+ import { type AccountAddress, type ChainAddress, type ChainsConfig, type Contracts, type ExecutorTokenBridge, type Network, type TokenAddress, type TokenId } from "@wormhole-foundation/sdk-connect";
3
+ import { SuiChains, SuiUnsignedTransaction } from "@wormhole-foundation/sdk-sui";
4
+ export declare class SuiExecutorTokenBridge<N extends Network, C extends SuiChains = SuiChains> implements ExecutorTokenBridge<N, C> {
5
+ readonly network: N;
6
+ readonly chain: C;
7
+ readonly provider: SuiClient;
8
+ readonly contracts: Contracts;
9
+ readonly chainId: bigint;
10
+ readonly tokenBridgeObjectId: string;
11
+ readonly coreBridgeObjectId: string;
12
+ readonly relayerStateId: string;
13
+ readonly relayerPackageId: string;
14
+ readonly ptbResolverStateId: string;
15
+ readonly relayerEmitterCap: string;
16
+ constructor(network: N, chain: C, provider: SuiClient, contracts: Contracts);
17
+ static fromRpc<N extends Network>(provider: SuiClient, config: ChainsConfig<N, "Sui">): Promise<SuiExecutorTokenBridge<N, SuiChains>>;
18
+ transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, executorQuote: ExecutorTokenBridge.ExecutorQuote, referrerFee?: ExecutorTokenBridge.ReferrerFee): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
19
+ redeem(_sender: AccountAddress<C>, vaa: ExecutorTokenBridge.VAA): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
20
+ estimateMsgValueAndGasLimit(_token: TokenId, _recipient?: ChainAddress): Promise<{
21
+ gasLimit: bigint;
22
+ msgValue: bigint;
23
+ }>;
24
+ private createUnsignedTx;
25
+ }
26
+ //# sourceMappingURL=executorTokenBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executorTokenBridge.d.ts","sourceRoot":"","sources":["../../src/executorTokenBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAWL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAIL,SAAS,EAET,sBAAsB,EACvB,MAAM,8BAA8B,CAAC;AAGtC,qBAAa,sBAAsB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,CACpF,YAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAalC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAd/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAGpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;gBAGxB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,SAAS;WAmBlB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IASzC,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,mBAAmB,CAAC,aAAa,EAChD,WAAW,CAAC,EAAE,mBAAmB,CAAC,WAAW,GAC5C,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAqHxC,MAAM,CACX,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,GAAG,EAAE,mBAAmB,CAAC,GAAG,GAC3B,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAqDzC,2BAA2B,CAC/B,MAAM,EAAE,OAAO,EACf,UAAU,CAAC,EAAE,YAAY,GACxB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAQlD,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SuiExecutorTokenBridge = 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 utils_js_1 = require("./utils.js");
9
+ class SuiExecutorTokenBridge {
10
+ network;
11
+ chain;
12
+ provider;
13
+ contracts;
14
+ chainId;
15
+ tokenBridgeObjectId;
16
+ coreBridgeObjectId;
17
+ // Sui-specific state for Token Bridge Relayer V4
18
+ relayerStateId;
19
+ relayerPackageId;
20
+ ptbResolverStateId;
21
+ relayerEmitterCap;
22
+ constructor(network, chain, provider, contracts) {
23
+ this.network = network;
24
+ this.chain = chain;
25
+ this.provider = provider;
26
+ this.contracts = contracts;
27
+ this.chainId = sdk_connect_1.nativeChainIds.networkChainToNativeChainId.get(network, chain);
28
+ if (!contracts.tokenBridge)
29
+ throw new Error(`Token Bridge contract for ${chain} not found`);
30
+ this.tokenBridgeObjectId = contracts.tokenBridge;
31
+ if (!contracts.coreBridge)
32
+ throw new Error(`Wormhole Core Bridge contract for ${chain} not found`);
33
+ this.coreBridgeObjectId = contracts.coreBridge;
34
+ // Get Sui-specific state from constants based on the Environment
35
+ const stateRefs = (0, sdk_connect_1.suiExecutorTokenBridgeState)(network);
36
+ this.relayerStateId = stateRefs.relayerStateId;
37
+ this.relayerPackageId = stateRefs.relayerPackageId;
38
+ this.ptbResolverStateId = stateRefs.ptbResolverStateId;
39
+ this.relayerEmitterCap = stateRefs.relayerEmitterCap;
40
+ }
41
+ static async fromRpc(provider, config) {
42
+ const [network, chain] = await sdk_sui_1.SuiPlatform.chainFromRpc(provider);
43
+ const conf = config[chain];
44
+ if (conf.network !== network)
45
+ throw new Error(`Network mismatch: ${conf.network} != ${network}`);
46
+ return new SuiExecutorTokenBridge(network, chain, provider, conf.contracts);
47
+ }
48
+ async *transfer(sender, recipient, token, amount, executorQuote, referrerFee) {
49
+ const tx = new transactions_1.Transaction();
50
+ const senderAddress = sender.toString();
51
+ const coinType = ((0, sdk_connect_1.isNative)(token) ? sdk_sui_1.SUI_COIN : token).toString();
52
+ const messageFee = 0n;
53
+ // Get destination relayer contract (we're departing FROM Sui, destination is never Sui)
54
+ const dstContracts = sdk_connect_1.contracts.executorTokenBridge.get(this.network, recipient.chain);
55
+ if (!dstContracts?.relayer) {
56
+ throw new Error(`Token Bridge Executor Relayer contract for destination ${recipient.chain} not found`);
57
+ }
58
+ const dstRelayer = (0, sdk_connect_1.toUniversal)(recipient.chain, dstContracts.relayer);
59
+ // For Token Bridge transfers, dstTransferRecipient and dstExecutionAddress are the same
60
+ const dstExecutionAddress = "0x" + Buffer.from(dstRelayer.toUint8Array()).toString("hex");
61
+ // Serialize executor quote data
62
+ const signedQuoteBytes = (0, sdk_connect_1.serializeLayout)(sdk_connect_1.signedQuoteLayout, executorQuote.signedQuote);
63
+ const relayInstructionsBytes = (0, sdk_connect_1.serializeLayout)(sdk_connect_1.relayInstructionsLayout, executorQuote.relayInstructions);
64
+ // 1. Fetch and merge coins (following TokenBridge pattern)
65
+ const coins = await sdk_sui_1.SuiPlatform.getCoins(this.provider, sender, coinType);
66
+ const [primaryCoin, ...mergeCoins] = coins.filter((coin) => (0, sdk_sui_1.isSameType)(coin.coinType, coinType));
67
+ if (!primaryCoin) {
68
+ throw new Error(`No coins of type ${coinType} found for sender ${sender}`);
69
+ }
70
+ // 2. Handle referrer fee (following Solana ExecutorTokenBridge pattern)
71
+ let actualTransferAmount = amount;
72
+ if (referrerFee && referrerFee.feeDbps > 0n) {
73
+ const referrerAddress = referrerFee.referrer.address.toString();
74
+ if ((0, sdk_connect_1.isNative)(token)) {
75
+ // For native SUI, split fee from gas
76
+ const [refFee] = tx.splitCoins(tx.gas, [tx.pure.u64(referrerFee.feeAmount)]);
77
+ tx.transferObjects([refFee], tx.pure.address(referrerAddress));
78
+ }
79
+ else {
80
+ // For tokens, merge first then split fee
81
+ const primaryCoinInput = tx.object(primaryCoin.coinObjectId);
82
+ if (mergeCoins.length > 0) {
83
+ tx.mergeCoins(primaryCoinInput, mergeCoins.map((coin) => tx.object(coin.coinObjectId)));
84
+ }
85
+ const [refFee] = tx.splitCoins(primaryCoinInput, [tx.pure.u64(referrerFee.feeAmount)]);
86
+ tx.transferObjects([refFee], tx.pure.address(referrerAddress));
87
+ }
88
+ // Use remaining amount for actual transfer
89
+ actualTransferAmount = referrerFee.remainingAmount;
90
+ }
91
+ // 3. Split coins for transfer (following TokenBridge pattern)
92
+ const [transferCoin] = (() => {
93
+ if (coinType === sdk_sui_1.SUI_COIN) {
94
+ return tx.splitCoins(tx.gas, [tx.pure.u64(actualTransferAmount)]);
95
+ }
96
+ else {
97
+ const primaryCoinInput = tx.object(primaryCoin.coinObjectId);
98
+ if (mergeCoins.length && !referrerFee) {
99
+ // Only merge if we didn't already merge for referrer fee
100
+ tx.mergeCoins(primaryCoinInput, mergeCoins.map((coin) => tx.object(coin.coinObjectId)));
101
+ }
102
+ return tx.splitCoins(primaryCoinInput, [tx.pure.u64(actualTransferAmount)]);
103
+ }
104
+ })();
105
+ // 4. Split coins for fees
106
+ const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(messageFee)]);
107
+ const [executorPaymentCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(executorQuote.estimatedCost)]);
108
+ // 5. Get verified asset from Token Bridge
109
+ const tokenBridgePackageId = await (0, sdk_sui_1.getPackageId)(this.provider, this.tokenBridgeObjectId);
110
+ const [assetInfo] = tx.moveCall({
111
+ target: `${tokenBridgePackageId}::state::verified_asset`,
112
+ arguments: [tx.object(this.tokenBridgeObjectId)],
113
+ typeArguments: [coinType],
114
+ });
115
+ // 6. Call relayer transfer function
116
+ // Arguments match the Move function signature in relayer_transfer.move
117
+ tx.moveCall({
118
+ target: `${this.relayerPackageId}::relayer_transfer::transfer_tokens_with_relay`,
119
+ arguments: [
120
+ tx.object(this.relayerStateId),
121
+ tx.object(this.coreBridgeObjectId),
122
+ tx.object(this.tokenBridgeObjectId),
123
+ transferCoin,
124
+ assetInfo,
125
+ feeCoin,
126
+ executorPaymentCoin,
127
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
128
+ tx.pure.u16((0, sdk_connect_1.toChainId)(recipient.chain)),
129
+ tx.pure.vector("u8", Array.from(recipient.address.toUniversalAddress().toUint8Array())), // recipient (32 bytes)
130
+ tx.pure.address(dstExecutionAddress), // dst_execution_address
131
+ tx.pure.address(senderAddress), // refund_addr
132
+ tx.pure.vector("u8", Array.from(signedQuoteBytes)), // signed_quote
133
+ tx.pure.vector("u8", Array.from(relayInstructionsBytes)), // relay_instructions
134
+ tx.pure.u32(0), // nonce
135
+ ],
136
+ typeArguments: [coinType],
137
+ });
138
+ yield this.createUnsignedTx(tx, "Sui.ExecutorTokenBridge.Transfer");
139
+ }
140
+ async *redeem(_sender, vaa) {
141
+ // Get coin type from VAA
142
+ 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));
143
+ if (!coinType) {
144
+ throw new Error("Unable to fetch token coinType from VAA");
145
+ }
146
+ const tx = new transactions_1.Transaction();
147
+ // Get package IDs dynamically
148
+ const coreBridgePackageId = await (0, sdk_sui_1.getPackageId)(this.provider, this.coreBridgeObjectId);
149
+ const tokenBridgePackageId = await (0, sdk_sui_1.getPackageId)(this.provider, this.tokenBridgeObjectId);
150
+ // Build 4-command redemption PTB (matching redeem.move pattern)
151
+ // Command 1: parse_and_verify (Wormhole core)
152
+ const [verifiedVaa] = tx.moveCall({
153
+ target: `${coreBridgePackageId}::vaa::parse_and_verify`,
154
+ arguments: [
155
+ tx.object(this.coreBridgeObjectId),
156
+ tx.pure.vector("u8", Array.from((0, sdk_connect_1.serialize)(vaa))),
157
+ tx.object(utils_1.SUI_CLOCK_OBJECT_ID),
158
+ ],
159
+ });
160
+ // Command 2: verify_only_once (Token Bridge replay protection)
161
+ const [msg] = tx.moveCall({
162
+ target: `${tokenBridgePackageId}::vaa::verify_only_once`,
163
+ arguments: [tx.object(this.tokenBridgeObjectId), verifiedVaa],
164
+ });
165
+ // Command 3: authorize_transfer (Token Bridge authorization)
166
+ const [receipt] = tx.moveCall({
167
+ target: `${tokenBridgePackageId}::complete_transfer_with_payload::authorize_transfer`,
168
+ arguments: [tx.object(this.tokenBridgeObjectId), msg],
169
+ typeArguments: [coinType],
170
+ });
171
+ // Command 4: execute_vaa_v1 (TB Relayer V4 execution)
172
+ tx.moveCall({
173
+ target: `${this.relayerPackageId}::redeem::execute_vaa_v1`,
174
+ arguments: [tx.object(this.relayerStateId), receipt],
175
+ typeArguments: [coinType],
176
+ });
177
+ yield this.createUnsignedTx(tx, "Sui.ExecutorTokenBridge.Redeem");
178
+ }
179
+ async estimateMsgValueAndGasLimit(_token, _recipient) {
180
+ // Sui uses fixed gas budget in PTB
181
+ return {
182
+ gasLimit: 100000000n, // 0.1 SUI budget
183
+ msgValue: 0n,
184
+ };
185
+ }
186
+ createUnsignedTx(txReq, description, parallelizable = false) {
187
+ return new sdk_sui_1.SuiUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
188
+ }
189
+ }
190
+ exports.SuiExecutorTokenBridge = SuiExecutorTokenBridge;
191
+ //# sourceMappingURL=executorTokenBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executorTokenBridge.js","sourceRoot":"","sources":["../../src/executorTokenBridge.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from "./tokenBridge.js";
2
2
  export * from "./automaticTokenBridge.js";
3
+ export * from "./executorTokenBridge.js";
3
4
  export * from "./utils.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAQA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAUA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -17,9 +17,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  const sdk_connect_1 = require("@wormhole-foundation/sdk-connect");
18
18
  const tokenBridge_js_1 = require("./tokenBridge.js");
19
19
  const automaticTokenBridge_js_1 = require("./automaticTokenBridge.js");
20
+ const executorTokenBridge_js_1 = require("./executorTokenBridge.js");
20
21
  (0, sdk_connect_1.registerProtocol)("Sui", "TokenBridge", tokenBridge_js_1.SuiTokenBridge);
21
22
  (0, sdk_connect_1.registerProtocol)("Sui", "AutomaticTokenBridge", automaticTokenBridge_js_1.SuiAutomaticTokenBridge);
23
+ (0, sdk_connect_1.registerProtocol)("Sui", "ExecutorTokenBridge", executorTokenBridge_js_1.SuiExecutorTokenBridge);
22
24
  __exportStar(require("./tokenBridge.js"), exports);
23
25
  __exportStar(require("./automaticTokenBridge.js"), exports);
26
+ __exportStar(require("./executorTokenBridge.js"), exports);
24
27
  __exportStar(require("./utils.js"), exports);
25
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,kEAAoE;AACpE,qDAAkD;AAClD,uEAAoE;AAEpE,IAAA,8BAAgB,EAAC,KAAK,EAAE,aAAa,EAAE,+BAAc,CAAC,CAAC;AACvD,IAAA,8BAAgB,EAAC,KAAK,EAAE,sBAAsB,EAAE,iDAAuB,CAAC,CAAC;AAEzE,mDAAiC;AACjC,4DAA0C;AAC1C,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,kEAAoE;AACpE,qDAAkD;AAClD,uEAAoE;AACpE,qEAAkE;AAElE,IAAA,8BAAgB,EAAC,KAAK,EAAE,aAAa,EAAE,+BAAc,CAAC,CAAC;AACvD,IAAA,8BAAgB,EAAC,KAAK,EAAE,sBAAsB,EAAE,iDAAuB,CAAC,CAAC;AACzE,IAAA,8BAAgB,EAAC,KAAK,EAAE,qBAAqB,EAAE,+CAAsB,CAAC,CAAC;AAEvE,mDAAiC;AACjC,4DAA0C;AAC1C,2DAAyC;AACzC,6CAA2B"}
@@ -0,0 +1,26 @@
1
+ import type { SuiClient } from "@mysten/sui/client";
2
+ import { type AccountAddress, type ChainAddress, type ChainsConfig, type Contracts, type ExecutorTokenBridge, type Network, type TokenAddress, type TokenId } from "@wormhole-foundation/sdk-connect";
3
+ import { SuiChains, SuiUnsignedTransaction } from "@wormhole-foundation/sdk-sui";
4
+ export declare class SuiExecutorTokenBridge<N extends Network, C extends SuiChains = SuiChains> implements ExecutorTokenBridge<N, C> {
5
+ readonly network: N;
6
+ readonly chain: C;
7
+ readonly provider: SuiClient;
8
+ readonly contracts: Contracts;
9
+ readonly chainId: bigint;
10
+ readonly tokenBridgeObjectId: string;
11
+ readonly coreBridgeObjectId: string;
12
+ readonly relayerStateId: string;
13
+ readonly relayerPackageId: string;
14
+ readonly ptbResolverStateId: string;
15
+ readonly relayerEmitterCap: string;
16
+ constructor(network: N, chain: C, provider: SuiClient, contracts: Contracts);
17
+ static fromRpc<N extends Network>(provider: SuiClient, config: ChainsConfig<N, "Sui">): Promise<SuiExecutorTokenBridge<N, SuiChains>>;
18
+ transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, executorQuote: ExecutorTokenBridge.ExecutorQuote, referrerFee?: ExecutorTokenBridge.ReferrerFee): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
19
+ redeem(_sender: AccountAddress<C>, vaa: ExecutorTokenBridge.VAA): AsyncGenerator<SuiUnsignedTransaction<N, C>>;
20
+ estimateMsgValueAndGasLimit(_token: TokenId, _recipient?: ChainAddress): Promise<{
21
+ gasLimit: bigint;
22
+ msgValue: bigint;
23
+ }>;
24
+ private createUnsignedTx;
25
+ }
26
+ //# sourceMappingURL=executorTokenBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executorTokenBridge.d.ts","sourceRoot":"","sources":["../../src/executorTokenBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAWL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAIL,SAAS,EAET,sBAAsB,EACvB,MAAM,8BAA8B,CAAC;AAGtC,qBAAa,sBAAsB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,GAAG,SAAS,CACpF,YAAW,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC;IAalC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAd/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAGpC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;gBAGxB,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,SAAS;WAmBlB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IASzC,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,mBAAmB,CAAC,aAAa,EAChD,WAAW,CAAC,EAAE,mBAAmB,CAAC,WAAW,GAC5C,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAqHxC,MAAM,CACX,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,GAAG,EAAE,mBAAmB,CAAC,GAAG,GAC3B,cAAc,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAqDzC,2BAA2B,CAC/B,MAAM,EAAE,OAAO,EACf,UAAU,CAAC,EAAE,YAAY,GACxB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAQlD,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,187 @@
1
+ import { Transaction } from "@mysten/sui/transactions";
2
+ import { SUI_CLOCK_OBJECT_ID } from "@mysten/sui/utils";
3
+ import { contracts, isNative, nativeChainIds, relayInstructionsLayout, serialize, serializeLayout, signedQuoteLayout, suiExecutorTokenBridgeState, toChainId, toUniversal, } from "@wormhole-foundation/sdk-connect";
4
+ import { getPackageId, isSameType, SUI_COIN, SuiPlatform, SuiUnsignedTransaction, } from "@wormhole-foundation/sdk-sui";
5
+ import { getTokenCoinType } from "./utils.js";
6
+ export class SuiExecutorTokenBridge {
7
+ network;
8
+ chain;
9
+ provider;
10
+ contracts;
11
+ chainId;
12
+ tokenBridgeObjectId;
13
+ coreBridgeObjectId;
14
+ // Sui-specific state for Token Bridge Relayer V4
15
+ relayerStateId;
16
+ relayerPackageId;
17
+ ptbResolverStateId;
18
+ relayerEmitterCap;
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 = nativeChainIds.networkChainToNativeChainId.get(network, chain);
25
+ if (!contracts.tokenBridge)
26
+ throw new Error(`Token Bridge contract for ${chain} not found`);
27
+ this.tokenBridgeObjectId = contracts.tokenBridge;
28
+ if (!contracts.coreBridge)
29
+ throw new Error(`Wormhole Core Bridge contract for ${chain} not found`);
30
+ this.coreBridgeObjectId = contracts.coreBridge;
31
+ // Get Sui-specific state from constants based on the Environment
32
+ const stateRefs = suiExecutorTokenBridgeState(network);
33
+ this.relayerStateId = stateRefs.relayerStateId;
34
+ this.relayerPackageId = stateRefs.relayerPackageId;
35
+ this.ptbResolverStateId = stateRefs.ptbResolverStateId;
36
+ this.relayerEmitterCap = stateRefs.relayerEmitterCap;
37
+ }
38
+ static async fromRpc(provider, config) {
39
+ const [network, chain] = await SuiPlatform.chainFromRpc(provider);
40
+ const conf = config[chain];
41
+ if (conf.network !== network)
42
+ throw new Error(`Network mismatch: ${conf.network} != ${network}`);
43
+ return new SuiExecutorTokenBridge(network, chain, provider, conf.contracts);
44
+ }
45
+ async *transfer(sender, recipient, token, amount, executorQuote, referrerFee) {
46
+ const tx = new Transaction();
47
+ const senderAddress = sender.toString();
48
+ const coinType = (isNative(token) ? SUI_COIN : token).toString();
49
+ const messageFee = 0n;
50
+ // Get destination relayer contract (we're departing FROM Sui, destination is never Sui)
51
+ const dstContracts = contracts.executorTokenBridge.get(this.network, recipient.chain);
52
+ if (!dstContracts?.relayer) {
53
+ throw new Error(`Token Bridge Executor Relayer contract for destination ${recipient.chain} not found`);
54
+ }
55
+ const dstRelayer = toUniversal(recipient.chain, dstContracts.relayer);
56
+ // For Token Bridge transfers, dstTransferRecipient and dstExecutionAddress are the same
57
+ const dstExecutionAddress = "0x" + Buffer.from(dstRelayer.toUint8Array()).toString("hex");
58
+ // Serialize executor quote data
59
+ const signedQuoteBytes = serializeLayout(signedQuoteLayout, executorQuote.signedQuote);
60
+ const relayInstructionsBytes = serializeLayout(relayInstructionsLayout, executorQuote.relayInstructions);
61
+ // 1. Fetch and merge coins (following TokenBridge pattern)
62
+ const coins = await SuiPlatform.getCoins(this.provider, sender, coinType);
63
+ const [primaryCoin, ...mergeCoins] = coins.filter((coin) => isSameType(coin.coinType, coinType));
64
+ if (!primaryCoin) {
65
+ throw new Error(`No coins of type ${coinType} found for sender ${sender}`);
66
+ }
67
+ // 2. Handle referrer fee (following Solana ExecutorTokenBridge pattern)
68
+ let actualTransferAmount = amount;
69
+ if (referrerFee && referrerFee.feeDbps > 0n) {
70
+ const referrerAddress = referrerFee.referrer.address.toString();
71
+ if (isNative(token)) {
72
+ // For native SUI, split fee from gas
73
+ const [refFee] = tx.splitCoins(tx.gas, [tx.pure.u64(referrerFee.feeAmount)]);
74
+ tx.transferObjects([refFee], tx.pure.address(referrerAddress));
75
+ }
76
+ else {
77
+ // For tokens, merge first then split fee
78
+ const primaryCoinInput = tx.object(primaryCoin.coinObjectId);
79
+ if (mergeCoins.length > 0) {
80
+ tx.mergeCoins(primaryCoinInput, mergeCoins.map((coin) => tx.object(coin.coinObjectId)));
81
+ }
82
+ const [refFee] = tx.splitCoins(primaryCoinInput, [tx.pure.u64(referrerFee.feeAmount)]);
83
+ tx.transferObjects([refFee], tx.pure.address(referrerAddress));
84
+ }
85
+ // Use remaining amount for actual transfer
86
+ actualTransferAmount = referrerFee.remainingAmount;
87
+ }
88
+ // 3. Split coins for transfer (following TokenBridge pattern)
89
+ const [transferCoin] = (() => {
90
+ if (coinType === SUI_COIN) {
91
+ return tx.splitCoins(tx.gas, [tx.pure.u64(actualTransferAmount)]);
92
+ }
93
+ else {
94
+ const primaryCoinInput = tx.object(primaryCoin.coinObjectId);
95
+ if (mergeCoins.length && !referrerFee) {
96
+ // Only merge if we didn't already merge for referrer fee
97
+ tx.mergeCoins(primaryCoinInput, mergeCoins.map((coin) => tx.object(coin.coinObjectId)));
98
+ }
99
+ return tx.splitCoins(primaryCoinInput, [tx.pure.u64(actualTransferAmount)]);
100
+ }
101
+ })();
102
+ // 4. Split coins for fees
103
+ const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(messageFee)]);
104
+ const [executorPaymentCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(executorQuote.estimatedCost)]);
105
+ // 5. Get verified asset from Token Bridge
106
+ const tokenBridgePackageId = await getPackageId(this.provider, this.tokenBridgeObjectId);
107
+ const [assetInfo] = tx.moveCall({
108
+ target: `${tokenBridgePackageId}::state::verified_asset`,
109
+ arguments: [tx.object(this.tokenBridgeObjectId)],
110
+ typeArguments: [coinType],
111
+ });
112
+ // 6. Call relayer transfer function
113
+ // Arguments match the Move function signature in relayer_transfer.move
114
+ tx.moveCall({
115
+ target: `${this.relayerPackageId}::relayer_transfer::transfer_tokens_with_relay`,
116
+ arguments: [
117
+ tx.object(this.relayerStateId),
118
+ tx.object(this.coreBridgeObjectId),
119
+ tx.object(this.tokenBridgeObjectId),
120
+ transferCoin,
121
+ assetInfo,
122
+ feeCoin,
123
+ executorPaymentCoin,
124
+ tx.object(SUI_CLOCK_OBJECT_ID),
125
+ tx.pure.u16(toChainId(recipient.chain)),
126
+ tx.pure.vector("u8", Array.from(recipient.address.toUniversalAddress().toUint8Array())), // recipient (32 bytes)
127
+ tx.pure.address(dstExecutionAddress), // dst_execution_address
128
+ tx.pure.address(senderAddress), // refund_addr
129
+ tx.pure.vector("u8", Array.from(signedQuoteBytes)), // signed_quote
130
+ tx.pure.vector("u8", Array.from(relayInstructionsBytes)), // relay_instructions
131
+ tx.pure.u32(0), // nonce
132
+ ],
133
+ typeArguments: [coinType],
134
+ });
135
+ yield this.createUnsignedTx(tx, "Sui.ExecutorTokenBridge.Transfer");
136
+ }
137
+ async *redeem(_sender, vaa) {
138
+ // Get coin type from VAA
139
+ const coinType = await getTokenCoinType(this.provider, this.tokenBridgeObjectId, vaa.payload.token.address.toUint8Array(), toChainId(vaa.payload.token.chain));
140
+ if (!coinType) {
141
+ throw new Error("Unable to fetch token coinType from VAA");
142
+ }
143
+ const tx = new Transaction();
144
+ // Get package IDs dynamically
145
+ const coreBridgePackageId = await getPackageId(this.provider, this.coreBridgeObjectId);
146
+ const tokenBridgePackageId = await getPackageId(this.provider, this.tokenBridgeObjectId);
147
+ // Build 4-command redemption PTB (matching redeem.move pattern)
148
+ // Command 1: parse_and_verify (Wormhole core)
149
+ const [verifiedVaa] = tx.moveCall({
150
+ target: `${coreBridgePackageId}::vaa::parse_and_verify`,
151
+ arguments: [
152
+ tx.object(this.coreBridgeObjectId),
153
+ tx.pure.vector("u8", Array.from(serialize(vaa))),
154
+ tx.object(SUI_CLOCK_OBJECT_ID),
155
+ ],
156
+ });
157
+ // Command 2: verify_only_once (Token Bridge replay protection)
158
+ const [msg] = tx.moveCall({
159
+ target: `${tokenBridgePackageId}::vaa::verify_only_once`,
160
+ arguments: [tx.object(this.tokenBridgeObjectId), verifiedVaa],
161
+ });
162
+ // Command 3: authorize_transfer (Token Bridge authorization)
163
+ const [receipt] = tx.moveCall({
164
+ target: `${tokenBridgePackageId}::complete_transfer_with_payload::authorize_transfer`,
165
+ arguments: [tx.object(this.tokenBridgeObjectId), msg],
166
+ typeArguments: [coinType],
167
+ });
168
+ // Command 4: execute_vaa_v1 (TB Relayer V4 execution)
169
+ tx.moveCall({
170
+ target: `${this.relayerPackageId}::redeem::execute_vaa_v1`,
171
+ arguments: [tx.object(this.relayerStateId), receipt],
172
+ typeArguments: [coinType],
173
+ });
174
+ yield this.createUnsignedTx(tx, "Sui.ExecutorTokenBridge.Redeem");
175
+ }
176
+ async estimateMsgValueAndGasLimit(_token, _recipient) {
177
+ // Sui uses fixed gas budget in PTB
178
+ return {
179
+ gasLimit: 100000000n, // 0.1 SUI budget
180
+ msgValue: 0n,
181
+ };
182
+ }
183
+ createUnsignedTx(txReq, description, parallelizable = false) {
184
+ return new SuiUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
185
+ }
186
+ }
187
+ //# sourceMappingURL=executorTokenBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executorTokenBridge.js","sourceRoot":"","sources":["../../src/executorTokenBridge.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from "./tokenBridge.js";
2
2
  export * from "./automaticTokenBridge.js";
3
+ export * from "./executorTokenBridge.js";
3
4
  export * from "./utils.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAQA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAUA,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,9 +1,12 @@
1
1
  import { registerProtocol } from "@wormhole-foundation/sdk-connect";
2
2
  import { SuiTokenBridge } from "./tokenBridge.js";
3
3
  import { SuiAutomaticTokenBridge } from "./automaticTokenBridge.js";
4
+ import { SuiExecutorTokenBridge } from "./executorTokenBridge.js";
4
5
  registerProtocol("Sui", "TokenBridge", SuiTokenBridge);
5
6
  registerProtocol("Sui", "AutomaticTokenBridge", SuiAutomaticTokenBridge);
7
+ registerProtocol("Sui", "ExecutorTokenBridge", SuiExecutorTokenBridge);
6
8
  export * from "./tokenBridge.js";
7
9
  export * from "./automaticTokenBridge.js";
10
+ export * from "./executorTokenBridge.js";
8
11
  export * from "./utils.js";
9
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AACvD,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;AAEzE,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AACvD,gBAAgB,CAAC,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;AACzE,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AAEvE,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wormhole-foundation/sdk-sui-tokenbridge",
3
- "version": "4.7.3",
3
+ "version": "4.8.0-beta.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/wormhole-foundation/wormhole-sdk-ts.git"
@@ -46,9 +46,9 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@mysten/sui": "^1.37.2",
49
- "@wormhole-foundation/sdk-connect": "4.7.3",
50
- "@wormhole-foundation/sdk-sui": "4.7.3",
51
- "@wormhole-foundation/sdk-sui-core": "4.7.3"
49
+ "@wormhole-foundation/sdk-connect": "4.8.0-beta.0",
50
+ "@wormhole-foundation/sdk-sui": "4.8.0-beta.0",
51
+ "@wormhole-foundation/sdk-sui-core": "4.8.0-beta.0"
52
52
  },
53
53
  "type": "module",
54
54
  "exports": {