本文作者:陈俊飞
一、编写智能合约代码HelloWorld.go,go语言实现,代码很简单,每个合约包含两个方法,Init、Invoke。
package main
import (
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
"github.com/hyperledger/fabric/protos/peer"
)
type Helloworld struct {
}
func (t * Helloworld) Init(stub shim.ChaincodeStubInterface) peer.Response{
args:= stub.GetStringArgs()
err := stub.PutState(args[0],[]byte(args[1]))
if err != nil {
shim.Error(err.Error())
}
return shim.Success(nil)
}
func (t *Helloworld) Invoke (stub shim.ChaincodeStubInterface) peer.Response{
fn, args := stub.GetFunctionAndParameters()
if fn =="set" {
return t.set(stub, args)
}else if fn == "get"{
return t.get(stub , args)
}
return shim.Error("Invoke fn error")
}
func (t *Helloworld) set(stub shim.ChaincodeStubInterface , args []string) peer.Response{
err := stub.PutState(args[0],[]byte(args[1]))
if err != nil {
return shim.Error(err.Error())
}
return shim.Success(nil)
}
func (t *Helloworld) get (stub shim.ChaincodeStubInterface, args [] string) peer.Response{
value, err := stub.GetState(args[0])
if err != nil {
return shim.Error(err.Error())
}
return shim.Success(value)
}
func main(){
err := shim.Start(new(Helloworld))
if err != nil {
fmt.Println("start error")
}
}
二、将代码文件夹拷贝到fabric-samples下面的chaincode文件夹
![8c91840c2acca78511d73c8066b7ae5c.png](https://i-blog.csdnimg.cn/blog_migrate/34ccb4d1937384883e32ab74eb9e0f28.png)
三、进入到fabric-samples/chaincode-docker-devmode,启动网络
docker-compose -f docker-compose-simple.yaml up
四、新开一个终端,编译链码,并启动
docker exec -it chaincode bash
cd hello/
go build
![0838de383d05a49a042b9450f9acf810.png](https://i-blog.csdnimg.cn/blog_migrate/973be6c9d8177f5bbb0c834c4f13f2aa.png)
CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./hello
![f5be36210a4ffc6b27a50c162c66fdb3.png](https://i-blog.csdnimg.cn/blog_migrate/425003750692d2bcfa32ab2b92aa3bc9.png)
五、新开一个终端,进入docker容器,操作链码
docker exec -it cli bash
安装链码
peer chaincode install -p chaincodedev/chaincode/hello -n mycc -v 0
![b0bb35cc8decec07f9d3400f71f96f0e.png](https://i-blog.csdnimg.cn/blog_migrate/3590b92df6e6391861c2e92e28b90089.jpeg)
实例化链码
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["str","HelloWorld"]}' -C myc
![827b7e4416c7a137e0186da70ab92a48.png](https://i-blog.csdnimg.cn/blog_migrate/b4ddcdfc4f03230399550c378d3c2742.jpeg)
查询链码
peer chaincode query -n mycc -c '{"Args":["get","str"]}' -C myc
![a010302f92013c6de11f86ce00e4a3b8.png](https://i-blog.csdnimg.cn/blog_migrate/8b5bb90fa2352bc6e121b224d575c096.png)
修改链码
peer chaincode invoke -n mycc -c '{"Args":["set","str","newHelloWorld"]}' -C myc
![aa2c9733153d561eaad3ee9f78b821aa.png](https://i-blog.csdnimg.cn/blog_migrate/ca0c9a200f2171406d894aa5287a301f.png)
再次查询
![fac75971157f79671f1ee64b0720d82f.png](https://i-blog.csdnimg.cn/blog_migrate/49eaf5cf30956d46dd4e04e4151c82e3.png)
至此,第一个智能合约demo完成了。
原文链接:https://learnblockchain.cn/......
作者主页:https://learnblockchain.cn/... ,欢迎阅读作者更多好文
登链社区 — 区块链技术爱好者的家园