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 中使用
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