#solana #helius #webhook #details #token #metadata #sdk

helius-sdk

Rust 对 Helius SDK 的实现

3 个不稳定版本

0.2.0 2023 年 12 月 11 日
0.1.1 2023 年 5 月 10 日
0.1.0 2023 年 5 月 2 日

#76 in #details

MIT 许可证

55KB
1.5K SLoC

使用 Rust 编写的非官方 Helius SDK

有关 Helius 功能的更多详细信息,请参阅 官方 Typescript SDK

本 README 主要介绍此实现中可用的功能

免责声明

我尚未准备好承诺不进行破坏性更改,因此目前将发布 0.x.x 版本

入门

安装和使用

cargo add helius-sdk
use helius_sdk::*;

fn main() {
    let client = Helius::new(env::var("API_KEY").unwrap(), Cluster::MainnetBeta);
}

Other 枚举变体

此 crate 中的大多数枚举都有一个 Other(String) 选项,如果 helius API 中已添加但尚未包含在此 crate 中的新变体。当使用这些变体时,请注意,如果您有关于接收此类响应的逻辑,则升级到新版本可能会破坏您的代码。因为它们将在枚举中具有适当的唯一值进行反序列化。

网络钩子

创建网络钩子

let hook = client.create_webhook(&CreateWebhookRequest {
        data: WebhookData {
            webhook_url: "insert url here".to_string(),
            transaction_types: vec![TransactionType::NftBid, TransactionType::NftBidCancelled],
            account_addresses: vec!["M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K".to_string()],
            webhook_type: Some(WebhookType::Discord),
            auth_header: None,
            txn_status: None,
            encoding: None
        },
    });

获取所有网络钩子

检索当前用户帐户的所有网络钩子

let hooks = client.get_all_webhooks();

通过 ID 获取网络钩子

let hook = client.get_webhook_by_id("insert webhook id here"));

编辑网络钩子

let mut hook = client.get_webhook_by_id(hook.webhook_id.as_str()).unwrap();
hook.webhook_data.webhook_type = WebhookType::Discord.into();
let ehook = client.edit_webhook(EditWebhookRequest{
    webhook_id: hook.webhook_id,
    data: hook.webhook_data,
});

删除网络钩子

client.delete_webhook("insert webhook id here");

创建集合网络钩子

一个便捷方法,实际上不是 Helius REST 接口的一部分。

let res = client.create_collection_webhook(&CreateCollectionWebhookRequest {
    data: WebhookData {
        webhook_url: "insert url here".to_string(),
        transaction_types: vec![TransactionType::NftSale],
        account_addresses: vec![],
        webhook_type: Some(WebhookType::Discord),
        auth_header: None,
        txn_status: None,
        encoding: None
    },
    collection_query: CollectionIdentifier::FirstVerifiedCreators(vec!["GVkb5GuwGKydA4xXLT9PNpx63h7bhFNrDLQSxi6j5NuF".to_string()]),
});

增强的交易 API-

解析交易

let res = client.parse_transaction(
    &ParseTransactionsRequest{
        transactions: vec!["insert txn id here".to_string()]
    }
);

NFT API

获取集合的所有代币

let res = client.get_mintlist(MintlistRequest {
    query: CollectionIdentifier::FirstVerifiedCreators(vec!["GVkb5GuwGKydA4xXLT9PNpx63h7bhFNrDLQSxi6j5NuF".into()]),
    options: HeliusOptions {limit: 1000.into(), pagination_token: None}.into()
});

代币元数据 API

获取代币元数据

let res = client.get_token_metadata(&TokenMetadataRequest{
        mint_accounts: vec!["insert token mint address"],
        include_off_chain: true,
        disable_cache: false
    });

RPC 抽象

常见 RPC 操作的辅助方法

获取 Solana TPS

client.rpc.get_tps();

请求空投

let key = Pubkey::new_unique();
client.rpc.airdrop(&key, 10 * LAMPORTS_PER_SOL).expect();

访问 Solana 连接

用户还可以访问底层的 solana_sdk rpc 客户端以执行其他标准 rpc 调用。

let conn = client.rpc.connection();
let inflation = conn.get_inflation_rate();

待办事项

  • 测试/预测试端点?

依赖项

~56–76MB
~1.5M SLoC