区块链应用

R1协议(R1 protocol)基于以太坊的去中心化交易协议

R1 protocol 来源:区块网 2018-11-27 09:03

R1协议是ONEROOT提出的基于以太坊的去中心化交易协议。R1协议具有去中心化交易协议的基本特性,实现了链下订单中继、链上结算、交易记录可审计、去中心化资产托管。此外,R1协议还实现了基于委托的链上资产结算机制和订单的链上撮合功能,为基于R1协议的交易所带来更好的交易体验。

R1协议的链下部分由Relayer实现。Relayer即订单中继,是指接入了R1协议的交易所,负责收集用户订单、初步撮合后提交到链上进行结算。当前,接入R1协议的Relayer为ROOTREX交易所,由ONEROOT团队负责实现。

优势

去中心化的链上资产托管
用户资产存放在智能合约中,不受任何第三方控制。即使交易所被攻击,用户资产也是安全的。用户可以通过交易所提取资产,也可以调用合约接口自行提取。

基于委托授权的订单上链
不同于0x、以德、kyber等协议的交易模型,即订单由用户(taker)直接提交到链上结算。R1协议使用了新的交易模型,用户对委托订单签名,授权Relayer在撮合成功后提交到链上完成资产结算,以获得性能提升和更好的用户体验。

订单链上撮合
R1协议包含了对双方订单的撮合,协议会根据双方订单意图进行价格匹配,满足条件后再结算。在链下,用户将委托订单提交给Relayer,Relayer发现订单匹配后,将双方订单提交到链上,由R1协议对双方订单意图做最终的匹配和结算。

oneroot项目

OneRoot共建者计划的目标是建立适配于区块链行业的经济模型,链接生态内外的所有资源。为此,需要打造一系列的基础设施,而R1协议正是其中最重要的一环。作为基于以太坊的去中心化交易协议,R1允许各种ERC20标准的数字资产在链上自由流通,为生态内各种资源的交互奠定了基础。通过独特的机制设计,R1协议能够将交易产生的摩擦费用反哺至共建者计划基金会,用于促进生态的良性发育。在R1协议的基础上,ONEROOT团队开发包含钱包、交易接入等功能的模块化配套工具产品,方便流量主更加便捷的使用协议,从而吸引更多资源进入生态。

如何工作

去中心化资产托管

去中心化资产托管是指用户将资产(如ETH和ERC-20 Token)存入R1智能合约后,依然保持对资产的控制权,能够自由提取,Relayer不能随意操作用户的资产。

在资产的管理上,0x协议采用了不同的方案:用户不需要将资产存入智能合约。该方案看似带来了一定便捷性,但是用户使用0x交易前还是需要授权0x智能合约转账Token(不授权的情况下0x合约无法转移用户的Token),这令便捷性大打折扣。此外,如果用户未取消订单却将资产从钱包转出,可能带来交易失效的问题。这使得Relayer无法很好的控制订单簿,从而令交易体验大打折扣。

ONEROOT的认为,用户虽然将资产存入了R1智能合约,但是依然拥有对资产的百分百控制权。只要用户没有未成交的委托订单,可以随意提取自己的资产,不受第三方限制。R1协议的去中心化资产托管方案在保证安全性的前提下,能够提升用户的交易体验。

链下订单委托

链下订单需要由Relayer收集订单并撮合。用户的挂单不会立即提交到链上,而是先由Relayer的撮合引擎进行订单匹配,找到符合条件的对手单后再提交到链上交易。这样做的好处是,用户的挂单可以立即被Relayer放入订单簿,避免了订单提交上链的区块等待时间,能够提供近似中心化交易所的体验。

为了防止恶意挂单,Relayer需要限制挂单的最小额度。如ROOTREX交易所规定用户的挂单额度至少为0.05 ETH。

R1协议禁止挂市价单,只支持限价单交易。因为市价单提交到链上是十分危险的,会出现恶意低价吃单问题。这样可以最大限度保障用户的利益。为了保证用户订单的真实有效不可伪造、且具有唯一性,用户提交的订单经过了ECDSA数字签名,一旦签名就不可篡改。

基于委托授权的订单上链

Relayer聚集了用户的委托订单,一旦发现可以成交的订单就提交到链上结算。将交易订单提交到链上结算的动作是由Relayer完成的。Relayer必须具有R1协议授予的管理员权限,才可以提交交易订单。通过ONEROOT审核的交易所才能成为管理员。

这种方式不同于0x、以德、kyber等协议的交易模型。在以0x为代表的交易模型中,订单由Taker(吃单的一方)直接提交到链上结算。这种方式的好处显而易见,不需要第三方提交交易订单到链上。但是这样会发生“并发抢单失效”的问题。并发抢单失效是指,有两个用户同时吃同一个挂单的时候,其中一方会失败,导致用户gas浪费。

为了防止“并发抢单失效”问题,R1协议规定交易订单由经过授权的Relayer来提交。由于订单需要使用用户的私钥签名,保证了唯一性和不可伪造,因此用户的订单是安全可靠的。Relayer能做的是找出匹配的对手订单,提交到链上结算。为了激励Relayer撮合链下订单,Relayer可以获得一部分交易手续费。R1协议对手续费设置了上限,不超过订单金额的1%,以防止过高的手续费损害用户利益。

订单链上撮合

R1协议“基于委托授权的订单上链”的机制要求:Relayer提交到链上结算的交易订单(Maker和Taker的订单)必须经过用户私钥签名。

在以0x为代表的交易模型中,Taker提交的交易订单只包含了Maker的订单信息和自己的意愿成交数量,如左图所示;而在R1的交易模型中,Relayer提交的交易订单包含Maker的订单信息和Taker的订单信息,如右图所示。
不同于0x等协议的交易模型,R1协议接收到的是Maker和Taker的订单意图,实际能否成交、成交多少需要R1协议来撮合。
R1协议引入的“订单链上撮合”和“基于委托授权的链上资产结算”,保证了Relayer可以像中心化交易所一样自动撮合订单,并且实现资产的链上结算,以达到最佳的交易体验。
交易记录审计
相比中心化交易所,R1协议公开透明,避免了暗箱操作、虚假交易、数据回滚等弊端。经过R1协议的每一笔交易都是可查询、可追溯的,一旦交易提交到链上,它就是真实可靠且不可篡改的。此外,用户的交易、存款、提现都可以在链上追踪到,不受第三方控制,最大限度保证了交易的真实性。

 

特点

 

R1协议
1. 架构

R1协议的架构包含三部分。
作为去中心化的媒介,R1智能合约部署在以太坊区块链上,可以存储用户的资产、交易记录,达到资产去中心化、交易记录可审计的目标。
Relayer是订单中继系统,与R1智能合约交互,主要负责订单撮合与提交上链。Relayer对外提供OpenAPI,允许第三方交易所提交订单到撮合引擎。
第三方交易所的主要职责是收集用户的订单数据,并将签名后的订单提交给Relayer。通过R1协议,不同交易所可以成为分布式商业系统的一部分,共享订单数据和流动性,为用户带来更好的交易深度和体验。
2. 订单交易

 

2.1订单交易流程
订单交易处理流程描述了从用户提交订单开始,到Relayer报合订单,再到将交易数据提交到区块链上的过程。如图所示:

1. 用户输人订单信息。用户以一定价格和数量买入或者卖出token, 客户端将数据转换成约定的订单数据格式。
2.用户使用私钥对订单签名。私钥由用户保管,任何交易所以及Relayer不存储用户的私钥。放入后台订单池。签名完成后,客户端将订单信息发送给Relayer, Relayer对订单信 息进行合法性校验后,放入订单池进行撮合。
3.后台撮合成功。Relayer的撮合引擎对来自不同交易所的所有订单进行统一撮合。
4.后台提交到链上交易。撮合成功后,Relayer会将匹配的两个订单信息及交易额提交到区块链上进行最终的结算。
以上为订单交易的基本流程,下面详细说明每个过程的技术细节,包含:
· 订单的数据格式;
· 订单签名算法;
· Relayer职责;
· 链上结算逻辑。
2.2 订单
订单数据格式
在交易所中,用户的订单信息体现为:交易对+交易价格+交易数量。
而在R1智能合约中,订单的数据格式如下:
tokenBuy + amountBuy + tokenSell + amountSell + base Token + expires + nonce + fee Token
参数说明如下:
·tokenBuy:用户希望购买的token合约地址
·amountBuy:用户希 望购买的token数量
·tokensell:用希望卖出的token合约地址
·amountSel:用户希望卖出的token数量
·baseToken:交 易对锚定的基础token。默认填0,表示对ETH的交易对。如果是对RNT的交易对,此处填RNT的合约地址
· expires:订单过期区块数。默认设置一个比较大的值,表示永不过期
· nonce:随机数。用来保证订单唯一性,目前的方案是nonce值为时间截
· feeToken:手续费支付方式。如果为0,按传统方法支付,即手续费从用户获得的token中扣除。如果为token合约地址,则使用该种Token支付手续费,前提是用户存入了该token到R1智能合约中
订单签名
为了让用户的订单能够在网络中安全的传播并且不被篡改,需要用户的私钥对订单数据进行签名。
订单数据的签名过程为:

其中
· (v,r,s)签名后的数据
· m:签名前的原始订单数据
· m = tokenBuy + amountBuy + tokenSell + amountSell + base Token + expires + nonce + fee Token,· key :用户的私钥
· KEC :哈希函数,采用kecaak256算法对订单数据进行Hash
· SECP :签名函数。采用椭圆曲线算法secp256k1进行签名
客户端将订单数据签名完成后,会将订单原始数据、订单哈希值和订单签名一-起发 生到Relayer。Relayer会对这些数据进行合法性校验,主要校验订单哈希值是否一致、订单签名是否正确,以防止订单数据被篡改。
需要强调的一一点是,对于Relayer来说,在接收到用户的订单信息之前,无法知道这个用户是maker还是taker。Relayer会 根据订单信息到达的时间先后和当前订单池的数据,来决定这个用户是taker还是maker。如果订单池中有对应的订单匹配价格,则最新提交订单的用户成为taker,另一方则成为maker。所以,每个用户提交的订单都应该包含订单原始数据、订单哈希值和订单签名,对于Relayer来说每 个用户都是对等的。
2.3 Relayer撮合
Relayer主要负责订单撮合、钱包余额维护、提交上链等。
Relayer内部各系统组成如下图所示:

· OpenAPI: Relayer对外提供API, 第三方可以通过OpenAPI提交订单、查询交易状态、订单深度以及钱包余额
· Valiator:对订单数据合法性进行校验,对账户余额进行校验
· AccountSystem: 负责维护钱包余额
· BlockSyncing: 负责区块信息同步,同步区块链余额信息等
· MatchingEngine: 撮合引擎,负责撮合订单
· MessageQueue: 消息系统。负责系统间通信
· Store: 存储模块。负责存储信息,临时数据缓存等。
Relayer处理逻辑
Relayer收到订单数据后的内部处理流程如下:
1. 对订单数据进行校验。 这里主要校验订单的哈希值是否匹配,防止订单数据被篡改;校验用户签名是否正确,保证订单数据确实由某个拥有正确私钥的账号发起;校验余额是否充足;这里任何一步交 易不通过都会引发订单提交的失败
2. 订单撮合。订单数据校验成功后,订单被放入撮合引擎进行撮合,同时订单数据记录到数据库中。撮合引擎会根据订单提交时间和价格高低来匹配订单,一旦撮合成功,会标记订单成交。并且会将匹配的两个订单放入消息队列,等待提交到链上结算。
3. 提交上链。提交到链上结算调用合约的batchTrade或trade方法,并且只有admin账号进行提交。admin账号是由合约owner设置的账号,有权限调用trade方法。为了提高并发,Relayer可以用多个admin账号调用trade方法
gasPrice
为了保证公平的交易,Relayer调用trade方法时设置的gasPrice对每 个用户来说都是统- -的。以太坊的gasPrice会由于网络的拥堵情况不同而有所差距,使用的人越多,网络越拥堵,gasPrice的费用越高。为了让交易能够尽快在链上被矿工打包,Relayer会根据当前网络情况调整gasPrice。
交易手续费
由于调用trade方法的是admin账号,因此gas费用是从admin账号中扣除的。Relayer 需要保证admin账号有足够的ETH额度,否则可能由于额度不足以支付gas费用而无法提交上链。
这笔gas费用会由admin事先垫付,但是最终还是需要由交易双方来共同承担。目前的做法是maker和taker各承担gas费用的50%。
所以,用户的手续费包含两部分:交易额的0.1%+gas费用的50%。Relayer会 根据这个原则算出需要扣除的token数量,传入trade方法作为参数,trade方法会扣除相应的费用。对于用户来说,用户实际得到的token数量会比交易计算得到的数量少-一些, 少的部分即为扣除的费用。
2.4 链上结算
链上结算的逻辑主要在R1智能合约的trade方法中实现。trade方法主要对maker 和taker的订单进行校验,以及做资产的链上交割。
以下说明trade方法的具体实现细节
输入参数
trade方法的输入参数包含以下几部分:
1. maker的订单数据(见订单数据格式一节说明)
2. taker的订单数据(见订单数据格式一节说明)
3  maker的签名信息(u,r,s)
4 taker的签名信息(u,r,s)
5 交易额Relayer根据撮合结果设置本次交易额)
6 maker和taker的应收手续费 (由Relayer设置)
7 接收手续费的账号 (由Relayer设置)
其中1、2、3、4这四部分的信息由用户提供,其他人都不可篡改;而5、6、7三项数据由Relayer设置,
输入参数校验
在进行最终的资产交割前,需要校验输入的参数是否合法,以保证交易能够按照用户的意图进行成交。需要校验的步骤包含:
· 必须是admin账号调用trade方法
· feeAccount (手续费接收账号)必须合法。也就是说feeAccount必须是合约owner授权过的
· 交易双方的订单必须是同一交易对。合约中的代码片段:

其中:
x1 =makerOrder amountSell,
X2 =takerOrder amountSell,
V1 =makerOrder amountBuy,
y 2 =takerOrder amountBuy
合约中代码片段如下:

· 余额充足。需要保证订单交易的时候有足够的额度,不会超过用户希望交易的额度,以上所有条件校验通过,才能进行最终的资产交割。交割成功,该笔交易会完整的记录在区块链上。
3. 充值与提现
R1协议的充值提现与中心化交易所的流程基本一致,不同的是使用R1协议的用户将资金存入智能合约中,不受任何第三方控制,即使交易所被黑客攻击,用户的资金也是安全的,做到了资产的去中心化。需要注意的是,只有私钥的所有者才能操作转入R1智能合约的资产,用户需要妥善保管自己的私钥。
3.1充值

R1智能合约中用户通过两个方法进行充值:
· deposit ()
· dcpositTokcn
deposit方法允许用户将eth充入R1智能合约中。该方法会在区块链上登记用户的资产余额,同时抛出一个Deposit充值事件; Relayer通过监听该事件感知用户的充值。
depositToken方法允许用户将token充入R1智能合约中。与充值eth的不同之处在于,根据ERC-20 Token的标准,用户充值前需要调用tcken合约的approve 方法,授权R1智能合约转账token。只有完成这一步操作, 月户/能成功将token充入智能合约中。为了减少arprove操作次数,接入R1协议的交易所可以在用户第次充值token时让用户 授权个比较大的额度。这样,用户再次充值该token时,不需要进行额外的approve换作,消耗gas费用。
3.2 提现
用户可以随时取出自己的资金,不需要人工审核。R1智能合约的月户提现有以下几科方法:
· adminWithdraw
· withdraw
· withdrawNoLimit
adminWithdraw是比较常用的提现方法。它的原理是,用户将提现的操作委托给Relayer,Rclayer根据用户的提现请求调用R1合约的adminWithdraw ,将资金转账给用广的钱包。由于提现请水需要用户的私钥签名,任何第三方(包括Relayer )都不能篡改用户的数据,保证了提现的安全可靠。该方法的意义在于,提现请求最先由Relayer感知,Ralayer可以快速及时的更新订单池,提供更好的交易体验。
withdraw适用于懂得如何调用智能合约的用户。如果用户不希望将提现数据委托给Relayer,那么他可以选择调用合约的withdraw方法。但是在调用该方法前,用户需要经历一个两阶段提现的过程。即用户需要先调用applyWithdraw方法申请提现,在满足以下两个条件的情况下,用户才能调用withdraw方法成功提现。这两个条件是:
1. Relayer调用了approveWithdraw 方法,同意用户的提现请求,
2. 申请超过了一定的等待期后;
等待期由合约的owner设置,当前设置的等待期为7天。合约owner会视不同情况调整等待期,如1天甚至1小时,但不能超过7天。
withdrawNoLimit允许用户方便的提现。只需要调用该方法即可提现,前提是合约的owner开启该方法的开关。一般情况下该方法是关闭的,只有在特殊情况如Relayer由于某些原因不能及时响应用户的提现申请时,该方法才会打开,方便用户提现。
4.  R1合约的治理
作为以太坊区块链上的一份智能合约,R1 由ONEROOT团队创建并部署,即RI智能合约的owner为ONEROOT团队。为了保证R1协议安全稳定的运行,RI 智能合约的owner拥有一一些特殊的权限,包含:
· 设置admin管理员账号。admin账号负责调用trade、 adminWithdraw、 approveWithdraw等方法,保证Relayer维持正常的交易功能。
· 设置手续费账号。只有经过授权的账号才能接受用户支付的手续费。
· 调整提现等待时间。R1 智能合约的owner可以根据情况调整提现等待时间,方便用户提现。
· 开启便挑提现开关。在特殊情况下,如Relayer无法提供提现服务时,R1合约的owner需要开启该开关,方便用户快速地提现。
adminWithdraw是比较常用的提现方法。它的原理是,用户将提现的操作委托给Relayer,Relayer根据用户的提现请求调用R1合约的adminWithdraw ,将资金转账给用户的钱包。由于提现请求需要用户的私钥签名,任何第三方(包括Relayer )都不能篡改用户的数据,保证了提现的安全可靠。该方法的意义在于,提现请求最先由Relayer感知,Relayer可以快速及时地更新订单池,提供更好的交易体验。

 

关于更多R1协议信息:https://www.r1protocol.com/

更多区块链信息:http://www.qukuaiwang.com.cn/news/
风险提示:区块链投资具有极大的风险,项目披露可能不完整或有欺骗。请在尝试投资前确定自己承受以上风险的能力。区块网只做项目介绍,项目真假和价值并未做任何审核!

文章来源:http://www.qukuaiwang.com.cn/news/14042.html
原文作者:R1 protocol
特别申明:区块链行业ICO项目鱼龙混杂,投资风险极高;各种数字货币真假难辨,需用户谨慎投资。blockvalue.com只负责分享信息,不构成任何投资建议,用户一切投资行为与本站无关。

1.价值区块链(blockvalue.com)遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.价值区块链的原创文章,请转载时务必注明文章作者和"来源:价值区块链(blockvalue.com)",不尊重原创的行为本站或将追究责任;3.作者投稿可能会经价值区块链编辑修改或补充。