diff options
author | Wei-Ning Huang <w@dexon.org> | 2018-10-24 16:18:19 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 21:32:51 +0800 |
commit | d8b0b71610758cc7d218a012f27071937efff60e (patch) | |
tree | 99b20a1d30f2520a43f77759b03ea6a8dd7c2962 /cmd | |
parent | 60e4a1212cc2690acea6898fa727a7900d14f3bf (diff) | |
download | dexon-d8b0b71610758cc7d218a012f27071937efff60e.tar.gz dexon-d8b0b71610758cc7d218a012f27071937efff60e.tar.zst dexon-d8b0b71610758cc7d218a012f27071937efff60e.zip |
cmd: add a simple monkey tool for stress test
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/monkey/monkey.go | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/cmd/monkey/monkey.go b/cmd/monkey/monkey.go new file mode 100644 index 000000000..c155e5cf0 --- /dev/null +++ b/cmd/monkey/monkey.go @@ -0,0 +1,93 @@ +// Copyright 2018 The dexon-consensus-core Authors +// This file is part of the dexon-consensus-core library. +// +// The dexon-consensus-core library is free software: you can redistribute it +// and/or modify it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the License, +// or (at your option) any later version. +// +// The dexon-consensus-core library is distributed in the hope that it will be +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser +// General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the dexon-consensus-core library. If not, see +// <http://www.gnu.org/licenses/>. + +// A simple monkey that sends random transactions into the network. + +package main + +import ( + "context" + "flag" + "fmt" + "math/big" + "math/rand" + "time" + + "github.com/dexon-foundation/dexon/common" + "github.com/dexon-foundation/dexon/core/types" + "github.com/dexon-foundation/dexon/crypto" + "github.com/dexon-foundation/dexon/ethclient" +) + +var key = flag.String("key", "", "private key path") +var endpoint = flag.String("endpoint", "http://localhost:8545", "JSON RPC endpoint") +var tps = flag.Int("tps", 10, "transactions per second") + +func randomAddress() common.Address { + x := common.Address{} + for i := 0; i < 20; i++ { + x[i] = byte(rand.Int31() % 16) + } + return x +} + +func main() { + flag.Parse() + + privKey, err := crypto.LoadECDSA(*key) + if err != nil { + panic(err) + } + + client, err := ethclient.Dial(*endpoint) + if err != nil { + panic(err) + } + + address := crypto.PubkeyToAddress(privKey.PublicKey) + + nonce, err := client.PendingNonceAt(context.Background(), address) + if err != nil { + panic(err) + } + + for { + tx := types.NewTransaction( + nonce, + randomAddress(), + big.NewInt(10), + uint64(21000), + big.NewInt(1e9), + nil) + + signer := types.NewEIP155Signer(big.NewInt(237)) + tx, err = types.SignTx(tx, signer, privKey) + if err != nil { + panic(err) + } + + err := client.SendTransaction(context.Background(), tx) + if err != nil { + panic(err) + } + + fmt.Println("Sending TX", "fullhash", tx.Hash().String()) + + nonce++ + time.Sleep(time.Duration(float32(time.Second) / float32(*tps))) + } +} |