ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BEPs协议:BUMO DEX 10 协议

2019-04-30 09:49:59  阅读:464  来源: 互联网

标签:DEX 10 函数 合约 BU token input BEPs


BUMO DEX 10 协议

简介

BUMO DEX 1.0(Decentralized exchange) 是基于 BUMO 智能合约制定的去中心化资产兑换协议。该协议为基于BUMO发行的各类资产提供去中心化自由兑换的能力。

目标

基于这套标准接口实现的去中心化资产兑换合约,可以让发行在 BUMO 上的各类资产安全快速的在链上自由兑换,而不必依赖中心化的交易所,而且,可以被其他应用程序和第三方快速对接和使用。

规则

BUMO 智能合约由 JavaScript 语言实现, 包含初始化函数 init 和两个入口函数 main、query 。init 函数用于合约创建时初始化; main 函数主要负责数据写入,query 函数负责数据查询。

DEX 1.0 协议支持 ATP token 与 BU 之间的自由兑换,兑换的服务费以 BU 收取。资产兑换时,支付BU的一方,需要在计划兑换的额度外,按服务费比率另外支付服务费,类似计税方式中的价外税,即服务费不含在兑换额度内。支付 atp 或 ctp token 的一方,从成交后收到的 BU 中,按服务费比率支付服务费,类似计税方式中的价内税,即服务费含在兑换额度内。服务费与交易额的比率, DEX 合约可自行设置。

DEX 属性

DEX 属性可以通过合约的 dexInfo 功能函数查询到,存储在智能合约的账号里。包含以下内容

变量 描述
owner DEX 合约的拥有者
feeRate 服务费比率
version Decentralized exchange 版本

注意

  • owner:如果创建 DEX 合约时,没有给出默认值,那么默认 DEX 合约的创建者。
  • feeRate: 单位为 1/(10^8),例如 feeRate 的值为 50000,那么服务费率是 50000/(10^8) = 5/10000。
  • version:DEX 的版本。如 1.0

功能函数

makeOrder

  • 发布 ATP token 或 CTP token 与 BU 兑换的订单,支持 ATP 兑换 BU,CTP 兑换 BU,BU 兑换 ATP,BU 兑换 CTP 。

  • ATP token 兑换时,使用 issuer(发行者地址)、code(资产代码) 和 value(兑换数量) 标注;

  • CTP token 兑换时,使用 issuer(CTP合约地址) 和 value(兑换数量) 标注;

  • BU 为 BUMO 内置原生 token ,不需要标识,兑换时只需要给出 value(数量) 即可;

  • 如果订单的兑出 token 为 CTP 资产,发布订单之前,订单用户需先在对应的 CTP 合约内授信 DEX 合约,授信额度为兑出 token 的额度;

  • 如果订单的兑出 token 为 ATP 资产,发布订单时,需用 payAsset(转移资产) 操作触发,转移的资产内容和数额为兑出资产的内容和数额;

  • 如果订单的兑出 token 为 BU,发布订单时,需用 payCoin(转账) 操作触发,转账的数额为兑出 BU 的数额加兑换服务费;

  • 入口函数 main

  • 参数 json 结构:

{  
    'method':'makeOrder',
    'params':{
        'own':{ //ATP token
            'issuer':buQxxx',
            'code':'EUR',
            'value':10000,
        },
       'target':{ //BU
           'value':1000,
        },
       'fee':5,
       'expiration':'2018...'
    }
}

own:订单兑出的 token 信息,包括 issuer(发行地址)、code(资产代码) 和 value(兑换数量),其中 CTP token 无 code,BU 无 issuer 和 code。

target:订单兑入的token,包括 issuer(发行地址)、code(资产代码) 和 value(兑换数量),其中 CTP token 无 code,BU 无 issuer 和 code。

fee:挂单账户支付给 DEX 合约的服务费,以兑出资产计数,如果兑出的 token 非 BU,结算时 DEX 合约会按照兑换比从兑换后的 BU 中扣除。

expiration:订单的截止日期,过期后订单无效。

  • 函数:function makeOrder(own, target, fee, expiration);
  • 返回值:true或者抛异常。

cancelOrder

  • 挂单账户取消订单。

  • 入口函数 main

  • 参数json结构:

    {
        'method':'cancelOrder',
        'params':{
            'order':'order_1'
        }
    }

    order: 取消的订单号;

  • 函数:function cancelOrder(order)

  • 返回值:true 或者抛异常

takeOrder

  • 对订单填单或者局部填单,如果该订单已完成或者已过期,该函数应该被 throw。

  • 如果填单的兑出 token 为 CTP 资产,填单之前,填单用户需先在对应的 CTP 合约内授信 DEX 合约,授信额度为兑出 token 的额度;

  • 如果填单的兑出 token 为 ATP 资产,填单时,需用 payAsset(转移资产) 操作触发,转移的资产内容和数额为兑出资产的内容和数额;

  • 如果填单的兑出 token 为 BU,填单时,需用 payCoin(转账) 操作触发,转账的数额为兑出 BU 的数额加兑换服务费;

  • 入口函数 main

  • 参数json结构:

    {
        'method':'takeOrder',
        'params':{
          'order':'order_1',
          'fee':5,
        }
    }
    

    order: 填单或局部填单的订单号;

    fee: 填单账户支付给 DEX 合约的服务费,以兑出资产计数,如果兑出的 token 非 BU,结算时 DEX 合约会按照兑换比从兑换后的 BU 中扣除;

  • 函数:function takeOrder(order)

  • 返回值:true或者抛异常

updateFeeRate

  • 更改 DEX 合约的服务费比率,如果非合约拥有者调用,该函数应该被 throw。

  • 入口函数 main

  • 参数json结构:

    {
        'method' : 'updateFeeRate',
        'params' : {
             'rate' : '50000' //单位为 1/(10^8)
        }
    }

    rate: 服务费与 token 兑换额的比率。

  • 函数:function updateFeeRate(rate)

  • 返回值:true或者抛异常

updateOwner

  • 更改 DEX 合约的拥有者,更改后,原合约拥有者将失去 DEX 合约的控制权,如果非合约拥有者调用,该函数应该被 throw。

  • 入口函数 main

  • 参数json结构:

    {
        'method' : 'updateOwner',
        'params' : {
             'address' : 'buQnTmK9iBFHyG2oLce7vcejPQ1g5xLVycsj'
        }
    }

    address: DEX 合约新拥有者的地址。

  • 函数:function updateOwner(address)

  • 返回值:true或者抛异常

clearExpiredOrder

  • 清除 DEX 合约中未完成但已过期的订单,如果非合约拥有者调用,该函数应该被 throw。

  • 入口函数 main。

  • 参数json结构:

    {
        'method' : 'clearExpiredOrder',
    }
  • 函数:function clearExpiredOrder()

  • 返回值:true或者抛异常

withdrawFee

  • 从 DEX 合约中提现服务费,如果非合约拥有者调用,该函数应该被 throw。

  • 入口函数 main

  • 参数json结构:

    {
        'method' : 'withdrawFee',
        'params' : {
             'value': 10000
        }
    }

    参数:value 提现的数额;

  • 函数:function withdrawFee(value)

  • 返回值:true或者抛异常

dexInfo

  • 返回 DEX 合约的基本信息。

  • 入口函数 query

  • 参数json结构:

    {
        'method':'dexInfo'
    }
  • 函数:function dexInfo()

  • 返回值:

    {
        'result':{
            'type': 'string',
            'value': {
                'dexInfo': {
                    'owner': 'buQnTmK9iBFHyG2oLce7vcejPQ1g5xLVycsj',
                    'feeRate': 50000, //单位为 1/(10^8)
                    'version': '1.0'
                }
            }
        }
    } 

getOrder

  • 根据订单号获取订单详细信息。

  • 入口函数 query

  • 参数json结构:

    {
        'method':'getOrder',
        'params' : {
             'order': 'order_1'
        }
    }

    order: 订单号;

  • 函数:function getOrder(order)

  • 返回值:

    {  
        'order_1':{
            'own':{ //ATP token
                'issuer':buQxxx',
                'code':'EUR',
                'value':10000,
            },
           'target':{ //BU
               'value':1000,
            },
           'fee':5,
           'expiration':'2018...'
        }
    }

getOrderInterval

  • 获取订单号的有效区间。

  • 入口函数 query

  • 参数json结构:

    {
        'method':'getOrderInterval',
    }
  • 函数:function getOrderInterval()

  • 返回值:

    {  
        'orderInterval':[9, 1000]
    }

合约入口

init

  • 创建合约时候,触发合约 init 入口函数,负责合约创建时的初始化。

  • 函数

    function init(input_str){
    }
  • 参数Json结构

    {
        'params':{
            'owner':'buQnTmK9iBFHyG2oLce7vcejPQ1g5xLVycsj',
            'feeRate':'50000',
            'version': '1.0'
        }
    }

    owner:如果创建 DEX 合约时,没有给出默认值,那么默认 DEX 合约的创建者。

    feeRate: 单位为 1/(10^8),例如 feeRate 的值为 50000,那么服务费率是 50000/(10^8) = 5/10000。

    version:DEX 的版本。如 1.0

  • 返回值:

    ​成功:无

    ​失败:抛出异常

main

  • 负责数据写入,其中包含了 makeOrdercancelOrdertakeOrderupdateFeeRateupdateOwnerclearExpiredOrderwithdrawFee等接口。

  • 函数体

    function main(input_str){
        let input = JSON.parse(input_str);
    
        if(input.method === 'makeOrder'){
            makeOrder(input.params.own, input.params.target, input.params.fee, input.params.expiration);
        }
        else if(input.method === 'cancelOrder'){
            cancelOrder(input.params.order);
        }
        else if(input.method === 'takeOrder'){
            takeOrder(input.params.order);
        }
        else if(input.method === 'updateFeeRate'){
            updateFeeRate(input.params.rate);
        }
        else if(input.method === 'updateOwner'){
            updateOwner(input.params.owner);
        }
        else if(input.method === 'clearExpiredOrder'){
            clearExpiredOrder();
        }
        else if(input.method === 'withdrawFee'){
            withdrawFee(input.params.value);
        }
        else{
            throw '<Main interface passes an invalid operation type>';
        }
    }

query

  • 负责数据查询,其中包含了dexInfogetOrdergetOrderInterval等接口。

  • 函数体

    function query(input_str){
    
        let result = {};
        let input  = JSON.parse(input_str);
    
        if(input.method === 'dexInfo'){
            result.dexInfo = dexInfo();
        }
        else if(input.method === 'getOrder'){
            result.order = getOrder(input.params.order);
        }
        else if(input.method === 'getOrderInterval'){
            result.interval = getOrderInterval();
        }
        else{
            throw '<Query interface passes an invalid operation type>';
        }
        return JSON.stringify(result);
    }

标签:DEX,10,函数,合约,BU,token,input,BEPs
来源: https://blog.csdn.net/shangsongwww/article/details/89684115

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有