forked from FISCO-BCOS/go-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
82 lines (75 loc) · 2.44 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
package main
import (
"encoding/hex"
"fmt"
"log"
"math/big"
"strings"
"github.com/FISCO-BCOS/go-sdk/abi"
"github.com/FISCO-BCOS/go-sdk/client"
"github.com/FISCO-BCOS/go-sdk/conf"
"github.com/FISCO-BCOS/go-sdk/core/types"
kvtable "github.com/FISCO-BCOS/go-sdk/examples" // import kvtabletest
)
func main() {
configs, err := conf.ParseConfigFile("config.toml")
if err != nil {
log.Fatal(err)
}
config := &configs[0]
client, err := client.Dial(config)
if err != nil {
log.Fatal(err)
}
// deploy contract
fmt.Println("-------------------starting deploy contract-----------------------")
address, tx, instance, err := kvtable.DeployKVTableTest(client.GetTransactOpts(), client)
if err != nil {
log.Fatal(err)
}
fmt.Println("contract address: ", address.Hex()) // the address should be saved
fmt.Println("transaction hash: ", tx.Hash().Hex())
_ = 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_price := big.NewInt(6000)
tx, receipt, err := kvtabletestSession.Set(id, item_price, item_name) // call set API
if err != nil {
log.Fatal(err)
}
fmt.Printf("tx sent: %s\n", tx.Hash().Hex())
setedLines, err := parseOutput(kvtable.KVTableTestABI, "set", receipt)
if err != nil {
log.Fatalf("error when transfer string to int: %v\n", err)
}
fmt.Printf("seted lines: %v\n", setedLines.Int64())
// invoke Get to query info
fmt.Println("\n-------------------starting invoke Get to query info-----------------------")
bool, item_price, item_name, err := kvtabletestSession.Get(id) // call get API
if err != nil {
log.Fatal(err)
}
if !bool {
log.Fatalf("id:%v is not found \n", id)
}
fmt.Printf("id: %v, item_price: %v, item_name: %v \n", id, item_price, item_name)
}
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
}