forked from FISCO-BCOS/go-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
77 lines (70 loc) · 2.6 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
package main
import (
"context"
"encoding/hex"
"fmt"
"math/big"
"strings"
"github.com/FISCO-BCOS/go-sdk/abi"
"github.com/FISCO-BCOS/go-sdk/client"
"github.com/FISCO-BCOS/go-sdk/core/types"
kvtable "github.com/FISCO-BCOS/go-sdk/examples" // import kvtabletest
"github.com/sirupsen/logrus"
)
func main() {
privateKey, _ := hex.DecodeString("145e247e170ba3afd6ae97e88f00dbc976c2345d511b0f6713355d19d8b80b58")
config := &client.Config{IsSMCrypto: false, GroupID: "group0", PrivateKey: privateKey,
Host: "127.0.0.1", Port: 20200, TLSCaFile: "./ca.crt", TLSKeyFile: "./sdk.key", TLSCertFile: "./sdk.crt"}
client, err := client.DialContext(context.Background(), config)
if err != nil {
logrus.Fatal(err)
}
// deploy contract
fmt.Println("-------------------starting deploy contract-----------------------")
address, tx, instance, err := kvtable.DeployKVTableTest(client.GetTransactOpts(), client)
if err != nil {
logrus.Fatal(err)
}
fmt.Println("contract address: ", address.Hex()) // the address should be saved
fmt.Println("transaction hash: ", tx.TransactionHash)
_ = instance
// invoke Set to insert info
fmt.Println("\n-------------------starting invoke Set to insert info-----------------------")
kvtabletestSession := &kvtable.KVTableTestSession{Contract: instance, CallOpts: *client.GetCallOpts(), TransactOpts: *client.GetTransactOpts()}
id := "100010001001"
item_name := "Laptop"
item_age := "29"
_, receipt, err := kvtabletestSession.Insert(id, item_name, item_age) // call set API
if err != nil {
logrus.Fatal(err)
}
fmt.Printf("tx sent: %s\n", receipt.TransactionHash)
//setedLines, err := parseOutput(kvtable.KVTableTestABI, "insert", receipt)
//if err != nil {
// logrus.Fatalf("error when transfer string to int: %v\n", err)
//}
//fmt.Printf("seted lines: %v\n", setedLines.String())
// invoke Get to query info
fmt.Println("\n-------------------starting invoke Get to query info-----------------------")
item_name, item_age, err = kvtabletestSession.Select(id) // call get API
if err != nil {
logrus.Fatal(err)
}
fmt.Printf("id: %v, item_name: %v, item_age: %v \n", id, item_name, item_age)
}
func parseOutput(abiStr, name string, receipt *types.Receipt) (*big.Int, error) {
parsed, err := abi.JSON(strings.NewReader(abiStr))
if err != nil {
fmt.Printf("parse ABI failed, err: %v", err)
}
var ret *big.Int
b, err := hex.DecodeString(receipt.Output[2:])
if err != nil {
return nil, fmt.Errorf("decode receipt.Output[2:] failed, err: %v", err)
}
err = parsed.Unpack(&ret, name, b)
if err != nil {
return nil, fmt.Errorf("unpack %v failed, err: %v", name, err)
}
return ret, nil
}