9 个版本
0.1.9 | 2024 年 2 月 14 日 |
---|---|
0.1.8 | 2024 年 2 月 13 日 |
0.1.6 | 2024 年 1 月 29 日 |
#1585 in 神奇豆子
每月 94 次下载
73KB
1.5K SLoC
ARRS
简介
ARRS 是 Arweave 客户端的 Rust API 实现。它可以用于在 Rust 中编写命令行、桌面或 Web 程序,以使用 Arweave 的大多数功能,包括创建、导入和导出钱包、检查余额、发送交易、上传文件等。
Arweave 是一个基于加密的永久存储网络。有关更多信息,请访问:https://arweave.org/
使用方法
此程序需要 OpenSSL。它将下载 OpenSSL 的最新官方版本,并自动编译它。因此,您的系统需要安装 C 编译器、Perl(以及 perl-core)和 make。
此程序有异步函数,可以用于 Web 应用程序的开发,但要本地测试此程序,您需要将 tokio
添加到您的依赖项中。
尽管大多数模块和结构体都是公开的,并且可以单独使用,但此程序旨在将所有内容包装到 ArWallet 结构体中。您应该能够在 ArWallet 结构体的方法中找到 Arweave 的大多数功能和特性。
您可以在以下位置找到文档:https://docs.rs/arrs,或者您可以通过运行以下命令在本地编译并打开文档:cargo doc --no-deps --open
示例
此程序有异步函数,因此要本地测试此程序,您需要将 tokio
和 arrs
添加到您的 Cargo.toml
[dependencies]
arrs = {path = "../arrs"}
tokio = { version = "1.35.1", features = ["full"] }
打印钱包地址和 AR 余额
use arrs::wallet::ArWallet;
use tokio;
#[tokio::main]
async fn main() {
let arwallet = ArWallet::new();
let balance = arwallet.balance();
let address = arwallet.address();
println!("Your Arweave Wallet Address is: ");
println!("{}", address);
println!("Your AR balance is {}: ", balance.await.unwrap());
}
导入 JSON Web Key (JWK)
use arrs::wallet::ArWallet;
use tokio;
use std::fs::read_to_string;
#[tokio::main]
async fn main() {
let jwk = read_to_string("./test.json").unwrap();
let arwallet = ArWallet::from_jwk(&jwk);
let balance = arwallet.balance();
let address = arwallet.address();
println!("Your Arweave Wallet Address is: ");
println!("{}", address);
println!("Your AR balance is {}: ", balance.await.unwrap());
}
创建一个AR转账交易,签署并提交。
use arrs::wallet::ArWallet;
use tokio;
use std::fs::read_to_string;
#[tokio::main]
async fn main() {
let jwk = read_to_string("./test.json").unwrap();
let ar = ArWallet::from_jwk(&jwk);
let mut tx = ar.create_ar_transaction(
"lKoYAKxF_ESjG500WfCfJvcxM83OFHGP0tnkIMnUJfM",
0.02
).await;
tx.add_tag("Test Name 2", "Test Value 2");
tx.sign();
println!("{:?}", tx.submit().await);
}
创建数据交易,添加标签,签署,提交并上传。
use arrs::wallet::ArWallet;
use tokio;
use std::{
fs::{File, read_to_string},
io::Read
};
#[tokio::main]
async fn main() {
let jwk = read_to_string("./test.json").unwrap();
let mut ar = ArWallet::from_jwk(&jwk);
let mut data_file = File::open("./the-freedom-of-constraint.mp4").unwrap();
let mut raw_data = Vec::new();
data_file.read_to_end(&mut raw_data).unwrap();
let mut tx = ar.create_data_transaction(&raw_data).await;
tx.add_tag("Content-Type", "video/mp4");
tx.add_tag("Test Name 2", "Test Value 2");
tx.sign();
println!("{:?}", tx.submit().await);
while ar.uploader().current_idx() < ar.uploader().chunk_size() {
println!("{}", ar.upload().await.unwrap());
}
}
下载文件。
许多Arweave功能,例如下载文件,不需要Arweave钱包(密钥)即可操作。因此,在这个例子中,我们导入ArPublic而不是ArWallet。这在许多情况下很有用,例如为搜索和下载文件创建无需注册的网站。
use arrs::public_client::ArPublic;
use tokio;
use std::fs::{write as write_file};
#[tokio::main]
async fn main() {
let mut ap = ArPublic::new();
ap.new_download("jVid2TTQ1g9j_sU6_4AlJm6hkAKiNznUYLCTEx-fobk")
.await.unwrap();
while ap.downloader().current_offset()
<= ap.downloader().end_point()
{
let finished_percent= ap.download().await.unwrap();
println!("Downloading ... {}%", finished_percent);
}
// Assume that you know the file's original content type. If you
// don't, you can try to check if there is a Content-Type tag in
// the transaction.
let downloaded_data = &ap.downloader().downloaded_data();
write_file("./test.mp4", downloaded_data).unwrap();
}
版权
版权©2024 IceGuye
本程序是自由软件:您可以在自由软件基金会发布的GNU Lesser General Public License的条款下重新分发和/或修改它,许可证版本为3。
本程序的分发是希望它将是有用的,但没有任何保证;甚至没有关于其商业性或针对特定目的的适用性的暗示保证。有关更多详细信息,请参阅GNU Lesser General Public License。
您应已收到GNU Lesser General Public License的副本。如果没有,请参阅http://www.gnu.org/licenses/
依赖项
~61MB
~636K SLoC