sophia/test/contracts/spend_test.aes
Ulf Norell 5aed8b3ef5 Check stateful annotations
Functions must be annotated as `stateful` in order to
- Update the contract state (using `put`)
- Call `Chain.spend` or other primitive functions that cost tokens
- Call an Oracle or AENS function that requires a signature
- Make a remote call with a non-zero value
- Construct a lambda calling a stateful function

It does not need to be stateful to
- Read the contract state
- Call another contract with value=0, even when the remote function is stateful
2019-05-13 13:39:17 +02:00

27 lines
607 B
Plaintext

contract SpendContract =
function withdraw : (int) => int
contract SpendTest =
stateful function spend(to, amount) =
let total = Contract.balance
Chain.spend(to, amount)
total - amount
stateful function withdraw(amount) : int =
spend(Call.caller, amount)
stateful function withdraw_from(account, amount) =
account.withdraw(amount)
withdraw(amount)
stateful function spend_from(from, to, amount) =
from.withdraw(amount)
Chain.spend(to, amount)
Chain.balance(to)
function get_balance() = Contract.balance
function get_balance_of(a) = Chain.balance(a)