Please help audit the contract code

I’ve already tried to help you understand how Chain.spend works - here: Contract transfer problem

But in essence:

    // deposit ae into the contract
    Chain.spend(Contract.address, Call.value)

Will move tokens from Contract.address to Contract.address so it seems pretty pointless.

And then:

// if(account.time <Chain.timestamp)
      Chain.spend(Call.caller, account.number)

will move tokens to Call.caller not sure that is what you intended either…