#dapp #ergo #blockchain #node-interface

ergo-node-interface

一个库,使 dApp 开发者与 Ergo 节点交互和使用变得简单

13 个版本

0.4.1 2023 年 12 月 28 日
0.4.0 2023 年 3 月 14 日
0.3.0 2023 年 3 月 6 日
0.2.7 2022 年 3 月 16 日
0.2.2 2020 年 11 月 20 日

#260 in 魔法豆

Download history 58/week @ 2024-03-30 15/week @ 2024-04-06

每月下载量 72

MIT 许可证

44KB
735

Ergo 节点接口库

一个 Rust 库,使与 Ergo 节点交互和使用变得简单。

此 crate 使用伟大的 ergo-lib(以前称为 sigma-rust)来解析 Ergo 节点和其他 Ergo 相关数据类型中的 ErgoBox

目前支持的功能包括

  1. 编写离链 dApp 的核心 Ergo 节点端点。
  2. 在支持端点之上提供辅助函数,以简化 dApp 开发者的体验。
  3. 用于 UTXO-set 扫描的高级接口。

目前版本中不支持所有 Ergo 节点端点,因为当前目标是使离链 dApp 开发者的体验尽可能稳固。长期目标是全面覆盖所有端点。

模块

以下是目前实现并作为 Ergo 节点接口库一部分的模块。

节点接口

此模块包含核心 NodeInterface 结构体,用于与 Ergo 节点交互。所有端点都作为 NodeInterface 结构体的方法实现。

let node = NodeInterface::new(api_key, ip, port);
println!("Current height: {}", node.current_block_height());

此外,还实现了一些辅助方法,例如

/// A CLI interactive interface for prompting a user to select an address
pub fn select_wallet_address(&self) -> Result<P2PKAddressString>


/// Returns a sorted list of unspent boxes which cover at least the
/// provided value `total` of nanoErgs.
/// Note: This box selection strategy simply uses the largest
/// value holding boxes from the user's wallet first.
pub fn unspent_boxes_with_min_total(&self, total: NanoErg) -> Result<Vec<ErgoBox>>

扫描

此模块包含 Scan 结构体,允许开发者轻松处理 UTXO-set 扫描。每个 Scan 都与一个特定的 NodeInterface 相关联,这受到扫描按节点保存的事实启发。

Scan 结构体为您提供了以下能力

  1. 向 Ergo 节点注册新扫描。
  2. 从您的注册扫描中获取盒子/序列化的盒子。
  3. 将扫描ID保存/读取到本地文件。

使用扫描接口注册扫描以跟踪Oracle池的示例

let oracle_pool_nft_id = "08b59b14e4fdd60e5952314adbaa8b4e00bc0f0b676872a5224d3bf8591074cd".to_string();

let tracking_rule = object! {
        "predicate": "containsAsset",
        "assetId": oracle_pool_nft_id,
};

let scan = Scan::register(
    &"Oracle Pool Box Scan".to_string(),
    tracking_rule,
    node,
).unwrap();

本地配置

此模块提供了一些辅助函数,用于从本地 node-interface.yaml 文件中保存/读取,该文件包含Ergo节点ip/端口/api密钥。这使得dApp开发人员能够更快地将他们的dApp运行起来,而无需手动实现此类逻辑。

可用的示例函数

/// Create a new `node-interface.config` with the barebones yaml inside
pub fn create_new_local_config_file() -> Result<()>

/// Opens a local `node-interface.yaml` file and uses the
/// data inside to create a `NodeInterface`
pub fn new_interface_from_local_config() -> Result<NodeInterface> {

文档

可以通过运行以下命令访问文档

cargo doc --open

贡献

请参阅CONTRIBUTING

依赖项

~19–38MB
~642K SLoC