2 个版本
| 0.0.2 | 2024 年 5 月 17 日 |
|---|---|
| 0.0.1 | 2024 年 5 月 16 日 |
#1 in #chainlink
每月下载量 45
25KB
304 代码行
rustlink - 去中心化加密货币价格馈送
一个轻量级的 rust 库,用于定期从 ChainLink 去中心化价格馈送中检索加密货币价格。使用 rustlink,您可以轻松检索 ChainLink 支持的任何加密货币的最新价格。
功能
- 检索 ChainLink 支持的任何加密货币的最新价格。
- 与 WASM 兼容,因此您可以在您的 Web 应用程序中使用它。
- 轻量级且易于使用。
- 可自定义更新间隔以进行速率限制。
- 添加任何自定义合约列表。
- 可自定义 RPC URL。
为什么选择 rustlink?
我在开发这个库时一直坚持的核心原则是健壮性和简单性。作为 Web3 开发者,支付运营商我们经常需要检索加密货币价格。然而,大多数可用的库都使用中心化交易所 API,这些 API 已经证明是不可靠的,并且受到本地交易所波动的影响。使用 ChainLink 去中心化数据馈送,我们可以检索由许多独立预言机提供的可靠数据。
该库是为了与 WASM 兼容而设计的,因此您也可以在您的 Web 应用程序中使用它。这允许您在您的 Web 和桌面应用程序中实时接收去中心化价格更新,而不必依赖于中心化价格馈送或 API。
要查看 ChainLink 支持的加密货币,您可以访问 ChainLink 数据馈送列表。
什么是 WASM?
WebAssembly (WASM) 是一种基于堆栈的虚拟机的二进制指令格式。WASM 是作为高级语言(如 C/C++/Rust)的编译便携式目标的而设计的,使您能够在网络上部署客户端和服务器应用程序。WASM 被所有主流浏览器支持,包括 Chrome、Firefox、Safari 和 Edge。
这意味着您可以在您的 Web 应用程序中运行 rust 代码,并使用 rustlink 在您的 Web 应用程序中实时检索加密货币价格。
安装
要在您的项目中使用 rustlink,请将以下内容添加到您的 Cargo.toml 文件中
[dependencies]
rustlink = "0.0.2"
为 WASM 构建
-
先决条件
要为 WASM 构建库,您需要安装
wasm-pack工具。您可以通过运行以下命令进行安装cargo install wasm-pack您还需要安装 wasm32-unknown-unknown 目标。您可以通过运行以下命令进行安装
rustup target add wasm32-unknown-unknown -
构建 WASM
您可以为 浏览器 或 Node.js 构建库。
针对浏览器
wasm-pack build --target web --out-name rustlink --out-dir <directory>针对Node.js
wasm-pack build --target nodejs --out-name rustlink --out-dir <directory>
使用方法
以下是一个简单的示例,展示如何使用 rustlink 获取加密货币的最新价格
use async_std::channel::unbounded;
use rustlink::config::{Reflector, Rustlink};
#[tokio::main]
async fn main(){
let mut contracts: Vec<(String, String)> = Vec::new();
contracts.push((
"ETH".to_string(),"0x9ef1B8c0E4F7dc8bF5719Ea496883DC6401d5b2e".to_string(),
));
let (sender, receiver) = unbounded();
let rustlink = Rustlink::try_new(
"https://bsc-dataseed1.binance.org/",
1,
Reflector::Sender(sender),
contracts,
)
.unwrap();
rustlink.start();
let round_data = receiver.recv().await.unwrap();
println!("Received data: {:#?}", round_data);
}
您也可以通过将接收器放入循环中来遍历它,以实时获取最新价格更新
loop {
let round_data = receiver.recv().await.unwrap();
println!("Received data: {:#?}", round_data);
}
WASM 使用
import init, { RustlinkJS } from '../web/rustlink.js';
async function runWasm() {
await init(); // Initialize the wasm module
// Example data
const rpcUrl = "https://bsc-dataseed1.binance.org/";
const fetchIntervalSeconds = BigInt(1);
const contracts = [
["ETH", "0x9ef1B8c0E4F7dc8bF5719Ea496883DC6401d5b2e"],
["1INCH", "0x9a177Bb9f5b6083E962f9e62bD21d4b5660Aeb03"],
];
async function callback(roundData) {
console.log("Callback received:", roundData);
}
let rustlink = new RustlinkJS(rpcUrl, fetchIntervalSeconds, contracts, callback);
rustlink.start();
console.log("Stopping after 5 seconds");
setTimeout(() => {
rustlink.stop();
}, 5000);
}
runWasm();
依赖项
~35–52MB
~1M SLoC