7.3.1 文昌链(基于IRITA)网关接入说明
密钥算法
文昌链(基于IRITA)通过sm2算法生成链账户地址以及公私钥和助记词,具体可以参考SDK中提供的方法。
Chain ID
文昌链Chain ID为wenchangchain,EVM模块Chain ID为1223。
接入方式
文昌链(基于IRITA)支持RPC、REST、WebSocket及gRPC接口。
EVM模块新增RPC,WebSocket接口。
密钥模式
支持密钥托管模式以及上传链账户模式,不支持非托管的SDK请求。在密钥托管模式下,用户无法直接通过SDK调用合约,但可以通过REST-API进行合约的部署与调用;
注:文昌链新建链账户不再支持密钥托管模式,原有的密钥托管模式下的链账户可正常使用,另外原有的链账户只支持SM2算法,如若需使用新增的EVM模块,则需创建K1算法的链账户。
区块链浏览器
https://wenchangexplorer.bsnbase.com/
网关地址规则
若添加BsnAccount则认为是通过网关托管加签(密钥托管模式),若为非托管模式(上传链账户地址模式)则不需要添加。
- REST访问地址为:
网关地址/api/[项目id]/[BsnAccount]/rest/ {链上接口地址};
如果使用项目key接入,需按照网关地址/api/[项目id]/[BsnAccount]/[Protocol]/ {链上接口地址}格式拼接请求地址,同时请求报文头header中增加x-api-key:{项目key值}。
- RPC访问地址为:
网关地址/api/[项目id]/[BsnAccount]/rpc/{链上接口地址};
如果使用项目key接入,需按照网关地址/api/[项目id]/[BsnAccount]/[Protocol]/ {链上接口地址}格式拼接请求地址,同时请求报文头header中增加x-api-key:{项目key值}。
- EVM RPC访问地址为:
网址地址/api/[项目id]/[BsnAccount]/evmrpc/{链上接口地址};
如果使用项目key接入,需按照网关地址/api/[项目id]/[BsnAccount]/[Protocol]/ {链上接口地址}格式拼接请求地址,同时请求报文头header中增加x-api-key:{项目key值}。
注意:EVM RPC接口只适用于EVM合约模块,只支持K1账户。
- WebSocket访问地址为:
网关地址/api/[项目id]/ws/{链上接口地址};
如果使用项目key接入,需按照网关地址/api/[项目id]/[Protocol]/ {链上接口地址}格式拼接请求地址,同时请求报文头header中增加x-api-key:{项目key值}。
- EVM WebSocket地址为:
网关地址/api/[项目id]/evmws/{链上接口地址};
如果使用项目key接入,需按照网关地址/api/[项目id]/[Protocol]/ {链上接口地址}格式拼接请求地址,同时请求报文头header中增加x-api-key:{项目key值}。
- gRPC访问地址为:
opbningxia.bsngate.com:18603;
项目ID与项目Key,在请求header中增加:
{ projectIdHeader:项目ID }
{ projectKeyHeader:项目Key }
注:
1、密钥托管模式下,BsnAccount必传,代表BSN网关进行签名,其他模式可不传,默认自己签名,网关只负责进行交易转发。
2、使用gRPC接口时,需启用TLS证书认证,详情可参考最新版本的SDK:
GO语言:https://github.com/bianjieai/opb-sdk-go
Java语言:https://github.com/bianjieai/opb-sdk-java
项目id:创建项目后生成的项目ID,见下图;
项目id也可以从项目管理->操作->下载接入参数获取:
BsnAccount:BSN链账户标识, 链账户管理->链账户详情页面可看到,如图:
Protocol:开放链-协议(RPC,REST,WebSocket,gRPC)。
合约语言
- 文昌链(基于IRITA)官方使用Rust语言进行合约的开发。
SDK
开发文档
开发实例
示例
1. RPC接口密钥托管模式广播交易:
1)在密钥托管模式下,BSN会代替用户签署交易并广播交易,用户需按以下报文格式,将待签名的交易,转为base64格式字符串,提交给网关。
{
"method": "broadcast_tx_commit", // 支持:broadcast_tx_commit、broadcast_tx_async、broadcast_tx_sync,3种方法
"id": 1,
"jsonrpc": "2.0",
"params": {
"tx": "待签名交易base64字符串"
}
}
接口地址:网关地址/api/{您的开放联盟链项目ID}/{BSN Account}/rpc
若启用项目key则需要在HTTP Header中添加x-api-key请求头。
请求报文:
{
"jsonrpc": "2.0",
"id": 1,
"method": "broadcast_tx_commit",
"params": {
"tx": "CpABCo0BChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEm0KKmlhYTE4bGE1a3lmNDhqbGtkbGc0eGZ3cDI4cXR1cnQwNzdhMDU4c2E4MxIqaWFhMThsYTVreWY0OGpsa2RsZzR4ZndwMjhxdHVydDA3N2EwNThzYTgzGhMKBnVpcml0YRIJMTAwMDAwMDAwEhgSFgoQCgZ1aXJpdGESBjQwMDAwMBDAmgw="
}
}
2)获取块高(abci_info)
接口地址:网关地址/api/{您的开放联盟链项目ID}/rpc/abci_info
若启用项目key则需要在HTTP Header中添加x-api-key请求头。
2. REST接口
用户执行上链交易操作,需先组装未签名报文,并进行签名广播(通过REST-API接口)。
1) 合约调用
a. 组装未签名报文
- 托管非托管一致(wasm/contract/[合约地址])
接口地址:网关地址/api/{您的开放联盟链项目ID}/rest/wasm/contract/{合约地址}
若启用项目key则需要在HTTP Header中添加x-api-key请求头。
请求报文:
{
"base_req": {
"from": "iaa1mmdl52vvtz26pjq27z38cw664zqm3r83ru103a",
"memo": "Sent via Irita",
"chain_id": "wenchangchain",
"account_number": "0",
"sequence": "10",
"gas_adjustment": "1.2",
"fees": [{
"denom": "ugas",
"amount": "400000"
}],
"simulate": false
},
"exec_msg": "vadadWx2sbmNlIjnjhmFkZJYTx3MiOiJpYWExbW1kbDUydnZ0ejI2cGpxMjd6MzhjdzY2NHpxbTNyODNydTUwBGXifX0="
}
b. 广播交易(txs)
- 密钥托管模式
接口地址:网关地址/api/{您的开放联盟链项目ID}/{BSN Account}/rest/txs
若启用项目key则需要在HTTP Header中添加x-api-key请求头。
请求报文:(上一步返回的response作为请求报文,由网关进行签名)
{
"type": "cosmos-sdk/StdTx",
"value": {
"msg": [
{
"type": "wasm/MsgExecuteContract",
"value": {
"sender": "iaa1mmdl52vvtz26pjq27z38cw664zqm3r83ru103a",
"contract": "iaa17z0qt3fckutyw39yu53x8zfxa4wz7l3fnjhzd1",
"msg": {
"Balance": {
"address": "iaa1mmdl52vvtz26pjq27z38cw664zqm3r83ru103a"
}
},
"sent_funds": []
}
}
],
"fee": {
"amount": [
{
"denom": "ugas",
"amount": "400000"
}
],
"gas": "400000"
},
"signatures": [],
"memo": "Sent via Irita",
"timeout_height": "0"
}
}
- 上传链账户模式
接口地址:网关地址/api/{您的开放联盟链项目ID}/rest/txs
若启用项目key则需要在HTTP Header中添加x-api-key请求头。
请求报文:(用户自己签名过后的json)
{"mode":"block","tx":{"fee":{"amount":[{"amount":"400000","denom":"ugas"}],"gas":"400000"},"memo":"Sent via Irita","msg":[{"type":"wasm/MsgExecuteContract","value":{"msg":{"Balance":{"address":"iaa1mmdl52vvtz26pjq27z38cw664zqm3r83ru103a"}},"sender":"iaa1mmdl52vvtz26pjq27z38cw664zqm3r83ru103a","sent_funds":[],"contract":"iaa17z0qt3fckutyw39yu53x8zfxa4wz7l3fnjhzd1"}}],"signatures":[{"pub_key":{"type":"cosmos/PubKeySm2","value":"A1seg+6sdada8uAAb4PQLtikcOXxyWjMKdkg3M1U7S"},"signature":"KzEMdO67RhKvGkcje2YvFousOXjaCvSJRG7FMxosfuiULhdWhOLWbN0aFr1vbsvBofgEf4GI1kR+xOy4TqTNOg=="}]}}