R1協議(R1 protocol)基於以太坊的去中心化交易協議

買賣虛擬貨幣
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協議資訊:

更多區塊鏈資訊:http://www.qukuaiwang.com.cn/news/
風險提示:區塊鏈投資具有極大的風險,專案披露可能不完整或有欺騙。請在嘗試投資前確定自己承受以上風險的能力。區塊網只做專案介紹,專案真假和價值並未做任何稽覈!

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;