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  }