Skip to content

Commit 84198cf

Browse files
committed
phala-node: add rpc pha_getStorageChangesAt
1 parent aeb1ae5 commit 84198cf

File tree

4 files changed

+19
-2
lines changed

4 files changed

+19
-2
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/phala-node-rpc-ext/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ impl-serde = "0.3"
1818
log = { version = "0.4.14", default-features = false }
1919
hex = { version = "0.4.3", default-features = false }
2020
codec = { package = "parity-scale-codec", version = "2.2" }
21+
scale-info = { version = "1.0.0", default-features = false }
2122

2223
# primitives
2324
sp-runtime = { path = "../../substrate/primitives/runtime" }

crates/phala-node-rpc-ext/src/lib.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::marker::PhantomData;
22
use std::sync::Arc;
33

4+
use codec::Encode;
45
use jsonrpc_derive::rpc;
56
use mq_seq::Error as MqSeqError;
67
use pallet_mq_runtime_api::MqApi;
@@ -34,6 +35,11 @@ pub trait NodeRpcExtApi<BlockHash> {
3435
to: BlockHash,
3536
) -> Result<GetStorageChangesResponse, StorageChangesError>;
3637

38+
/// Get storage changes made by given block.
39+
/// Returns `hex_encode(scale_encode(StorageChanges))`
40+
#[rpc(name = "pha_getStorageChangesAt")]
41+
fn get_storage_changes_at(&self, block: BlockHash) -> Result<String, StorageChangesError>;
42+
3743
/// Return the next mq sequence number for given sender which take the ready transactions in count.
3844
#[rpc(name = "pha_getMqNextSequence")]
3945
fn get_mq_seq(&self, sender_hex: String) -> Result<u64, MqSeqError>;
@@ -95,6 +101,12 @@ where
95101
}
96102
}
97103

104+
fn get_storage_changes_at(&self, block: Block::Hash) -> Result<String, StorageChangesError> {
105+
let changes = self.get_storage_changes(block, block)?;
106+
let encoded = changes[0].encode();
107+
Ok(impl_serde::serialize::to_hex(&encoded, false))
108+
}
109+
98110
fn get_mq_seq(&self, sender_hex: String) -> Result<u64, MqSeqError> {
99111
mq_seq::get_mq_seq(&*self.client, &self.pool, sender_hex)
100112
}

crates/phala-node-rpc-ext/src/storage_changes.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
use codec::{Decode, Encode};
2+
use scale_info::TypeInfo;
3+
14
use super::*;
25

36
/// State RPC errors.
@@ -42,7 +45,7 @@ impl From<Error> for jsonrpc_core::Error {
4245
}
4346

4447
/// Storage key.
45-
#[derive(Serialize, Deserialize, Clone, Debug)]
48+
#[derive(Serialize, Deserialize, Clone, Debug, Encode, Decode, TypeInfo)]
4649
pub struct StorageKey(#[serde(with = "impl_serde::serialize")] Vec<u8>);
4750

4851
/// Storage value.
@@ -54,7 +57,7 @@ pub type StorageCollection<K, V> = Vec<(K, Option<V>)>;
5457
/// In memory arrays of storage values for multiple child tries.
5558
pub type ChildStorageCollection<K, V> = Vec<(K, StorageCollection<K, V>)>;
5659

57-
#[derive(Serialize, Deserialize, Clone, Debug)]
60+
#[derive(Serialize, Deserialize, Clone, Debug, Encode, Decode, TypeInfo)]
5861
#[serde(rename_all = "camelCase")]
5962
pub struct StorageChanges {
6063
/// A value of `None` means that it was deleted.

0 commit comments

Comments
 (0)