智能合约DAPP系统开发代码流程部署方案
业务逻辑invoke函数实现了业务逻辑中的资产转移,将A的资产转移X个单位给B。
//将A的资产转移X个单位给B的交易
//invoke实现了两个键之间的value转移,输入参数为KEY1_NAME,KEY2_NAME,VALUE
func(t*SimpleChaincode)invoke(stub shim.ChaincodeStubInterface,args[]string)peer.Response{
var A,B string//Entities
var Aval,Bval int//Asset holdings
var X int//Transaction value
var err error
if len(args)!=3{
return shim.Error("Incorrect number of arguments.Expecting 3")
}
A=args[0]
B=args[1]
//获取A、B的当前资产情况
Avalbytes,err:=stub.GetState(A)
if err!=nil{
return shim.Error("Failed to get state")
}
if Avalbytes==nil{
return shim.Error("Entity not found")
}
Aval,_=strconv.Atoi(string(Avalbytes))
Bvalbytes,err:=stub.GetState(B)
if err!=nil{
return shim.Error("Failed to get state")
}
if Bvalbytes==nil{
return shim.Error("Entity not found")
}
Bval,_=strconv.Atoi(string(Bvalbytes))
//执行
X,err=strconv.Atoi(args[2])
if err!=nil{
return shim.Error("Invalid transaction amount,expecting a integer value")
}
//业务逻辑:实现资产的转移
Aval=Aval-X
Bval=Bval+X
fmt.Printf("Aval=%d,Bval=%dn",Aval,Bval)
//将更新后的资产更新到账本中
err=stub.PutState(A,[]byte(strconv.Itoa(Aval)))
if err!=nil{
return shim.Error(err.Error())
}
err=stub.PutState(B,[]byte(strconv.Itoa(Bval)))
if err!=nil{
return shim.Error(err.Error())
}
return shim.Success(nil)
}
相关文章
- 深入浅出Go泛型之泛型使用三步曲
- GoLand/IntelliJ中提高研发效率的5个使用技巧
- Go泛型实战 | 如何在结构体中使用泛型
- 程序员必须知道的7种数据结构
- 硬核,图解bufio包系列之读取原理
- SketchUp 2021、2022、2023下载安装教程
- Pencil+ 4.0.3 for Maya下载安装教程
- 转录组分析实战第一天就踩的坑——sed与换行符的恩怨
- bufio包系列之一个误用bufio读取的示例
- Go错误集锦 | 字符串格式化竟然能引起死锁
- Go错误集锦 | append操作造成数据竞争
- Go错误集锦 | map中因mutex使用不当导致的数据竞争
- Go实战 | 实现http请求排队处理
- AirBuddy for Mac(AirPods耳机管理)
- Go实战 | 基于Prometheus+Grafana搭建完整的监控系统
- 「Go工具箱」一个能下载各种视频的开源工具
- 「Go工具箱」强烈推荐:一个能让http请求回放的工具
- cad2017下载AutoCAD2017-2024安装教程
- 「Go工具箱」一个让终端内容彩色化的工具:Color
- 「Go工具箱」重磅推荐:一个国产的,star高达12k+的操作excel的包:Excelize