2. createEvidence (多个签名方)
基本信息
- 接口名称:com.webank.weid.rpc.EvidenceService.createEvidence
- 接口定义:ResponseData<String> createEvidence(Hashable object, List<String> signers, WeIdPrivateKey weIdPrivateKey)
- 接口描述: 将传入Object计算Hash值生成存证上链。此方法允许在创建存证时传入多个签名方的WeID;但是,必须传入一个这些签名方WeID所对应持有的私钥进行签名。同样地,此签名方和凭证的Issuer可以不是同一方。当传入的object为null时,则会创建一个空的存证并返回其地址,空存证中仅包含签名方,不含Hash值。可以随后调用SetHashValue()方法,为空存证添加Hash值和签名。
接口入参:
Hashable java.lang.Object
名称 | 类型 | 非空 | 说明 | 备注 |
---|---|---|---|---|
Object | Hashable object | N | 实现了Hashable接口的任意Object | 当前支持Credential,CredentialWrapper,CredentialPojo |
java.util.ArrayList
名称 | 类型 | 非空 | 说明 | 备注 |
---|---|---|---|---|
signers | List<String> | Y | 声明的签名者的WeID | 至少有一个签名者需要传入自己的私钥(在下个参数中) |
com.webank.weid.protocol.base.WeIdPrivateKey
名称 | 类型 | 说明 | 备注 |
---|---|---|---|
privateKey | String | 私钥 | 使用十进制数字表示 |
接口返回: com.webank.weid.protocol.response.ResponseData<String>;
名称 | 类型 | 说明 | 备注 |
---|---|---|---|
errorCode | Integer | 返回结果码 | |
errorMessage | String | 返回结果描述 | |
result | String | 创建的凭证合约地址 | 业务数据 |
transactionInfo | TransactionInfo | 交易信息 |
com.webank.weid.protocol.response.TransactionInfo
名称 | 类型 | 说明 | 备注 |
---|---|---|---|
blockNumber | BigInteger | 交易块高 | |
transactionHash | String | 交易hash | |
transactionIndex | BigInteger | 交易索引 |
此方法返回code
enum | code | desc |
---|---|---|
SUCCESS | 0 | 成功 |
CREDENTIAL_PRIVATE_KEY_NOT_EXISTS | 100415 | 私钥为空 |
CREDENTIAL_ISSUER_INVALID | 100418 | WeIdentity DID无效 |
CREDENTIAL_EVIDENCE_BASE_ERROR | 100500 | Evidence标准错误 |
TRANSACTION_TIMEOUT | 160001 | 超时 |
TRANSACTION_EXECUTE_ERROR | 160002 | 交易错误 |
ILLEGAL_INPUT | 160004 | 参数为空 |
CREDENTIAL_EVIDENCE_CONTRACT_FAILURE_ILLEAGAL_INPUT | 500401 | Evidence参数非法 |
调用示例
- CredentialService credentialService = new CredentialServiceImpl();
- EvidenceService evidenceService = new EvidenceServiceImpl();
- HashMap<String, Object> claim = new HashMap<String, Object>(3);
- claim.put("name", "zhang san");
- claim.put("gender", "F");
- claim.put("age", 18);
- CreateCredentialArgs createCredentialArgs = new CreateCredentialArgs();
- createCredentialArgs.setClaim(claim);
- createCredentialArgs.setCptId(1017);
- createCredentialArgs.setExpirationDate(1561448312461L);
- createCredentialArgs.setIssuer("did:weid:101:0x39e5e6f663ef77409144014ceb063713b65600e7");
- WeIdPrivateKey weIdPrivateKey = new WeIdPrivateKey();
- weIdPrivateKey.setPrivateKey("60866441986950167911324536025850958917764441489874006048340539971987791929772");
- createCredentialArgs.setWeIdPrivateKey(weIdPrivateKey);
- // 创建Credential
- ResponseData<CredentialWrapper> response = credentialService.createCredential(createCredentialArgs);
- List<String> signer = new ArrayList<>();
- signer.add("did:weid:101:0x39e5e6f663ef77409144014ceb063713b65600e7");
- signer.add("did:weid:101:0x48f6f6f663ef77409144014ceb063713b65611f8");
- //创建Evidence Address
- ResponseData<String> responseCreateEvidence = evidenceService.createEvidence(response.getResult().getCredential(), signer, weIdPrivateKey);
- 返回结果如:
- result: 0xa3203e054bb7a7f0dec134c7510299869e343e8d
- errorCode: 0
- errorMessage: success
- transactionInfo:(com.webank.weid.protocol.response.TransactionInfo)
- blockNumber: 30014
- transactionHash: 0x1f9e62fa152eb5fce859dcf81c7c0eddcbcab63c40629d1c745058c227693dae
- transactionIndex: 0
时序图
sequenceDiagramparticipant 调用者participant EvidenceServiceparticipant 区块链节点调用者->>EvidenceService: 调用CreateEvidence()EvidenceService->>EvidenceService: 入参非空、格式及合法性检查opt 入参校验失败EvidenceService—>>调用者: 报错,提示参数不合法并退出endEvidenceService->>EvidenceService: 生成凭证HashEvidenceService->>EvidenceService: 基于凭证Hash生成签名值EvidenceService->>区块链节点: 调用智能合约,创建并上传凭证存证区块链节点—>>EvidenceService: 返回创建结果opt 创建失败EvidenceService—>>调用者: 报错并退出endEvidenceService—>>调用者: 返回成功