tx#0 load-globals
This commit is contained in:
parent
ce53c1346b
commit
200d3613e6
|
@ -0,0 +1,105 @@
|
||||||
|
#pragma version 5
|
||||||
|
// ================================================================================================
|
||||||
|
//
|
||||||
|
// Load global data in scratch space.
|
||||||
|
//
|
||||||
|
// (c) 2021 Randlabs, Inc.
|
||||||
|
//
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// This program allows us to load globals in a VAA-verification and process group transactions
|
||||||
|
//
|
||||||
|
// This must be the first transaction in group
|
||||||
|
//
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Global state:
|
||||||
|
//
|
||||||
|
// "gsexptime": Guardian set expiration time
|
||||||
|
// "gssize" : Guardian set size (number of items)
|
||||||
|
// key N: address of guardian N
|
||||||
|
//
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
// Stores in scratch:
|
||||||
|
// SLOT 255: number of guardians in set
|
||||||
|
// SLOT 0..n: key of guardian i
|
||||||
|
// ================================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
// Application creation.
|
||||||
|
int 0
|
||||||
|
txn ApplicationID
|
||||||
|
==
|
||||||
|
bnz handle_create
|
||||||
|
|
||||||
|
// Handle app call: store globals
|
||||||
|
|
||||||
|
txn OnCompletion
|
||||||
|
int NoOp
|
||||||
|
==
|
||||||
|
bnz handle_call
|
||||||
|
|
||||||
|
// Handle deletion.
|
||||||
|
|
||||||
|
txn OnCompletion
|
||||||
|
int DeleteApplication
|
||||||
|
==
|
||||||
|
bnz success
|
||||||
|
|
||||||
|
// Fail otherwise
|
||||||
|
err
|
||||||
|
|
||||||
|
|
||||||
|
handle_create:
|
||||||
|
// -----------------------------------------------------
|
||||||
|
// Handle creation
|
||||||
|
// -----------------------------------------------------
|
||||||
|
|
||||||
|
b success
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------------------------------
|
||||||
|
handle_call:
|
||||||
|
|
||||||
|
// Group size must be at least 2 (this + one VAA verify program)
|
||||||
|
|
||||||
|
global GroupSize
|
||||||
|
int 2
|
||||||
|
>=
|
||||||
|
assert
|
||||||
|
|
||||||
|
// This must be first transaction in group
|
||||||
|
|
||||||
|
txn GroupIndex
|
||||||
|
int 0
|
||||||
|
==
|
||||||
|
assert
|
||||||
|
|
||||||
|
// Store size in slot 255
|
||||||
|
|
||||||
|
byte "gssize"
|
||||||
|
app_global_get
|
||||||
|
dup // st: size size
|
||||||
|
int 255 // st: size size 255
|
||||||
|
swap // st: size 255 size
|
||||||
|
stores // st: size
|
||||||
|
// op: slot[255] = size
|
||||||
|
|
||||||
|
// Store each in slots 0..N
|
||||||
|
|
||||||
|
loop:
|
||||||
|
dup // st: size cindex
|
||||||
|
dup // st: size size cindex
|
||||||
|
app_global_get // st: size size key_at_cindex
|
||||||
|
stores // st: size
|
||||||
|
// op: slot[size] = key_at_cindex
|
||||||
|
dup
|
||||||
|
int 0 // st: size size 0
|
||||||
|
== // st: size (size == 0)
|
||||||
|
bnz success
|
||||||
|
|
||||||
|
int 1 // st: size 1
|
||||||
|
- // st: (size-1)
|
||||||
|
b loop
|
||||||
|
|
||||||
|
success:
|
||||||
|
int 1
|
Loading…
Reference in New Issue