Skip to main content

iota_node_storage/
key_value_store.rs

1// Copyright (c) Mysten Labs, Inc.
2// Modifications Copyright (c) 2026 IOTA Stiftung
3// SPDX-License-Identifier: Apache-2.0
4
5use async_trait::async_trait;
6use iota_sdk_types::{
7    CheckpointContents, CheckpointDigest, ObjectId, TransactionDigest, TransactionEffects,
8    TransactionEvents, Version,
9};
10use iota_types::{
11    error::IotaResult,
12    messages_checkpoint::{CertifiedCheckpointSummary, CheckpointSequenceNumber},
13    object::Object,
14    storage::ObjectKey,
15    transaction::TransactionEnvelope,
16};
17
18pub type KVStoreTransactionData = (
19    Vec<Option<TransactionEnvelope>>,
20    Vec<Option<TransactionEffects>>,
21);
22
23pub type KVStoreCheckpointData = (
24    Vec<Option<CertifiedCheckpointSummary>>,
25    Vec<Option<CheckpointContents>>,
26    Vec<Option<CertifiedCheckpointSummary>>,
27);
28
29/// Immutable key/value store trait for reading transactions, effects, events,
30/// checkpoints and objects, mostly with batched `multi_get*` methods.
31///
32/// Each batched method returns one entry per key, in key order, with `None` for
33/// a missing key.
34#[async_trait]
35pub trait TransactionKeyValueStoreTrait {
36    async fn multi_get(
37        &self,
38        transaction_keys: &[TransactionDigest],
39        effects_keys: &[TransactionDigest],
40    ) -> IotaResult<KVStoreTransactionData>;
41
42    async fn multi_get_checkpoints(
43        &self,
44        checkpoint_summaries: &[CheckpointSequenceNumber],
45        checkpoint_contents: &[CheckpointSequenceNumber],
46        checkpoint_summaries_by_digest: &[CheckpointDigest],
47    ) -> IotaResult<KVStoreCheckpointData>;
48
49    async fn get_transaction_perpetual_checkpoint(
50        &self,
51        digest: TransactionDigest,
52    ) -> IotaResult<Option<CheckpointSequenceNumber>>;
53
54    async fn get_object(&self, object_id: ObjectId, version: Version)
55    -> IotaResult<Option<Object>>;
56
57    async fn multi_get_objects(&self, object_keys: &[ObjectKey])
58    -> IotaResult<Vec<Option<Object>>>;
59
60    async fn multi_get_transactions_perpetual_checkpoints(
61        &self,
62        digests: &[TransactionDigest],
63    ) -> IotaResult<Vec<Option<CheckpointSequenceNumber>>>;
64
65    async fn multi_get_events_by_tx_digests(
66        &self,
67        digests: &[TransactionDigest],
68    ) -> IotaResult<Vec<Option<TransactionEvents>>>;
69
70    /// Drops any cached copies of the objects at `object_keys`.
71    async fn evict_objects(&self, _object_keys: &[ObjectKey]) {}
72
73    /// Drops any cached events of the transactions `digests`.
74    async fn evict_events_by_tx_digests(&self, _digests: &[TransactionDigest]) {}
75}