/
sdk.go
121 lines (103 loc) · 2.55 KB
/
sdk.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
116
117
118
119
120
121
package sdk
import (
"errors"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"github.com/hyperledger/fabric-sdk-go/pkg/common/logging"
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
"github.com/hyperledger/fabric-sdk-go/pkg/gateway"
)
var (
wallet *gateway.Wallet
network *gateway.Network
contract *gateway.Contract
err error
channel = "c1"
chaincode = "mycc"
)
func Init() {
os.Setenv("DISCOVERY_AS_LOCALHOST", "true")
logging.SetLevel("fabsdk/core", logging.ERROR)
wallet, err = gateway.NewFileSystemWallet("wallet")
if err != nil {
fmt.Printf("Failed to create wallet: %s\n", err)
os.Exit(1)
}
if !wallet.Exists("appUser") {
err = populateWallet(wallet)
if err != nil {
fmt.Printf("Failed to populate wallet contents: %s\n", err)
os.Exit(1)
}
}
ccpPath := filepath.Join(
"..",
"devnet",
"organizations",
"peerOrganizations",
"org1.develop.com",
"connection-org1.yaml",
)
gw, err := gateway.Connect(
gateway.WithConfig(config.FromFile(filepath.Clean(ccpPath))),
gateway.WithIdentity(wallet, "appUser"),
)
if err != nil {
fmt.Printf("Failed to connect to gateway: %s\n", err)
os.Exit(1)
}
network, err = gw.GetNetwork(channel)
if err != nil {
fmt.Printf("Failed to get network: %s\n", err)
os.Exit(1)
}
contract = network.GetContract(chaincode)
}
func ChannelQuery(fcn string, args ...string) ([]byte, error) {
result, err := contract.EvaluateTransaction(fcn, args...)
return result, err
}
func ChannelExecute(fcn string, args ...string) ([]byte, error) {
result, err := contract.SubmitTransaction(fcn, args...)
return result, err
}
func populateWallet(wallet *gateway.Wallet) error {
credPath := filepath.Join(
"..",
"devnet",
"organizations",
"peerOrganizations",
"org1.develop.com",
"users",
"User1@org1.develop.com",
"msp",
)
certPath := filepath.Join(credPath, "signcerts", "cert.pem")
// read the certificate pem
cert, err := ioutil.ReadFile(filepath.Clean(certPath))
if err != nil {
return err
}
keyDir := filepath.Join(credPath, "keystore")
// there's a single file in this dir containing the private key
files, err := ioutil.ReadDir(keyDir)
if err != nil {
return err
}
if len(files) != 1 {
return errors.New("keystore folder should have contain one file")
}
keyPath := filepath.Join(keyDir, files[0].Name())
key, err := ioutil.ReadFile(filepath.Clean(keyPath))
if err != nil {
return err
}
identity := gateway.NewX509Identity("Org1MSP", string(cert), string(key))
err = wallet.Put("appUser", identity)
if err != nil {
return err
}
return nil
}