From a5e458382263b6d64a00f07efa7c1e448913f11c Mon Sep 17 00:00:00 2001 From: Kamlesh Mugdiya Date: Fri, 13 Feb 2026 15:47:23 +0530 Subject: [PATCH] refactor(account-lib): add msg builder for evm chains TICKET: CGARD-273 --- modules/account-lib/src/index.ts | 24 ++++--------- .../account-lib/test/unit/messageFactory.ts | 36 ++++++++++++++++++- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/modules/account-lib/src/index.ts b/modules/account-lib/src/index.ts index c70d173eaa..9e20042797 100644 --- a/modules/account-lib/src/index.ts +++ b/modules/account-lib/src/index.ts @@ -333,30 +333,18 @@ const coinBuilderMap = { }; const coinMessageBuilderFactoryMap = { - eth: Eth.MessageBuilderFactory, - hteth: Eth.MessageBuilderFactory, - bsc: Bsc.MessageBuilderFactory, - tbsc: Bsc.MessageBuilderFactory, ada: Ada.MessageBuilderFactory, tada: Ada.MessageBuilderFactory, sol: Sol.MessageBuilderFactory, tsol: Sol.MessageBuilderFactory, - arbeth: Eth.MessageBuilderFactory, - tarbeth: Eth.MessageBuilderFactory, - opeth: Eth.MessageBuilderFactory, - topeth: Eth.MessageBuilderFactory, - baseeth: Eth.MessageBuilderFactory, - tbaseeth: Eth.MessageBuilderFactory, - polygon: Eth.MessageBuilderFactory, - tpolygon: Eth.MessageBuilderFactory, - seievm: Eth.MessageBuilderFactory, - tseievm: Eth.MessageBuilderFactory, - flr: Eth.MessageBuilderFactory, - tflr: Eth.MessageBuilderFactory, - mon: Eth.MessageBuilderFactory, - tmon: Eth.MessageBuilderFactory, }; +coins + .filter((coin) => coin.features.includes(CoinFeature.SHARED_EVM_MESSAGE_SIGNING) && !coin.isToken) + .forEach((coin) => { + coinMessageBuilderFactoryMap[coin.name] = Eth.MessageBuilderFactory; + }); + coins .filter((coin) => coin.features.includes(CoinFeature.SHARED_EVM_SDK)) .forEach((coin) => { diff --git a/modules/account-lib/test/unit/messageFactory.ts b/modules/account-lib/test/unit/messageFactory.ts index afbf39543a..2b947f30ed 100644 --- a/modules/account-lib/test/unit/messageFactory.ts +++ b/modules/account-lib/test/unit/messageFactory.ts @@ -3,7 +3,7 @@ import should from 'should'; import sinon from 'sinon'; import { getMessageBuilderFactory, registerMessageBuilderFactory } from '../../src'; import { BaseMessageBuilderFactory, BuildMessageError } from '@bitgo/sdk-core'; -import { coins, BaseCoin } from '@bitgo/statics'; +import { coins, BaseCoin, CoinFeature } from '@bitgo/statics'; import { MockMessageBuilderFactory } from './fixtures'; describe('Message Builder Factory', () => { @@ -30,6 +30,40 @@ describe('Message Builder Factory', () => { should.exist(htethFactory); htethFactory.should.be.instanceof(BaseMessageBuilderFactory); }); + + it('should auto-register all non-token coins with SHARED_EVM_MESSAGE_SIGNING feature', () => { + const evmCoins = coins.reduce((acc, coin) => { + if (coin.features.includes(CoinFeature.SHARED_EVM_MESSAGE_SIGNING) && !coin.isToken) { + acc.push(coin.name); + } + return acc; + }, []); + evmCoins.length.should.be.greaterThan(0); + + for (const coinName of evmCoins) { + const factory = getMessageBuilderFactory(coinName); + should.exist(factory, `Expected message builder factory for ${coinName}`); + factory.should.be.instanceof(BaseMessageBuilderFactory); + } + }); + + it('should not register token coins with SHARED_EVM_MESSAGE_SIGNING feature', () => { + const evmTokens = coins.reduce((acc, coin) => { + if (coin.features.includes(CoinFeature.SHARED_EVM_MESSAGE_SIGNING) && coin.isToken) { + acc.push(coin.name); + } + return acc; + }, []); + evmTokens.length.should.be.greaterThan(0); + + for (const tokenName of evmTokens) { + assert.throws( + () => getMessageBuilderFactory(tokenName), + (e: Error) => e instanceof BuildMessageError, + `Token ${tokenName} should not have a message builder factory`, + ); + } + }); }); describe('registerMessageBuilderFactory', () => {