/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package main
import (
"bytes"
"encoding/json"
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
pb "github.com/hyperledger/fabric/protos/peer"
)
type PayChaincode struct {
}
type Pay struct {
UserId string `json:"user_id"` //用户id
OrderId string `json:"order_id"` //订单id
PayTransID string `json:"pay_trans_id"` //支付平台交易id
BuyProduct string `json:"buy_product"` //购买产品
TransAmount string `json:"trans_amount"` //交易金额
TransTime string `json:"trans_time"` //交易时间
}
func (t *PayChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {
fmt.Println("pay Init")
return shim.Success(nil)
}
func (t *PayChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
fmt.Println("pay Invoke")
function, args := stub.GetFunctionAndParameters()
if function == "invoke" {
return t.invoke(stub, args)
} else if function == "query" {
return t.query(stub, args)
}
return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"query\"")
}
func (t *PayChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response {
var userId, orderId, payTransId, buyProduct, transAmount, transTime string //用户ID、订单ID、支付平台交易ID、购买产品、交易金额、交易时间
var err error
if len(args) != 6 {
return shim.Error("参数数量错误,需要6个参数。")
}
userId = args[0]
orderId = args[1]
payTransId = args[2]
buyProduct = args[3]
transAmount = args[4]
transTime = args[5]
pay := &Pay{userId, orderId, payTransId, buyProduct, transAmount, transTime}
payJSONBytes, err := json.Marshal(pay)
if err != nil {
return shim.Error(err.Error())
}
err = stub.PutState(orderId, payJSONBytes)
if err != nil {
return shim.Error(err.Error())
}
return shim.Success(nil)
}
func (t *PayChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response {
var userId string // 用户Id
var err error
if len(args) != 1 {
return shim.Error("参数数量错误,需要1个参数。")
}
userId = args[0]
queryString := fmt.Sprintf("{\"selector\":{\"user_id\":\"%s\"}}", userId)
queryResults, err := getQueryResultForQueryString(stub, queryString)
if err != nil {
return shim.Error(err.Error())
}
return shim.Success(queryResults)
}
// =========================================================================================
// getQueryResultForQueryString executes the passed in query string.
// Result set is built and returned as a byte array containing the JSON results.
// =========================================================================================
func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) {
fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString)
resultsIterator, err := stub.GetQueryResult(queryString)
if err != nil {
return nil, err
}
defer resultsIterator.Close()
buffer, err := constructQueryResponseFromIterator(resultsIterator)
if err != nil {
return nil, err
}
fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String())
return buffer.Bytes(), nil
}
// ===========================================================================================
// constructQueryResponseFromIterator constructs a JSON array containing query results from
// a given result iterator
// ===========================================================================================
func constructQueryResponseFromIterator(resultsIterator shim.StateQueryIteratorInterface) (*bytes.Buffer, error) {
// buffer is a JSON array containing QueryResults
var buffer bytes.Buffer
buffer.WriteString("[")
bArrayMemberAlreadyWritten := false
for resultsIterator.HasNext() {
queryResponse, err := resultsIterator.Next()
if err != nil {
return nil, err
}
// Add a comma before array members, suppress it for the first array member
if bArrayMemberAlreadyWritten == true {
buffer.WriteString(",")
}
buffer.WriteString("{\"Key\":")
buffer.WriteString("\"")
buffer.WriteString(queryResponse.Key)
buffer.WriteString("\"")
buffer.WriteString(", \"Record\":")
// Record is a JSON object, so we write as-is
buffer.WriteString(string(queryResponse.Value))
buffer.WriteString("}")
bArrayMemberAlreadyWritten = true
}
buffer.WriteString("]")
return &buffer, nil
}
func main() {
err := shim.Start(new(PayChaincode))
if err != nil {
fmt.Printf("Error starting Simple chaincode: %s", err)
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
超级账本HyperLedger Fabric区块链开发实战-源码.rar
共154个文件
yaml:62个
go:23个
sh:11个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 94 浏览量
2022-07-08
06:48:24
上传
评论
收藏 842.99MB RAR 举报
温馨提示
超级账本HyperLedger Fabric区块链开发实战-源码.rar
资源推荐
资源详情
资源评论
收起资源包目录
超级账本HyperLedger Fabric区块链开发实战-源码.rar (154个子文件)
configtxgen 18.36MB
configtxgen 18.36MB
configtxgen 18.36MB
configtxgen 18.36MB
configtxgen 18.36MB
configtxlator 20.3MB
configtxlator 20.3MB
configtxlator 20.3MB
configtxlator 20.3MB
configtxlator 20.3MB
cryptogen 11.82MB
cryptogen 11.82MB
cryptogen 11.82MB
cryptogen 11.82MB
cryptogen 11.82MB
discover 19.41MB
discover 19.41MB
discover 19.41MB
discover 19.41MB
discover 19.41MB
.env 109B
SoapUI-x64-5.3.0.exe 113.39MB
.gitkeep 0B
chaincode.go 5KB
chaincode.go 4KB
chaincode.go 4KB
chaincode.go 4KB
chaincode.go 4KB
chaincode.go 4KB
chaincode.go 4KB
chaincode.go 4KB
chaincode_test.go 3KB
chaincode_test.go 3KB
chaincode_test.go 3KB
chaincode_test.go 3KB
chaincode_test.go 3KB
chaincode_test.go 3KB
chaincode_test.go 3KB
chaincode.go 2KB
main.go 444B
main.go 383B
main.go 382B
main.go 382B
main.go 382B
main.go 382B
main.go 381B
jdk-8u191-linux-x64.tar.gz 182.87MB
jdk-8u191-linux-x64.tar.gz 182.87MB
mysql-5.6.22.tar.gz 31.58MB
mysql-5.6.22.tar.gz 31.58MB
cmake-3.0.2.tar.gz 5.24MB
cmake-3.0.2.tar.gz 5.24MB
libtool-2.4.2.tar.gz 2.51MB
libtool-2.4.2.tar.gz 2.51MB
zlib-1.2.11.tar.gz 593KB
zlib-1.2.11.tar.gz 593KB
idemixgen 10.64MB
idemixgen 10.64MB
idemixgen 10.64MB
idemixgen 10.64MB
idemixgen 10.64MB
clientrest-1.0-SNAPSHOT.jar 50.57MB
clientrest-1.0-SNAPSHOT.jar 50.57MB
springboot.log 64KB
orderer 27.35MB
orderer 27.35MB
orderer 27.35MB
orderer 27.35MB
orderer 27.35MB
peer 34.63MB
peer 34.63MB
peer 34.63MB
peer 34.63MB
peer 34.63MB
application.properties 513B
application.properties 511B
多机多节点部署.rar 33.61MB
end-to-end.rst 40KB
ca_crypto-config.sh 42KB
script.sh 12KB
generateArtifacts.sh 4KB
ca_start.sh 3KB
network_setup.sh 3KB
download-dockerimages.sh 2KB
get-docker-images.sh 827B
get-docker-images.sh 827B
get-docker-images.sh 827B
get-docker-images.sh 827B
get-docker-images.sh 827B
fabricsdk.sql 4KB
fabricsdk.sql 4KB
Fabric-sdk-soapui-project.xml 32KB
core.yaml 15KB
configtx.yaml 13KB
configtx.yaml 12KB
configtx.yaml 12KB
configtx.yaml 11KB
configtx.yaml 11KB
configtx.yaml 9KB
orderer.yaml 9KB
共 154 条
- 1
- 2
资源评论
- zhoufz632023-05-30果断支持这个资源,资源解决了当前遇到的问题,给了新的灵感,感谢分享~
- weixin_582842952023-03-16感谢资源主的分享,很值得参考学习,资源价值较高,支持!
- m0_509084122023-01-09支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
- 2301_767926742023-10-17资源很实用,内容详细,值得借鉴的内容很多,感谢分享。
BryanDing
- 粉丝: 297
- 资源: 5587
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HandTrackingModule.py
- Python基于卷积神经网络的鸟类识别项目源代码,ipynb文件
- 批量将py编译为pyd文件.atbx
- Python项目-学生管理系统
- 图像处理基于matlab图像RGB三色合成分离【含Matlab源码第1发】
- verilog HDL硬件语法设计包括算术运算三人表决器Verilog的阻塞和非阻塞赋值源码例程quartus13.1工程合集
- 【文章话题分类论文】OpenAlex Topic Classification Whitepaper
- linux学习常用命令
- 功率拓扑快速参考指南-ti,TI官方出品
- 开源2023电赛国赛运动目标控制(E题)视觉部分
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功