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

Download history 17/week @ 2024-04-14 104/week @ 2024-04-21 41/week @ 2024-04-28 1/week @ 2024-05-05 179/week @ 2024-05-12 29/week @ 2024-05-19 7/week @ 2024-05-26 7/week @ 2024-06-02 7/week @ 2024-06-09 9/week @ 2024-06-16 2/week @ 2024-06-23 141/week @ 2024-06-30 8/week @ 2024-07-07 5/week @ 2024-07-14 27/week @ 2024-07-28

70 每月下载量
用于 3 crates

MIT 许可证

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_numuint32 (可选) – 目标区块的区块编号。如果不提供,将返回最新的已知区块。

返回值

  • block_headerBlockHeader – 区块头。

GetBlockByNumber

通过给定的区块编号检索区块数据。

参数

  • block_numuint32 – 目标区块的区块编号。

返回值

  • blockBlock – 以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_idAccountId – 执行交易的账户ID。
  • nullifiers[Digest] – 交易消耗的所有笔记的nullifiers数组。

返回值

  • account_stateAccountTransactionInputRecord – 账户描述符。
  • 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 + 1response.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 之前包含的交易摘要。
    • 每个 TransactionSummarytransaction_id 交易标识符,执行该交易的 account_id 账户ID,以及包含交易的那个 block_num 区块号组成。
  • notes: [NoteSyncRecord] – 包含所有笔记及从 response.block_header.note_root 的 Merkle 路径的列表。
  • nullifiers: [NullifierUpdate] – 在 request.block_num + 1response.block_header.block_num 之间创建的 nullifiers 列表。
    • 每个 NullifierUpdate 都包含 nullifierblock_num,即对应 nullifier 的笔记被消耗的区块号。

测试目的的方法

ListNullifiers

列出当前链上的所有 nullifiers。

参数

此请求没有任何参数。

返回值

  • nullifiers: [NullifierLeaf] – 当前链上所有 nullifiers 的列表。

ListAccounts

列出当前链上的所有账户。

参数

此请求没有任何参数。

返回值

  • accounts: [AccountInfo] – 当前链上所有账户的列表。

ListNotes

列出当前链上的所有笔记。

参数

此请求没有任何参数。

返回值

  • notes: [Note] – 当前链上所有笔记的列表。

许可

本项目遵循 MIT 许可协议

依赖

~57MB
~1M SLoC