Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Csrb #5

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
639 changes: 0 additions & 639 deletions Gopkg.lock

This file was deleted.

34 changes: 0 additions & 34 deletions Gopkg.toml

This file was deleted.

3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ build:
build_linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./irishub-load ./

format:
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs gofmt -w -s
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" | xargs goimports -w -local github.com/irisnet/irishub-load
50 changes: 50 additions & 0 deletions cmd/RandTest.go

Large diffs are not rendered by default.

153 changes: 64 additions & 89 deletions cmd/airdrop.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,160 +3,137 @@ package cmd
import (
"fmt"
"github.com/irisnet/irishub-load/conf"
"github.com/irisnet/irishub-load/util/constants"
"github.com/irisnet/irishub-load/util/helper"
"github.com/irisnet/irishub-load/util/helper/account"
"github.com/irisnet/irishub-load/util/helper/tx"
"github.com/spf13/cobra"

"github.com/irisnet/irishub-load/types"
"github.com/360EntSecGroup-Skylar/excelize"
"github.com/irisnet/irishub-load/types"
"time"
)

func AirDrop() *cobra.Command {

/* 先看这里:
0. 编译主网iris版本, ide 编辑配置中 airDrop --config-dir=$HOME

1. 打开lcd(注意要主网版本)
irislcd start --node=http://seed-1.mainnet.irisnet.org:26657 --laddr=tcp://0.0.0.0:1317 --chain-id=irisnet --home=$HOME/.irislcd/ --trust-node

明细查账: https://www.irisplorer.io/#/txs/transfers
查水龙头余额: https://www.irisplorer.io/#/address/iaa13nzsae74qype65rshc0wyvhk9s0l3uecwf8y93

2. 把主网版本的data和config在home目录(/Users/sherlock/)下,改下config中空投的助记词 strike-drop:

3. 确保 iaa13nzsae74qype65rshc0wyvhk9s0l3uecwf8y93 有钱

4. 把create account删除了(lcd不支持key了),后续没有用了。实在要用可以考虑iks。
助记词可以生成签名后的交易。 简单查账的话可以把水龙头的iaa在config里面事先写好。

5. 完成后会把交易hash和结果 写回data.xlsl

6. 另外注意下:收款地址不要有 iaa1mvfej6hvkuplcvm9aa2qdeh54npvdnshzcjpat 这个是交易所地址,需要备注memo, 先核查。
*/

cmd := &cobra.Command{
Use: "airDrop",
Example: "irishub-load airDrop --config-dir=$HOME",
Use: "airDrop",
Example: "irishub-load airDrop --config-dir=$HOME",
RunE: func(cmd *cobra.Command, _ []string) error {
var (
err error
xlsx *excelize.File
faucet_name string
faucet_add string
err error
xlsx *excelize.File
airdrop_list []types.AirDropInfo
faucet_info types.AccountInfoRes
//record_list map[string]string
faucet_info types.AccountInfoRes
)
fmt.Println("Init AirDrop !!!!")
fmt.Println("No.1 Init AirDrop !!!!")
helper.ReadConfigFile(FlagConfDir)

//fmt.Println("Read transfer Record !!!!")
//if record_list, err = helper.ReadRecord(); err != nil {
// return err
//}

//从excel中读取金额和地址列表
if airdrop_list, xlsx, err = helper.ReadAddressList(FlagConfDir); err != nil {
fmt.Println("ReadAddressList error !!!!")
return err
}

faucet_name = "faucet_" + helper.RandomId()
fmt.Printf("No.1 Create new faucet account : %s \n", faucet_name)

if faucet_add, err = account.CreateAccount(faucet_name, constants.KeyPassword, conf.AirDropSeed); err != nil {
fmt.Println("CreateAccount error !!!!")
return err
}

if faucet_info, err = account.GetAccountInfo(faucet_add); err != nil {
// 读出水龙头信息, iaa地址:conf.AirDropAddr
if faucet_info, err = account.GetAccountInfo(conf.AirDropAddr); err != nil {
fmt.Println("GetAccountInfo error !!!!")
return err
}
sequence, _ := helper.StrToInt(faucet_info.Value.Sequence)
sequence := faucet_info.Value.Sequence
fmt.Printf("No.2 Get faucet sequence : %d \n", sequence)

//构造转账交易
req := types.TransferTxReq{
Amount: conf.AirDropAmount,
Recipient: "",//faucet_info.Value.Address,
BaseTx: types.BaseTx{
LocalAccountName: faucet_name,
Password: constants.KeyPassword,
ChainID: conf.ChainId,
AccountNumber: faucet_info.Value.AccountNumber,
Sequence: helper.IntToStr(sequence),
Gas: conf.AirDropGas,
Fees: conf.AirDropFee,
Memo: "airdrop token",
},
Amount: conf.AirDropAmount, //如果不是固定值,后面会重新赋值
ChainID: conf.AirDropChainId,
Sequence: 1,//sequence,
SenderAddr: conf.AirDropAddr,
SenderSeed: conf.AirDropSeed,
Mode: "", //调试的时候可以用 "commit=true",
}

//判断余额
faucetBalance, _ := account.ParseCoins(helper.IrisattoToIris(faucet_info.Value.Coins))
//faucetBalance, _ := account.ParseCoins(helper.IrisattoToIris(faucet_info.Value.Coins))
faucetBalance, _ := account.ParseCoins("")
minBalance, _ := account.ParseCoins(conf.AirDropAmount)
minBalance = minBalance+10
minBalance = minBalance + 10
if faucetBalance < minBalance {
return fmt.Errorf("Faucet balance = %f iris, not enough balance for stress test! \n", faucetBalance)
}
fmt.Printf("No.3 faucetBalance : %f \n", faucetBalance)

fmt.Printf("No.4 Transfer balance : %s to accounts \n",conf.AirDropAmount)
for i, _ := range airdrop_list{
if !helper.IsCellEmpty(xlsx, airdrop_list[i]){
index := helper.IntToStr(airdrop_list[i].Pos)
fmt.Println("G"+index+" is not empty!")
continue
}

////查重
//if (record_list[airdrop_list[i].Address] != "") {
// fmt.Println("Duplicated transfer : "+req.Recipient+" to "+airdrop_list[i].Address)
// airdrop_list[i].Status = "Duplicated"
// airdrop_list[i].Hash = ""
// airdrop_list[i].TransactionTime = ""
// airdrop_list[i].Amount = ""
// helper.WriteAddressList(xlsx, airdrop_list[i])
// continue
//}

//随机金额
if conf.AirDropRandom {
if req.Amount, err = account.RandomCoin(conf.AirDropAmount); err != nil {
return err
}
}

req.Recipient = airdrop_list[i].Address
for i := range airdrop_list {
req.Amount = airdrop_list[i].Amount //如果是固定值,这里可以注释掉
req.RecipientAddr = airdrop_list[i].Address

//转账
if txRes, err := tx.SendTx(req, faucet_info.Value.Address, false); err != nil {
if txRes, err := tx.SendTx(req); err != nil {
//转账失败,break
fmt.Println(err.Error())

airdrop_list[i].Status = "Error"
airdrop_list[i].Hash = err.Error()
airdrop_list[i].TransactionTime = ""
airdrop_list[i].Amount = ""
helper.WriteAddressList(xlsx, airdrop_list[i])

break
} else {
fmt.Printf("(%d) Send %s to %s ok! \n", i+1,req.Amount, airdrop_list[i].Address)
//转账成功
fmt.Printf("(%d) Send %s iris to %s ok! \n", i+1, req.Amount, airdrop_list[i].Address)

sequence++
req.BaseTx.Sequence = helper.IntToStr(sequence)
req.Sequence++
airdrop_list[i].Status = ""
airdrop_list[i].Hash = txRes.Hash
airdrop_list[i].TransactionTime = time.Now().UTC().Format(time.UnixDate)
airdrop_list[i].Amount = req.Amount

//把数据都写到内存列表中
helper.WriteAddressList(xlsx, airdrop_list[i])
time.Sleep(time.Duration(100)*time.Millisecond)
time.Sleep(time.Duration(100) * time.Millisecond)
}
}

fmt.Println("-------------\nSend TX ok, wait 15 seconds for Check TX !\n-------------")
time.Sleep(time.Duration(15)*time.Second)
time.Sleep(time.Duration(15) * time.Second)

fmt.Println("No.5 Check if TX succeeed \n")
for _, sub := range airdrop_list{
if sub.Status != "" || sub.Hash == ""{
fmt.Println("No.4 Check if TX succeeed \n")
for i, sub := range airdrop_list {
if sub.Status != "" || sub.Hash == "" {
continue
}

if err := tx.CheckTx(sub.Hash); err != nil {
fmt.Println("Check TX Error : "+sub.Address+" "+ sub.Hash)
if err := tx.CheckTx(sub.Hash); err != nil {
fmt.Printf("(%d) Check TX Error : "+sub.Address+" "+sub.Hash+"\n", i+1)
sub.Status = "CheckTXError"
}else{
fmt.Println(sub.Address+" "+ sub.Hash + " Check TX OK !!")
} else {
fmt.Printf("(%d) "+sub.Address+" "+sub.Hash+" Check TX OK !!\n", i+1)
sub.Status = "Succeed"
}

//最终把所有数据都写到内存列表中
helper.WriteAddressList(xlsx, sub)
}

//hash写c列 结果写d列, 注意data.xlsx要关闭
if err = helper.SaveAddressList(xlsx, conf.AirDropXlsx); err != nil {
fmt.Println("SaveAddressList error !!!! Save result to tempfile!!")
helper.SaveAddressList(xlsx, conf.AirDropXlsxTemp)
fmt.Println("SaveAddressList error !!!! ")
return err
}

Expand All @@ -170,5 +147,3 @@ func AirDrop() *cobra.Command {

return cmd
}


53 changes: 23 additions & 30 deletions cmd/faucet.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import (
// 创建4个用户,并向他们分别转账测试所需的最低iris数量
func FaucetInit() *cobra.Command {
cmd := &cobra.Command{
Use: "init",
Example: "irishub-load init --config-dir=$HOME/config.json",
Use: "init",
Example: "irishub-load init --config-dir=$HOME/config.json",
RunE: func(cmd *cobra.Command, _ []string) error {
var (
err error
Expand All @@ -40,59 +40,55 @@ func FaucetInit() *cobra.Command {

// 读取水龙头账户信息
if faucet_info, err = account.GetAccountInfo(faucet_add); err != nil {
fmt.Println("GetAccountInfo error !!!!"+err.Error())
fmt.Println("GetAccountInfo error !!!!" + err.Error())
return err
}
sequence, _ := helper.StrToInt(faucet_info.Value.Sequence)
sequence := faucet_info.Value.Sequence
fmt.Printf("No.2 Get faucet sequence : %d \n", sequence)

//判断faucet的余额是否大于5倍min-balance(测试所需单个账户的最小余额)
faucetBalance, _ := account.ParseCoins(helper.IrisattoToIris(faucet_info.Value.Coins))
//helper.IrisattoToIris(faucet_info.Value.Coins)
faucetBalance, _ := account.ParseCoins("")
minBalance, _ := account.ParseCoins(conf.MinBalance)
if faucetBalance < minBalance*5 {
return fmt.Errorf("Faucet balance = %f iris, not enough balance for stress test! \n", faucetBalance)
}

//构造转账交易
req := types.TransferTxReq{
Amount: conf.MinBalance,
Recipient: "",
BaseTx: types.BaseTx{
LocalAccountName: faucet_name,
Password: constants.KeyPassword,
ChainID: conf.ChainId,
AccountNumber: faucet_info.Value.AccountNumber,
Sequence: helper.IntToStr(sequence),
Gas: constants.MockDefaultGas,
Fees: constants.MockDefaultFee,
Memo: fmt.Sprintf("transfer token"),
},
Amount: conf.MinBalance,
ChainID: conf.ChainId,
Sequence: 1,//sequence,
SenderAddr: conf.FaucetAddr,
SenderSeed: conf.FaucetSeed,
Mode: "commit=true",
}

//分别给5个账户转账
fmt.Printf("No.3 Transfer balance : %s to 5 accounts \n",conf.MinBalance)
for _, subFaucet := range conf.SubFaucets{
if accInfo, err := account.GetAccountInfo(subFaucet.FaucetAddr); err == nil {
fmt.Printf("No.3 Transfer balance : %s to 5 accounts \n", conf.MinBalance)
for _, subFaucet := range conf.SubFaucets {
//accInfo
if _, err := account.GetAccountInfo(subFaucet.FaucetAddr); err == nil {

//判断余额是否充足,充足则不转账,continue
if balance, _ := account.ParseCoins(helper.IrisattoToIris(accInfo.Value.Coins)); balance >= minBalance {
fmt.Printf("Enough balance for %s, balance %f iris >= minBalance : %f iris \n", subFaucet.FaucetAddr,balance,minBalance)
//helper.IrisattoToIris(accInfo.Value.Coins)
if balance, _ := account.ParseCoins(""); balance >= minBalance {
fmt.Printf("Enough balance for %s, balance %f iris >= minBalance : %f iris \n", subFaucet.FaucetAddr, balance, minBalance)
continue
}
}

req.Recipient = subFaucet.FaucetAddr

req.RecipientAddr = subFaucet.FaucetAddr
//给指定地址转账minBalance ,500000iris
if msg, err := tx.SendTx(req, faucet_info.Value.Address, true); err != nil {
if msg, err := tx.SendTx(req); err != nil {
fmt.Println(msg)
return err
} else {
fmt.Printf("Send %s to %s succeed! \n", conf.MinBalance, subFaucet.FaucetAddr)
//如果转账成功, sequence+1
sequence++
req.BaseTx.Sequence = helper.IntToStr(sequence)
req.Sequence++
}

}

fmt.Println("Init end !!!!")
Expand All @@ -105,6 +101,3 @@ func FaucetInit() *cobra.Command {

return cmd
}



14 changes: 7 additions & 7 deletions cmd/flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ import (
)

const (
FlagConfDir = "config-dir"
FlagConfDir = "config-dir"

FlagTps = "tps"
FlagDuration = "duration"
FlagAccount = "account"
FlagTps = "tps"
FlagDuration = "duration"
FlagAccount = "account"
)

var (
faucetInitSet = pflag.NewFlagSet("", pflag.ContinueOnError)
signTXFlagSet = pflag.NewFlagSet("", pflag.ContinueOnError)
broadcastTXFlagSet = pflag.NewFlagSet("", pflag.ContinueOnError)
faucetInitSet = pflag.NewFlagSet("", pflag.ContinueOnError)
signTXFlagSet = pflag.NewFlagSet("", pflag.ContinueOnError)
broadcastTXFlagSet = pflag.NewFlagSet("", pflag.ContinueOnError)
)

func init() {
Expand Down
Loading