diff --git a/packages/swapper/src/swappers/RelaySwapper/constant.ts b/packages/swapper/src/swappers/RelaySwapper/constant.ts index 5410eeef1a3..3439b2676a0 100644 --- a/packages/swapper/src/swappers/RelaySwapper/constant.ts +++ b/packages/swapper/src/swappers/RelaySwapper/constant.ts @@ -30,7 +30,6 @@ import { soneiumChainId, sonicChainId, storyChainId, - tronChainId, unichainChainId, worldChainChainId, zkSyncEraChainId, @@ -87,7 +86,11 @@ export const chainIdToRelayChainId = { [gnosisChainId]: gnosis.id, [avalancheChainId]: avalanche.id, [bscChainId]: bsc.id, - [tronChainId]: 728126428, + // DISABLED: Tron deposits are built as simple TRC20 transfers instead of depositErc20() vault calls, + // and the Relay indexer notification is never sent for non-EVM chains. This causes deposits to be + // untracked by Relay, resulting in stuck/lost funds. Re-enable once the Tron transaction building + // is verified to use the Relay quote calldata (depositErc20) correctly. + // [tronChainId]: 728126428, [monadChainId]: monad.id, [hyperEvmChainId]: hyperEvm.id, [mantleChainId]: mantle.id, diff --git a/packages/swapper/src/swappers/RelaySwapper/endpoints.ts b/packages/swapper/src/swappers/RelaySwapper/endpoints.ts index dbca3fc700f..3f731f6849f 100644 --- a/packages/swapper/src/swappers/RelaySwapper/endpoints.ts +++ b/packages/swapper/src/swappers/RelaySwapper/endpoints.ts @@ -1,4 +1,4 @@ -import { evm, isEvmChainId } from '@shapeshiftoss/chain-adapters' +import { evm } from '@shapeshiftoss/chain-adapters' import { TxStatus } from '@shapeshiftoss/unchained-client' import BigNumber from 'bignumber.js' @@ -200,7 +200,7 @@ export const relayApi: SwapperApi = { if ( swap.metadata.relayTransactionMetadata && !txIndexingMap.has(swap.id) && - isEvmChainId(chainId) + chainIdToRelayChainId[chainId] !== undefined ) { const relayTxParam = { ...swap.metadata.relayTransactionMetadata, diff --git a/packages/swapper/src/swappers/RelaySwapper/utils/getTrade.ts b/packages/swapper/src/swappers/RelaySwapper/utils/getTrade.ts index 753bb641e74..ce40d3b50ab 100644 --- a/packages/swapper/src/swappers/RelaySwapper/utils/getTrade.ts +++ b/packages/swapper/src/swappers/RelaySwapper/utils/getTrade.ts @@ -653,12 +653,13 @@ export async function getTrade({ if (isRelayQuoteTronItemData(selectedItem.data)) { return { - allowanceContract: '', + allowanceContract: selectedItem.data?.parameter?.contract_address ?? '', solanaTransactionMetadata: undefined, relayTransactionMetadata: { relayId: quote.steps[0].requestId, orderId, to: selectedItem.data?.parameter?.contract_address, + data: selectedItem.data?.parameter?.data, }, } } diff --git a/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts b/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts index ad51f0cb7eb..682d79b8abf 100644 --- a/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts +++ b/packages/swapper/src/tron-utils/getUnsignedTronTransaction.ts @@ -46,6 +46,22 @@ export const getUnsignedTronTransaction = ({ }) } + if (relayTransactionMetadata?.data) { + const to = relayTransactionMetadata.to + if (!to) throw new Error('Missing Relay transaction destination address') + + const isNativeTron = sellAsset.assetId === tronAssetId + const value = isNativeTron ? step.sellAmountIncludingProtocolFeesCryptoBaseUnit : '0' + + return adapter.buildCustomApiTx({ + from, + to, + accountNumber, + data: relayTransactionMetadata.data, + value, + }) + } + const to = relayTransactionMetadata?.to ?? nearIntentsSpecific?.depositAddress if (!to) throw new Error('Missing transaction destination address')