1. A property to check the initial balance of a new account

What should be the balance of a new address? Write a property to check that this is indeed the balance of a new address. You can write your property (or rule) in src/certora/spec.rs inside the function init_balance. We have already provided the right signature for this rule.

Once you have written the rule, you can run Certora Sunbeam to check it by running:

certoraRun confs/exercise1.conf
Hint

You’ll need to use require!(CONDITION, "address must not exists"); to ensure the address does not already exist.

Solution
// Exercise 1
#[rule]
fn init_balance(e: Env, addr: Address) {
    // precondition macro
    cvt::require!(!e.storage().persistent().has(&addr), "address must not exists");
    let balance = Token::balance(&e, addr);
    // use this macro to see additional information in the calltrace
    cvt_cex_print_i64!("value of balance is:", balance); 
    // postcondition macro
    cvt::assert!(balance == 0);
}