From 185c358e4e0e430df9cd68f85888e8b142786609 Mon Sep 17 00:00:00 2001 From: Wei-Ning Huang Date: Wed, 24 Oct 2018 16:18:19 +0800 Subject: cmd: add a simple monkey tool for stress test --- cmd/monkey/monkey.go | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++ test/genesis.json | 2 +- 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 cmd/monkey/monkey.go 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 +// . + +// 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))) + } +} diff --git a/test/genesis.json b/test/genesis.json index ed5e9b7ce..eefd2d59a 100644 --- a/test/genesis.json +++ b/test/genesis.json @@ -1,6 +1,6 @@ { "config": { - "chainId": 1, + "chainId": 237, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", -- cgit v1.2.3