diff --git a/modules/abstract-utxo/src/abstractUtxoCoin.ts b/modules/abstract-utxo/src/abstractUtxoCoin.ts index ef46fb9b8c..38c90fb5bd 100644 --- a/modules/abstract-utxo/src/abstractUtxoCoin.ts +++ b/modules/abstract-utxo/src/abstractUtxoCoin.ts @@ -695,11 +695,6 @@ export abstract class AbstractUtxoCoin extends BaseCoin { return utxolib.bitgo.outputScripts.isSupportedScriptType(this.network, addressType); } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-algo/src/algo.ts b/modules/sdk-coin-algo/src/algo.ts index 5e1e514279..507432cfdf 100644 --- a/modules/sdk-coin-algo/src/algo.ts +++ b/modules/sdk-coin-algo/src/algo.ts @@ -594,11 +594,6 @@ export class Algo extends BaseCoin { return false; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-arbeth/src/arbeth.ts b/modules/sdk-coin-arbeth/src/arbeth.ts index f76c8c06a8..1495c74f0b 100644 --- a/modules/sdk-coin-arbeth/src/arbeth.ts +++ b/modules/sdk-coin-arbeth/src/arbeth.ts @@ -61,11 +61,6 @@ export class Arbeth extends AbstractEthLikeNewCoins { return userGasLimit; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.tss; diff --git a/modules/sdk-coin-avaxc/src/avaxc.ts b/modules/sdk-coin-avaxc/src/avaxc.ts index 5a4a3551e2..a3b4442c20 100644 --- a/modules/sdk-coin-avaxc/src/avaxc.ts +++ b/modules/sdk-coin-avaxc/src/avaxc.ts @@ -135,11 +135,6 @@ export class AvaxC extends AbstractEthLikeNewCoins { return false; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-avaxp/src/avaxp.ts b/modules/sdk-coin-avaxp/src/avaxp.ts index f88bfccd37..972ebd913d 100644 --- a/modules/sdk-coin-avaxp/src/avaxp.ts +++ b/modules/sdk-coin-avaxp/src/avaxp.ts @@ -60,11 +60,6 @@ export class AvaxP extends BaseCoin { return Math.pow(10, this._staticsCoin.decimalPlaces); } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-celo/src/celo.ts b/modules/sdk-coin-celo/src/celo.ts index 10f5e4ca75..f95de99365 100644 --- a/modules/sdk-coin-celo/src/celo.ts +++ b/modules/sdk-coin-celo/src/celo.ts @@ -25,11 +25,6 @@ export class Celo extends AbstractEthLikeCoin { return valid; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-cspr/src/cspr.ts b/modules/sdk-coin-cspr/src/cspr.ts index 09d33939f8..7a987c28bf 100644 --- a/modules/sdk-coin-cspr/src/cspr.ts +++ b/modules/sdk-coin-cspr/src/cspr.ts @@ -99,11 +99,6 @@ export class Cspr extends BaseCoin { return Math.pow(10, this._staticsCoin.decimalPlaces); } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-eos/src/eos.ts b/modules/sdk-coin-eos/src/eos.ts index fdcbeafb4e..e411258d78 100644 --- a/modules/sdk-coin-eos/src/eos.ts +++ b/modules/sdk-coin-eos/src/eos.ts @@ -232,11 +232,6 @@ export class Eos extends BaseCoin { return 4; } - /** {@inheritDoc } **/ - supportsMultisig() { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-etc/src/etc.ts b/modules/sdk-coin-etc/src/etc.ts index f528c215ff..50535de931 100644 --- a/modules/sdk-coin-etc/src/etc.ts +++ b/modules/sdk-coin-etc/src/etc.ts @@ -58,11 +58,6 @@ export class Etc extends AbstractEthLikeCoin { return valid; } - /** {@inheritDoc } **/ - supportsMultisig() { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-hbar/src/hbar.ts b/modules/sdk-coin-hbar/src/hbar.ts index 4fc05e52ff..26c8189e37 100644 --- a/modules/sdk-coin-hbar/src/hbar.ts +++ b/modules/sdk-coin-hbar/src/hbar.ts @@ -570,11 +570,6 @@ export class Hbar extends BaseCoin { return false; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-opeth/src/opeth.ts b/modules/sdk-coin-opeth/src/opeth.ts index cc94efb720..92eceb6107 100644 --- a/modules/sdk-coin-opeth/src/opeth.ts +++ b/modules/sdk-coin-opeth/src/opeth.ts @@ -61,11 +61,6 @@ export class Opeth extends AbstractEthLikeNewCoins { return userGasLimit; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.tss; diff --git a/modules/sdk-coin-rbtc/src/rbtc.ts b/modules/sdk-coin-rbtc/src/rbtc.ts index 2f68ceb72a..1cf0ca581c 100644 --- a/modules/sdk-coin-rbtc/src/rbtc.ts +++ b/modules/sdk-coin-rbtc/src/rbtc.ts @@ -22,11 +22,6 @@ export class Rbtc extends AbstractEthLikeCoin { return valid; } - /** {@inheritDoc } **/ - supportsMultisig() { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-stx/src/stx.ts b/modules/sdk-coin-stx/src/stx.ts index 2d35b83bc9..21e073a7d1 100644 --- a/modules/sdk-coin-stx/src/stx.ts +++ b/modules/sdk-coin-stx/src/stx.ts @@ -90,11 +90,6 @@ export class Stx extends BaseCoin { return new TransactionBuilderFactory(coinConfig).getTransferBuilder(); } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-trx/src/trx.ts b/modules/sdk-coin-trx/src/trx.ts index 4301e9a7cb..11b097eb5f 100644 --- a/modules/sdk-coin-trx/src/trx.ts +++ b/modules/sdk-coin-trx/src/trx.ts @@ -162,11 +162,6 @@ export class Trx extends BaseCoin { return true; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-xlm/src/xlm.ts b/modules/sdk-coin-xlm/src/xlm.ts index 89fc573d4e..4a29f403fb 100644 --- a/modules/sdk-coin-xlm/src/xlm.ts +++ b/modules/sdk-coin-xlm/src/xlm.ts @@ -299,11 +299,6 @@ export class Xlm extends BaseCoin { return false; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-xrp/src/xrp.ts b/modules/sdk-coin-xrp/src/xrp.ts index c8203d9972..5b2d8e1012 100644 --- a/modules/sdk-coin-xrp/src/xrp.ts +++ b/modules/sdk-coin-xrp/src/xrp.ts @@ -116,11 +116,6 @@ export class Xrp extends BaseCoin { return true; } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-xtz/src/xtz.ts b/modules/sdk-coin-xtz/src/xtz.ts index 67e54368a7..def3aab352 100644 --- a/modules/sdk-coin-xtz/src/xtz.ts +++ b/modules/sdk-coin-xtz/src/xtz.ts @@ -51,11 +51,6 @@ export class Xtz extends BaseCoin { return Math.pow(10, this._staticsCoin.decimalPlaces); } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-coin-zketh/src/zketh.ts b/modules/sdk-coin-zketh/src/zketh.ts index dc6d86512b..6d547ef1ef 100644 --- a/modules/sdk-coin-zketh/src/zketh.ts +++ b/modules/sdk-coin-zketh/src/zketh.ts @@ -33,11 +33,6 @@ export class Zketh extends AbstractEthLikeNewCoins { return await recoveryBlockchainExplorerQuery(query, explorerUrl as string); } - /** {@inheritDoc } **/ - supportsMultisig(): boolean { - return true; - } - /** inherited doc */ getDefaultMultisigType(): MultisigType { return multisigTypes.onchain; diff --git a/modules/sdk-core/src/bitgo/baseCoin/baseCoin.ts b/modules/sdk-core/src/bitgo/baseCoin/baseCoin.ts index 00f69c2cfa..de5a518f10 100644 --- a/modules/sdk-core/src/bitgo/baseCoin/baseCoin.ts +++ b/modules/sdk-core/src/bitgo/baseCoin/baseCoin.ts @@ -2,11 +2,11 @@ * @prettier */ import * as crypto from 'crypto'; +import { Hash } from 'crypto'; +import * as utxolib from '@bitgo/utxo-lib'; import { bip32 } from '@bitgo/utxo-lib'; import { BigNumber } from 'bignumber.js'; - -import * as utxolib from '@bitgo/utxo-lib'; -import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics'; +import { BaseCoin as StaticsBaseCoin, CoinFeature } from '@bitgo/statics'; import { InitiateRecoveryOptions } from '../recovery'; import { signMessage } from '../bip32util'; @@ -16,17 +16,22 @@ import { Enterprises } from '../enterprise'; import { Keychains, KeyIndices } from '../keychain'; import { Markets } from '../market'; import { PendingApprovals } from '../pendingApproval'; -import { Wallets, IWallet, Wallet } from '../wallet'; +import { IWallet, Wallet, Wallets } from '../wallet'; import { Webhooks } from '../webhook'; import { + BaseBroadcastTransactionOptions, + BaseBroadcastTransactionResult, + BuildNftTransferDataOptions, + DeriveKeyWithSeedOptions, ExtraPrebuildParamsOptions, FeeEstimateOptions, IBaseCoin, - ParsedTransaction, ITransactionExplanation, KeychainsTriplet, KeyPair, MPCAlgorithm, + MultisigType, + ParsedTransaction, ParseTransactionOptions, PrecreateBitGoOptions, PresignTransactionOptions, @@ -39,14 +44,8 @@ import { TransactionPrebuild, VerifyAddressOptions, VerifyTransactionOptions, - BuildNftTransferDataOptions, - BaseBroadcastTransactionOptions, - BaseBroadcastTransactionResult, - DeriveKeyWithSeedOptions, - MultisigType, } from './iBaseCoin'; import { IInscriptionBuilder } from '../inscriptionBuilder'; -import { Hash } from 'crypto'; import { MPCSweepRecoveryOptions, MPCTxs, PopulatedIntent, PrebuildTransactionWithIntentOptions } from '../utils'; export abstract class BaseCoin implements IBaseCoin { @@ -186,11 +185,13 @@ export abstract class BaseCoin implements IBaseCoin { } /** + * @deprecated use CoinFeature.MULTISIG from statics instead * Flag indicating if this coin supports MultiSig wallets. * @return {boolean} True if MultiSig wallets can be created for this coin */ supportsMultisig(): boolean { - return false; + // Use the static coin configuration to check if MULTISIG is supported + return this._staticsCoin.features.includes(CoinFeature.MULTISIG); } /** diff --git a/modules/statics/src/avaxp.ts b/modules/statics/src/avaxp.ts index 12c48cdd49..2253c236c1 100644 --- a/modules/statics/src/avaxp.ts +++ b/modules/statics/src/avaxp.ts @@ -22,6 +22,7 @@ export class AVAXPCoin extends BaseCoin { CoinFeature.CUSTODY_BITGO_GERMANY, CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.STAKING, ]; diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index 9a2df91ac6..32eac1b57c 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -363,6 +363,11 @@ export enum CoinFeature { * This coins is an EVM compatible coin and should use common EVM functionality */ SHARED_EVM_SIGNING = 'shared-evm-signing', + + /** + * This coin supports multisig wallets + */ + MULTISIG = 'multisig', } /** diff --git a/modules/statics/src/coinFeatures.ts b/modules/statics/src/coinFeatures.ts index 2541dec6f3..9fa8592b62 100644 --- a/modules/statics/src/coinFeatures.ts +++ b/modules/statics/src/coinFeatures.ts @@ -17,6 +17,7 @@ export const ETC_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_NEW_YORK, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, ]; export const EVM_FEATURES = [ ...ETH_FEATURES, @@ -35,6 +36,7 @@ export const AVAXC_FEATURES = [ CoinFeature.CUSTODY_BITGO_SWITZERLAND, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.EIP1559, ]; export const CELO_FEATURES = [ @@ -43,11 +45,13 @@ export const CELO_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.EIP1559, ]; export const RBTC_FEATURES = [ ...ETH_FEATURES, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.CUSTODY_BITGO_GERMANY, CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, @@ -60,10 +64,12 @@ export const XLM_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, ]; export const XTZ_FEATURES = [ ...AccountCoin.DEFAULT_FEATURES, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.ENTERPRISE_PAYS_FEES, ].filter( (feature) => @@ -81,6 +87,7 @@ export const XRP_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, ]; export const POLYGON_TOKEN_FEATURES_WITH_FRANKFURT = [ ...AccountCoin.DEFAULT_FEATURES, @@ -95,6 +102,7 @@ export const CSPR_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.STAKING, ]; export const ALGO_FEATURES = [ @@ -105,6 +113,7 @@ export const ALGO_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.BULK_TRANSACTION, ]; export const HTETH_TOKEN_FEATURES = [ @@ -131,6 +140,7 @@ export const EOS_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, ]; export const HBAR_FEATURES = [ ...AccountCoin.DEFAULT_FEATURES, @@ -139,6 +149,7 @@ export const HBAR_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.BULK_TRANSACTION, CoinFeature.ALPHANUMERIC_MEMO_ID, ]; @@ -197,6 +208,7 @@ export const STX_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.STAKING, CoinFeature.SUPPORTS_TOKENS, CoinFeature.ALPHANUMERIC_MEMO_ID, @@ -279,6 +291,7 @@ export const TRX_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.CUSTODY_BITGO_SINGAPORE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, ]; export const COSMOS_SIDECHAIN_FEATURES = [ ...AccountCoin.DEFAULT_FEATURES, @@ -342,6 +355,7 @@ export const ARBETH_FEATURES = [ CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.EIP1559, CoinFeature.WALLET_CONNECT_DEFI, + CoinFeature.MULTISIG, ]; export const OPETH_FEATURES = [ ...ETH_FEATURES, @@ -349,6 +363,7 @@ export const OPETH_FEATURES = [ CoinFeature.TSS_COLD, CoinFeature.MPCV2, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.EVM_WALLET, CoinFeature.USES_NON_PACKED_ENCODING_FOR_TXDATA, CoinFeature.ETH_ROLLUP_CHAIN, @@ -361,6 +376,7 @@ export const OPETH_FEATURES = [ export const ZKETH_FEATURES = [ ...ETH_FEATURES, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.EVM_WALLET, CoinFeature.USES_NON_PACKED_ENCODING_FOR_TXDATA, CoinFeature.ETH_ROLLUP_CHAIN, diff --git a/modules/statics/src/utxo.ts b/modules/statics/src/utxo.ts index 72427249b9..ec39314595 100644 --- a/modules/statics/src/utxo.ts +++ b/modules/statics/src/utxo.ts @@ -23,6 +23,7 @@ export class UtxoCoin extends BaseCoin { CoinFeature.CUSTODY_BITGO_MENA_FZE, CoinFeature.CUSTODY_BITGO_CUSTODY_MENA_FZE, CoinFeature.MULTISIG_COLD, + CoinFeature.MULTISIG, CoinFeature.PAYGO, ];