如何拒绝作为一个组织认可交易

问题描述 投票:1回答:2

在我看来,我总是有一个理论上和一般性的问题:让我们假设有两个组织:org1和org2。每个组织都有一个同伴。如果认可政策设置为AND(org1,org2),这意味着每个交易都需要得到org1和org2同行的认可。

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

hyperledger-fabric hyperledger
2个回答
0
投票

认可不是一种选择,用户在是和否之间选择。交易在具有链码的对等体中执行,并且当由认可策略指定的对等体对结果达成一致时,则认为该交易被认可。执行事务的过程可能取决于对等方的分类账。例如,所有同行都存储在分类账中,Ram有50个值Ram:50,现在新交易为Ram的账户增加了20个值。这将在赞同对等体中执行,并且所有对等体都同意添加的结果Ram:70。现在该交易将得到认可。但是如果一个对等方的分类账被改为Ram:40并且该对等方需要支持该交易,那么它将得出Ram:60的结果,该结果与其他同行的结果不匹配,并且该交易将不会被认可。


1
投票

实际上你可以用一个可以在同伴启动时加载的custom pluggable code来关闭它。您需要做的是创建一个身份验证过滤器,它将阻止认可和返回错误,而不是将请求转发到下一个身份验证过滤器。

来自core.yaml文件:

    handlers:
        authFilters:
          -
            name: DefaultAuth
          -
            name: ExpirationCheck    # This filter checks identity x509 certificate expiration

这些是对等体中存在的默认内置过滤器。例如 - ExpirationCheck过滤器 - checks for expiration的客户端身份。

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

-  
  name: FilterOne
  library: /opt/lib/filter.so

过滤器的内容将非常类似于DefaulAuth过滤器(它什么都不做):

func (nf *NopeFilter) ProcessProposal(ctx context.Context, signedProp *peer.SignedProposal) (*peer.ProposalResponse, error) {
    return nil, errors.New("nope")
}

在对等启动时,从core.yaml部分读取过滤器列表,然后chained into a chain of filters拒绝提议,或将其传递给下一个过滤器。

最后一个过滤器始终是对等体中真正的代言人服务,它实际上执行链代码执行和认可(签署结果)。

© www.soinside.com 2019 - 2024. All rights reserved.