4 个版本

0.2.0-rc32022年9月21日
0.1.0 2022年8月15日

#163 in #registry

每月下载量 35

Apache-2.0

24KB
446

chain-registry

用于与Cosmos链注册仓库交互的Rust API

警告

链注册未版本化且语法未强制执行。此库编写为忽略未识别或缺失的JSON字段,但无法保证对所有注册项都有效。

功能

  • 用于序列化和反序列化chain.json、assets.json和IBC路径JSON文件的模型
  • 简单的get/list方法用于检索链、资产和路径数据
  • 一种缓存类型(目前仅支持IBC路径数据),提供了额外的过滤选项

待办事项

  • 测试查询所有对象
  • 按注册提交发布版本吗?

lib.rs:

Cosmos链注册提供的API

示例

使用一些执行链交易所需的信息填充配置结构体(无法编译)

use chain_registry::*;

#[derive(Clone, Default)]
struct BotConfig {
    account_prefix: String,
    chain_id: String,
    rpc_endpoint: String,
    default_asset: String,
    ibc_paths: HashMap<String, IBCPath>
}

impl BotConfig {
    pub fn set_default_asset(&mut self, asset: String) {
        self.default_asset = asset;
    }

    pub fn add_ibc_path(&mut self, path: IBCPath) {
        let key = format!("{}-{}", path.channel_1.chain_name, path.channel_2.chain_name);
        self.ibc_paths.insert(&key, path);
    }
}

impl Into<BotConfig> for ChainInfo {
    fn into(self) -> BotConfig {
        BotConfig {
            account_prefix: self.bech32_prefix,
            chain_id: self.chain_id,
            // realistically you should test for health endpoints before choosing
            rpc_endpoint: self.apis.rpc[0].address,
            ..Default::default()
        }
    }
}

#[tokio::main]
fn main() {
    let chain = get_chain("osmosis").await.unwrap();
    let assets = get_assets("osmosis").await.unwrap();
    let osmosis_hub_path = get_path("osmosis", "cosmoshub").await.unwrap();
    let mut config: BotConfig = chain.into();

    config.set_default_asset(assets[0]);
    config.add_ibc_path(osmosis_hub_path);
    // ...
}

为使用REST API或索引器而预先加载IBC路径缓存(无法编译)

use chain_registry::*;

#[tokio::main]
fn main {
    // This can take a long time as it has to send an individual request for each path
    // in the registry.
    let cache = RegistryCache::try_new().await.unwrap();

    // Instead of simply querying for an IBCPath, you can filter by Tag.
    let use_osmosis = cache.get_paths_filtered(Tag::Dex("osmosis".to_string()));
}

依赖项

~8–25MB
~364K SLoC