運行在區塊鏈上的交易所

評論
評論

原文 篇刊載於 Medium,依照 CC BY-SA 4.0 轉載並合併。作者 Yuren Ju 為 Taipei Ethereum Meetup 社群成員,除了咖啡與旅遊外,也喜歡動手寫程式解決自己或別人在生活中遇到的疑難雜症,最新的興趣是探索區塊鏈的可能性。

買過加密貨幣的人大多都用過加密貨幣的交易所,相信大家對此也不陌生。目前熱門的交易所大多都是採用中心化技術的交易所,而也因為儲存了大量的加密貨幣而成為駭客的覬覦目標。

在此同時也有許多專案開始研發運行在區塊鏈的去中心化交易所。比起中心化的技術,運行在區塊鏈上的去中心化交易所是利用區塊鏈的三個特性:分散式、透明、不可篡改的特性來加強交易所的安全性與透明度,而許多解決方案也逐漸地浮出檯面。

這陣子跟幾個朋友解釋過在區塊鏈上運行的交易所的基礎原理,這篇文章整理了我對交易所的理解,並且簡介三間去中心化交易所 EtherDeltaKyber Network 以及 JOYSO 的技術。

另外這邊討論的去中心化交易所僅討論以太坊 (Ethereum) 上與所有相容於 ERC20 的加密貨幣如 EOS, OMG, BNB 等的交換,並沒有討論到跨區塊鏈如 BTC, XRP 等的貨幣交換。

資訊揭露:我認識幾位開發 JOYSO 交易所的朋友,畢竟對他們的技術了解比較多,所以也不能保證本文觀點是完全客觀,閱讀文章時請務必考慮這個因素。

基礎概念

在開始前我們先講解一些區塊鏈上的基礎概念,接下來解釋交易所時會比較容易進入狀況。

錢包 (Wallet)

當使用加密貨幣時,都需要建立一個錢包 (Wallet),錢包是一個私鑰搭配上對應軟體/硬體的組合,透過錢包可以讓使用者發送與接收加密貨幣。而私鑰就是一把可以動用錢包裡面的加密貨幣的鑰匙,任何人只要擁有了某個錢包裡面的私鑰,他就可以動用錢包裡面的加密貨幣。

簽章 (Signature)

上面有提到錢包裡面內含了一組私鑰,這組私鑰會由使用者自己保存,但是這個錢包的公鑰則會提供給區塊鏈上的任何使用者與智能合約。公鑰有個很大的用處就是任何文件都可以利用私鑰簽帳後得到一個簽名,而這個文件加上簽名可以用公鑰來驗證這份文件是不是由特定私鑰的擁有者所發出。如果這份文件或是公鑰被變更過了,其他使用者(或智能合約)就可以驗證出這個竄改。

智能合約 (Smart Contract)

智能合約 (Smart Contract),是一種存在於區塊鏈上的程式。就如同區塊鏈上的分散式帳本一樣,智能合約也擁有去中心化、透明、不可篡改的特性,另外智能合約也跟一般錢包一樣,可以接受/發送虛擬貨幣,而執行的細節則可以在合約裡面定義。

比如說我今天發佈了一個智能合約到區塊鏈上,裡面放了 1 ETH,並且撰寫程式碼指定如果有人呼叫了 trade() 函式並且帶入 10 BAT (這是另外一種加密貨幣),我就把 1 ETH 跟他交換,這樣我就可以用 1 ETH 換得 10 BAT。

重要的智能合約通常會公開其源碼讓所有人都可以檢視這份合約,確認其運作是否安全與合理。

當然智能合約還可以做很多其他的應用不限於交換貨幣。而上述的交換加密貨幣是一個簡化過的例子。

講解完這兩個基礎概念,讓我們來談談一般大眾平常使用的加密貨幣交易所,也就是中心化交易所。

中心化交易所 (Centralized Exchange)

中心化交易所其實就是大家主流使用的交易所,無論是 Bitfinex, Poloniex, coincheck 等都是中心化交易所。大家使用這些交易所的方式,通常就是到網站上註冊,根據不同國家的法規經過一連串的認證程序後,就可以開始把加密貨幣轉入他們指定的錢包地址後,就可以開始在上面交易加密貨幣。

拿剛剛的例子來說,如果 使用者 A 要拿 1 ETH 交換 10 BAT,中心化交易所會在他們的系統的資料庫當中,建立一筆賣單,內容是 1 ETH 交換 10 BAT。如果有另外一位 使用者 B 也建立了一筆買單,願意用 10 BAT 買 1 ETH,系統就會自動搓合這筆交易,在 使用者 A 的資產清單中扣掉 1 ETH,增加 10 BAT,使用者 B 反之亦然。

這樣的交易不見得會發生在區塊鏈上真正的貨幣交換,取而代之的可能僅是修改交易所資料庫內的資產數字,使用者看到的只是帳面上數字的變化,交易所只要在使用者提款時準備了充足的加密貨幣匯出即可。

當使用者把加密貨幣轉到他們提供的錢包地址後,交易所就擁有了操作這些加密貨幣的權利,使用者必須要「信任」這個網站會保證貨幣安全,才能把加密貨幣轉給交易所操作。

正因為中心化交易所擁有了存放大量加密貨幣的私鑰,中心化交易非常容易吸引駭客 (Cracker) 的攻擊,而他們的目標絕大部分就是這些存放大量加密貨幣的私鑰,偷走了這些私鑰就代表駭客盜走這些加密貨幣。

根據撰文時的統計,在 Bitfinex 的統計資訊過去 24 小時內光 BTC/USD 的交易量就有 43,837.31 BTC,依照今天的匯率大概是 120 億台幣的交易量,自然也很容易受到駭客覬覦。近日 coincheck 因為 NEM 加密貨幣盜領事件總共損失了約 150 億台幣,可見交易所的安全有多麽的重要,而保存鉅額加密貨幣的私鑰有多麽需要好好的保管。

去中心化交易所 (Decentralized Exchange)

去中心化交易所跟一般中心化交易所最不一樣的地方,就是交易行為發生在區塊鏈上,就比如說 1 ETH 交換 10 BAT 來說,兩者不一樣的地方在於:

  • 中心化交易所:在交易所本身的資料庫中增減使用者資產欄位。
  • 去中心化交易所:在區塊鏈上直接交換,加密貨幣會直接發回使用者的錢包,或是保存在區塊鏈上的智能合約。

這樣直接在區塊鏈上交換的好處在於交易所並不持有使用者大量的加密貨幣,所有的加密貨幣會儲存在區塊鏈上使用者的錢包或智能合約控管。本來需要信任中心化的交易所,現在僅需要信任區塊鏈以及智能合約即可。而用於交易所的智能合約大多會公開源碼讓所有人可以確認這份合約的細節。

而中心化交易所通常不會公開交易細節的源碼,實際上如何運作也只有其內部人員可得知。公開智能合約維持了交易過程的透明與安全性,就算其中有利潤的拆分也會公開在區塊鏈上。

目前採用去中心化的交易所使用的技術都有不同之處,以下的文章將會逐一介紹三間交易所。

EtherDelta

EtherDelta 是一個同時使用去中心化與中心化的技術的交易所。在 EtherDelta 當中,不管是存款、提款或是交易加密貨幣等行為都直接在區塊鏈的智能合約上面完成,使用中心化技術的地方是建立了一個交易清單資料庫並且在網站上面呈現,讓有需要交易的雙方可以在網站上面看到所有的交易訂單並且進行交易。

理論上交易清單不見得要記錄在中心化的資料庫,其實也可以記錄在區塊鏈上,但是目前因為交易費太高的這個技術限制關係,記錄交易清單在區塊鏈上是不可行的。而 Ethereum 改善交易速度的工作正在積極展開中,但在此之前這樣的方法還是會需要如 EtherDelta 這樣代替的解決方案。

一樣以 1 ETH 交換 10 BAT 為例,參照下圖流程為:

  1. User A 先在 EtherDelta 提供的智能合約存入交易用的加密貨幣
  2. 建立一個 1 ETH 交換 10 BAT 的賣單在智能合約當中
  3. 在此同時,EtherDelta 會在資料庫建立這筆訂單的資訊,讓所有人可以在網站上看到這筆賣單
  4. User B 在 EtherDelta 的網站上看到這筆賣單,決定用 10 BAT 去交換 1 ETH
  5. User B 將 10 BAT 送入智能合約當中,當智能合約搓合成功後,會在區塊鏈上的智能合約記錄雙方目前持有的加密貨幣餘額

當 User A 或 User B 想要取回加密貨幣時,可以在 EtherDelta 的網站上用提款的功能,當然也可以直接呼叫智能合約內的取款功能。

EtherDelta 最大的好處是交易全部都在區塊鏈上完成,而且跟中心化交易所不同的是 EtherDelta 沒有持有任何私鑰,當使用者將加密貨幣存入時,其實是儲存到智能合約中,而 EtherDelta 所用的智能合約源碼都可以在 etherscan 網站上找到 。

這雖然不能保證 EtherDelta 完全安全,但是比起中心化交易所有相對較多的途徑可以存取到這些私鑰,EtherDelta 這樣的方式只要確保智能合約的安全性,基本上被盜的風險就相對低了(注意不是沒有風險,只是風險降低)。

最近一次 EtherDelta 的安全性事件是在 2017 年底駭客透過劫持了 EtherDelta 的 DNS 域名,並且假造了一個完全仿造的 EtherDelta 網站來欺騙使用者,但這樣的盜用方法可以用在任何的交易所,無論是中心化或是去中心化。

至於 EtherDelta 的缺點則有:

  1. 沒有自動搓合機制:使用者要自己找到自己需要的交易單手動撮合,而所有的中心化交易所都有自動撮合機制。
  2. 交易速度限制:因為 Ethereum 目前的交易速度關係,每次要完成一筆加密貨幣交易時,會需要等一段時間才會知道是否有成功。如果有多個使用者同時搓合同一張買單時,需要等到下個區塊產生時,才會知道自己有沒有成功搓合該張訂單。
  3. 較多的 blockchain tansactions:從存款、建立買賣單、提款至少就要三個交易(這邊指的是區塊鏈上的交易,每次對區塊鏈的改動就需要發出一筆交易),其他的方案通常都會改進這個缺點。

Kyber Network

Kyber Network 是一個完全去中心化的交易所解決方案,跟 EtherDelta 還有一小部分必要元件採用中心化技術不同,Kyber Network 的交易所中所有必要元件都在區塊鏈上面。

對使用者來說,如果需要將 1 ETH 轉換成 BAT,僅需要呼叫 Kyber Network 的智能合約中的 Transfer() 函式,當交易成功時 BAT 就會直接發送到指定的錢包地址,因為只有一個 transaction 而且是直接從錢包發出,不需要掛單與等候,所以在交易費或交易時間上都很不錯。比起 EtherDelta 從存款、提款、掛單至少要三個 blockchain transactions 比較起來 Kyber Network 僅需一個 transaction 真的佔盡優勢。

僅需要一個 Transaction 就可以達成交換加密貨幣就是 Kyber Network 的設計關鍵。

Kyber Network 上面沒有掛單的功能,取而代之的是由 Reserve Manager 這個角色直接對智能合約設定匯率,使用者交易前就可以透過網站或 API call 取得匯率,由於在交易前就可以取得匯率,使用者就可以依照此匯率決定要不要在 Kyber Network 交易貨幣。

至於各式各樣的加密貨幣則由 Reserve Contributor 這個角色提供,他們可以在交易所中將自己的加密貨幣提供給 Kyber Network 並且分得利潤。

這邊只提到 Kyber Network 的概觀,更多細節可以參考他們的白皮書(中文 、英文)了解詳情。

我個人認為 Kyber Network 比較像是如 MaiCoin 或 BitoEX 這樣的買賣幣中心,但是加入了讓其他使用者也可以加入加密貨幣提供者的功能,如果我擁有很多 BAT 加密貨幣,就可以申請成為 BAT 加密貨幣提供者利用閒置的 BAT 加密貨幣放在 Kyber Network 上透過匯率獲得利潤。

但由於 Kyber Network 沒有掛單的功能,就沒辦法在指定價格換得自己想要的貨幣,或許可以透過自己監控匯率來完成這個功能,但目前在 Kyber Network 的白皮書裡面沒有包含這樣的功能在智能合約當中。

JOYSO

JOYSO 是一個由台灣團隊所開發的交易所,預計今年上線。根據白皮書(中文英文)所述 JOYSO 是同時採用了中心化以及去中心化技術的交易所,在保存加密貨幣、執行交易更新餘額等操作將會在區塊鏈上完成,而建立買單/賣單、搓合交易則是在 JOYSO 的中心化伺服器上完成。由於目前服務還沒上線,以下的資訊大多都從白皮書裡面整理。

瞭解 JOYSO 以前,先來看一下 EtherDelta 目前的問題是什麼。

EtherDelta 目前比較大的問題主要還是出在交易速度,以上紅字的部分會需要數十秒到數分鐘的時間完成。在一般中心化交易所很難想像開單以及成交需要這麼久的時間,更何況在交易時很有可能有許多使用者同時都想搓合同一張單,此時只有被區塊鏈納入下個區塊的交易會成功,而其他會失敗。

另外一個大問題是 EtherDelta 並沒有自動搓合機制,使用者必須在網站上選擇要搓合哪張訂單。雖然 EtherDelta 已經是相當多人使用的交易所了,但是這些缺點還是讓他很難被大眾接受。

接下來看一下 JOYSO 的架構。

JOYSO 跟 EtherDelta 一樣的地方在於使用者的加密貨幣都保存在區塊鏈上面的智能合約,而不是由交易所持有私鑰保存。

而這個智能合約包含了交易加密貨幣的功能,跟 EtherDelta 不一樣的地方是它支援 持有使用者的簽章就可以執行交易 的功能。如果你忘了簽章是什麼,請到上半部瞭解簽章的功能。

當 User A 建立一張賣單時,JOYSO 網站會透過 MetaMask 或 Ledger Nano S 將此賣單用 User A 的私鑰簽章,並且將此賣單與簽名一起送到 JOYSO 的伺服器。

當 User B 建立買單(並且簽名),並且符合 User A 的賣單時,JOYSO 的系統就會自動搓合這兩張單。搓合之後則會由 JOYSO 的 Admin 帳號送出交易到智能合約,送出的內容包含搓合後的訂單與雙方的簽名。

由於有附上簽名的關係,智能合約可以在交易前檢查確認雙方的訂單是否都擁有各自的簽名,如果沒有正確的簽名就不執行該交易。

即時此時訂單在 JOYSO 中心化的系統中遭到入侵,也可以透過簽名的方式驗證,保證智能合約不會執行有問題的交易。也保證了就算 JOYSO 被攻破,駭客也不能很輕易的領走在智能合約內的加密貨幣。

這邊列舉一下比起 EtherDelta 來說 JOYSO 的優點。

  1. 如一般中心化交易所一般擁有自動搓合機制
  2. 交易速度較快,因為搓合系統由中心化的系統執行
  3. 因為搓合程序不在區塊鏈上而由中心化的系統確認後一一的送入區塊鏈。保證不會有多個使用者同時搶同一張單後還要等到下個區塊才能知道到底成功還失敗。
  4. 交換加密貨幣的 transaction 由 JOYSO 的 Admin 帳號執行,使用者不需要負擔這個部分的交易費(只要負擔存款/提款的交易費)

在這些優勢下,JOYSO 仍保持跟全中心化的交易所接近的使用體驗,這樣取去中心化的安全特性,再加上中心化交易所的使用體驗,就是 JOYSO 交易所想要達成的目標。

結論

中心化與去中心化交易所

關於中心化交易所與去中心化交易所來說,去中心化的交易所利用了區塊鏈與智能合約的三個特性:去中心化、透明性及不可篡改性來提高交易所的安全,同時也保持了交易所的透明性。

而中心化交易所目前的優勢還是已經經過了時間的驗證,雖然入侵事件頻傳,但相對來說中心化交易所的技術還是比較成熟。

三間去中心化交易所的比較

至於文章中所提到的三間不同的去中心化交易所來說:

  • EtherDelta 是比較早期開始發展的交易所,累積了較多使用者但也讓其他人慢慢瞭解到 EtherDelta 所使用的去中心化技術限制。
  • Kyber Network 透過不提供買賣單的方式,創造出另外一種完全去中心化的營運模式,同時單一 Transaction 就可以交換貨幣也大幅提升了其優勢。
  • JOYSO 則是提供了跟中心化交易所非常接近的功能與使用者體驗,但卻改善了 EtherDelta 目前的缺點,提升了交易速度同時支援自動搓合機制。

EtherDelta 比較像是初代去中心化交易所,而 Kyber Network 與 JOYSO 則透過不同的方法來解決這些問題,撰文的同時 Kyber Network 正好要在 Ethereum mainnet 上面部署,值得大眾期待來觀察一下這樣全去中心化的技術可以走到什麼樣的程度!

至於 JOYSO 則是希望透過混合中心化與去中心化的技術來達成接近中心化技術的使用體驗,但又保有去中心化的安全性,雖然目前交易所還沒上線,但是也值得接下來持續觀察這個交易所的表現。

最後感謝各位閱讀這篇長文,如果你覺得這篇文章對你有幫助,不妨考慮用 ETH 贊助作者,讓我有動力可以繼續創作。以下是我的 ETH 帳號地址:

ETH Address: 0x0a0cB51434e1DB4d2dffeB335C96f933d20bcaB4

相關文章

評論