@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.
- package/dist/cjs/executorTokenBridge.d.ts +26 -0
- package/dist/cjs/executorTokenBridge.d.ts.map +1 -0
- package/dist/cjs/executorTokenBridge.js +191 -0
- package/dist/cjs/executorTokenBridge.js.map +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/executorTokenBridge.d.ts +26 -0
- package/dist/esm/executorTokenBridge.d.ts.map +1 -0
- package/dist/esm/executorTokenBridge.js +187 -0
- package/dist/esm/executorTokenBridge.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -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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"}
|
package/dist/cjs/index.d.ts
CHANGED
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,kEAAoE;AACpE,qDAAkD;AAClD,uEAAoE;
|
|
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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"}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
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
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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.
|
|
50
|
-
"@wormhole-foundation/sdk-sui": "4.
|
|
51
|
-
"@wormhole-foundation/sdk-sui-core": "4.
|
|
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": {
|