fabric-samples/off_chain_data/application-go/transact.go
Stanislav Jakuschevskij 095bf304b4
Implement store
Persisting ledger writes to the file system into the store.log file in
the application-go directory. The write values are converted from bytes
to a string when the read write sets are unwrapped in the transaction
processor.

Signed-off-by: Stanislav Jakuschevskij <stas@two-giants.com>
2025-02-24 13:14:47 +01:00

61 lines
1.4 KiB
Go

package main
import (
"fmt"
atb "offChainData/contract"
"offChainData/utils"
"github.com/hyperledger/fabric-gateway/pkg/client"
"google.golang.org/grpc"
)
func transact(clientConnection *grpc.ClientConn) {
id, options := newConnectOptions(clientConnection)
gateway, err := client.Connect(id, options...)
if err != nil {
panic((err))
}
defer gateway.Close()
contract := gateway.GetNetwork(channelName).GetContract(chaincodeName)
smartContract := atb.NewAssetTransferBasic(contract)
app := newTransactApp(smartContract)
app.run()
}
type transactApp struct {
smartContract *atb.AssetTransferBasic
batchSize uint
}
func newTransactApp(smartContract *atb.AssetTransferBasic) *transactApp {
return &transactApp{smartContract, 10}
}
func (t *transactApp) run() {
for i := 0; i < int(t.batchSize); i++ {
t.transact()
}
}
func (t *transactApp) transact() {
anAsset := atb.NewAsset()
t.smartContract.CreateAsset(anAsset)
fmt.Printf("\nCreated asset %s\n", anAsset.ID)
// Transfer randomly 1 in 2 assets to a new owner.
if utils.RandomInt(2) == 0 {
newOwner := utils.DifferentElement(atb.Owners, anAsset.Owner)
oldOwner := t.smartContract.TransferAsset(anAsset.ID, newOwner)
fmt.Printf("Transferred asset %s from %s to %s\n", anAsset.ID, oldOwner, newOwner)
}
// Delete randomly 1 in 4 created assets.
if utils.RandomInt(4) == 0 {
t.smartContract.DeleteAsset(anAsset.ID)
fmt.Printf("Deleted asset %s\n", anAsset.ID)
}
}