Skip to main content

Python library for BandChain

Project description

PyBand

BandChain Python Library

Pyband is a library that is used to interact with BandChain through the gRPC protocol. Querying data and sending transaction can be done here!

⭐️ Features

This helper library allows users to interact with BandChain.

PyBand supports the following features:

  • Getting the information of a specific oracle script, data source, and request ID.
  • Getting the account information of specific address.
  • Getting the latest request for a specific oracle script with its matching calldata and validator ask_count and min_count.
  • Querying all the reporters associated with a specific validator.
  • Seeing what client_id you are using and getting BandChain's latest block data.
  • Able to send transaction in 3 modes: block mode, async mode, and sync mode.

📦 Installation

This library is available on PyPI

pip install pyband

💎 Example Usage

The example below shows how this library can be used to get the result of the latest request for the price of any cryptocurrency. In this example, we will get the latest price of BTC on BandChain's testnet.

The specified parameters are:

  • oracleScriptID: 111
  • calldata: The hex string representing the OBI-encoded value of {'symbols': ['BTC'], 'multiplier': 100000000}
  • minCount: 10
  • askCount: 16
import asyncio

from pyband import Client, PyObi


async def main():
    grpc_url = "laozi-testnet6.bandchain.org"
    c = Client.from_endpoint(grpc_url, 443)

    oid = 111
    calldata = "00000001000000034254430000000005f5e100"
    min_count = 10
    ask_count = 16

    req_info = await c.get_latest_request(oid, calldata, min_count, ask_count)
    oracle_script = await c.get_oracle_script(oid)
    obi = PyObi(oracle_script.schema)

    # Converts the calldata into a readable syntax
    print(obi.decode_input(bytes.fromhex(calldata)))

    # Prints the result
    print(obi.decode_output(req_info.request.result.result))


if __name__ == "__main__":
    asyncio.run(main())

Below is the results of the example above.

{'symbols': ['BTC'], 'multiplier': 100000000}
{'rates': [1936488410000]}

This example shows how to send a transaction on BandChain using block mode.

import asyncio
import os

from pyband import Client, Transaction, Wallet
from pyband.messages.cosmos.bank.v1beta1 import MsgSend
from pyband.proto.cosmos.base.v1beta1 import Coin


async def main():
    # Create a GRPC connection
    grpc_url = "laozi-testnet6.bandchain.org"
    c = Client.from_endpoint(grpc_url, 443)

    # Convert a mnemonic to a wallet
    wallet = Wallet.from_mnemonic(os.getenv("MNEMONIC"))
    sender = wallet.get_address().to_acc_bech32()

    # Prepare a transaction's properties
    msg_send = MsgSend(
        from_address=sender,
        to_address="band19ajhdg6maw0ja0a7qd9sq7nm4ym9f4wjg8r96w",
        amount=[Coin(amount="1000000", denom="uband")],
    )

    account = await c.get_account(sender)
    account_num = account.account_number
    sequence = account.sequence

    fee = [Coin(amount="50000", denom="uband")]
    chain_id = await c.get_chain_id()

    # Step 4 Construct a transaction
    txn = (
        Transaction()
        .with_messages(msg_send)
        .with_sequence(sequence)
        .with_account_num(account_num)
        .with_chain_id(chain_id)
        .with_gas(2000000)
        .with_fee(fee)
        .with_memo("")
    )

    # Sign and broadcast a transaction
    tx_block = await c.send_tx_block_mode(wallet.sign_and_build(txn))

    # Converting to JSON for readability
    print(tx_block.to_json(indent=4))


if __name__ == "__main__":
    asyncio.run(main())

🧀 Notes

For more examples, please go to examples.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyband-0.3.5.tar.gz (86.0 kB view details)

Uploaded Source

Built Distribution

pyband-0.3.5-py3-none-any.whl (119.7 kB view details)

Uploaded Python 3

File details

Details for the file pyband-0.3.5.tar.gz.

File metadata

  • Download URL: pyband-0.3.5.tar.gz
  • Upload date:
  • Size: 86.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.11.2 Darwin/22.3.0

File hashes

Hashes for pyband-0.3.5.tar.gz
Algorithm Hash digest
SHA256 f8d0d7c25e7b8d0b06306953e7e641042807eb6e78edb4af7b5dd0cd667b4561
MD5 ac66cc18d1e516014318eac86bb339d2
BLAKE2b-256 1e54b366fd23c49dd6f75ab3cfbd64ee6a5b5fa9c6e9ef5c8d025f73e16e935b

See more details on using hashes here.

File details

Details for the file pyband-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: pyband-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 119.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.11.2 Darwin/22.3.0

File hashes

Hashes for pyband-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 23317aa3f762f5c6c2b7ebfbd2a5fe769b6b1729cbde073548e45cb44dd0ab55
MD5 1c21393e617d00c5ae9d36b826365194
BLAKE2b-256 0f6391bdbb0f24ea3754373538e4c860123cce7e1891f5fb85c34654f9b4f0d5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page