diff --git a/modules/abstract-eth/src/abstractEthLikeNewCoins.ts b/modules/abstract-eth/src/abstractEthLikeNewCoins.ts index 3fd7fe1d58..eacc883580 100644 --- a/modules/abstract-eth/src/abstractEthLikeNewCoins.ts +++ b/modules/abstract-eth/src/abstractEthLikeNewCoins.ts @@ -2236,7 +2236,7 @@ export abstract class AbstractEthLikeNewCoins extends AbstractEthLikeCoin { * @param {string[]} paramsArr - The parameters to hash together for the digest * @returns {Buffer} */ - private static getHopDigest(paramsArr: string[]): Buffer { + static getHopDigest(paramsArr: string[]): Buffer { const hash = Keccak('keccak256'); hash.update([AbstractEthLikeNewCoins.hopTransactionSalt, ...paramsArr].join('$')); return hash.digest(); diff --git a/modules/sdk-coin-avaxc/src/avaxc.ts b/modules/sdk-coin-avaxc/src/avaxc.ts index 8a0d012fa7..d43da0956e 100644 --- a/modules/sdk-coin-avaxc/src/avaxc.ts +++ b/modules/sdk-coin-avaxc/src/avaxc.ts @@ -12,7 +12,7 @@ import { CoinFamily, coins, ethGasConfigs, - BaseNetwork, + EthereumNetwork, } from '@bitgo/statics'; import { BaseCoin, @@ -33,6 +33,7 @@ import { VerifyAddressOptions, } from '@bitgo/sdk-core'; import { + AbstractEthLikeNewCoins, GetSendMethodArgsOptions, optionalDeps, RecoverOptions, @@ -40,6 +41,7 @@ import { SendMethodArgs, TransactionBuilder as EthTransactionBuilder, TransactionPrebuild, + OfflineVaultTxInfo as AvaxcRecoveryOfflineVaultTxInfo, } from '@bitgo/sdk-coin-eth'; import { getToken, isValidEthAddress } from './lib/utils'; import { KeyPair as AvaxcKeyPair, TransactionBuilder } from './lib'; @@ -57,19 +59,25 @@ import { OfflineVaultTxInfo, PrecreateBitGoOptions, PresignTransactionOptions, - SignedTransaction, SignFinalOptions, VerifyAvaxcTransactionOptions, + SignedTransaction, } from './iface'; import { AvaxpLib } from '@bitgo/sdk-coin-avaxp'; +import { SignTransactionOptions } from '@bitgo/abstract-eth'; -export class AvaxC extends BaseCoin { +/** COIN-1708 : Avaxc is added for CCR in WRW, + * hence adding the feature for AbstractEthLikeNewCoins + * Super class changed from BaseCoin to AbstractEthLikeNewCoins + * @since Sept 2024 + */ +export class AvaxC extends AbstractEthLikeNewCoins { static hopTransactionSalt = 'bitgoHopAddressRequestSalt'; protected readonly _staticsCoin: Readonly; protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly) { - super(bitgo); + super(bitgo, staticsCoin); if (!staticsCoin) { throw new Error('missing required constructor parameter staticsCoin'); @@ -94,8 +102,8 @@ export class AvaxC extends BaseCoin { * Method to return the coin's network object * @returns {BaseNetwork} */ - getNetwork(): BaseNetwork { - return this._staticsCoin.network; + getNetwork(): EthereumNetwork { + return this._staticsCoin.network as EthereumNetwork; } /** @@ -544,7 +552,7 @@ export class AvaxC extends BaseCoin { * @param {string} params.recoveryDestination - target address to send recovered funds to * @returns {Promise} - recovery tx info */ - async recover(params: RecoverOptions): Promise { + async recover(params: RecoverOptions): Promise { if (_.isUndefined(params.userKey)) { throw new Error('missing userKey'); } @@ -578,6 +586,10 @@ export class AvaxC extends BaseCoin { throw new Error('invalid recoveryDestination'); } + if (params.bitgoFeeAddress) { + return this.recoverEthLikeforEvmBasedRecovery(params); + } + // TODO (BG-56531): add support for krs const isUnsignedSweep = getIsUnsignedSweep(params); @@ -990,7 +1002,7 @@ export class AvaxC extends BaseCoin { * Assemble half-sign prebuilt transaction * @param params */ - async signTransaction(params: AvaxSignTransactionOptions): Promise { + async signTransaction(params: AvaxSignTransactionOptions | SignTransactionOptions): Promise { // Normally the SDK provides the first signature for an AVAXC tx, // but for unsigned sweep recoveries it can provide the second and final one. if (params.isLastSignature) {