16 个稳定版本 (4 个主要版本)
5.2.3 | 2022年1月24日 |
---|---|
5.2.2 | 2021年12月24日 |
4.1.0 | 2021年12月19日 |
3.0.0 | 2021年12月19日 |
1.0.1 | 2021年9月20日 |
#11 in #kraken
每月下载量 54
130KB
2.5K SLoC
krakenrs
非官方的 Kraken 现货交易 API 的 Rust 绑定。
这个库提供了一个 Rust 客户端对象,实现了 Kraken REST API 中的许多调用,具有惯用的 Rust 接口,包括获取标价信息和制作市场及限价订单。此外,它还提供了对 Kraken WS API 的访问,包括订阅流和提交订单。
- 请求和响应具有强类型,转换使用
serde_json
完成 - 使用
reqwest
进行 https - 使用
tokio-tungstenite
进行 WebSocket - 使用
RustCrypto
crate 进行 Kraken 认证方案 - 使用
rust_decimal
来表示 Kraken 中的 Decimal 值 - 使用
log
进行日志记录 - 健壮的错误处理
支持公共和私有 API,但不是所有的调用和选项都公开,只有所需的那些。如果您需要的内容缺失,欢迎提交补丁!只需在 github 上打开一个问题或 pull request。
功能
要获取 WebSocket API,必须启用 "ws"
功能。默认情况下它是开启的。否则,您只能获取 REST API,它可以做所有相同的事情(更多),但具有更严格的速率限制。
多线程
与一些其他绑定不同,这些不是异步 API(尽管 WebSocket 流是隐式异步的)。
我们选择为 Kraken REST API 版本创建阻塞 API 有几个原因
- 简单
- 易于调试
- 当尝试并行多次调用私有 REST API 时,我们经常看到无效的 nonce 错误,这是因为 nonce 是基于时间戳的,但多个请求同时创建和发送时,这本质上是竞态条件,有时具有更高 nonce 的请求会被 Kraken 首先处理,从而使其他请求无效。
此外,REST API 有相当严格的速率限制,因此并行发送大量请求实际上是不可能的。
相反,似乎依赖Websockets API更好,无论你是否需要使用异步运行时,它都易于使用,并且不需要对REST API进行大量调用。
示例
REST API
use krakenrs::{KrakenRestConfig, KrakenRestAPI};
use serde_json::to_string_pretty;
fn main() {
let kc_config = KrakenRestConfig::default();
let api = KrakenRestAPI::try_from(kc_config).expect("could not create kraken api");
println!(
to_string_pretty(
api.asset_pairs(vec!["XBT/USD", "SOL/BTC"]).expect("api call failed")
).unwrap()
);
println!(
to_string_pretty(
api.ticker(vec!["XBT/USD"]).expect("api call failed")
).unwrap()
);
}
Websockets API
use krakenrs::{KrakenWsConfig, KrakenWsAPI};
use std::{
collections::BTreeMap,
time::Duration,
thread,
};
fn main() {
let pairs = vec!["XBT/USD".to_string(), "SOL/XBT".to_string()];
let ws_config = KrakenWsConfig {
subscribe_book: pairs.clone(),
book_depth: 10,
};
let api = KrakenWsAPI::new(ws_config).expect("could not connect to websockets api");
loop {
thread::sleep(Duration::from_millis(500));
let books = pairs
.iter()
.map(|pair| (pair.clone(), api.get_book(pair)))
.collect::<BTreeMap<_, _>>();
for (pair, book) in books {
println!("{}", pair);
println!("{:?}", book);
}
if api.stream_closed() { return; }
}
}
KrakenWsAPI
对象在内部启动一个工作线程,该线程驱动WebSocket连接。如果您不希望这样,可以导入KrakenWsClient
对象,并根据需要安排工作线程,同时使用ApiResult
对象的句柄在其他线程中观察最新数据。
免责声明
自行承担风险。如果您使用此组件构建交易软件并因错误而遭受损失,我不承担责任。
Rest API 示例
krak
二进制目标是用于练习REST API功能的简单示例。它是一个命令行目标,可以解析凭据文件,连接到Kraken,并执行单个API调用,然后打印响应。
用法
- 构建一切:
cargo build
。 - 运行
./target/debug/krak --help
获取用法信息。例如,您可以使用./krak system-status
查看交易系统的当前状态,或者使用./krak asset-pairs
、./krak ticker AAVEUSD
查看资产对和当前价格。 - 如果您想使用私有API,请转到您的Kraken账户并创建一个API密钥。然后创建一个包含您的凭据的json文件,其架构如下
{ "key": "ASDF", "secret: "jklw==" }
- 私有API的调用示例:
./krak path/to/creds get-open-orders
./krak path/to/creds --validate market-buy 0.02 AAVEUSD
Websockets Feed 示例
krak-feed
二进制目标可以订阅并打印WebSocket数据流的输出。
用法
- 构建一切:
cargo build
。 - 运行
./target/debug/krak-feed --help
获取用法信息。例如,./krak-feed book XBT/USD
将持续显示比特币/美元的订单簿。
其他感兴趣的项目
参考
依赖关系
~11-30MB
~452K SLoC