Beispiel #1
0
  txn Accounts 0
  itxn_field Receiver

  int 5
  itxn_field Amount

  txn Accounts 1
  itxn_field RekeyTo
 itxn_submit

end:
 int 1
"""

txinfo, err = goal.app_create(joe, goal.assemble(teal))
assert not err, err
joeb = joeb - 1000
app_id = txinfo['application-index']
assert app_id

app_addr = goal.app_address(app_id)
# flo rekeys her account to the app, app spends from it, then rekeys it back
txinfo, err = goal.pay(flo, joe, amt=1, rekey_to=app_addr)
assert not err, err
assert goal.balance(joe) == joeb + 1, goal.balance(joe)

# can no longer spend
txinfo, err = goal.pay(flo, joe, amt=1)
assert err
assert goal.balance(joe) == joeb + 1, goal.balance(joe)
Beispiel #2
0
# App create
teal = "test/scripts/e2e_subs/tealprogs"
approval = goal.assemble(os.path.join(teal, "app-escrow.teal"))
yes = goal.assemble("#pragma version 2\nint 28")  # 28 is just to uniquify
create = goal.appl(flo, 0,
                   local_schema=(1, 0),
                   global_schema=(0, 4),
                   approval_program=approval,
                   clear_program=yes)
txinfo, err = goal.send(create)
app_id = txinfo['application-index']
assert app_id

# app_create is a convenience wrapper around appl
create = goal.app_create(flo, approval, local_schema=(1, 0))
txinfo, err = goal.send(create)
assert not err, err

app2_id = txinfo['application-index']
assert app_id

app_info = goal.app_info(app_id)
assert app_info['local-state-schema']['num-uint'] == 1, app_info

# App opt-in
optin = goal.appl(joe, app2_id, txn.OnComplete.OptInOC)
txinfo, err = goal.send(optin)
assert not err, err

# convenience wrapper
Beispiel #3
0
 end:
  int 1
"""

app3 = """
#pragma version 6
pushbytes "success"
log
int 1
"""

goal.autosend = True

# app1 creation
txinfo1, err = goal.app_create(joe, goal.assemble(app1))
assert not err, err
app1ID = txinfo1['application-index']
assert app1ID

# insert clear state program with inner app call
txinfo2, err = goal.app_create(joe, goal.assemble(app2), goal.assemble(app2))
assert not err, err
app2ID = txinfo2['application-index']
assert app2ID

# dummy destination app
txinfo3, err = goal.app_create(joe, goal.assemble(app3))
assert not err, err
app3ID = txinfo3['application-index']
assert app3ID
Beispiel #4
0
  gtxns CreatedAssetID
  itxn_field Assets

  method "start(asset)"
  itxn_field ApplicationArgs

  byte 0x00
  itxn_field ApplicationArgs
 itxn_submit


end:
 int 1
"""

txinfo, err = goal.app_create(joe, goal.assemble(fund_previous))
assert not err, err
funder = txinfo['application-index']
assert funder

# Fund the funder
txinfo, err = goal.pay(goal.account, goal.app_address(funder), amt=4_000_000)
assert not err, err

# Construct a group that creates an ASA and an app, then "starts" the
# new app by funding and invoking "start(asset)" on it. Inside the new
# app's start() method, there will be yet another inner transaction:
# it opts into the supplied asset.

goal.autosend = False
create_asa = goal.asset_create(joe,
Beispiel #5
0
assert not err, err
expected_goal_mb -= ASSET_MIN_BALANCE
assert_min_balance(
    goal,
    goal.account,
    expected_goal_mb,
    expected_goal_mb + APP_MIN_BALANCE,
    goal_only=True,
)
expected_goal_mb += APP_MIN_BALANCE

# flo creates an app with 2 global schema ints, 10 global schema bytes, 1 extra page
txinfo, err = goal.app_create(
    flo,
    goal.assemble(TEAL),
    local_schema=(2, 0),
    global_schema=(0, 10),
    extra_pages=1,
    send=True,
)
assert not err, err
expected_mb = (
    CONSENSUS_MIN_BALANCE + APP_MIN_BALANCE
    # Not these local var requirements because not opting in
    # + 2 * APP_KV_MIN_BALANCE
    # + 2 * APP_INTS_MIN_BALANCE
    + 10 * APP_KV_MIN_BALANCE + 10 * APP_BYTES_MIN_BALANCE +
    EXTRA_PAGE_MIN_BALANCE)
expected_goal_mb += APP_MIN_BALANCE
assert_min_balance(goal, flo, expected_mb, expected_goal_mb)

stamp = datetime.now().strftime("%Y%m%d_%H%M%S")