基板中的时间戳算法

时间:2019-07-10 04:23:18

标签: substrate

我可以在基板运行时模块中将当前时间戳记为<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 
      }
    }
  }
}

其他问题

这带来了一个我不确定Rust / Rust文档的问题。类型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

基本上,我经历了this thread。您能否发布一个示例,说明如何从Timestamp转换为u32 / u64,以及如何从u32 / u64转换为Timestamp,还有哪些其他方法需要引入模块吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我无法弄清楚如何使用into()try_into()from()try_from()

但是从Shawn的例子以及Bryan所说的避免的地方,我可以通过now.as_()轻松地将时间戳转换为u64。

如果任何人都可以使用into()from()或其变体向我显示答案,我将很乐意更新此线程并将其标记为正确答案。