5 个版本 (3 个破坏性更新)
0.4.0 | 2024年7月4日 |
---|---|
0.3.0 | 2024年5月15日 |
0.2.1 | 2024年4月27日 |
0.2.0 | 2024年4月12日 |
0.1.0 | 2024年3月11日 |
#23 在 #miden
70 每月下载量
用于 3 crates
315KB
6.5K SLoC
Miden 节点存储
存储 维护链的状态。它作为链的“真相之源”——也就是说,如果它不在存储中,节点就不会将其视为链的一部分。存储 是 Miden 节点 的组件之一。
架构
待办事项
用法
安装存储
存储可以作为 Miden 节点 的一部分安装和运行。
API
存储 使用 gRPC 协议 在一个端口上提供服务,该端口设置在之前提到的配置文件中。以下是支持的方法的简要说明。
ApplyBlock
将新块的更改应用于数据库和内存数据结构。
参数
block
:BlockHeader
– 块头 (src).accounts
:[AccountUpdate]
– 账户更新的列表。nullifiers
:[Digest]
– 一系列nullifier哈希值。notes
:[NoteCreated]
– 创建的笔记列表。
返回值
此方法不返回任何数据。
CheckNullifiers
获取给定nullifier哈希值的证明列表,每个证明作为一个稀疏Merkle树
参数
nullifiers
:[Digest]
– nullifier哈希值的数组。
返回值
proofs
:[NullifierProof]
– nullifier证明的数组,位置与请求中的位置相对应。
GetBlockHeaderByNumber
通过给定的区块编号检索区块头。可选地,它还返回MMR路径和当前链长度以验证区块的包含。
参数
block_num
:uint32
(可选) – 目标区块的区块编号。如果不提供,将返回最新的已知区块。
返回值
block_header
:BlockHeader
– 区块头。
GetBlockByNumber
通过给定的区块编号检索区块数据。
参数
block_num
:uint32
– 目标区块的区块编号。
返回值
block
:Block
– 以Miden本地格式编码的区块数据。
GetBlockInputs
返回构建和证明下一个区块所需的数据。
参数
account_ids
:[AccountId]
– 账户ID的数组。nullifiers
:[Digest]
– nullifier哈希值的数组(目前未使用)。
返回值
block_header
:[BlockHeader]
– 最新区块头。mmr_peaks
:[Digest]
– 上一个区块的mmr的峰值,forest
值等于区块编号。account_states
:[AccountBlockInputRecord]
– 请求账户及其认证路径的哈希值。nullifiers
:[NullifierBlockInputRecord]
– 请求的nullifiers及其认证路径。
GetTransactionInputs
返回区块生产者检查交易有效性的所需数据。
参数
account_id
:AccountId
– 执行交易的账户ID。nullifiers
:[Digest]
– 交易消耗的所有笔记的nullifiers数组。
返回值
account_state
:AccountTransactionInputRecord
– 账户描述符。nullifiers
:[NullifierTransactionInputRecord]
– 对应nullifiers被消耗的区块编号,如果未消耗则为零。
GetNotesById
返回与提供的笔记ID匹配的笔记列表。
参数
note_ids
:[NoteId]
- 我们要查询的笔记ID的列表。
返回值
notes
:[Note]
- 匹配请求NoteIds的笔记列表。
GetAccountDetails
返回指定ID账户的最新状态。
参数
account_id
:AccountId
– 账户ID。
返回值
account
:AccountInfo
– 账户的最新状态。对于公开账户,这包括描述当前账户状态的全部详细信息。对于私人账户,仅返回最新状态的哈希值和最后更新时间。
SyncState
返回可用于客户端同步至对客户端感兴趣的账户(账户、笔记、nullifiers)的最新链状态的信息。
此请求返回包含请求数据的下一个区块。它还返回 chain_tip
,即链中的最新区块号。客户端应重复这些请求,直到 response.block_header.block_num == response.chain_tip
,此时客户端与链完全同步。
每个请求还返回有关创建的新笔记、nullifiers等信息。它还返回可用于更新链MMR状态的链MMR delta。这包括链MMR峰值和链MMR节点。
为了保护一定程度的隐私,笔记标签和nullifiers过滤器只包含哈希的高部分。因此,返回的数据包含过多的笔记和nullifiers,客户端可以在其侧对数据进行额外过滤。
参数
block_num
:uint32
– 从此区块开始向客户端发送更新。account_ids
:[AccountId]
– 账户过滤器。note_tags
:[uint32]
– 笔记标签过滤器。对应于真实值的最高16位。nullifiers
:[uint32]
– nullifiers过滤器。对应于真实值的最高16位。
返回值
chain_tip
:uint32
– 链中最新区块的编号。block_header
:BlockHeader
– 包含符合指定标准的首个笔记的区块的区块头。mmr_delta
:MmrDelta
– 更新从request.block_num + 1
到response.block_header.block_num
的部分MMR所需的数据。accounts
:[AccountSummary]
– 在request.block_num + 1
之后但response.block_header.block_num
之前更新的账户摘要。transactions
:[TransactionSummary]
– 在request.block_num + 1
之后但response.block_header.block_num
之前包含的交易摘要。- 每个
TransactionSummary
由transaction_id
交易标识符,执行该交易的account_id
账户ID,以及包含交易的那个block_num
区块号组成。
- 每个
notes
:[NoteSyncRecord]
– 包含所有笔记及从response.block_header.note_root
的 Merkle 路径的列表。nullifiers
:[NullifierUpdate]
– 在request.block_num + 1
和response.block_header.block_num
之间创建的 nullifiers 列表。- 每个
NullifierUpdate
都包含nullifier
和block_num
,即对应 nullifier 的笔记被消耗的区块号。
- 每个
测试目的的方法
ListNullifiers
列出当前链上的所有 nullifiers。
参数
此请求没有任何参数。
返回值
nullifiers
:[NullifierLeaf]
– 当前链上所有 nullifiers 的列表。
ListAccounts
列出当前链上的所有账户。
参数
此请求没有任何参数。
返回值
accounts
:[AccountInfo]
– 当前链上所有账户的列表。
ListNotes
列出当前链上的所有笔记。
参数
此请求没有任何参数。
返回值
notes
:[Note]
– 当前链上所有笔记的列表。
许可
本项目遵循 MIT 许可协议。
依赖
~57MB
~1M SLoC