From 8c7f383e9aa8f0cee99562e2126a802b74447d78 Mon Sep 17 00:00:00 2001 From: Jakub Matys Date: Tue, 2 Oct 2018 17:02:57 +0200 Subject: [PATCH 1/4] 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"), From 18d08b4110a6d6dc66ce8d96b40f45bce671cc3c Mon Sep 17 00:00:00 2001 From: Jakub Matys Date: Wed, 3 Oct 2018 10:27:24 +0200 Subject: [PATCH 2/4] Upgraded Gopkg.lock --- Gopkg.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gopkg.lock b/Gopkg.lock index 2f5175a9..af32e962 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -113,7 +113,7 @@ branch = "master" name = "github.com/jakm/btcutil" packages = [".","base58","bech32","chaincfg","txscript"] - revision = "c50a69d8979c23daad1728b3574c6f20691174f7" + revision = "4656891ba33d07bb3c37ed1eb5120774c42a6bf6" [[projects]] branch = "master" From 23f111d1dcc051a8911656cb7311dcd99328a7ad Mon Sep 17 00:00:00 2001 From: Jakub Matys Date: Wed, 3 Oct 2018 11:35:48 +0200 Subject: [PATCH 3/4] Resets params registry when each test is done --- tests/integration.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/integration.go b/tests/integration.go index f057a5f3..990a6064 100644 --- a/tests/integration.go +++ b/tests/integration.go @@ -15,6 +15,8 @@ import ( "path/filepath" "reflect" "testing" + + "github.com/jakm/btcutil/chaincfg" ) type TestFunc func(t *testing.T, coin string, chain bchain.BlockChain, testConfig json.RawMessage) @@ -52,6 +54,7 @@ func runTests(t *testing.T, coin string, cfg map[string]json.RawMessage) { if cfg == nil || len(cfg) == 0 { t.Skip("No tests to run") } + defer chaincfg.ResetParams() bc, err := makeBlockChain(coin) if err != nil { From aea9d584f44cacdb408a26141c7a94ee2027d116 Mon Sep 17 00:00:00 2001 From: Jakub Matys Date: Wed, 3 Oct 2018 11:51:19 +0200 Subject: [PATCH 4/4] United Monacoin params registration with implementation in other coins --- bchain/coins/myriad/myriadparser.go | 22 ++++++++++------------ bchain/coins/myriad/myriadparser_test.go | 12 ++++++++++-- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/bchain/coins/myriad/myriadparser.go b/bchain/coins/myriad/myriadparser.go index 309f7e8b..21572a7b 100644 --- a/bchain/coins/myriad/myriadparser.go +++ b/bchain/coins/myriad/myriadparser.go @@ -6,8 +6,8 @@ import ( "blockbook/bchain/coins/utils" "bytes" - "github.com/jakm/btcutil/chaincfg" "github.com/btcsuite/btcd/wire" + "github.com/jakm/btcutil/chaincfg" ) const ( @@ -18,22 +18,17 @@ var ( MainNetParams chaincfg.Params ) -func initParams() { +func init() { MainNetParams = chaincfg.MainNetParams MainNetParams.Net = MainnetMagic MainNetParams.Bech32HRPSegwit = "my" MainNetParams.PubKeyHashAddrID = []byte{50} // 0x32 - starts with M - MainNetParams.ScriptHashAddrID = []byte{9} // 0x09 - starts with 4 - MainNetParams.PrivateKeyID = []byte{178} // 0xB2 - - MainNetParams.HDCoinType = 90 + MainNetParams.ScriptHashAddrID = []byte{9} // 0x09 - starts with 4 + MainNetParams.PrivateKeyID = []byte{178} // 0xB2 - err := chaincfg.Register(&MainNetParams) - if err != nil { - panic(err) - } + MainNetParams.HDCoinType = 90 } // MyriadParser handle @@ -48,8 +43,11 @@ func NewMyriadParser(params *chaincfg.Params, c *btc.Configuration) *MyriadParse // GetChainParams contains network parameters for the main Myriad 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/myriad/myriadparser_test.go b/bchain/coins/myriad/myriadparser_test.go index 164e9ab9..8c26c919 100644 --- a/bchain/coins/myriad/myriadparser_test.go +++ b/bchain/coins/myriad/myriadparser_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 @@ -57,9 +66,8 @@ func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) { } } - var ( - testTx1 bchain.Tx + testTx1 bchain.Tx testTxPacked1 = "00004e208ab194a1180100000001163465df9bb21d89e90056f11887a398d5a313aef71e3974306459661a91588c000000006b4830450220129c9e9a27406796f3f7d7edcc446037b38ddb3ef94745cec8e7cde618a811140221008eb3b893cdd3725e99b74c020867821e1f74199065260586f5ef3c22b133dd2a012103e2e23d38dc8fa493cde4077f650ab9f22eacafd14a10b123994f38c9f35dfee9ffffffff025e90ec28050000001976a9141cba92fe1510b8c73550fd4d3e0b44acdffcd12d88ac79c268ba0a0000001976a9142f86cdfa98cac89143cf9e3d309cc072caccdf6f88ac00000000" )