开发指南
智能合约开发——Fabric引擎
概述
区块链服务当前版本支持Go开发的智能合约部署。
智能合约API接口(Go)
浪潮区块链提供了丰富的智能合约API接口,开发者通过实现这些接口完成区块链账本操作(包括数据写链、链数据查询等)。以下对智能合约开发过程中常见的API接口进行说明:
智能合约调用相关
接口名称 | 功能说明 |
---|---|
GetArgs() [][]byte | 获取智能合约调用请求的参数 |
GetStringArgs() []string | 获取智能合约调用请求的参数 |
GetFunctionAndParameters() (string, []string) | 获取智能合约调用请求的函数名和参数, 默认第一个参数为函数名 |
InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response | 调用其它智能合约的 Invoke 方法 |
账本交易相关
接口名称 | 功能说明 |
---|---|
GetTxID() string | 获取当前交易 ID |
GetChannelID() string | 获取当前通道名称 |
GetCreator() ([]byte, error) | 获取交易提交者信息 |
GetSignedProposal() (*pb.SignedProposal, error) | 获取交易提案数据 |
GetTxTimestamp() (*timestamp.Timestamp, error) | 获取交易时间戳 |
GetState() ([]byte, error) | 获取指定key的账本数据 |
PutState(key string, value []byte) error | 新增或更新一条账本数据 |
DelState(key string) error | 删除一条账本数据,删除后通过GetState无法查询 |
DelState(key string) error | 删除一条账本数据,删除后通过GetState无法查询 |
GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error) | 获取指定key的历史账本数据 |
智能合约调试
开发者部署智能合约后,可以使用智能合约管理提供的调用功能,进行写链、查询链上数据调试等操作。
以下步骤为智能合约调试方法:
- 打开智能合约管理页面,点击要调试的智能合约名称,进入智能合约详情页面,如下图:
- 点击更多-调用按钮,打开智能合约调用弹出对话框,选择、输入智能合约部署信息以及智能合约参数,点击执行,发起智能合约调用请求;如下图:
所属通道:智能合约部署通道
智能合约版本:要调用的智能合约版本
选择连接节点:即部署智能合约的成员Peer节点
智能合约参数:要调用智能合约的方法参数,类型为字符串数组,数组的第一个item
为固定值invoke
或query
,表示通过哪种调用方式调用智能合约,如 写链方法要使用invoke
,查询方法可以使用invoke
或query
,从数组的第二个item
开始就是调用智能合约方法的实际参数,根据智能合约输入; - 发起调用后,会在执行结果输出智能合约调用响应结果。
应用集成
开发者可通过在自己的应用中,调用相应虚机资源中暴露出来的代理API接口,来调用智能合约,实现与区块链的交互。API详情如下:
URI
POST http://{agent_ip}:{agent_port}/api/chaincode/invoke
agent_ip
为部署了相应智能合约的Peer所属虚机资源的IP
,agent_port
由实例使用的安全算法来确定,安全算法为国密算法
则agent_type
为9200
,安全算法为ECDSA
则agent_type
为9201
Header
Content-Type: application/json
请求参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
projectName | String | 是 | 登录用户名称 |
chainName | String | 是 | 服务名称 |
channelName | String | 是 | 通道名称 |
ccName | String | 是 | 智能合约名称 |
ccVersion | String | 是 | 智能合约版本 |
ccLang | String | 是 | 智能合约语言(golang) |
ccArgs | String[] | 是 | 调用合约的参数 |
org | Json | 是 | 成员信息(具体内容见示例) |
orderers | JsonArray | 是 | Orderer信息(具体内容见示例) |
user | Json | 是 | 用户信息(具体内容见示例) |
参数示例
huo{
"projectName": "admin",
"chainName": "chain01",
"channelName": "channel01",
"ccName": "qc-data-cc",
"ccVersion": "1.0",
"ccLang": "golang",
"ccArgs": ["invoke", "invoke", "setData", "a", "{\"key\":\"value\"}"],
"org": {
"orgName": "org1", // 成员名称
"mspId": "org1MSP",
"orgDomain": "org1.admin", // 成员的域名
"ca": {
"name": "ca-org1", // ca名称
"endpoint": "172.31.0.24:9524" // ca地址
},
"peers": [
{
"endpoint": "172.31.0.24:9521", // peer地址
"peerName": "peer0.org1.admin", // peer名称
"host": {
"ip": "172.31.0.24"
}
}
]
},
"orderers": [
{
"ordererName": "orderer0.chain01.admin", // orderer名称
"endpoint": "172.31.0.24:9520", // orderer地址
"domain": "chain01.admin", // 域名
"tlscaCertPem": "该orderer的ca证书",
"host": {
"ip": "172.31.0.24",
"port": 9201
}
}
],
"user": {
"userName": "zhanglan01", // ca用户名称
"privateKey": "该ca用户的私钥",
"cert": "该ca用户的证书"
}
}
响应参数
名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
code | Integer | 是 | 响应码,100成功;200失败 |
msg | String | 是 | 提示信息 |
data | Json | 是 | 具体内容见示例 |
参数示例
{
"code": 100,
"msg": "success",
"data": {
"transactionId": "交易id",
"payload": "合约调用的结果"
}
}
智能合约开发——EVM引擎
概述
区块链服务当前ECDSA安全体系版本支持Solidity开发的智能合约。
智能合约使用
开发者部署合约引擎后,可以使用EVM引擎提供的调用功能,对智能合约进行相关操作。以下步骤为智能合约使用的方法:
- 打开EVM页面,点击安装智能合约按钮,弹出安装智能合约弹窗,如下图:
1. 合约名称:符合规范的合约名称;<br>
2. 所属服务:选择服务实例;<br>
3. 所属通道:选择服务实例下的通道;<br>
4. 安装节点:选择合约安装的节点;<br>
5. 字节码:智能合约编译后的字节码;<br>
合约详情:显示合约名称、所属服务、所属通道等状态
点击调用按钮,打开合约调用弹出对话框,输入合约函数及相关参数,点击执行,发起调用请求;如下图:
查询相关参数:["query","合约地址","合约函数哈希"]
状态变更相关参数:["invoke","合约地址",合约函数哈希和参数]
示例相关的SimpleStorage合约。
pragma solidity ^0.4.0; contract SimpleStorage { uint storedData = 3; function set(uint x) public { storedData = x; } function get() public returns (uint) { return storedData; } }