Арифметика меток времени в субстрате - PullRequest
1 голос
/ 10 июля 2019

Я могу получить текущую метку времени как <timestamp::Module<T>>::get() в модуле времени выполнения подложки.

Как я могу выполнить с ним основную арифметику (сложение, вычитание)?

decl_module! {
  pub struct Module<T: Trait> for enum Call where origin: T::Origin {
    fn deposit_event<T>() = default;

    pub fn func1(origin) -> Result {
      let now = <timestamp::Module<T>>::get();
      const DURATION = 60 * 5;
      // what is the proper way of performing the following operation?
      // let future = now + DURATION; 

      // At some point in future, can I perform the following comparison?
      if now > future { 
        // ... some code 
      }
    }
  }
}

Дальнейший вопрос :

Это поднимает вопрос Iя не уверен насчет Rust / Rust doc.Тип T::Moment должен иметь черту SimpleArithmetic, что в свою очередь требует, чтобы тип имел черту TryInto<u32>.

Так что это должно работать,

let tmp: u32 = DURATION + now.try_into()?;

но на самом деле возвращается:

error[E0277]: cannot add `()` to `u32`
| no implementation for `u32 + ()`
|
= help: the trait `core::ops::Add<()>` is not implemented for `u32`

error[E0271]: type mismatch resolving `<() as core::convert::TryFrom<<T as srml_timestamp::Trait>::Moment>>::Error == &str`
| note: expected type `core::convert::Infallible`
=               found type `&str`

Дальнейший вопрос - 2

По сути, я прошел эту тему .Не могли бы вы опубликовать пример, как конвертировать из Timestamp в u32 / u64 и из u32 / u64 в Timestamp, и какие дополнительные модули необходимо ввести?

Спасибо.

1 Ответ

1 голос
/ 10 июля 2019

Я не смог понять, как использовать into(), try_into(), from(), try_from().

Но из примера Шона и того, что сказал Брайан, чтобы избежать, я могу легко конвертировать метку времени в u64: now.as_().

Если кто-нибудь сможет показать мне ответ, используя into(), from() или его вариант, я буду рад обновить эту ветку и пометить ее как правильный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...