示例一:信息公证

简介

chaincode_example01.go 主要实现如下的功能:

  • 初始化,以键值形式存放信息;

  • 允许读取和修改键值。

代码中,首先初始化了 hello_world 的值,并根据请求中的参数创建修改查询链上 key 中的值,本质上实现了一个简单的可修改的键值数据库。

主要函数

  • read:读取key args[0] 的 value;

  • write:创建或修改 key args[0] 的 value;

  • init:初始化 key hello_world 的 value;

  • invoke:根据传递参数类型调用执行相应的 initwrite 函数;

  • query:调用 read 函数查询 args[0] 的 value。

代码运行分析

main 函数作为程序的入口,调用 shim 包的 start 函数,启动 chaincode 引导程序的入口节点。如果报错,则返回。

func main() {
    err := shim.Start(new(SimpleChaincode))
    if err != nil {
        fmt.Printf("Error starting Simple chaincode: %s", err)
    }
}

当智能合约部署在区块链上,可以通过 rest api 进行交互。

三个主要的函数是 initinvokequery。在三个函数中,通过 stub.PutStatestub.GetState 存储访问 ledger 上的键值对。

通过 REST API 操作智能合约

假设以 jim 身份登录 pbft 集群,请求部署该 chaincode 的 json 请求格式为:

目前 path 仅支持 github 上的目录,ctorMsg 中为函数 init 的传参。

调用 invoke 函数的 json 格式为:

其中 name 字段为 deploy 后返回的 message 字段中的字符串。

query 的接口也是类似的。

Last updated

Was this helpful?