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