Add bytes(int), add address_literalsm add ecverify_secp25k1

hash -> bytes(32)
signature -> bytes(64)
address literals
This commit is contained in:
Hans Svensson
2019-04-12 13:20:05 +02:00
parent faa0ef9772
commit 4324bfd49e
17 changed files with 342 additions and 88 deletions
+18
View File
@@ -0,0 +1,18 @@
contract BitcoinAuth =
record state = { nonce : int, owner : bytes(64) }
function init(owner' : bytes(64)) = { nonce = 1, owner = owner' }
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_secp256k1(to_sign(tx_hash, n), state.owner, s)
function to_sign(h : hash, n : int) : hash =
Crypto.blake2b((h, n))
private function require(b : bool, err : string) =
if(!b) abort(err)