新建 /opt/chaincode/ 目录; 在 /opt/chaincode/ 目录下,执行 go mod init HelloWorld 获取依赖,并执行 vim HelloWorld.go 新建 HelloWorld.go 文件,代码参考上面的示例,实现初始化账本,读取账本以及修改账本数据;
时间: 2023-06-23 09:10:26 浏览: 73
嵌入式系统/ARM技术中的linux的根目录下各个目录的基本含义
好的,以下是具体步骤:
1. 新建 /opt/chaincode/ 目录:
```
mkdir /opt/chaincode/
```
2. 在 /opt/chaincode/ 目录下执行 go mod init HelloWorld:
```
cd /opt/chaincode/
go mod init HelloWorld
```
3. 执行 vim HelloWorld.go 新建 HelloWorld.go 文件:
```
vim HelloWorld.go
```
4. 在编辑器中输入以下代码:
```go
package main
import (
"fmt"
"github.com/hyperledger/fabric-contract-api-go/contractapi"
)
type HelloWorldContract struct {
contractapi.Contract
}
func (c *HelloWorldContract) InitLedger(ctx contractapi.TransactionContextInterface) error {
err := ctx.GetStub().PutState("hello", []byte("world"))
if err != nil {
return fmt.Errorf("failed to put to world state. %v", err)
}
return nil
}
func (c *HelloWorldContract) ReadLedger(ctx contractapi.TransactionContextInterface) (string, error) {
value, err := ctx.GetStub().GetState("hello")
if err != nil {
return "", fmt.Errorf("failed to read from world state: %v", err)
}
if value == nil {
return "", fmt.Errorf("the asset %s does not exist", "hello")
}
return string(value), nil
}
func (c *HelloWorldContract) WriteLedger(ctx contractapi.TransactionContextInterface, value string) error {
err := ctx.GetStub().PutState("hello", []byte(value))
if err != nil {
return fmt.Errorf("failed to put to world state. %v", err)
}
return nil
}
func main() {
chaincode, err := contractapi.NewChaincode(&HelloWorldContract{})
if err != nil {
fmt.Printf("Error creating chaincode: %s", err.Error())
return
}
if err := chaincode.Start(); err != nil {
fmt.Printf("Error starting chaincode: %s", err.Error())
}
}
```
5. 保存并退出编辑器。
现在,我们已经在 /opt/chaincode 目录下创建了一个名为 HelloWorld 的 Go 模块,并编写了用于初始化账本、读取账本和修改账本数据的智能合约代码。
阅读全文