mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
* Refactor Go files 1. replace deprecated ioutil functions (ioutil is deprecated since Go 1.16) 2. fix variable names that collide with imported package name 3. fix typos Also update Go version specified by Go modules to ensure a Go version is used in which ioutil is deprecated and replacement functions are available in os and io packages. Signed-off-by: Tommy TIAN <xtianae@connect.ust.hk> Co-authored-by: Mark S. Lewis <mark_lewis@uk.ibm.com> * Specify go 1.18 instead of go 1.19 in go.mod files Signed-off-by: Mark S. Lewis <mark_lewis@uk.ibm.com> Signed-off-by: Tommy TIAN <xtianae@connect.ust.hk> Signed-off-by: Mark S. Lewis <mark_lewis@uk.ibm.com> Co-authored-by: Tommy TIAN <xtianae@connect.ust.hk>
154 lines
4.2 KiB
Go
154 lines
4.2 KiB
Go
/*
|
|
Copyright 2020 IBM All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
|
|
"github.com/hyperledger/fabric-sdk-go/pkg/gateway"
|
|
)
|
|
|
|
func main() {
|
|
log.Println("============ application-golang starts ============")
|
|
|
|
err := os.Setenv("DISCOVERY_AS_LOCALHOST", "true")
|
|
if err != nil {
|
|
log.Fatalf("Error setting DISCOVERY_AS_LOCALHOST environment variable: %v", err)
|
|
}
|
|
|
|
wallet, err := gateway.NewFileSystemWallet("wallet")
|
|
if err != nil {
|
|
log.Fatalf("Failed to create wallet: %v", err)
|
|
}
|
|
|
|
if !wallet.Exists("appUser") {
|
|
err = populateWallet(wallet)
|
|
if err != nil {
|
|
log.Fatalf("Failed to populate wallet contents: %v", err)
|
|
}
|
|
}
|
|
|
|
ccpPath := filepath.Join(
|
|
"..",
|
|
"..",
|
|
"test-network",
|
|
"organizations",
|
|
"peerOrganizations",
|
|
"org1.example.com",
|
|
"connection-org1.yaml",
|
|
)
|
|
|
|
gw, err := gateway.Connect(
|
|
gateway.WithConfig(config.FromFile(filepath.Clean(ccpPath))),
|
|
gateway.WithIdentity(wallet, "appUser"),
|
|
)
|
|
if err != nil {
|
|
log.Fatalf("Failed to connect to gateway: %v", err)
|
|
}
|
|
defer gw.Close()
|
|
|
|
network, err := gw.GetNetwork("mychannel")
|
|
if err != nil {
|
|
log.Fatalf("Failed to get network: %v", err)
|
|
}
|
|
|
|
contract := network.GetContract("basic")
|
|
|
|
log.Println("--> Submit Transaction: InitLedger, function creates the initial set of assets on the ledger")
|
|
result, err := contract.SubmitTransaction("InitLedger")
|
|
if err != nil {
|
|
log.Fatalf("Failed to Submit transaction: %v", err)
|
|
}
|
|
log.Println(string(result))
|
|
|
|
log.Println("--> Evaluate Transaction: GetAllAssets, function returns all the current assets on the ledger")
|
|
result, err = contract.EvaluateTransaction("GetAllAssets")
|
|
if err != nil {
|
|
log.Fatalf("Failed to evaluate transaction: %v", err)
|
|
}
|
|
log.Println(string(result))
|
|
|
|
log.Println("--> Submit Transaction: CreateAsset, creates new asset with ID, color, owner, size, and appraisedValue arguments")
|
|
result, err = contract.SubmitTransaction("CreateAsset", "asset13", "yellow", "5", "Tom", "1300")
|
|
if err != nil {
|
|
log.Fatalf("Failed to Submit transaction: %v", err)
|
|
}
|
|
log.Println(string(result))
|
|
|
|
log.Println("--> Evaluate Transaction: ReadAsset, function returns an asset with a given assetID")
|
|
result, err = contract.EvaluateTransaction("ReadAsset", "asset13")
|
|
if err != nil {
|
|
log.Fatalf("Failed to evaluate transaction: %v\n", err)
|
|
}
|
|
log.Println(string(result))
|
|
|
|
log.Println("--> Evaluate Transaction: AssetExists, function returns 'true' if an asset with given assetID exist")
|
|
result, err = contract.EvaluateTransaction("AssetExists", "asset1")
|
|
if err != nil {
|
|
log.Fatalf("Failed to evaluate transaction: %v\n", err)
|
|
}
|
|
log.Println(string(result))
|
|
|
|
log.Println("--> Submit Transaction: TransferAsset asset1, transfer to new owner of Tom")
|
|
_, err = contract.SubmitTransaction("TransferAsset", "asset1", "Tom")
|
|
if err != nil {
|
|
log.Fatalf("Failed to Submit transaction: %v", err)
|
|
}
|
|
|
|
log.Println("--> Evaluate Transaction: ReadAsset, function returns 'asset1' attributes")
|
|
result, err = contract.EvaluateTransaction("ReadAsset", "asset1")
|
|
if err != nil {
|
|
log.Fatalf("Failed to evaluate transaction: %v", err)
|
|
}
|
|
log.Println(string(result))
|
|
log.Println("============ application-golang ends ============")
|
|
}
|
|
|
|
func populateWallet(wallet *gateway.Wallet) error {
|
|
log.Println("============ Populating wallet ============")
|
|
credPath := filepath.Join(
|
|
"..",
|
|
"..",
|
|
"test-network",
|
|
"organizations",
|
|
"peerOrganizations",
|
|
"org1.example.com",
|
|
"users",
|
|
"User1@org1.example.com",
|
|
"msp",
|
|
)
|
|
|
|
certPath := filepath.Join(credPath, "signcerts", "cert.pem")
|
|
// read the certificate pem
|
|
cert, err := os.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 := os.ReadDir(keyDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(files) != 1 {
|
|
return fmt.Errorf("keystore folder should have contain one file")
|
|
}
|
|
keyPath := filepath.Join(keyDir, files[0].Name())
|
|
key, err := os.ReadFile(filepath.Clean(keyPath))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
identity := gateway.NewX509Identity("Org1MSP", string(cert), string(key))
|
|
|
|
return wallet.Put("appUser", identity)
|
|
}
|