5.4.3.5 Invoke chaincode API in Key Trust Mode
For DApps in Key Trust Mode, when the off-BSN system invokes the chaincode functions via PCN gateway, it is required to insert the parameters in the request message. The gateway will return the response message from the chaincode.
1. Interface address: https://PCNGatewayAddress/api/fabric/v1/node/reqChainCode
This interface will directly return the response message without waiting for the generation of block. Please use “Get transaction information API” described in section 5.4.3.8 to check the status of a block generated based on transaction ID.
Note: After a user has successfully participated in a DApp service, this participant can view and download the DApp’s configuration parameters which are used for off-BSN systems to connect to this DApp’s chaincodes, including the PCN gateway address and Dapp access keys, as shown below:
2. Call Method: POST
3. Signature Algorithm: required and refer to Section 5.4.3.1
4. Call parameters
No. | Field name | Field | Type | Required | Remarks |
---|---|---|---|---|---|
1 | Header | header | Map | Y | |
2 | Body | body | Map | Y | |
3 | Signature Value | mac | String | Y | |
Header | |||||
1 | user unique ID | userCode | String | Y | |
2 | DApp unique ID | appCode | String | Y | |
3 | User and DApp mapping ID | tId | String | N | |
Body | |||||
1 | user name | userName | String | N | |
random string | nonce | String | Y | Use 24 random byte array of the base64 encoding | |
1 | chainCode | chainCode | String | Y | |
2 | function name | funcName | String | Y | |
3 | Call parameters | args | String[] | N | |
4 | Transient data | transientData | Map |
N |
Example:
{"header":{"userCode":"USER0001202004161009309407413","appCode":"app0001202004161017141233920","tId":""},"mac":"MEQCICJpE1jfeJKtw/ZboVuKSLy2RmmSdkhrEVPGFJhm9IaIAiA/Qqs6RNz0ndSS4/AFSwBj7vC76Py1hXnqO5zMD9pNtA==","body":{"userName":"","nonce":"lgH7Ozfv6npqg9D3pSbq9c6o+rAcpa5D","chainCode":"cc_app0001202004161017141233920_00","funcName":"set","args":["{\"baseKey\":\"test2020048\",\"baseValue\":\"this is string \"}"],"transientData":{}}}
5. Response parameters
No. | Field name | Field | Type | Required | Remarks |
---|---|---|---|---|---|
1 | Header | header | Map | Y | |
2 | Body | body | Map | Y | |
3 | Signature Value | mac | String | Y | |
Header | |||||
1 | Response ID | code | int | Y | 0: authentication successful -1: authentication failed |
2 | Response Message | msg | String | N | if code=0 then can be null |
Body | |||||
1 | block information | blockInfo | blockInfo | N | If code is not 0, then leave blank |
2 | chaincode response result | ccRes | ccRes | N | If code is not 0, then leave blank |
blockInfo | |||||
1 | Transaction ID | txId | String | Y | |
2 | Block HASH | blockHash | String | N | On synchronous mode returns Block HASH |
3 | status value | status | Int | Y | Refer to the detailed transaction status description in 5.4.3.17 |
ccRes | |||||
1 | chaincode response status | ccCode | Int | Y | 200: Successful500: Failed |
2 | chaincode response result | ccData | Str | N | Actual chaincode response result |
Example:
{
"header": {
"code": 0,
"msg": "Transaction Successful"
},
"mac": "MEUCIQCBtfO1AfYkoJ2hIlp8CfKK1iuhVEAYkPY8YFRAdvPJlAIgDjSqYgwlORJRyF6KZPU/uC5Fx/DxXxu9VgKwU9+JhjU=",
"body": {
"blockInfo": {
"txId": "a144149150ee615a9d11c68485600f43dc2c3eb2a98d7b36de53a6b99e03c495",
"blockHash": "",
"status": 0
},
"ccRes": {
"ccCode": 200,
"ccData": "SUCCESS"
}
}
}