7 个版本
0.1.6 | 2021 年 3 月 5 日 |
---|---|
0.1.5 | 2021 年 3 月 1 日 |
0.1.4 | 2021 年 2 月 28 日 |
#16 在 #kraken
32 每月下载量
在 gambero 中使用
62KB
101 行
🦈 最小化、优雅、快速、异步 Kraken 交易所 WebSockets API 客户端 | 使用 Rust 编写
描述
squalo
库旨在迅速将您的软件与 Kraken 交易所 WebSockets API 接口。
先决条件
Kraken 交易所 允许使用 WebSockets API
与 public
和 private
数据交互。
对于 private
,您需要向 squalo
库提供 API-Key
和 API-Secret
,以便从 WebSockets
端点生成签名订阅的认证令牌。
如果您不熟悉,请参阅 WebSockets API - 常见问题解答 获取一般概述,或查阅 WebSockets API 文档。
实现
将以下内容添加到您的 Cargo.toml
[dependencies]
squalo = {version = 0.1.6}
然后将其添加到您的 code
use squalo;
方法
squalo::print_crate_info();
描述:打印 crate
信息(名称、描述、版本、作者和存储库)。
squalo::set_kraken_api_credentials(api_key: String, api_secret: String);
描述:设置 Kraken API
凭据以访问 private
数据。
必需:
- api_key:
String
- api_secret:
String
squalo::get_websockets_token().await;
描述:使用 Kraken REST API
端点从 WebSockets API
获取一个 signed
请求的 WebSockets API
令牌。
输出:以字符串格式返回一个 WebSockets API 令牌
。
squalo::create_communication_channel();
描述:返回一个对象对,一个 UnboundedSender
(tx) 和一个 UnboundedReceiver
(rx),这两个都用于与 WebSocket 客户端
的双向交互。
squalo::attach_websockets_stream(callback: fn(&str), stream_type: String, receiver: UnboundedReceiver<Message>);
描述:创建一个 thread
,该线程初始化一个 WebSocket 客户端
(相应地与 stream_type
)。receiver
通过 incoming data stream
和 callback
来架起桥梁。
必需:
- 回调:
fn
(例如:fn callback(data: &str) { println("data: {}", data); }) - stream_type:
String
(例如 "public" 或 "private") - receiver:
UnboundedReceiver<Message>
(从squalo::create_communication_channel()
方法获取)
输出:从 WebSockets 流
转发的任何消息都以前缀为 JSON
格式(根据结果形状相应解析)。
squalo::send_message(transmitter: UnboundedSender<Message>, payload: String);
描述:将 message
转发到处理 WebSocket 客户端
的 thread
,该线程将 payload
写入流。
示例
下面的示例展示了从零开始实现 squalo
是多么简单。
use squalo;
fn callback(data: &str) {
println!("data: {}", data);
}
#[tokio::main]
async fn main() {
// printing crate information
squalo::print_crate_info();
// enveloping payload pointing at public endpoint
let payload1 =
r#"{"event":"subscribe", "subscription":{"name":"trade"}, "pair":["XRP/EUR", "ETH/USD"]}"#
.to_string();
// creating communication channel for the websockets client
let (tx1, rx1) = squalo::create_communication_channel();
// attaching websockets to the public data stream
squalo::attach_websockets_stream(callback, "public".to_string(), rx1);
// transmitting payload to the websockets client
squalo::send_message(tx1.to_owned(), payload1);
// issuing credentials that enables private data interaction
squalo::set_kraken_api_credentials(
"YOUR_KRAKEN_API_KEY_HERE".to_string(),
"YOUR_KRAKEN_API_SECRET".to_string(),
);
// requesting a websockets token
let token = squalo::get_websockets_token().await;
// enveloping message pointing at a private endpoint
let payload2 = format!(
r#"{{"event":"subscribe", "subscription":{{"name":"ownTrades", "token":"{}"}}}}"#,
token
);
// creating communication channel for the websockets client
let (tx2, rx2) = squalo::create_communication_channel();
// attaching websockets to private data stream
squalo::attach_websockets_stream(callback, "private".to_string(), rx2);
// transmitting payload to the websockets client
squalo::send_message(tx2.to_owned(), payload2);
// enveloping the "ping" payload
let ping = r#"{"event":"ping"}"#.to_string();
// holding the main thread execution
loop {
// sleeping thread for 1 second
std::thread::sleep(std::time::Duration::from_millis(1000));
// transmitting ping payload to the first client (public)
squalo::send_message(tx1.to_owned(), ping.to_owned());
// transmitting ping payload to the second client (private)
squalo::send_message(tx2.to_owned(), ping.to_owned());
}
}
免责声明
此软件没有任何形式的保证。
我不会对与此软件的使用或误用相关的任何损害负责。
您是唯一的责任人。
依赖项
~19–34MB
~660K SLoC