LOOPRING(路印)
去中心化代幣交易撮合協議
1.5 版
daniel@loopring.org
alex@loopring.org
jay@loopring.org
Loopring Project Ltd
foundation@loopring.org
2017 年 12 月 29 日本文僅供參考之用,不構成在任何司法管轄區出售證券或招攬購買證券的要約。
摘要
本文描述了一個開放的,支持類 ERC20 和智能合約的代幣間多邊交易協議。通過該
協議,可以建立去中心化且無需資產托管的交易所應用。我們將該協議定位為下一代數字
資產交易所的開放標準之一和架構基石。傳統交易所可以通過擁抱該協議改進目前交易
所的撮合方式,降低用戶信任成本和自身運營風險;去中心化應用(dApp)也可以在智
能合約中調用該協議提供的合約實現應用內的代幣轉換。
1
目錄 2
目錄
1 ?背景 3
2 ?相關工作 3
3 ?協議設計 5
3.1 ?符號定義 ................................... 6
3.2 ?訂單兌換率恒定................................ 6
3.3 ?可規約性 ................................... 7
3.4 ?環路撮合 ................................... 7
3.4.1 ?成交條件和價格............................ 8
3.4.2 ?成交量................................. 8
3.4.3 ?撮合費用 ............................... 9
3.4.4 ?交易所費用強制折扣......................... 10
3.5 ?防作弊和防攻擊................................ 11
3.5.1 交易所無風險套利 .......................... 11
3.5.2 交易所拒絕服務............................ 11
3.5.3 塵埃訂單攻擊............................. 11
3.5.4 余額不足訂單攻擊 .......................... 11
3.5.5 撮合竊取 ............................... 12
3.6 ?市場深度 ................................... 12
3.7 ?數據格式 ................................... 12
3.8 ?訂單狀態 ................................... 13
3.9 ?智能合約 ................................... 14
4 ?Loopring 協議代幣 LRC 144.1 代幣的應用 .................................. 14
4.2 去中心化自治................................. 15
4.3 代幣的原生流動性 .............................. 16
5 ?交易所 175.1 傳統與Loopring上交易所模式的對比 ................... 17
6 ?總結 18
7 ?感謝 19
附錄 22附 錄 A Loopring 下單和撮合流程 22
1 背景 31 背景
區塊鏈 [1][2] 作為比特幣 [3] 的底層技術,本質上是去中心化無信任環境中的存在
性共識機制 [4][5]。存在性可應用于各種不同的數據,如股權,版權,使用權等。盡管聯
盟鏈和企業私有鏈中共識數據的類別正在變得越來越多樣化,但這些數據的價值卻有著
明確的邊界限制 — 只限于聯盟成員間和企業內部。我們認為區塊鏈的價值網絡屬性目
前只有在公有鏈中才能得到更好的體現。根據 coinmarketcap.com 的統計,截止本文成
稿時間,區塊鏈上代幣總市值已經接近 790 億美元,以太坊區塊鏈 [6](ETH)上承載
的代幣市值也已超過 170 億美元。
區塊鏈對各行業都可能有著深遠的影響,尤其是金融領域。我們相信基于區塊鏈的
新金融會有一個明顯趨勢,即資產代幣化(Tokenization)[7][5]:一方面鏈下資產的使
用權,所有權,分紅權等相關權益通過抵押,會以代幣(Token)[2] 的形式發行到區塊
鏈上,另一方面區塊鏈上資產也會進行跨鏈發行。資產代幣化的目標之一就是低成本,
全球化,全天候的高流動性。而流動性則主要通過交易所得以實現,因此一個更適合區
塊鏈上代幣的交易標準對于區塊鏈金融至關重要。
現階段交易所都采用類似的模式:交易所要求用戶將法幣或者代幣充值到交易所的
銀行賬戶或區塊鏈地址中,然后交易所在自己的私有虛擬賬戶系統中為用戶進行 IOU記賬。用戶實際交易的是這些 IOU。為了將 IOU 兌換成法幣或區塊鏈代幣,用戶需要
向交易所提出提現申請,提現成功后,才算真正交易完成。在這個過程中,交易所替用
戶保管資產的能力是用戶最大的風險;同時用戶還需承擔交易所運營者商業道德帶來
的其它風險,比如挪用資金造成資不抵債等。2014 年 2 月當時世界最大的比特幣交易
所 Mt.Gox 的 85 萬個比特幣被盜一空 [8],公司向日本東京地方法院申請破產保護。該
公司的用戶至今仍在等待其返還尚未被盜的少量比特幣。隨著調查的不斷進行 Mt.Gox被曝出所謂的比特幣被盜其實是監守自盜。85 萬個“被偷竊”的比特幣中,實際上因
外部盜竊失蹤的僅為 7000 個。2016 年 8 月最大的美元比特幣交易平臺香港的 Bit nex由于網站出現安全漏洞,導致用戶持有的比特幣被盜,被盜的比特幣共 119756 枚,總
價值約為 6500 萬美元。隨后該公司決定由所有用戶共同分擔損失以避免破產。這些發
生過的事件一方面反映出區塊鏈代幣交易在各個國家監管政策的缺失,另一方面也證實
了中心化交易所模式的固有風險。
本文描述的基于區塊鏈的去中心化交易機制就是為了徹底解決上述問題。去中心化
交易的核心優勢之一是避免任何資產被托管,因此資產就不存在被盜的可能,這會極大
降低用戶對交易所的信任成本。這種交易機制的另一個優勢是沒有地緣和時間限制,以
及極高的透明性和可追溯性。這些特點會促使交易整體具有更大的流動性和更小的價
差。
2 相關工作
開源社區已經有過一些基于區塊鏈搭建去中心化交易所的嘗試,如瑞波(Ripple)、
比特股(BitShares)、Openledger 等。
Ripple [9] 是一個去中心化的銀行系統間清算協議,是為了解決銀行間清算的高費
用和高延遲問題而設計,具有快速、方便、超低費用的優點。Ripple 提出了一項 In-
2 相關工作 4
terledger [10] 協議(ILP)實現跨賬本的資產交易。ILP 本身并不是一個賬本,相反,它
提供了一個頂層加密托管系統,在稱之為“連接者”的中介機構的幫助下,可以讓資金
在各賬本之間進行流動。Ripple 交易依賴于網關間信任的建立,而網關提供代幣發行功
能。
比特股(BitShares)[11][12] 是一個區塊鏈開發平臺,任何個人和機構都可以在此
平臺上自由地進行轉賬、借貸、發行資產等,也可以基于這個平臺快速搭建出去中心化
的金融服務平臺等。BitShares 內置的去中心化交易所(DEX),讓數字資產的交易撮合
和交割完全發生在鏈上,并通過內置智能合約錨定其他資產,如法幣、比特幣、黃金、
白銀等??上?BitShares 項目由于開發者自身的問題,已經慢慢被邊緣化。
Openledger[13] 是一個新型去中心化交易平臺。它允許用戶將比特幣兌換成法幣錨
定的 SmartCoins,SmartCoins 可以直接通過 paypal、瑞波網關兌換成現金。需要注意
的是,Openledger 在很大程度上依賴于 BitShares 2.0 平臺以及 Graphene Toolkit。因
此,Openledger 平臺的性能取決于 Graphene Toolkit 的性能和 BitShares 2.0 平臺的性
能。
比特幣的閃電網絡 [14] 和以太坊上的雷霆網絡 [15] 是兩個去中心化的系統。它們
的卓越之處在于,無需信任對方以及第三方即可實現實時的、海量的交易網絡。閃電網
絡和雷霆網絡提供了一個可擴展的微支付通道網絡。交易雙方若在區塊鏈上預先設有支
付通道,就可以多次、高頻、雙向地通過軋差方式實現瞬間確認的微支付;雙方若無直
接的點對點支付通道,只要找到網絡中一條連通雙方的、由多個支付通道構成的支付路
徑即可。閃電網絡和雷霆網絡的突出貢獻是將鏈上交易放到鏈外,只把最后一筆清算交
易提交到區塊鏈上,從而變相為區塊鏈擴容。
Bancor[16] 協議引入了一種基于數學模型的方案去試圖解決經濟學中的“雙重需求
巧合”問題。其理念和預測市場中的 Logarithmic Market Scoring Rules(LSMR)[17]類似。Bancor 協議基于以區塊鏈為基礎的智能合約和儲備代幣,允許任何人通過這個
協議創建代幣,新的代幣以預先設置的比率來持有一種或幾種其它代幣作為自己的儲備
金。這些儲備代幣可以是法幣、數字化資產或其它加密代幣。通過使用這些儲備金,不
論有沒有交易,新創建的代幣都可以獲得價格,并隨時可以兌換回其對應的儲備代幣。
0x [18] 是一個可以在以太坊區塊鏈上進行 ERC20[19] 代幣對等交易的開放式協議。
該協議旨在成為通用開放標準,作為可與其他協議組合的基本模塊,用以驅動越來越
復雜的區塊鏈應用程序。由于它使用的是以太坊的智能合約系統,因此可以作為各種dApps 的共享基礎架構。而從長遠來看,開放式技術標準相比封閉模式具有更大的優
勢,隨著每個月有更多的資產在區塊鏈上被代幣化,也有更多的 dApps 需要使用這些
不同的代幣,開放式標準也因此變得更加重要。此外,由 dApps 耦合到其底層協議所
導致的智能合約冗余也是未來區塊鏈協議開發的主要障礙,因此在標準化之余,我們
還需要一個合適的解耦方式。0x 協議試圖將信息交換功能從應用層拉到協議層,推動dApps 之間的互操作性。然而,0x 協議的局限包括:taker 必須在線匹配訂單,這導致
撮合實時性差,難以優化成交價格;0x 協議采用的是簡單的 OTC 方式,無法法實現復
雜訂單的撮合;不同交易所之間沒有明確的競爭激勵機制;也沒有考慮了礦工的利益。
上述努力由于種種限制,到目前為止依然沒有能夠撼動中心化交易所的地位。我們
主要受到支付通道和 0x 協議的啟發,提出一種更可行的鏈上交易撮合標準。
3 協議設計 53 協議設計
圖 1: Loopring 協議:圖中示例一個三邊交易的撮合
我們用上圖中的三邊交易,簡要講解下采用 Loopring 協議的撮合交易過程。該過
程如下:
用戶甲、乙、丙分別對 Loopring 撮合智能合約(Loopring Matching Contract)授
權,授權后該合約可對用戶指定代幣賬號做不超過一定額度的轉出操作1 。在上面
實例中,合約可最多從用戶甲的賬號轉出 1000 個 A 代幣,從用戶乙賬戶轉出 9個 B 代幣,從用戶丙賬戶轉出 100 個 C 代幣;
用戶甲、乙、丙分別生成自己的訂單,并用私鑰對其進行數字簽名。訂單不再區
分買單和賣單,所有訂單都被視為交換單 — 甲的訂單聲明:甲愿意賣出不多于1000 個 A 代幣,買到盡可能多但不少于 10 個 B 代幣;如果是部分成交,那么 A到 B 的兌換率不得低于 1000/10 = 100.0(賣出代幣數量除以買入代幣數量)。訂
單中還可以包含其它參數,我們在章節 3.7中會對訂單參數進行說明;
甲、乙、丙分別將自己的訂單通過適當的方式發送到一個或多個交易所;
交易所收到上述三個訂單,將它們分別放到三個對應的訂單表(orderbook)中,并
實時通過區塊鏈數據更新計算每個訂單的狀態,同時不斷努力尋找能夠撮合的一
組訂單 — 我們后續稱之為交易環路或者撮合環路。一旦確定三個訂單的當前狀態
可以撮合成功,且收益滿足預期,即決定實施這個撮合;
交易所對撮合交易簽名后發送到 Loopring 撮合智能合約地址;
1通過 ERC20 機制實現。
3 協議設計 6
6. 撮合智能合約驗證四方簽名,之后驗證三個訂單(的最新狀態)是否可以真正成
交。若無法成交,合約終止(交易所依然要消耗一定的油費);否則智能合約分別
計算出甲、乙、丙三方各自需要支出的金額,以及交易所該收取的費用,并且實
時將甲、乙、丙賬號中的資產進行互轉,并完成對交易所的費用支付 — 如下圖
所示。在交易過程中,撮合智能合約還會調用 Loopring 注冊智能合約(Loopring
Registration Contract)來計算交易所應該給予該筆交易的費用折扣;在交易完成
前,還會調用 Loopring 統計智能合約(Loopring Stats Contract)對交易所以及
代幣相關的統計數據做更新。
圖 2: Loopring 協議:交易環路結算
7. 交易所監聽新的區塊和鏈下新的交易數據,并根據這些數據更新訂單表,然后不
斷進行新的撮合。
接下來我們介紹可以撮合成交的交易環路相關的概念,包括交易鏈,交易鏈的可歸
約性,成交價,成交量,和交易所收益模型。
3.1 符號定義在正式介紹協議之前,我們要介紹一些符號的定義。
Ci :編號為 i 的代幣幣種。
Oi→j :一個賣出代幣為 Ci ,買入代幣為 Cj 的訂單。si→j:表示上述訂單的當前賣出代幣 Ci 的數量。bi→j :表示上述訂單的當前買入代幣 Cj 的數量。ri→j :為訂單 Oi→j 的兌換率,即 si→j /bi→j 。
為了特指訂單的原始狀態,我們為符號加上水平線,代表其在原始訂單中的值,比
如 si→j 和 bi→j 分別代表原始訂單中的賣出和買入代幣數量。
3.2 訂單兌換率恒定
除非訂單完全成交,即si→j =0,否則Loopring協議保證訂單狀態更新后:si→j/bi→j=si→j/bi→j,即訂單中隱含的兌換率不會因為部分成交而變化,亦即ri→j =ri→j。
3 協議設計 7在實際實施中,兌換率恒定是通過先計算部分成交后賣出代幣的剩余量,再使用原
始訂單中隱含的兌換率來計算買入代幣數量得以保證的。
3.3 可規約性
考慮兩個訂單 Oi→j 和 Oj→k, 我們可以通過中間代幣 Cj 的連接,將其規約一個賣
出代幣為 Ci,買入代幣為 Ck 的訂單。我們用 Oi→j→k 來表示這樣一個訂單,它和訂
單 Oi→k 在撮合的各種屬性上是等價的,且:
si→j→k = min(bi→j,sj→k) · ri→j (1)bi→j→k = min(bi→j,sj→k)/rj→k (2)
ri→j→k = ri→j · rj→k (3)
在這里我們順便引入訂單鏈這個概念。一個訂單鏈是兩個或者兩個以上訂單,除了
最后一個訂單,每個訂單的買入代幣類型恰巧是后一個訂單的賣出代幣類型,但最后一
個訂單的買入代幣類型不同于第一個訂單的賣出代幣類型(否則就成了一個環路)。我
們可以將上述規約計算用于一個訂單鏈。通過規約,一個包含 n ? 1 個訂單(n 個不同
的代幣), 即長度為 n ? 1 的訂單鏈可被視為一個單一訂單 O0→...→n,且有:
??s0→1
s0→...→n = ?min(b0→...→n?1, sn?1→n) · r0→...→n?1?
?b0→1
b0→...→n = ?min(b0→...→n?1, sn?1→n)/rn?1→n
如n = 1如n > 1
如n = 1如n > 1
r0→...→n =
ri→i+1
n?1∏
i=0訂單鏈的可規約性可以幫助我們在分析訂單路徑時簡化模型,在后文的討論中,我
們將符號 Oi→j 的含義擴展到即包含簡單的賣出代幣為 Ci ,買入代幣為 Cj 的單一訂
單,也包含可規約成這樣一個類型訂單的訂單鏈,如果為了強調是個訂單鏈,我們會用Oi→...→j 或 Oi→→j 表示。
3.4 環路撮合
傳統撮合系統是在兩個幣種間,即一個交易對的買賣兩個方向間完成撮合;而Loopring 協議將撮合的概念擴展到多幣種,通過交易環路來完成多個幣種之間交易
的撮合。下面介紹一下交易環路的概念。
定義 3.1 (交易環路) 如果有 n 個幣種 C0、C1、· · · 、Cn?1,和 n 個訂單:O0→1,· · · ,Oi→i⊕1 ,· · · ,On?1→0 ,其中,i ⊕ 1 ≡ i + 1 mod n。那么這些訂單可以組成跨 n 個幣
種的交易環路:
3 協議設計 8O0→1 → ··· → Oi→i⊕1 → ··· → On?1→0 ,其中 n 為環路的長度。
當這些訂單的價格滿足一定條件時,我們可以對整個交易環路進行撮合,這種交易
環路稱為可交易環路。下面我們對交易環路中的成交價格和成交量進行討論。
3.4.1 成交條件和價格
我們由一個長度為 3 的交易環路為例,介紹環路可成交的條件。假定環路中的三
個幣種為 C0、C1 和 C2,三筆訂單分別為:O0→1、O1→2 和 O2→0。很容易證明,如果r0→1·r1→2·r2→0 =1時,三個訂單都可以用其自身的兌換率成交。當r0→1·r1→2·r2→0 >1時,三個訂單都可以用比自身兌換率更低的兌換率成交。我們稱第一種情況為原價撮
合,稱第二種情況為折價撮合。
Loopring 協議要求交易環路的折價平均分享給環路中的每個訂單。假設每筆訂單
兌換率折價比例為 γ,那么最終完成撮合時,三筆訂單的成交價分別為:r0→1 · (1 ? γ),r1→2 · (1 ? γ),r2→0 · (1 ? γ),并且滿足:
r0→1 ·(1?γ)·r1→2 ·(1?γ)·r2→0 ·(1?γ) = 1 (4)根據上式我們可以推導出:
γ=1?√ 1 。3 r0→1 · r1→2 · r2→0
在更一般的情形下,如果跨 n 個幣種的環路中,兌換率折扣為:
γ = 1 ? √ 1 ,其中ri表示第i個訂單的兌換率。n ∏n?1 ri
i=0
顯然,只有在兌換率折扣 γ ≥ 0 時,交易環路才可以真正成交;且第 i 個訂單 Oi
的實際兌換率r?i =ri ·(1?γ),且有r?i ≤ri。3.4.2 成交量
當一個交易環路撮合完成后,至少有一個訂單是被完全成交的。這點很容易得到證
明:我們可以先假設該結論不成立,即全部訂單都沒有完全成交。由于章節 3.2中要求
兌換率在訂單新狀態(尾單)中保持不變,意味著撮合后新的環路依然滿足成交條件。
這就意味著之前的撮合是沒有進行完的。因此可以斷言:一次完整的撮合應該會將至少
一個訂單完全吃掉。我們稱這個(些)被完全吃掉的訂單為交易環路的最小訂單。
找到任何一個最小訂單,既可循環計算環路中所有訂單的成交量。假設第 i 個訂單
是最小訂單,那么每筆訂單的賣出代幣成交量 s? 和買入代幣成交量 ?b 可以以此如下計
算得出:
i ?iii
s? = si,b = s? /r? ,其中si為訂單的賣出代幣余額;
i⊕1s?
?i ?i⊕1 i⊕1 i⊕1= b , b = s? / r? ;
?i⊕1 ?i⊕2 i⊕2 i⊕2
i⊕2
s? =b ,b =s? /r? ;
...
3 協議設計 9
實際實施過程中,可以先假定第一個訂單為最小訂單,往后循環計算成交量,直到
每個訂單的成交量都不再變化為止。理論上最多循環兩次即可計算出每單的實際成交
量。
3.4.3 撮合費用
交易所第一種收費形式是手續費。在訂單中可以設置一個以 Loopring 的代幣 LRC為單位的費用, mi,代表完全成交情況下編號為 i 訂單愿意支付給交易所的手續費總和。
實際成交時候按訂單賣出代幣成交比例支付給交易所,即:
fi =bi ·mi/bi
為了鼓勵交易所為用戶找到兌換率折價比例最大的成交環路,Loopring 協議要求
將兌換率折價帶來的成本節約分潤給交易所。對于一個訂單 Oi, 假設買入訂單的成交額
度為 bi(bi ≤ bi), 我們定義成本節約為:
?i = bi · ri · γ
Loopring 協議允許每個訂單設定一個成本節約分享分潤比例 θi,并將交易環路上
所有訂單分潤比例的最小值作為該環路的分潤比例 Θ,那么訂單 Oi 支付給交易所的費
用為:
fi =?i ·Θ=bi ·ri ·γ·Θ因此交易所對于一個交易環路,通過成本節約分潤獲得的收入為:
n?1∑
F =
bi · ri · γ · Θ
i=0采用所有訂單中最小的分潤比例作為整個交易環路的分潤比例,可以激勵訂單采用
較大的分潤比例。這樣做會激勵交易所對訂單進行撮合,同時一旦訂單成交,也不一定
非要支付指定比例的分潤。
為了鼓勵 Loopring 的代幣 LRC 的使用,如果訂單中沒有指定代幣費用 mi,或mi = 0,那么該筆訂單的分潤比例實際被認為是 100%,而不管訂單中相應參數的值是
多少。如果一個交易環路中的所有訂單都沒有設置代幣費用,Θ = 100%,環路中所有
成本節約歸交易所所有。
在下一章節,我們會引入一個激勵交易所競爭的代幣抵押機制,智能合約根據每個
交易所代幣抵押數量的排名,為每個交易所計算一個費用強制折扣,λ,該折扣會進一
步影響交易所的費用收取;同時,交易所也可以指定為某個交易環路做進一步的費用優
惠折扣,η。因此,交易所對于一個交易環路的整體費用為:
n?1∑
(bi ·ri ·γ ·Θ+bi ·mi/bi)
F = (1?λ)·(1?η)·
i=0兩種不同的費用模型能夠滿足不同訂單的訴求:對于沒有 LRC 代幣的賬戶,可以
設置合適的分潤比例;對于有 LRC 代幣的賬戶,可以選擇支付較多的代幣費用,并將
3 協議設計 10
分潤比例設為一個較小值。交易所有可能對每筆訂單的代幣費用值有個最小額度限制,Loopring 協議并不對此作出明確要求。交易所可以在自己網站上對相關標準做說明,并
引導用戶設定合適的訂單參數值。
3.4.4 交易所費用強制折扣
Loopring 協議要求交易所給交易費強制打一個折扣,折扣大小決定于交易所抵押
LRC 代幣數量的排名,排名越靠后,折扣越高。假定排名為 n 的折扣為:λn = 0.05·(ln(n+e?1)?1)。
具體返利比例如下表所示:
抵押排名 n 費用強制折扣 λ1 0%
2
1.57%
10
7.31%
20 10.39%
99 ?18.06%
100 ?18.11%
1000 ?29.55%
1001 ?30.00%?
表 1: 抵押 LRC 排名與費用強制折扣
對于排名 1001 及以后的交易所,或未進行抵押的交易所,統一實施 30% 費用強制
折扣。
如下圖所示,費用強制折扣的下降并非線性的,如 λ2 ? λ1 ? λ100 ? λ99。
3 協議設計
11
圖 3: LRC 代幣抵押排名與費用強制折扣
在實際部署時,折扣函數中的參數需要根據市場行情不斷調整,比如交易量和實時
性。當市場交易量過于旺盛時,會導致過多交易無法及時確認,這時需要降低整體折扣
率,尤其是原本折扣率高的那些交易所。當交易量低時,需降低折扣率,刺激交易的撮
合。
3.5 防作弊和防攻擊3.5.1 交易所無風險套利
Loopring 協議致力尋求在用戶和交易所間利益的平衡點,打造公平健康的交易所
生態。Loopring 協議不反對交易所的套利行為,因為套利行為本質上也是在促成交易。
但是我們禁止交易所利用自己在生態中角色的特殊性進行套利,具體來說,通過上傳一
種特殊的閉環無風險套取訂單間的價差,本節我們將介紹如何防止交易所的這種行為。
在介紹之前,我們首先來分析交易所如何做到無風險套利。
假設有兩個訂單 Oa→b,Ob→a,形成一個交易環路,且 ra→b · rb→a > 1。交易所可
以在這個環路上插入三個自己新生成的訂單 Ob→c,Oc→d,Od→b,生成一個長度為 5 的
新環路,并使 ra→b · rb→c · rc→d · rd→b · rb→a = 1。通過這種方式,交易所可以做到將所
有可能的成本節約變成 0,一旦撮合被智能合約接受,即可實現無風險套利。
這種套利的交易環路有個顯著的特征:它們包含子環路。在上個例子中,兩個子環
路分別是:Oa→b → Ob→a 和 Ob→c → Oc→d → Od→b。為了杜絕交易所的這種無風險套
利,Loopring 協議要求:合法的閉環必須保證其訂單子集無法組成更小的可交易環路。
3.5.2 交易所拒絕服務
Loopring 協議允許交易所選擇性地為特定訂單做撮合。交易所有權對訂單的代幣
類型,訂單數量,費用等做篩選,也有權對這些篩選條件做更改,且有權公開或隱藏這
些篩選條件。交易發起者與交易所之間是相互選擇的關系,彼此沒有任何義務。
3.5.3 塵埃訂單攻擊
普通用戶可以通過廣播大量的塵埃訂單(即數量非常小的訂單)試圖對交易所做攻
擊,不過由于撮合塵埃訂單獲利很低,所以這些訂單一定會被交易所拋棄,進而對交易
所和區塊鏈沒有任何影響。
交易所也可能采用同樣方式發起攻擊,從而試圖影響其它交易所對某些訂單的撮
合。不過這種努力也不會奏效,因為協議允許同一個訂單在同一個塊中參與到多個環路
成交(這些環路可能是不同交易所提交到區塊鏈上的),換句話說,訂單并沒有所謂的
鎖定狀態。
3.5.4 余額不足訂單攻擊
交易發起者可能發起多筆訂單,但訂單賣出代幣賬戶實際余額為零。這樣的訂單提
交到交易所后,交易所很容易通過查詢區塊鏈地址的余額信息將該訂單拋棄,不過這種
3 協議設計 12攻擊的確會浪費交易所的處理時間。好在交易所可以通過黑名單機制,迅速有效地將某
些地址屏蔽掉,拒絕再為這些地址提供撮合服務。
3.5.5 撮合竊取
一個懶惰交易所可以監聽網絡上未被確認的撮合交易,解析交易環路并生成一個帶
有自己簽名的新撮合(環路相同,只有受益地址和數字簽名不同),通過提供更高的交
易費來竊取其它交易所的撮合結果。特別當竊取者是礦工時,這種作弊行為是比較難以
預防的。為防止撮合竊取,我們規定交易所上傳訂單環路的過程分為兩步:
? 交易所在區塊鏈上發一筆交易,上傳訂單環路的存證,
? 存證信息被寫入區塊鏈后,交易所提交具體環路信息。
這個存證通過哈希來實現,哈希值的生成方法為
h = H(r,nonce),
其中,H() 為單向函數,r 為訂單環路信息。哈希函數的輸入包含了一個隨機數 nonce,
用于防止對哈希值進行暴力破解。在提交具體環路信息時,隨機數 nonce 需要一并提
交。
3.6 市場深度
交易所并不一定需要提供市場深度數據。在整個生態中,可能會有單獨的組織和機
構匯集全網的未成交訂單或者交易的尾單信息,匯總成獨立的市場深度數據。市場深度
數據可以根據章節 3.3中的訂單的規約方法,計算出任何兩個 ERC20 代幣之間的買單
賣單數據。
3.7 數據格式
由于采用 OTC 模型,所有訂單可以用同一個數據結構表示。該結構包含訂單本身
的各種參數數據和發起者的數字簽名。在簽名前,先將訂單參數數據連接成一個字節數
組,通過 Keccak SHA3 方法對這個字節數組做散列計算得到訂單的哈希,之后用賬戶
私鑰對這個哈希進行 ECDSA 簽名。
message Order {
? address protocol;
? address owner;
? address outToken;
? address inToken;
? uint256 outAmount;
? uint256 inAmount;
? unit256 expiration
? unit256 fee;
// Loopring協議入口智能合約地址// 該訂單發起者地址
// 賣出ERC20代幣智能合約地址
// 買入ERC20代幣智能合約地址
// 賣出ERC20代幣數量上限
// 買入ERC20代幣數量下限
// 過期時間
// 交易總費用(LRC),部分成交的費用按該次
3 協議設計
13
// 撮合實際賣出代幣額與outAmount比例計算
uint8 marginSplit; // fee不為0時支付給交易所的分潤比例,否則視為100%
? unit8 v;
? bytes32 r;
? bytes32 s;
}
訂單中雖然沒有明確指定價格,但我們可以通過計算 outAmount/inAmount 來得
到一個訂單兌換率 r。該兌換率隱含地要求所有實際撮合成交的兌換率不得大于 r。一
個好的交易所 UI 應該允許用戶輸入 outAmount,inAmount,和傳統意義的買入價或
賣出價這三個數據的任意兩個來計算缺失的 outAmount 或 outAmount 值。
訂單實際上可以有兩種不同的完全成交定義:一種定義是只有賣出代幣達到了outAmount 就算完全成交;另一種定義在之前的基礎上允許買入代幣累計金額達到inAmount 也算完全成交。我們可以在訂單中引入一個參數告訴交易所和撮合智能合約
選擇哪種完全成交定義。在第一版本的實現中,我們先支持第一種完全成交定義。
? 交易所可以通過下面的數據結構構建一個交易環路:
message MatchRing {
Order[] orders; //
該次匹配的所有訂單
address feeRecipient; // 費用收取地址
unit256 additionalDiscount; // 在費用基礎上進行的再折扣價 - eta
unit256 nonce; // 一個隨機數
unit8 v;
bytes32 r;
bytes32 s;
}
一個可交易環路上同一位置的訂單只能有一個 — 理論上可以將這個限制去掉,不
過這會讓撮合智能合約更加復雜,我們可能在后續的版本中再給與支持。
3.8 訂單狀態
訂單發起者對訂單簽字廣播后無法對該訂單進行修改。撮合智能合約一旦對某個訂
單進行撮合,就需要在區塊鏈上對訂單的狀態更新記錄。對部分或者完全成交的訂單,
會計算更新 inAmount 和 outAmount 兩個值,并且保障訂單新狀態價格和原始訂單的
價格一致。如果 inAmount 或 outAmount 為 0,則表示該訂單已經完全成交。如果用
戶取消訂單,需要發起一個特殊的交易,將 inAmount 和 outAmount 更改為 0 即可。
過期的訂單不會觸發區塊鏈上的數據更新 — 可以根據最后一個塊的時間戳來判斷任何
一個訂單是否過期 — 因此我們期待多數的訂單會因為過期或者完全成交而變成失效。
交易所需要采用同樣的甚至是更復雜的邏輯在區塊鏈外追蹤訂單狀態,尤其是當一
家交易監聽到到競爭對手在對同一個訂單做不同的撮合的時候。
一個可交易的訂單還需要其賬戶中有足夠多的賣出代幣余額 balance,雖然 balance不要求達到訂單中 outAmount 的數量。實際上交易所在對訂單狀態計算的時候,會取
4 LOOPRING 協議代幣 LRC 14
max(balance, outAmount) 作為實際的可成交金額。這里可以看出,訂單的賣出代幣并
不需要鎖定的過程。用戶提交訂單后依然可以任意支配賣出代幣作為他用。交易所不僅
僅要監聽訂單被(其它交易所)撮合的結果,還需要監聽訂單賬戶的余額變動情況???/p>
起來這種對區塊鏈數據的監聽和對訂單狀態的更新有些復雜,但這些反而極大簡化區塊
鏈上合約的邏輯,這種思路和比特幣閃電網絡,以太坊的雷霆網絡的思路是一致的。
3.9 智能合約
Loopring 協議協議可能包含多個智能合約,包括但不限于:
撮合合約負責計算并確認交易環路中每個訂單的狀態,計算成交金額和成交量,對
交易進行清算轉賬。該合約還會與其它合約交互,是 Loopring 協議的入口合約;
訂單合約負責更新訂單狀態以及對取消訂單提供支持;
交易所注冊合約負責維護和更新一系列支持 Loopring 協議的交易所,為交易所代
? 幣抵押和預設參數默認值提供支持;
統計合約計算任何兩個幣種之間的成交量,成交價,以及不同交易所的貢獻度等
指標,以及這些指標的某些滑動平均值。這些指標是訂單發起者授權撮合的重要
參考依據,同時也可以作為某些預測市場的輸入,并且為以后可能的協議拓展(比
如對條件單的支持)提供輸入(Oracle)。
這里,不排除將上述合約進一步拆解或合并的可能。同時值得指出:Loopring 協議
中的智能合約是完全開放的,這意味著它們可以被任何的 dApp 直接或者間接調用。因
此整個協議即使一個完善的整體,又是個開放的,單獨可用的組件的集合。
4 Loopring 協議代幣 LRC
我們將為 Loopring 協議發行符合 ERC20 規范的原生代幣,其符號為 LRC(在本
文中用斜體字母表示)。
4.1 代幣的應用
LRC 在生態中發揮下列作用:
? 作為撮合費用 — 訂單中可以指定用 LRC 可作為支付給交易所的撮合費用。雖然
協議支持通過賣出代幣成本節約的分潤作為支付手段,但對于交易所來說,將來
需要支持的 ERC20 代幣類型可能越來越多,如果每筆撮合交易都通過各訂單中
的賣出代幣為單位支付手續費,那么對于一次撮合的收益計算將變得復雜;相反,
如果通過 LRC 來衡量收益(或者用來計算成本),會簡單得多。同樣,對于訂單
發起者,可以通過公開信息獲取某筆訂單需要支付大約多少費用,如果用每個訂
單的賣出代幣計算,那么下單過程中的費用計算也會比較分散。我們在之前章節3.4.3對費用模型做了詳細的說明。
4
LOOPRING 協議代幣 LRC 15
? 作為交易所注冊抵押 —訂單發起者希望自己的訂單得到最好的撮合,這要求交易
所在各個方面都做到專業,特別是對全部訂單的匯聚情況。由于去中心化交易沒
有地域限制,一個好的交易所應該能比一個相對差的交易所看到更多的訂單,也
應能在最短時間內找到最好的交易環路。為了鼓勵實力強的交易所,淘汰實力差
的交易所,我們提供一種交易所注冊抵押機制:交易所可以將一定數量的 LRC 代
幣抵押給智能合約。交易所可以隨時申請抵押代幣的解凍,但申請提出后,一年
后才鎖定的代幣才可以轉賬出去。并不是所有交易所都必須進行注冊抵押。交易
所代幣抵押的另一個作用是防止交易所為了拋棄不利的歷史統計數據而頻繁變動
身份。
4.2 去中心化自治
隨著交易所的不斷升級,交易所中的規則需要不斷升級升級,為此我們引入去中心
化自治機制。任何持有 LRC 者都可以將代幣抵押并獲得自治系統的投票權益,投票權
益 S 是一個關于抵押數量 N 和抵押時間 CoinAge 的函數,
S = f(N,CoinAge),
其中 CoinAge = Hc ? Hs,這里的 CoinAge 是當前區塊高度 Hc 減去開始抵押區塊高
度 Hs。加入 CoinAge 參數是為了防止有攻擊者短時間內租借到大量代幣并獲得很高的
權益,迫使某項并不為他人接受的提議得以通過。
在去中心化自治系統中,任何決定都要在一個固定時間內完成投票,這個時間根據
提議內容不同而發生改變。當且僅當收集到足夠高權益的投票,提議才會執行,否則提
議將會關閉。在去中心化自治系統中,并不是權益高者的一言堂,權益低者可以聯合在
一起制衡權益高者。
去中心化自治內容包括但不限于交易所注冊、幣種注冊、統計函數、抵押代幣范圍
等,這些升級可以通過自治系統參與者共同投票參與決定。
幣種注冊 Loopring 協議會階段性的調整支持的幣種,有些數字貨幣會因為交易量
過低而退出交易所,而另外會有一些新的數字貨幣誕生而加入交易所。這些幣種
需要記錄在智能合約中,包括幣種名稱、代號及對應智能合約地址等信息。
交易所注冊交易所需要注冊完成才能通過協議進行交易,當交易所達到一定數量
后,新注冊交易所需要經過自治系統投票才能通過。
統計函數隨著交易所上線運行時間越長,數據量得到一定積累,用于統計的指標
和函數也會逐漸成熟。自治系統參與者可以決定新增或淘汰統計函數。
抵押代幣范圍交易所可以抵押的代幣數量需要限制在一定范圍內。如果抵押數量
太多,會導致代幣流動性變差;如果抵押過少,則無法體現交易所間的差異性。
環路最大長度理論上說,環路越長越有可能發現利差大的環路,然而過長的環路
會降低環路撮合的成功率,并且在過長的環路會帶來過高的計算成本。
4
LOOPRING 協議代幣 LRC 16
? 強制折扣函數強制折扣函數需要根據市場行情不斷調整,比如交易量和實時性。當
市場交易量過于旺盛時,會導致交易過多而無法及時確認,這時需要降低整體折
扣率,尤其是原本折扣率高的那些交易所。當交易量低時,需降低折扣率,刺激交
易的撮合。如下圖所示,其中藍色為交易量正常時的折扣率,黃色為市場交易量
過高時的折扣率,紅色為交易量過低時的折扣率。
圖 4: 調整后的強制折扣率
? 子合約地址如果基于公有鏈搭建 Loopring 交易所,智能合約本身是無法改動的。
在這種情況下,如果升級 Loopring 協議的子合約,則需要重新部署智能合約,并
修改子合約的地址。
4.3 代幣的原生流動性
Loopring 協議代幣本身遵循 ERC20 標準,并且在 Loopring 智能合約的基礎上帶
有原生的流動性 — 這意味著你不必去傳統的交易所購買和出售 LRC,而是可以通過
本文論述的方式,利用 Loopring 協議本身的去中心化撮合機制,使用任何 ERC20 代
幣購得 LRC(訂單中的買入代幣設定為 LRC,并將 fee 設為 0)。這得益于協議靈活
的收費模式。
5 交易所 175 交易所
采用 Loopring 開放協議后,交易所并不能保證每一個撮合都是盈利的。一方面可
能是成本過高,因為交易所為了激勵礦工優先打包自己的撮合交易到區塊鏈,可能根據
預期的收益調高手續費,而手續費代幣和撮合中代幣的相對價格有可能有超出預期的
浮動,從而造成手續費實際成本更高。另一方面可能是因為收入沒有達到預期,比如交
易所把撮合廣播到區塊鏈后,該撮合的某個訂單的賣出代幣被部分或者全部轉移到另
一個地址,從而造成整個撮合交易未能被確認或實際成交量和手續費過低。類似這樣的
原因還有很多,因此交易所的每次撮合廣播都是根據自己的經驗和算法,最大化長期
利益的概率游戲。不過也不用擔心,實際上交易所和訂單發起者是雙向選擇的關系:交
易所只會選擇有利可圖的訂單;而訂單發起者只會選擇費用最低的交易所 — 通過參考Loopring 統計合約數據決策訂單參數。
交易所采用 Loopring 協議后,不需要再保存用戶的 ERC20 代幣資產。交易所的
主要職能從負責 ERC20 的充值提現,內部虛擬賬號管理,轉移到更加純粹的撮合服務。
對于用戶來講,Loopring 協議不要求賣出或買入代幣的充值,提現,鎖定,因此根本沒
有資產丟失,被盜,或者資產流動性降低等的風險,同時一筆訂單可以同時被多個交易
所同時撮合。
對于非 ERC20 資產,交易所可以提供代幣發行服務(Tokenization),將資產通過
抵押的方式,在區塊鏈上發行相應的 ERC20 代幣,并提供相應的充值、提現、和贖回
功能。這種服務和傳統交易所類似,但也省去了傳統交易所研發和維護內部虛擬賬號的
必要。
5.1 傳統與 Loopring 上交易所模式的對比
在傳統交易所模型中,被撮合的兩方中先下單的為 Maker,后下單的為 Taker。因
為 Maker 創造流動性而 Taker 銷毀流動性,所以在計算成交價時候會更偏向于 Maker的價格,甚至直接采用 Maker 的價格作為成交價。與之相比,Loopring 采用的是 Over-
The-Counter(OTC)模型。主要的原因是在去中心化環境中,很難嚴格界定哪個單是
真正意義上較早的單。因此 Loopring 的撮合設計不考慮時間因素,只考慮兌換率(在
本文中我們偶爾也用價格一詞與兌換率交替使用)。
傳統交易所對投資者安全的保障只能依靠自身信用,如果出現兌付問題,跑路的成
本非常低,因此需要通過監管保護投資者。然而在 Loopring 協議中,通過在區塊鏈上
開源智能合約可以實現交易的原子性,成交前賣出的代幣和成交后買入的代幣均存放在
用戶本人區塊鏈地址中。整個交易過程過程用戶無需向交易所轉賬,交易所不托管用戶
下單資金,資產丟失或者被盜風險為零,哪怕交易所倒閉,也不會對用戶產生任何影響。
傳統交易所中,用戶下單后用于交易的資金會被凍結,同一訂單只能提交給一家交
易所,各家交易只能看到部分交易信息。但在 Loopring 協議中,用戶下單后依然可以
動用賬戶資金,用戶將資金部分或全部轉移的行為等同于部分或全部撤單。訂單可被廣
播給多家交易所,由不同交易所共同完成撮合,每家交易所可以看到全部訂單,因此市
場深度和訂單表更全面,成交更快更有效。
Loopring 協議的另一個顯著特點是消除了傳統交易所中交易對(Trading Pair)
6 總結 18
的概念。一個從 A 到 B 的訂單不一定要一個反向的從 B 到 A 訂單才能撮合,只要有
一個交易環路被發現,就可以撮合。也可以說傳統交易所的交易對是多邊交易環路的一
個最簡特例。為激勵撮合價格最優的交易環路,Loopring 協議的收費模式以成交的“成
本節約分潤”為主,交易手續費為輔。
傳統交易所
Loopring
交 易
所
托管下單資金 否1下單資金凍結 否2需充值提現 否3有內部交易風險 否4倒閉會造成用戶損失 否5收入主要來源為手續費 否6支持法幣 是7同一個訂單可以提交給多個交 是8
易所
Maker 和 Taker 是否平等 是9支持環路交易 是10監管必要性 強 弱11
表 2: 兩種模式交易所簡要對比
6 總結
本文描述了一個開放的,支持智能合約和 ERC20 的代幣間多邊交易協議。該協議
允許多個訂單構成一個可交易環路進行撮合,并允許交易所只將撮合的最終結果作為
交易提交到區塊鏈上進行清算;本文描述了協議代幣在撮合收費中起到的作用;以及Loopring 協議相對于傳統交易所模式為用戶帶來的好處。
1Loopring 交易所無需托管下單資金 — 交易用代幣存放到自己區塊鏈地址中,成交前無需要轉賬。資產丟失或者被盜
風險為零。
2Loopring 交易所無需凍結下單資金 — 用戶下單后依然可以任意動用賬戶任何資金,將資金部分或全部轉移走等同于
部分或全部撤單。
3Loopring 訂單實際是交易指令,交易過程中用戶資產一直保存在用戶自己的區塊鏈地址中,無需充值提現過程。4Loopring 交易所撮合全部基于區塊鏈智能合約,數據不可更改,完全開放透明。
5Loopring 交易所如果不提供代幣發行職責,交易所倒閉對用戶沒有任何影響 — 好比礦工倒閉對區塊鏈賬戶也沒有影
響一樣。交易所只負責撮合,清算轉賬通過智能合約完成。所有資產一直在區塊鏈用戶自己的賬戶里。
6Loopring 交易所的交易手續費為輔助收入,主要收入為成交的“成本節約分潤”,這樣會激勵撮合價格最優訂單。7Loopring 交易所對法幣的支持是通過資產代幣化,需要將法幣在區塊鏈上做 ERC20 代幣發行。
8Loopring 允許用戶的同一個訂單被多家 Loopring 交易所同時撮合,并可以被多家交易所不同程度部分或全部成交。9Loopring 協議要求成交接近中間價,而不是過度傾向于 Maker 的價格。
10Loopring 交易所支持環路發現,能最大程度找到最好的匹配訂單。
11Loopring 交易所不保存資金,清結算通過開源智能合約完成。因此如果不提供資產和跨鏈代幣發行服務,監管的必要
性很弱。
是
是
是
是
是
是
是
否
否
否
7 感謝 19
Loopring 協議適用于任何支持類 ERC20 代幣發行機制和智能合約的區塊鏈平臺。
我們將選擇以太坊和 EOS 部署第一個版本的 Loopring 協議。具體研發計劃詳見附錄。
我們會繼續深入研究 Loopring 協議的細節,完善概念證明的開發。7 感謝
我們由衷地感謝下列各位專家對白皮書中內容的審閱和指正,包括:中國分布式總
賬基礎協議聯盟(ChinaLedger)技術委員會主任,中國金融標準化技術委員會證券分
委員會副主任委員,中國中文信息學會常務理事白碩;復旦大學教授,博士生導師闞
海濱;NEO 創始人,Onchain 分布科技 CEO 達鴻飛;能源區塊鏈實驗室創始合伙人,
信達證券首席區塊鏈專家,首席能源互聯網研究員曹寅;區塊鏈內容創造和分享平臺YOYOW 項目 聯合創始人;比特股理事巨蟹;微軟必應研發負責人,微軟廣告系統技
術負責人,微軟技術合伙人于偉;德華資本首席投資官 曹晶;花蝦金融 CEO 兼華夏
信財副總裁段念;北京匯垠天然投資基金管理有限公司董事長郭一鵬;知乎合伙人李大
海;紅點創投(Redpoint Ventures)副總裁張鳴晨;京東副總裁京東 X 事業部總裁肖軍;
銀聯智慧創始人兼總裁龍凱;百度副總裁,百度美國研發中心總經理 Alex Cheng;蘇
寧云商集團 IT 總部執行副總裁向江旭;美團點評科學家夏華夏;Airbnb 人工智能負責
人錢江。感謝谷歌前工程師 Zhen Wang、馬俊、應甫臣對整體架構提出的建議和意見。
我們也希望并期待社區中和開源項目的參與者能夠對白皮書提出進一步的批評和指正。
參考文獻 20參考文獻
[1] ?Economist Sta . Blockchains: The great chain of being sure about things. The
Economist. Retrieved, 18, 2016.
[2] ?Melanie Swan. Blockchain: Blueprint for a new economy. ” O’Reilly Media, Inc.”,
2015.
[3] ?Satoshi Nakamoto. Bitcoin: A peer-to-peer electronic cash system. 2008.
[4] ?Leslie Lamport, Robert Shostak, and Marshall Pease. The byzantine generals
problem. ACM Transactions on Programming Languages and Systems (TOPLAS),
4(3):382–401, 1982.
[5] ?Konstantinos Christidis and Michael Devetsikiotis. Blockchains and smart con-
tracts for the internet of things. IEEE Access, 4:2292–2303, 2016.
[6] ?Gavin Wood. Ethereum: A secure decentralised generalised transaction ledger.Ethereum Project Yellow Paper, 151, 2014.
[7] ?Paul Tak Shing Liu. Medical record system using blockchain, big data and tok-
enization. In Information and Communications Security, pages 254–261. Springer,
2016.
[8] ?Robert McMillan. The inside story of mt. gox, bitcoin’s 460 dollar million disaster.
2014.
[9] ?David Schwartz, Noah Youngs, and Arthur Britto. The ripple protocol consensus
algorithm. Ripple Labs Inc White Paper, 5, 2014.
[10] ?Stefan Thomas and Evan Schwartz. A protocol for interledger payments. URL
https://interledger. org/interledger. pdf, 2015.
[11] ?Fabian Schuh and Daniel Larimer. Bitshares 2.0: Financial smart contract plat-
form.
[12] ?Fabian Schuh and Daniel Larimer. Bitshares 2.0: General overview, 2015.
[13] ?Open ledger. URL https://openledger.info/, 2017.
[14] ?Joseph Poon and Thaddeus Dryja. The bitcoin lightning network.https://lightning. network, 2015.
[15] ?Raiden network. URL http://raiden.network/, 2015.
[16] ?Bancor protocol. URL https://bancor.network/, 2017.
[17] ?Robin Hanson. Logarithmic markets coring rules for modular combinatorial infor-
mation aggregation. The Journal of Prediction Markets, 1(1):3–15, 2012.
參考文獻 21
[18] Will Warren and Amir Bandeali. 0x: An open protocol for decentralized exchange
on the ethereum blockchain, 2017.
[19] Fabian Vogelsteller. Erc: Token standard. URL https://github.com /ethereum
/EIPs /issues /20, 2015.
附錄
附 錄 A Loopring 下單和撮合流程
S1:用戶通過區塊鏈交易(Transaction),授權撮合智能合約,使其可以對代幣賬
號(也稱“地址”)做轉出操作。用戶可以指定轉出額度上限,也可不設上限。
S2:多個用戶分別生成各自的訂單,并且用相應的代幣賬號私鑰對訂單進行數字
簽名。訂單不區分買單和賣單,所有訂單都被視為交換單;每個訂單至少包含以
下數據:賣出代幣的類型(合約地址)和數額,買入代幣的類型(合約地址)和數
額,撮合手續費,撮合后成本節約分潤比例等。
S3:用戶將訂單在區塊鏈外,可通過多種途徑,廣播給一個或多個交易所,但不
提交到區塊鏈進行存儲。
S4:交易所不斷接收到新的訂單,并監聽區塊鏈上的新交易,以便更新計算每個
訂單的最新狀態。訂單最新狀態的計算分為 3 步。核心原則是保障“賣出代幣數
額”,“買入代幣數額”和“撮合手續費”之間的比例恒定不便。
S4.1:第 1 步 - 計算“賣出代幣數額”。計算方法如下:查詢區塊鏈中是否有該訂
單的狀態數據,如果有,采用該狀態數據中的“賣出代幣數額”,否則采用原始訂
單中的“賣出代幣數額”。再查詢該訂單對應賬戶中賣出代幣的余額,取該余額與
上面計算結果的最小值作為最終的“賣出代幣數額”。
S4.2:第 2 步 - 計算“買入代幣數額”。計算方法如下:計算原始訂單中的兌換率,
即原始訂單中“買入代幣數額”除以“賣出代幣數額”,再通過該兌換率,用第 1步計算的“賣出代幣數額”除以兌換率,得到最終的“買入代幣數額”。
S4.3:第 3 步 - 計算“撮合手續費”。計算方法和第 2 步類似,將“賣出代幣數額”
替換成“撮合手續費”即可。
S5:交易所不斷努力尋找能夠撮合的訂單撮合環路(或稱“撮合環路”,“訂單環
路”)。一個撮合環路可以包含兩個或者兩個以上的訂單,每個訂單的賣出代幣剛
好是后一個訂單的買入代幣。且滿足所有訂單中兌換比例的要求,且全部訂單的
買入和賣出成交額都大于零。
S6:交易所使用智能合約中一樣的邏輯,計算成交后自己的收益。如果收益不理
想,這放棄成交。重復 S5;否者進入 S7,或者 S9.
S7:交易所計算撮合環路的哈希(也稱散列),并將該哈希通過區塊鏈交易,存儲
到智能合約中。該哈希和交易所指定的收益地址配對存儲。
S8:交易所等待 S7 中的交易被打包到區塊中。之后做 S9。
S9:交易所對撮合環路進行數字簽名,并將帶有簽名的撮合環路以區塊鏈交易的
形式提交到撮合智能合約。
22
附 錄 A LOOPRING 下單和撮合流程 23
S10:撮合智能合約驗證交易所數字簽名并得到該簽名的賬號,通過該賬號,可以
查詢到交易所相關的數據(包括參數和統計值等),這些數據可以用于撮合中收益
的計算。同時撮合智能合約驗證每個訂單的數字簽名。如果任何簽名無法驗證,則
交易失敗。數字簽名驗證后,會得到每個訂單的發起賬號)。
S11:撮合智能合約計算去除交易所簽名的撮合環路的哈希,查詢該哈希是否存在,
若存在,且對應的賬號不是該撮合環路中指定的收益賬號,則交易中止。
S12:撮合智能合約使用 Step4.1, 4.2, 4.3 同樣的邏輯計算每個訂單的最新狀態,
并驗證訂單是否可以成交。如果無法成交,則中止撮合交易。如果可以成交,計算
每個訂單通過這次撮合買入和賣出的額度,以及交易所的每種代幣的收益;之后
在區塊鏈上直接做轉賬,完成區塊鏈上的清結算。
S13:撮合智能合約更新每個訂單的最新狀態:從“賣出代幣數額”中減去本次撮
合的賣出代幣成交量,并通過 4.2, 4.3 中的邏輯更新計算“買入代幣數額”和“撮
合手續費”,保持三者比例不變,并將每個訂單的最新狀態記錄在區塊鏈中。至此
整個撮合過程結束。
S14:用戶可以通過一個特殊的區塊鏈交易,關閉(或稱取消)一個或者多個訂單。
撮合智能合約接到該交易后,驗證簽名,并將相關交易的“賣出代幣數額”和“撮
合手續費”更改零,并將更改后的訂單狀態記錄到區塊鏈中。