From f95f263e767683c2ad7968e7df87d3c00cb8c74f Mon Sep 17 00:00:00 2001 From: c4605 Date: Fri, 11 Apr 2025 11:57:54 +0200 Subject: [PATCH] fix: final received token incorrect on some EVM chains --- .../createBridgeOrderFromBitcoin.ts | 35 ++++++++----------- src/stacksUtils/createBridgeOrderFromMeta.ts | 35 ++++++++----------- 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/src/stacksUtils/createBridgeOrderFromBitcoin.ts b/src/stacksUtils/createBridgeOrderFromBitcoin.ts index d8fd08a..0862480 100644 --- a/src/stacksUtils/createBridgeOrderFromBitcoin.ts +++ b/src/stacksUtils/createBridgeOrderFromBitcoin.ts @@ -1,7 +1,6 @@ import { unwrapResponse } from "clarity-codegen" import { getTerminatingStacksTokenContractAddress } from "../evmUtils/peggingHelpers" import { addressToBuffer } from "../utils/addressHelpers" -import { last } from "../utils/arrayHelpers" import { KnownRoute_FromBitcoin, KnownRoute_FromBitcoin_ToBRC20, @@ -261,21 +260,15 @@ async function createBridgeOrderFromBitcoinImpl( return undefined } - // prettier-ignore - const swappedToStacksTokenAddress = ( - swapInfo == null ? undefined : - swapInfo.via === "ALEX" ? last(swapInfo.swapPools).toTokenAddress : - swapInfo.via === "evmDexAggregator" ? - await getTerminatingStacksTokenContractAddress( - sdkContext, - { + const tokenOutStacksAddress = + (KnownChainId.isEVMChain(info.toChain) && + KnownTokenId.isEVMToken(info.toToken) + ? await getTerminatingStacksTokenContractAddress(sdkContext, { stacksChain: transitStacksChain, - evmChain: swapInfo.evmChain, - evmToken: swapInfo.toEVMToken, - } - ) : - (checkNever(swapInfo), undefined) - ) ?? bridgedToStacksTokenAddress + evmChain: info.toChain, + evmToken: info.toToken, + }) + : undefined) ?? bridgedToStacksTokenAddress let data: undefined | Uint8Array if (swapInfo == null) { @@ -287,8 +280,8 @@ async function createBridgeOrderFromBitcoinImpl( from: info.fromAddressBuffer, to: info.toAddressBuffer, "chain-id": targetChainId, - token: `${swappedToStacksTokenAddress.deployerAddress}.${swappedToStacksTokenAddress.contractName}`, - "token-out": `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, + token: `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, + "token-out": `${tokenOutStacksAddress.deployerAddress}.${tokenOutStacksAddress.contractName}`, }, }, contractBaseCallInfo.executeOptions, @@ -306,7 +299,7 @@ async function createBridgeOrderFromBitcoinImpl( "min-amount-out": numberToStacksContractNumber( swapInfo.minimumAmountsToReceive, ), - "token-out": `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, + "token-out": `${tokenOutStacksAddress.deployerAddress}.${tokenOutStacksAddress.contractName}`, }, }, contractSwapCallInfo.executeOptions, @@ -349,9 +342,9 @@ async function createBridgeOrderFromBitcoinImpl( "min-amount-out": numberToStacksContractNumber( swapInfo.minimumAmountsToReceive, ), - "token-out": `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, "swap-token-in": `${swapFromTokenStacksAddress.deployerAddress}.${swapFromTokenStacksAddress.contractName}`, "swap-token-out": `${swapToTokenStacksAddress.deployerAddress}.${swapToTokenStacksAddress.contractName}`, + "token-out": `${tokenOutStacksAddress.deployerAddress}.${tokenOutStacksAddress.contractName}`, }, }, contractAggCallInfo.executeOptions, @@ -369,8 +362,8 @@ async function createBridgeOrderFromBitcoinImpl( return { tokenOutTrait: { - deployerAddress: bridgedToStacksTokenAddress.deployerAddress, - contractName: bridgedToStacksTokenAddress.contractName, + deployerAddress: tokenOutStacksAddress.deployerAddress, + contractName: tokenOutStacksAddress.contractName, }, data: data!, } diff --git a/src/stacksUtils/createBridgeOrderFromMeta.ts b/src/stacksUtils/createBridgeOrderFromMeta.ts index c4a35a3..cd9b708 100644 --- a/src/stacksUtils/createBridgeOrderFromMeta.ts +++ b/src/stacksUtils/createBridgeOrderFromMeta.ts @@ -1,7 +1,6 @@ import { unwrapResponse } from "clarity-codegen" import { getTerminatingStacksTokenContractAddress } from "../evmUtils/peggingHelpers" import { addressToBuffer } from "../utils/addressHelpers" -import { last } from "../utils/arrayHelpers" import { KnownRoute_FromMeta, KnownRoute_FromMeta_ToBitcoin, @@ -257,21 +256,15 @@ async function createBridgeOrderFromMetaImpl( return undefined } - // prettier-ignore - const swappedToStacksTokenAddress = ( - swapInfo == null ? undefined : - swapInfo.via === "ALEX" ? last(swapInfo.swapPools).toTokenAddress : - swapInfo.via === "evmDexAggregator" ? - await getTerminatingStacksTokenContractAddress( - sdkContext, - { + const tokenOutStacksAddress = + (KnownChainId.isEVMChain(info.toChain) && + KnownTokenId.isEVMToken(info.toToken) + ? await getTerminatingStacksTokenContractAddress(sdkContext, { stacksChain: transitStacksChain, - evmChain: swapInfo.evmChain, - evmToken: swapInfo.toEVMToken, - } - ) : - (checkNever(swapInfo), undefined) - ) ?? bridgedToStacksTokenAddress + evmChain: info.toChain, + evmToken: info.toToken, + }) + : undefined) ?? bridgedToStacksTokenAddress let data: undefined | Uint8Array if (swapInfo == null) { @@ -283,8 +276,8 @@ async function createBridgeOrderFromMetaImpl( from: info.fromAddressBuffer, to: info.toAddressBuffer, "chain-id": targetChainId, - token: `${swappedToStacksTokenAddress.deployerAddress}.${swappedToStacksTokenAddress.contractName}`, - "token-out": `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, + token: `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, + "token-out": `${tokenOutStacksAddress.deployerAddress}.${tokenOutStacksAddress.contractName}`, }, }, contractBaseCallInfo.executeOptions, @@ -302,7 +295,7 @@ async function createBridgeOrderFromMetaImpl( "min-amount-out": numberToStacksContractNumber( swapInfo.minimumAmountsToReceive, ), - "token-out": `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, + "token-out": `${tokenOutStacksAddress.deployerAddress}.${tokenOutStacksAddress.contractName}`, }, }, contractSwapCallInfo.executeOptions, @@ -345,9 +338,9 @@ async function createBridgeOrderFromMetaImpl( "min-amount-out": numberToStacksContractNumber( swapInfo.minimumAmountsToReceive, ), - "token-out": `${bridgedToStacksTokenAddress.deployerAddress}.${bridgedToStacksTokenAddress.contractName}`, "swap-token-in": `${swapFromTokenStacksAddress.deployerAddress}.${swapFromTokenStacksAddress.contractName}`, "swap-token-out": `${swapToTokenStacksAddress.deployerAddress}.${swapToTokenStacksAddress.contractName}`, + "token-out": `${tokenOutStacksAddress.deployerAddress}.${tokenOutStacksAddress.contractName}`, }, }, contractAggCallInfo.executeOptions, @@ -365,8 +358,8 @@ async function createBridgeOrderFromMetaImpl( return { tokenOutTrait: { - deployerAddress: bridgedToStacksTokenAddress.deployerAddress, - contractName: bridgedToStacksTokenAddress.contractName, + deployerAddress: tokenOutStacksAddress.deployerAddress, + contractName: tokenOutStacksAddress.contractName, }, data: data!, }