#price #switchboard #interact #fetch #queue #jobs #crossbar

switchboard-on-demand-client

Switchboard On Demand Client: 与 Switchboard On Demand 和 Crossbar API 交互

8 个版本

0.1.7 2024 年 8 月 15 日
0.1.6 2024 年 8 月 9 日
0.1.5 2024 年 7 月 15 日

#1900 in 神奇豆

Download history 19/week @ 2024-07-08 179/week @ 2024-07-15 26/week @ 2024-07-22 100/week @ 2024-08-05

每月 324 次下载

MIT 许可证

1MB
15K SLoC

Switchboard-On-Demand-Client

本软件包旨在与按需切换板、Crossbar 服务和队列网关进行交互。

Crossbar

一个中间服务,用于从 IPFS 获取预言机作业并返回饲料价格模拟。这有助于不断更新价格,而不是直接向预言机发送请求。

网关

与切换板预言机交互的前端。

示例

#[tokio::main]
async fn main() {
    let client = RpcClient::new("https://api.devnet.solana.com".to_string());
    let queue_key = Pubkey::from_str("FfD96yeXs4cxZshoPPSKhSPgVQxLAJUT3gefgh84m1Di").unwrap();
    let feed = Pubkey::from_str("7Zi7LkGGARDKhUEFPBUQDsVZ9L965LPEv2rBRdmSXCWh").unwrap();
    let kp = read_keypair_file("authority.json").unwrap();

    let queue = QueueAccountData::load(&client, &queue_key).await.unwrap();
    let gw = &queue.fetch_gateways(&client).await.unwrap()[0];
    let crossbar = CrossbarClient::default(None);
    let feed_data = PullFeed::load_data(&client, &feed).await.unwrap();
    let feed_hash = feed_data.feed_hash();

    let simulation = crossbar.simulate_feeds(&[&feed_hash]).await.unwrap();
    println!("simulation: {:#?}", simulation);

    let (ix, responses, num_success, luts) = PullFeed::fetch_update_ix(
        &client,
        FetchUpdateParams {
            feed,
            payer: kp.pubkey(),
            gateway: gw.clone(),
            crossbar: Some(crossbar),
            ..Default::default()
        },
    )
    .await
    .unwrap();

    let blockhash = client.get_latest_blockhash().await.unwrap();
    let msg = Message::try_compile(
        &kp.pubkey(),
        &[
            ComputeBudgetInstruction::set_compute_unit_limit(1_400_000),
            ComputeBudgetInstruction::set_compute_unit_price(35_000),
            ix.clone()
        ],
        &luts,
        blockhash)
    .unwrap();

    let versioned_tx = VersionedTransaction::try_new(V0(msg), &[&kp]).unwrap();
    let result: Response<RpcSimulateTransactionResult> = client
        .simulate_transaction(&versioned_tx)
        .await
        .unwrap();
    println!("ix: {:#?}", result);
}

依赖关系

~74MB
~1.5M SLoC