func main() { // ws := rpcclient.NewWSClient("127.0.0.1:46657", "/websocket") ws := rpcclient.NewWSClient("192.168.99.100:46657", "/websocket") chainID := "test_chain_id" _, err := ws.Start() if err != nil { Exit(err.Error()) } var counter = 0 // Read a bunch of responses go func() { for { res, ok := <-ws.ResultsCh if !ok { break } fmt.Println(counter, "res:", Blue(string(res))) } }() // Get the root account root := tests.PrivAccountFromSecret("test") sequence := int(0) // Make a bunch of PrivAccounts privAccounts := tests.RandAccounts(1000, 1000000, 0) privAccountSequences := make(map[string]int) // Send coins to each account for i := 0; i < len(privAccounts); i++ { privAccount := privAccounts[i] tx := &types.SendTx{ Inputs: []types.TxInput{ types.TxInput{ Address: root.Account.PubKey.Address(), PubKey: root.Account.PubKey, // TODO is this needed? Coins: types.Coins{{"", 1000002}}, Sequence: sequence, }, }, Outputs: []types.TxOutput{ types.TxOutput{ Address: privAccount.Account.PubKey.Address(), Coins: types.Coins{{"", 1000000}}, }, }, } sequence += 1 // Sign request signBytes := tx.SignBytes(chainID) sig := root.PrivKey.Sign(signBytes) tx.Inputs[0].Signature = sig //fmt.Println("tx:", tx) // Write request txBytes := wire.BinaryBytes(struct{ types.Tx }{tx}) request := rpctypes.NewRPCRequest("fakeid", "broadcast_tx_sync", Arr(txBytes)) reqBytes := wire.JSONBytes(request) //fmt.Print(".") err := ws.WriteMessage(websocket.TextMessage, reqBytes) if err != nil { Exit("writing websocket request: " + err.Error()) } } // Now send coins between these accounts for { counter += 1 time.Sleep(time.Millisecond * 10) randA := RandInt() % len(privAccounts) randB := RandInt() % len(privAccounts) if randA == randB { continue } privAccountA := privAccounts[randA] privAccountASequence := privAccountSequences[privAccountA.Account.PubKey.KeyString()] privAccountSequences[privAccountA.Account.PubKey.KeyString()] = privAccountASequence + 1 privAccountB := privAccounts[randB] tx := &types.SendTx{ Inputs: []types.TxInput{ types.TxInput{ Address: privAccountA.Account.PubKey.Address(), PubKey: privAccountA.Account.PubKey, Coins: types.Coins{{"", 3}}, Sequence: privAccountASequence + 1, }, }, Outputs: []types.TxOutput{ types.TxOutput{ Address: privAccountB.Account.PubKey.Address(), Coins: types.Coins{{"", 1}}, }, }, } // Sign request signBytes := tx.SignBytes(chainID) sig := privAccountA.PrivKey.Sign(signBytes) tx.Inputs[0].Signature = sig //fmt.Println("tx:", tx) // Write request txBytes := wire.BinaryBytes(struct{ types.Tx }{tx}) request := rpctypes.NewRPCRequest("fakeid", "broadcast_tx_sync", Arr(txBytes)) reqBytes := wire.JSONBytes(request) //fmt.Print(".") err := ws.WriteMessage(websocket.TextMessage, reqBytes) if err != nil { Exit("writing websocket request: " + err.Error()) } } ws.Stop() }
func testSequence() { eyesCli := eyescli.NewLocalClient() chainID := "test_chain_id" bcApp := app.NewBasecoin(eyesCli) bcApp.SetOption("base/chainID", chainID) fmt.Println(bcApp.Info()) // Get the test account test1PrivAcc := tests.PrivAccountFromSecret("test1") test1Acc := test1PrivAcc.Account test1Acc.Balance = types.Coins{{"", 1 << 53}} fmt.Println(bcApp.SetOption("base/account", string(wire.JSONBytes(test1Acc)))) sequence := int(1) // Make a bunch of PrivAccounts privAccounts := tests.RandAccounts(1000, 1000000, 0) privAccountSequences := make(map[string]int) // Send coins to each account for i := 0; i < len(privAccounts); i++ { privAccount := privAccounts[i] tx := &types.SendTx{ Fee: 2, Gas: 2, Inputs: []types.TxInput{ types.TxInput{ Address: test1Acc.PubKey.Address(), PubKey: test1Acc.PubKey, // TODO is this needed? Coins: types.Coins{{"", 1000002}}, Sequence: sequence, }, }, Outputs: []types.TxOutput{ types.TxOutput{ Address: privAccount.Account.PubKey.Address(), Coins: types.Coins{{"", 1000000}}, }, }, } sequence += 1 // Sign request signBytes := tx.SignBytes(chainID) sig := test1PrivAcc.PrivKey.Sign(signBytes) tx.Inputs[0].Signature = sig // fmt.Printf("ADDR: %X -> %X\n", tx.Inputs[0].Address, tx.Outputs[0].Address) // Write request txBytes := wire.BinaryBytes(struct{ types.Tx }{tx}) res := bcApp.AppendTx(txBytes) if res.IsErr() { Exit("AppendTx error: " + res.Error()) } } fmt.Println("-------------------- RANDOM SENDS --------------------") // Now send coins between these accounts for i := 0; i < 10000; i++ { randA := RandInt() % len(privAccounts) randB := RandInt() % len(privAccounts) if randA == randB { continue } privAccountA := privAccounts[randA] privAccountASequence := privAccountSequences[privAccountA.Account.PubKey.KeyString()] privAccountSequences[privAccountA.Account.PubKey.KeyString()] = privAccountASequence + 1 privAccountB := privAccounts[randB] tx := &types.SendTx{ Fee: 2, Gas: 2, Inputs: []types.TxInput{ types.TxInput{ Address: privAccountA.Account.PubKey.Address(), PubKey: privAccountA.Account.PubKey, Coins: types.Coins{{"", 3}}, Sequence: privAccountASequence + 1, }, }, Outputs: []types.TxOutput{ types.TxOutput{ Address: privAccountB.Account.PubKey.Address(), Coins: types.Coins{{"", 1}}, }, }, } // Sign request signBytes := tx.SignBytes(chainID) sig := privAccountA.PrivKey.Sign(signBytes) tx.Inputs[0].Signature = sig // fmt.Printf("ADDR: %X -> %X\n", tx.Inputs[0].Address, tx.Outputs[0].Address) // Write request txBytes := wire.BinaryBytes(struct{ types.Tx }{tx}) res := bcApp.AppendTx(txBytes) if res.IsErr() { Exit("AppendTx error: " + res.Error()) } } }