Send XRP (py): updates for 1.0.0

This commit is contained in:
mDuo13
2021-03-31 17:16:24 -07:00
parent 412cafdc09
commit 4acd483220
2 changed files with 33 additions and 30 deletions

View File

@@ -1,12 +1,12 @@
# Example Credentials ----------------------------------------------------------
from xrpl.wallet import Wallet
test_wallet = Wallet(seed="sn3nxiW7v8KXzPzAqzyHXbSSKNuN9")
test_wallet = Wallet(seed="sn3nxiW7v8KXzPzAqzyHXbSSKNuN9", sequence=16237283)
print(test_wallet.classic_address) # "rMCcNuTcajgw7YTgBy1sys3b89QqjUrMpH"
# Connect ----------------------------------------------------------------------
from xrpl.clients import JsonRpcClient
import xrpl
testnet_url = "https://s.altnet.rippletest.net:51234"
client = JsonRpcClient(testnet_url)
client = xrpl.clients.JsonRpcClient(testnet_url)
# Get credentials from the Testnet Faucet -----------------------------------
# For production, instead create a Wallet instance as above
@@ -16,41 +16,43 @@ from xrpl.wallet import generate_faucet_wallet
test_wallet = generate_faucet_wallet(client, debug=True)
# Prepare transaction ----------------------------------------------------------
from xrpl.ledger import get_latest_validated_ledger_sequence
current_validated_ledger = get_latest_validated_ledger_sequence(client)
min_ledger = current_validated_ledger + 1
max_ledger = min_ledger + 20
from xrpl.models.transactions import Payment
from xrpl.utils import xrp_to_drops
my_payment = Payment(
import xrpl.utils # workaround for https://github.com/XRPLF/xrpl-py/issues/222
my_payment = xrpl.models.transactions.Payment(
account=test_wallet.classic_address,
amount=xrp_to_drops(22),
amount=xrpl.utils.xrp_to_drops(22),
destination="rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
last_ledger_sequence=max_ledger,
sequence=test_wallet.next_sequence_num,
fee="10",
)
print("Payment object:", my_payment)
print(f"Can be validated in ledger range: {min_ledger} - {max_ledger}")
# Sign transaction -------------------------------------------------------------
import xrpl.transaction
signed = xrpl.transaction.safe_sign_transaction(my_payment, test_wallet)
print("Signed transaction blob:", signed)
signed_tx = xrpl.transaction.safe_sign_and_autofill_transaction(
my_payment, test_wallet, client)
max_ledger = signed_tx.last_ledger_sequence
print("Signed transaction:", signed_tx)
print("Transaction cost:", xrpl.utils.drops_to_xrp(signed_tx.fee), "XRP")
print("Transaction expires after ledger:", max_ledger)
# Submit transaction -----------------------------------------------------------
prelim_result = xrpl.transaction.submit_transaction_blob(signed, client)
validated_index = xrpl.ledger.get_latest_validated_ledger_sequence(client)
min_ledger = validated_index + 1
print(f"Can be validated in ledger range: {min_ledger} - {max_ledger}")
# Tip: you can use xrpl.transaction.send_reliable_submission(signed_tx, client)
# to send the transaction and wait for the results to be validated.
try:
prelim_result = xrpl.transaction.submit_transaction(signed_tx, client)
except xrpl.transaction.XRPLReliableSubmissionException as e:
exit(f"Submit failed: {e}")
print("Preliminary transaction result:", prelim_result)
if not prelim_result.is_successful():
exit("Submit failed.")
tx_id = prelim_result.result["tx_json"]["hash"]
# Wait for validation ----------------------------------------------------------
# Note: If you used xrpl.transaction.send_reliable_submission, you can skip this
# and use the result of that method directly.
from time import sleep
while True:
sleep(1)
current_validated_ledger = get_latest_validated_ledger_sequence(client)
validated_ledger = xrpl.ledger.get_latest_validated_ledger_sequence(client)
tx_response = xrpl.transaction.get_transaction_from_hash(tx_id, client)
if tx_response.is_successful():
if tx_response.result.get("validated"):
@@ -58,8 +60,8 @@ while True:
break
else:
print(f"Results not yet validated... "
f"({current_validated_ledger}/{max_ledger})")
if current_validated_ledger > max_ledger:
f"({validated_ledger}/{max_ledger})")
if validated_ledger > max_ledger:
print("max_ledger has passed. Last tx response:", tx_response)
# Check transaction results ----------------------------------------------------
@@ -70,5 +72,5 @@ metadata = tx_response.result.get("meta", {})
if metadata.get("TransactionResult"):
print("Result code:", metadata["TransactionResult"])
if metadata.get("delivered_amount"):
from xrpl.utils import drops_to_xrp
print("XRP delivered:", drops_to_xrp(metadata["delivered_amount"]))
print("XRP delivered:", xrpl.utils.drops_to_xrp(
metadata["delivered_amount"]))