diff --git a/content/_code-samples/quickstart/py/lesson8-time-escrow.py b/content/_code-samples/quickstart/py/lesson8-time-escrow.py new file mode 100644 index 0000000000..0b25b539f0 --- /dev/null +++ b/content/_code-samples/quickstart/py/lesson8-time-escrow.py @@ -0,0 +1,251 @@ +import tkinter as tk +import xrpl +import json + +from mod1 import get_account, get_account_info, send_xrp +from mod8 import create_time_escrow, finish_time_escrow, get_escrows, cancel_time_escrow, get_transaction + + +############################################# +## Handlers ################################# +############################################# + +## Mod 8 Handlers + +def standby_create_time_escrow(): + results = create_time_escrow( + ent_standby_seed.get(), + ent_standby_amount.get(), + ent_standby_destination.get(), + ent_standby_escrow_finish.get(), + ent_standby_escrow_cancel.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_finish_time_escrow(): + results = finish_time_escrow( + ent_operational_seed.get(), + ent_operational_escrow_owner.get(), + ent_operational_sequence_number.get() + ) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_escrows(): + results = get_escrows(ent_operational_account.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +def standby_cancel_time_escrow(): + results = cancel_time_escrow( + ent_standby_seed.get(), + ent_standby_escrow_owner.get(), + ent_standby_escrow_sequence_number.get() + ) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0", json.dumps(results, indent=4)) + +def operational_get_transaction(): + results = get_transaction(ent_operational_account.get(), + ent_operational_look_up.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0", json.dumps(results, indent=4)) + +## Mod 1 Handlers + +def get_standby_account(): + new_wallet = get_account(ent_standby_seed.get()) + ent_standby_account.delete(0, tk.END) + ent_standby_seed.delete(0, tk.END) + ent_standby_account.insert(0, new_wallet.classic_address) + ent_standby_seed.insert(0, new_wallet.seed) + + +def get_standby_account_info(): + accountInfo = get_account_info(ent_standby_account.get()) + ent_standby_balance.delete(0, tk.END) + ent_standby_balance.insert(0,accountInfo['Balance']) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def standby_send_xrp(): + response = send_xrp(ent_standby_seed.get(),ent_standby_amount.get(), + ent_standby_destination.get()) + text_standby_results.delete("1.0", tk.END) + text_standby_results.insert("1.0",json.dumps(response.result, indent=4)) + get_standby_account_info() + get_operational_account_info() + + +def get_operational_account(): + new_wallet = get_account(ent_operational_seed.get()) + ent_operational_account.delete(0, tk.END) + ent_operational_account.insert(0, new_wallet.classic_address) + ent_operational_seed.delete(0, tk.END) + ent_operational_seed.insert(0, new_wallet.seed) + + +def get_operational_account_info(): + accountInfo = get_account_info(ent_operational_account.get()) + ent_operational_balance.delete(0, tk.END) + ent_operational_balance.insert(0,accountInfo['Balance']) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(accountInfo, indent=4)) + + +def operational_send_xrp(): + response = send_xrp(ent_operational_seed.get(),ent_operational_amount.get(), + ent_operational_destination.get()) + text_operational_results.delete("1.0", tk.END) + text_operational_results.insert("1.0",json.dumps(response.result,indent=4)) + get_standby_account_info() + get_operational_account_info() + + +# Create a new window with the title "Time-based Escrow Example" +window = tk.Tk() +window.title("Time-based Escrow Example") + +# Form frame +frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3) +frm_form.pack() + +# Create the Label and Entry widgets for "Standby Account" +lbl_standy_seed = tk.Label(master=frm_form, text="Standby Seed") +ent_standby_seed = tk.Entry(master=frm_form, width=50) +lbl_standby_account = tk.Label(master=frm_form, text="Standby Account") +ent_standby_account = tk.Entry(master=frm_form, width=50) +lbl_standy_amount = tk.Label(master=frm_form, text="Amount") +ent_standby_amount = tk.Entry(master=frm_form, width=50) +lbl_standby_destination = tk.Label(master=frm_form, text="Destination") +ent_standby_destination = tk.Entry(master=frm_form, width=50) +lbl_standby_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_standby_balance = tk.Entry(master=frm_form, width=50) + +lbl_standby_escrow_finish = tk.Label(master=frm_form, text="Escrow Finish (seconds)") +ent_standby_escrow_finish = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_cancel = tk.Label(master=frm_form, text="Escrow Cancel (seconds)") +ent_standby_escrow_cancel = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_standby_escrow_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_standby_escrow_owner = tk.Label(master=frm_form, text="Escrow Owner") +ent_standby_escrow_owner = tk.Entry(master=frm_form, width=50) +lbl_standby_results = tk.Label(master=frm_form, text="Results") +text_standby_results = tk.Text(master=frm_form, height = 20, width = 65) + +# Place fields in a grid. +lbl_standy_seed.grid(row=0, column=0, sticky="e") +ent_standby_seed.grid(row=0, column=1) +lbl_standby_account.grid(row=2, column=0, sticky="e") +ent_standby_account.grid(row=2, column=1) +lbl_standy_amount.grid(row=3, column=0, sticky="e") +ent_standby_amount.grid(row=3, column=1) +lbl_standby_destination.grid(row=4, column=0, sticky="e") +ent_standby_destination.grid(row=4, column=1) +lbl_standby_balance.grid(row=5, column=0, sticky="e") +ent_standby_balance.grid(row=5, column=1) +lbl_standby_escrow_finish.grid(row=6, column=0, sticky="e") +ent_standby_escrow_finish.grid(row=6, column=1) +lbl_standby_escrow_cancel.grid(row=7, column=0, sticky="e") +ent_standby_escrow_cancel.grid(row=7, column=1) +lbl_standby_escrow_sequence_number.grid(row=8, column=0, sticky="e") +ent_standby_escrow_sequence_number.grid(row=8, column=1) +lbl_standby_escrow_owner.grid(row=9, column=0, sticky="e") +ent_standby_escrow_owner.grid(row=9, column=1) +lbl_standby_results.grid(row=10, column=0, sticky="ne") +text_standby_results.grid(row=10, column=1, sticky="nw") + +############################################### +## Operational Account ######################## +############################################### + +# Create the Label and Entry widgets for "Operational Account" +lbl_operational_seed = tk.Label(master=frm_form, text="Operational Seed") +ent_operational_seed = tk.Entry(master=frm_form, width=50) +lbl_operational_account = tk.Label(master=frm_form, text="Operational Account") +ent_operational_account = tk.Entry(master=frm_form, width=50) +lbl_operational_amount = tk.Label(master=frm_form, text="Amount") +ent_operational_amount = tk.Entry(master=frm_form, width=50) +lbl_operational_destination = tk.Label(master=frm_form, text="Destination") +ent_operational_destination = tk.Entry(master=frm_form, width=50) +lbl_operational_balance = tk.Label(master=frm_form, text="XRP Balance") +ent_operational_balance = tk.Entry(master=frm_form, width=50) +lbl_operational_sequence_number = tk.Label(master=frm_form, text="Sequence Number") +ent_operational_sequence_number = tk.Entry(master=frm_form, width=50) +lbl_operational_escrow_owner=tk.Label(master=frm_form, text="Escrow Owner") +ent_operational_escrow_owner=tk.Entry(master=frm_form, width=50) +lbl_operational_look_up = tk.Label(master=frm_form, text="Transaction to Look Up") +ent_operational_look_up = tk.Entry(master=frm_form, width=50) +lbl_operational_results = tk.Label(master=frm_form,text='Results') +text_operational_results = tk.Text(master=frm_form, height = 20, width = 65) + + +#Place the widgets in a grid +lbl_operational_seed.grid(row=0, column=4, sticky="e") +ent_operational_seed.grid(row=0, column=5, sticky="w") +lbl_operational_account.grid(row=2,column=4, sticky="e") +ent_operational_account.grid(row=2,column=5, sticky="w") +lbl_operational_amount.grid(row=3, column=4, sticky="e") +ent_operational_amount.grid(row=3, column=5, sticky="w") +lbl_operational_destination.grid(row=4, column=4, sticky="e") +ent_operational_destination.grid(row=4, column=5, sticky="w") +lbl_operational_balance.grid(row=5, column=4, sticky="e") +ent_operational_balance.grid(row=5, column=5, sticky="w") +lbl_operational_sequence_number.grid(row=6, column=4, sticky="e") +ent_operational_sequence_number.grid(row=6, column=5, sticky="w") +lbl_operational_escrow_owner.grid(row=7, column=4, sticky="e") +ent_operational_escrow_owner.grid(row=7, column=5, sticky="w") +lbl_operational_look_up.grid(row=8, column=4, sticky="e") +ent_operational_look_up.grid(row=8, column=5, sticky="w") +lbl_operational_results.grid(row=10, column=4, sticky="ne") +text_operational_results.grid(row=10, column=5, sticky="nw") + +############################################# +## Buttons ################################## +############################################# + +# Create the Get Standby Account Buttons +btn_get_standby_account = tk.Button(master=frm_form, text="Get Standby Account", + command = get_standby_account) +btn_get_standby_account.grid(row = 0, column = 2, sticky = "nsew") +btn_get_standby_account_info = tk.Button(master=frm_form, + text="Get Standby Account Info", + command = get_standby_account_info) +btn_get_standby_account_info.grid(row = 1, column = 2, sticky = "nsew") +btn_standby_send_xrp = tk.Button(master=frm_form, text="Send XRP >", + command = standby_send_xrp) +btn_standby_send_xrp.grid(row = 2, column = 2, sticky = "nsew") + +btn_standby_create_escrow = tk.Button(master=frm_form, text="Create Time-based Escrow", + command = standby_create_time_escrow) +btn_standby_create_escrow.grid(row = 4, column = 2, sticky="nsew") +btn_standby_cancel_escrow = tk.Button(master=frm_form, text="Cancel Time-based Escrow", + command = standby_cancel_time_escrow) +btn_standby_cancel_escrow.grid(row=5,column = 2, sticky="nsew") + +# Create the Operational Account Buttons +btn_get_operational_account = tk.Button(master=frm_form, + text="Get Operational Account", + command = get_operational_account) +btn_get_operational_account.grid(row=0, column=3, sticky = "nsew") +btn_get_op_account_info = tk.Button(master=frm_form, text="Get Op Account Info", + command = get_operational_account_info) +btn_get_op_account_info.grid(row=1, column=3, sticky = "nsew") +btn_op_send_xrp = tk.Button(master=frm_form, text="< Send XRP", + command = operational_send_xrp) +btn_op_send_xrp.grid(row=2, column = 3, sticky = "nsew") +btn_op_finish_escrow = tk.Button(master=frm_form, text="Finish Escrow", + command = operational_finish_time_escrow) +btn_op_finish_escrow.grid(row = 4, column = 3, sticky="nsew") +btn_op_finish_escrow = tk.Button(master=frm_form, text="Get Escrows", + command = operational_get_escrows) +btn_op_finish_escrow.grid(row = 5, column = 3, sticky="nsew") +btn_op_get_transaction = tk.Button(master=frm_form, text="Get Transaction", + command = operational_get_transaction) +btn_op_get_transaction.grid(row = 6, column = 3, sticky = "nsew") + + +# Start the application +window.mainloop() diff --git a/content/_code-samples/quickstart/py/mod8.py b/content/_code-samples/quickstart/py/mod8.py new file mode 100644 index 0000000000..53e352926f --- /dev/null +++ b/content/_code-samples/quickstart/py/mod8.py @@ -0,0 +1,92 @@ +import xrpl +from xrpl.clients import JsonRpcClient +from xrpl.wallet import Wallet +from datetime import datetime +from xrpl.models.transactions import EscrowCreate, EscrowFinish +from xrpl.models.requests import AccountObjects, AccountTx + +testnet_url = "https://s.altnet.rippletest.net:51234" + + +def add_seconds(numOfSeconds): + new_date = datetime.now() + if new_date != '': + new_date = xrpl.utils.datetime_to_ripple_time(new_date) + new_date = new_date + int(numOfSeconds) + return new_date + + +def create_time_escrow(seed, amount, destination, finish, cancel): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + finish_date = add_seconds(finish) + cancel_date = add_seconds(cancel) + + escrow_tx=xrpl.models.transactions.EscrowCreate( + account=wallet.address, + amount=amount, + destination=destination, + finish_after=finish_date, + cancel_after=cancel_date + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(escrow_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply + +def finish_time_escrow(seed, owner, sequence): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + finish_tx=xrpl.models.transactions.EscrowFinish( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence) + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(finish_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply + +def get_escrows(account): + client=JsonRpcClient(testnet_url) + acct_escrows=AccountObjects( + account=account, + ledger_index="validated", + type="escrow" + ) + response=client.request(acct_escrows) + return response.result + +def cancel_time_escrow(seed, owner, sequence): + wallet=Wallet.from_seed(seed) + client=JsonRpcClient(testnet_url) + cancel_tx=xrpl.models.transactions.EscrowCancel( + account=wallet.address, + owner=owner, + offer_sequence=int(sequence) + ) + # Submit the transaction and report the results + reply="" + try: + response=xrpl.transaction.submit_and_wait(cancel_tx,client,wallet) + reply=response.result + except xrpl.transaction.XRPLReliableSubmissionException as e: + reply=f"Submit failed: {e}" + return reply + +def get_transaction(account, ledger_index): + client=JsonRpcClient(testnet_url) + tx_info=AccountTx( + account=account, + ledger_index=int(ledger_index) + ) + response=client.request(tx_info) + return response.result