Skip to content

Commit b761d62

Browse files
refactor(account-lib): add msg builder for evm chains
TICKET: CGARD-273
1 parent 81d8ac4 commit b761d62

2 files changed

Lines changed: 41 additions & 19 deletions

File tree

modules/account-lib/src/index.ts

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -333,30 +333,18 @@ const coinBuilderMap = {
333333
};
334334

335335
const coinMessageBuilderFactoryMap = {
336-
eth: Eth.MessageBuilderFactory,
337-
hteth: Eth.MessageBuilderFactory,
338-
bsc: Bsc.MessageBuilderFactory,
339-
tbsc: Bsc.MessageBuilderFactory,
340336
ada: Ada.MessageBuilderFactory,
341337
tada: Ada.MessageBuilderFactory,
342338
sol: Sol.MessageBuilderFactory,
343339
tsol: Sol.MessageBuilderFactory,
344-
arbeth: Eth.MessageBuilderFactory,
345-
tarbeth: Eth.MessageBuilderFactory,
346-
opeth: Eth.MessageBuilderFactory,
347-
topeth: Eth.MessageBuilderFactory,
348-
baseeth: Eth.MessageBuilderFactory,
349-
tbaseeth: Eth.MessageBuilderFactory,
350-
polygon: Eth.MessageBuilderFactory,
351-
tpolygon: Eth.MessageBuilderFactory,
352-
seievm: Eth.MessageBuilderFactory,
353-
tseievm: Eth.MessageBuilderFactory,
354-
flr: Eth.MessageBuilderFactory,
355-
tflr: Eth.MessageBuilderFactory,
356-
mon: Eth.MessageBuilderFactory,
357-
tmon: Eth.MessageBuilderFactory,
358340
};
359341

342+
coins
343+
.filter((coin) => coin.features.includes(CoinFeature.SHARED_EVM_MESSAGE_SIGNING) && !coin.isToken)
344+
.forEach((coin) => {
345+
coinMessageBuilderFactoryMap[coin.name] = Eth.MessageBuilderFactory;
346+
});
347+
360348
coins
361349
.filter((coin) => coin.features.includes(CoinFeature.SHARED_EVM_SDK))
362350
.forEach((coin) => {

modules/account-lib/test/unit/messageFactory.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import should from 'should';
33
import sinon from 'sinon';
44
import { getMessageBuilderFactory, registerMessageBuilderFactory } from '../../src';
55
import { BaseMessageBuilderFactory, BuildMessageError } from '@bitgo/sdk-core';
6-
import { coins, BaseCoin } from '@bitgo/statics';
6+
import { coins, BaseCoin, CoinFeature } from '@bitgo/statics';
77
import { MockMessageBuilderFactory } from './fixtures';
88

99
describe('Message Builder Factory', () => {
@@ -30,6 +30,40 @@ describe('Message Builder Factory', () => {
3030
should.exist(htethFactory);
3131
htethFactory.should.be.instanceof(BaseMessageBuilderFactory);
3232
});
33+
34+
it('should auto-register all non-token coins with SHARED_EVM_MESSAGE_SIGNING feature', () => {
35+
const evmCoins = coins.reduce<string[]>((acc, coin) => {
36+
if (coin.features.includes(CoinFeature.SHARED_EVM_MESSAGE_SIGNING) && !coin.isToken) {
37+
acc.push(coin.name);
38+
}
39+
return acc;
40+
}, []);
41+
evmCoins.length.should.be.greaterThan(0);
42+
43+
for (const coinName of evmCoins) {
44+
const factory = getMessageBuilderFactory(coinName);
45+
should.exist(factory, `Expected message builder factory for ${coinName}`);
46+
factory.should.be.instanceof(BaseMessageBuilderFactory);
47+
}
48+
});
49+
50+
it('should not register token coins with SHARED_EVM_MESSAGE_SIGNING feature', () => {
51+
const evmTokens = coins.reduce<string[]>((acc, coin) => {
52+
if (coin.features.includes(CoinFeature.SHARED_EVM_MESSAGE_SIGNING) && coin.isToken) {
53+
acc.push(coin.name);
54+
}
55+
return acc;
56+
}, []);
57+
evmTokens.length.should.be.greaterThan(0);
58+
59+
for (const tokenName of evmTokens) {
60+
assert.throws(
61+
() => getMessageBuilderFactory(tokenName),
62+
(e: Error) => e instanceof BuildMessageError,
63+
`Token ${tokenName} should not have a message builder factory`,
64+
);
65+
}
66+
});
3367
});
3468

3569
describe('registerMessageBuilderFactory', () => {

0 commit comments

Comments
 (0)