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
: 111calldata
: The hex string representing the OBI-encoded value of{'symbols': ['BTC'], 'multiplier': 100000000}
minCount
: 10askCount
: 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | f8d0d7c25e7b8d0b06306953e7e641042807eb6e78edb4af7b5dd0cd667b4561 |
|
MD5 | ac66cc18d1e516014318eac86bb339d2 |
|
BLAKE2b-256 | 1e54b366fd23c49dd6f75ab3cfbd64ee6a5b5fa9c6e9ef5c8d025f73e16e935b |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23317aa3f762f5c6c2b7ebfbd2a5fe769b6b1729cbde073548e45cb44dd0ab55 |
|
MD5 | 1c21393e617d00c5ae9d36b826365194 |
|
BLAKE2b-256 | 0f6391bdbb0f24ea3754373538e4c860123cce7e1891f5fb85c34654f9b4f0d5 |