Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hyperledger fabric 如何拒绝作为组织对交易进行背书_Hyperledger Fabric_Hyperledger - Fatal编程技术网

Hyperledger fabric 如何拒绝作为组织对交易进行背书

Hyperledger fabric 如何拒绝作为组织对交易进行背书,hyperledger-fabric,hyperledger,Hyperledger Fabric,Hyperledger,我脑子里总是有一个理论上的和一般性的问题:让我们假设有两个ORG:org1和org2。每个组织都有一个对等组织。如果背书策略设置为AND(org1,org2),这意味着每个交易都需要org1和org2对等方的背书 让我们假设一个场景:org1和org2已经支持了5个事务。但是有一天,比如说,org1根本不想认可任何交易,这意味着对于每一个新的传入交易(例如第六次交易),org1都想说不,并且拒绝认可新的交易。所以我的问题是: org1如何拒绝为新的传入交易背书?用更生动的话来说,作为一个组织,如

我脑子里总是有一个理论上的和一般性的问题:让我们假设有两个ORG:org1和org2。每个组织都有一个对等组织。如果背书策略设置为AND(org1,org2),这意味着每个交易都需要org1和org2对等方的背书

让我们假设一个场景:org1和org2已经支持了5个事务。但是有一天,比如说,org1根本不想认可任何交易,这意味着对于每一个新的传入交易(例如第六次交易),org1都想说不,并且拒绝认可新的交易。所以我的问题是:
org1如何拒绝为新的传入交易背书?用更生动的话来说,作为一个组织,如何说不?提前感谢。

如果用户在“是”和“否”之间进行选择,则背书不是选项。交易在具有链码的对等方中执行,当对等方按照背书策略的规定对结果达成一致时,则称交易为背书。交易的执行过程可能取决于对等方的分类账。例如,所有的对等方都在分类账中存储了Ram有50个值
Ram:50
,现在新的交易会给Ram的帐户增加20个值。这将在认可的对等方中执行,添加的结果
Ram:70
得到所有对等方的同意。现在交易将被背书。但是,如果一个对等方的分类账被更改为
Ram:40
,并且该对等方需要对交易进行背书,则会产生
Ram:60
的结果,该结果与其他对等方的结果不匹配,并且该交易将不会被背书

实际上,您可以在启动对等机时加载一点。 您需要做的是创建一个身份验证筛选器,它将防止背书并返回错误,而不是将请求转发到下一个身份验证筛选器

从文件中:

这些是对等机中存在的默认内置筛选器。例如,客户端标识的ExpirationCheck筛选器

您需要做的是添加另一个过滤器,该过滤器简单地拒绝来自客户端的建议(我们将其命名为-NopeFilter),然后将其编译为golang插件,并添加以下条目:

-  
  name: FilterOne
  library: /opt/lib/filter.so
过滤器的内容将与过滤器非常相似(过滤器不起任何作用):

在对等启动时,从core.yaml部分读取过滤器列表,然后选择拒绝建议或将其传递给下一个过滤器的过滤器


最后一个过滤器始终是对等方中真正的背书人服务,它实际执行链码执行和背书(对结果进行签名)。

拒绝背书是什么意思,如果请求未背书,交易将不会发生。这就是你要找的吗?谢谢你的解释。我觉得我比以前更明白了。我可以这样理解吗:让我们假设有两个ORG:org1和org2。背书政策和(org1,org2)可以确保,如果org1或org2任意恶意修改分类账,新交易将不会被背书,对吗?确定。知道了。一个扩展问题:如果背书策略设置为或(org1,org2),是否意味着org1或org2有可能根据其意愿任意修改分类账,并最终使新的传入交易成功背书并提交到分类账?例如,以您为例,org1将Ram的值从50修改为40,一个新的事务将此值增加20,因此最终值为60,并且可能会提交到分类账?是的,您可以通过这样做看到这一点。更改状态数据库的值并尝试发送事务。但是,在查询值时,如果您仅从单个对等方进行查询,它将向您显示对等方数据库的值,这可能也是恶意的。因此,在这种情况下,您应该针对通道中的所有或大多数对等方。非常感谢您提供如此详细的代码级答案。这让我知道代码可以是可插入的和自定义的。将来,如果业务需求需要,我将按照您答案中的步骤进行操作。
-  
  name: FilterOne
  library: /opt/lib/filter.so
func (nf *NopeFilter) ProcessProposal(ctx context.Context, signedProp *peer.SignedProposal) (*peer.ProposalResponse, error) {
    return nil, errors.New("nope")
}