买过加密货币的人大多都用过加密货币的交易所,相信大家对此也不陌生。目前热门的交易所大多都是采用中心化技术的交易所,而也因为储存了大量的加密货币而成为黑客的觊觎目标。

  在此同时也有许多项目开始研发运行在区块链的去中心化交易所。比起中心化的技术,运行在区块链上的去中心化交易所是利用区块链的三个特性:分布式、透明、不可篡改的特性来加强交易所的安全性与透明度,而许多解决方案也逐渐地浮出台面。

  这阵子跟几个朋友解释过在区块链上运行的交易所的基础原理,这篇文章整理了我对交易所的理解,并且简介三间去中心化交易所 EtherDelta、Kyber Network 以及 JOYSO 的技术。

  这篇文章会分成上下两部分,上半部分讲解基础概念与中心化交易所,下半部分讲解去中心化交易所以及结论。

  另外这边讨论的去中心化交易所仅讨论以太坊 (Ethereum) 上与所有兼容于 ERC20 的加密货币如 EOS, OMG, BNB 等的交换,并没有讨论到跨区块链如 BTC, XRP 等的货币交换。

  信息揭露:我认识几位开发 JOYSO 交易所的朋友,毕竟对他们的技术了解比较多,所以也不能保证本文观点是完全客观,阅读文章时请务必考虑这个因素。

  基础概念

  在开始前我们先讲解一些区块链上的基础概念,接下来解释交易所时会比较容易进入状况。

  钱包 (Wallet)

  当使用加密货币时,都需要建立一个钱包 (Wallet),钱包是一个私钥搭配上对应软件/硬件的组合,透过钱包可以让使用者发送与接收加密货币。而私钥就是一把可以动用钱包里面的加密货币的钥匙,任何人只要拥有了某个钱包里面的私钥,他就可以动用钱包里面的加密货币。

  

TIM图片20180227175129.png


  签章 (Signature)

  上面有提到钱包里面内含了一组私钥,这组私钥会由使用者自己保存,但是这个钱包的公钥则会提供给区块链上的任何使用者与智能合约。公钥有个很大的用处就是任何文件都可以利用私钥签帐后得到一个签名,而这个文件加上签名可以用公钥来验证这份文件是不是由特定私钥的拥有者所发出。如果这份文件或是公钥被变更过了,其他使用者(或智能合约)就可以验证出这个窜改。

  智能合约 (Smart Contract)

  智能合约 (Smart Contract),是一种存在于区块链上的程序。就如同区块链上的分布式账本一样,智能合约也拥有去中心化、透明、不可篡改的特性,另外智能合约也跟一般钱包一样,可以接受/发送虚拟货币,而执行的细节则可以在合约里面定义。

  比如说我今天发布了一个智能合约到区块链上,里面放了 1 ETH,并且撰写程序代码指定如果有人呼叫了 trade() 函式并且带入 10 BAT (这是另外一种加密货币),我就把 1 ETH 跟他交换,这样我就可以用 1 ETH 换得 10 BAT。

  

TIM图片20180227175203.png


  重要的智能合约通常会公开其源码让所有人都可以检视这份合约,确认其运作是否安全与合理。

  当然智能合约还可以做很多其他的应用不限于交换货币。而上述的交换加密货币是一个简化过的例子。

  讲解完这两个基础概念,让我们来谈谈一般大众平常使用的加密货币交易所,也就是中心化交易所。

  中心化交易所 (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 反之亦然。

  这样的交易不见得会发生在区块链上真正的货币交换,取而代之的可能仅是修改交易所数据库内的资产数字,用户看到的只是账面上数字的变化,交易所只要在用户提款时准备了充足的加密货币汇出即可。

  

TIM图片20180227175236.png


  当使用者把加密货币转到他们提供的钱包地址后,交易所就拥有了操作这些加密货币的权利,使用者必须要「信任」这个网站会保证货币安全,才能把加密货币转给交易所操作。

  正因为中心化交易所拥有了存放大量加密货币的私钥,中心化交易非常容易吸引黑客 (Cracker) 的攻击,而他们的目标绝大部分就是这些存放大量加密货币的私钥,偷走了这些私钥就代表黑客盗走这些加密货币。

  TIM图片20180227175327.png


  根据撰文时的统计,在 Bitfinex 的统计信息过去 24 小时内光 BTC/USD 的交易量就有 43,837.31 BTC,依照今天的汇率大概是 120 亿台币的交易量,自然也很容易受到黑客觊觎。近日 coincheck 因为 NEM 加密货币盗领事件总共损失了约 150 亿台币,可见交易所的安全有多么的重要,而保存巨额加密货币的私钥有多么需要好好的保管。

  以上就是基础概念以及中心化交易所简介,下半部分则会讲解去中心化交易所以及结论。

  去中心化交易所 (Decentralized Exchange)

  去中心化交易所跟一般中心化交易所最不一样的地方,就是交易行为发生在区块链上,就比如说 1 ETH 交换 10 BAT 来说,两者不一样的地方在于:

  •   中心化交易所:在交易所本身的数据库中增减用户资产字段。

  •   去中心化交易所:在区块链上直接交换,加密货币会直接发回使用者的钱包,或是保存在区块链上的智能合约。

  这样直接在区块链上交换的好处在于交易所并不持有用户大量的加密货币,所有的加密货币会储存在区块链上使用者的钱包或智能合约控管。本来需要信任中心化的交易所,现在仅需要信任区块链以及智能合约即可。而用于交易所的智能合约大多会公开源码让所有人可以确认这份合约的细节。

  而中心化交易所通常不会公开交易细节的源码,实际上如何运作也只有其内部人员可得知。公开智能合约维持了交易过程的透明与安全性,就算其中有利润的拆分也会公开在区块链上。

  目前采用去中心化的交易所使用的技术都有不同之处,以下的文章将会逐一介绍三间交易所。

  EtherDelta

  EtherDelta 是一个同时使用去中心化与中心化的技术的交易所。在 EtherDelta 当中,不管是存款、提款或是交易加密货币等行为都直接在区块链的智能合约上面完成,使用中心化技术的地方是建立了一个交易列表数据库并且在网站上面呈现,让有需要交易的双方可以在网站上面看到所有的交易订单并且进行交易。

  

TIM图片20180227175420.png


  理论上交易列表不见得要记录在中心化的数据库,其实也可以记录在区块链上,但是目前因为交易费太高的这个技术限制关系,记录交易列表在区块链上是不可行的。而 Ethereum 改善交易速度的工作正在积极展开中,但在此之前这样的方法还是会需要如 EtherDelta 这样代替的解决方案。

  一样以 1 ETH 交换 10 BAT 为例,参照下图流程为:

  

TIM图片20180227175445.png


  User A 先在 EtherDelta 提供的智能合约存入交易用的加密货币

  建立一个 1 ETH 交换 10 BAT 的卖单在智能合约当中

  在此同时,EtherDelta 会在数据库建立这笔订单的信息,让所有人可以在网站上看到这笔卖单

  User B 在 EtherDelta 的网站上看到这笔卖单,决定用 10 BAT 去交换 1 ETH

  User B 将 10 BAT 送入智能合约当中,当智能合约搓合成功后,会在区块链上的智能合约记录双方目前持有的加密货币余额

  当 User A 或 User B 想要取回加密货币时,可以在 EtherDelta 的网站上用提款的功能,当然也可以直接呼叫智能合约内的取款功能。

  EtherDelta 最大的好处是交易全部都在区块链上完成,而且跟中心化交易所不同的是 EtherDelta 没有持有任何私钥,当使用者将加密货币存入时,其实是储存到智能合约中,而 EtherDelta 所用的智能合约源码都可以在 etherscan 网站上找到 。

  这虽然不能保证 EtherDelta 完全安全,但是比起中心化交易所有相对较多的途径可以存取到这些私钥,EtherDelta 这样的方式只要确保智能合约的安全性,基本上被盗的风险就相对低了(注意不是没有风险,只是风险降低)。

  最近一次 EtherDelta 的安全性事件是在 2017 年底黑客透过劫持了 EtherDelta 的 DNS 域名,并且假造了一个完全仿造的 EtherDelta 网站来欺骗使用者,但这样的盗用方法可以用在任何的交易所,无论是中心化或是去中心化。

  至于 EtherDelta 的缺点则有:

  没有自动搓合机制:用户要自己找到自己需要的交易单手动撮合,而所有的中心化交易所都有自动撮合机制。

  交易速度限制:因为 Ethereum 目前的交易速度关系,每次要完成一笔加密货币交易时,会需要等一段时间才会知道是否有成功。如果有多个使用者同时搓合同一张买单时,需要等到下个区块产生时,才会知道自己有没有成功搓合该张订单。

  较多的 blockchain tansactions:从存款、建立买卖单、提款至少就要三个交易(这边指的是区块链上的交易,每次对区块链的改动就需要发出一笔交易),其他的方案通常都会改进这个缺点。

  

2018/2/22
  更新 1:有媒体报导 EtherDelta 停止交易中,目前还不确定是什么状况。
  更新 2:根据媒体报导,EtherDelta 目前出现营运问题。

  Kyber Network

  Kyber Network 是一个完全去中心化的交易所解决方案,跟 EtherDelta 还有一小部分必要组件采用中心化技术不同,Kyber Network 的交易所中所有必要组件都在区块链上面。

  对使用者来说,如果需要将 1 ETH 转换成 BAT,仅需要呼叫 Kyber Network 的智能合约中的 Transfer() 函式,当交易成功时 BAT 就会直接发送到指定的钱包地址,因为只有一个 transaction 而且是直接从钱包发出,不需要挂单与等候,所以在交易费或交易时间上都很不错。比起 EtherDelta 从存款、提款、挂单至少要三个 blockchain transactions 比较起来 Kyber Network 仅需一个 transaction 真的占尽优势。

  

TIM图片20180227175536.png


  仅需要一个 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 目前的问题是什么。

  

TIM图片20180227175614.png


  EtherDelta 目前比较大的问题主要还是出在交易速度,以上红字的部分会需要数十秒到数分钟的时间完成。在一般中心化交易所很难想象开单以及成交需要这么久的时间,更何况在交易时很有可能有许多使用者同时都想搓合同一张单,此时只有被区块链纳入下个区块的交易会成功,而其他会失败。

  另外一个大问题是 EtherDelta 并没有自动搓合机制,使用者必须在网站上选择要搓合哪张订单。虽然 EtherDelta 已经是相当多人使用的交易所了,但是这些缺点还是让他很难被大众接受。

  接下来看一下 JOYSO 的架构。

  

TIM图片20180227175641.png


  JOYSO 跟 EtherDelta 一样的地方在于使用者的加密货币都保存在区块链上面的智能合约,而不是由交易所持有私钥保存。

  而这个智能合约包含了交易加密货币的功能,跟 EtherDelta 不一样的地方是它支持 持有使用者的签章就可以执行交易 的功能。如果你忘了签章是什么,请到上半部了解签章的功能。

  当 User A 建立一张卖单时,JOYSO 网站会透过 MetaMask 或 Ledger Nano S 将此卖单用 User A 的私钥签章,并且将此卖单与签名一起送到 JOYSO 的服务器。

  当 User B 建立买单(并且签名),并且符合 User A 的卖单时,JOYSO 的系统就会自动搓合这两张单。搓合之后则会由 JOYSO 的 Admin 账号送出交易到智能合约,送出的内容包含搓合后的订单与双方的签名。

  由于有附上签名的关系,智能合约可以在交易前检查确认双方的订单是否都拥有各自的签名,如果没有正确的签名就不执行该交易。

  实时此时订单在 JOYSO 中心化的系统中遭到入侵,也可以透过签名的方式验证,保证智能合约不会执行有问题的交易。也保证了就算 JOYSO 被攻破,黑客也不能很轻易的领走在智能合约内的加密货币。

  这边列举一下比起 EtherDelta 来说 JOYSO 的优点。

  如一般中心化交易所一般拥有自动搓合机制

  交易速度较快,因为搓合系统由中心化的系统执行

  因为搓合程序不在区块链上而由中心化的系统确认后一一的送入区块链。保证不会有多个使用者同时抢同一张单后还要等到下个区块才能知道到底成功还失败。

  交换加密货币的 transaction 由 JOYSO 的 Admin 账号执行,使用者不需要负担这个部分的交易费(只要负担存款/提款的交易费)

  在这些优势下,JOYSO 仍保持跟全中心化的交易所接近的使用体验,这样取去中心化的安全特性,再加上中心化交易所的使用体验,就是 JOYSO 交易所想要达成的目标。

  结论

  中心化与去中心化交易所

  关于中心化交易所与去中心化交易所来说,去中心化的交易所利用了区块链与智能合约的三个特性:去中心化、透明性及不可篡改性来提高交易所的安全,同时也保持了交易所的透明性。

  而中心化交易所目前的优势还是已经经过了时间的验证,虽然入侵事件频传,但相对来说中心化交易所的技术还是比较成熟。

  三间去中心化交易所的比较

  至于文章中所提到的三间不同的去中心化交易所来说:

  EtherDelta 是比较早期开始发展的交易所,累积了较多使用者但也让其他人慢慢了解到 EtherDelta 所使用的去中心化技术限制。

  Kyber Network 透过不提供买卖单的方式,创造出另外一种完全去中心化的营运模式,同时单一 Transaction 就可以交换货币也大幅提升了其优势。

  JOYSO 则是提供了跟中心化交易所非常接近的功能与用户体验,但却改善了 EtherDelta 目前的缺点,提升了交易速度同时支持自动搓合机制。

  EtherDelta 比较像是初代去中心化交易所,而 Kyber Network 与 JOYSO 则透过不同的方法来解决这些问题,撰文的同时 Kyber Network 正好要在 Ethereum mainnet 上面部署,值得大众期待来观察一下这样全去中心化的技术可以走到什么样的程度!

  至于 JOYSO 则是希望透过混合中心化与去中心化的技术来达成接近中心化技术的使用体验,但又保有去中心化的安全性,虽然目前交易所还没上线,但是也值得接下来持续观察这个交易所的表现。


本文转自微信公众号:程序员新视界 公众号IDershixiong_see_world