From 6651eb18b80065104fe36c98016acec7c3e30480 Mon Sep 17 00:00:00 2001 From: Manoj Kumar Date: Sun, 26 Jul 2026 23:45:24 +0530 Subject: [PATCH] feat(statics): add Pearl to statics Define Pearl (PEARL/TPEARL) coin identity in @bitgo/statics: CoinFamily, UnderlyingAsset, the Pearl/PearlTestnet network classes and the pearl and tpearl coin entries. Pearl is a taproot-only UTXO chain (btcd fork) using BIP-340 Schnorr signatures and BIP-341 script-path spending. It is backed by @bitgo/wasm-utxo, which has carried pearl and tpearl in CoinName since 4.27.0. No @bitgo/utxo-lib network is registered. Pearl is intended to be served through the wasm-utxo path, matching the wasm-only profile already used by ims-utxo, so utxolibName names the wasm CoinName rather than a utxo-lib network entry. TICKET: CECHO-1780 Co-Authored-By: Claude Opus 5 (1M context) --- modules/statics/src/base.ts | 2 ++ modules/statics/src/networks.ts | 16 +++++++++++ modules/statics/src/utxo.ts | 28 +++++++++++++++++++ .../unit/fixtures/expectedColdFeatures.ts | 2 ++ 4 files changed, 48 insertions(+) diff --git a/modules/statics/src/base.ts b/modules/statics/src/base.ts index 7739756262..1f2b445560 100644 --- a/modules/statics/src/base.ts +++ b/modules/statics/src/base.ts @@ -110,6 +110,7 @@ export enum CoinFamily { OPETH = 'opeth', OSMO = 'osmo', PLUME = 'plume', + PEARL = 'pearl', RBTC = 'rbtc', SCROLLETH = 'scrolleth', // Scroll L2 SGB = 'sgb', @@ -1684,6 +1685,7 @@ export enum UnderlyingAsset { PRDX = 'prdx', PRINTS = 'prints', PRISM = 'prism', + PEARL = 'pearl', PRO = 'pro', PROM = 'prom', PROS = 'pros', diff --git a/modules/statics/src/networks.ts b/modules/statics/src/networks.ts index daf6425e38..6468ea0a81 100644 --- a/modules/statics/src/networks.ts +++ b/modules/statics/src/networks.ts @@ -1431,6 +1431,20 @@ class ZCashTestnet extends Testnet implements UtxoNetwork { explorerUrl = 'https://testnet.zcashexplorer.app/transactions/'; } +class Pearl extends Mainnet implements UtxoNetwork { + name = 'Pearl'; + family = CoinFamily.PEARL; + utxolibName = 'pearl'; + explorerUrl = undefined; +} + +class PearlTestnet extends Testnet implements UtxoNetwork { + name = 'PearlTestnet'; + family = CoinFamily.PEARL; + utxolibName = 'tpearl'; + explorerUrl = undefined; +} + class Near extends Mainnet implements AccountNetwork { name = 'Near'; family = CoinFamily.NEAR; @@ -2953,6 +2967,7 @@ export const Networks = { plume: Object.freeze(new Plume()), polygon: Object.freeze(new Polygon()), polyx: Object.freeze(new Polymesh()), + pearl: Object.freeze(new Pearl()), phrs: Object.freeze(new Pharos()), ctc: Object.freeze(new Creditcoin()), hypeevm: Object.freeze(new HypeEVM()), @@ -3087,6 +3102,7 @@ export const Networks = { mantra: Object.freeze(new MantraTestnet()), polygon: Object.freeze(new PolygonTestnet()), polyx: Object.freeze(new PolymeshTestnet()), + pearl: Object.freeze(new PearlTestnet()), phrs: Object.freeze(new PharosTestnet()), ctc: Object.freeze(new CreditcoinTestnet()), hypeevm: Object.freeze(new HypeEVMTestnet()), diff --git a/modules/statics/src/utxo.ts b/modules/statics/src/utxo.ts index 18839830cb..f12dff65dc 100644 --- a/modules/statics/src/utxo.ts +++ b/modules/statics/src/utxo.ts @@ -143,6 +143,12 @@ const DOGE_FEATURES = [ const DASH_FEATURES = [...UtxoCoin.DEFAULT_FEATURES, CoinFeature.CUSTODY_BITGO_FRANKFURT, CoinFeature.BULK_TRANSACTION]; const TDASH_FEATURES = [...UtxoCoin.DEFAULT_FEATURES, CoinFeature.BULK_TRANSACTION]; const ZEC_FEATURES = [...UtxoCoin.DEFAULT_FEATURES, CoinFeature.BULK_TRANSACTION, CoinFeature.CUSTODY_BITGO_FRANKFURT]; +const PEARL_FEATURES = [ + ...UtxoCoin.DEFAULT_FEATURES, + CoinFeature.MULTISIG, + CoinFeature.BULK_TRANSACTION, + CoinFeature.DISTRIBUTED_CUSTODY, +]; export const utxoCoins: Readonly[] = [ utxo( '8d6e08d5-399f-414f-8430-6ceca1798cbf', @@ -320,6 +326,28 @@ export const utxoCoins: Readonly[] = [ BaseUnit.ZEC, ZEC_FEATURES ), + utxo( + '4518a5b9-00d3-476e-bc40-d3f87eb82250', + 'pearl', + 'Pearl', + Networks.main.pearl, + UnderlyingAsset.PEARL, + BaseUnit.BTC, + PEARL_FEATURES, + '', + 'PEARL' + ), + utxo( + '5d88723a-7e86-43c7-9fb1-f4cee7abc48f', + 'tpearl', + 'Testnet Pearl', + Networks.test.pearl, + UnderlyingAsset.PEARL, + BaseUnit.BTC, + PEARL_FEATURES, + '', + 'TPEARL' + ), utxo( 'c93a9160-458f-4a31-bea0-4a93ae8b1d2d', 'doge', diff --git a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts index b09d602aae..927ccba868 100644 --- a/modules/statics/test/unit/fixtures/expectedColdFeatures.ts +++ b/modules/statics/test/unit/fixtures/expectedColdFeatures.ts @@ -33,6 +33,7 @@ export const expectedColdFeatures = { 'etc', 'hbar', 'ltc', + 'pearl', 'rbtc', 'stx', 'talgo', @@ -53,6 +54,7 @@ export const expectedColdFeatures = { 'tetc', 'thbar', 'tltc', + 'tpearl', 'trbtc', 'tstx', 'txlm',