3 个版本
0.1.3 | 2019年2月11日 |
---|---|
0.1.1 | 2019年2月3日 |
0.1.0 | 2019年2月3日 |
#30 在 #rate
59KB
1K SLoC
汇率
为给定的一组交易所、货币、汇率和汇率请求提供最佳的汇率路径搜索。
包 | 文档 | Travis CI | CodeCov |
---|---|---|---|
概述
为了向客户提供一个允许他们使用加密货币购买只接受法定货币的商家的商品的产品,我们需要解决两个问题
- 确定一系列交易和跨交易所的转账,以合适的汇率将加密货币兑换为法定货币。
- 为客户提供最佳的汇率。
这个想法基于我在一次面试中接受的一个挑战。
构建和运行代码
作为一个标准的Rust项目,构建和运行它就像你预期的那样。
构建
cargo build
或 cargo build --release
运行
cargo run < data/exchange-rate-path-input.txt
或 cargo 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 Graph
(safe-graph)的crate中。我的理由在下面解释。
2.) Floyd-Warshall算法
我的crate Floyd Warshall algorithm
(floyd-warshall-alg)提供了一个支持定制的Floyd-Warshall算法的通用解决方案。可用的定制功能在下面描述。
3.) IO - 读取请求、处理它并写入响应
输入:从stdin读取并解析输入到Request
实例,该实例包含PriceUpdate
和ExchangeRateRequest
结构体的实例。
处理:构建一个图,运行自定义版本的Floyd-Warshall算法,并形成响应。
输出:将包含BestRatePath
结构体实例的响应写入stdout。
许可证
根据通用公共许可证(GPL),版本3(LICENSE http://www.gnu.org/licenses/gpl-3.0.en.html)授权。
依赖项
~2.5MB
~35K SLoC