搭建CYBEX网关 - CybexDex/cybex-node-doc GitHub Wiki

网关是一个能够加快价值进出CYBEX网络的可信任交易方。为实现这个目的,网关发行可赎回的借据(以下简称IOU),作为CYBEX区块链上的可替代可分割资产。

由网关发行的IOU可以在CYBEX网络内的交易中产生作用,并有网关负责承兑至持有人的外部网络账户。网关通过将外部资产(如比特币或在其他主链发行的通证)引入CYBEX网络,起到了进出CYBEX网络的桥梁作用。

因此,网关的工作主要包含以下几个方面:

1)创建资产,即CYBEX内盘IOU;
2)发行资产,将IOU发放至网关CYBEX账户;
3)接收用户外部资产,将对应外部资产的内盘IOU转账至用户CYBEX账户;
4)回收用户CYBEX账户内盘IOU,转账相应的外部资产至用户外部账户。

其中,3、4)相当于用户发起的充值、提现操作。

注意:CYBEX网关是一个中心化的服务,上述与CYBEX主链交互的操作之外,需要根据网关前置场景的业务逻辑,对内外盘资产的承兑汇率、交易黑白名单等进行设置。同时,为了确保内外盘资产的对应关系,建议网关设计中包含内外部审计的相关逻辑,以避免超发带来的承兑风险。

创建资产

创建CYBEX内盘IOU需要通过asset_create操作实现,操作说明如下:

参数 类型 必填 描述 示例
fee asset Y 手续费 详见如何获取手续费信息
symbol string Y 资产符号,大于等于5的资产,手续费为500CYB 为了区别各网关发布的资产,建议命名格式遵循“网关简称.资产符号”的格式,如JADE.ETH,表示瑶池创建并负责承兑的ETH
precision unit8_t Y 资产精度,小数点后位数,填写小于等于12的正整数 详见金额和价格如何表示
common_options asset_options Y 资产设置 详见下表“common_options参数”
bitasset_opts bitasset_options N 智能资产设置 网关发行的IOU一般不使用智能资产
is_prediction_market bool Y 是否为预测市场 如果该资产为预测市场的资产则设置为true
extensions extensions_type N 扩展字段

common_options参数

参数 类型 必填 描述 示例
max_supply share_type Y 最大发行量,所有发行操作的资产总和不能大于该值 由于总量无法修改,CYBEX也不支持发行符号相同的资产,建议将该参数设置的越大越好,如10000000000000,以便应对外部资产持续增加带来的内盘资产需求。
market_fee_percent uint16_t Y 交易手续费 使用该资产进行交易时,除了交易操作本身的手续费外,是否需要额外收取手续费。手续费以交易额的百分比计算,如20,表示交易额的20%为手续费
max_market_fee share_type Y 交易手续费上限
issuer_permissions uint16_t Y 发行人在发行操作后,可以对哪些权限进行调整 详见下表“asset_issuer_permission_flags”
flags uint16_t Y 当前激活的flag 详见下表“asset_issuer_permission_flags”
core_exchange_rate price Y 核心汇率 详见下表“core_exchange_rate参数”
whitelist_authorities flat_set<account_id_type> Y 资产持有账户ID白名单 需要限制持有账户时使用,如1.2.4532
blacklist_authorities flat_set<account_id_type> Y 资产持有账户ID黑名单 需要排除持有账户时使用,如1.2.3442
whitelist_markets flat_set<asset_id_type> Y 交易对手资产ID白名单 需要限制交易市场时使用,如1.3.2,表示仅可以与1.3.2的资产进行交易
blacklist_markets flat_set<asset_id_type> Y 交易对手资产ID黑名单 需要排除交易市场时使用,如1.3.3,表示不能与1.3.3的资产进行交易
description string Y 资产描述
extensions extensions_type N 扩展字段

asset_issuer_permission_flags

参数 类型 必填 描述 示例
charge_market_fee bool Y 是否设置了交易手续费
white_list bool Y 是否要求持有人加入白名单
override_authority bool Y 是否允许资产发行人在未征得持有人同意的情况下,强制将资产从A账户转账至B账户
transfer_restricted bool Y 是否强制资产发行人参与每笔交易,即每次转账操作中必须有一方为资产发行人
disable_force_settle bool Y 是否禁用强制清算
global_settle bool Y 是否允许全局清算
disable_confidential bool Y 是否禁用隐私交易
witness_fed_asset bool Y 是否由见证人节点喂价
committee_fed_asset bool Y 是否由委员会喂价

core_exchange_rate参数

参数 类型 必填 描述 示例
base asset Y 基准资产信息
amount share_type Y 汇率计算的分母 10
asset_id asset_id_type Y 基准资产ID,通常设置为CYBEX的核心资产,即CYB 1.3.0
quote asset Y 新建资产信息
amount share_type Y 汇率计算的分子 10
asset_id asset_id_type Y 新建资产ID,即当前资产的ID 1.3.0

Python示例

https://github.com/CybexDex/cybex-node-doc/blob/master/transaction/python/advanced/create_asset.md

发行资产

创建CYBEX内盘IOU后,需要通过asset_issue操作进行资产发行,操作说明如下:

参数 类型 必填 描述 示例
fee asset Y 手续费
issuer account_id_type Y 资产发行人账户ID
asset_to_issue asset Y 发行的资产(包含数量、资产ID)
issue_to_account account_id_type Y 发行资产的初始归集账户,即操作执行后,本次发行的资产会由哪个账户持有。一般来说,由于网关负责承兑资产,内盘IOU的初始归集账户为网关账户
memo memo_data N 备注
extensions extensions_type N 扩展字段

普通转账

资产进出CYBEX网络的过程,需要通过transfer操作实现网关账户用户账户的双向转账功能。操作参数如下:

参数 类型 必填 描述 示例
fee asset Y 手续费
amount share_type Y 手续费金额 55
asset_id asset_id_type Y 资产ID 1.3.0
from account_id_type Y 付款账户ID 1.2.37471
to account_id_type Y 收款账户ID 1.2.83
amount asset Y 转账
amount share_type Y 转账金额 10000
asset_id asset_id_type Y 资产ID 1.3.0
memo memo_data N 备注
extension extension_type N 扩展字段

用户发起充值、提现操作后,网关需要根据操作上链的结果,执行后续流程。例如:用户将外部资产抵押给网关后,网关将IOU从网关CYBEX账户转账至用户CYBEX账户,基于到账情况,网关对该笔充值订单的状态进行更新。

重点关注

为完成正确的网关出入金操作,需要对网关账户的资金往来加以监控。监控网关账户交易状态有多种方法,较为经济可靠的方式之一,是在每次新区块生成后,调用 get_account_history API来获取网关账户的操作记录的最新列表,对于其中新出现的操作记录加以处理。但在加以处理之前,最好确认该笔操作记录已经完全被链上确认。

CYBEX链遵循DPOS共识机制约束以产生和确认区块。任何一笔transaction交易由钱包发送至节点并加以广播后,虽会以较快的速度被打包上链,但此时刚刚上链的区块,仍属于待确认状态,该区块及其所含交易,仍有被回滚的可能。只有三分之二以上见证人节点确认此区块有效性后,才可认为该区块及其所含交易被正式记录在了CYBEX链上。

因此,在取得最新的操作记录后,要将该记录所在区块高度,与当前系统最新的不可逆区块高度进行比对。要查询当前不可逆区块高度,可通过get_dynamic_global_properties接口获得当前系统最新状态对象,该对象的last_irreversible_block_num字段即为当前链上不可逆区块高度。仅当操作所在区块高度低于不可逆区块高度时,才应对该笔操作进行处理。

可选操作

  • 注册CYBEX账户

用户(包括网关账户)可以通过CYBEX前端页面或者水龙头服务进行CYBEX账户注册,也可以由网关获取前置应用场景的信息,代用户完成账户注册。

CYBEX为所有第三方提供了一个公共的水龙头服务模板,第三方可以选择直接使用公共水龙头,或者参考该模板的实现方式,基于前置应用加入自定义的逻辑。

注意:使用水龙头服务中,填写的“注册人”账户需要成为CYBEX终生会员,目前CYBEX终生会员的手续费为1000CYB。