-
Notifications
You must be signed in to change notification settings - Fork 2
发起API请求
CYBEX的API分为两类:
- 查询操作,可以直接访问
- 修改操作,需要通过广播交易broadcast_transaction方式进行,⼴播交易时,需要进行签名。
进⾏查询时,可以使⽤curl的普通HTTP形式访问节点端⼝下的/rpc路路径来执⾏,或者使用辅助库的工具类来进行,工具类使用Websocket方式连接节点。
CYBEX节点提供了许多可以通过Websocket进行连接的API,包括:Database API、Account History API、Network Broadcast API、Network Nodes API。
请求API的具体步骤如下:
- 登录全节点
- 获得API访问权限
- 获取API标识
- 提供获取的标识,调用某个具体的API方法
1. 登录
首先,我们需要完成登录操作:
> {"id":2,"method":"call","params":[1,"login",["",""]]}
< {"id":2,"result":true}
对于需要登录后才能调用的API,调用方需要填写 用户名 和 密码。节点在验证通过后,将会返回登录成功的信息。
2. 获得API访问权限
数据库API提供了大部分常用的查询接口,以此为例,我们可以通过以下方式 注册 Database API:
> {"id":2,"method":"call","params":[1,"database",[]]}
3. 获取API标识
在发起连接请求后,全节点会驳回该请求或返回一个唯一标识:
< {"id":2,"result":2}
这个返回结果代表了我们之前对Database API发出请求被允许了,这个id被称为DATABASE API ID。
4. 提供获取的标识,调用某个具体的API方法
现在,我们就可以调用Database API的某个具体方法了:
> {"id":1, "method":"call", "params":[DATABASE_API_ID,"get_accounts",[["1.2.0"]]]}
CYBEX原生的操作(Operations)需要通过广播的方式执行,广播操作通过broadcast_transaction
完成。
void graphene::app::network_broadcast_api::broadcast_transaction(const signed_transaction &trx)
其中,trx参数用来包裹Operation。
⼴播并执⾏⼀个交易,⼤致的步骤是:
- 构造交易体
- 向交易体中添加操作
- 添加签名
- ⼴播交易
前两个步骤是需要手动进行的,后两个步骤可以通过辅助库的工具类协助执行。
注册用户是一个常见的业务操作,我们以这个操作和JavaScript库为例,详细讲解一下广播的交易步骤。
首先,判断这是一个数据修改(新增)操作,所以需要通过广播交易broadcast_transaction
方式进行。创建账户使用的是account_create_operation
,因此,我们通过以下方式实现:
let tr = new TransactionBuilder(); // 构造一个交易体,TransactionBuilder可从cybexjs库中获得。
tr.add_type_operation("account_create", { // 向交易中添加所需广播的操作,操作名称为 account_create.
fee: {
amount: 0,
asset_id: "1.3.0"
}, // 该笔交易的手续费字段。
registrar: chain_registrar.get("id"), // 注册人ID
referrer: chain_referrer.get("id"), // 引荐人ID
referrer_percent: referrer_percent, // 引荐人返利额度
name: new_account_name, // 用户名
owner: { // 用户的Owner权限设置
weight_threshold: 1, // Owner权限的域限
account_auths: [], // 占有权限的用户列表
key_auths: [[owner_pubkey, 1]], // 占有权限的公钥列表
address_auths: [] // 占有权限的地址列表
},
active: { // 活跃权限配置
weight_threshold: 1,
account_auths: [],
key_auths: [[active_pubkey, 1]],
address_auths: []
},
options: { //其他配置
memo_key: active_pubkey, // Memo公钥,其他人向该用户发送Memo时,将使用该公钥进行加密
voting_account: "1.2.5", // 默认投票代理
num_witness: 0, // 初始投票的证人数量
num_committee: 0, // 初始投票的委员会数量
votes: [] //初始投票的ID集合
}
});
tr.add_signer(privKey); // 向交易添加签名,传入私钥
await tr.broadcast(); // 广播交易,异步操作
CYBEX原生operation的具体参数描述,请参考相关名词解释