在我的脑海中,我始终有一个理论上和一般上的问题:让我们假设有两个组织:org1和org2。每个组织都有一个同行。如果将背书策略设置为AND(org1,org2),则意味着每个事务都需要org1和org2的对等方的背书。
让我们假设一个场景:org1和org2已经批准了5个事务。但是有一天,假设org1根本不想背书任何交易,这意味着对于每个新的传入交易(例如第六次交易),org1都想拒绝,并拒绝背书新交易。所以我的问题是: org1如何拒绝认可新的传入交易?用更生动的话说,作为一个组织,怎么说不?预先感谢。
答案 0 :(得分: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,它们要么拒绝建议,要么将其传递给下一个过滤器。
最后一个过滤器始终是对等方中真正的背书人服务,该服务实际上执行链代码的执行和背书(对结果进行签名)。
答案 1 :(得分:0)
背书不是一种选择,用户可以在是和否之间进行选择。交易在具有链码的对等点中执行,并且当对等点(如背书策略所指定)同意结果时,则认为该交易被背书。交易的执行过程可能取决于对等方的分类帐。例如,所有对等方都已在分类帐中存储了Ram具有50值Ram:50
的信息,现在新交易为Ram的帐户增加了20价值。这在认可的对等方中执行,并且所有对等方都同意添加的结果Ram:70
。现在,该交易将获得批准。但是,如果将一个对等方的分类帐更改为Ram:40
,并且该对等方需要背书交易,它将得出Ram:60
的结果,该结果与其余对等方的结果不匹配,并且该交易将不获批准。