-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
115 lines (104 loc) · 2.96 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package main
import (
"fmt"
"github.com/abeychain/go-abey/log"
"github.com/abeychain/go-abey/rpc"
"math/big"
"strings"
"time"
)
var (
//transaction type false normal tx; true other tx
txType = true
//get all account
account []string
//uint
ether int64 = 1000000000000000000
)
// get par
// ./main 10 1000000 1000 0 0 8888 1
func main() {
fmt.Println("go into main")
ip := "127.0.0.1:8888"
send(ip)
}
//send transaction init
func send(ip string) {
//dial abey
client, err := rpc.Dial("http://" + ip)
defer client.Close()
if err != nil {
fmt.Println("Dail:", ip, err.Error())
return
}
err = client.Call(&account, "abey_accounts")
if err != nil {
fmt.Println("abey_accounts Error", err.Error())
return
}
if len(account) == 0 {
fmt.Println("no account")
return
}
if txType {
getBalance(client, 3)
fmt.Println("go into sendAbeyRawTransaction")
fmt.Println("========tx1 start==========")
sendAbeyRawTransaction(client, account[0], account[1], "", "0xde0b6b3a7640000", "0x0")
getBalance(client, 3)
fmt.Println("========tx2 start==========")
sendAbeyRawTransaction(client, account[0], account[2], account[1], "0xde0b6b3a7640000", "0x0")
getBalance(client, 3)
fmt.Println("========tx3 start==========")
sendAbeyRawTransaction(client, account[0], account[2], account[1], "0xde0b6b3a7640000", "0xde0b6b3a7640000")
getBalance(client, 3)
fmt.Println("========tx4 start==========")
sendAbeyRawTransaction(client, account[0], account[2], "", "0xde0b6b3a7640000", "0xde0b6b3a7640000")
getBalance(client, 3)
return
}
}
func getBalance(client *rpc.Client, index int) {
time.Sleep(time.Second * 1)
var result string
for i := 0; i < index; i++ {
err := client.Call(&result, "abey_getBalance", account[i], "latest")
if err != nil {
log.Error("getBalance", "i", i, "error", err)
}
fmt.Println("account[", i, "](", account[i], ")= ", getBalanceValue(result).Uint64())
}
}
func sendAbeyRawTransaction(client *rpc.Client, from string, to string, payment string, value string, fee string) (string, error) {
mapData := make(map[string]interface{})
mapData["from"] = from
mapData["to"] = to
if payment != "" {
mapData["payment"] = payment
}
mapData["value"] = value
mapData["fee"] = fee
var reBool bool
err := client.Call(&reBool, "personal_unlockAccount", from, "admin", 9000000)
if payment != "" {
err = client.Call(&reBool, "personal_unlockAccount", payment, "admin", 9000000)
}
if err != nil {
log.Error("personal_unlockAccount", "err", err)
}
var result string
err = client.Call(&result, "abey_sendTransaction", mapData)
if err != nil {
log.Error("abey_sendTransaction", "err", err)
}
return result, err
}
func getBalanceValue(hex string) *big.Int {
if strings.HasPrefix(hex, "0x") {
hex = strings.TrimPrefix(hex, "0x")
}
value, _ := new(big.Int).SetString(hex, 16)
//balance := new(big.Int).Set(value)
//fmt.Println("abey_getBalance Ok:", balance.Div(balance, big.NewInt(ether)), " value ", value, " hex ", hex)
return value
}