From e8260e3c2396636313561974c35c915f4101ad26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marin=20Ver=C5=A1i=C4=87?= Date: Fri, 12 Jul 2024 11:40:07 +0200 Subject: [PATCH] fix: replace Duration with u64 in schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marin Veršić --- .../mint_rose_trigger_args/src/lib.rs | 1 - configs/swarm/executor.wasm | Bin 486679 -> 486162 bytes core/src/smartcontracts/isi/triggers/mod.rs | 33 ++-- core/src/state.rs | 33 +++- core/src/sumeragi/main_loop.rs | 3 + core/src/sumeragi/mod.rs | 4 + data_model/src/block.rs | 2 +- data_model/src/events/time.rs | 143 +++++++++++------- data_model/src/transaction.rs | 10 +- docs/source/references/schema.json | 28 ++-- schema/gen/src/lib.rs | 7 +- schema/src/lib.rs | 25 --- tools/parity_scale_cli/src/main.rs | 1 - 13 files changed, 158 insertions(+), 132 deletions(-) diff --git a/client/tests/integration/smartcontracts/mint_rose_trigger_args/src/lib.rs b/client/tests/integration/smartcontracts/mint_rose_trigger_args/src/lib.rs index eda3d291902..41a35db8a6b 100644 --- a/client/tests/integration/smartcontracts/mint_rose_trigger_args/src/lib.rs +++ b/client/tests/integration/smartcontracts/mint_rose_trigger_args/src/lib.rs @@ -10,7 +10,6 @@ use core::str::FromStr as _; use executor_custom_data_model::mint_rose_args::MintRoseArgs; use iroha_trigger::{debug::dbg_panic, prelude::*}; use lol_alloc::{FreeListAllocator, LockedAllocator}; -use serde::{Deserialize, Serialize}; #[global_allocator] static ALLOC: LockedAllocator = LockedAllocator::new(FreeListAllocator::new()); diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index 22eeb3f283fe5bb60e8435ff5cb5401a771f430b..1cc29162a859aa591baab49ee96b9eb15b7a5b06 100644 GIT binary patch delta 102146 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

(lxsb@%7>>jfi7bvyFdA=zO=&!_ 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�Sis_wDsZZq5% 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 diff --git a/core/src/smartcontracts/isi/triggers/mod.rs b/core/src/smartcontracts/isi/triggers/mod.rs index a6950a792ab..7ca827de9fa 100644 --- a/core/src/smartcontracts/isi/triggers/mod.rs +++ b/core/src/smartcontracts/isi/triggers/mod.rs @@ -13,8 +13,6 @@ pub mod specialized; /// - TODO: authorities. /// - TODO: authority permissions. pub mod isi { - use std::time::Duration; - use iroha_data_model::{ events::EventFilter, isi::error::{InvalidParameterError, RepetitionError}, @@ -42,11 +40,15 @@ pub mod isi { } let last_block_estimation = state_transaction.latest_block().map(|block| { - block.header().creation_time() - + Duration::from_millis(block.header().consensus_estimation_ms) + block.header().creation_time() + block.header().consensus_estimation() }); let engine = state_transaction.engine.clone(); // Cloning engine is cheap + let genesis_creation_time_ms = state_transaction + .world() + .genesis_creation_time_ms() + .expect("INTERNAL BUG: genesis creation time not set"); + let triggers = &mut state_transaction.world.triggers; let trigger_id = new_trigger.id().clone(); let success = match &new_trigger.action.filter { @@ -65,20 +67,21 @@ pub mod isi { TriggeringEventFilterBox::Time(time_filter) => { if let ExecutionTime::Schedule(schedule) = time_filter.0 { match last_block_estimation { - // We're in genesis + // Gensis block None => { - return Err(Error::InvalidParameter( - InvalidParameterError::TimeTriggerInThePast, - )); + if schedule.start_ms < genesis_creation_time_ms { + return Err(Error::InvalidParameter( + InvalidParameterError::TimeTriggerInThePast, + )); + } } - Some(latest_block_estimation) - if schedule.start < latest_block_estimation => - { - return Err(Error::InvalidParameter( - InvalidParameterError::TimeTriggerInThePast, - )); + Some(latest_block_estimation) => { + if schedule.start() < latest_block_estimation { + return Err(Error::InvalidParameter( + InvalidParameterError::TimeTriggerInThePast, + )); + } } - Some(_) => (), } } triggers.add_time_trigger( diff --git a/core/src/state.rs b/core/src/state.rs index 8575de56543..4b138674fd8 100644 --- a/core/src/state.rs +++ b/core/src/state.rs @@ -121,6 +121,8 @@ pub struct WorldBlock<'world> { pub(crate) executor_data_model: CellBlock<'world, ExecutorDataModel>, /// Events produced during execution of block events_buffer: Vec, + + pub(crate) genesis_creation_time_ms: Option, } /// Struct for single transaction's aggregated changes @@ -155,6 +157,8 @@ pub struct WorldTransaction<'block, 'world> { pub(crate) executor_data_model: CellTransaction<'block, 'world, ExecutorDataModel>, /// Events produced during execution of a transaction events_buffer: TransactionEventBuffer<'block>, + + pub(crate) genesis_creation_time_ms: Option, } /// Wrapper for event's buffer to apply transaction rollback @@ -193,6 +197,8 @@ pub struct WorldView<'world> { pub(crate) executor: CellView<'world, Executor>, /// Executor-defined data model pub(crate) executor_data_model: CellView<'world, ExecutorDataModel>, + + pub(crate) genesis_creation_time_ms: Option, } /// Current state of the blockchain @@ -356,6 +362,8 @@ impl World { executor: self.executor.block(), executor_data_model: self.executor_data_model.block(), events_buffer: Vec::new(), + + genesis_creation_time_ms: None, } } @@ -376,6 +384,8 @@ impl World { executor: self.executor.block_and_revert(), executor_data_model: self.executor_data_model.block_and_revert(), events_buffer: Vec::new(), + + genesis_creation_time_ms: None, } } @@ -395,6 +405,8 @@ impl World { triggers: self.triggers.view(), executor: self.executor.view(), executor_data_model: self.executor_data_model.view(), + + genesis_creation_time_ms: None, } } } @@ -416,6 +428,8 @@ pub trait WorldReadOnly { fn executor(&self) -> &Executor; fn executor_data_model(&self) -> &ExecutorDataModel; + fn genesis_creation_time_ms(&self) -> Option; + // Domain-related methods /// Get `Domain` without an ability to modify it. @@ -698,6 +712,10 @@ macro_rules! impl_world_ro { fn executor_data_model(&self) -> &ExecutorDataModel { &self.executor_data_model } + + fn genesis_creation_time_ms(&self) -> Option { + self.genesis_creation_time_ms + } } )*}; } @@ -710,6 +728,8 @@ impl<'world> WorldBlock<'world> { /// Create struct to apply transaction's changes pub fn trasaction(&mut self) -> WorldTransaction<'_, 'world> { WorldTransaction { + genesis_creation_time_ms: self.genesis_creation_time_ms(), + parameters: self.parameters.transaction(), trusted_peers_ids: self.trusted_peers_ids.transaction(), domains: self.domains.transaction(), @@ -1367,16 +1387,13 @@ impl<'state> StateBlock<'state> { let prev_interval = self.latest_block().map(|latest_block| { let header = &latest_block.as_ref().header(); - TimeInterval { - since: header.creation_time(), - length: header.consensus_estimation(), - } + TimeInterval::new(header.creation_time(), header.consensus_estimation()) }); - let interval = TimeInterval { - since: block.as_ref().header().creation_time(), - length: block.as_ref().header().consensus_estimation(), - }; + let interval = TimeInterval::new( + block.as_ref().header().creation_time(), + block.as_ref().header().consensus_estimation(), + ); TimeEvent { prev_interval, diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index 45e41276a5c..c368f48afd2 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -226,6 +226,8 @@ impl Sumeragi { }; let mut state_block = state.block(); + state_block.world.genesis_creation_time_ms = + Some(block.header().creation_time_ms); let block = match ValidBlock::validate( block, &self.topology, @@ -289,6 +291,7 @@ impl Sumeragi { } let mut state_block = state.block(); + state_block.world.genesis_creation_time_ms = Some(genesis.0.header().creation_time_ms); let genesis = ValidBlock::validate( genesis.0, &self.topology, diff --git a/core/src/sumeragi/mod.rs b/core/src/sumeragi/mod.rs index 42a7921a617..fd098c005dc 100644 --- a/core/src/sumeragi/mod.rs +++ b/core/src/sumeragi/mod.rs @@ -82,6 +82,10 @@ impl SumeragiHandle { // NOTE: topology need to be updated up to block's view_change_index topology.nth_rotation(block.header().view_change_index as usize); + if block.header().is_genesis() { + state_block.world.genesis_creation_time_ms = Some(block.header().creation_time_ms); + } + let block = ValidBlock::validate( block.clone(), topology, diff --git a/data_model/src/block.rs b/data_model/src/block.rs index b9b60110e86..9a5c21b3824 100644 --- a/data_model/src/block.rs +++ b/data_model/src/block.rs @@ -295,7 +295,7 @@ impl SignedBlock { .expect("Tree is not empty"); let first_transaction = &genesis_transactions[0]; let creation_time_ms = u64::try_from(first_transaction.creation_time().as_millis()) - .expect("Must fit since Duration was created from u64 in creation_time()"); + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"); let header = BlockHeader { height: nonzero!(1_u64), prev_block_hash: None, diff --git a/data_model/src/events/time.rs b/data_model/src/events/time.rs index 46bd80e5bc8..e01c101b464 100644 --- a/data_model/src/events/time.rs +++ b/data_model/src/events/time.rs @@ -99,9 +99,9 @@ mod model { )] pub struct Schedule { /// The first execution time - pub start: Duration, + pub start_ms: u64, /// If some, the period between cyclic executions - pub period: Option, + pub period_ms: Option, } /// Time interval in which `TimeAction` should appear @@ -113,7 +113,6 @@ mod model { Eq, PartialOrd, Ord, - Getters, Decode, Encode, Deserialize, @@ -121,13 +120,12 @@ mod model { IntoSchema, )] // TODO: Figure out how to serialize duration - // #[getset(get = "pub")] #[ffi_type] pub struct TimeInterval { /// The start of a time interval - pub since: Duration, + pub since_ms: u64, /// The length of a time interval - pub length: Duration, + pub length_ms: u64, } } @@ -145,7 +143,7 @@ impl EventFilter for TimeEventFilter { ExecutionTime::PreCommit => 1, ExecutionTime::Schedule(schedule) => { // Prevent matching in the future it will be handled by the next block - if schedule.start > event.interval.since { + if schedule.start() > event.interval.since() { return 0; } @@ -175,15 +173,15 @@ impl EventFilter for TimeEventFilter { // // Schedule start is after current block (c1). // In this case event won't match and it will be handled in the next block. - let since = if Range::from(prev).contains(&schedule.start) { - schedule.start + let since = if Range::from(prev).contains(&schedule.start()) { + schedule.start() } else { - prev.since + prev.length + prev.since() + prev.length() }; - let estimation = event.interval.since + event.interval.length; + let estimation = event.interval.since() + event.interval.length(); let length = estimation - since; - TimeInterval { since, length } + TimeInterval::new(since, length) }); count_matches_in_interval(schedule, ¤t_interval) @@ -194,7 +192,10 @@ impl EventFilter for TimeEventFilter { fn mintable(&self) -> bool { !matches!( self.0, - ExecutionTime::Schedule(Schedule { period: None, .. }) + ExecutionTime::Schedule(Schedule { + period_ms: None, + .. + }) ) } } @@ -202,16 +203,20 @@ impl EventFilter for TimeEventFilter { /// Count something with the `schedule` within the `interval` #[cfg(feature = "transparent_api")] fn count_matches_in_interval(schedule: &Schedule, interval: &TimeInterval) -> u32 { - schedule.period.map_or_else( - || u32::from(Range::from(*interval).contains(&schedule.start)), + schedule.period().map_or_else( + || u32::from(Range::from(*interval).contains(&schedule.start())), |period| { #[allow(clippy::integer_division)] - let k = interval.since.saturating_sub(schedule.start).as_millis() / period.as_millis(); - let start = schedule.start + multiply_duration_by_u128(period, k); + let k = interval + .since() + .saturating_sub(schedule.start()) + .as_millis() + / period.as_millis(); + let start = schedule.start() + multiply_duration_by_u128(period, k); let range = Range::from(*interval); (0..) .map(|i| start + period * i) - .skip_while(|time| *time < interval.since) + .skip_while(|time| *time < interval.since()) .take_while(|time| range.contains(time)) .count() .try_into() @@ -248,38 +253,70 @@ impl Schedule { /// Create new [`Schedule`] starting at `start` and without period #[must_use] #[inline] - pub const fn starting_at(start: Duration) -> Self { + pub fn starting_at(start: Duration) -> Self { Self { - start, - period: None, + start_ms: start + .as_millis() + .try_into() + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"), + period_ms: None, } } /// Add `period` to `self` #[must_use] #[inline] - pub const fn with_period(mut self, period: Duration) -> Self { - self.period = Some(period); + pub fn with_period(mut self, period: Duration) -> Self { + self.period_ms = Some( + period + .as_millis() + .try_into() + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"), + ); self } + + /// Instant of the first execution + pub fn start(&self) -> Duration { + Duration::from_millis(self.start_ms) + } + + /// Period of repeated executions + pub fn period(&self) -> Option { + self.period_ms.map(Duration::from_millis) + } } impl TimeInterval { - /// Getter for `since` - pub fn since(&self) -> &Duration { - &self.since + /// Create new [`Self`] + pub fn new(since: Duration, length: Duration) -> Self { + Self { + since_ms: since + .as_millis() + .try_into() + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"), + length_ms: length + .as_millis() + .try_into() + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"), + } + } + + /// Instant of the previous execution + pub fn since(&self) -> Duration { + Duration::from_millis(self.since_ms) } - /// Getter for `length` - pub fn length(&self) -> &Duration { - &self.length + /// Time since the previous execution + pub fn length(&self) -> Duration { + Duration::from_millis(self.length_ms) } } impl From for Range { #[inline] fn from(interval: TimeInterval) -> Self { - interval.since..interval.since + interval.length + interval.since()..interval.since() + interval.length() } } @@ -310,7 +347,7 @@ mod tests { let schedule = Schedule::starting_at(Duration::from_secs(TIMESTAMP - 5)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 0); } @@ -323,7 +360,7 @@ mod tests { let schedule = Schedule::starting_at(Duration::from_secs(TIMESTAMP)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 1); } @@ -335,7 +372,7 @@ mod tests { let schedule = Schedule::starting_at(Duration::from_secs(TIMESTAMP + 5)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 1); } @@ -348,7 +385,7 @@ mod tests { let schedule = Schedule::starting_at(Duration::from_secs(TIMESTAMP + 10)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 0); } @@ -361,7 +398,7 @@ mod tests { .with_period(Duration::from_secs(30)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 1); } @@ -374,7 +411,7 @@ mod tests { .with_period(Duration::from_secs(10)); let since = Duration::from_secs(TIMESTAMP + 35); let length = Duration::from_secs(4); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 0); } @@ -387,7 +424,7 @@ mod tests { .with_period(Duration::from_secs(6)); let since = Duration::from_secs(TIMESTAMP - 10); let length = Duration::from_secs(4); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 0); } @@ -400,7 +437,7 @@ mod tests { .with_period(Duration::from_secs(6)); let since = Duration::from_secs(TIMESTAMP - 10); let length = Duration::from_secs(30); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 4); } @@ -413,7 +450,7 @@ mod tests { .with_period(Duration::from_millis(600)); let since = Duration::from_secs(TIMESTAMP + 3) + Duration::from_millis(500); let length = Duration::from_secs(2); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 4); } @@ -427,7 +464,7 @@ mod tests { .with_period(Duration::from_secs(10)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(5); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 1); } @@ -441,7 +478,7 @@ mod tests { .with_period(Duration::from_secs(5)); let since = Duration::from_secs(TIMESTAMP - 10); let length = Duration::from_secs(15); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 1); } @@ -455,7 +492,7 @@ mod tests { .with_period(Duration::from_secs(15)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(5); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 0); } @@ -469,7 +506,7 @@ mod tests { .with_period(Duration::from_secs(1)); let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(7); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); assert_eq!(count_matches_in_interval(&schedule, &interval), 7); } } @@ -490,11 +527,11 @@ mod tests { let since = Duration::from_secs(TIMESTAMP + 5); let length = Duration::from_secs(10); - let prev_interval = TimeInterval { since, length }; + let prev_interval = TimeInterval::new(since, length); let since = Duration::from_secs(TIMESTAMP + 25); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); let event = TimeEvent { prev_interval: Some(prev_interval), @@ -516,11 +553,11 @@ mod tests { let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let prev_interval = TimeInterval { since, length }; + let prev_interval = TimeInterval::new(since, length); let since = Duration::from_secs(TIMESTAMP + 20); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); let event = TimeEvent { prev_interval: Some(prev_interval), @@ -542,11 +579,11 @@ mod tests { let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let prev_interval = TimeInterval { since, length }; + let prev_interval = TimeInterval::new(since, length); let since = Duration::from_secs(TIMESTAMP + 20); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); let event = TimeEvent { prev_interval: Some(prev_interval), @@ -568,11 +605,11 @@ mod tests { let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let prev_interval = TimeInterval { since, length }; + let prev_interval = TimeInterval::new(since, length); let since = Duration::from_secs(TIMESTAMP + 20); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); let event = TimeEvent { prev_interval: Some(prev_interval), @@ -594,11 +631,11 @@ mod tests { let since = Duration::from_secs(TIMESTAMP); let length = Duration::from_secs(10); - let prev_interval = TimeInterval { since, length }; + let prev_interval = TimeInterval::new(since, length); let since = Duration::from_secs(TIMESTAMP + 20); let length = Duration::from_secs(10); - let interval = TimeInterval { since, length }; + let interval = TimeInterval::new(since, length); let event = TimeEvent { prev_interval: Some(prev_interval), diff --git a/data_model/src/transaction.rs b/data_model/src/transaction.rs index 19a5b97c60a..cc55718e155 100644 --- a/data_model/src/transaction.rs +++ b/data_model/src/transaction.rs @@ -635,7 +635,7 @@ mod http { .get_unix_time() .as_millis() .try_into() - .expect("Unix timestamp exceedes u64::MAX"); + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"); Self::new_with_time(chain_id, authority, creation_time_ms) } @@ -652,7 +652,7 @@ mod http { .expect("Failed to get the current system time") .as_millis() .try_into() - .expect("Unix timestamp exceedes u64::MAX"); + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"); Self::new_with_time(chain_id, authority, creation_time_ms) } } @@ -700,7 +700,7 @@ mod http { let ttl: u64 = time_to_live .as_millis() .try_into() - .expect("Unix timestamp exceedes u64::MAX"); + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"); self.payload.time_to_live_ms = if ttl == 0 { // TODO: This is not correct, 0 is not the same as None @@ -714,8 +714,8 @@ mod http { /// Set creation time of transaction pub fn set_creation_time(&mut self, value: Duration) -> &mut Self { - self.payload.creation_time_ms = - u64::try_from(value.as_millis()).expect("should never exceed u64"); + self.payload.creation_time_ms = u64::try_from(value.as_millis()) + .expect("INTERNAL BUG: Unix timestamp exceedes u64::MAX"); self } diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 65ed5f1a562..41442085923 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -1282,12 +1282,6 @@ } ] }, - "Duration": { - "Tuple": [ - "u64", - "u32" - ] - }, "EventBox": { "Enum": [ { @@ -2577,9 +2571,6 @@ "Option": { "Option": "DomainId" }, - "Option": { - "Option": "Duration" - }, "Option>": { "Option": "HashOf" }, @@ -2631,6 +2622,9 @@ "Option": { "Option": "u32" }, + "Option": { + "Option": "u64" + }, "Pagination": { "Struct": [ { @@ -3535,12 +3529,12 @@ "Schedule": { "Struct": [ { - "name": "start", - "type": "Duration" + "name": "start_ms", + "type": "u64" }, { - "name": "period", - "type": "Option" + "name": "period_ms", + "type": "Option" } ] }, @@ -3935,12 +3929,12 @@ "TimeInterval": { "Struct": [ { - "name": "since", - "type": "Duration" + "name": "since_ms", + "type": "u64" }, { - "name": "length", - "type": "Duration" + "name": "length_ms", + "type": "u64" } ] }, diff --git a/schema/gen/src/lib.rs b/schema/gen/src/lib.rs index 0b8fb381f22..35863e48322 100644 --- a/schema/gen/src/lib.rs +++ b/schema/gen/src/lib.rs @@ -170,7 +170,6 @@ types!( DomainEventSet, DomainId, DomainOwnerChanged, - Duration, EventBox, EventFilterBox, EventMessage, @@ -281,7 +280,6 @@ types!( Option, Option, Option, - Option, Option>, Option>, Option, @@ -443,10 +441,7 @@ pub mod complete_data_model { //! Complete set of types participating in the schema pub use core::num::{NonZeroU32, NonZeroU64}; - pub use std::{ - collections::{BTreeMap, BTreeSet, HashMap, HashSet}, - time::Duration, - }; + pub use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; pub use iroha_crypto::*; pub use iroha_data_model::{ diff --git a/schema/src/lib.rs b/schema/src/lib.rs index 8d1736d04d2..f3047a14aae 100644 --- a/schema/src/lib.rs +++ b/schema/src/lib.rs @@ -506,31 +506,6 @@ impl IntoSchema for btree_set::BTreeSet { } } -impl TypeId for core::time::Duration { - fn id() -> String { - "Duration".to_owned() - } -} -impl IntoSchema for core::time::Duration { - fn type_name() -> String { - "Duration".to_owned() - } - // Look at: https://docs.rs/parity-scale-codec/2.1.1/src/parity_scale_codec/codec.rs.html#1182-1192 - fn update_schema_map(map: &mut MetaMap) { - if !map.contains_key::() { - map.insert::(Metadata::Tuple(UnnamedFieldsMeta { - types: vec![ - core::any::TypeId::of::(), - core::any::TypeId::of::(), - ], - })); - - u32::update_schema_map(map); - u64::update_schema_map(map); - } - } -} - impl TypeId for [T; L] { fn id() -> String { format!("Array<{}, {}>", T::id(), L) diff --git a/tools/parity_scale_cli/src/main.rs b/tools/parity_scale_cli/src/main.rs index 06ff793d7d4..c68cb4c8589 100644 --- a/tools/parity_scale_cli/src/main.rs +++ b/tools/parity_scale_cli/src/main.rs @@ -9,7 +9,6 @@ use std::{ io::{BufRead, BufReader, BufWriter, Read, Write}, marker::PhantomData, path::PathBuf, - time::Duration, }; use clap::Parser;