@wormhole-foundation/sdk-sui-tokenbridge 5.2.0 → 6.0.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.
@@ -1,5 +1,4 @@
1
1
  export * from "./tokenBridge.js";
2
- export * from "./automaticTokenBridge.js";
3
2
  export * from "./executorTokenBridge.js";
4
3
  export * from "./utils.js";
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAQA,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1,12 +1,9 @@
1
1
  import { registerProtocol } from "@wormhole-foundation/sdk-connect";
2
2
  import { SuiTokenBridge } from "./tokenBridge.js";
3
- import { SuiAutomaticTokenBridge } from "./automaticTokenBridge.js";
4
3
  import { SuiExecutorTokenBridge } from "./executorTokenBridge.js";
5
4
  registerProtocol("Sui", "TokenBridge", SuiTokenBridge);
6
- registerProtocol("Sui", "AutomaticTokenBridge", SuiAutomaticTokenBridge);
7
5
  registerProtocol("Sui", "ExecutorTokenBridge", SuiExecutorTokenBridge);
8
6
  export * from "./tokenBridge.js";
9
- export * from "./automaticTokenBridge.js";
10
7
  export * from "./executorTokenBridge.js";
11
8
  export * from "./utils.js";
12
9
  //# 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;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"}
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,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AACvD,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;AAEvE,cAAc,kBAAkB,CAAC;AACjC,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": "5.2.0",
3
+ "version": "6.0.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/wormhole-foundation/wormhole-sdk-ts.git"
@@ -43,9 +43,9 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@mysten/sui": "^2.17.0",
46
- "@wormhole-foundation/sdk-connect": "5.2.0",
47
- "@wormhole-foundation/sdk-sui": "5.2.0",
48
- "@wormhole-foundation/sdk-sui-core": "5.2.0"
46
+ "@wormhole-foundation/sdk-connect": "6.0.0",
47
+ "@wormhole-foundation/sdk-sui": "6.0.0",
48
+ "@wormhole-foundation/sdk-sui-core": "6.0.0"
49
49
  },
50
50
  "type": "module",
51
51
  "exports": {
@@ -1,38 +0,0 @@
1
- import type { SuiGrpcClient } from "@mysten/sui/grpc";
2
- import { type AccountAddress, type AutomaticTokenBridge, type Chain, type ChainAddress, type ChainsConfig, type Contracts, type Network, type Platform, type TokenAddress } from "@wormhole-foundation/sdk-connect";
3
- import type { SuiChains } from "@wormhole-foundation/sdk-sui";
4
- import { SuiUnsignedTransaction } from "@wormhole-foundation/sdk-sui";
5
- import "@wormhole-foundation/sdk-sui-core";
6
- export interface TokenInfo {
7
- max_native_swap_amount: string;
8
- swap_enabled: boolean;
9
- swap_rate: string;
10
- }
11
- export declare class SuiAutomaticTokenBridge<N extends Network, C extends SuiChains> implements AutomaticTokenBridge<N, C> {
12
- readonly network: N;
13
- readonly chain: C;
14
- readonly connection: SuiGrpcClient;
15
- readonly contracts: Contracts;
16
- tokenBridgeRelayerObjectId: string;
17
- coreBridgeObjectId: string;
18
- tokenBridgeObjectId: string;
19
- fields?: Record<string, any>;
20
- relayerPackageId?: string;
21
- constructor(network: N, chain: C, connection: SuiGrpcClient, contracts: Contracts);
22
- static fromRpc<N extends Network>(connection: SuiGrpcClient, config: ChainsConfig<N, Platform>): Promise<SuiAutomaticTokenBridge<N, SuiChains>>;
23
- transfer(sender: AccountAddress<C>, recipient: ChainAddress, token: TokenAddress<C>, amount: bigint, nativeGas?: bigint | undefined): AsyncGenerator<SuiUnsignedTransaction<N, C>, void, unknown>;
24
- redeem(sender: AccountAddress<C>, vaa: AutomaticTokenBridge.VAA): AsyncGenerator<SuiUnsignedTransaction<N, C>, void, unknown>;
25
- getRelayerFee(destination: Chain, token: TokenAddress<C>): Promise<bigint>;
26
- maxSwapAmount(token: TokenAddress<C>): Promise<bigint>;
27
- nativeTokenAmount(token: TokenAddress<C>, amount: bigint): Promise<bigint>;
28
- /** Simulate a read-only PTB and decode a single u64 (little-endian) return value. */
29
- private simulateU64;
30
- getRegisteredTokens(): Promise<TokenAddress<C>[]>;
31
- isRegisteredToken(token: TokenAddress<C>): Promise<boolean>;
32
- private getTokenInfo;
33
- private getFields;
34
- private getPackageId;
35
- private getPackageIds;
36
- private createUnsignedTx;
37
- }
38
- //# sourceMappingURL=automaticTokenBridge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automaticTokenBridge.d.ts","sourceRoot":"","sources":["../../src/automaticTokenBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EACV,SAAS,EAAC,MAAM,8BAA8B,CAAC;AACjD,OAAO,EAYL,sBAAsB,EACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,mCAAmC,CAAC;AAG3C,MAAM,WAAW,SAAS;IACxB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,uBAAuB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,SAAS,CACzE,YAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;IASnC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,UAAU,EAAE,aAAa;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAV/B,0BAA0B,EAAE,MAAM,CAAC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAGf,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,aAAa,EACzB,SAAS,EAAE,SAAS;WAWlB,OAAO,CAAC,CAAC,SAAS,OAAO,EACpC,UAAU,EAAE,aAAa,EACzB,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,GAChC,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAS1C,QAAQ,CACb,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EACzB,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS;IAwEzB,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,oBAAoB,CAAC,GAAG;IA+ChE,aAAa,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA+C1E,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtD,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BhF,qFAAqF;YACvE,WAAW;IAenB,mBAAmB;IAoBnB,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;YAanD,YAAY;YAeZ,SAAS;YAcT,YAAY;YAIZ,aAAa;IAQ3B,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -1,275 +0,0 @@
1
- import { Transaction } from "@mysten/sui/transactions";
2
- import { parseStructTag, SUI_CLOCK_OBJECT_ID, normalizeSuiAddress } from "@mysten/sui/utils";
3
- import { encoding, isNative, serialize, toChainId, } from "@wormhole-foundation/sdk-connect";
4
- import { bytesVectorName, dummyFieldName, getDynamicFieldValue, getPackageId, getPackageIdFromType, isSameType, u16Name, SUI_COIN, SUI_SEPARATOR, SuiAddress, SuiPlatform, SuiUnsignedTransaction, } from "@wormhole-foundation/sdk-sui";
5
- import "@wormhole-foundation/sdk-sui-core";
6
- import { getTokenCoinType } from "./utils.js";
7
- export class SuiAutomaticTokenBridge {
8
- network;
9
- chain;
10
- connection;
11
- contracts;
12
- tokenBridgeRelayerObjectId;
13
- coreBridgeObjectId;
14
- tokenBridgeObjectId;
15
- fields;
16
- relayerPackageId;
17
- constructor(network, chain, connection, contracts) {
18
- this.network = network;
19
- this.chain = chain;
20
- this.connection = connection;
21
- this.contracts = contracts;
22
- const { tokenBridge, tokenBridgeRelayer, coreBridge } = contracts;
23
- if (!tokenBridge || !tokenBridgeRelayer || !coreBridge)
24
- throw new Error(`Some object IDs for ${chain} Automatic Token Bridge not found`);
25
- this.tokenBridgeRelayerObjectId = tokenBridgeRelayer;
26
- this.tokenBridgeObjectId = tokenBridge;
27
- this.coreBridgeObjectId = coreBridge;
28
- }
29
- static async fromRpc(connection, config) {
30
- const [network, chain] = await SuiPlatform.chainFromRpc(connection);
31
- const conf = config[chain];
32
- if (conf.network !== network)
33
- throw new Error(`Network mismatch for chain ${chain}: ${conf.network} != ${network}`);
34
- return new SuiAutomaticTokenBridge(network, chain, connection, conf.contracts);
35
- }
36
- async *transfer(sender, recipient, token, amount, nativeGas) {
37
- const tokenAddress = new SuiAddress(isNative(token) ? SuiPlatform.nativeTokenId(this.network, this.chain).address : token);
38
- const coinType = tokenAddress.getCoinType();
39
- const { coreBridge: coreBridgePackageId, tokenBridge: tokenBridgePackageId } = await this.getPackageIds();
40
- const tx = new Transaction();
41
- const feeAmount = BigInt(0); // TODO: wormhole fee
42
- const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure.u64(feeAmount)]);
43
- const [transferCoin] = await (async () => {
44
- if (isNative(token)) {
45
- return tx.splitCoins(tx.gas, [tx.pure.u64(amount)]);
46
- }
47
- else {
48
- const coins = await SuiPlatform.getCoins(this.connection, sender, coinType);
49
- const [primaryCoin, ...mergeCoins] = coins.filter((coin) => coin.coinType === coinType);
50
- if (primaryCoin === undefined) {
51
- throw new Error(`Coins array doesn't contain any coins of type ${coinType}`);
52
- }
53
- const primaryCoinInput = tx.object(primaryCoin.coinObjectId);
54
- if (mergeCoins.length) {
55
- tx.mergeCoins(primaryCoinInput, mergeCoins.map((coin) => tx.object(coin.coinObjectId)));
56
- }
57
- return tx.splitCoins(primaryCoinInput, [tx.pure.u64(amount)]);
58
- }
59
- })();
60
- const [assetInfo] = tx.moveCall({
61
- target: `${tokenBridgePackageId}::state::verified_asset`,
62
- arguments: [tx.object(this.tokenBridgeObjectId)],
63
- typeArguments: [coinType],
64
- });
65
- const suiRelayerPackageId = await this.getPackageId();
66
- const [transferTicket] = tx.moveCall({
67
- target: `${suiRelayerPackageId}::transfer::transfer_tokens_with_relay`,
68
- arguments: [
69
- tx.object(this.tokenBridgeRelayerObjectId),
70
- transferCoin,
71
- assetInfo,
72
- tx.pure.u64(nativeGas ?? 0n),
73
- tx.pure.u16(toChainId(recipient.chain)),
74
- tx.pure.address(encoding.hex.encode(recipient.address.toUint8Array(), true)),
75
- tx.pure.u32(123),
76
- ],
77
- typeArguments: [coinType],
78
- });
79
- const [messageTicket] = tx.moveCall({
80
- target: `${tokenBridgePackageId}::transfer_tokens_with_payload::transfer_tokens_with_payload`,
81
- arguments: [tx.object(this.tokenBridgeObjectId), transferTicket],
82
- typeArguments: [coinType],
83
- });
84
- tx.moveCall({
85
- target: `${coreBridgePackageId}::publish_message::publish_message`,
86
- arguments: [
87
- tx.object(this.coreBridgeObjectId),
88
- feeCoin,
89
- messageTicket,
90
- tx.object(SUI_CLOCK_OBJECT_ID),
91
- ],
92
- });
93
- yield this.createUnsignedTx(tx, "AutomaticTokenBridge.transfer");
94
- }
95
- async *redeem(sender, vaa) {
96
- const { coreBridge: coreBridgePackageId, tokenBridge: tokenBridgePackageId } = await this.getPackageIds();
97
- const { address: tokenAddress, chain: tokenChain } = vaa.payload.token;
98
- const coinType = await getTokenCoinType(this.connection, this.tokenBridgeObjectId, tokenAddress.toUniversalAddress().toUint8Array(), toChainId(tokenChain));
99
- if (!coinType) {
100
- throw new Error("Unable to fetch token coinType");
101
- }
102
- const tx = new Transaction();
103
- const [verifiedVAA] = tx.moveCall({
104
- target: `${coreBridgePackageId}::vaa::parse_and_verify`,
105
- arguments: [
106
- tx.object(this.coreBridgeObjectId),
107
- tx.pure.vector("u8", serialize(vaa)),
108
- tx.object(SUI_CLOCK_OBJECT_ID),
109
- ],
110
- });
111
- const [tokenBridgeMessage] = tx.moveCall({
112
- target: `${tokenBridgePackageId}::vaa::verify_only_once`,
113
- arguments: [tx.object(this.tokenBridgeObjectId), verifiedVAA],
114
- });
115
- const [redeemerReceipt] = tx.moveCall({
116
- target: `${tokenBridgePackageId}::complete_transfer_with_payload::authorize_transfer`,
117
- arguments: [tx.object(this.tokenBridgeObjectId), tokenBridgeMessage],
118
- typeArguments: [coinType],
119
- });
120
- const packageId = await this.getPackageId();
121
- tx.moveCall({
122
- target: `${packageId}::redeem::complete_transfer`,
123
- arguments: [tx.object(this.tokenBridgeRelayerObjectId), redeemerReceipt],
124
- typeArguments: [coinType],
125
- });
126
- yield this.createUnsignedTx(tx, "AutomaticTokenBridge.redeem");
127
- }
128
- async getRelayerFee(destination, token) {
129
- const _token = isNative(token) ? SuiPlatform.nativeTokenId(this.network, this.chain) : token;
130
- const tokenInfo = await this.getTokenInfo(_token.toString());
131
- if (tokenInfo === null) {
132
- throw new Error("Unsupported token for relay");
133
- }
134
- const fields = await this.getFields();
135
- // `relayer_fees` is a dynamic field (vector<u8> name) whose value is a Table {id, size};
136
- // the per-chain fee is a dynamic field (u16 name) under that table.
137
- const relayerFeesTable = await getDynamicFieldValue(this.connection, this.tokenBridgeRelayerObjectId, bytesVectorName("vector<u8>", encoding.bytes.encode("relayer_fees")));
138
- if (!relayerFeesTable || !relayerFeesTable.id) {
139
- throw new Error("Unable to compute relayer fee");
140
- }
141
- const fee = await getDynamicFieldValue(this.connection, relayerFeesTable.id, u16Name("u16", toChainId(destination)));
142
- if (fee === null || fee === undefined) {
143
- throw new Error("Unable to compute relayer fee");
144
- }
145
- const decimals = await SuiPlatform.getDecimals(this.network, this.chain, this.connection, token.toString());
146
- const swapRate = tokenInfo.swap_rate;
147
- const relayerFeePrecision = fields.relayer_fee_precision;
148
- const swapRatePrecision = fields.swap_rate_precision;
149
- return ((10n ** BigInt(decimals) * BigInt(fee) * BigInt(swapRatePrecision)) /
150
- (BigInt(swapRate) * BigInt(relayerFeePrecision)));
151
- }
152
- async maxSwapAmount(token) {
153
- const _token = isNative(token) ? SuiPlatform.nativeTokenId(this.network, this.chain) : token;
154
- const coinType = _token.toString();
155
- const { coinMetadata: metadata } = await this.connection.getCoinMetadata({ coinType });
156
- if (!metadata) {
157
- throw new Error("metadata is null");
158
- }
159
- const packageId = await this.getPackageId();
160
- const tx = new Transaction();
161
- tx.moveCall({
162
- // Calculates the max number of tokens the recipient can convert to native
163
- // Sui. The max amount of native assets the contract will swap with the
164
- // recipient is governed by the `max_native_swap_amount` variable.
165
- target: `${packageId}::redeem::calculate_max_swap_amount_in`,
166
- arguments: [tx.object(this.tokenBridgeRelayerObjectId), tx.pure.u8(metadata.decimals)],
167
- typeArguments: [coinType],
168
- });
169
- return this.simulateU64(tx);
170
- }
171
- async nativeTokenAmount(token, amount) {
172
- const _token = isNative(token) ? SuiPlatform.nativeTokenId(this.network, this.chain) : token;
173
- const coinType = _token.toString();
174
- const { coinMetadata: metadata } = await this.connection.getCoinMetadata({ coinType });
175
- if (!metadata) {
176
- throw new Error("metadata is null");
177
- }
178
- const packageId = await this.getPackageId();
179
- const tx = new Transaction();
180
- tx.moveCall({
181
- // Calculates the amount of native Sui that the recipient will receive
182
- // for swapping the `to_native_amount` of tokens.
183
- target: `${packageId}::redeem::calculate_native_swap_amount_out`,
184
- arguments: [
185
- tx.object(this.tokenBridgeRelayerObjectId),
186
- tx.pure.u64(amount),
187
- tx.pure.u8(metadata.decimals),
188
- ],
189
- typeArguments: [coinType],
190
- });
191
- return this.simulateU64(tx);
192
- }
193
- /** Simulate a read-only PTB and decode a single u64 (little-endian) return value. */
194
- async simulateU64(tx) {
195
- tx.setSenderIfNotSet(normalizeSuiAddress("0x0"));
196
- const result = await this.connection.simulateTransaction({
197
- transaction: tx,
198
- checksEnabled: false,
199
- include: { commandResults: true },
200
- });
201
- const returnValues = result.commandResults?.[0]?.returnValues;
202
- if (!returnValues || returnValues.length !== 1)
203
- throw Error("swap rate not set");
204
- // The result is a u64 in little-endian, so we reverse it for (big-endian) decode.
205
- return encoding.bignum.decode(new Uint8Array([...returnValues[0].bcs]).reverse());
206
- }
207
- async getRegisteredTokens() {
208
- const fields = await this.getFields();
209
- const registeredTokensObjectId = fields.registered_tokens.id;
210
- const allTokensInfo = await this.connection.listDynamicFields({
211
- parentId: registeredTokensObjectId,
212
- });
213
- const tokenAddresses = allTokensInfo.dynamicFields.map((token) => {
214
- // name.type is `${pkg}::registered_tokens::Key<${COIN}>`; the COIN is its type param.
215
- const coinTag = parseStructTag(token.name.type).typeParams[0];
216
- if (!coinTag || typeof coinTag === "string")
217
- throw new Error(`Unexpected registered token key: ${token.name.type}`);
218
- return new SuiAddress([coinTag.address, coinTag.module, coinTag.name].join(SUI_SEPARATOR));
219
- });
220
- return tokenAddresses;
221
- }
222
- async isRegisteredToken(token) {
223
- const tokenAddress = new SuiAddress(isNative(token) ? SuiPlatform.nativeTokenId(this.network, this.chain).address : token).unwrap();
224
- try {
225
- return (await this.getTokenInfo(tokenAddress)) !== null;
226
- }
227
- catch (e) {
228
- console.error(e);
229
- }
230
- return false;
231
- }
232
- async getTokenInfo(coinType) {
233
- const fields = await this.getFields();
234
- const packageId = await this.getPackageId();
235
- const registeredTokensObjectId = fields.registered_tokens.id;
236
- // Get the coin type (sui:SUI or ::coin::COIN)
237
- const parsed = new SuiAddress(coinType);
238
- const coin = isSameType(SUI_COIN, parsed.unwrap()) ? SUI_COIN : parsed.getCoinType();
239
- // registered_tokens::Key<COIN> is `{ dummy_field: bool }`; value is the TokenInfo struct.
240
- const name = dummyFieldName(`${packageId}::registered_tokens::Key<${coin}>`);
241
- const value = await getDynamicFieldValue(this.connection, registeredTokensObjectId, name);
242
- if (value === null || value === undefined)
243
- return null;
244
- return value;
245
- }
246
- async getFields() {
247
- if (!this.fields) {
248
- const { object } = await this.connection.getObject({
249
- objectId: this.tokenBridgeRelayerObjectId,
250
- include: { json: true },
251
- });
252
- if (!object || !object.json)
253
- throw new Error("Failed to get fields from token bridge relayer state");
254
- this.fields = object.json;
255
- // registered_tokens types are defined in the relayer package (derive from state type)
256
- this.relayerPackageId = getPackageIdFromType(object.type);
257
- }
258
- return this.fields;
259
- }
260
- async getPackageId() {
261
- await this.getFields();
262
- return this.relayerPackageId;
263
- }
264
- async getPackageIds() {
265
- const [coreBridge, tokenBridge] = await Promise.all([
266
- getPackageId(this.connection, this.coreBridgeObjectId),
267
- getPackageId(this.connection, this.tokenBridgeObjectId),
268
- ]);
269
- return { coreBridge, tokenBridge };
270
- }
271
- createUnsignedTx(txReq, description, parallelizable = false) {
272
- return new SuiUnsignedTransaction(txReq, this.network, this.chain, description, parallelizable);
273
- }
274
- }
275
- //# sourceMappingURL=automaticTokenBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"automaticTokenBridge.js","sourceRoot":"","sources":["../../src/automaticTokenBridge.ts"],"names":[],"mappings":"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"}