基于区块链的去中心化交易所的实现方案–SWAP协议

基于区块链的去中心化交易所的实现方案–SWAP协议

SWAP原文有中英多国版本,不过中文貌似是台湾人写的,看起来还不如英文来的习惯,我写下体会吧:

SWAP协议实现了虚拟币的链外协商,链上交易的功能,实现买卖双方的撮合,可用来实现去中心化的数字资产交易所

SWAP协议分为了如下几个子协议

1、对等协议

2、索引子协议

3、Oracle协议

4、合约协议

依次介绍上述协议:

1、对等协议

协议的角色分为Maker和Taker,其实就是买家和卖家。协议分为两个方案

(1)订单方法

getOrder(makerAmount, makerToken, takerToken, takerAddress) 由“买家”向“製卖家”調用,用于请求交易代币的订单。如:“我想用BAT买入10个GNO。

getOrder(10, GNO, BAT, takerAddress)

(2)报价方法

报价用于表示各方之间的价格咨询。如果稍买卖双方的条件都得到滿足,报价就可以编程订单。 getQuote(makerAmount, makerToken, takerTokens) 由“买家”向“卖家”调用,请求以特定代币报价。 举例:“买入10个GNO需要多少BAT?” 、

getQuote(10, GNO, [BAT]) provideQuote(makerAmount, makerToken, takerAmounts) 由“买方”向“卖方”调用,问价。

provideQuote(makerAmount, makerToken, takerAmounts)

卖方对买方的回应:

例:“买入10个GNO你要花5个BAT。” provideQuote(10, GNO, {BAT: 5})

2、索引子协议

链外服务,买家或卖家寻找潜在的交易对手,可能找到很多潜在的交易对手,一旦找到了,就可以调用对等协议实现价格协商,完成交易。其一对一的交易流程如下:

(1) “卖方”向索引子调用addIntent。

(2) “买方”向索引子调用findIntent。

(3) 索引子向“买方”调用foundIntent(maker)。

(4)“买方”向“卖方”调用getOrder。

(5) “卖方”回应订单。

(6) “买方”对合約调用fillOrder(order)。

多对一的交易流程如下:

1. 多个“卖方”向索引子调用addIntent。

2. “买家”向索引子调用findIntent。

3. 索引子向“买家”调用foundIntent(maker)。

一旦“买家”找到合适的“卖家”,就可使用订单API来请求每个“买家”的订单并对 它们進进行比较。如果“买家”已经觉定成交某个特定订单,他可以调用fillOrder。

包括如下几个方法:

addIntent(makerToken, takerTokens)

意图说明,例如:

“我想用GNO购买BAT。” addIntent(GNO, [BAT])

removeIntent(makerToken, takerTokens)

取消购买意图。 我不再想用GNO购买BAT了。” removeIntent(GNO, [BAT])

getIntent(makerAddress)

列出与一个地址相关的有效意图。 :“列出[makerAddress]想要交易的代幣。” getIntent(makerAddress)

findIntent(makerToken, takerToken)

寻找愿意交易特定代币的人。 例:“找出愿意用GNO购买BAT的人。”

findIntent(GNO, BAT)

foundIntent(makerAddress, intentList) 索引子找到了愿意交易的人。

“已找到正在出售10个GNO以換取BAT的人。”

foundIntent(, [{makerAmount: 10, makerToken: GNO, takerTokens: [BAT]})

4、 oracle协议

oracle协议的目标主要是获得参考定价,卖方咨询流程如下:

1. “买方”对“卖方”调用getOrder。

2. “卖方”向Oracle调用getPrice。

3. Oracle向“卖方”返回价格。

4. “卖方”在分析价格信息后提供订单。

5. “买方”調用fillOrder(order)。

买家咨询流程:

1“买方”對“卖方”调用getOrder。

2. “卖方”回应一个订单。

3. “买方”向Oracle调用getPrice。

4. Oracle向“买方”返回價格。

5. “买方”在分析價格資訊後對合約調用fillOrder(order)。

5) 合约协议

完成或取消订单的乙太坊智能合約。

fillOrder(makerAddress, makerAmount, makerToken, takerAddress, takerAmount, takerToken, expiration, nonce, signature)

“买方”调用代币的原子交換。该合约确保资讯发送者与接受者匹配,并确保时间沒有超过 “过期时间”指定的期限。

例:“我想以10个BAT换5个GNO以完成此订单。

” fillOrder([maker], 5, GNO, [taker], 10, BAT, [expiration], [signature])

cancelOrder(makerAddress, makerAmount, makerToken, takerAddress, takerAmount, takerToken, expiration, nonce, signature) 取消订单的信息

已发给“买方”但还沒有完成。由订单的“制造方”调用。在合約中将此订单 标识为已完成,

例:“我想取消10个BAT换5个GNO的订单。” cancelOrder([maker], 5, GNO, [taker], 10, BAT, [expiration], [signature])

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Proudly powered by WordPress | Theme: HoneyWaves by SpiceThemes