diff --git a/sdk/js/src/sui/publish.ts b/sdk/js/src/sui/publish.ts index f5a7def37..07b2bbb2f 100644 --- a/sdk/js/src/sui/publish.ts +++ b/sdk/js/src/sui/publish.ts @@ -12,16 +12,18 @@ export const publishCoin = async ( coreBridgeStateObjectId: string, tokenBridgeStateObjectId: string, decimals: number, - signerAddress: string + signerAddress: string, + coreBridgePackageId?: string, + tokenBridgePackageId?: string ) => { - const coreBridgePackageId = await getPackageId( - provider, - coreBridgeStateObjectId - ); - const tokenBridgePackageId = await getPackageId( - provider, - tokenBridgeStateObjectId - ); + [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ + coreBridgePackageId + ? Promise.resolve(coreBridgePackageId) + : getPackageId(provider, coreBridgeStateObjectId), + tokenBridgePackageId + ? Promise.resolve(tokenBridgePackageId) + : getPackageId(provider, tokenBridgeStateObjectId), + ]); const build = await getCoinBuildOutput( provider, coreBridgePackageId, diff --git a/sdk/js/src/token_bridge/__tests__/sui-integration.ts b/sdk/js/src/token_bridge/__tests__/sui-integration.ts index 76ca53f20..ec6caf783 100644 --- a/sdk/js/src/token_bridge/__tests__/sui-integration.ts +++ b/sdk/js/src/token_bridge/__tests__/sui-integration.ts @@ -345,7 +345,9 @@ describe("Sui SDK tests", () => { suiProvider, SUI_CORE_BRIDGE_STATE_OBJECT_ID, SUI_TOKEN_BRIDGE_STATE_OBJECT_ID, - slicedTransferFromEthVAA + slicedTransferFromEthVAA, + suiCoreBridgePackageId, + suiTokenBridgePackageId ); const suiRedeemTxResult = await executeTransactionBlock( suiSigner, @@ -467,7 +469,10 @@ describe("Sui SDK tests", () => { suiProvider, SUI_CORE_BRIDGE_STATE_OBJECT_ID, SUI_TOKEN_BRIDGE_STATE_OBJECT_ID, - coin8Type + coin8Type, + BigInt(0), + suiCoreBridgePackageId, + suiTokenBridgePackageId ); result = await executeTransactionBlock(suiSigner, suiAttestTxPayload); result.effects?.status.status === "failure" && diff --git a/sdk/js/src/token_bridge/attest.ts b/sdk/js/src/token_bridge/attest.ts index aef2b4159..a93410033 100644 --- a/sdk/js/src/token_bridge/attest.ts +++ b/sdk/js/src/token_bridge/attest.ts @@ -318,16 +318,22 @@ export async function attestFromSui( coreBridgeStateObjectId: string, tokenBridgeStateObjectId: string, coinType: string, - feeAmount: BigInt = BigInt(0) + feeAmount: BigInt = BigInt(0), + coreBridgePackageId?: string, + tokenBridgePackageId?: string ): Promise { const metadata = await provider.getCoinMetadata({ coinType }); if (metadata === null || metadata.id === null) { throw new Error(`Coin metadata ID for type ${coinType} not found`); } - const [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ - getPackageId(provider, coreBridgeStateObjectId), - getPackageId(provider, tokenBridgeStateObjectId), + [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ + coreBridgePackageId + ? Promise.resolve(coreBridgePackageId) + : getPackageId(provider, coreBridgeStateObjectId), + tokenBridgePackageId + ? Promise.resolve(tokenBridgePackageId) + : getPackageId(provider, tokenBridgeStateObjectId), ]); const tx = new TransactionBlock(); const [feeCoin] = tx.splitCoins(tx.gas, [tx.pure(feeAmount)]); diff --git a/sdk/js/src/token_bridge/createWrapped.ts b/sdk/js/src/token_bridge/createWrapped.ts index 6a62ff0a2..c75e790c6 100644 --- a/sdk/js/src/token_bridge/createWrapped.ts +++ b/sdk/js/src/token_bridge/createWrapped.ts @@ -194,11 +194,17 @@ export async function createWrappedOnSui( signerAddress: string, coinPackageId: string, wrappedAssetSetupType: string, - attestVAA: Uint8Array + attestVAA: Uint8Array, + coreBridgePackageId?: string, + tokenBridgePackageId?: string ): Promise { - const [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ - getPackageId(provider, coreBridgeStateObjectId), - getPackageId(provider, tokenBridgeStateObjectId), + [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ + coreBridgePackageId + ? Promise.resolve(coreBridgePackageId) + : getPackageId(provider, coreBridgeStateObjectId), + tokenBridgePackageId + ? Promise.resolve(tokenBridgePackageId) + : getPackageId(provider, tokenBridgeStateObjectId), ]); // Get coin metadata diff --git a/sdk/js/src/token_bridge/redeem.ts b/sdk/js/src/token_bridge/redeem.ts index 11384a3d9..7a0a8b538 100644 --- a/sdk/js/src/token_bridge/redeem.ts +++ b/sdk/js/src/token_bridge/redeem.ts @@ -367,7 +367,9 @@ export async function redeemOnSui( provider: JsonRpcProvider, coreBridgeStateObjectId: string, tokenBridgeStateObjectId: string, - transferVAA: Uint8Array + transferVAA: Uint8Array, + coreBridgePackageId?: string, + tokenBridgePackageId?: string ): Promise { const { tokenAddress, tokenChain } = parseTokenTransferVaa(transferVAA); const coinType = await getTokenCoinType( @@ -380,9 +382,13 @@ export async function redeemOnSui( throw new Error("Unable to fetch token coinType"); } - const [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ - getPackageId(provider, coreBridgeStateObjectId), - getPackageId(provider, tokenBridgeStateObjectId), + [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ + coreBridgePackageId + ? Promise.resolve(coreBridgePackageId) + : getPackageId(provider, coreBridgeStateObjectId), + tokenBridgePackageId + ? Promise.resolve(tokenBridgePackageId) + : getPackageId(provider, tokenBridgeStateObjectId), ]); const tx = new TransactionBlock(); const [verifiedVAA] = tx.moveCall({ diff --git a/sdk/js/src/token_bridge/transfer.ts b/sdk/js/src/token_bridge/transfer.ts index 54ff2e3f0..ad45b3041 100644 --- a/sdk/js/src/token_bridge/transfer.ts +++ b/sdk/js/src/token_bridge/transfer.ts @@ -933,7 +933,9 @@ export async function transferFromSui( recipient: Uint8Array, feeAmount: bigint = BigInt(0), relayerFee: bigint = BigInt(0), - payload: Uint8Array | null = null + payload: Uint8Array | null = null, + coreBridgePackageId?: string, + tokenBridgePackageId?: string ) { if (payload !== null) { throw new Error("Sui transfer with payload not implemented"); @@ -948,9 +950,13 @@ export async function transferFromSui( ); } - const [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ - getPackageId(provider, coreBridgeStateObjectId), - getPackageId(provider, tokenBridgeStateObjectId), + [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ + coreBridgePackageId + ? Promise.resolve(coreBridgePackageId) + : getPackageId(provider, coreBridgeStateObjectId), + tokenBridgePackageId + ? Promise.resolve(tokenBridgePackageId) + : getPackageId(provider, tokenBridgeStateObjectId), ]); const tx = new TransactionBlock(); const [transferCoin] = (() => { diff --git a/sdk/js/src/token_bridge/updateWrapped.ts b/sdk/js/src/token_bridge/updateWrapped.ts index 6173596ea..d652e1028 100644 --- a/sdk/js/src/token_bridge/updateWrapped.ts +++ b/sdk/js/src/token_bridge/updateWrapped.ts @@ -44,11 +44,17 @@ export async function updateWrappedOnSui( coreBridgeStateObjectId: string, tokenBridgeStateObjectId: string, coinPackageId: string, - attestVAA: Uint8Array + attestVAA: Uint8Array, + coreBridgePackageId?: string, + tokenBridgePackageId?: string ): Promise { - const [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ - getPackageId(provider, coreBridgeStateObjectId), - getPackageId(provider, tokenBridgeStateObjectId), + [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([ + coreBridgePackageId + ? Promise.resolve(coreBridgePackageId) + : getPackageId(provider, coreBridgeStateObjectId), + tokenBridgePackageId + ? Promise.resolve(tokenBridgePackageId) + : getPackageId(provider, tokenBridgeStateObjectId), ]); // Get coin metadata