#exchange #rate #currency #path

bin+lib exchange-rate

为给定的一组交易所、货币、汇率和汇率请求提供最佳的汇率搜索

3 个版本

0.1.3 2019年2月11日
0.1.1 2019年2月3日
0.1.0 2019年2月3日

#30#rate

GPL-3.0 许可证

59KB
1K SLoC

汇率

为给定的一组交易所、货币、汇率和汇率请求提供最佳的汇率路径搜索。

文档 Travis CI CodeCov
Documentation Build Status codecov

概述

为了向客户提供一个允许他们使用加密货币购买只接受法定货币的商家的商品的产品,我们需要解决两个问题

  1. 确定一系列交易和跨交易所的转账,以合适的汇率将加密货币兑换为法定货币。
  2. 为客户提供最佳的汇率。

这个想法基于我在一次面试中接受的一个挑战。

构建和运行代码

作为一个标准的Rust项目,构建和运行它就像你预期的那样。

构建

cargo buildcargo build --release

运行

cargo run < data/exchange-rate-path-input.txtcargo run --release < data/exchange-rate-path-input.txt

输入格式

输入由两种类型的行组成:“价格更新”和“汇率请求”。期望的输入格式示例可以在 data/exchange-rate-input.txt 中找到。

价格更新

  • 格式: <timestamp> <exchange> <source_currency> <destination_currency> <forward_factor> <backward_factor>
  • 示例:2019-08-01T08:42:22+00:00 BITFINEX BTC USD 1000.0 0.0009

汇率请求

  • 格式:EXCHANGE_RATE_REQUEST <source_exchange> <source_currency> <destination_exchange> <destination_currency>
  • 示例:EXCHANGE_RATE_REQUEST BITFINEX ETH BINANCE BTC

设计

实现包含三个主要部分和一个连接它们的胶水。

1.) 图

我决定不直接使用Petgraph创建(petgraph),而是提取和重构GraphMap到我自己称为Safe Graphsafe-graph)的crate中。我的理由在下面解释。

2.) Floyd-Warshall算法

我的crate Floyd Warshall algorithmfloyd-warshall-alg)提供了一个支持定制的Floyd-Warshall算法的通用解决方案。可用的定制功能在下面描述。

3.) IO - 读取请求、处理它并写入响应

输入:从stdin读取并解析输入到Request实例,该实例包含PriceUpdateExchangeRateRequest结构体的实例。

处理:构建一个图,运行自定义版本的Floyd-Warshall算法,并形成响应。

输出:将包含BestRatePath结构体实例的响应写入stdout。

许可证

根据通用公共许可证(GPL),版本3(LICENSE http://www.gnu.org/licenses/gpl-3.0.en.html)授权。

依赖项

~2.5MB
~35K SLoC