def submit_transaction( transaction: Transaction, client: Client, ) -> Response: """ Submits a transaction to the ledger. Args: transaction: the Transaction to be submitted. client: the network client with which to submit the transaction. Returns: The response from the ledger. Raises: XRPLRequestFailureException: if the rippled API call fails. """ transaction_json = transaction.to_xrpl() transaction_blob = encode(transaction_json) response = client.request(SubmitOnly(tx_blob=transaction_blob)) if response.is_successful(): return response result = cast(Dict[str, Any], response.result) raise XRPLRequestFailureException(result)
def _prepare_transaction( transaction: Transaction, wallet: Wallet, ) -> Dict[str, Any]: """ Prepares a Transaction by converting it to a JSON-like dictionary, converting the field names to CamelCase. If a Client is provided, then it also autofills any relevant fields. Args: transaction: the Transaction to be prepared. wallet: the wallet that will be used for signing. Returns: A JSON-like dictionary that is ready to be signed. Raises: XRPLException: if both LastLedgerSequence and `ledger_offset` are provided, or if an address tag is provided that does not match the X-Address tag. """ transaction_json = transaction.to_xrpl() transaction_json["SigningPubKey"] = wallet.public_key _validate_account_xaddress(transaction_json, "Account", "SourceTag") if "Destination" in transaction_json: _validate_account_xaddress(transaction_json, "Destination", "DestinationTag") # DepositPreauth _convert_to_classic_address(transaction_json, "Authorize") _convert_to_classic_address(transaction_json, "Unauthorize") # EscrowCancel, EscrowFinish _convert_to_classic_address(transaction_json, "Owner") # SetRegularKey _convert_to_classic_address(transaction_json, "RegularKey") return transaction_json