除了支持资产的发行和转移之外,Stellar 网络还内置了一个分布式交易所,任何类型的资产都可以在这里交易。总账中存储了账户持有的余额以及账户购买或出售资产的订单。
账户可以使用 Manage Offer 操作发起购买或出售资产的订单。要发起一个订单,账户必须持有要出售的资产。同样,该账户必须信任其意图购买资产的发行人。
当账户发起订单时,将根据该资产交易对的订单簿检查该订单。如果新订单超过现存订单的报价,则按现有订单的价格完成这个新订单。假设您提出使用 10 XLM 购买 2 BTC。如果已经存在以 10 XLM 出售 2 BTC 的订单,您的报价将采用该报价——您将获得 2 BTC 并失去 10 XLM。
如果一个新订单没有现有订单能满足它,那么这个订单将保存在订单簿中,直到它被另一个订单所满足,或是在跨资产支付中被满足,或是被创建者取消,或是由于创建者不再拥有待出售资产而失效。
从协议版本 10 开始,订单不可能失效,因为拥有订单的账户中 待出售的资产将会被冻结。每个订单分别为卖出资产和买入资产的卖出负债和买入负债,这些负债累加在订单创建者的账户(对于 Lumens 来说)或信任线(对其他资产来说)中。任何可能导致账户无法偿还债务的操作都将失败,如发送过多余额。这保证了订单中能被顺利成交。
Stellar 的订单就像传统市场中限价单一样。
对于价格相同的订单,旧的订单优先于新的订单。
订单薄是恒星网络上未完成的订单的记录。这个记录位于任何两个资产之间 —— 在这种情况下,假设资产是绵羊和小麦。订单薄记录了每个想要买卖绵羊和小麦的账户。
某些资产之间的订单很少或根本不存在。但这并不是一个问题:正如下面详细讨论的那样,资产转换路径可以促进两个交易稀少的资产之间的交换。
被动订单能让订单薄中存在零价差的订单。如果您想创建订单让人们可以以 1:1 的价格兑换锚点 A 发行的美元和锚点 B 发行的美元,您可以创建两个被动订单,这两个订单不会相互满足并成交。
被动订单是一种不会在相同报价的情况下成交的订单,只有在报价不相等时才会成交。 例如,使用 XLM 购买 BTC 的最佳价格为 100XLM/BTC,然后您创建了一个以 100XLM/BTC 的价格售出 BTC 的被动订单,您的被动订单将不会立刻成交。 您创建了一个以 99XLM/BTC 的价格售出 BTC 的被动订单,那么这个订单将会立刻以 100XLM/BTC 的价格成交。
假设您拥有绵羊,并且想从只接受小麦作为付款的商店买东西。您可以在 Stellar 中创建一个付款,自动将您的绵羊以绵羊/小麦订单薄中的最佳价格兑换成小麦。
您还可以使用更复杂的资产转换路径。想象一下,如果绵羊/小麦订单薄有很大的价格差异或是根本不存在。在这种情况下,如果您先将羊换成砖块,然后再将砖块兑换成小麦,您可能会获得更好的价格。所以这个可能存在的路径有两个跃点:绵羊 -> 砖块 -> 小麦。这条路径将依次使用绵羊/砖块订单薄和砖块/小麦订单薄。
这些资产转换路径最多可包含 6 个跃点,但整个付款过程具有原子性,要么都成功要么都失败。付款人永远不会持有他不需要的其它种类资产。
找到付款的最佳路径的过程称为路径寻找。寻路涉及查看当前的订单薄并搜寻如何兑换才能为您提供最佳价格。这个过程并不是由 Stellar Core 处理的,而是通过像 Horizon 之类的其它软件处理的。
由于 Stellar 的跨资产支付非常简单,用户可以将资金保留在自己喜欢的任何资产上。首选货币创造了一个非常灵活开放的系统。
试想一下,如果存在这样一个世界,在您旅行的时候,您不需要兑换货币(除非是使用 POS 机支付),就可以直接将您持有的资产支付,例如谷歌股票兑换成小额现金用于支付。跨资产支付将使这样的世界成为可能。