Skip to content

Commit f01a689

Browse files
committed
feat: added opBNB support
Ticket: COIN-6014 TICKET: COIN-6014
1 parent 326b0dc commit f01a689

File tree

8 files changed

+81
-0
lines changed

8 files changed

+81
-0
lines changed

modules/bitgo/src/v2/coinFactory.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,10 @@ export function registerCoinConstructors(coinFactory: CoinFactory, coinMap: Coin
259259
coinFactory.register('eth', Eth.createInstance);
260260
coinFactory.register('ethw', Ethw.createInstance);
261261
coinFactory.register('baseeth', EthLikeCoin.createInstance);
262+
coinFactory.register('opbnb', EthLikeCoin.createInstance);
262263
coinFactory.register('og', EthLikeCoin.createInstance);
263264
coinFactory.register('tog', EthLikeCoin.createInstance);
265+
coinFactory.register('topbnb', TethLikeCoin.createInstance);
264266
coinFactory.register('tbaseeth', TethLikeCoin.createInstance);
265267
coinFactory.register('fiataed', FiatAED.createInstance);
266268
coinFactory.register('fiateur', FiatEur.createInstance);
@@ -641,8 +643,12 @@ export function getCoinConstructor(coinName: string): CoinConstructor | undefine
641643
return Ethw.createInstance;
642644
case 'baseeth':
643645
return EthLikeCoin.createInstance;
646+
case 'opbnb':
647+
return EthLikeCoin.createInstance;
644648
case 'tbaseeth':
645649
return TethLikeCoin.createInstance;
650+
case 'topbnb':
651+
return TethLikeCoin.createInstance;
646652
case 'fiataed':
647653
return FiatAED.createInstance;
648654
case 'fiateur':
@@ -993,6 +999,10 @@ export function getTokenConstructor(tokenConfig: TokenConfig): CoinConstructor |
993999
case 'tbaseeth':
9941000
const coinNames = { Mainnet: 'baseeth', Testnet: 'tbaseeth' };
9951001
return EthLikeErc20Token.createTokenConstructor(tokenConfig as EthLikeTokenConfig, coinNames);
1002+
case 'opbnb':
1003+
case 'topbnb':
1004+
const opbnbCoinNames = { Mainnet: 'opbnb', Testnet: 'topbnb' };
1005+
return EthLikeErc20Token.createTokenConstructor(tokenConfig as EthLikeTokenConfig, opbnbCoinNames);
9961006
case 'coredao':
9971007
case 'tcoredao':
9981008
return CoredaoToken.createTokenConstructor(tokenConfig as EthLikeTokenConfig);

modules/sdk-coin-ethlike/test/fixtures/ethlikeCoin.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ export const ccr = {
7070
'0x02f9019683014a3402850ba43b740085746a5288008307a1209412fdf58540285273f9ddee9eac6f566418d6e7ac80b9016439125215000000000000000000000000b9f62c71d5f6949cfb211a67fb13ccf079cc760b00000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000066cc72e2000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410eddb08026d2d5ba942ed77d4caef5bf3c3d7b4282bd4d2defcbc9c113c5f9af10d803b211fc0ea8b16263a614444abfc5d20dea24db28b833c0e15063400c411c00000000000000000000000000000000000000000000000000000000000000c0808080',
7171
txid: '0x663729bbb68b7638a7a58194e69546d64bb5536422f30557ef0118028317f3a8',
7272
},
73+
topbnb: {
74+
txHex:
75+
'0x02f901d38215eb01843b9aca00843b9aca00830186a0948ce59c2d1702844f8eded451aa103961bc37b4e880b90164391252150000000000000000000000002c2b9c9a4a25e24b174f26114e8926a9f2128fe40000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000006939c792000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041833fbbdb8457ee22924b2ad59becbd1629481ca2bf10b9c66dba45e6fbd8fe1f62fc94c6a3a0a8915abe7df7ce9cf2b3d43b0e46f539d11f00cbe9c5aa2dfbe71c00000000000000000000000000000000000000000000000000000000000000c080a05614c8ae83fee9c0d95334114103aa4fee94f574dd55497f41f532d98ce95100a0102dbe65dcd4034fbf2c2e997758180f15e8c626fb9df4f1695a7fa01dbb376e',
76+
txid: '0x48052a9408a20f317b938dbcd7c30c6019c19571ed07ded11853bae9f16493fd',
77+
},
7378
};
7479
export const encryptedUserKey =
7580
'{"iv":"VFZ3jvXhxo1Z+Yaf2MtZnA==","v":1,"iter":10000,"ks":256,"ts":64,"mode"\n' +
@@ -94,4 +99,12 @@ export const custodialHot = {
9499
signedTxHex:
95100
'0xf9016b80830186a082520894702cf81e03aa310ec9481d814e3d04a20b04b50580b901440dcd7a6c000000000000000000000000b9f62c71d5f6949cfb211a67fb13ccf079cc760b0000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000e4ab69c077896252fafbd49efd26b5d171a324100000000000000000000000000000000000000000000000000000000067f415e1000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000041a9c3ead37547fa56b694e4eccc9352225b7458ef08e4e961ca5774d398abd55b5986a7446259374d2098012923583935189739f18dd117c4d15221b2a26f50911c00000000000000000000000000000000000000000000000000000000000000830cddff8080',
96101
},
102+
topbnb: {
103+
signatureData:
104+
'0dcd7a6c00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000b9f62c71d5f6949cfb211a67fb13ccf079cc760b0000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000e4ab69c077896252fafbd49efd26b5d171a324100000000000000000000000000000000000000000000000000000000067f415e10000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000a353631312d45524332300000000000000000000000000000000000000000000000',
105+
signature:
106+
'0xa9c3ead37547fa56b694e4eccc9352225b7458ef08e4e961ca5774d398abd55b5986a7446259374d2098012923583935189739f18dd117c4d15221b2a26f50911c',
107+
signedTxHex:
108+
'0xf9016a80830186a082520894702cf81e03aa310ec9481d814e3d04a20b04b50580b901440dcd7a6c000000000000000000000000b9f62c71d5f6949cfb211a67fb13ccf079cc760b0000000000000000000000000000000000000000000000000000000005f5e100000000000000000000000000e4ab69c077896252fafbd49efd26b5d171a324100000000000000000000000000000000000000000000000000000000067f415e1000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000041a9c3ead37547fa56b694e4eccc9352225b7458ef08e4e961ca5774d398abd55b5986a7446259374d2098012923583935189739f18dd117c4d15221b2a26f50911c00000000000000000000000000000000000000000000000000000000000000822bf98080',
109+
},
97110
};

modules/sdk-coin-ethlike/test/unit/ethlikeCoin.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ const coins = [
2222
name: 'tarbeth',
2323
common: getCommon('tarbeth'),
2424
},
25+
{
26+
name: 'topbnb',
27+
common: getCommon('topbnb'),
28+
},
2529
];
2630

2731
describe('EthLike coin tests', function () {

modules/sdk-core/src/bitgo/environments.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,10 @@ const mainnetBase: EnvironmentTemplate = {
261261
baseeth: {
262262
baseUrl: 'https://api.etherscan.io/v2',
263263
},
264+
opbnb: {
265+
baseUrl: 'https://api.etherscan.io/v2',
266+
apiToken: process.env.ETHERSCAN_API_TOKEN,
267+
},
264268
flow: {
265269
baseUrl: 'https://evm.flowscan.io',
266270
},
@@ -420,6 +424,10 @@ const testnetBase: EnvironmentTemplate = {
420424
tbaseeth: {
421425
baseUrl: 'https://api.etherscan.io/v2',
422426
},
427+
topbnb: {
428+
baseUrl: 'https://api.etherscan.io/v2',
429+
apiToken: process.env.ETHERSCAN_API_TOKEN,
430+
},
423431
flow: {
424432
baseUrl: 'https://evm-testnet.flowscan.io',
425433
},

modules/statics/src/allCoinsAndTokens.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,26 @@ export const allCoinsAndTokens = [
427427
'',
428428
'BaseETH'
429429
),
430+
account(
431+
'2b5c52f8-0d0c-4a17-8052-d56373f5d264',
432+
'topbnb',
433+
'opBNB Testnet',
434+
Networks.test.opbnb,
435+
18,
436+
UnderlyingAsset.OPBNB,
437+
BaseUnit.ETH,
438+
[...ETH_FEATURES, CoinFeature.USES_NON_PACKED_ENCODING_FOR_TXDATA, CoinFeature.EIP1559]
439+
),
440+
account(
441+
'1588f6da-8e43-4535-8e1c-25e53788437b',
442+
'opbnb',
443+
'opBNB Mainnet',
444+
Networks.main.opbnb,
445+
18,
446+
UnderlyingAsset.OPBNB,
447+
BaseUnit.ETH,
448+
[...ETH_FEATURES, CoinFeature.USES_NON_PACKED_ENCODING_FOR_TXDATA, CoinFeature.EIP1559]
449+
),
430450
account(
431451
'ffc472f5-27c6-49f8-ad9a-f57659258fb9',
432452
'etc',

modules/statics/src/base.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ export enum CoinFamily {
8888
OAS = 'oas',
8989
OFC = 'ofc',
9090
OG = 'og',
91+
OPBNB = 'opbnb', // opBNB Chain
9192
OKB = 'okb',
9293
OPETH = 'opeth',
9394
OSMO = 'osmo',
@@ -597,6 +598,7 @@ export enum UnderlyingAsset {
597598
OAS = 'oas',
598599
OG = 'og',
599600
OKB = 'okb',
601+
OPBNB = 'opbnb', // opBNB Chain
600602
OPETH = 'opeth',
601603
OSMO = 'osmo',
602604
XPL = 'xpl', // Plasma Network

modules/statics/src/networks.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,26 @@ class BinanceSmartChainTestnet extends Testnet implements EthereumNetwork {
378378
batcherContractAddress = '0x3e1e5d78e44f15593b3b61ed278f12c27f0ff33e';
379379
}
380380

381+
class OpBNB extends Mainnet implements EthereumNetwork {
382+
name = 'OpBNB';
383+
family = CoinFamily.OPBNB;
384+
explorerUrl = 'https://opbnbscan.com/tx/';
385+
accountExplorerUrl = 'https://opbnbscan.com/address/';
386+
chainId = 204;
387+
nativeCoinOperationHashPrefix = '204';
388+
tokenOperationHashPrefix = '204-ERC20';
389+
}
390+
391+
class OpBNBTestnet extends Testnet implements EthereumNetwork {
392+
name = 'OpBNBTestnet';
393+
family = CoinFamily.OPBNB;
394+
explorerUrl = 'https://testnet.opbnbscan.com/tx/';
395+
accountExplorerUrl = 'https://testnet.opbnbscan.com/address/';
396+
chainId = 5611;
397+
nativeCoinOperationHashPrefix = '5611';
398+
tokenOperationHashPrefix = '5611-ERC20';
399+
}
400+
381401
class LightningBitcoin extends Mainnet implements LightningNetwork {
382402
name = 'LightningBitcoin';
383403
family = CoinFamily.LNBTC;
@@ -2253,6 +2273,7 @@ export const Networks = {
22532273
og: Object.freeze(new Og()),
22542274
ofc: Object.freeze(new Ofc()),
22552275
okb: Object.freeze(new Xlayer()),
2276+
opbnb: Object.freeze(new OpBNB()),
22562277
morph: Object.freeze(new Morph()),
22572278
optimism: Object.freeze(new Optimism()),
22582279
osmo: Object.freeze(new Osmo()),
@@ -2360,6 +2381,7 @@ export const Networks = {
23602381
og: Object.freeze(new OgTestnet()),
23612382
ofc: Object.freeze(new OfcTestnet()),
23622383
okb: Object.freeze(new XlayerTestnet()),
2384+
opbnb: Object.freeze(new OpBNBTestnet()),
23632385
morph: Object.freeze(new MorphTestnet()),
23642386
optimism: Object.freeze(new OptimismTestnet()),
23652387
osmo: Object.freeze(new OsmoTestnet()),

modules/statics/test/unit/fixtures/expectedColdFeatures.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ export const expectedColdFeatures = {
202202
],
203203
neither: [
204204
'ethw',
205+
'opbnb',
206+
'topbnb',
205207
'fiataed',
206208
'fiateur',
207209
'fiatgbp',

0 commit comments

Comments
 (0)