2 个版本

新版本 0.1.1 2024年8月22日
0.1.0 2024年8月6日

2011 in 网页编程

Download history 95/week @ 2024-08-01 18/week @ 2024-08-08

每月113次下载

MIT 许可证

57KB
877 代码行

Pragma Consumer SDK

Pragma Consumer SDK用于获取选项及其关联的Merkle证明,以便您可以在我们的Pragma Oracle合约中使用它们,以与链上发布的Merkle Feed进行交互。

我们有一些示例来帮助您入门。

安装

将以下内容添加到您的Cargo.toml

[dependencies]
pragma-consumer = "0.1.0"

快速入门

use pragma_consumer::builder::PragmaConsumerBuilder;
use pragma_consumer::config::{ApiConfig, PragmaBaseUrl};
use pragma_consumer::macros::instrument;
use pragma_consumer::types::{BlockId, Instrument};

#[tokio::main]
async fn main() -> Result<(), ()> {
    let api_config = ApiConfig {
        base_url: PragmaBaseUrl::Prod,
        api_key: "your_api_key".into(),
    };

    let consumer = PragmaConsumerBuilder::new()
        .on_mainnet()
        .with_http(api_config)
        .await
        .unwrap();

    let instrument = instrument!("BTC-16AUG24-52000-P");

    let result = consumer
        .get_merkle_feed_calldata(&instrument, None) // None = Pending block by default
        .await
        .unwrap();

    // Use the calldata with the pragma-oracle contract...
    println!("Hex calldata: {}", result.as_hex_calldata());

    // result.calldata() returns the calldata wrapped with FieldElement
    // from starknet-rs 0.9.0
}

使用方法

配置API连接

创建一个ApiConfig对象实例

let api_config = ApiConfig {
    // This will use our dev API
    base_url: PragmaBaseUrl::Dev, // or PragmaBaseUrl::Prod
    api_key: "your_api_key".into(),
};

// If you need a custom url, you can do:
let api_config = ApiConfig {
    base_url: PragmaBaseUrl::Custom("https://127.0.0.1:3000".into()),
    api_key: "your_api_key".into(),
};

初始化Consumer

使用构建器模式创建一个PragmaConsumer实例

let consumer = PragmaConsumerBuilder::new()
    .on_sepolia() // or .on_mainnet()
    .with_http(api_config)
    .await?;

注意:默认情况下,如果未指定,网络将是Sepolia

let consumer = PragmaConsumerBuilder::new()
    .with_http(api_config)
    .await?;

您还可以向构建器添加一个check_api_health调用,以确保与PragmAPI的连接正常

let consumer = PragmaConsumerBuilder::new()
    .check_api_health()
    .with_http(api_config)
    .await?;

获取Merkle Feed Calldata

使用get_merkle_feed_calldata方法获取与Pragma Oracle交互所需的数据

let calldata = consumer
    .get_merkle_feed_calldata(&instrument, block_number)
    .await?;

创建工具

您可以通过两种方式创建工具

1. 使用instrument!

let instrument = instrument!("BTC-16AUG24-52000-P");

2. 手动构建Instrument结构

use pragma_consumer::{Instrument, OptionCurrency, OptionType};
use bigdecimal::BigDecimal;
use chrono::NaiveDate;

let instrument = Instrument {
    base_currency: OptionCurrency::BTC,
    expiration_date: NaiveDate::from_ymd_opt(2024, 8, 16).unwrap(),
    strike_price: BigDecimal::from(52000).unwrap(),
    option_type: OptionType::Put
};

您可以使用name()方法检索工具的名称

println!("{}", instrument.name());

// BTC-16AUG24-52000-P

指定区块ID

您可以通过不同的方式指定区块

use pragma_consumer::types::{BlockId, BlockTag};

// Using a specific block number
let block = BlockId::Number(85925);

// Using the latest block
let block = BlockId::Tag(BlockTag::Latest);

// Using the pending block
let block = BlockId::Tag(BlockTag::Pending);

错误处理

SDK使用thiserror crate进行错误处理。两种主要的错误类型是

  • builder::BuilderError用于在构建PragmaConsumer期间出现的错误,
  • conssumer::ConsumerError用于获取选项和Merkle证明期间出现的错误。

依赖项

~21–38MB
~570K SLoC