Add Auth.tx_hash - namespace + primop #544

Merged
zxq9 merged 3 commits from generalized_accounts into master 2019-04-08 21:45:56 +09:00
2 changed files with 21 additions and 1 deletions
Showing only changes of commit d6a55e144e - Show all commits

View File

@ -97,7 +97,8 @@ compilable_contracts() ->
"variant_types", "variant_types",
"state_handling", "state_handling",
"events", "events",
"include" "include",
"basic_auth"
]. ].
%% Contracts that should produce type errors %% Contracts that should produce type errors

View File

@ -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)