1.1 訂單提交和自動撮合
1. Maker授權智慧合約轉移特定數量借貸幣種或抵押幣種的權利。
2. Maker建立訂單,明確借貸幣種及數量、抵押幣種及數量、借貸週期、年化利率和訂單有效期。設定完成後,超級節點自動生成使用者需要的手續費及手續費收取地址。Maker用自己的私鑰簽署交易傳送給超級節點。
3.超級節點接收到Maker簽署的訂單,驗證訂單的有效性(包括使用者授權的地址中是否有足夠的代幣)。如果訂單滿足超級節點的要求,訂單被接受並被標記為orderNew,否則超級節點拒絕接收訂單。
4.超級節點遍歷共享訂單簿中的所有訂單,驗證每個訂單對應的地址中有足夠的代幣並與訂單orderNew比對。如果某訂單對應的地址沒有足夠的代幣,則判定該訂單失效並從訂單簿移除。對有效訂單:
(1)如果訂單簿有多個訂單匹配orderNew,鎖定最早的訂單;
(2)如果存在部分匹配的情形,從匹配度最高的訂單開始從高到低鎖定,直到訂單再無合適匹配訂單;
(3)如果無訂單能夠匹配,則將orderNew更新到訂單簿中。將上述鎖定的訂單或匹配部分命名為orderMatch並從訂單簿中移除,部分匹配情形中的未匹配部分也在成交後更新到訂單簿中。此處匹配是指兩個訂單具有相同的借貸週期並且借款利率≥出借利率。
1.2 使用者自撮合
1. Taker登入任意的超級節點接收最新的共享訂單簿;
2. Taker在訂單簿中選擇訂單交易,被選中的訂單稱為orderMatch。新訂單開始自動建立,並明確所需的代幣數量、借貸週期、年化利率、訂單有效期等。Taker授權智慧合約具有轉移指定數量數字資產的權利,並簽名整個交易,命名為orderNew。
3. 超級節點收到orderNew和orderMatch後,驗證orderMatch和orderNew的有效性。如果兩者都滿足超級節點的要求,orderMatch被從共享訂單簿中移除。否則,orderNew和orderMatch都將被拒絕。
4. 超級節點將orderNew和orderMatch傳送到智慧合約進行交易。
1.3 交易上鍊
· 建立智慧合約的例項,引數由上述orderNew和orderMatch確定;
· 智慧合約鎖定借款人的抵押代幣;
· 智慧合約將出借人地址中的借貸幣種轉移到借款人地址;
· 合約正式生效。
1.4 到期結算
· 基於原力協議的超級節點透過簡訊、郵件、應用系統站內訊息和電話等方式通知使用者訂單到期;
· 借款人將應還本金和利息傳送給智慧合約;
· 智慧合約將得到的代幣和利息傳送給出借人;
· 智慧合約解鎖借款人的抵押代幣。整個交易結束。
1.5 共享訂單薄
原力協議共享訂單簿透過聯盟鏈實現,即全球基於原力協議的所有超級節點共同維護共享訂單簿。第1版原力協議將選擇基於Aura技術的Parity建立聯盟鏈。受到超級節點的制約。
在原力協議聯盟鏈中,每個超級節點都有一個賬號名為validator。每當有新的超級節點加入原力協議,都將有對應的validator加入到共享的validator列表。智慧合約設定validator加入的條件和策略。在聯盟鏈創始區塊中設定時間戳,每3秒鐘選擇一個法定validator建立、簽名和廣播一個區塊。法定validator索引透過如下公式確定:index= (UNIX_TIMESTAMP/BLOCK_TIME) % NUMBER_OF_ VALIDATORS;
當訂單更新事件發生時,超級節點中的本地validator將檢查指令的有效性。如果所涉及的訂單已經被鎖定,則更新指令將被拒絕。否則,本地validator將廣播訂單並交由法定validator打包。如果多個指令鎖定同一個訂單,則接受最早指令的請求。所有指令和結果訂單簿狀態被法定validator打包進區塊。如果51%以上validator接受區塊,它將被所有的validator確認。如果在一段時間內沒有訂單更新,則聯盟鏈暫停生產打包區塊。
2. 點對點(P2P)訂單交易流程
2.1 借貸流程
場外交易訂單允許借貸雙方利用任意媒介撮合交易。原力協議在此類交易中的作用是給交易做見證,並防止違約發生。具體流程如下:
前期工作:借款人和出借人透過網際網路等媒體撮合交易。其中一方作為Maker建立訂單並根據原力協議的要求設定所有的引數,然後簽署訂單並提交到智慧合約。
· 借款人A授權智慧合約鎖定指定數量的代幣Token A作為抵押;
· 出借人B傳送指定數量的Token B到智慧合約;
· 智慧合約將接收到的Token B傳送到借款人A;
· 智慧合約開始為合約的有效性提供證明。
2.2 還款流程
當訂單到期,任何交易方可觸發還款流程,過程如下:
· 借款人A授權智慧合約鎖定指定數量的代幣Token A作為抵押;
· 出借人B傳送指定數量的Token B到智慧合約;
· 智慧合約將接收到的Token B傳送到借款人A;
· 智慧合約開始為合約的有效性提供證明。
3. 借貸訂單引數設定
3.1 利率發現機制
原力協議生態下的借貸利率將由市場供需和借貸雙方共同決定,而每一筆借款/貸款訂單也會影響市場供需。即借貸利率完全由超級節點根據市場給出參考值,最終由借款人和出借人決定。此處所描述的市場利率均為年化利率,其餘週期下的利率也將轉化為年化利率。訂單薄將按照利率高低進行排名,當借款訂單利率大於等於出借訂單利率,則撮合成交。
為防止惡意掛單影響利率,系統會對訂單做有效性判別,反覆掛單、取消訂單的使用者賬戶,會在一段時間內被限制使用。此外,系統還將根據市場浮動情況限定利率變化範圍,如每10分鐘內成交訂單利率變化不得超過20%。更加細緻的計算規則和使用條件會在具體業務開發過程中進行調查確認。
3.2 借貸週期
借貸週期由超級節點和交易者共同確定,即超級節點提供一系列的借貸週期選項供使用者選擇,最終由訂單建立者確定週期。Maker發起的訂單在共享訂單簿中更新,Taker將選擇最合適的訂單成交。
3.3 抵押率和強制平倉線
為控制借貸風險,原力協議最初由團隊確定抵押代幣型別和抵押率、強制平倉線設定規則。所有這些內容也將儲存在智慧合約中,只有全部核心成員同意才能對內容和規則進行更改。當原力協議社羣成熟後,修改提議將被提交到去中心化的自組織投票確定。
抵押資產風險管理包括抵押代幣的選擇和抵押率設計。原力協議1.0版本將加密數字資產代幣流通市值和24小時成交額等因素作為判斷抵押代幣的依據。後期將根據DAPP運營資料,不斷更新和擴充套件可抵押代幣種類。屆時,自治組織也將發起社羣投票,讓使用者選擇其所希望的抵押代幣種類。
原力協議抵押率定義為可藉資金與抵押物現值的比例。傳統借貸機構規定抵押率不得超過70%,加密數字資產借貸領域並沒有明確規定和歷史經驗可供參考。考慮到加密數字資產歷史價格變動幅度較大,現有各抵押平臺抵押率設定在50%-80%不等。由於具體幣種的歷史價格波動幅度和24小時主流交易所成交額會有微小差異,我們將根據具體行情設定抵押率,具體如下:
An=向前第n個週期的振幅(%);
Apredict=A1+Max(0,A2-A1)/2^(2-1)+Max(0,A3-Max(A1,A2))/2^(3-1)
+…+Max(0,An-Max(A1,A2,…,An-1))/2^(n-1);其中n通常取3 。
抵押率=Min(70%,1- Apredict)。
4. 預言機:安全保障機制
在合約有效期內,超級節點透過網路爬蟲實時抓取主流交易所列表中加密數字資產的價格資訊,對智慧合約涉及到的代幣價格進行核算。如果價格波動觸及預警線,則呼叫預言機從上述網站抓取資料作為證據。然後超級節點將預警資訊傳送給借款人並提醒他們補充抵押代幣。預警資訊將透過簡訊平臺或者自動語音電話傳送,並存入區塊鏈做備份。如果借款人沒有及時補充抵押代幣,當強制平倉線抵達後將啟動強制平倉程式,具體流程如下:
· 建立智慧合約的例項,引數由上述orderNew和orderMatch確定。
· 智慧合約鎖定借款人的抵押代幣。
· 智慧合約將出借人地址中的借貸幣種轉移到借款人地址。
預言機呼叫智慧合約程式碼片段如下:
5. 保險:應急管理
應急管理
因加密數字資產市場價格波動較大,極端情況必須被提前考慮。在抵押代幣的價格在短時間內迅速跌破平倉線,而智慧合約未能及時平倉的情況下,智慧合約將不再傳送預警資訊直接啟動平倉程式。
保險選擇
在上述極端情況下,即使智慧合約儘快平倉,出借人還會遭受一定程度的損失。有時候,這些損失可能會超出出借人的承受能力,這也是阻礙借貸市場發展的一種常見因素。基於這種情況,原力協議將設計保險產品。當上述極端情況發生時,購買保險的使用者可以從保險資金池中獲得賠償。關於保險產品的更多細節將在原力協議的後續版本中詳細展示。
質押代幣選擇
如果某種型別的代幣價格長期劇烈波動,原力協議團隊(最終將由DAO組織投票)有權將特定型別的加密數字資產從抵押物清單中移除,甚至暫時性的關閉借貸交易。由於建立在以太坊之上(後期將擴充套件到EOS、NEO及未來的主要公鏈),原力協議安全性和應用水平將很大程度上取決於以太坊的發展。從長遠角度,原力協議團隊將保持對區塊鏈底層技術的關注。借貸市場的發展最終將取決於整個加密數字資產生態的持續和健康發展。
資訊規範
為使得不同超級節點訂單能夠共享,原力協議確定了訂單標準,這些標準設定了所有的引數和相關簽名。透過Keccak SHA3演算法,所有的引數被對映到32位元組長度,然後應用ECDSA 創造簽名。成交訂單的最終格式將被儲存在智慧合約變數中。公共訂單主要由超級節點以共享訂單簿的方式儲存和廣播,超級節點將收取部分費用。
1. 公共訂單
由於訂單的用途不同,超級節點最初建立的訂單與區塊鏈智慧合約中的訂單格式略有不同。下面是儲存在超級節點中的訂單格式,而智慧合約中的訂單格式將在智慧合約部分展示。
2. 點對點訂單
智慧合約
原力協議開發了一系列的智慧合約以覆蓋所有的功能。許多經常被呼叫的基礎合約被作為庫合約,以減少合約的重新部署對gas的消耗。
1. 相關庫
通常來說,原力協議中大部分的數學運算都是在鏈下執行,而應用預言機中的少量運算也只是為結果提供證明。儘管如此,基本的數學庫還是被列為庫檔案,既為了裡面不時涉及的計算,主要也是為擴充套件做準備。空間所限,此處包括其他合約僅選擇部分程式碼段作為展示之用。
1.1 基礎數學庫MathLib.sol
1.2 字串庫StringLib.sol
1.3 訂單庫OrderLib.sol
2. 原力協議智慧合約
TheForceProtocol是整合交易和風險管理所有功能的主合約。當一個交易被提交給智慧合約的時候,都將建立主合約的一個例項並儲存在以太坊區塊鏈上。智慧合約例項將呼叫合約中近十餘個內外部函式、庫函式、子合約以實現智慧合約的功能。 這些函式包括LockCollateralFromBorrower()、SendTokenToBorrower()、RepayTokenToLender()、UnlockCollateralToBorrower()、WithdrawLend()、WithdrawBorrow()等。需要注意的是WithdrawLend ()和WithdrawBorrow()必須由出借人和借款人發起,並且得到交易對口方的統一簽名才可以執行。限定函式呼叫發起人,可以利用修飾符onlyLender()和onlyBorrower()實現。空間所限,後面將僅列出部分程式碼,細節內容將在不久的未來展示在原力協議開源社羣並接受更多開發者的稽覈。
TheForceProtocol.sol
3. 預言機介面合約
原力協議中預言機主要用來為後面合約採取的平倉、預警等措施和行為提供證明。因此,預言機中的函式使用不頻繁,也就不需要專門設定獨立的合約呼叫預言機智慧合約。所有的預言機函式都可以透過預言機介面API提供,在合約中僅僅需要幾行程式碼就可以呼叫預言機函式並達到相應的效果。此處給出幾行程式碼展示預言機介面的結構。
OraclizeAPI.sol
4. 智慧合約註冊合約
為保障每個交易對應的智慧合約例項順利執行,原力協議設計了註冊智慧合約。當合約更新或者廢棄時,需要註冊合約設定更新規則及對應的智慧合約白名單。在開始階段,合約中白名單的確定更多帶有中心化的成分。後面隨著原力協議社羣的成熟,此類事務將由社羣透過去中心化的治理方式解決。
TheForceProtocolContractRegistry.sol
5. 其他智慧合約
除上述描述的合約,還有大量其他通用型別智慧合約在原力協議的執行過程中發揮著重大作用。雖然此類合約不為原力協議所獨有,即在很多其他平臺的智慧合約中都有出現,但其發揮的作用卻不容小覷。此處選型典型的幾個通用合約的程式碼作為展示之用。
5.1建立功能介面CreatorAPI.sol
5.2 連結功能合約Linkable.sol
5.3 部署功能合約Migrations.sol
6. 系統安全
粉塵攻擊
在系統執行過程中,可能存在惡意使用者廣播大量塵埃訂單的情況。在進行交易撮合的過程中,系統將根據撮合交易的規則拋棄此類訂單,減少訂單簿壓力,使得塵埃訂單不會對系統有任何影響。
訂單資料篡改
生成訂單簿的過程中將涉及網路安全問題,在資料傳輸的過程中採用加密的方式進行資料傳輸,避免網路資料被擷取,防止資料被篡改。
網路擁堵問題
資訊量過大不加以限制,超額的網路流量就會導致裝置反應緩慢,造成網路延遲。在提交智慧合約的過程中,採用訊息佇列的方式,計算頻寬速度,計算併發量,避免造成網路不必要的擁堵。
7. 合約風險控制
借貸合約全域性風控引數設定如下表:
2.1社羣生態建設
社羣生態建設包括但不不侷限於:原力社羣區塊鏈應用(DAPP)生態孵化和激勵、開發者社羣建設、商業合作和產業合作、市場營銷推廣、學術研究、教育投資、法律法規等。
2.2原力協議基金會
我們已經在新加坡註冊非營利性原力協議基金會,該基金會主要任務負責原力生態的搭建和運營、開發戰略方向的制定、FOR代幣發行及管理等,公開透明地管理由代幣捐贈而獲得的資金。
2.3 戰略投資者及社羣捐贈
根據專案發起及運營需求,我們將會預留35%的代幣回饋戰略投資者及社羣成員的資助。
關於更多原力協議資訊:
更多區塊鏈專案介紹:http://www.qukuaiwang.com.cn/news/xiangmu
風險提示:區塊鏈投資具有極大的風險,專案披露可能不完整或有欺騙。請在嘗試投資前確定自己承受以上風險的能力。本網站只做專案介紹,專案真假和價值並未做任何稽覈。