mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-10 13:09:24 +00:00
Fix timeline for incrementing providers
e1671dd71b incremented the providers for every
single transaction's sender before execution, noting the solution was fragile
but it worked for us at this time. It did not work for us at this time.
The new solution replaces `inc_providers` with direct access to the `Account`
`StorageMap` to increment the providers, achieving the desired goal, _without_
emitting an event (which is ordered, and the disparate order between building
and execution was causing mismatches of the state root).
This solution is also fragile and may also be insufficient. None of this code
exists anymore on `next` however. It just has to work sufficiently for now.
This commit is contained in:
@@ -383,9 +383,11 @@ sp_api::impl_runtime_apis! {
|
||||
fn execute_block(block: Block) {
|
||||
for tx in &block.extrinsics {
|
||||
if let Some(signer) = tx.signer() {
|
||||
let signer = signer.0.into();
|
||||
if System::providers(&signer) == 0 {
|
||||
System::inc_providers(&signer);
|
||||
let signer = PublicKey::from(signer.0);
|
||||
let mut info = frame_system::Account::<Runtime>::get(&signer);
|
||||
if info.providers == 0 {
|
||||
info.providers = 1;
|
||||
frame_system::Account::<Runtime>::set(&signer, info);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -401,9 +403,11 @@ sp_api::impl_runtime_apis! {
|
||||
impl sp_block_builder::BlockBuilder<Block> for Runtime {
|
||||
fn apply_extrinsic(extrinsic: <Block as BlockT>::Extrinsic) -> ApplyExtrinsicResult {
|
||||
if let Some(signer) = extrinsic.signer() {
|
||||
let signer = signer.0.into();
|
||||
if System::providers(&signer) == 0 {
|
||||
System::inc_providers(&signer);
|
||||
let signer = PublicKey::from(signer.0);
|
||||
let mut info = frame_system::Account::<Runtime>::get(&signer);
|
||||
if info.providers == 0 {
|
||||
info.providers = 1;
|
||||
frame_system::Account::<Runtime>::set(&signer, info);
|
||||
}
|
||||
}
|
||||
Executive::apply_extrinsic(extrinsic)
|
||||
|
||||
Reference in New Issue
Block a user