1. 首页
  2. 资讯
  3. 技术指南

去中心化交易所 Etherdelta 工作原理与设计架构

本文内容精选自华章鲜读专栏《深入理解以太坊》一书第八章“典型应用”。

《深入理解以太坊》纸书预计出版时间:2018年9月

华章鲜读上线:2018年7月(按章更新,纸书出版前更完本书全部内容)

深入理解以太坊

中心化交易所借助智能合约技术运行,不得不说这是区块链技术带来的伟大变革。去中心化交易所的交易过程虽然没有中心化交易所的便利,但整个交易从入金到交易再到出金,整个过程还是比较快的。去中心化交易所产生的交易数已经占以太坊网络上全部交易的两成。

Etherdelta是一个去中心化的交易所。从智能合约代码来看,只要是符合ERC20标准的代币都可以在Etherdelta上挂单交易。Etherdelta连接了以太坊全节点并使用metamask做交易签名,所有交易数据支持通过etherscan查看。Etherdelta的智能合约代码部署在以太坊网络上,由以太坊节点负责运行。合约代码一旦部署完成则无法修改,交易规则也无法变更。

Etherdelta的基本工作原理如下:首先,搜集所有的挂单(Order),如果有其它使用者看到感兴趣的挂单,则可以申请与之交易(Trade)。如果挂单没有人问津,则挂单者可以取消(Cancel)。另外,智能合约只能操作自己账户的余额,无法操作其它账户,所以若要交易,需要先入金(Deposit),交易结束后可以通过出金(Withdraw)提出账户余额。

出金入金的逻辑比较简单。合约用一个二维mapping结构来记录使用者的余额,余额只有当存钱、取钱和交易成功情况下才会有变更。除此之外,在存入ERC20代币时,并不是直接把ERC20代币转入合约,而是通过调用tranferFrom授权交易所操作用户账户。挂单是告诉智能合约,用户需要将多少代币换成以太币(或相反)。当有人愿意交易时,才会触发余额状态的改变。

深入理解以太坊

图8-2 去中心化交易所Etherdelta设计架构

假设以下场景,用户A挂单某代币换以太币,而最后B会用以太币买代币,那么流程可以描述如下,每一步都是一个区块链交易:

  • 1. 用户A调用代币合约的approve函数,让交易所合约可以操作用户A的代币。
  • 2. 用户A调用交易所合约的depositToken函数,让交易所合约转移A的代币到交易所合约,更新余额状态后,用户A入金完毕。
  • 3. 用户B调用交易所合约的order挂单,表示希望以token换以太币。
  • 4. 用户B调用交易所合约的deposit,存入相对应的以太币。
  • 5. 用户B调用交易所合约的trade,并附上3生成的单号,交易所合约更新双方余额后交易成功。
  • 6. 用户A调用交易所合约的withdraw,提出以太币。
  • 7. 用户B调用交易所合约的withdrawToken,提出token。

在金额波动大的时候,需要反复下单,以免过时的单子被成交。下单的时候,仅仅需要通过签名表示有下单意向,并不需要区块链来最终确认。因此,下单也可以转移到线下来做,节省手续费,同时提升挂单服务的吞吐量。

Etherdelta最大的好处是交易全部在区块链上完成,而且跟中心化交易所不同,Etherdelta不持有任何私钥。当用户将加密货币存入时,其实是存储到智能合约中。这虽然不能保证Etherdelta绝对安全,但是比起中心化交易需要处理私钥,Etherdelta的方式只要确保智能合约本身的安全性,被盗的风险就相对降低了。最近一次Etherdelta的安全性事件是2017年底黑客通过DNS劫持,假造了一个完全模仿Etherdelta的网站来欺骗使用者。这种盗用方法可以攻击任何的交易所,无论是中心化还是去中心化的。

Etherdelta的缺点有:

  • ● 没有自动撮合机制:使用者要自己找到需要的交易单,手动撮合。
  • ● 交易速度受限:受制于以太坊网络,每完成一笔交易时,需要等一段时间才会知道是否成功。如果多个使用者同时撮合一张买单,则需要等到下个区块产生时,才会知道自己有没有成功撮合该张订单。
  • ● 较多的区块链交易:从存款、建立买卖单、提款至少需要三个交易。

深入理解以太坊

华章鲜读专栏用户特权:

  • 一、作者写作开始,以“章”为单位更新电子书,真正边写边读;
  • 二、专属社群,随时向作者、编辑提问,有问必答;
  • 三、免费获赠一本作者签名版纸书;
  • 四、纸书出版后作者仍将不断扩充、更新电子书内容;

马上订购本书鲜读专栏

(巴比特资讯经“华章鲜读”独家授权转载,本文未经华章鲜读授权严禁转载,违者必究)

声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。

发表评论

登录后才能评论