12 个不稳定版本 (3 个破坏性版本)

0.7.4 2023 年 3 月 28 日
0.7.3 2023 年 3 月 23 日
0.7.1 2023 年 2 月 26 日
0.6.0 2022 年 10 月 6 日
0.4.5 2022 年 7 月 17 日

#4 in #themelio


melnode 中使用

MPL-2.0 许可证

33KB
622

为 Melscan(可能还有更多)提供区块索引器

区块索引器使用 Client 从网络逐个拉取区块,并对它们进行索引。

SQLite 架构概述

coins

主数据结构是跟踪所有已看到硬币状态的 SQLite 表,以下列出了列

  • create_txhash:创建事务的哈希
  • create_index:创建事务的索引(例如,它是哪个输出)
  • create_height:创建事务的高度
  • spend_txhash:支出事务的哈希
  • spend_index:支出事务的索引(例如,它是哪个输入)
  • spend_height:支出事务的高度
  • value:支出的值(大端 blob)
  • denom:面值(blob)
  • covhash:地址(字符串)
  • additional_data:(blob)

将支出信息规范化到这个表中以提高例如平衡查询(“哪些硬币被创建”)的性能

“棘手”的情况(主要是指 Melswap 事务)是通过从网络请求更多信息来处理的,而不是通过重新实现状态转换函数的所有细微差别。这是我们为什么使用基于拉取而不是无 I/O 的基于推的 API 的一个重要原因。

headvars

  • height
  • blkhash
  • fee_pool
  • fee_multiplier
  • dosc_speed

stakes

存储 所有 stakedocs,这是我们真正需要的所有内容

  • txhash
  • pubkey
  • e_start
  • e_post_end
  • staked

txvars

  • txhash
  • kind
  • fee
  • covenants(JSON)
  • data
  • sigs(JSON)

查询 API

查询有关硬币的事实

// iterator over all coins with value above 100 µMEL
let i: impl Iterator<Item = CoinInfo> =
    indexer.query_coins()
        .value_range(CoinValue(100)..)
        .denom(Denom::Mel)
        .iter()
pub struct CoinInfo {
    pub create_txhash: TxHash,
    pub create_index: u8,
    pub create_height: BlockHeight,
    pub coin_data: CoinData,
    pub spend_info: Option<CoinSpendInfo>
}

pub struct CoinSpendInfo {
    pub spend_txhash: TxHash,
    pub spend_index: u8,
    pub spend_height: BlockHeight
}

依赖关系

~48–86MB
~1.5M SLoC