2 个版本
新版本 0.1.1 | 2024年8月22日 |
---|---|
0.1.0 | 2024年8月6日 |
2011 in 网页编程
每月113次下载
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