From e34311ff454a7ad8b473742aef6856e819f3e309 Mon Sep 17 00:00:00 2001 From: Jianrong Date: Sun, 10 Oct 2021 15:54:19 +1100 Subject: [PATCH] Remove unused consensus v1 methods --- consensus/XDPoS/XDPoS.go | 15 +--- consensus/XDPoS/XDPoS_test.go | 76 ------------------- consensus/XDPoS/engines/engine_v1/engine.go | 35 +-------- consensus/XDPoS/utils/utils_test.go | 84 +++++++++++++++++++++ contracts/utils.go | 2 +- core/blockchain.go | 32 -------- eth/hooks/engine_v1_hooks.go | 2 +- go.sum | 9 +++ 8 files changed, 97 insertions(+), 158 deletions(-) create mode 100644 consensus/XDPoS/utils/utils_test.go diff --git a/consensus/XDPoS/XDPoS.go b/consensus/XDPoS/XDPoS.go index f18a3f535a..8ae6cc5c23 100644 --- a/consensus/XDPoS/XDPoS.go +++ b/consensus/XDPoS/XDPoS.go @@ -323,19 +323,6 @@ func (c *XDPoS) CacheSigningTxs(hash common.Hash, txs []*types.Transaction) []*t return signTxs } -func (c *XDPoS) GetCachedSignerData(hash common.Hash) (interface{}, bool) { +func (c *XDPoS) GetCachedSigningTxs(hash common.Hash) (interface{}, bool) { return c.signingTxsCache.Get(hash) } - -// TODO: (Hashlab) Can be further refactored -func (c *XDPoS) CheckMNTurn(chain consensus.ChainReader, parent *types.Header, signer common.Address) bool { - switch params.BlockConsensusVersion(parent.Number) { - default: // Default "1.0" - return c.EngineV1.CheckMNTurn(chain, parent, signer) - } -} - -// TODO: (Hashlab)Get signer coinbase -func (c *XDPoS) Signer() common.Address { - return c.EngineV1.Signer() -} diff --git a/consensus/XDPoS/XDPoS_test.go b/consensus/XDPoS/XDPoS_test.go index 4d16514a00..1fb1a5b2c1 100644 --- a/consensus/XDPoS/XDPoS_test.go +++ b/consensus/XDPoS/XDPoS_test.go @@ -1,85 +1,9 @@ package XDPoS import ( - "fmt" - "math/big" "testing" "github.com/XinFinOrg/XDPoSChain/common" - "github.com/XinFinOrg/XDPoSChain/consensus/XDPoS/utils" - "github.com/XinFinOrg/XDPoSChain/core/types" "github.com/XinFinOrg/XDPoSChain/params" ) - -func TestGetM1M2FromCheckpointHeader(t *testing.T) { - masternodes := []common.Address{ - common.StringToAddress("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), - common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), - common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), - } - validators := []int64{ - 2, - 1, - 0, - } - epoch := uint64(900) - config := ¶ms.ChainConfig{ - XDPoS: ¶ms.XDPoSConfig{ - Epoch: uint64(epoch), - }, - } - testMoveM2 := []uint64{0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2} - //try from block 3410001 to 3410018 - for i := uint64(3464001); i <= 3464018; i++ { - currentNumber := int64(i) - currentHeader := &types.Header{ - Number: big.NewInt(currentNumber), - } - m1m2, moveM2, err := utils.GetM1M2(masternodes, validators, currentHeader, config) - if err != nil { - t.Error("can't get m1m2", "err", err) - } - fmt.Printf("block: %v, moveM2: %v\n", currentHeader.Number.Int64(), moveM2) - for _, k := range masternodes { - fmt.Printf("m1: %v - m2: %v\n", k.Str(), m1m2[k].Str()) - } - if moveM2 != testMoveM2[i-3464001] { - t.Error("wrong moveM2", "currentNumber", currentNumber, "want", testMoveM2[i-3464001], "have", moveM2) - } - } -} - -func TestCompareSignersLists(t *testing.T) { - list1 := []common.Address{ - common.StringToAddress("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), - common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), - common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), - common.StringToAddress("dddddddddddddddddddddddddddddddddddddddd"), - } - list2 := []common.Address{ - common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), - common.StringToAddress("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), - common.StringToAddress("dddddddddddddddddddddddddddddddddddddddd"), - common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), - } - list3 := []common.Address{ - common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), - common.StringToAddress("dddddddddddddddddddddddddddddddddddddddd"), - common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), - } - if !utils.CompareSignersLists(list1, list2) { - t.Error("list1 should be equal to list2", "list1", list1, "list2", list2) - } - if utils.CompareSignersLists(list1, list3) { - t.Error("list1 and list3 should not be same", "list1", list1, "list3", list3) - } - if !utils.CompareSignersLists([]common.Address{}, []common.Address{}) { - t.Error("Failed with empty list") - } - if !utils.CompareSignersLists([]common.Address{common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc")}, []common.Address{common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc")}) { - t.Error("Failed with list has only one signer") - } - if utils.CompareSignersLists([]common.Address{common.StringToAddress("aaaaaaaaaaaaaaaa")}, []common.Address{common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc")}) { - t.Error("Failed with list has only one signer") - } } diff --git a/consensus/XDPoS/engines/engine_v1/engine.go b/consensus/XDPoS/engines/engine_v1/engine.go index 06ee39c9dd..5fce8ce8b1 100644 --- a/consensus/XDPoS/engines/engine_v1/engine.go +++ b/consensus/XDPoS/engines/engine_v1/engine.go @@ -153,7 +153,7 @@ func (c *XDPoS_v1) Author(header *types.Header) (common.Address, error) { } // Get signer coinbase -func (c *XDPoS_v1) Signer() common.Address { return c.signer } +// func (c *XDPoS_v1) Signer() common.Address { return c.signer } // VerifyHeader checks whether a header conforms to the consensus rules. func (c *XDPoS_v1) VerifyHeader(chain consensus.ChainReader, header *types.Header, fullVerify bool) error { @@ -1029,39 +1029,6 @@ func GetM1M2FromCheckpointHeader(checkpointHeader *types.Header, currentHeader * return m1m2, nil } -func (c *XDPoS_v1) CheckMNTurn(chain consensus.ChainReader, parent *types.Header, signer common.Address) bool { - masternodes := c.GetMasternodes(chain, parent) - - if common.IsTestnet { - // Only three mns hard code for XDC testnet. - masternodes = []common.Address{ - common.HexToAddress("0x3Ea0A3555f9B1dE983572BfF6444aeb1899eC58C"), - common.HexToAddress("0x4F7900282F3d371d585ab1361205B0940aB1789C"), - common.HexToAddress("0x942a5885A8844Ee5587C8AC5e371Fc39FFE61896"), - } - } - - snap, err := c.GetSnapshot(chain, parent) - if err != nil { - log.Warn("Failed when trying to commit new work", "err", err) - return false - } - if len(masternodes) == 0 { - return false - } - // masternode[0] has chance to create block 1 - preIndex := -1 - if parent.Number.Uint64() != 0 { - pre, err := whoIsCreator(snap, parent) - if err != nil { - return false - } - preIndex = position(masternodes, pre) - } - curIndex := position(masternodes, signer) - return ((preIndex)%len(masternodes) == curIndex) -} - func (c *XDPoS_v1) getSignersFromContract(chain consensus.ChainReader, checkpointHeader *types.Header) ([]common.Address, error) { startGapBlockHeader := checkpointHeader number := checkpointHeader.Number.Uint64() diff --git a/consensus/XDPoS/utils/utils_test.go b/consensus/XDPoS/utils/utils_test.go new file mode 100644 index 0000000000..60f4210f58 --- /dev/null +++ b/consensus/XDPoS/utils/utils_test.go @@ -0,0 +1,84 @@ +package utils + +import ( + "fmt" + "math/big" + "testing" + + "github.com/XinFinOrg/XDPoSChain/common" + "github.com/XinFinOrg/XDPoSChain/core/types" + "github.com/XinFinOrg/XDPoSChain/params" +) + +func TestGetM1M2FromCheckpointHeader(t *testing.T) { + masternodes := []common.Address{ + common.StringToAddress("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), + common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), + common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), + } + validators := []int64{ + 2, + 1, + 0, + } + epoch := uint64(900) + config := ¶ms.ChainConfig{ + XDPoS: ¶ms.XDPoSConfig{ + Epoch: uint64(epoch), + }, + } + testMoveM2 := []uint64{0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 2, 2} + //try from block 3410001 to 3410018 + for i := uint64(3464001); i <= 3464018; i++ { + currentNumber := int64(i) + currentHeader := &types.Header{ + Number: big.NewInt(currentNumber), + } + m1m2, moveM2, err := GetM1M2(masternodes, validators, currentHeader, config) + if err != nil { + t.Error("can't get m1m2", "err", err) + } + fmt.Printf("block: %v, moveM2: %v\n", currentHeader.Number.Int64(), moveM2) + for _, k := range masternodes { + fmt.Printf("m1: %v - m2: %v\n", k.Str(), m1m2[k].Str()) + } + if moveM2 != testMoveM2[i-3464001] { + t.Error("wrong moveM2", "currentNumber", currentNumber, "want", testMoveM2[i-3464001], "have", moveM2) + } + } +} + +func TestCompareSignersLists(t *testing.T) { + list1 := []common.Address{ + common.StringToAddress("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), + common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), + common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), + common.StringToAddress("dddddddddddddddddddddddddddddddddddddddd"), + } + list2 := []common.Address{ + common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), + common.StringToAddress("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"), + common.StringToAddress("dddddddddddddddddddddddddddddddddddddddd"), + common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), + } + list3 := []common.Address{ + common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc"), + common.StringToAddress("dddddddddddddddddddddddddddddddddddddddd"), + common.StringToAddress("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"), + } + if !CompareSignersLists(list1, list2) { + t.Error("list1 should be equal to list2", "list1", list1, "list2", list2) + } + if CompareSignersLists(list1, list3) { + t.Error("list1 and list3 should not be same", "list1", list1, "list3", list3) + } + if !CompareSignersLists([]common.Address{}, []common.Address{}) { + t.Error("Failed with empty list") + } + if !CompareSignersLists([]common.Address{common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc")}, []common.Address{common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc")}) { + t.Error("Failed with list has only one signer") + } + if CompareSignersLists([]common.Address{common.StringToAddress("aaaaaaaaaaaaaaaa")}, []common.Address{common.StringToAddress("cccccccccccccccccccccccccccccccccccccccc")}) { + t.Error("Failed with list has only one signer") + } +} diff --git a/contracts/utils.go b/contracts/utils.go index 6187d74555..d7a244b3f2 100644 --- a/contracts/utils.go +++ b/contracts/utils.go @@ -332,7 +332,7 @@ func GetRewardForCheckpoint(c *XDPoS.XDPoS, chain consensus.ChainReader, header for i := prevCheckpoint + (rCheckpoint * 2) - 1; i >= startBlockNumber; i-- { header = chain.GetHeader(header.ParentHash, i) mapBlkHash[i] = header.Hash() - signData, ok := c.GetCachedSignerData(header.Hash()) + signData, ok := c.GetCachedSigningTxs(header.Hash()) if !ok { log.Debug("Failed get from cached", "hash", header.Hash().String(), "number", i) block := chain.GetBlock(header.Hash(), i) diff --git a/core/blockchain.go b/core/blockchain.go index 2fa4440b96..b43b9a2265 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1652,22 +1652,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks) (int, []interface{}, []*ty if err != nil { return i, events, coalescedLogs, err } - if bc.chainConfig.XDPoS != nil { - c := bc.engine.(*XDPoS.XDPoS) - coinbase := c.Signer() - // ignore synching block - if coinbase != common.HexToAddress("0x0000000000000000000000000000000000000000") { - // block signer - blockSigner, _ := c.RecoverSigner(block.Header()) - header := block.Header() - validator, _ := c.RecoverValidator(block.Header()) - ok := c.CheckMNTurn(bc, header, coinbase) - // if created block was your turn - if blockSigner != coinbase && ok { - log.Warn("Missed create block height", "number", block.Number(), "hash", block.Hash(), "m1", blockSigner.Hex(), "m2", validator.Hex()) - } - } - } switch status { case CanonStatTy: log.Debug("Inserted new block from downloader", "number", block.Number(), "hash", block.Hash(), "uncles", len(block.Uncles()), @@ -1991,22 +1975,6 @@ func (bc *BlockChain) insertBlock(block *types.Block) ([]interface{}, []*types.L if err != nil { return events, coalescedLogs, err } - if bc.chainConfig.XDPoS != nil { - c := bc.engine.(*XDPoS.XDPoS) - coinbase := c.Signer() - // ignore synching block - if coinbase != common.HexToAddress("0x0000000000000000000000000000000000000000") { - header := block.Header() - // block signer - blockSigner, _ := c.RecoverSigner(block.Header()) - validator, _ := c.RecoverValidator(block.Header()) - ok := c.CheckMNTurn(bc, header, coinbase) - // if created block was your turn - if blockSigner != coinbase && ok { - log.Warn("Missed create block height", "number", block.Number(), "hash", block.Hash(), "m1", blockSigner.Hex(), "m2", validator.Hex()) - } - } - } switch status { case CanonStatTy: log.Debug("Inserted new block from fetcher", "number", block.Number(), "hash", block.Hash(), "uncles", len(block.Uncles()), diff --git a/eth/hooks/engine_v1_hooks.go b/eth/hooks/engine_v1_hooks.go index 8087526e2e..d2d847ff5b 100644 --- a/eth/hooks/engine_v1_hooks.go +++ b/eth/hooks/engine_v1_hooks.go @@ -142,7 +142,7 @@ func AttachConsensusV1Hooks(adaptor *XDPoS.XDPoS, bc *core.BlockChain, chainConf if blockNumber%common.MergeSignRange == 0 { mapBlockHash[bhash] = true } - signData, ok := adaptor.GetCachedSignerData(bhash) + signData, ok := adaptor.GetCachedSigningTxs(bhash) if !ok { block := chain.GetBlock(bhash, blockNumber) txs := block.Transactions() diff --git a/go.sum b/go.sum index 0394f8a511..783745877f 100644 --- a/go.sum +++ b/go.sum @@ -83,7 +83,9 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= +github.com/elastic/gosigar v0.10.5 h1:GzPQ+78RaAb4J63unidA/JavQRKrB6s8IOzN6Ib59jo= github.com/elastic/gosigar v0.10.5/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= +github.com/ethereum/go-ethereum v1.9.9 h1:jnoBvjH8aMH++iH14XmiJdAsnRcmZUM+B5fsnEZBVE0= github.com/ethereum/go-ethereum v1.9.9/go.mod h1:a9TqabFudpDu1nucId+k9S8R9whYaHnGBLKFouA5EAo= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.6.0 h1:66qjqZk8kalYAvDRtM1AdAJQI0tj4Wrue3Eq3B3pmFU= @@ -91,6 +93,7 @@ github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gizak/termui v2.2.0+incompatible h1:qvZU9Xll/Xd/Xr/YO+HfBKXhy8a8/94ao6vV9DSXzUE= github.com/gizak/termui v2.2.0+incompatible/go.mod h1:PkJoWUt/zacQKysNfQtcw1RW+eK2SxkieVBtl+4ovLA= @@ -118,6 +121,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -146,6 +150,7 @@ github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4d github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/karalabe/hid v1.0.0 h1:+/CIMNXhSU/zIJgnIvBD2nKHxS/bnRHhhs9xBryLpPo= github.com/karalabe/hid v1.0.0/go.mod h1:Vr51f8rUOLYrfrWDFlV12GGQgM5AT8sVh+2fY4MPeu8= +github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356 h1:I/yrLt2WilKxlQKCM52clh5rGzTKpVctGT1lH4Dc8Jw= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/karalabe/xgo v0.0.0-20191115072854-c5ccff8648a7 h1:AYzjK/SHz6m6mg5iuFwkrAhCc14jvCpW9d6frC9iDPE= github.com/karalabe/xgo v0.0.0-20191115072854-c5ccff8648a7/go.mod h1:iYGcTYIPUvEWhFo6aKUuLchs+AV4ssYdyuBbQJZGcBk= @@ -225,6 +230,7 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/prometheus v1.7.2-0.20170814170113-3101606756c5 h1:K2PKeDFZidfjUWpXk05Gbxhwm8Rnz1l4O+u/bbbcCvc= github.com/prometheus/prometheus v1.7.2-0.20170814170113-3101606756c5/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= +github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150 h1:ZeU+auZj1iNzN8iVhff6M38Mfu73FQiJve/GEXYJBjE= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= @@ -242,6 +248,7 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= @@ -258,8 +265,10 @@ github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJ github.com/templexxx/cpufeat v0.0.0-20180724012125-cef66df7f161/go.mod h1:wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU= github.com/templexxx/xor v0.0.0-20181023030647-4e92f724b73b/go.mod h1:5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4= github.com/tjfoc/gmsm v1.0.1/go.mod h1:XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/wc= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef h1:wHSqTBrZW24CsNJDfeh9Ex6Pm0Rcpc7qrgKBiL44vF4= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208 h1:1cngl9mPEoITZG8s8cVcUy5CeIBYhEESkOB7m6Gmkrk= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=