我正在尝试使用cid库(https://github.com/hyperledger/fabric/tree/release-1.1/core/chaincode/lib/cid)来检索链码中的属性值,但是它返回空值。
我修改了fabcar
示例,以使用fabcar链码中的属性值进行实验。我的处理方法如下
cid
库在cli
容器中不可用,因此我通过docker compose文件将整个结构代码库从主机映射到Docker容器。valumes:
/home/asad/projects_fabric_1.2/src/github.com/hyperledger/fabric:/opt/gopath/src/github.com/hyperledger/fabric
现在我可以从cid
库访问API。
2-我用myuser
(在fabcar示例中为CA)注册了另一个用户(ca.example.com
),其属性在我的配置文件中如下所示:
id:
name: myuser
type: user
affiliation: org1.department1
maxenrollments: 0
attributes:
- name: hf.IntermediateCA
value: false
- name: hf.Registrar.Roles
value: "peer,orderer,client,user"
- name: hf.Registrar.DelegateRoles
value: "peer,orderer,client,user"
- name: hf.Registrar.Attributes
value: "*"
- name: hf.GenCRL
value: false
- name: hf.Revoker
value: false
- name: hf.AffiliationMgr
value: false
- name: 'full_name'
value: "Jhon Doe"
- name: 'department'
value: "Computer Engineering"
我通过myuser
注册并注册了fabric-ca-client
,并使用myuser
修改了registerUser.js和invoke.js javascript文件。
现在,我修改fabcar链码以检索和记录这些属性值。
mspid, err := cid.GetMSPID(APIstub)
fmt.Printf("\nMSPID:\n %s \n\n", mspid)
fmt.Printf("\n\n\n")
if err != nil {
fmt.Printf("\n%e\n\n", err)
}
attr1, ok, err := cid.GetAttributeValue(APIstub, "full_name")
if !ok {
fmt.Printf("\nFull_Name not OK.\n")
}
fmt.Printf("\nfull_name:\n %s \n\n", attr1)
fmt.Printf("\n\n\n")
if err != nil {
fmt.Printf("\n%e\n\n", err)
}
attr2, ok, err := cid.GetAttributeValue(APIstub, "department")
if !ok {
fmt.Printf("\nDepartment not OK.\n")
}
fmt.Printf("\ndepartment:\n %s \n\n", attr2)
fmt.Printf("\n\n\n")
if err != nil {
fmt.Printf("\n%e\n\n", err)
}
现在,当我运行通过node invoke.js
调用链代码并检查链代码容器的日志时,我得到以下输出。
MSPID:
Org1MSP
Full_Name not OK.
full_name:
Department not OK.
department:
有人知道为什么我没有得到我的属性值吗??