Skip to content

dandyvo/xpring-py

 
 

Repository files navigation

xpring

The Xpring SDK for Python.

Build status: Linux and OSX Build status: Windows Documentation status Latest PyPI version Python versions supported

Install

pip install xpring[py]

API

Wallet

Construct

You can construct a Wallet from its seed. If you do not have your own wallet yet, you can generate one with some free XRP on the testnet.

import xpring

seed = 'sEdSKaCy2JT7JaM7v95H9SxkhP9wS2r'
wallet = xpring.Wallet.from_seed(seed)
print(wallet.private_key.hex())
# b4c4e046826bd26190d09715fc31f4e6a728204eadd112905b08b14b7f15c4f3
print(wallet.public_key.hex())
# ed01fa53fa5a7e77798f882ece20b1abc00bb358a9e55a202d0d0676bd0ce37a63
print(wallet.account_id.hex())
# d28b177e48d9a8d057e70f7e464b498367281b98
print(wallet.address)
# rLUEXYuLiQptky37CqLcm9USQpPiz5rkpD

Sign / Verify

A Wallet can sign and verify arbitrary bytes, but you'll generally want to leave these low-level responsibilities to the Client.

message = bytes.fromhex('DEADBEEF')
signature = wallet.sign(message)
wallet.verify(message, signature)
# True

Client

Client is the gateway to the XRP Ledger. It is constructed with the URL of the gRPC service of a rippled server. If you are running the server yourself, you need to configure the [port_grpc] stanza in your configuration file. In the example configuration file, it is commented out.

url = 'localhost:50051'
client = xpring.Client.from_url(url)

Account

>>> client.get_account(wallet.address)
account_data {
  account {
    address: "rDuKotkyx18D5WqWCA4mVhRWK2YLqDFKaY"
  }
  balance {
    drops: 999999820
  }
  sequence: 10
  previous_transaction_id: b"..."
  previous_transaction_ledger_sequence: 4845872
}
ledger_index: 4869818

Fee

>>> client.get_fee()
current_ledger_size: 6
drops {
  base_fee {
    drops: 10
  }
  median_fee {
    drops: 5000
  }
  minimum_fee {
    drops: 10
  }
  open_ledger_fee {
    drops: 10
  }
}
expected_ledger_size: 25
ledger_current_index: 4869844
levels {
  median_level: 128000
  minimum_level: 256
  open_ledger_level: 256
  reference_level: 256
}
max_queue_size: 2000

Submit

>>> unsigned_transaction = {
...     'Account': 'rDuKotkyx18D5WqWCA4mVhRWK2YLqDFKaY',
...     'Amount': '10',
...     'Destination': 'rNJDvXkaBRwJYdeEcx9pchE2SecMkH3FLz',
...     'Fee': '10',
...     'Flags': 0x80000000,
...     'Sequence': 9,
...     'TransactionType': 'Payment'
... }
>>> signed_transaction = wallet.sign_transaction(unsigned_transaction)
>>> client.submit(signed_transaction)
engine_result {
  result_type: RESULT_TYPE_TES
  result: "tesSUCCESS"
}
engine_result_message: "The transaction was applied. Only final in a validated ledger."
hash: b"..."

Develop

Dependencies

The protocol buffers and definitions file are in submodules:

git submodule update --init

Use Poetry to install dependencies, build the protocol buffers, and copy the definitions file:

poetry install
poetry run invoke prebuild

Tasks

There are several Invoke tasks:

poetry run invoke ${task}
  • test: Pytest with coverage and doctests.
  • lint: Mypy, Pylint, and Pydocstyle.
  • serve: Serve the docs locally and rebuild them on file changes.

About

The Xpring SDK in Python

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%