diff --git a/test/aeso_compiler_tests.erl b/test/aeso_compiler_tests.erl index f96feb7..c98db5a 100644 --- a/test/aeso_compiler_tests.erl +++ b/test/aeso_compiler_tests.erl @@ -97,7 +97,8 @@ compilable_contracts() -> "variant_types", "state_handling", "events", - "include" + "include", + "basic_auth" ]. %% Contracts that should produce type errors diff --git a/test/contracts/basic_auth.aes b/test/contracts/basic_auth.aes new file mode 100644 index 0000000..3ec9e55 --- /dev/null +++ b/test/contracts/basic_auth.aes @@ -0,0 +1,19 @@ +// Contract replicating "normal" Aeternity authentication +contract BasicAuth = + record state = { nonce : int, owner : address } + + function init() = { nonce = 1, owner = Call.caller } + + function authorize(n : int, s : signature) : bool = + require(n >= state.nonce, "Nonce too low") + require(n =< state.nonce, "Nonce too high") + put(state{ nonce = n + 1 }) + switch(Auth.tx_hash) + None => abort("Not in Auth context") + Some(tx_hash) => Crypto.ecverify(to_sign(tx_hash, n), state.owner, s) + + function to_sign(h : hash, n : int) = + Crypto.blake2b((h, n)) + + private function require(b : bool, err : string) = + if(!b) abort(err)