This is a simple counter contract that allows users to increment its value.
This contract has a state variable val
that persists between contract calls - the counter value. When persisted, this variable is encoded as uint32
- a 32-bit unsigned integer. Contracts pay rent in proportion to the amount of persistent space they consume, so compact representations are encouraged.
State variables should be initialized in init()
that runs on deployment of the contract.
This contract can receive messages from users.
Unlike getters that are just read-only, messages can do write operations and change the contract's persistent state. Incoming messages are processed in receive()
methods as transactions and cost gas for the sender.
After deploying the contract, send the increment
message by pressing the Send increment button in order to increase the counter value by one. Afterwards, call the getter value()
to see that the value indeed changed.
// this trait has to be imported import "@stdlib/deploy"; // the Deployable trait adds a default receiver for the "Deploy" message contract Counter with Deployable { val: Int as uint32; init() { self.val = 0; } receive("increment") { self.val = self.val + 1; } get fun value(): Int { return self.val; } }