5.4.4.6 公钥上传模式下调用智能合约接口
链下业务系统在连接节点网关时,需要按照接口说明在请求中加入相应的请求参数,调用节点网关以后,节点网关会返回智能合约的执行结果。在秘钥上传模式的交易中,链上交易的私钥由用户自己生成和保存,然后由客户端在本地进行上链数据的组装和签名,将签名后的数据上传至节点网关,网关将数据转发至相应的区块链节点发起交易请求。在该模式中组装数据时需要用到合约的ABI以及合约地址等信息,其中合约ABI在开发合约时编译合约得到,合约地址可以在应用的详情页面获取。在网关的SDK中已经实现了该上链数据的组装方法,直接调用即可。
1. 接口地址:https://节点网关地址/api/fiscobcos/v1/node/trans
注:用户参与服务成功后可以在服务详情页面查看并下载应用链下业务系统开发所需要的应用服务配置参数、节点网关地址和应用接入密钥对,如下图:
2. 通讯方式: POST
3. 签名算法:详见5.4.4.1 应用接入签名算法
4. 请求参数
序号 | 字段名 | 字段 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | 信息头 | header | Map | 是 | |
2 | 信息体 | body | Map | 是 | |
3 | 签名值 | mac | String | 是 | |
header: | |||||
1 | 用户唯一标识 | userCode | String | 是 | |
2 | 应用唯一标识 | appCode | String | 是 | |
Body: | |||||
1 | 合约名称 | contractName | String | 是 | |
2 | 交易数据 | transData | String | 是 | |
3 | 合约地址 | contractAddress | String | 否 | 当用户权限为不校验权限且调用的合约方法为constant时将会调用该地址的合约,并且使用contractAbi字段的合约ABI解析交易数据 |
4 | 合约ABI | contractAbi | String | 否 | 当用户权限为不校验权限且调用的合约方法为constant时将会调用该地址的合约,并且使用contractAbi字段的合约ABI解析交易数据 |
示例
```
{"header":{"userCode":"USER0001202006042321579692440","appCode":"app0001202006042323057101002","tId":""},"mac":"MEUCIQCrjIeRVSt1uwFFGkr37bVM8pF0JgAWb40mKEBc5HbpjgIgEzXRIgG+Q7obwuD2MY4EHo9sIsI1W71M+aQKOfAN3wU=","body":{"contractName":"BsnBaseContractk1","transData":"0xf9016fa008d8ebcb4b1f8205fd7883aa3ce9b9c844424070e55a3af6a5da5d7ee97d287385051f4d5c0083419ce07794866aefc204b8f8fdc3e45b908fd43d76667d7f7680b8e4ebf3b24f0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000005733036303400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026161000000000000000000000000000000000000000000000000000000000000018187801ba0324efc9e17f1d31d95535c5103083560560f836931945d03fb69acb6fd2046b5a05fa6f574f83b3b753c9fe40649a08c2a497af1cd804e08fed2b153af20267f23", "contractAddress":"0xe2d0d414d436d8be9d52e2f40e6dd24a63faa638","contractAbi":"合约ABI"}}
```
5. 响应参数
序号 | 字段名 | 字段 | 类型 | 必填 | 备注 |
---|---|---|---|---|---|
1 | 信息头 | header | Map | 是 | |
2 | 信息体 | body | Map | 是 | |
3 | 签名值 | mac | String | 是 | |
header: | |||||
1 | 响应标识 | code | int | 是 | 0:校验成功 -1:校验失败 |
2 | 响应信息 | msg | String | 否 | code=0 时可为 null |
body: | |||||
1 | 调用类型 | constant | Bool | 否 | |
2 | 查询信息 | queryInfo | String | 否 | constant 为 true 时,该字段有值 |
3 | 交易hash | txId | String | 否 | constant 为 false 时,该字段有值并且有效 |
4 | 块哈希 | blockHash | String | 否 | constant 为 false 时,该字段有值并且有效 |
5 | 块号 | blockNumber | Int | 否 | constant 为 false 时,该字段有值并且有效 |
6 | Gas使用值 | gasUsed | Int | 否 | constant 为 false 时,该字段有值并且有效 |
7 | 交易状态 | status | String | 否 | constant 为 false 时,该字段有值并且有效,0x0 表示交易成功,状态值参考交易回执状态 |
8 | 发送者的地址 | from | String | 否 | constant 为 false 时,该字段有值并且有效 |
9 | 接收者的地址 | to | String | 否 | constant 为 false 时,该字段有值并且有效 |
10 | 输入 | input | String | 否 | constant 为 false 时,该字段有值并且有效 |
11 | 输出 | output | String | 否 | constant 为 false 时,该字段有值并且有效 |