编辑: 学冬欧巴么么哒 2013-02-18

4 2) 对等协议 由於交易对手之间传递的消息量较少,交易可以快速、公正和私密地进行协商.在本文中, 制 造方 是提供订单的一方,而 接受方 是完成订单的一方.因为各方为对等方,所以任何一方 都可以随时成为 制造方 或 接受方 .以下规中的代币符合ERC20标准,实现了该标准的 任何代币均可使用此协定进行交易. 核心协议序列如下图所示. 制造方 和 接受方 在链外进行交易协商.下面的合约是一个乙 太坊智慧合约,当 接受方 准备好在块链上完成订单时调用此合约.

1 图片 English Your language Maker 制造方 Taker 接受方 Contract 合约 图1:请求、提供和完成订单 1. 接受方 对 制造方 调用getOrder. 2. 制造方 回应一个订单. 3. 接受方 对合约调用fillOrder(order). 2.1) 订单API 以下API是在对手和服务之间进行通信的与传输无关的远端程序呼叫(RPC).示例中使用的是代 币代码而不是位址,但实际调用需要符合ERC20标准的代币的位址.下面的调用签名仅用於讨 论,因为进一步的技术细节将在其他文档中另外发布. 订单API 在链外,它规定了对手之间在交易协商5期间的非同步调用.开发者可以选择将请求-提供周期作为同步请求-回应处理.由於订单是由 制造方 签署的,因此 接受方 可以稍后将其提交给要完成的智慧合约. getOrder(makerAmount, makerToken, takerToken, takerAddress) 由 接受方 向 制造方 调用,用於请求交易代币的订单. 举例: 我想用BAT买入10个GNO. getOrder(10, GNO, BAT, ) provideOrder(makerAddress, makerAmount, makerToken, takerAddress, takerAmount, takerToken, expiration, nonce, signature) 由 制造方 向 接受方 调用,用於提供一个签名合约以供执行. 举例: 我以5个BAT的价格卖给你10个GNO. provideOrder(, 10, GNO, , 5, BAT, , , ) 2.2) 报价API 报价用於表示各方之间的价格资讯,不可执行.如果稍后两个交易对手的条件都得到满足,报价就 可以变成订单. getQuote(makerAmount, makerToken, takerTokens) 由 接受方 向 制造方 调用,请求以特定代币报价. 举例: 买入10个GNO需要多少BAT? getQuote(10, GNO, [BAT]) provideQuote(makerAmount, makerToken, takerAmounts) 由 接受方 向 制造方 调用,提供用 接受方 代币表示的报价. 举例: 买入10个GNO你要花费5个BAT. provideQuote(10, GNO, {BAT: 5})

6 3) 索引子协议 索引子是一种链外服务,它根灰滓馔季酆虾推ヅ浣灰锥允:希望购买或出售代币的潜在 制 造方 和 接受方 .索引子的链外服务将这些意向聚合到交易中,并根郝蚧虺鍪厶囟ù 的意图h明匹配交易对手.许多潜在的 制造方 都可以表示交易意图,所以当 接受方 要求 索引子寻找合适的交易对手时,可能会有多个结果.一旦 接受方 找到一个愿意交易的 制造 方 ,他们就接著使用上述的对等协议进行协商.一旦 制造方 和 接受方 达成协议,订单 将在智慧合约中成交. 制造方 、 接受方 和索引子之间的互动如下图所示. 制造方 、 接受方 和索引子都不 在块链上操作,并通过他们喜欢的任何消息媒体进行通信. 图片 English Your language Indexer 索引子 Maker 制造方 Taker 接受方 Contract 合约 图2:寻找对手并进行交易 1. 制造方 向索引子调用addIntent. 2. 接受方 向索引子调用findIntent. 3. 索引子向 接受方 调用foundIntent(maker).

7 4. 接受方 向 制造方 调用getOrder. 5. 制造方 回应一个订单. 6. 接受方 对合约调用fillOrder(order). 多个 制造方 、一个 接受方 和一个索引子之间的交互如下图所示.每个 制造方 都独立 地宣示他们的意图. 接受方 要求找到有特定意图的 制造方 ,索引子返回一个乙太坊地址 清单和详细资讯. 图片 English Your language Indexer 索引子 Maker 制造方 Taker 接受方 图3: 制造方 调用addIntent, 接受方 向索引子调用findIntent 1. 多个 制造方 向索引子调用addIntent. 2. 接受方 向索引子调用findIntent. 3. 索引子向 接受方 调用foundIntent(maker).

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题