Skip to content

Commit 6802d86

Browse files
Merge pull request #273 from BitGo/BTC-0.add-regtest
feat(wasm-utxo): add Bitcoin Regtest network support
2 parents 25fba86 + 48e7d64 commit 6802d86

10 files changed

Lines changed: 41 additions & 7 deletions

File tree

packages/wasm-utxo/js/coinName.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export const coinNames = [
55
"tbtc4",
66
"tbtcsig",
77
"tbtcbgsig",
8+
"tbtcreg",
89
"bch",
910
"tbch",
1011
"bcha",
@@ -31,6 +32,7 @@ export function getMainnet(name: CoinName): CoinName {
3132
case "tbtc4":
3233
case "tbtcsig":
3334
case "tbtcbgsig":
35+
case "tbtcreg":
3436
return "btc";
3537
case "tbch":
3638
return "bch";
@@ -80,6 +82,8 @@ export function toCoinName(name: CoinName | UtxolibName): CoinName {
8082
return "tbtcsig";
8183
case "bitcoinBitGoSignet":
8284
return "tbtcbgsig";
85+
case "bitcoinRegtest":
86+
return "tbtcreg";
8387
case "bitcoincash":
8488
return "bch";
8589
case "bitcoincashTestnet":

packages/wasm-utxo/js/utxolibCompat.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export type UtxolibName =
77
| "bitcoinTestnet4"
88
| "bitcoinPublicSignet"
99
| "bitcoinBitGoSignet"
10+
| "bitcoinRegtest"
1011
| "bitcoincash"
1112
| "bitcoincashTestnet"
1213
| "ecash"

packages/wasm-utxo/src/address/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ pub const BITCOIN_BECH32: Bech32Codec = Bech32Codec::new("bc");
107107

108108
pub const TESTNET: Base58CheckCodec = Base58CheckCodec::new(0x6f, 0xc4);
109109
pub const TESTNET_BECH32: Bech32Codec = Bech32Codec::new("tb");
110+
pub const REGTEST: Base58CheckCodec = Base58CheckCodec::new(0x6f, 0xc4);
111+
pub const REGTEST_BECH32: Bech32Codec = Bech32Codec::new("bcrt");
110112

111113
// Bitcoin Cash (Base58Check)
112114
// https://github.com/bitcoin-cash-node/bitcoin-cash-node/blob/master/src/validation.cpp

packages/wasm-utxo/src/address/networks.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use super::{
1010
BITCOIN_CASH_TESTNET_CASHADDR, BITCOIN_GOLD, BITCOIN_GOLD_BECH32, BITCOIN_GOLD_TESTNET,
1111
BITCOIN_GOLD_TESTNET_BECH32, BITCOIN_SV, BITCOIN_SV_TESTNET, DASH, DASH_TEST, DOGECOIN,
1212
DOGECOIN_TEST, ECASH, ECASH_CASHADDR, ECASH_TEST, ECASH_TEST_CASHADDR, LITECOIN,
13-
LITECOIN_BECH32, LITECOIN_TEST, LITECOIN_TEST_BECH32, TESTNET, TESTNET_BECH32, ZCASH,
14-
ZCASH_TEST,
13+
LITECOIN_BECH32, LITECOIN_TEST, LITECOIN_TEST_BECH32, REGTEST, REGTEST_BECH32, TESTNET,
14+
TESTNET_BECH32, ZCASH, ZCASH_TEST,
1515
};
1616
use crate::bitcoin::Script;
1717
use crate::fixed_script_wallet::wallet_scripts::OutputScriptType;
@@ -29,6 +29,7 @@ fn get_decode_codecs(network: Network) -> Vec<&'static dyn AddressCodec> {
2929
| Network::BitcoinBitGoSignet => {
3030
vec![&TESTNET, &TESTNET_BECH32]
3131
}
32+
Network::BitcoinRegtest => vec![&REGTEST, &REGTEST_BECH32],
3233
Network::BitcoinCash => vec![&BITCOIN_CASH, &BITCOIN_CASH_CASHADDR],
3334
Network::BitcoinCashTestnet => vec![&BITCOIN_CASH_TESTNET, &BITCOIN_CASH_TESTNET_CASHADDR],
3435
Network::Ecash => vec![&ECASH, &ECASH_CASHADDR],
@@ -247,6 +248,13 @@ fn get_encode_codec(
247248
Ok(&TESTNET)
248249
}
249250
}
251+
Network::BitcoinRegtest => {
252+
if is_witness {
253+
Ok(&REGTEST_BECH32)
254+
} else {
255+
Ok(&REGTEST)
256+
}
257+
}
250258
Network::BitcoinCash => Ok(&BITCOIN_CASH),
251259
Network::BitcoinCashTestnet => Ok(&BITCOIN_CASH_TESTNET),
252260
Network::Ecash => Ok(&ECASH),

packages/wasm-utxo/src/fixed_script_wallet/bitgo_psbt/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ impl BitGoPsbt {
340340
| Network::BitcoinTestnet4
341341
| Network::BitcoinPublicSignet
342342
| Network::BitcoinBitGoSignet
343+
| Network::BitcoinRegtest
343344
| Network::BitcoinCash
344345
| Network::BitcoinCashTestnet
345346
| Network::Ecash

packages/wasm-utxo/src/networks.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub enum Network {
1313
BitcoinTestnet4,
1414
BitcoinPublicSignet,
1515
BitcoinBitGoSignet,
16+
BitcoinRegtest,
1617

1718
// https://github.com/bitcoin-cash-node/bitcoin-cash-node/blob/master/src/validation.cpp
1819
// https://github.com/bitcoin-cash-node/bitcoin-cash-node/blob/master/src/chainparams.cpp
@@ -63,6 +64,7 @@ impl Network {
6364
Network::BitcoinTestnet4,
6465
Network::BitcoinPublicSignet,
6566
Network::BitcoinBitGoSignet,
67+
Network::BitcoinRegtest,
6668
Network::BitcoinCash,
6769
Network::BitcoinCashTestnet,
6870
Network::Ecash,
@@ -89,6 +91,7 @@ impl Network {
8991
Network::BitcoinTestnet4 => "BitcoinTestnet4",
9092
Network::BitcoinPublicSignet => "BitcoinPublicSignet",
9193
Network::BitcoinBitGoSignet => "BitcoinBitGoSignet",
94+
Network::BitcoinRegtest => "BitcoinRegtest",
9295
Network::BitcoinCash => "BitcoinCash",
9396
Network::BitcoinCashTestnet => "BitcoinCashTestnet",
9497
Network::Ecash => "Ecash",
@@ -115,6 +118,7 @@ impl Network {
115118
"BitcoinTestnet4" => Some(Network::BitcoinTestnet4),
116119
"BitcoinPublicSignet" => Some(Network::BitcoinPublicSignet),
117120
"BitcoinBitGoSignet" => Some(Network::BitcoinBitGoSignet),
121+
"BitcoinRegtest" => Some(Network::BitcoinRegtest),
118122

119123
"BitcoinCash" => Some(Network::BitcoinCash),
120124
"BitcoinCashTestnet" => Some(Network::BitcoinCashTestnet),
@@ -154,6 +158,7 @@ impl Network {
154158
"bitcoinPublicSignet" => Some(Network::BitcoinPublicSignet),
155159
"bitcoinTestnet4" => Some(Network::BitcoinTestnet4),
156160
"bitcoinBitGoSignet" => Some(Network::BitcoinBitGoSignet),
161+
"bitcoinRegtest" => Some(Network::BitcoinRegtest),
157162
"bitcoincash" => Some(Network::BitcoinCash),
158163
"bitcoincashTestnet" => Some(Network::BitcoinCashTestnet),
159164
"ecash" => Some(Network::Ecash),
@@ -181,6 +186,7 @@ impl Network {
181186
Network::BitcoinTestnet4 => "bitcoinTestnet4",
182187
Network::BitcoinPublicSignet => "bitcoinPublicSignet",
183188
Network::BitcoinBitGoSignet => "bitcoinBitGoSignet",
189+
Network::BitcoinRegtest => "bitcoinRegtest",
184190
Network::BitcoinCash => "bitcoincash",
185191
Network::BitcoinCashTestnet => "bitcoincashTestnet",
186192
Network::Ecash => "ecash",
@@ -208,6 +214,7 @@ impl Network {
208214
"tbtc4" => Some(Network::BitcoinTestnet4),
209215
"tbtcsig" => Some(Network::BitcoinPublicSignet),
210216
"tbtcbgsig" => Some(Network::BitcoinBitGoSignet),
217+
"tbtcreg" => Some(Network::BitcoinRegtest),
211218
"bch" => Some(Network::BitcoinCash),
212219
"tbch" => Some(Network::BitcoinCashTestnet),
213220
"bcha" => Some(Network::Ecash),
@@ -236,6 +243,7 @@ impl Network {
236243
Network::BitcoinTestnet4 => "tbtc4",
237244
Network::BitcoinPublicSignet => "tbtcsig",
238245
Network::BitcoinBitGoSignet => "tbtcbgsig",
246+
Network::BitcoinRegtest => "tbtcreg",
239247
Network::BitcoinCash => "bch",
240248
Network::BitcoinCashTestnet => "tbch",
241249
Network::Ecash => "bcha",
@@ -261,7 +269,8 @@ impl Network {
261269
| Network::BitcoinTestnet3
262270
| Network::BitcoinTestnet4
263271
| Network::BitcoinPublicSignet
264-
| Network::BitcoinBitGoSignet => Network::Bitcoin,
272+
| Network::BitcoinBitGoSignet
273+
| Network::BitcoinRegtest => Network::Bitcoin,
265274

266275
Network::BitcoinCash => Network::BitcoinCash,
267276
Network::BitcoinCashTestnet => Network::BitcoinCash,
@@ -306,6 +315,7 @@ impl Network {
306315
Network::BitcoinTestnet4 => BitcoinNetwork::Testnet,
307316
Network::BitcoinPublicSignet => BitcoinNetwork::Signet,
308317
Network::BitcoinBitGoSignet => BitcoinNetwork::Signet,
318+
Network::BitcoinRegtest => BitcoinNetwork::Regtest,
309319
// Non-Bitcoin networks - use Bitcoin mainnet/testnet based on whether they're mainnet
310320
_ => {
311321
if self.is_mainnet() {
@@ -381,7 +391,7 @@ mod tests {
381391
#[test]
382392
fn test_all_networks() {
383393
// Verify ALL contains all networks
384-
assert_eq!(Network::ALL.len(), 21);
394+
assert_eq!(Network::ALL.len(), 22);
385395

386396
// Verify no duplicates
387397
for (i, network1) in Network::ALL.iter().enumerate() {

packages/wasm-utxo/src/wasm/psbt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ mod tests {
10371037
#[test]
10381038
fn test_all_networks_macro_is_complete() {
10391039
const _: () = assert!(
1040-
Network::ALL.len() == 21,
1040+
Network::ALL.len() == 22,
10411041
"test_all_networks! macro is out of sync with Network::ALL"
10421042
);
10431043
}

packages/wasm-utxo/test/address/compatibility.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const legacyGroups: CoinName[][] = [
4646
["dash"],
4747
["doge"],
4848
["ltc"],
49-
["tbch", "tbcha", "tbsv", "tbtc", "tbtc4", "tbtcbgsig", "tbtcsig", "tbtg", "tdoge"],
49+
["tbch", "tbcha", "tbsv", "tbtc", "tbtc4", "tbtcbgsig", "tbtcreg", "tbtcsig", "tbtg", "tdoge"],
5050
["tdash"],
5151
["tltc"],
5252
["tzec"],
@@ -58,11 +58,16 @@ const segwitGroups: CoinName[][] = [
5858
["btg"],
5959
["ltc"],
6060
["tbtc", "tbtc4", "tbtcbgsig", "tbtcsig"],
61+
["tbtcreg"],
6162
["tbtg"],
6263
["tltc"],
6364
];
6465

65-
const taprootGroups: CoinName[][] = [["btc"], ["tbtc", "tbtc4", "tbtcbgsig", "tbtcsig"]];
66+
const taprootGroups: CoinName[][] = [
67+
["btc"],
68+
["tbtc", "tbtc4", "tbtcbgsig", "tbtcsig"],
69+
["tbtcreg"],
70+
];
6671

6772
describe("address compatibility", function () {
6873
it("p2sh: btc/bch/bcha/bsv share mainnet format, most testnets share testnet format", function () {

packages/webui/src/wasm-utxo/addresses/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const ALL_COINS: CoinName[] = [
1919
"tbtc4",
2020
"tbtcsig",
2121
"tbtcbgsig",
22+
"tbtcreg",
2223
"bch",
2324
"tbch",
2425
"bcha",
@@ -47,6 +48,7 @@ const COIN_NAMES: Record<CoinName, string> = {
4748
tbtc4: "Bitcoin Testnet4",
4849
tbtcsig: "Bitcoin Signet",
4950
tbtcbgsig: "Bitcoin BitGo Signet",
51+
tbtcreg: "Bitcoin Regtest",
5052
bch: "Bitcoin Cash",
5153
tbch: "Bitcoin Cash Testnet",
5254
bcha: "eCash",

packages/webui/src/wasm-utxo/parser/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const networkLabels: Record<CoinName, string> = {
3636
tbtc4: "Bitcoin Testnet4",
3737
tbtcsig: "Bitcoin Signet",
3838
tbtcbgsig: "Bitcoin BitGo Signet",
39+
tbtcreg: "Bitcoin Regtest",
3940
ltc: "Litecoin",
4041
tltc: "Litecoin Testnet",
4142
bch: "Bitcoin Cash",

0 commit comments

Comments
 (0)