有没有办法知道 golang 链代码中 Hyperledger Fabric V1.0 的调用同行和组织?
答案 0 :(得分:2)
在Fabric 1.1中,似乎有一个新的 cid 可以满足您的要求。
// GetID returns the ID associated with the invoking identity. This ID
// is guaranteed to be unique within the MSP.
func GetID(stub ChaincodeStubInterface) (string, error)
// GetMSPID returns the ID of the MSP associated with the identity that
// submitted the transaction
func GetMSPID(stub ChaincodeStubInterface) (string, error)
有关完整信息,您可以参考Client Identity Chaincode Library
答案 1 :(得分:1)
目前,interface.go
文件中描述了所有可用于链代码的API。目前没有API可以让您识别链代码中的调用对等体和组织。我认为其主要原因是链代码必须与该类型的信息无关,因为由对等和链代码管理的所有ACL应保持不可知,保持确定性行为,无论是谁调用它并且是无状态的。
如果需要,您可以使用GetCreator
API来尝试利用创建交易提案请求的客户的身份:
// GetCreator returns `SignatureHeader.Creator` (e.g. an identity)
// of the `SignedProposal`. This is the identity of the agent (or user)
// submitting the transaction.
GetCreator() ([]byte, error)
然后解析客户端证书以了解客户端,您也可以考虑使用transient fields使客户端放置相关信息,以后可以通过链码读取:
// GetTransient returns the `ChaincodeProposalPayload.Transient` field.
// It is a map that contains data (e.g. cryptographic material)
// that might be used to implement some form of application-level
// confidentiality. The contents of this field, as prescribed by
// `ChaincodeProposalPayload`, are supposed to always
// be omitted from the transaction and excluded from the ledger.
GetTransient() (map[string][]byte, error)
答案 2 :(得分:0)
client identity链代码库使开发人员能够编写链代码,该链代码根据客户端(即链代码的调用者)的身份来做出访问控制决策。
您可以使用cid软件包中提供的GetID
函数来获取主叫客户端的ID。
在上述软件包中,您可能发现有用的其他功能很少:
GetX509Certificate
可用于获取客户端的X509
证书。GetAttributeValue
以获取在注册客户期间与客户相关联的属性。除了cid
软件包中可用的功能之外,您可能还会发现这些功能也很有帮助。
SignatureHeader.Creator
的{{1}}(例如,身份)。这是提交交易的代理(或用户)的身份。答案 3 :(得分:0)
最后,我通过寻找一种方法来限制非私有数据集合的成员来从对等方查询私有数据来解决这个问题。我正在考虑在链码中添加一个验证器,以查看客户端是否与对等方属于同一组织。
如果您要这样做,请在创建私有数据集合时使用memberOnlyRead
属性。使用此技术,您也许可以建立更高级的限制。