From 260c4c9b454ae618b8dba32021a89d38c0095580 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Wed, 15 Feb 2023 18:15:25 +0000 Subject: [PATCH] feat: SelfSponsoring migration --- --- a/pallets/evm-contract-helpers/src/lib.rs +++ b/pallets/evm-contract-helpers/src/lib.rs @@ -33,9 +33,10 @@ pub mod pallet { pub use super::*; use crate::eth::ContractHelpersEvents; - use frame_support::pallet_prelude::*; - use pallet_evm_coder_substrate::DispatchResult; + use frame_support::{pallet_prelude::*, sp_runtime::DispatchResult}; + use frame_system::{pallet_prelude::OriginFor, ensure_root}; use sp_core::{H160, U256}; + use sp_std::vec::Vec; use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm}; use up_data_structs::SponsorshipState; use evm_coder::ToLog; @@ -199,6 +200,28 @@ ), } + #[pallet::call] + impl Pallet { + /// Migrate contract to use `SponsoringMode` storage instead of `SelfSponsoring` + #[pallet::call_index(0)] + #[pallet::weight(::DbWeight::get().reads_writes( + addresses.len() as u64, addresses.len() as u64 * 2 + ))] + pub fn migrate_from_self_sponsoring( + origin: OriginFor, + addresses: Vec, + ) -> DispatchResult { + ensure_root(origin)?; + for address in addresses { + if >::get(address) { + >::set(address, Some(SponsoringModeT::Allowlisted)); + >::remove(address); + } + } + Ok(()) + } + } + impl Pallet { /// Get contract owner. pub fn contract_owner(contract: H160) -> H160 { -- gitstuff