mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-25 14:15:50 +00:00
Add sample code
This commit is contained in:
251
content/_code-samples/quickstart/py/lesson8-time-escrow.py
Normal file
251
content/_code-samples/quickstart/py/lesson8-time-escrow.py
Normal file
@@ -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()
|
||||||
92
content/_code-samples/quickstart/py/mod8.py
Normal file
92
content/_code-samples/quickstart/py/mod8.py
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user