From 4684b1d7fd8eaa724e00b85a093a2e3aa28a83d9 Mon Sep 17 00:00:00 2001 From: Minimoi Date: Wed, 21 Jan 2026 17:05:41 +0100 Subject: [PATCH 1/8] =?UTF-8?q?auto-claude:=20subtask-1-1=20-=20Add=20TRON?= =?UTF-8?q?=20chain=20ID=20mapping=20(728126428=20=E2=86=94=20tronChainId)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add TRON chain ID mapping to ButterSwap helpers.ts for the Butter API. This maps the Butter API chain ID 728126428 to KnownChainIds.TronMainnet. Co-Authored-By: Claude Opus 4.5 --- packages/swapper/src/swappers/ButterSwap/utils/helpers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts b/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts index 741847c4abc..3b1c36fdf81 100644 --- a/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts +++ b/packages/swapper/src/swappers/ButterSwap/utils/helpers.ts @@ -12,6 +12,7 @@ const BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID: Record = { 43114: KnownChainIds.AvalancheMainnet, 1360108768460801: KnownChainIds.SolanaMainnet, 1360095883558913: KnownChainIds.BitcoinMainnet, + 728126428: KnownChainIds.TronMainnet, } const CHAIN_ID_TO_BUTTERSWAP_CHAIN_ID: Record = Object.entries( From 46c0eceb0a57569c7f68e88ffedcc3fe756bb48c Mon Sep 17 00:00:00 2001 From: Minimoi Date: Wed, 21 Jan 2026 17:09:41 +0100 Subject: [PATCH 2/8] auto-claude: subtask-1-2 - Add TRON native token address constant and handling - Import tronChainId from @shapeshiftoss/caip - Add TRON_NATIVE_ADDRESS constant (T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb) - Handle TRON native token in sellAssetAddress resolution - Handle TRON native token in buyAssetAddress resolution This follows the same pattern as the existing Solana native address handling. Co-Authored-By: Claude Opus 4.5 --- packages/swapper/src/swappers/ButterSwap/xhr.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/swapper/src/swappers/ButterSwap/xhr.ts b/packages/swapper/src/swappers/ButterSwap/xhr.ts index dbb78612e5d..d29d50c4e41 100644 --- a/packages/swapper/src/swappers/ButterSwap/xhr.ts +++ b/packages/swapper/src/swappers/ButterSwap/xhr.ts @@ -1,4 +1,4 @@ -import { fromAssetId, solanaChainId } from '@shapeshiftoss/caip' +import { fromAssetId, solanaChainId, tronChainId } from '@shapeshiftoss/caip' import type { Asset } from '@shapeshiftoss/types' import { chainIdToFeeAssetId } from '@shapeshiftoss/utils' import type { Result } from '@sniptt/monads' @@ -39,6 +39,7 @@ export type GetButterRouteArgs = { } const SOLANA_NATIVE_ADDRESS = 'So11111111111111111111111111111111111111112' +const TRON_NATIVE_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb' export const getButterRoute = async ({ sellAsset, @@ -67,12 +68,14 @@ export const getButterRoute = async ({ const sellAssetAddress = (() => { if (sellAsset.chainId === solanaChainId && sellAssetIsNative) return SOLANA_NATIVE_ADDRESS + if (sellAsset.chainId === tronChainId && sellAssetIsNative) return TRON_NATIVE_ADDRESS if (sellAssetIsNative) return zeroAddress return sellAssetAddressRaw })() const buyAssetAddress = (() => { if (buyAsset.chainId === solanaChainId && buyAssetIsNative) return SOLANA_NATIVE_ADDRESS + if (buyAsset.chainId === tronChainId && buyAssetIsNative) return TRON_NATIVE_ADDRESS if (buyAssetIsNative) return zeroAddress return buyAssetAddressRaw })() From c0bcb9394f736a06b1c489bb1a0098bbd3ba0973 Mon Sep 17 00:00:00 2001 From: Minimoi Date: Wed, 21 Jan 2026 17:11:22 +0100 Subject: [PATCH 3/8] auto-claude: subtask-2-1 - Add tronChainId to chain validation in getTradeQuote Co-Authored-By: Claude Opus 4.5 --- .../src/swappers/ButterSwap/swapperApi/getTradeQuote.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts b/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts index 3b1f78fdc75..e50abed5251 100644 --- a/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts +++ b/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeQuote.ts @@ -1,4 +1,4 @@ -import { btcAssetId, btcChainId, solanaChainId } from '@shapeshiftoss/caip' +import { btcAssetId, btcChainId, solanaChainId, tronChainId } from '@shapeshiftoss/caip' import { isEvmChainId } from '@shapeshiftoss/chain-adapters' import { bnOrZero, @@ -52,7 +52,8 @@ export const getTradeQuote = async ( if ( !isEvmChainId(sellAsset.chainId) && sellAsset.chainId !== btcChainId && - sellAsset.chainId !== solanaChainId + sellAsset.chainId !== solanaChainId && + sellAsset.chainId !== tronChainId ) { return Err( makeSwapErrorRight({ From 962c9572bfd7c834d618bfe000929e3163692fde Mon Sep 17 00:00:00 2001 From: Minimoi Date: Wed, 21 Jan 2026 17:12:28 +0100 Subject: [PATCH 4/8] auto-claude: subtask-2-2 - Add tronChainId to chain validation in getTradeRate --- .../src/swappers/ButterSwap/swapperApi/getTradeRate.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeRate.ts b/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeRate.ts index 7742212d893..faf1af86da7 100644 --- a/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeRate.ts +++ b/packages/swapper/src/swappers/ButterSwap/swapperApi/getTradeRate.ts @@ -1,4 +1,4 @@ -import { btcAssetId, btcChainId, solanaChainId } from '@shapeshiftoss/caip' +import { btcAssetId, btcChainId, solanaChainId, tronChainId } from '@shapeshiftoss/caip' import { isEvmChainId } from '@shapeshiftoss/chain-adapters' import { bn, @@ -42,7 +42,8 @@ export const getTradeRate = async ( if ( !isEvmChainId(sellAsset.chainId) && sellAsset.chainId !== btcChainId && - sellAsset.chainId !== solanaChainId + sellAsset.chainId !== solanaChainId && + sellAsset.chainId !== tronChainId ) { return Err( makeSwapErrorRight({ From 393843556baaad48a0e251fd54b547d2eb23980e Mon Sep 17 00:00:00 2001 From: Minimoi Date: Wed, 21 Jan 2026 17:13:50 +0100 Subject: [PATCH 5/8] auto-claude: subtask-3-1 - Update getUnsignedTronTransaction.ts to handle butterSwapTransactionMetadata Add butterSwapTransactionMetadata to the destructuring from the trade step and include butterSwapTransactionMetadata.to in the fallback chain for determining the transaction destination address. This enables the existing tron-utils to work with ButterSwap quotes. Co-Authored-By: Claude Opus 4.5 --- .../src/tron-utils/getUnsignedTronTransaction.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts b/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts index 7a6702e0bb3..70a0112718b 100644 --- a/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts +++ b/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts @@ -13,11 +13,20 @@ export const getUnsignedTronTransaction = ({ const step = getExecutableTradeStep(tradeQuote, stepIndex) - const { accountNumber, sellAsset, relayTransactionMetadata, nearIntentsSpecific } = step + const { + accountNumber, + sellAsset, + relayTransactionMetadata, + nearIntentsSpecific, + butterSwapTransactionMetadata, + } = step const adapter = assertGetTronChainAdapter(sellAsset.chainId) - const to = relayTransactionMetadata?.to ?? nearIntentsSpecific?.depositAddress + const to = + relayTransactionMetadata?.to ?? + nearIntentsSpecific?.depositAddress ?? + butterSwapTransactionMetadata?.to if (!to) throw new Error('Missing transaction destination address') const value = step.sellAmountIncludingProtocolFeesCryptoBaseUnit From 79bb78a3883dce57846615fc47354f9ff2fcaa03 Mon Sep 17 00:00:00 2001 From: Minimoi Date: Wed, 21 Jan 2026 17:15:18 +0100 Subject: [PATCH 6/8] auto-claude: subtask-3-2 - Add getTronTransactionFees and getUnsignedTronTransaction to ButterSwap endpoints Co-Authored-By: Claude Opus 4.5 --- packages/swapper/src/swappers/ButterSwap/endpoints.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/swapper/src/swappers/ButterSwap/endpoints.ts b/packages/swapper/src/swappers/ButterSwap/endpoints.ts index de4de070ea4..fca82e9eeff 100644 --- a/packages/swapper/src/swappers/ButterSwap/endpoints.ts +++ b/packages/swapper/src/swappers/ButterSwap/endpoints.ts @@ -3,6 +3,8 @@ import BigNumber from 'bignumber.js' import { getSolanaTransactionFees } from '../../solana-utils/getSolanaTransactionFees' import { getUnsignedSolanaTransaction } from '../../solana-utils/getUnsignedSolanaTransaction' +import { getTronTransactionFees } from '../../tron-utils/getTronTransactionFees' +import { getUnsignedTronTransaction } from '../../tron-utils/getUnsignedTronTransaction' import type { SwapperApi } from '../../types' import { getExecutableTradeStep, isExecutableTradeQuote } from '../../utils' import { checkTradeStatus } from './swapperApi/checkTradeStatus' @@ -85,4 +87,6 @@ export const butterSwapApi: SwapperApi = { }, getUnsignedSolanaTransaction, getSolanaTransactionFees, + getTronTransactionFees, + getUnsignedTronTransaction, } From 09eeb0477a3900e6b89be6499a583392b82d8545 Mon Sep 17 00:00:00 2001 From: NeOMakinG <14963751+NeOMakinG@users.noreply.github.com> Date: Thu, 22 Jan 2026 18:31:09 +0100 Subject: [PATCH 7/8] fix: execution --- packages/swapper/src/swappers/ButterSwap/ButterSwap.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/swapper/src/swappers/ButterSwap/ButterSwap.ts b/packages/swapper/src/swappers/ButterSwap/ButterSwap.ts index 3a99f1a8df7..ebd8d474ecf 100644 --- a/packages/swapper/src/swappers/ButterSwap/ButterSwap.ts +++ b/packages/swapper/src/swappers/ButterSwap/ButterSwap.ts @@ -1,9 +1,14 @@ import type { Swapper } from '../../types' -import { executeEvmTransaction, executeSolanaTransaction } from '../../utils' +import { + executeEvmTransaction, + executeSolanaTransaction, + executeTronTransaction, +} from '../../utils' export const butterSwap: Swapper = { executeEvmTransaction, executeSolanaTransaction, + executeTronTransaction, executeUtxoTransaction: (txToSign, { signAndBroadcastTransaction }) => { return signAndBroadcastTransaction(txToSign) }, From ba797f897e9a068608e9fa9eafe82c66f60a8784 Mon Sep 17 00:00:00 2001 From: NeOMakinG <14963751+NeOMakinG@users.noreply.github.com> Date: Thu, 22 Jan 2026 18:34:01 +0100 Subject: [PATCH 8/8] fix: trade status --- .../ButterSwap/swapperApi/checkTradeStatus.ts | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/swapper/src/swappers/ButterSwap/swapperApi/checkTradeStatus.ts b/packages/swapper/src/swappers/ButterSwap/swapperApi/checkTradeStatus.ts index 71285b79153..659b0cf654d 100644 --- a/packages/swapper/src/swappers/ButterSwap/swapperApi/checkTradeStatus.ts +++ b/packages/swapper/src/swappers/ButterSwap/swapperApi/checkTradeStatus.ts @@ -1,4 +1,4 @@ -import { solanaChainId } from '@shapeshiftoss/caip' +import { solanaChainId, tronChainId } from '@shapeshiftoss/caip' import { isEvmChainId } from '@shapeshiftoss/chain-adapters' import { TxStatus } from '@shapeshiftoss/unchained-client' @@ -52,6 +52,31 @@ export const checkTradeStatus = async (input: CheckTradeStatusInput): Promise 0 + ? TxStatus.Confirmed + : contractRet === 'REVERT' + ? TxStatus.Failed + : TxStatus.Pending + + return { + status, + buyTxHash: txHash, + message: undefined, + } + } + // Fallback: unknown same-chain type (should never happen for Butter, but just in case). Avoid bridge polling. return createDefaultStatusResponse(txHash) }