#pragma version 8
// Handle each possible OnCompletion type. We don't have to worry about
// handling ClearState, as that's in the clear program
txn OnCompletion
int NoOp
==
bnz handle_noop
txn OnCompletion
int OptIn
==
bnz handle_optin
txn OnCompletion
int CloseOut
==
bnz handle_closeout
txn OnCompletion
int UpdateApplication
==
bnz handle_updateapp
txn OnCompletion
int DeleteApplication
==
bnz handle_deleteapp
// Unexpected OnCompletion value. Should be unreachable.
err
handle_noop:
// Handle NoOp
// Check if this is the creation call
txn ApplicationID
int 0
==
bnz handle_creation
// Otherwise, must be an increment or decrement call
// Get the first argument
txna ApplicationArgs 0
byte "inc"
==
bnz handle_increment
txna ApplicationArgs 0
byte "dec"
==
bnz handle_decrement
// Unrecognized operation
err
handle_creation:
// Initialize counter to 0
byte "counter"
int 0
app_global_put
int 1
return
handle_optin:
// Always allow opt in
int 1
return
handle_closeout:
// Always allow close out
int 1
return
handle_updateapp:
// Only allow creator to update
txn Sender
global CreatorAddress
==
return
handle_deleteapp:
// Only allow creator to delete
txn Sender
global CreatorAddress
==
return
handle_increment:
// Increment the counter
byte "counter"
byte "counter"
app_global_get
int 1
+
app_global_put
int 1
return
handle_decrement:
// Decrement the counter
byte "counter"
byte "counter"
app_global_get
int 1
-
app_global_put
int 1
return