首页 > 其他分享 >基于键级别的背书策略

基于键级别的背书策略

时间:2024-03-02 20:33:59浏览次数:13  
标签:背书 基于 策略 chaincode com key 级别 example

背书策略主要是针对定义交易是否合法的判断条件。
一般的策略以主体形式进行呈现。在hyperledger fabric中共有四种合法角色:member, admin, client, peer

一般使用的背书策略语法:Expression(E[, E...])

基于键值的背书策略
shim包提供了一些函数可以设置背书策略,其具体如下所示。
SetStateValidationParameter(key string, ep []byte) error
GetStateValidationParameter(key string)([]byte, error)
以上是针对函数键值的背书策略(什么是函数设置或者恢复键对应的背书策略?)

同时还有设置交易中私有信息里面的键级别的背书策略。

SetPrivateDataValidationParameter(collection, key string, ep []byte) error
GetPrivateDataValidationParameter(collection, key string) ([]byte, error)

举个例子:
首先使用query函数查询a账户的余额
函数命令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
假设此时查询到的结果是0

接着调用修改函数向a账户转入10元
函数命令 peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --peerAddresses peer1.org2.example.com:7051 -c '{"Args":["revise","a","10"]}'

注:此处使用了--peerAdrresses参数指定背书方。如果没有输入则会通过默认策略进行背书提交。

如果尝试只使用org1的peer0进行背书,那么就会导致失败。

接着修改策略,将策略修改为只需要org1进行背书
函数命令 peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --peerAddresses peer0.org2.example.com:7051 -c '{"Args":["endorsement","a","Org1MSP"]}'

那么上述失败的命令便可以执行。

demo
使用下述命令查询时,会发生报错。
chaincode_invoke 3 0 "3%0" ${CHANNEL_ID_ARR[0]} "trade_chaincode" '{"Args":["invoke","cross_set","sum","'${CHANNEL_ID_ARR[1]}'","train_chaincode"]}'
报错信息

注:在测试过程中,记得使用sleep进行停顿,不然容易出现如下报错:
stateBasedValidator.Validate failed, err validation parameters for key [sum] in namespace [trade_chaincode:] have been changed in transaction 1 of block 9
这个意思是在区块交易中的某个键的确认参数发生了变动,猜测是因为当前修改交易并未完全置入导致。

而如果在修改了背书策略之后,获取了错误的背书签名,那么背书就会不通过,会出现如下报错:
2024-03-02 07:01:05.901 UTC 00fb ERRO [committer.txvalidator] validateTx -> Dispatch for transaction txId = ba12027658e97050ab53e9296152e310dc2590a0427150e537506c8e82affe53 returned error: validation of key sum (coll'':ns'trade_chaincode') in tx 10:0 failed: signature set did not satisfy policy

标签:背书,基于,策略,chaincode,com,key,级别,example
From: https://www.cnblogs.com/MakeTheFoxRush/p/18049186

相关文章

  • 基于四叉树的图像分割算法matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a 3.算法理论概述        图像分割是计算机视觉和图像处理中的一项关键技术,旨在将图像划分为多个具有相似性质的区域。基于四叉树的图像分割算法是一种有效的分割方法,它通过递归地将图像划分为四个子......
  • Unity外包团队 北京动点软件:基于Unity3D开发数字博物馆
    开发数字化博物馆是一项令人兴奋且具有挑战性的任务,利用Unity3D可以创造出生动、交互式和令人印象深刻的虚拟博物馆体验。 下面是一些经验分享,希望能帮助你成功开发数字化博物馆:1.设计与规划:明确目标: 首先确定数字化博物馆的目标和受众,确定你想要呈现的内容和体验......
  • 基于WonderShaper对Docker容器进行带宽限速
    #安装WonderShaperaptupdateaptinstallwondershaper#创建Docker网桥dockernetworkcreate--driverbridge<网桥名>#然后终端会输出网桥ID:d0970005351xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd30d0e757f0#记住前面几位然后查看所有网卡ifconfig#如果执行不了就自己去......
  • scrapy——基于管道持久化存储
    笔记-基于管道:-编码流程-数据解析-在item类中定义相关的属性-将解析的数据封装到item对象中-将item类型的对象提交给管道进行持久化存储-在管道类的process_item中要将其接收到的item对象中存储的数据进行持久化存储......
  • 【Filament】基于物理的光照(PBR)
    1前言​自定义BlinnPhong光照模型中实现了基础的自定义光照,与现实的光照还是有些差别,本文将实现更逼真的光照效果,即基于物理的光照(PBR)。​读者如果对Filament不太熟悉,请回顾以下内容。Filament环境搭建绘制三角形绘制矩形绘制圆形绘制立方体纹理贴图立方体......
  • 【Spring AOP】SpringAOP配置过程——基于XML&&基于注解 && Spring AOP实现原理
    概念SpringAOP-AspectOrientedProgramming面向切面编程AOP的做法是将通用、与业务无关的功能抽象封装为切面类切面可配置在目标方法的执行前、后运行,真正做到即插即用可以在不修改源码的情况下对程序进行扩展AOP配置过程——基于XML配置0.添加依赖创建配置文件......
  • 论文精读:基于图神经网络的时间序列模型(综述)
    论文精读:基于图神经网络的时间序列模型(预测任务部分)论文链接:https://arxiv.org/abs/2307.03759一、摘要时间序列数据的复杂在于涉及时间和变量之间的复杂相互作用以及变量之间的关系。与其他深度学习方法相比,图神经网络(GraphNeuralNetworks,GNNs)可以明确地建模变量间关系(多元......
  • 基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
    1.算法运行效果图预览    2.算法运行软件版本matlab2022a  3.算法理论概述       MNIST是一个手写数字的大型数据库,包含60,000个训练样本和10,000个测试样本。每个样本都是28x28像素的灰度图像,代表0到9之间的一个数字。 3.1卷积神经网络(CNN)   ......
  • 基于CNN+LSTM深度学习网络的时间序列预测matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022a 3.算法理论概述      时间序列预测是指利用历史数据来预测未来数据点或数据序列的任务。在时间序列分析中,数据点的顺序和时间间隔都是重要的信息。CNN+LSTM网络结合了卷积神经网络(CNN)的特征提取能力和长......
  • 从零开始写 Docker(三)---基于 cgroups 实现资源限制
    本文为从零开始写Docker系列第三篇,在mydockerrun基础上基于cgroups实现容器的资源限制。完整代码见:https://github.com/lixd/mydocker欢迎Star如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注微信公众号。搜索公众号【探索云原生】即可订阅......