Skip to content

发起API请求

Gabrielle Zhou edited this page Oct 31, 2018 · 5 revisions

CYBEX的API分为两类:

  1. 查询操作,可以直接访问
  2. 修改操作,需要通过广播交易broadcast_transaction方式进行,⼴播交易时,需要进行签名。

进⾏查询时,可以使⽤curl的普通HTTP形式访问节点端⼝下的/rpc路路径来执⾏,或者使用辅助库的工具类来进行,工具类使用Websocket方式连接节点。

发起API请求

CYBEX节点提供了许多可以通过Websocket进行连接的API,包括:Database API、Account History API、Network Broadcast API、Network Nodes API。

请求API的具体步骤如下:

  1. 登录全节点
  2. 获得API访问权限
  3. 获取API标识
  4. 提供获取的标识,调用某个具体的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。

⼴播并执⾏⼀个交易,⼤致的步骤是:

  1. 构造交易体
  2. 向交易体中添加操作
  3. 添加签名
  4. ⼴播交易

前两个步骤是需要手动进行的,后两个步骤可以通过辅助库的工具类协助执行。

注册用户是一个常见的业务操作,我们以这个操作和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的具体参数描述,请参考相关名词解释

开发者社区

了解CYBEX

文档中心

DEVELOPERS

GETTING STARTED

DOCUMENTATION

Clone this wiki locally