Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AccountStore in-memory state initialization and synchronization #3133

Merged
merged 56 commits into from
Oct 25, 2024
Merged
Show file tree
Hide file tree
Changes from 48 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
55248b8
update AccountStoreCreated event
silva-fj Oct 16, 2024
413abc1
include account_store in AccountAdded
silva-fj Oct 16, 2024
95f82b7
add account_store to AccountRemoved
silva-fj Oct 16, 2024
2837f7b
add account_store to AccountMadePublic
silva-fj Oct 16, 2024
0a783ea
adding parentchain events
silva-fj Oct 16, 2024
414a7b3
updating event filters
silva-fj Oct 16, 2024
ac47765
fixing lc-omni-account dependency definition in the workspace
silva-fj Oct 16, 2024
25bd1f9
adding parentchain errors
silva-fj Oct 17, 2024
8e84226
updating imports
silva-fj Oct 17, 2024
c2e6b76
refactoring in_memory_store
silva-fj Oct 17, 2024
d3bd65d
updating ParentchainBlockProcessed event handler
silva-fj Oct 17, 2024
dbacf18
adding new indirect call error
silva-fj Oct 17, 2024
9ebe51c
handling omni-account events
silva-fj Oct 17, 2024
7cbb649
removing unused imports
silva-fj Oct 17, 2024
8af1c23
extending ocall_api, adding get_header method
silva-fj Oct 17, 2024
da95e29
cleaning up OmniAccountRepository
silva-fj Oct 17, 2024
ecdde2e
updating bitacross
silva-fj Oct 17, 2024
37c6bb7
setting up in_memory_state initialization
silva-fj Oct 17, 2024
9414272
adding TODO
silva-fj Oct 17, 2024
ccb38d2
extending ocall_api to fetch paginated storage keys
silva-fj Oct 17, 2024
a04fa8b
refactoring get_all, getting entries with pagination
silva-fj Oct 17, 2024
75f0dc9
updating error
silva-fj Oct 17, 2024
c261ecb
fixing typo
silva-fj Oct 17, 2024
8c91f06
fixing get_header
silva-fj Oct 17, 2024
3c6b4a6
logging error
silva-fj Oct 17, 2024
078ad2c
init state on init_parentchain_components
silva-fj Oct 17, 2024
e474856
Merge branch 'dev' into omni-account-state-sync
silva-fj Oct 17, 2024
ed97b50
fixing fmt
silva-fj Oct 18, 2024
ea1d526
including block_number in the event handlers
silva-fj Oct 18, 2024
75e76aa
refatoring event_handlers to only update the in-memory store if the
silva-fj Oct 18, 2024
1e0ee11
removing debug log
silva-fj Oct 18, 2024
9048977
removing initialization from parentchain init
silva-fj Oct 18, 2024
0217e40
adding enclave ecall to trigger in_memory_store initialization
silva-fj Oct 18, 2024
daa94b7
adding initialization
silva-fj Oct 18, 2024
d7ac168
adding logs
silva-fj Oct 18, 2024
f3b9bc9
Merge remote-tracking branch 'origin/dev' into omni-account-state-sync
silva-fj Oct 18, 2024
2e47528
removing unused imports
silva-fj Oct 18, 2024
6f154d3
small improvement
silva-fj Oct 18, 2024
573b7e5
fixing enclave_api_mock
silva-fj Oct 18, 2024
d102ad7
removing unused imports
silva-fj Oct 18, 2024
cdeb481
Merge remote-tracking branch 'origin/dev' into omni-account-state-sync
silva-fj Oct 18, 2024
18ed2b1
removing comment
silva-fj Oct 18, 2024
2a70438
removing clone
silva-fj Oct 18, 2024
95b6ece
removing TODO's
silva-fj Oct 18, 2024
2dc59b1
logging error instead of panic if `init_in_memory_state` fails
silva-fj Oct 18, 2024
458f075
Merge branch 'dev' into omni-account-state-sync
silva-fj Oct 21, 2024
a1c9d37
Merge branch 'dev' into omni-account-state-sync
silva-fj Oct 23, 2024
45b80aa
Merge branch 'dev' into omni-account-state-sync
silva-fj Oct 24, 2024
9ff6e0e
refactoring events to use AccountStoreUpdated to update in-memory store
silva-fj Oct 24, 2024
5b9c3b0
updating parentchain-interface events and event handlers
silva-fj Oct 24, 2024
db2e67e
Merge remote-tracking branch 'origin/dev' into omni-account-state-sync
silva-fj Oct 25, 2024
0d9c30d
refactoring in_memory_store method names
silva-fj Oct 25, 2024
63a6c67
fixing returned keys
silva-fj Oct 25, 2024
53745c4
cleaning up storage keys module
silva-fj Oct 25, 2024
8c82273
removing unused imports
silva-fj Oct 25, 2024
3fd8576
fixing pagination and key decoding
silva-fj Oct 25, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 37 additions & 10 deletions parachain/pallets/omni-account/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,13 +132,25 @@ pub mod pallet {
#[pallet::generate_deposit(pub(super) fn deposit_event)]
pub enum Event<T: Config> {
/// An account store is created
AccountStoreCreated { who: T::AccountId },
AccountStoreCreated { who: T::AccountId, account_store: MemberAccounts<T> },
/// Some member account is added
AccountAdded { who: T::AccountId, member_account_hash: H256 },
AccountAdded {
who: T::AccountId,
member_account_hash: H256,
account_store: MemberAccounts<T>,
kziemianek marked this conversation as resolved.
Show resolved Hide resolved
},
/// Some member accounts are removed
AccountRemoved { who: T::AccountId, member_account_hashes: Vec<H256> },
AccountRemoved {
who: T::AccountId,
member_account_hashes: Vec<H256>,
account_store: MemberAccounts<T>,
},
/// Some member account is made public
AccountMadePublic { who: T::AccountId, member_account_hash: H256 },
AccountMadePublic {
who: T::AccountId,
member_account_hash: H256,
account_store: MemberAccounts<T>,
},
/// An account store is updated
AccountStoreUpdated { who: T::AccountId },
/// Some call is dispatched as omni-account origin
Expand Down Expand Up @@ -244,7 +256,11 @@ pub mod pallet {
MemberAccountHash::<T>::insert(hash, who.clone());
AccountStore::<T>::insert(who.clone(), member_accounts.clone());

Self::deposit_event(Event::AccountAdded { who, member_account_hash: hash });
Self::deposit_event(Event::AccountAdded {
who,
member_account_hash: hash,
account_store: member_accounts,
});

Ok(())
}
Expand Down Expand Up @@ -275,10 +291,14 @@ pub mod pallet {
if member_accounts.is_empty() {
AccountStore::<T>::remove(&who);
} else {
AccountStore::<T>::insert(who.clone(), member_accounts);
AccountStore::<T>::insert(who.clone(), member_accounts.clone());
}

Self::deposit_event(Event::AccountRemoved { who, member_account_hashes });
Self::deposit_event(Event::AccountRemoved {
who,
member_account_hashes,
account_store: member_accounts,
});

Ok(())
}
Expand All @@ -299,9 +319,13 @@ pub mod pallet {
.ok_or(Error::<T>::AccountNotFound)?;
*m = member_account.into();

AccountStore::<T>::insert(who.clone(), member_accounts);
AccountStore::<T>::insert(who.clone(), member_accounts.clone());

Self::deposit_event(Event::AccountMadePublic { who, member_account_hash: hash });
Self::deposit_event(Event::AccountMadePublic {
who,
member_account_hash: hash,
account_store: member_accounts,
});

Ok(())
}
Expand Down Expand Up @@ -385,7 +409,10 @@ pub mod pallet {
MemberAccountHash::<T>::insert(hash, omni_account.clone());
AccountStore::<T>::insert(omni_account.clone(), member_accounts.clone());

Self::deposit_event(Event::AccountStoreCreated { who: omni_account });
Self::deposit_event(Event::AccountStoreCreated {
who: omni_account,
account_store: member_accounts.clone(),
});

Ok(member_accounts)
}
Expand Down
60 changes: 41 additions & 19 deletions parachain/pallets/omni-account/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,16 @@ fn create_account_store_works() {
alice().identity,
));

System::assert_last_event(Event::AccountStoreCreated { who: alice().omni_account }.into());
let member_accounts: MemberAccounts<TestRuntime> =
vec![public_member_account(alice())].try_into().unwrap();

System::assert_last_event(
Event::AccountStoreCreated {
who: alice().omni_account,
account_store: member_accounts,
}
.into(),
);

// create it the second time will fail
assert_noop!(
Expand Down Expand Up @@ -111,6 +120,7 @@ fn add_account_works() {
Event::AccountAdded {
who: alice().omni_account.clone(),
member_account_hash: bob.hash(),
account_store: expected_member_accounts.clone(),
}
.into(),
);
Expand All @@ -126,20 +136,29 @@ fn add_account_works() {
alice().identity.hash(),
call
));
let expected_member_accounts: MemberAccounts<TestRuntime> =
BoundedVec::truncate_from(vec![
public_member_account(alice()),
bob.clone(),
charlie.clone(),
]);

System::assert_has_event(
Event::AccountAdded { who: alice().omni_account, member_account_hash: charlie.hash() }
.into(),
Event::AccountAdded {
who: alice().omni_account,
member_account_hash: charlie.hash(),
account_store: expected_member_accounts.clone(),
}
.into(),
);

let expected_member_accounts: MemberAccounts<TestRuntime> =
vec![public_member_account(alice()), bob.clone(), charlie.clone()]
.try_into()
.unwrap();

assert_eq!(
AccountStore::<TestRuntime>::get(alice().omni_account).unwrap(),
expected_member_accounts
System::assert_has_event(
Event::AccountAdded {
who: alice().omni_account,
member_account_hash: charlie.hash(),
account_store: expected_member_accounts.clone(),
}
.into(),
);

assert!(MemberAccountHash::<TestRuntime>::contains_key(bob.hash()));
Expand Down Expand Up @@ -324,17 +343,18 @@ fn remove_account_works() {
.into(),
);

let expected_member_accounts: MemberAccounts<TestRuntime> =
BoundedVec::truncate_from(vec![public_member_account(alice())]);

System::assert_has_event(
Event::AccountRemoved {
who: alice().omni_account,
who: alice().omni_account.clone(),
member_account_hashes: vec![bob.hash()],
account_store: expected_member_accounts.clone(),
}
.into(),
);

let expected_member_accounts: MemberAccounts<TestRuntime> =
vec![public_member_account(alice())].try_into().unwrap();

assert_eq!(
AccountStore::<TestRuntime>::get(alice().omni_account).unwrap(),
expected_member_accounts
Expand Down Expand Up @@ -432,16 +452,18 @@ fn publicize_account_works() {
.into(),
);

let expected_member_accounts: MemberAccounts<TestRuntime> =
BoundedVec::truncate_from(vec![public_member_account(alice()), public_bob]);

System::assert_has_event(
Event::AccountMadePublic {
who: alice().omni_account,
member_account_hash: public_bob.hash(),
who: alice().omni_account.clone(),
member_account_hash: bob().identity.hash(),
account_store: expected_member_accounts.clone(),
}
.into(),
);

let expected_member_accounts: MemberAccounts<TestRuntime> =
vec![public_member_account(alice()), public_bob].try_into().unwrap();
assert_eq!(
AccountStore::<TestRuntime>::get(alice().omni_account).unwrap(),
expected_member_accounts
Expand Down
1 change: 1 addition & 0 deletions tee-worker/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tee-worker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ lc-stf-task-sender = { path = "identity/litentry/core/stf-task/sender", default-
lc-stf-task-receiver = { path = "identity/litentry/core/stf-task/receiver", default-features = false }
lc-vc-task-sender = { path = "identity/litentry/core/vc-task/sender", default-features = false }
lc-vc-task-receiver = { path = "identity/litentry/core/vc-task/receiver", default-features = false }
lc-omni-account = { path = "identity/app-libs/omni-account", default-features = false }
lc-omni-account = { path = "identity/litentry/core/omni-account", default-features = false }
lc-native-task-sender = { path = "identity/litentry/core/native-task/sender", default-features = false }
lc-native-task-receiver = { path = "identity/litentry/core/native-task/receiver", default-features = false }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,20 @@ impl FilterEvents for FilterableEvents {
fn get_btc_wallet_generated_events(&self) -> Result<Vec<BtcWalletGenerated>, Self::Error> {
self.filter()
}

fn get_account_store_created_events(&self) -> Result<Vec<AccountStoreCreated>, Self::Error> {
self.filter()
}

fn get_account_added_events(&self) -> Result<Vec<AccountAdded>, Self::Error> {
self.filter()
}

fn get_account_removed_events(&self) -> Result<Vec<AccountRemoved>, Self::Error> {
self.filter()
}

fn get_account_made_public_events(&self) -> Result<Vec<AccountMadePublic>, Self::Error> {
self.filter()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ use itp_types::{
use litentry_primitives::{Address32, Identity};
use log::*;
use sp_core::{blake2_256, H256};
use sp_runtime::traits::{Block as ParentchainBlock, Header as ParentchainHeader};
use sp_std::vec::Vec;
use std::string::ToString;

Expand Down Expand Up @@ -129,11 +130,15 @@ where
{
type Output = Vec<H256>;

fn handle_events(
fn handle_events<Block>(
&self,
executor: &Executor,
events: impl FilterEvents,
) -> Result<Vec<H256>, Error> {
_block_number: <<Block as ParentchainBlock>::Header as ParentchainHeader>::Number,
) -> Result<Vec<H256>, Error>
where
Block: ParentchainBlock,
{
let mut handled_events: Vec<H256> = Vec::new();

if let Ok(events) = events.get_relayer_added_events() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,20 @@ impl FilterEvents for FilterableEvents {
fn get_btc_wallet_generated_events(&self) -> Result<Vec<BtcWalletGenerated>, Self::Error> {
self.filter()
}

fn get_account_store_created_events(&self) -> Result<Vec<AccountStoreCreated>, Self::Error> {
self.filter()
}

fn get_account_added_events(&self) -> Result<Vec<AccountAdded>, Self::Error> {
self.filter()
}

fn get_account_removed_events(&self) -> Result<Vec<AccountRemoved>, Self::Error> {
self.filter()
}

fn get_account_made_public_events(&self) -> Result<Vec<AccountMadePublic>, Self::Error> {
self.filter()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ use itp_types::{
H256,
};
use log::*;
use sp_runtime::traits::{Block as ParentchainBlock, Header as ParentchainHeader};
use std::vec::Vec;

pub struct ParentchainEventHandler {}
Expand All @@ -52,11 +53,15 @@ where
{
type Output = Vec<H256>;

fn handle_events(
fn handle_events<Block>(
&self,
_executor: &Executor,
_events: impl FilterEvents,
) -> Result<Vec<H256>, Error> {
_block_number: <<Block as ParentchainBlock>::Header as ParentchainHeader>::Number,
) -> Result<Vec<H256>, Error>
where
Block: ParentchainBlock,
{
debug!("not handling any events for target a");
Ok(Vec::new())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,20 @@ impl FilterEvents for FilterableEvents {
fn get_btc_wallet_generated_events(&self) -> Result<Vec<BtcWalletGenerated>, Self::Error> {
self.filter()
}

fn get_account_store_created_events(&self) -> Result<Vec<AccountStoreCreated>, Self::Error> {
self.filter()
}

fn get_account_added_events(&self) -> Result<Vec<AccountAdded>, Self::Error> {
self.filter()
}

fn get_account_removed_events(&self) -> Result<Vec<AccountRemoved>, Self::Error> {
self.filter()
}

fn get_account_made_public_events(&self) -> Result<Vec<AccountMadePublic>, Self::Error> {
self.filter()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ use itp_types::{
H256,
};
use log::*;
use sp_runtime::traits::{Block as ParentchainBlock, Header as ParentchainHeader};
use std::vec::Vec;

pub struct ParentchainEventHandler {}
Expand All @@ -52,11 +53,15 @@ where
{
type Output = Vec<H256>;

fn handle_events(
fn handle_events<Block>(
&self,
_executor: &Executor,
_events: impl FilterEvents,
) -> Result<Vec<H256>, Error> {
_block_number: <<Block as ParentchainBlock>::Header as ParentchainHeader>::Number,
) -> Result<Vec<H256>, Error>
where
Block: ParentchainBlock,
{
debug!("not handling any events for target B");
Ok(Vec::new())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,11 @@ impl<
})?
.ok_or_else(|| Error::Other("Could not create events from metadata".into()))?;

let processed_events = self.parentchain_event_handler.handle_events(self, events)?;
let processed_events = self.parentchain_event_handler.handle_events::<ParentchainBlock>(
self,
events,
block_number,
)?;

if self.parentchain_id == ParentchainId::Litentry {
// Include a processed parentchain block confirmation for each block.
Expand Down
Loading
Loading