【问题标题】:How to refuse endorsing transactions as an organization如何以组织的身份拒绝背书交易
【发布时间】:2019-02-24 01:09:17
【问题描述】:

我的脑海中总是有一个理论性和一般性的问题:假设有两个组织:org1 和 org2。每个组织都有一个同行。如果背书策略设置为 AND(org1, org2),这意味着每笔交易都需要 org1 和 org2 的 peer 的背书。

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

【问题讨论】:

  • 拒绝背书是什么意思,如果一个请求没有被背书,交易就不会发生。这是你要找的吗?

标签: hyperledger-fabric hyperledger


【解决方案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,它要么拒绝提案,要么将其传递给下一个过滤器。

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

【讨论】:

  • 非常感谢您提供如此详细的代码级答案。这让我知道代码可以是可插入的和自定义的。将来,如果业务需求需要,我将按照您的答案中的步骤进行操作。
【解决方案2】:

背书不是一种选择,用户可以在是和否之间进行选择。交易在具有链码的对等点中执行,当对等点(如背书策略指定)就结果达成一致时,则称该交易被背书。交易的执行过程可能取决于对等方的分类账。例如,所有对等点都存储在 Ram 有 50 个价值 Ram:50 的分类帐中,现在新交易将 20 个价值添加到 Ram 的帐户中。这在背书节点中执行,添加的结果Ram:70 得到所有节点的同意。现在交易将被认可。但是如果一个peer的账本被修改为Ram:40并且该peer需要背书交易,它会得出Ram:60的结果,这将与其他peer的结果不匹配,并且交易不会得到认可。

【讨论】:

  • 感谢您的解释。我觉得我比以前更明白了。我可以这样理解吗:假设有两个 orgs:org1 和 org2。背书策略 AND(org1,org2) 可以确保如果 org1 或 org2 任意恶意修改账本,新的交易不会被背书,对吧?
  • 好的。知道了。延伸问题:如果背书策略设置为 OR(org1,org2),是否意味着 org1 或 org2 有可能根据自己的意愿任意修改账本,最终使新的传入交易成功背书并提交给账本?比如你的例子,org1 将 Ram 的值从 50 修改为 40,一个新的交易是把这个值增加 20,所以最终是 60,并且有可能提交到账本?
  • 是的,您可以这样做。更改状态数据库的值并尝试发送事务。但是在查询值时,如果您仅从单个对等点查询,它会向您显示对等点数据库的值,这也可能是恶意的。因此,在这种情况下,您应该针对通道中的所有或大多数对等方。
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2021-12-05
  • 2020-04-27
  • 2014-09-03
  • 2015-06-21
  • 2014-02-10
  • 2017-12-07
相关资源
最近更新 更多