R1協議是一種高效的去中心化Token互換協議。它解決了傳統Token互換協議撮合效率低、用戶體驗差等問題,將去中心化Token互換協議帶入了一個新的高度。目前,基于以太坊的版本已經實現,后續會開發其他公鏈版本如NEO、QTUM等。
去中心化Token互換協議的發展
傳統互聯網是傳遞信息的網絡,信息都保存在中心化的機構中,由于缺乏可靠的信任機制,陌生節點間無法完成大規模的價值互換。比特幣的出現使可信的價值轉移成為了可能,它對中心化互聯網發起了挑戰,同時也帶動了區塊鏈技術的蓬勃發展。在后比特幣時代,涌現了一大批區塊鏈創新技術,以太坊正是新型區塊鏈的卓越代表,除了價值轉移外,它實現了智能合約,將現實世界的規則以算法的形式映射在區塊鏈上,極大的擴展了區塊鏈的應用范圍。一大批區塊鏈項目基于以太坊的ERC-20標準發行了自己的代幣,據不完全統計,目前以太坊上運行的代幣超過一千種, 構成了龐大的代幣經濟體系。
種類繁多的代幣對于交換提出了強勁的需求,帶動了去中心化Token互換協議的研究,陸陸續續涌現了Etherdelta、0x、IDEX等去中心化交易所,不斷的挑戰中心化交易所的地位。但是,受限于當前以太坊的性能,他們都存在著或多或少的問題,交易體驗不盡如人意。
· Etherdelta
Etherdelta的用戶需要把資產存入Etherdelta智能合約。在交易時,用戶將訂單攔到鏈FRelayer,等待別人來成交。如果想要吃別人的訂單,用戶需要手動指定對應的訂單發起交易。Etherdelta不會自動撮合用戶的訂單,交易體驗較差。
· 0x
0x用戶不需要將資產存入智能合約,只需要錢包中擁有ETH或T oken即可。在開始交易之前,用戶需要將錢包中的ETH轉換為一種叫做WETH的代幣。WETH是與ETH等價的ERC-20代幣,轉換比例為1:1,將ETH轉換成W ETH可以使0x合約方便的與其他ERC-20Tokcn進行結算。
開始新交易對的交易前,用戶還需要設置對應Token的權限,授權允許0x合約轉移該Token。盡管0x做到了足夠的去中心化,但是其撮合效率還是很低。對接0x協議的撮合引|擎必須不問斷的監聽用戶錢包的資金進出,如果用戶錢包的余額不足,就需要把用戶的委托訂單從訂單簿中剔除,一旦剔除不及時,該委托訂單的對手方將交易失敗。在網絡擁堵或者波動大時,這種情況可能頻繁出現,嚴重影響用戶體驗。
· IDEX
意識到0x協議的不足——0x智能合約和Rela yer無法完美的協調合作,IDEX選擇由中心化的Relayer將交易提交到鏈上。這樣IDEX可以很好的空制訂單順序,但是任然沒有解決搶單的問題。
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: 用戶希望購買的token合約地址
● amountBuy: 用戶 希望購買的token數量
● tokenSel: 用希望賣出的token合約地址
● amountSell: 用戶希望賣出的token數量
●baseToken:交 易對錨定的基礎token。默認填0,表示對ETH的交易對。如果是對RNT的交易對,此處填RNT的合約地址
● expires:訂單過期區塊數。默認設置-一個比較大的值,表示永不過期
● nonce: 隨機數。 用來保證訂單唯一性,目前的方案是nonce值為時間藏
●feeToken: 手續 費支付方式。如果為0,按傳統方法支付,即手續費從用戶獲得的token中扣除。如果為token合約地址,則使用該種Token支付手續費,前提是用戶存入了該token到R1智能合約中
訂單簽名
為了讓用戶的訂單能夠在網絡中安全的傳播并且不被篡改,需要用戶的私鑰對訂單數據進行簽名。
訂單數據的簽名過程為:
其中
客戶端將訂單數據簽名完成后,會將訂單原始數據、訂單哈希值和訂單簽名一起發生到Relayer。Relayer會對這些數據進行合法性校驗,主要校驗訂單哈希值是否一致、訂單簽名是否正確,以防止訂單數據被篡改。
需要強調的一點是,對于Relayer來說,在接收到用戶的訂單信息之前,無法知道這個用戶是maker還是taker。Relayer會根據訂單信息到達的時間先后和當前訂單池的數據,來決定這個用戶是taker還是maker。如果訂單池中有對應的訂單匹配價格,則最新提交訂單的用戶成為taker,另一方則成為maker。所以,每個用戶提交的訂單都應該包含訂單原始數據、訂單哈希值和訂單簽名,對于Relayer來說每個用戶都是對等的。
2.3 Relayer撮合
Relayer主要負責訂單撮合、錢包余額維護、提交上鏈等。Relayer內部各系統組成如下圖所示:
● OpenAPl: Relayer 對外提供API,第三方可以通過OpenAPI提交訂單、查詢交易狀態、訂單深度以及錢包余額
● Valiator: 對訂單數據合法性進行校驗,對賬廣余額進行校驗
● AccountSystem: 負責維護錢包余額
● BlockSyncing: 負責區塊信息同步,同步區塊鏈余額信息等
● MatchingEngine: 撮合引擎,負責撮合訂單
● MessageQueue: 消息系統。負責系統間通信
●Store: 存儲模塊。負責存儲信息,臨時數據緩存等。
Relayer處理邏輯
Relayer收到訂單數據后的內部處理流程如下:
1. 對訂單數據進行校驗。 這里主要校驗訂單的哈希值是否匹配,防止訂單數據被篡改;校驗用戶簽名是否正確,保證訂單數據確實由某個擁有正確私鑰的賬號發起; 校驗余額是否充足; 這里任何一步交易不通過都會引發訂單提交的失敗
2. 訂單撮合。訂單數據校驗成功后,訂單被放入撮合引擎進行撮合,同時訂單數據記錄到數據庫中。撮合引擎會根據訂單提交時間和價格高低來匹配訂單,一旦撮合成功,會標記訂單成交。并且會將匹配的兩個訂單放入消息隊列,等待提交到鏈上結算。
3. 提交上鏈。 提交到鏈上結算調用合約的batchTrade或trade方法, 并且只有admin賬號進行提交。admin賬號是由合約owner設置的賬號,有權限調用trade方法。為了提高并發,Relayer可以用多個admin賬號調用trade方法。
交易手續費
由于調用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的簽名信息(υ,r,s)
4. taker的簽名信息 (υ,r,s)
5. 交易額( Relayer根據撮合結果設置本次交易額)
6. maker和taker的應收手續費(由Relayer設置)
7. 接收手續費的賬號 (由Relayer設置)
其中1、2、3、4這四部分的信息由用戶提供,其他人都不可篡改;而5、6、7三項數據由Relayer設置,
輸入參數校驗
在進行最終的資產交割前,需要交驗輸入的參數是否合法,以保證交易能夠按照用戶的意圖進行成交。需要校驗的步驟包含:
●必須是admin賬號調用trade方法
●feeAccount (手續費接收賬號)必須合法。也就是說feeAccount必須是合約owner授權過的
●交易雙方的訂單必須是同一交易對。合約中的代碼片段:
· maker和taker的簽名確認。 合約中的代碼片段如下:
· 訂單價格必須匹配。訂單成交的基礎是價格匹配,價格必須滿足:
其中:
合約中代碼片段如下:
●余額充足。需要保證訂單交易的時候有足夠的額度,不會超過用戶希望交易的額度
以上所有條件校驗通過,才能進行最終的資產交割。交割成功,該筆交易會完整的記錄在區塊鏈上。
3. 充值與提現
R1協議的充值提現與中心化交易所的流程基本一致,不同的是使用R1協議的用戶將資金存入智能合約中,不受任何第三方控制,即使交易所被黑客攻擊,用戶的資金也是安全的,做到了資產的去中心化。需要注意的是,只有私鑰的所有者才能操作轉入R1智能合約的資產,用戶需要妥善保管自己的私鑰。
3.1充值
R1智能合約中用戶通過兩個方法進行充值:
●deposit ()
●depositToken
deposit方法允許用戶將eth充入R1智能合約中。該方法會在區塊鏈上登記用戶的資產余額,同時拋出一個Deposit 充值事件; Relayer通過監聽該事件感知用戶的充值。
depositToken方法允許用戶將token充入R 1智能合約中。與充值eth的不同之處在于,根據ERC-20 Token的標準,用戶充值前需要調用token合約的approve 方法,授權R 1智能合約轉賬token。只有完成這一步操作, 用戶才能成功將token充入智能合約中。為了減少approve操作次數,接入R1協議的交易所可以在用戶第一次充值token時讓用戶授權一個比較大的額度。這樣,用戶再次充值該token時,不需要進行額外的approve操作,消耗gas 費用。
3.2 提現
用戶可以隨時取出自己的資金,不需要人工審核。R1智能合約的用戶提現有以下幾種方法:
● adminWithdraw
● withdraw
● withdrawNoLimit
adminWithdraw是比較常用的提現方法。它的原理是,用戶將提現的操作委托給Relayer,Relayer根據用戶的提現請求調用R1合約的admin Withdraw,將資金轉賬給用戶的錢包。由于提現請求需要用戶的私鑰簽名,任何第三方(包括Relayer )都不能篡改用戶的數據,保證了提現的安全可靠。該方法的意義在于,提現請求最先由Relayer感知,Relayer可以快速及時地更新訂單池,提供更好的交易體驗。
withdraw適用于懂得如何調用智能合約的用戶。如果用戶不希望將提現數據委托給Relayer,那么他可以選擇調用合約的withdraw方法。但是在調用該方法前,用戶需要經歷一個兩階段提現的過程。即用戶需要先調用apply Withdraw方法申請提現,在滿足以下兩個條件的情況下,用戶才能調用
withdraw方法成功提現。這兩個條件是:
1. Relayer調用了approveWithdraw 方法, 同意用戶的提現請求;
2. 申請超過了一定的等待期后;
等待期由合約的owner設置,當前設置的等待期為7天。合約owner會視不同情況調整等待期,如1天甚至1小時,但不能超過7天。
withdrawNoLimit允許用戶方便的提現。只需要調用該方法即可提現,前提是合約的owner開啟該方法的開關。一般情況下該方法是關閉的,只有在特殊情況如Relayer由于某些原因不能及時響應用戶的提現申請時,該方法才會打開,方便用戶提現。
4. R1合約的治理
作為以太坊區塊鏈上的-份智能合約,R1 由ONEROOT團隊創建并部署,即R1智能合約的owner為ONEROOT團隊。為了保證R1協議安全穩定的運行,R1 智能合約的owner擁有一些特殊的權限,包含:
● 設置admin 管理員賬號。admin賬號負責調用trade、 adminWithdraw、 approveWithdraw等方法,保證Relayer維持正常的交易功能。
● 設置手續費賬號。只有經過授權的賬號才能接受用戶支付的手續費。
● 調整提現等待時間。R1智能合約的owner可以根據情況調整提現等待時間,方便用戶提現。
● 開啟便捷提現開關。在特殊情況下,如Relayer無法提供提現服務時,R1 合約的owner需要開啟該開關,方便用戶快速地提現。
admin Withdraw是比較常用的提現方法。它的原理是,用戶將提現的操作委托給Relayer,Relayer根據用戶的提現請求調用R1合約的adminWithdraw,將資金轉賬給用戶的錢包。由于提現請求需要用戶的私鑰簽名,任何第三方(包括Relayer )都不能篡改用戶的數據,保證了提現的安全可靠。該方法的意義在于,提現請求最先由Relayer感知,Relayer可以快速及 時地更新訂單池,提供更好的交易體驗。
未來研究
作為價值傳輸網絡的重要組成部分,中心化Token互換協議的研究日益深入,相關產品層出不窮。R1協議專注于提升用戶的交易體驗,力求達到中心化交易所的標準。然而,對所有基于以太坊的協議來說,以太坊網絡的處理能力始終是提升交易速度的瓶頸。但這并非一成不變的,即將到來的Plasma技術為以太坊帶來了商用化的希望。
Plasma技術的實現將大幅度提升以太坊網絡的TPS,改變以太坊網絡擁堵的狀況。同樣的,R1協議也可以采用Plasma技術,在以太坊上部署-份Plasma合約, 同時啟動一條Plasma子鏈,將Relayer的功能遷移到Plasma子鏈上,在提升性能的同時做到完全的去中心化。
除了以太坊網絡的技術發展,在其他公鏈上實現R1協議也是ONEROOT團隊的研究方向。以EOS為例,隨著生態的不斷發展,基于EOS的Token將越來越多,相應的去中心化交易所也會不斷涌現。受益于良好的TPS性能,這些交易所性能將遠超以太坊,為用戶帶來非凡的交易體驗,而這也是ONEROOT研究的方向。
評論
查看更多