Files
Vanillae/libs/sidekick/scratch/examples_old/contract-examples/crypto_hamster.aes
T

77 lines
2.2 KiB
Plaintext

@compiler >= 6
include "String.aes"
contract CryptoHamster =
record state = {
index : int,
map_hamsters : map(string, hamster),
testvalue: int}
record hamster = {
id : int,
name : string,
dna : int}
stateful entrypoint init() =
{ index = 1,
map_hamsters = {},
testvalue = 42}
public entrypoint read_test_value() : int =
state.testvalue
public entrypoint return_caller() : address =
Call.caller
public entrypoint cause_error() : unit =
require(2 == 1, "require failed")
public stateful entrypoint add_test_value(one: int, two: int) : int =
put(state{testvalue = one + two})
one + two
public entrypoint locally_add_two(one: int, two: int) : int =
one + two
public stateful entrypoint statefully_add_two(one: int, two: int) : int=
put(state{testvalue = one + two})
state.testvalue
stateful entrypoint create_hamster(hamster_name: string) =
require(!name_exists(hamster_name), "Name is already taken")
let dna : int = generate_random_dna(hamster_name)
create_hamster_by_name_dna(hamster_name, dna)
entrypoint name_exists(name: string) : bool =
Map.member(name, state.map_hamsters)
entrypoint get_hamster_dna(name: string, test: option(int)) : int =
require(name_exists(name), "There is no hamster with that name!")
let needed_hamster : hamster = state.map_hamsters[name]
needed_hamster.dna
private stateful function create_hamster_by_name_dna(name: string, dna: int) =
let new_hamster : hamster = {
id = state.index,
name = name,
dna = dna}
put(state{map_hamsters[name] = new_hamster})
put(state{index = (state.index + 1)})
private function generate_random_dna(name: string) : int =
get_block_hash_bytes_as_int() - Chain.timestamp + state.index
private function get_block_hash_bytes_as_int() : int =
switch(Chain.block_hash(Chain.block_height - 1))
None => abort("blockhash not found")
Some(bytes) => Bytes.to_int(bytes)
entrypoint test(name: string) : hash =
String.sha3(name)