From 8c7f383e9aa8f0cee99562e2126a802b74447d78 Mon Sep 17 00:00:00 2001 From: Jakub Matys Date: Tue, 2 Oct 2018 17:02:57 +0200 Subject: [PATCH] Explicit registration of network parameters + cleanup in tests --- bchain/coins/bch/bcashparser.go | 38 ++++++++++++++++---- bchain/coins/bch/bcashparser_test.go | 9 +++++ bchain/coins/btc/bitcoinparser.go | 3 ++ bchain/coins/btc/bitcoinparser_test.go | 9 +++++ bchain/coins/btg/bgoldparser.go | 20 +++++------ bchain/coins/btg/bgoldparser_test.go | 9 +++++ bchain/coins/dash/dashparser.go | 26 +++++++------- bchain/coins/dogecoin/dogecoinparser.go | 14 ++++---- bchain/coins/dogecoin/dogecoinparser_test.go | 9 +++++ bchain/coins/litecoin/litecoinparser.go | 23 ++++++------ bchain/coins/litecoin/litecoinparser_test.go | 25 +++++++++++-- bchain/coins/monacoin/monacoinparser.go | 20 +++++------ bchain/coins/monacoin/monacoinparser_test.go | 9 +++++ bchain/coins/namecoin/namecoinparser.go | 14 ++++---- bchain/coins/namecoin/namecoinparser_test.go | 9 +++++ bchain/coins/vertcoin/vertcoinparser.go | 20 +++++------ bchain/coins/vertcoin/vertcoinparser_test.go | 9 +++++ bchain/coins/zec/zcashparser.go | 28 ++++++++------- bchain/coins/zec/zcashparser_test.go | 9 +++++ db/rocksdb_test.go | 7 ++++ 20 files changed, 216 insertions(+), 94 deletions(-) diff --git a/bchain/coins/bch/bcashparser.go b/bchain/coins/bch/bcashparser.go index 1348619d..033af920 100644 --- a/bchain/coins/bch/bcashparser.go +++ b/bchain/coins/bch/bcashparser.go @@ -25,6 +25,23 @@ const ( RegTestPrefix = "bchreg:" ) +var ( + MainNetParams chaincfg.Params + TestNetParams chaincfg.Params + RegtestParams chaincfg.Params +) + +func init() { + MainNetParams = chaincfg.MainNetParams + MainNetParams.Net = bchutil.MainnetMagic + + TestNetParams = chaincfg.TestNet3Params + TestNetParams.Net = bchutil.TestnetMagic + + RegtestParams = chaincfg.RegressionNetParams + RegtestParams.Net = bchutil.Regtestmagic +} + // BCashParser handle type BCashParser struct { *btc.BitcoinParser @@ -62,17 +79,26 @@ func NewBCashParser(params *chaincfg.Params, c *btc.Configuration) (*BCashParser // the regression test Bitcoin Cash network, the test Bitcoin Cash network and // the simulation test Bitcoin Cash network, in this order func GetChainParams(chain string) *chaincfg.Params { + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err == nil { + err = chaincfg.Register(&TestNetParams) + } + if err == nil { + err = chaincfg.Register(&RegtestParams) + } + if err != nil { + panic(err) + } + } var params *chaincfg.Params switch chain { case "test": - params = &chaincfg.TestNet3Params - params.Net = bchutil.TestnetMagic + return &TestNetParams case "regtest": - params = &chaincfg.RegressionNetParams - params.Net = bchutil.Regtestmagic + return &RegtestParams default: - params = &chaincfg.MainNetParams - params.Net = bchutil.MainnetMagic + return &MainNetParams } return params diff --git a/bchain/coins/bch/bcashparser_test.go b/bchain/coins/bch/bcashparser_test.go index 71464b57..b349911c 100644 --- a/bchain/coins/bch/bcashparser_test.go +++ b/bchain/coins/bch/bcashparser_test.go @@ -7,10 +7,19 @@ import ( "blockbook/bchain/coins/btc" "encoding/hex" "math/big" + "os" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func Test_GetAddrDescFromAddress(t *testing.T) { mainParserCashAddr, mainParserLegacy, testParserCashAddr, _ := setupParsers(t) tests := []struct { diff --git a/bchain/coins/btc/bitcoinparser.go b/bchain/coins/btc/bitcoinparser.go index 41f9f2ad..cb27442e 100644 --- a/bchain/coins/btc/bitcoinparser.go +++ b/bchain/coins/btc/bitcoinparser.go @@ -42,6 +42,9 @@ func NewBitcoinParser(params *chaincfg.Params, c *Configuration) *BitcoinParser // the regression test Bitcoin network, the test Bitcoin network and // the simulation test Bitcoin network, in this order func GetChainParams(chain string) *chaincfg.Params { + if !chaincfg.IsRegistered(&chaincfg.MainNetParams) { + chaincfg.RegisterBitcoinParams() + } switch chain { case "test": return &chaincfg.TestNet3Params diff --git a/bchain/coins/btc/bitcoinparser_test.go b/bchain/coins/btc/bitcoinparser_test.go index 80245180..eef8b02c 100644 --- a/bchain/coins/btc/bitcoinparser_test.go +++ b/bchain/coins/btc/bitcoinparser_test.go @@ -6,10 +6,19 @@ import ( "blockbook/bchain" "encoding/hex" "math/big" + "os" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func Test_GetAddrDescFromAddress(t *testing.T) { type args struct { address string diff --git a/bchain/coins/btg/bgoldparser.go b/bchain/coins/btg/bgoldparser.go index 1e87aa93..a2a06127 100644 --- a/bchain/coins/btg/bgoldparser.go +++ b/bchain/coins/btg/bgoldparser.go @@ -23,7 +23,7 @@ var ( TestNetParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic @@ -39,14 +39,6 @@ func initParams() { // see https://github.com/satoshilabs/slips/blob/master/slip-0173.md MainNetParams.Bech32HRPSegwit = "btg" TestNetParams.Bech32HRPSegwit = "tbtg" - - err := chaincfg.Register(&MainNetParams) - if err == nil { - err = chaincfg.Register(&TestNetParams) - } - if err != nil { - panic(err) - } } // BGoldParser handle @@ -63,8 +55,14 @@ func NewBGoldParser(params *chaincfg.Params, c *btc.Configuration) *BGoldParser // the regression test Bitcoin Cash network, the test Bitcoin Cash network and // the simulation test Bitcoin Cash network, in this order func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err == nil { + err = chaincfg.Register(&TestNetParams) + } + if err != nil { + panic(err) + } } switch chain { case "test": diff --git a/bchain/coins/btg/bgoldparser_test.go b/bchain/coins/btg/bgoldparser_test.go index e37fecd7..4a6ed6ed 100644 --- a/bchain/coins/btg/bgoldparser_test.go +++ b/bchain/coins/btg/bgoldparser_test.go @@ -8,10 +8,19 @@ import ( "encoding/hex" "fmt" "io/ioutil" + "os" "path/filepath" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + type testBlock struct { size int time int64 diff --git a/bchain/coins/dash/dashparser.go b/bchain/coins/dash/dashparser.go index d2371ef5..e70af2f9 100644 --- a/bchain/coins/dash/dashparser.go +++ b/bchain/coins/dash/dashparser.go @@ -19,7 +19,7 @@ var ( RegtestParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic @@ -40,17 +40,6 @@ func initParams() { // Address encoding magics RegtestParams.PubKeyHashAddrID = []byte{140} // base58 prefix: y RegtestParams.ScriptHashAddrID = []byte{19} // base58 prefix: 8 or 9 - - err := chaincfg.Register(&MainNetParams) - if err == nil { - err = chaincfg.Register(&TestNetParams) - } - if err == nil { - err = chaincfg.Register(&RegtestParams) - } - if err != nil { - panic(err) - } } // DashParser handle @@ -67,8 +56,17 @@ func NewDashParser(params *chaincfg.Params, c *btc.Configuration) *DashParser { // the regression test Dash network, the test Dash network and // the simulation test Dash network, in this order func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err == nil { + err = chaincfg.Register(&TestNetParams) + } + if err == nil { + err = chaincfg.Register(&RegtestParams) + } + if err != nil { + panic(err) + } } switch chain { case "test": diff --git a/bchain/coins/dogecoin/dogecoinparser.go b/bchain/coins/dogecoin/dogecoinparser.go index 56c95983..9c115f8c 100644 --- a/bchain/coins/dogecoin/dogecoinparser.go +++ b/bchain/coins/dogecoin/dogecoinparser.go @@ -18,16 +18,11 @@ var ( MainNetParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic MainNetParams.PubKeyHashAddrID = []byte{30} MainNetParams.ScriptHashAddrID = []byte{22} - - err := chaincfg.Register(&MainNetParams) - if err != nil { - panic(err) - } } // DogecoinParser handle @@ -43,8 +38,11 @@ func NewDogecoinParser(params *chaincfg.Params, c *btc.Configuration) *DogecoinP // GetChainParams contains network parameters for the main Dogecoin network, // and the test Dogecoin network func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err != nil { + panic(err) + } } switch chain { default: diff --git a/bchain/coins/dogecoin/dogecoinparser_test.go b/bchain/coins/dogecoin/dogecoinparser_test.go index 5638f664..f82ae434 100644 --- a/bchain/coins/dogecoin/dogecoinparser_test.go +++ b/bchain/coins/dogecoin/dogecoinparser_test.go @@ -10,11 +10,20 @@ import ( "fmt" "io/ioutil" "math/big" + "os" "path/filepath" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) { type args struct { address string diff --git a/bchain/coins/litecoin/litecoinparser.go b/bchain/coins/litecoin/litecoinparser.go index 7a60d2ac..88d217e8 100644 --- a/bchain/coins/litecoin/litecoinparser.go +++ b/bchain/coins/litecoin/litecoinparser.go @@ -18,7 +18,7 @@ var ( TestNetParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic MainNetParams.PubKeyHashAddrID = []byte{48} @@ -30,14 +30,6 @@ func initParams() { TestNetParams.PubKeyHashAddrID = []byte{111} TestNetParams.ScriptHashAddrID = []byte{58} TestNetParams.Bech32HRPSegwit = "tltc" - - err := chaincfg.Register(&MainNetParams) - if err == nil { - err = chaincfg.Register(&TestNetParams) - } - if err != nil { - panic(err) - } } // LitecoinParser handle @@ -53,8 +45,17 @@ func NewLitecoinParser(params *chaincfg.Params, c *btc.Configuration) *LitecoinP // GetChainParams contains network parameters for the main Litecoin network, // and the test Litecoin network func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&chaincfg.MainNetParams) { + chaincfg.RegisterBitcoinParams() + } + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err == nil { + err = chaincfg.Register(&TestNetParams) + } + if err != nil { + panic(err) + } } switch chain { case "test": diff --git a/bchain/coins/litecoin/litecoinparser_test.go b/bchain/coins/litecoin/litecoinparser_test.go index 1e046bcd..2ab4744f 100644 --- a/bchain/coins/litecoin/litecoinparser_test.go +++ b/bchain/coins/litecoin/litecoinparser_test.go @@ -7,10 +7,19 @@ import ( "blockbook/bchain/coins/btc" "encoding/hex" "math/big" + "os" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func Test_GetAddrDescFromAddress_Testnet(t *testing.T) { type args struct { address string @@ -28,17 +37,29 @@ func Test_GetAddrDescFromAddress_Testnet(t *testing.T) { wantErr: false, }, { - name: "P2SH1", + name: "P2SH1-legacy", args: args{address: "2MvGVySztevmycxrSmMRjJaVj2iJin7qpap"}, want: "a9142126232e3f47ae0f1246ec5f05fc400d83c86a0d87", wantErr: false, }, { - name: "P2SH2", + name: "P2SH2-legacy", args: args{address: "2N9a2TNzWz1FEKGFxUdMEh62V83URdZ5QAZ"}, want: "a914b31049e7ee51501fe19e3e0cdb803dc84cf99f9e87", wantErr: false, }, + { + name: "P2SH1", + args: args{address: "QPdG6Ts8g2q4m9cVPTTkPGwAB6kYgXB7Hc"}, + want: "a9142126232e3f47ae0f1246ec5f05fc400d83c86a0d87", + wantErr: false, + }, + { + name: "P2SH2", + args: args{address: "QcvnaPrm17JKTT216jPFmnTvGRvFX2fWzN"}, + want: "a914b31049e7ee51501fe19e3e0cdb803dc84cf99f9e87", + wantErr: false, + }, } parser := NewLitecoinParser(GetChainParams("test"), &btc.Configuration{}) diff --git a/bchain/coins/monacoin/monacoinparser.go b/bchain/coins/monacoin/monacoinparser.go index f8768641..d459cd22 100644 --- a/bchain/coins/monacoin/monacoinparser.go +++ b/bchain/coins/monacoin/monacoinparser.go @@ -26,7 +26,7 @@ var ( MonaTestParams monacoinCfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic MainNetParams.PubKeyHashAddrID = []byte{50} @@ -48,14 +48,6 @@ func initParams() { MonaTestParams.PubKeyHashAddrID = 111 MonaTestParams.ScriptHashAddrID = 117 MonaTestParams.Bech32HRPSegwit = "tmona" - - err := chaincfg.Register(&MainNetParams) - if err == nil { - err = chaincfg.Register(&TestNetParams) - } - if err != nil { - panic(err) - } } // MonacoinParser handle @@ -73,8 +65,14 @@ func NewMonacoinParser(params *chaincfg.Params, c *btc.Configuration) *MonacoinP // GetChainParams contains network parameters for the main Monacoin network, // and the test Monacoin network func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err == nil { + err = chaincfg.Register(&TestNetParams) + } + if err != nil { + panic(err) + } } switch chain { case "test": diff --git a/bchain/coins/monacoin/monacoinparser_test.go b/bchain/coins/monacoin/monacoinparser_test.go index 7c95d9a2..603a082e 100644 --- a/bchain/coins/monacoin/monacoinparser_test.go +++ b/bchain/coins/monacoin/monacoinparser_test.go @@ -7,10 +7,19 @@ import ( "blockbook/bchain/coins/btc" "encoding/hex" "math/big" + "os" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func Test_GetAddrDescFromAddress_Testnet(t *testing.T) { type args struct { address string diff --git a/bchain/coins/namecoin/namecoinparser.go b/bchain/coins/namecoin/namecoinparser.go index bca57e55..59e2445a 100644 --- a/bchain/coins/namecoin/namecoinparser.go +++ b/bchain/coins/namecoin/namecoinparser.go @@ -18,16 +18,11 @@ var ( MainNetParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic MainNetParams.PubKeyHashAddrID = []byte{52} MainNetParams.ScriptHashAddrID = []byte{13} - - err := chaincfg.Register(&MainNetParams) - if err != nil { - panic(err) - } } // NamecoinParser handle @@ -43,8 +38,11 @@ func NewNamecoinParser(params *chaincfg.Params, c *btc.Configuration) *NamecoinP // GetChainParams contains network parameters for the main Namecoin network, // and the test Namecoin network func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err != nil { + panic(err) + } } switch chain { default: diff --git a/bchain/coins/namecoin/namecoinparser_test.go b/bchain/coins/namecoin/namecoinparser_test.go index 8eff0e00..dc04a31e 100644 --- a/bchain/coins/namecoin/namecoinparser_test.go +++ b/bchain/coins/namecoin/namecoinparser_test.go @@ -8,11 +8,20 @@ import ( "encoding/hex" "fmt" "io/ioutil" + "os" "path/filepath" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) { type args struct { address string diff --git a/bchain/coins/vertcoin/vertcoinparser.go b/bchain/coins/vertcoin/vertcoinparser.go index ef7d82fc..ab28083e 100644 --- a/bchain/coins/vertcoin/vertcoinparser.go +++ b/bchain/coins/vertcoin/vertcoinparser.go @@ -18,7 +18,7 @@ var ( TestNetParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic MainNetParams.PubKeyHashAddrID = []byte{71} @@ -30,14 +30,6 @@ func initParams() { TestNetParams.PubKeyHashAddrID = []byte{74} TestNetParams.ScriptHashAddrID = []byte{196} TestNetParams.Bech32HRPSegwit = "tvtc" - - err := chaincfg.Register(&MainNetParams) - if err == nil { - err = chaincfg.Register(&TestNetParams) - } - if err != nil { - panic(err) - } } // VertcoinParser handle @@ -53,8 +45,14 @@ func NewVertcoinParser(params *chaincfg.Params, c *btc.Configuration) *VertcoinP // GetChainParams contains network parameters for the main Vertcoin network, // and the test Vertcoin network func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err == nil { + err = chaincfg.Register(&TestNetParams) + } + if err != nil { + panic(err) + } } switch chain { case "test": diff --git a/bchain/coins/vertcoin/vertcoinparser_test.go b/bchain/coins/vertcoin/vertcoinparser_test.go index 5cdcb5c6..ec86cd67 100644 --- a/bchain/coins/vertcoin/vertcoinparser_test.go +++ b/bchain/coins/vertcoin/vertcoinparser_test.go @@ -7,10 +7,19 @@ import ( "blockbook/bchain/coins/btc" "encoding/hex" "math/big" + "os" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) { type args struct { address string diff --git a/bchain/coins/zec/zcashparser.go b/bchain/coins/zec/zcashparser.go index ea4917c3..51093c1b 100644 --- a/bchain/coins/zec/zcashparser.go +++ b/bchain/coins/zec/zcashparser.go @@ -17,9 +17,10 @@ const ( var ( MainNetParams chaincfg.Params TestNetParams chaincfg.Params + RegtestParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic @@ -36,13 +37,8 @@ func initParams() { TestNetParams.PubKeyHashAddrID = []byte{0x1D, 0x25} // base58 prefix: tm TestNetParams.ScriptHashAddrID = []byte{0x1C, 0xBA} // base58 prefix: t2 - err := chaincfg.Register(&MainNetParams) - if err == nil { - err = chaincfg.Register(&TestNetParams) - } - if err != nil { - panic(err) - } + RegtestParams = chaincfg.RegressionNetParams + RegtestParams.Net = RegtestMagic } // ZCashParser handle @@ -63,16 +59,24 @@ func NewZCashParser(params *chaincfg.Params, c *btc.Configuration) *ZCashParser // the regression test ZCash network, the test ZCash network and // the simulation test ZCash network, in this order func GetChainParams(chain string) *chaincfg.Params { - if MainNetParams.Name == "" { - initParams() + if !chaincfg.IsRegistered(&MainNetParams) { + err := chaincfg.Register(&MainNetParams) + if err == nil { + err = chaincfg.Register(&TestNetParams) + } + if err == nil { + err = chaincfg.Register(&RegtestParams) + } + if err != nil { + panic(err) + } } var params *chaincfg.Params switch chain { case "test": return &TestNetParams case "regtest": - params = &chaincfg.RegressionNetParams - params.Net = RegtestMagic + return &RegtestParams default: return &MainNetParams } diff --git a/bchain/coins/zec/zcashparser_test.go b/bchain/coins/zec/zcashparser_test.go index ebaf5135..18a6b4a7 100644 --- a/bchain/coins/zec/zcashparser_test.go +++ b/bchain/coins/zec/zcashparser_test.go @@ -8,8 +8,11 @@ import ( "bytes" "encoding/hex" "math/big" + "os" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) var ( @@ -91,6 +94,12 @@ func init() { } } +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func TestGetAddrDesc(t *testing.T) { type args struct { tx bchain.Tx diff --git a/db/rocksdb_test.go b/db/rocksdb_test.go index 8e114597..e3aed543 100644 --- a/db/rocksdb_test.go +++ b/db/rocksdb_test.go @@ -18,6 +18,7 @@ import ( "testing" vlq "github.com/bsm/go-vlq" + "github.com/jakm/btcutil/chaincfg" "github.com/juju/errors" ) @@ -25,6 +26,12 @@ import ( // for number n, the packing is: 2*n if n>=0 else 2*(-n)-1 // takes only 1 byte if abs(n)<127 +func TestMain(m *testing.M) { + c := m.Run() + chaincfg.ResetParams() + os.Exit(c) +} + func bitcoinTestnetParser() *btc.BitcoinParser { return btc.NewBitcoinParser( btc.GetChainParams("test"),