github.com/okex/exchain@v1.8.0/libs/tendermint/mempool/perf.go (about) 1 package mempool 2 3 import ( 4 "bytes" 5 "encoding/hex" 6 "fmt" 7 "github.com/okex/exchain/libs/tendermint/p2p" 8 "github.com/spf13/viper" 9 "io/ioutil" 10 "os" 11 "time" 12 13 abci "github.com/okex/exchain/libs/tendermint/abci/types" 14 "github.com/okex/exchain/libs/tendermint/crypto/ed25519" 15 ) 16 17 func (memR *Reactor) press() { 18 s, ok := viper.Get("local_perf").(string) 19 if !ok { 20 return 21 } 22 if s != "tx" && s != "wtx" { 23 return 24 } 25 hexPriv := "d322864e848a3ebbb88cbd45b163db3c479b166937f10a14ab86a3f860b0b0b64506fc928bd335f434691375f63d0baf97968716a20b2ad15463e51ba5cf49fe" 26 var privKey ed25519.PrivKeyEd25519 27 b, _ := hex.DecodeString(hexPriv) 28 copy(privKey[:], b) 29 memR.nodeKeyWhitelist[string(p2p.PubKeyToID(privKey.PubKey()))] = struct{}{} 30 if s == "tx" { 31 for i:=0;i<4;i++ { 32 go memR.sendTxs(i) 33 } 34 } else { 35 for i:=0;i<4;i++ { 36 go memR.sendWtxs(i) 37 } 38 } 39 } 40 41 func (memR *Reactor) sendTxs(index int) { 42 d, err := os.Getwd() 43 if err != nil { 44 panic(err) 45 } 46 name := d + "/tx/TxMessage-" 47 switch index { 48 case 0: 49 name += "0xbbE4733d85bc2b90682147779DA49caB38C0aA1F.txt" 50 case 1: 51 name += "0x83D83497431C2D3FEab296a9fba4e5FaDD2f7eD0.txt" 52 case 2: 53 name += "0x4C12e733e58819A1d3520f1E7aDCc614Ca20De64.txt" 54 case 3: 55 name += "0x2Bd4AF0C1D0c2930fEE852D07bB9dE87D8C07044.txt" 56 } 57 start := time.Now() 58 content, err := ioutil.ReadFile(name) 59 if err != nil { 60 fmt.Println("Please create tx before doing local performance test.") 61 panic(err) 62 } 63 fmt.Println("ReadFile time cost:", time.Since(start), len(content)) 64 time.Sleep(time.Second * 5) 65 for { 66 ind := bytes.IndexByte(content, '\n') 67 if ind < 0 { 68 break 69 } 70 tx := content[:ind] 71 content = content[ind+1:] 72 if len(tx) == 0 { 73 continue 74 } 75 raw, _ := hex.DecodeString(string(tx)) 76 for memR.mempool.Size() > memR.config.Size *9/10 { 77 time.Sleep(time.Second) 78 } 79 var msg TxMessage 80 if err = cdc.UnmarshalBinaryBare(raw, &msg); err != nil { 81 panic(err) 82 } 83 if err = memR.mempool.CheckTx(msg.Tx, nil, TxInfo{}); err != nil { 84 fmt.Println("memR.mempool.CheckTx error", err) 85 } 86 } 87 } 88 89 func (memR *Reactor) sendWtxs(index int) { 90 d, err := os.Getwd() 91 if err != nil { 92 panic(err) 93 } 94 name := d + "/tx/WtxMessage-" 95 switch index { 96 case 0: 97 name += "0xbbE4733d85bc2b90682147779DA49caB38C0aA1F.txt" 98 case 1: 99 name += "0x83D83497431C2D3FEab296a9fba4e5FaDD2f7eD0.txt" 100 case 2: 101 name += "0x4C12e733e58819A1d3520f1E7aDCc614Ca20De64.txt" 102 case 3: 103 name += "0x2Bd4AF0C1D0c2930fEE852D07bB9dE87D8C07044.txt" 104 } 105 start := time.Now() 106 content, err := ioutil.ReadFile(name) 107 if err != nil { 108 fmt.Println("Please create wtx before doing local performance test.") 109 panic(err) 110 } 111 fmt.Println("ReadFile time cost:", time.Since(start), len(content)) 112 time.Sleep(time.Second * 5) 113 for { 114 ind := bytes.IndexByte(content, '\n') 115 if ind < 0 { 116 break 117 } 118 tx := content[:ind] 119 content = content[ind+1:] 120 if len(tx) == 0 { 121 continue 122 } 123 raw, _ := hex.DecodeString(string(tx)) 124 for memR.mempool.Size() > memR.config.Size*9/10 { 125 time.Sleep(time.Second) 126 } 127 var msg WtxMessage 128 if err = cdc.UnmarshalBinaryBare(raw, &msg); err != nil { 129 panic(err) 130 } 131 132 if err = msg.Wtx.verify(memR.nodeKeyWhitelist); err != nil { 133 panic(err) 134 } 135 136 if err = memR.mempool.CheckTx(msg.Wtx.Payload, nil, TxInfo{ 137 wtx: msg.Wtx, 138 checkType: abci.CheckTxType_WrappedCheck, 139 }); err != nil { 140 fmt.Println("memR.mempool.CheckTx error", err) 141 } 142 } 143 }