3

我想在每次函数调用后更新 block_timestamp。这就是我在测试中的每个函数调用后更新上下文的方式。

#[test]
    fn set_then_get_greeting() {
        let context = get_context(vec![], false);
        testing_env!(context);
        let mut contract = Welcome::new();
        contract.set_record("7dd".to_owned());
        let context = get_context(vec![], false);
        testing_env!(context);
        contract.update_record("7dd".to_owned());
        
    }

但是在状态更新时会出现以下错误:

panicked at 'called `Result::unwrap()` on an `Err` value: InconsistentStateError(IntegerOverflow)'

如何使用每个函数调用更新 block_timestamp?

代码:https ://gateway.ipfs.io/ipfs/QmTNHuRryBoDmTp7wqmNsCcJW8Gu7G6dz3cE3F4pynv6V9

4

2 回答 2

2

不确定get_context在做什么,但您可以在调用之前修改上下文testing_env!,然后传递克隆副本。

例如:

#[test]
    fn set_then_get_greeting() {
        let mut context = get_context(vec![], false);
        testing_env!(context.clone());

        let mut contract = Welcome::new();
        contract.set_record("7dd".to_owned());

        context.block_timestamp += 1000;
        testing_env!(context.clone());

        contract.update_record("7dd".to_owned());
    }

您看到的错误可能与 无关,context因为它抱怨状态不一致,这可能意味着持久性集合出现了问题。

于 2020-08-15T16:50:38.113 回答
1

错误是因为storage_usage被设置为零。将其设置为大数字可以解决它。

https://github.com/near/near-sdk-rs/issues/216

于 2020-09-01T17:48:05.470 回答