分类
外汇交易指南

去中心化交易所如何运行?

Preface 完全理解 A.I 與 Robotics的重要性,因此2022年的這個暑期,我們將一同迎接夏日Coding Boot Camp 訓練班。由4歲到18歲,Preface都有專屬的Coding課程可供選擇。怎樣的課程最適合你?誠邀你帶同孩子前來Preface每星期舉行的免費體驗日,一同共序未來。

去中心化交易所是怎么交易的?

我还是图森破 ​

1.Etherdelta&Forkdelta:

但是订单簿放在了交易所数据库,且其设计规则为由taker负责将交易广播到区块链进行确认,即:maker用私钥签名下了一笔订单,是瞬时的,因为写入了交易所链下数据库并没有发送交易至链上,此时taker过来吃掉这笔订单,其过程是由taker发送交易至以德智能合约,智能合约验证该订单是由maker签名及订单有效时间(maker下单可以选择在多少个区块后订单未成交自动取消),待确认过后,由智能合约进行双方资金结算。随便去以德找一笔交易,然后点击查看其在区块链的状态都可以看到相关交易参数:

注意,以德不会自动撮合订单,所以你会发现orderbook上面经常有卖1价低于买1价的情况。另外,由于每笔交易需链上确认,导致其交易效率受以太坊网络影响,同时存在成交失败情况(甲和乙去吃A订单,由于下单先后及Gas price高低会导致有一方先成交而另一方交易失败)

0x协议无充值/提现过程,直接授权智能合约进行token转账(ETH要先wrap成为ERC20的WETH)。0x的机制为链下订单中继、链上最终结算。我们假设Maker想要用a代币换b代币,那么在0x的体系下流程如下:
1)Maker授权智能合约读取a代币的余额(签名)

虽然其共享订单簿、无充提过程、任何人均可以在协议上面自己搭建交易所,但是由于其每笔订单均需链上确认,所以仍然存在效率问题及成交失败情况

DEX经历的三个技术阶段

去中心化交易技术始于以太坊的诞生。如果你非说从比特股(BitShares)或者瑞波币(Ripple)就开始了,我也不反对,前后其实没差多少时间,没必要纠结在这个时间点上。至少在以太坊上,第一批DEX开发者几乎都是抱着写HelloWorld的心态写智能合约的,也就是说更多是在乎并试图证明逻辑的正确性,而几乎完全忽略落地后大量用户参与时的性能问题。在这种开发理念下,智能合约被严重滥用了:中心化交易系统的主要模块都被搬到了DEX智能合约里,包括订单本(Order Book),撮合引擎(Match Engine),清结算子系统(Settlement Subsystem),账号子系统(Account Subsystem),以及充值提现子系统(Deposit & Withdrawal)。

如果只是简单粗暴地那么做,可不就变成中心化交易所了!但是第三阶段技术的一个核心潜台词是“可信计算”。换句话说,我们需要通过技术,证明在链外运行的代码逻辑是百分百可信的。这个信任最主要是针对链上对应的智能合约而言,只有智能合约信任链外的计算结果,才做链上的转账。如果智能合约信任链外计算结果,那么用户也就应该可以信任中继的计算结果,进而从总体上信任这种去中心化交易技术。

这里“可信计算”其实没有一个严谨的定义,我是想通过这个比较容易理解的概念,来强调第三阶段技术的一个关键点。目前看来实现可信计算的方式主要由两种:第一种是通过硬件,利用CPU中的可信任计算环境(Trusted Execution Environment,或者叫TEE,有时候也叫Enclave)实现。这种实现方式本质上是基于信任链,而信任链的最顶端是CPU的生产厂家。第二种是通过零知识证明(Zero-Knowledge Proofs,或者叫ZKP)实现,即ZK Rollup。这是基于数学无需信任的一种技术方式。

特别需要做个说明:这个交易账号系统其实是维护在一个叫“树”的结构中的。每个交易所一棵树,这棵树里面记录了每个用户的交易密码对应的公钥,每个用户每种资产的余额,以及每个订单的历史成交量等信息。这棵树其实就是第三阶段DEX链外的“世界状态”,我们可以称之为“世界状态树”。

读到这里,我希望你还没被弄糊涂。你可以在脑海里,这样勾勒出第三阶段技术的一个画面:一个DEX包含以太坊上的一组智能合约,用来验证可信计算的证明,并在必要的时候做充值提现的转账;它还包含一个在中心化中继系统里的一个很大很大的树,里面包含这个DEX的所有重要信息。

第三阶段技术的性能怎么样呢?这取决于上面提到的那棵树的容量,容量越大,吞吐量越小,成本越高。路印3.0最新版本采用了四叉树结构(也就是每个节点有四个子节点),在高度设置为 21 的情况下,最高级别资产安全的情况下每秒交易吞吐量最高是1400笔;如果我们稍微降低安全性到联盟链级别,每秒交易吞吐量可达10500笔,而且我们还在近一步优化吞吐量。

DEX技术可能的三个发展方向

第一个方向是第三阶段技术的通用化。目前路印在做的是现货交易,但其实第三阶段技术实际上提供了一种通用的dApp扩容方案。说的更明确点:这种技术不仅仅可以用来给DEX扩容,还可以用来给几乎所有类型的dApp扩容。如果你改变链外世界状态树的逻辑本质上是用户资产互换,那么你就做了一个去中心化交易所;如果你改变树的逻辑是一个用户给另一个用户付款,那么你就做了一个可以和闪电网络竞争的,资金利用率更高的支付系统;你还可以做物流追踪,做任何图灵完备的dApp。如果我们只把场景限制在有交易属性的dApp内,那么你可以做衍生品交易,做另一个版本的Kyber,Uniswap,和DutchX。

那么是不是可以把A、B、C三棵树合而为一,变成树D呢?这样我们就可以通过可信计算,更改D这棵树里面两个用户的不同的资产,其中一个资产在以太坊上,另一个资产在另一条链上,这不就实现了跨连交易了吗?其实就是这样。我们意识到这个可能性是在几乎做完了路印3.0 beta2 的时候,这的确让我兴奋了很久。当然,工程上需要很多仔细的设计,特别是因为不同的公有链的安全特点不一样,这棵世界状态树在更新维护时候,要特别考虑到每条链重构(reorganization)的影响。

去中心化交易所解决方案实例

以无集中权限的去中心化方式交易数字商品,这是区块链技术的关键承诺之一。数字资产交易所和区块链以不同方式实现了这一承诺。对于高频率交易,很多工作在第 2 层应用执行,该层的交易最终在区块链上完成。对于低频率交易,大部分工作直接在链上执行。在 Algorand,数字资产交易所能以多种方式实现。此解决方案采用其中一种,将在区块链上存储和执行所有订单。本文旨在提供更具指导性的说明,帮助开发人员了解 Algorand 不同技术部分的关键概念,因此在操作方面相当简单。

在此解决方案中,我们将介绍如何连接买家和卖家,以促进在 Algorand 区块链上以去中心化方式交易资产。我们将使用限价订单合约作为交易方式,其中由买家开立订单,并指明要购买的资产和相应的兑换率。该订单随后保留在区块链上,可供相关资产的任何卖家后续执行订单。此解决方案还使买家能够随时关闭订单。

此应用涉及使用多种 Algorand 技术,包括无状态智能合约、有状态智能合约、原子交易、标准资产、资产交易和 Algorand 索引器。我们将从总体应用设计开始,然后深入探讨如何构建应用的详细信息。

此示例使用硬编码地址,供用户开立和执行订单。此示例还采用与 Algorand TestNet 和 Indexer 的硬编码连接。这是为了简化此示例,但应用最好使用 AlgoSigner 管理账户,以及与应用部署者所用节点或某一可用 API 服务的连接。

1 - 开立订单

此解决方案可供买家创建限价订单,以在其中指明想要购买的 Algorand 资产。该订单还应包含买家愿意花费的最低和最高 microAlgo 数额和兑换率。此解决方案中使用简单的“N”和“D”符号来表示此兑换率。其中“N”表示资产数量,而“D”表示买家愿意花费的 micoAlgo 数额。输入后,用户便可下单。

EditorImages/2020/10/28 18:57/limitorder1.png

2 - 查看已开立订单

下单后,此解决方案提供一个列表框和一个刷新订单按钮。点击后,Web 应用调用 Algorand Indexer 来搜索已选择加入有状态智能合约的所有账户。这些账户经遍历,其本地存储值(已开立订单)读回并填充入列表框。

EditorImages/2020/10/28 18:58/limitorder2.png

3 - 执行已开立订单

已开立订单列出后,其他用户可登录 Web 应用,来选择并执行已开立订单。执行用户可指明准备出售多少资产,以及要求多少 microAlgo。如果所指定的数额高于初始限价订单的最高额或低于初始最低额,则执行失败。如果所指定的兑换率低于初始限价订单的规定,则执行也将失败。当执行用户按下执行订单按钮后,Web 应用将生成三项交易。一是调用有状态智能合约,以指明用户在执行特定订单。二是列出限价订单的用户对执行用户的付款交易,采用指定的 microAlgo 数额。三是从执行用户向列出限价订单的用户转移指定的资产数额。第一和第三项交易经执行用户签署。第二项交易(付款)经无状态智能合约逻辑签署,也就是列单用户之前在开立订单时所签署的逻辑。此逻辑签名读取自上传到服务器的文件。这三项交易以原子方式分组,并推送至服务器。对于多项原子交易,只要其中任何一项失败,则全部失败。这样,双方都可获得期望的结果。

EditorImages/2020/10/28 19:18/limitorder3.png

4 - 关闭订单

EditorImages/2020/10/28 19:21/limitorder4.png

此应用使用 JavaScript SDK 实现对 Algorand 节点和 Indexer 的所有调用。

开立订单 - 第 1 步

EditorImages/2020/10/28 19:23/limitorder5.png

所需数据包括用户想要购买的资产 ID、愿意花费的最低和最高 microAlgo 数额,以及 N 和 D 值。这两个值共同构成兑换率 N/D 。也就是说,对于每一份数量为 N 的资产,用户愿意花费数额为 D 的 microAlgo。按“下单”按钮后,Web 应用代码会使用以下基本 TEAL 模板字符串生成一个委托无状态智能合约。

  • 确认同时提交了三项交易。
  • 第一项交易必须是调用有状态合约。
  • 第二项必须是付款交易。
  • 第三项必须是资产转移。
  • 有状态应用调用必须是对 dex 有状态合约的 NoOp 调用。
  • 这些交易均不得为 Rekey 去中心化交易所如何运行? 操作。
  • 付款交易的数额应介于所指定的最低值与最高值之间。
  • 资产转移应与 GUI 中的指定相符。
  • 确认兑换率正确。

Web 应用中输入的值已代入合约中。此代码随后经编译。订单号基于用户提供的输入值而生成。此编译逻辑随后由下单用户签署。此经签署的逻辑(逻辑签名)将上传至服务器,以供日后使用。然后,Web 应用调用有状态智能合约应用以开立订单,并提供用户本地状态中存储的订单号。有状态智能合约代码中用于开立订单的部分如下所示。

  • 确认组中只有一项交易。
  • 订单号应为合约调用的第二个自变量。
  • 查看本地状态中是否已有相同订单。如果有则失败。
  • 在本地状态中存储订单号。

查看已开立订单 - 第 2 步

EditorImages/2020/10/28 19:39/limitorder6.png

JavaScript SDK 用于连接 Indexer 以及搜索已选择加入有状态智能合约的所有账户。这些账户经遍历,并检查其本地状态,以查找当前开立的订单。源文件中提供了其他代码以简化此代码部分,使其仅依赖于 Indexer。这些其他代码已被注释掉,因为当前的索引器错误使其无法生效。此问题应该很快就能解决,之后即可用注释掉的代码替换现有的代码。

执行已开立订单 - 第 3 步

用户可从已开立订单列表中选择要执行的订单。这需要填写一些输入框,来指明所交易的资产、资产数量以及执行限价订单的用户将收到的 microAlgo 数额。这些框已填入正确的初始兑换率,用户可进行修改以出售更多资产,但兑换率须至少与初始兑换率同样有利于列单用户,并符合最低和最高 microAlgo 限额。如果违反了任何这些条件,都会因为逻辑错误而导致执行失败。此逻辑处于列单用户在下单时签署的无状态智能合约中。

EditorImages/2020/10/28 19:49/limitorder7.png

第二是列单用户账户对执行账户的付款交易,采用执行用户指定的数额。第三是从执行用户账户到列单用户账户的资产转移。这些交易经过分组和签署。第一和第三项交易由执行用户签署。第二项交易由下单时已签署的逻辑签名进行签署。这些交易随后提交至 Algorand 网络。它们要么全部成功,要么全部失败。

  • 确认三项交易均以原子方式提交。
  • 第一项必须是调用有状态合约。
  • 第二项必须是付款交易。
  • 第三项必须是资产转移交易。
  • 确认存在订单。如果没有则失败。
  • 从初始列单用户本地状态中删除已执行的订单。

关闭已开立订单 - 第 4 步

订单的初始列单用户可随时从已开立订单列表中选择所下订单,并通过“关闭订单”按钮来取消订单。Web 应用将触发有状态智能合约调用,以传递两个参数:字符串“close”和订单号。然后,有状态合约将从用户的本地状态中删除订单号,且 Web 应用将从服务器删除之前签署的无状态合约。

  • 确认此为单一交易。
  • 确认用户本地状态中确实存在该订单。如果没有则为失败。
  • 从用户的本地状态中删除订单号。

该应用所含的错误检查很少,仅用于学习。在生产应用中使用此逻辑之前,应先进行额外的错误检查和处理。例如,订单号仅基于限价订单中所用的值来生成。在 去中心化交易所如何运行? Web 应用中,这会加上用户地址作为前缀,但列表框和有状态 TEAL 应用会移除该前缀。这将导致两位不同用户可能使用相同的订单号。虽然这不会产生问题,但可能会造成混淆。此外,逻辑签名非加密上传,虽然应该无关紧要,但最好还是确保其安全。

此简单易用的 DEX 应用展现了如何使用 Algorand 的多项第 1 层功能来实现实用的智能合约应用。应用的完整源代码可访问 Github 获取。请务必查看自述文件,了解如何设置和运行应用。

【去中心化交易所】定義、好處、風險及最新排名2022

去中心化交易所

Preface Summer Experience Day

Preface 完全理解 A.I 與 Robotics的重要性,因此2022年的這個暑期,我們將一同迎接夏日Coding Boot Camp 訓練班。由4歲到18歲,Preface都有專屬的Coding課程可供選擇。怎樣的課程最適合你?誠邀你帶同孩子前來Preface每星期舉行的免費體驗日,一同共序未來。

去中心化交易所是什麼?

去中心化交易所(DEX) 沒有中央機構來跟踪訂單簿和匹配訂單,主要有兩種主要運作原理:基於訂單簿和自動做市商。與CEX一樣,舊代的 DEX 傾向於使用去中心化版本的訂單簿系統進行操作,例如 LoopRing、Gnosis Protocol 或 IDEX,他們都使用算法來進行用戶之間的交易,並且用智能合約將交易記錄在區塊鏈上,反映買賣雙方之間流動的硬幣和代幣。而自動做市商(AMM) 則是一種較新穎的創新機制,主要目的是促進價格發現和解決缺乏流動性這個關鍵問題。DEX 龍頭 Uniswap 是第一個使用 AMM 模型的 DEX。AMM DEX 上的交易不需要匹配買賣雙方,而是使用DEX 自己的智能合約管理的流動資金池進行的。