From 720f1d38cf24f4bf4804646ccfcb943f63ddea27 Mon Sep 17 00:00:00 2001 From: TomerHFB <158162596+TomerHFB@users.noreply.github.com> Date: Wed, 12 Feb 2025 16:38:58 +0200 Subject: [PATCH] fix(@fireblocks/recovery-utility): :bug: trc20 withdrawal bug fix --- apps/recovery-relay/lib/wallets/TRC20/index.ts | 6 +++--- .../renderer/lib/wallets/TRC20/index.ts | 11 ++++++----- packages/wallet-derivation/wallets/chains/Tron.ts | 4 ++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/recovery-relay/lib/wallets/TRC20/index.ts b/apps/recovery-relay/lib/wallets/TRC20/index.ts index c0fe632b..46fa21b8 100644 --- a/apps/recovery-relay/lib/wallets/TRC20/index.ts +++ b/apps/recovery-relay/lib/wallets/TRC20/index.ts @@ -72,9 +72,9 @@ export class TRC20 extends BaseTron implements ConnectedWallet { const extraParams = new Map(); - extraParams.set('t', this.tokenAddress); - extraParams.set('d', this.decimals); - extraParams.set('m', metadata); + extraParams.set(this.KEY_TOKEN_ADDRESS, this.tokenAddress); + extraParams.set(this.KEY_DECIMALS, this.decimals); + extraParams.set(this.KEY_METADATA, metadata); const feeRate = (await this.estimateGas()) ?? 40_000_000; diff --git a/apps/recovery-utility/renderer/lib/wallets/TRC20/index.ts b/apps/recovery-utility/renderer/lib/wallets/TRC20/index.ts index 0aa52491..a521a3f5 100644 --- a/apps/recovery-utility/renderer/lib/wallets/TRC20/index.ts +++ b/apps/recovery-utility/renderer/lib/wallets/TRC20/index.ts @@ -10,12 +10,13 @@ export class TRC20 extends BaseTron implements SigningWallet { public async generateTx({ to, amount, feeRate, extraParams }: GenerateTxInput): Promise { try { const tronWeb = require('tronweb'); - const metadata = extraParams?.get('m'); + const metadata = extraParams?.get(this.KEY_METADATA); metadata.fee_limit = feeRate; - const decimals = extraParams?.get('d'); - const tokenAddress = extraParams?.get('t'); - + const decimals = extraParams?.get(this.KEY_DECIMALS); + const tokenAddress = extraParams?.get(this.KEY_TOKEN_ADDRESS); const fixedAmount = amount * 10 ** decimals; + + //serialized data - functionSelector(transfer) + toAddress + amount const data = `a9059cbb${tronWeb.address.toHex(to).replace('/^(41)/', '0x').padStart(64, '0')}${fixedAmount .toString(16) .padStart(64, '0')}`; @@ -50,7 +51,7 @@ export class TRC20 extends BaseTron implements SigningWallet { tx.raw_data_hex = tronWeb.utils.transaction.txPbToRawDataHex(pb).toLowerCase(); const signedTx = tronWeb.utils.crypto.signTransaction(Buffer.from(this.privateKey!.replace('0x', ''), 'hex'), tx); - //encode and compress for qr code + //encode and compress to fit qr code limits const gzip = promisify(zlib.gzip); const compressedTx = (await gzip(JSON.stringify(signedTx))).toString('base64'); diff --git a/packages/wallet-derivation/wallets/chains/Tron.ts b/packages/wallet-derivation/wallets/chains/Tron.ts index b876a153..9a3b7e5d 100644 --- a/packages/wallet-derivation/wallets/chains/Tron.ts +++ b/packages/wallet-derivation/wallets/chains/Tron.ts @@ -32,4 +32,8 @@ export class Tron extends ECDSAWallet { protected readonly KEY_TX = 't'; protected readonly KEY_METADATA = 'm'; + + protected readonly KEY_TOKEN_ADDRESS = 't'; + + protected readonly KEY_DECIMALS = 'd'; }