diff --git a/modules/abstract-eth/src/abstractEthLikeNewCoins.ts b/modules/abstract-eth/src/abstractEthLikeNewCoins.ts index ea3126a6fe..8a684c71a5 100644 --- a/modules/abstract-eth/src/abstractEthLikeNewCoins.ts +++ b/modules/abstract-eth/src/abstractEthLikeNewCoins.ts @@ -143,6 +143,12 @@ export interface TransactionPrebuild extends BaseTransactionPrebuild { isBatch: boolean; coin: string; token?: string; + txInfo?: { + recipients?: TransactionRecipient[]; + nextContractSequenceId?: number; + eip1559?: EIP1559; + isBatch?: boolean; + }; } export interface SignFinalOptions { @@ -165,6 +171,12 @@ export interface SignFinalOptions { isBatch?: boolean; txHex?: string; expireTime?: number; + txInfo?: { + recipients?: TransactionRecipient[]; + nextContractSequenceId?: number; + eip1559?: EIP1559; + isBatch?: boolean; + }; }; signingKeyNonce?: number; walletContractAddress?: string; diff --git a/modules/sdk-coin-eth/src/erc7984Token.ts b/modules/sdk-coin-eth/src/erc7984Token.ts index 32a26d965c..35d4d68074 100644 --- a/modules/sdk-coin-eth/src/erc7984Token.ts +++ b/modules/sdk-coin-eth/src/erc7984Token.ts @@ -234,7 +234,10 @@ export class Erc7984Token extends Eth { throw new Error('verifyConfidentialConsolidation: encryptedHandle is missing or empty in transaction calldata'); } - const expectedForwarder = txPrebuild.recipients?.[0]?.address ?? txParams?.recipients?.[0]?.address; + const expectedForwarder = + txPrebuild.recipients?.[0]?.address ?? + txPrebuild.txInfo?.recipients?.[0]?.address ?? + txParams?.recipients?.[0]?.address; if (forwarderAddress && expectedForwarder) { if (forwarderAddress.toLowerCase() !== expectedForwarder.toLowerCase()) { throw new Error( diff --git a/modules/sdk-coin-eth/src/eth.ts b/modules/sdk-coin-eth/src/eth.ts index 2ba3b225a2..b8356a8e4a 100644 --- a/modules/sdk-coin-eth/src/eth.ts +++ b/modules/sdk-coin-eth/src/eth.ts @@ -475,7 +475,8 @@ export class Eth extends AbstractEthLikeNewCoins { throw new Error('missing prv parameter to sign transaction'); } - params.recipients = txPrebuild.recipients || params.recipients; + params.recipients = + txPrebuild.recipients || (txPrebuild.txInfo?.recipients as Recipient[] | undefined) || params.recipients; // if no recipients in either params or txPrebuild, then throw an error if (!params.recipients || !Array.isArray(params.recipients)) { @@ -494,7 +495,7 @@ export class Eth extends AbstractEthLikeNewCoins { const secondsSinceEpoch = Math.floor(new Date().getTime() / 1000); const expireTime = params.expireTime || secondsSinceEpoch + EXPIRETIME_DEFAULT; - const sequenceId = txPrebuild.nextContractSequenceId; + const sequenceId = txPrebuild.nextContractSequenceId ?? txPrebuild.txInfo?.nextContractSequenceId; if (_.isUndefined(sequenceId)) { throw new Error('transaction prebuild missing required property nextContractSequenceId'); @@ -504,8 +505,8 @@ export class Eth extends AbstractEthLikeNewCoins { const signature = Util.ethSignMsgHash(operationHash, Util.xprvToEthPrivateKey(userPrv)); const txParams = { - eip1559: params.txPrebuild.eip1559, - isBatch: params.txPrebuild.isBatch, + eip1559: params.txPrebuild.eip1559 ?? params.txPrebuild.txInfo?.eip1559, + isBatch: params.txPrebuild.isBatch ?? params.txPrebuild.txInfo?.isBatch, recipients: params.recipients, expireTime: expireTime, contractSequenceId: sequenceId,