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

8 一旦 接受方 找到合适的 制造方 ,他们可使用订单API来请求每个 制造方 的订单并对 它们进行比较.如果 接受方 已经决定成交某个特定订单,他们将对智慧合同调用fillOrder. 图片 English Your language Maker 制造方 Taker 接受方 Contract 合约 图4: 接受方 对 制造方 调用getOrder, 接受方 对合约调用fillOrder 4. 接受方 对多个 制造方 调用getOrder. 5. 多个 制造方 回应订单. 6. 接受方 选择一个订单并对合约调用fillOrder(order). 3.1) 索引子API 索引子API管理在对手之间传递的交易意图.以下是对手和一个索引子之间的调用. addIntent(makerToken, takerTokens)

9 添加一个购买或出售一定数量代币的意图. 举例: 我想用GNO购买BAT. addIntent(GNO, [BAT]) removeIntent(makerToken, takerTokens) 删除代币交易的意图. 举例: 我不再想用GNO购买BAT了. removeIntent(GNO, [BAT]) getIntent(makerAddress) 列出与一个位址相关的有效意图. 举例: 列出[makerAddress]想要交易的代币. getIntent() findIntent(makerToken, takerToken) 寻找愿意交易特定代币的人. 举例: 找出愿意用GNO购买BAT的人. findIntent(GNO, BAT) foundIntent(makerAddress, intentList) 索引子找到了愿意交易的人. 举例: 已找到正在出售10个GNO以换取BAT的人. foundIntent(, [{makerAmount: 10, makerToken: GNO, takerTokens: [BAT]})

10 4) Oracle协议 Oracle是一种向 制造方 和 接受方 提供定价资讯的链外服务.在订单交付给 接受方 前 对订单进行定价时, 制造方 可向Oraclet解公平价格的建议.同样地, 接受方 收到订单 后可要求Oracle核查订单的价格,以验证其是否公平.Oracle提供这种定价资讯,以h明 制造 方 和 接受方 制定更明智的定价决策,以促进交易协调的顺利进行. 图片 English Your language Oracle Oracle Maker 制造方 Taker 接受方 Contract 合约 图5: 制造方 提供订单前查询Oracle 1. 接受方 对 制造方 调用getOrder. 2. 制造方 向Oracle调用getPrice. 3. Oracle向 制造方 返回价格. 4. 制造方 在分析价格资讯后提供订单. 5. 接受方 对合约调用fillOrder(order).

11 接受方 收到订单时与Oracle之间的交互与此非常相近. 图片 English Your language Oracle Oracle Maker 制造方 Taker 接受方 Contract 合约 图6: 接受方 完成订单前查询Oracle 1. 接受方 对 制造方 调用getOrder. 2. 制造方 回应一个订单. 3. 接受方 向Oracle调用getPrice. 4. Oracle向 接受方 返回价格. 5. 接受方 在分析价格资讯后对合约调用fillOrder(order). 4.1) Oracle API 制造方 和 接受方 使用Oracle API确定订单价格.价格仅为建议,是不可执行的. getPrice(makerToken, takerToken) 接受方 或 制造方 向Oracle调用以获取价格.举例: GNO与BAT的当前兑换价格是多少?

12 getPrice(GNO, BAT) providePrice(makerToken, takerToken, price) 由Oracle调用,向 制造方 或 接受方 提供价格. 举例: GNO与BAT的当前兑换价格是0.5. providePrice(GNO, BAT, 0.5) 5) 智能合约 完成或取消订单的乙太坊智慧合约. fillOrder(makerAddress, makerAmount, makerToken, takerAddress, takerAmount, takerToken, expiration, nonce, signature) 接受方 调用代币的原子交换.该合约确保资讯发送者与接受者匹配,并确保时间没有超过 过期时间 指定的期限.要完成订单,交易对手必须已经调用了特定代币的许可权,至少允许 合约提取指定数量.对於代币交换,合约向各代币调用transferFrom.在该函数成功完成时,会向 块链广播一个 完成 事件. 举例: 我想以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])

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