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) txinfo, err = goal.app_call(joe, app_id, accounts=[flo]) assert not err, err joeb = joeb - 1000 assert goal.balance(joe) == joeb + 6, goal.balance(joe)
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 optin = goal.app_optin(joe, app_id) txinfo, err = goal.send(optin) assert not err, err # App call, with group deposit = goal.appl(joe, app_id, app_args=["deposit():void"]) payin = goal.pay(goal.account, goal.app_address(app_id), 150_000) txinfo, err = goal.send_group([deposit, payin]) assert not err, err app_info = goal.app_info(app_id) global_state = goal.app_read(app_id) assert global_state[b'debug'] == b'deposit', global_state local_state = goal.app_read(app_id, joe) assert local_state[b'balance'] == 150_000, local_state # Pay to logicsig, and spend from there, which requires signing by logicsig fund = goal.pay(goal.account, goal.logic_address(yes), 110_000) txinfo, err = goal.send(fund) assert not err, err spend = goal.pay(goal.logic_address(yes), joe, 2_000)
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 # fund app1 _, err = goal.pay(goal.account, goal.app_address(app1ID), amt=4_000_000) assert not err, err # fund app2 _, err = goal.pay(goal.account, goal.app_address(app2ID), amt=4_000_000) assert not err, err # execute c2c to opt app1 into app2 and verify that the response is structured as # expected for a successful execution of all 3 apps. txinfo, err = goal.app_call(joe, app1ID, app_args=[0x00], foreign_apps=[int(app2ID), int(app3ID)]) assert not err, err assert len(txinfo["inner-txns"]) == 1
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, total=10_000, unit_name="oz", asset_name="Gold") app_teal = """ #pragma version 6 txn ApplicationID
txn Accounts 1 itxn_field Receiver int 5 itxn_field Amount itxn_submit itxn Fee int 2000 == assert end: int 1 """ txinfo, err = goal.app_create(joe, goal.assemble(teal)) assert not err, err app_id = txinfo['application-index'] assert app_id # Fund the app account txinfo, err = goal.pay(goal.account, goal.app_address(app_id), amt=400_000) assert not err, err txinfo, err = goal.app_call(joe, app_id, accounts=[goal.account]) assert not err, err print(f"{os.path.basename(sys.argv[0])} OK {stamp}")