additional network field, that represents default rate limit measured in blocks
Signed-off-by: Uncle Stretch <uncle.stretch@ghostchain.io>
This commit is contained in:
parent
b53a58f431
commit
060f61105c
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "ghost-networks"
|
||||
version = "0.1.8"
|
||||
version = "0.1.9"
|
||||
license.workspace = true
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
|
@ -32,6 +32,7 @@ fn prepare_network<T: Config>(
|
||||
topic_name,
|
||||
network_type: NetworkType::Evm,
|
||||
finality_delay: 69,
|
||||
rate_limit_delay: 69,
|
||||
block_distance: 69,
|
||||
incoming_fee: 0,
|
||||
outgoing_fee: 0,
|
||||
@ -120,6 +121,20 @@ benchmarks! {
|
||||
assert_ne!(GhostNetworks::<T>::networks(chain_id.clone()), prev_network);
|
||||
}
|
||||
|
||||
update_network_rate_limit_delay {
|
||||
let rate_limit = 1337;
|
||||
let (chain_id, network) = prepare_network::<T>(1, 1);
|
||||
let authority = T::UpdateOrigin::try_successful_origin()
|
||||
.map_err(|_| BenchmarkError::Weightless)?;
|
||||
let prev_network = create_network::<T>(chain_id.clone(), network.clone())?;
|
||||
}: _<T::RuntimeOrigin>(authority, chain_id.clone(), rate_limit)
|
||||
verify {
|
||||
assert_last_event::<T>(Event::NetworkRateLimitDelayUpdated {
|
||||
chain_id: chain_id.clone(), rate_limit_delay: rate_limit,
|
||||
}.into());
|
||||
assert_ne!(GhostNetworks::<T>::networks(chain_id.clone()), prev_network);
|
||||
}
|
||||
|
||||
update_network_block_distance {
|
||||
let block_distance = 1337;
|
||||
let (chain_id, network) = prepare_network::<T>(1, 1);
|
||||
|
@ -56,6 +56,7 @@ pub struct NetworkData {
|
||||
pub topic_name: Vec<u8>,
|
||||
pub network_type: NetworkType,
|
||||
pub finality_delay: u64,
|
||||
pub rate_limit_delay: u64,
|
||||
pub block_distance: u64,
|
||||
pub incoming_fee: u32,
|
||||
pub outgoing_fee: u32,
|
||||
@ -158,6 +159,7 @@ pub mod module {
|
||||
NetworkNameUpdated { chain_id: T::NetworkId, chain_name: Vec<u8> },
|
||||
NetworkEndpointUpdated { chain_id: T::NetworkId, default_endpoint: Vec<u8> },
|
||||
NetworkFinalityDelayUpdated { chain_id: T::NetworkId, finality_delay: u64 },
|
||||
NetworkRateLimitDelayUpdated { chain_id: T::NetworkId, rate_limit_delay: u64 },
|
||||
NetworkBlockDistanceUpdated { chain_id: T::NetworkId, block_distance: u64 },
|
||||
NetworkTypeUpdated { chain_id: T::NetworkId, network_type: NetworkType },
|
||||
NetworkGatekeeperUpdated { chain_id: T::NetworkId, gatekeeper: Vec<u8> },
|
||||
@ -303,6 +305,20 @@ pub mod module {
|
||||
}
|
||||
|
||||
#[pallet::call_index(4)]
|
||||
#[pallet::weight(T::WeightInfo::update_network_rate_limit_delay())]
|
||||
pub fn update_network_rate_limit_delay(
|
||||
origin: OriginFor<T>,
|
||||
chain_id: T::NetworkId,
|
||||
rate_limit_delay: u64,
|
||||
) -> DispatchResult {
|
||||
T::UpdateOrigin::ensure_origin_or_root(origin)?;
|
||||
Self::do_update_network_rate_limit_delay(
|
||||
chain_id,
|
||||
rate_limit_delay,
|
||||
)
|
||||
}
|
||||
|
||||
#[pallet::call_index(5)]
|
||||
#[pallet::weight(T::WeightInfo::update_network_block_distance())]
|
||||
pub fn update_network_block_distance(
|
||||
origin: OriginFor<T>,
|
||||
@ -316,7 +332,7 @@ pub mod module {
|
||||
)
|
||||
}
|
||||
|
||||
#[pallet::call_index(5)]
|
||||
#[pallet::call_index(6)]
|
||||
#[pallet::weight(T::WeightInfo::update_network_type())]
|
||||
pub fn update_network_type(
|
||||
origin: OriginFor<T>,
|
||||
@ -330,7 +346,7 @@ pub mod module {
|
||||
)
|
||||
}
|
||||
|
||||
#[pallet::call_index(6)]
|
||||
#[pallet::call_index(7)]
|
||||
#[pallet::weight(T::WeightInfo::update_network_gatekeeper())]
|
||||
pub fn update_network_gatekeeper(
|
||||
origin: OriginFor<T>,
|
||||
@ -344,7 +360,7 @@ pub mod module {
|
||||
)
|
||||
}
|
||||
|
||||
#[pallet::call_index(7)]
|
||||
#[pallet::call_index(8)]
|
||||
#[pallet::weight(T::WeightInfo::update_network_topic_name())]
|
||||
pub fn update_network_topic_name(
|
||||
origin: OriginFor<T>,
|
||||
@ -358,7 +374,7 @@ pub mod module {
|
||||
)
|
||||
}
|
||||
|
||||
#[pallet::call_index(8)]
|
||||
#[pallet::call_index(9)]
|
||||
#[pallet::weight(T::WeightInfo::update_incoming_network_fee())]
|
||||
pub fn update_incoming_network_fee(
|
||||
origin: OriginFor<T>,
|
||||
@ -372,7 +388,7 @@ pub mod module {
|
||||
)
|
||||
}
|
||||
|
||||
#[pallet::call_index(9)]
|
||||
#[pallet::call_index(10)]
|
||||
#[pallet::weight(T::WeightInfo::update_outgoing_network_fee())]
|
||||
pub fn update_outgoing_network_fee(
|
||||
origin: OriginFor<T>,
|
||||
@ -386,7 +402,7 @@ pub mod module {
|
||||
)
|
||||
}
|
||||
|
||||
#[pallet::call_index(10)]
|
||||
#[pallet::call_index(11)]
|
||||
#[pallet::weight(T::WeightInfo::remove_network())]
|
||||
pub fn remove_network(
|
||||
origin: OriginFor<T>,
|
||||
@ -465,7 +481,7 @@ impl<T: Config> Pallet<T> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Update existent network default endpoint.
|
||||
/// Update existent network default finality delay.
|
||||
pub fn do_update_network_finality_delay(
|
||||
chain_id: T::NetworkId,
|
||||
finality_delay: u64,
|
||||
@ -484,6 +500,25 @@ impl<T: Config> Pallet<T> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Update existent network default rate limit delay.
|
||||
pub fn do_update_network_rate_limit_delay(
|
||||
chain_id: T::NetworkId,
|
||||
rate_limit_delay: u64,
|
||||
) -> DispatchResult {
|
||||
Networks::<T>::try_mutate(&chain_id, |maybe_network| -> DispatchResult {
|
||||
ensure!(maybe_network.is_some(), Error::<T>::NetworkDoesNotExist);
|
||||
let net = maybe_network.as_mut().unwrap();
|
||||
net.rate_limit_delay = rate_limit_delay;
|
||||
*maybe_network = Some(net.clone());
|
||||
Ok(())
|
||||
})?;
|
||||
Self::deposit_event(Event::<T>::NetworkRateLimitDelayUpdated {
|
||||
chain_id,
|
||||
rate_limit_delay,
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Update existent network default max distance between blocks.
|
||||
pub fn do_update_network_block_distance(
|
||||
chain_id: T::NetworkId,
|
||||
|
@ -12,6 +12,7 @@ fn prepare_network_data() -> (u32, NetworkData) {
|
||||
chain_name: "Ethereum".into(),
|
||||
default_endpoint: "https:://some-endpoint.my-server.com/v1/my-super-secret-key".into(),
|
||||
finality_delay: 69,
|
||||
rate_limit_delay: 69,
|
||||
block_distance: 69,
|
||||
network_type: NetworkType::Evm,
|
||||
gatekeeper: b"0x1234567891234567891234567891234567891234".to_vec(),
|
||||
@ -136,6 +137,27 @@ fn could_update_network_finality_delay_from_authority_account() {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn could_update_network_rate_limit_delay_from_authority_account() {
|
||||
ExtBuilder::build()
|
||||
.execute_with(|| {
|
||||
let new_rate_limit_delay = 1337;
|
||||
let (chain_id, network) = prepare_network_data();
|
||||
register_and_check_network(chain_id, network.clone());
|
||||
assert_ok!(GhostNetworks::update_network_rate_limit_delay(
|
||||
RuntimeOrigin::signed(UpdaterAccount::get()),
|
||||
chain_id, new_rate_limit_delay));
|
||||
System::assert_last_event(RuntimeEvent::GhostNetworks(
|
||||
crate::Event::NetworkRateLimitDelayUpdated {
|
||||
chain_id,
|
||||
rate_limit_delay: new_rate_limit_delay }));
|
||||
let mut final_network = network.clone();
|
||||
final_network.rate_limit_delay = new_rate_limit_delay;
|
||||
assert_eq!(Networks::<Test>::get(chain_id), Some(final_network.clone()));
|
||||
assert_ne!(network, final_network);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn could_update_network_block_distance_from_authority_account() {
|
||||
ExtBuilder::build()
|
||||
@ -329,6 +351,29 @@ fn could_not_update_network_finality_delay_from_random_account() {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn could_not_update_network_rate_limit_delay_from_random_account() {
|
||||
ExtBuilder::build()
|
||||
.execute_with(|| {
|
||||
let (chain_id, network) = prepare_network_data();
|
||||
let rate_limit_delay = 1337;
|
||||
register_and_check_network(chain_id, network.clone());
|
||||
assert_err!(GhostNetworks::update_network_rate_limit_delay(
|
||||
RuntimeOrigin::signed(RegistererAccount::get()),
|
||||
chain_id, rate_limit_delay),
|
||||
DispatchError::BadOrigin);
|
||||
assert_err!(GhostNetworks::update_network_rate_limit_delay(
|
||||
RuntimeOrigin::signed(RemoverAccount::get()),
|
||||
chain_id, rate_limit_delay),
|
||||
DispatchError::BadOrigin);
|
||||
assert_err!(GhostNetworks::update_network_rate_limit_delay(
|
||||
RuntimeOrigin::signed(RandomAccount::get()),
|
||||
chain_id, rate_limit_delay),
|
||||
DispatchError::BadOrigin);
|
||||
assert_eq!(Networks::<Test>::get(chain_id), Some(network));
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn could_not_update_network_release_delay_from_random_account() {
|
||||
ExtBuilder::build()
|
||||
@ -504,6 +549,20 @@ fn could_not_update_finality_delay_for_non_existent_network() {
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn could_not_update_rate_limit_delay_for_non_existent_network() {
|
||||
ExtBuilder::build()
|
||||
.execute_with(|| {
|
||||
let chain_id: u32 = 1;
|
||||
assert_eq!(Networks::<Test>::get(chain_id), None);
|
||||
assert_err!(GhostNetworks::update_network_rate_limit_delay(
|
||||
RuntimeOrigin::signed(UpdaterAccount::get()),
|
||||
chain_id, 1337),
|
||||
crate::Error::<Test>::NetworkDoesNotExist);
|
||||
assert_eq!(Networks::<Test>::get(chain_id), None);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn could_not_update_release_delay_for_non_existent_network() {
|
||||
ExtBuilder::build()
|
||||
|
@ -53,6 +53,7 @@ pub trait WeightInfo {
|
||||
fn update_network_name(n: u32, ) -> Weight;
|
||||
fn update_network_endpoint(n: u32, ) -> Weight;
|
||||
fn update_network_finality_delay() -> Weight;
|
||||
fn update_network_rate_limit_delay() -> Weight;
|
||||
fn update_network_block_distance() -> Weight;
|
||||
fn update_network_type() -> Weight;
|
||||
fn update_network_gatekeeper() -> Weight;
|
||||
@ -125,6 +126,18 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
|
||||
}
|
||||
/// Storage: `GhostNetworks::Networks` (r:1 w:1)
|
||||
/// Proof: `GhostNetworks::Networks` (`max_values`: None, `max_size`: None, mode: `Measured`)
|
||||
fn update_network_rate_limit_delay() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `294`
|
||||
// Estimated: `3759`
|
||||
// Minimum execution time: 48_107_000 picoseconds.
|
||||
Weight::from_parts(48_993_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3759))
|
||||
.saturating_add(T::DbWeight::get().reads(1))
|
||||
.saturating_add(T::DbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `GhostNetworks::Networks` (r:1 w:1)
|
||||
/// Proof: `GhostNetworks::Networks` (`max_values`: None, `max_size`: None, mode: `Measured`)
|
||||
fn update_network_block_distance() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `294`
|
||||
@ -270,6 +283,18 @@ impl WeightInfo for () {
|
||||
}
|
||||
/// Storage: `GhostNetworks::Networks` (r:1 w:1)
|
||||
/// Proof: `GhostNetworks::Networks` (`max_values`: None, `max_size`: None, mode: `Measured`)
|
||||
fn update_network_rate_limit_delay() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `294`
|
||||
// Estimated: `3759`
|
||||
// Minimum execution time: 48_107_000 picoseconds.
|
||||
Weight::from_parts(48_993_000, 0)
|
||||
.saturating_add(Weight::from_parts(0, 3759))
|
||||
.saturating_add(RocksDbWeight::get().reads(1))
|
||||
.saturating_add(RocksDbWeight::get().writes(1))
|
||||
}
|
||||
/// Storage: `GhostNetworks::Networks` (r:1 w:1)
|
||||
/// Proof: `GhostNetworks::Networks` (`max_values`: None, `max_size`: None, mode: `Measured`)
|
||||
fn update_network_block_distance() -> Weight {
|
||||
// Proof Size summary in bytes:
|
||||
// Measured: `294`
|
||||
|
Loading…
Reference in New Issue
Block a user