A python library to simplify sending and receiving Banano. Also a RPC wrapper.
Project description
Bananopie
Bananopie is a python library for the Banano cryptocurrency. It aims to be the python equivalent of Banano.js, and not just a RPC wrapper (Sending, receiving, changing rep functions are very high level).
Installation
pip install bananopie
Bananopie is on pypi.
Notes
- There is an outdated fork of Bananopie for Nano, also made by me, called nanohakase. It should suit most of your needs, but if you need new Bananopie features, fork Bananopie, change the work difficulty to
FFFFFFF800000000
, decimals to31
, and you should be good to go. - When running on Replit (ew), installing Bananopie may fail if you do not have
gcc
installed (nix package:libgccjit
).
Quick Start
First, start with a RPC
class, for read only
from bananopie import *
rpc = RPC("https://kaliumapi.appditto.com/api")
#check current blockcount
print(rpc.get_block_count()["count"])
#get last 10 transactions of JungleTV
print(rpc.get_account_history("ban_1jung1eb3uomk1gsx7w6w7toqrikxm5pgn5wbsg5fpy96ckpdf6wmiuuzpca", count=10)["history"])
#check balance of JungleTV
print(raw_to_whole(int(rpc.get_account_balance("ban_1jung1eb3uomk1gsx7w6w7toqrikxm5pgn5wbsg5fpy96ckpdf6wmiuuzpca")["balance"])))
For sending/receiving transactions, use a Wallet
.
from bananopie import RPC, Wallet
rpc = RPC("https://kaliumapi.appditto.com/api")
my_account = Wallet(rpc, seed="seed here", index=0)
#or generate a new one
my_new_account = Wallet(rpc, index=0)
print(my_new_account.seed)
#get address of self
print(my_account.get_address())
#get balance of self
print(my_account.get_balance())
#send 1 banano to the faucet development fund
print(my_account.send("ban_3pdripjhteyymwjnaspc5nd96gyxgcdxcskiwwwoqxttnrncrxi974riid94", "1")["hash"])
#receive funds
my_account.receive_all()
#change rep
my_account.change_rep("ban_3catgir1p6b1edo5trp7fdb8gsxx4y5ffshbphj73zzy5hu678rsry7srh8b")
#change seed index
my_account.index = 2
Bananopie can also generate work, albeit slowly. This is useful when using node that don't support generating work. Also, the legacy
parameter can be passed to the RPC class when the RPC supports the deprecated pending
RPC call instead of the newer receivable
call.
from bananopie import RPC, Wallet
no_work_rpc = RPC("https://public.node.jungletv.live/rpc", legacy=True)
my_work_account = Wallet(no_work_rpc, seed="seed here", index=0, try_work=True)
#will generate work locally!
my_work_account.send("ban_3pdripjhteyymwjnaspc5nd96gyxgcdxcskiwwwoqxttnrncrxi974riid94", "0.0042")
Utility functions are also provided.
import bananopie
#whole to raw banano
print(bananopie.whole_to_raw("492.2"))
#raw to whole banano
print(bananopie.raw_to_whole(1900000000000000000000000000))
Documentation
Also see the Nano RPC docs for information on what rpc call wrapper functions return.
RPC (Class)
Parameters:
rpc_url
(str): IP or URL of nodeauth
(str or bool, Default: False): Optional HTTP Authorization headerlegacy
(bool, Default: False): IfTrue
, will use 'pending' instead of 'receivable'
Sample:
rpc = RPC("https://kaliumapi.appditto.com/api")
Properties:
rpc_url
(str): IP or URL of nodeauth
(str or bool): Optional HTTP Authorization header
Methods:
call (Function)
RPC call. Intended for internal use, but useful for RPC calls that aren't directly implemented.
Parameters:
payload
(dictionary): Payload to send to node
Sample:
rpc.call({"action": "block_count"})
Returns: Response of RPC call (JSON dictionary)
get_block_count (Function)
Get network block count.
Parameters None
Returns: See Nano RPC Docs
get_block_info (Function)
Get block info for hash.
Parameters
block
(st): Block hash
Returns: See Nano RPC Docs
get_blocks (Function)
Get blocks.
Parameters
blocks
(list[str]): List of block hashes to get information on
Returns: See Nano RPC Docs
get_blocks_info (Function)
Get blocks, with more detailed information.
Parameters
blocks
(list[str]): List of block hashes to get information on
Returns: See Nano RPC Docs
get_representatives (Function)
Get list of network representatives and their weight
Parameters None
Returns: See Nano RPC Docs
get_representatives_online (Function)
Get list of network representatives that have recently voted
Parameters None
Returns: See Nano RPC Docs
get_account_history (Function)
Get account history (confirmed and received transaction list)
Parameters
account
(str): Address of accountcount
(int, Default: -1): Optional parameter to specify amount of transactions to return.-1
means all, or at least as much as the node will allowhead
(str or None, Default: None): Block hash to start from, defaults to latest block hash if omittedaccount_filter
(list[str] or None, Default: None): List of addresses to only show sends/receives from. Please note that some public nodes will ignore this parameter
Returns: See Nano RPC Docs
get_account_info (Function)
Get account information, like height, frontier, balance, etc
Parameters
account
(str): Address of account
Returns: See Nano RPC Docs
get_account_balance (Function)
Get account balance
Parameters
account
(str): Address of account
Returns: See Nano RPC Docs
get_account_representative (Function)
Get account representative
Parameters
account
(str): Address of account
Returns: See Nano RPC Docs
get_accounts_representatives (Function)
Get representatives of accounts
Parameters
account
(list[str]): List of addresses
Returns: See Nano RPC Docs
get_account_weight (Function)
Get delegated weight of representative
Parameters
account
(str): Address of representative
Returns: See Nano RPC Docs
get_receivable (Function)
Get receivable transactions for account
Parameters
account
(str): Address of representativecount
(int, Default: 20): Optional parameter to specify max amount of receivable transactions to returnthreshold
(int or None, Default: None): Optional parameter to filter out any receivable transactions with value below the threshold (in raw)
Returns: See Nano RPC Docs
Wallet (class)
Parameters:
rpc
(RPC): A RPC classseed
(str or None, Default: None): 64 character hex seed, ifNone
, will generate a seed by itself. Private keys are derived from the seed.index
(int, Default: 0): Optional parameter that is the index of the seed. Any number from 0 to 4294967295. Each index of the seed is a different private key, and so different address.try_work
(bool, Default: False): IfTrue
, will try to generate work locally instead of asking node for work (and no work provided). Good to use if node does not support generating own work.
Sample:
my_account = Wallet(RPC("https://kaliumapi.appditto.com/api"), "seed here", 0)
Properties:
rpc_url
(str): IP or URL of nodeseed
(str): Banano seed (64 character hex string)index
(int): Seed index. Change this property to change the wallet seed index.
Methods
send_process (Function)
Internal use function to send a process
RPC call
Parameters
block
(dictionary): block contentsubtype
(str): Send, receive, or change
Returns See Nano RPC Docs
send (Function)
High level function to send Banano
Parameters
to
(str): Address to send toamount
(str): Amount of Banano to send (in whole, not raw)work
(str or bool, Default: False): Leave it asFalse
to ask node to generate work (passesdo_work
). Put in a work string if work generated locallyprevious
(str or None, Default: None): Previous block hash. Otherwise, address' frontier block hash used
Sample:
my_account = Wallet(RPC("https://kaliumapi.appditto.com/api"), "seed here", 0)
my_account.send("ban_3pdripjhteyymwjnaspc5nd96gyxgcdxcskiwwwoqxttnrncrxi974riid94", "1")
Returns See Nano RPC Docs
send_all (Function)
High level function to send all Banano
Parameters
to
(str): Address to send towork
(str or bool, Default: False): Leave it asFalse
to ask node to generate work (passesdo_work
). Put in a work string if work generated locallyprevious
(str or None, Default: None): Previous block hash. Otherwise, address' frontier block hash used
Sample:
my_account = Wallet(RPC("https://kaliumapi.appditto.com/api"), "seed here", 0)
my_account.send_all("ban_3pdripjhteyymwjnaspc5nd96gyxgcdxcskiwwwoqxttnrncrxi974riid94")
Returns See Nano RPC Docs
receive_specific (Function)
Receive a specific block
Parameters
hash
(str): Block hash to receivework
(str or bool, Default: False): Leave it asFalse
to ask node to generate work (passesdo_work
). Put in a work string if work generated locallyprevious
(str or None, Default: None): Previous block hash. Otherwise, address' frontier block hash used
Returns See Nano RPC Docs
receive_all (Function)
Receive all (technically, 20) receivable transactions
Parameters
count
(int, Default: 20): Optional parameter to specify max amount of receivable transactions to receivethreshold
(int or None, Default: None): Optional parameter to not receive any receivable transactions with value below the threshold (in whole, not raw)
Sample:
my_account = Wallet(RPC("https://kaliumapi.appditto.com/api"), "seed here", 0)
my_account.receive_all()
Returns
- A list of block hashes that were received (See Nano RPC Docs)
change_rep (Function)
Change account representative
Parameters
new_representative
(str): Representative Banano address to change towork
(str or bool, Default: False): Leave it as False to ask node to generate work (passesdo_work
). Put in a work string if work generated locallyprevious
(str or None, Default: None): Previous block hash. Otherwise, address' frontier block hash used
Sample:
my_account = Wallet(RPC("https://kaliumapi.appditto.com/api"), "seed here", 0)
my_account.change_rep("ban_3catgir1p6b1edo5trp7fdb8gsxx4y5ffshbphj73zzy5hu678rsry7srh8b")
Returns See Nano RPC Docs
sign_message (Function)
Sign utf-8 message with private key at current index of current seed
Parameters
message
(str): utf-8 message to sign
Returns str, Hex signature
sign_message_dummy_block (Function)
Sign utf-8 message as a dummy block (making sure ledger devices can also sign) with private key at current index of current seed
Parameters
message
(str): utf-8 message to sign
Returns str, Hex signature
get_public_key (Function)
Get public key at current index of current seed
Parameters None
Returns str, Hex public key
get_address (Function)
Get address at current index of current seed
Parameters None
Returns str, Banano address
get_balance (Function)
Double wrapped function to get balance of self (see RPC
's get_account_balance
)
get_receivable (Function)
Double wrapped function to get receivable blocks (see RPC
's get_receivable
)
get_receivable_whole_threshold (Function)
Double wrapped function to get receivable blocks (see RPC
's get_receivable
), except threshold
parameter is in whole Banano, not raw
get_representative (Function)
Double wrapped function to get representative of self (see RPC
's get_account_representative
)
get_account_info (Function)
Double wrapped function to get account info of self (see RPC
's get_account_info
)
get_account_history (Function)
Double wrapped function to get account info of self (see RPC
's get_account_history
)
generate_seed (static Function)
Generate a random seed using os.urandom
Parameters None
Sample:
print(Wallet.generate_seed())
Returns 64 character hex seed
Util
Properties
BANANO_DECIMALS
(int): Amount of decimals that Banano has (29)PREAMBLE
(str): Hex string to prepend when signingBANANO_WORK
(str): Hex string of Banano's work threshold/minimum
Methods
encode_base32
, decode_base32
, bytes_to_hex
, hex_to_bytes
, utf8_to_bytes
, random_bytes
, get_private_key_from_seed
, get_public_key_from_private_key
, get_address_from_public_key
, get_public_key_from_address
, hash_block
, sign
, sign_message_dummy_block
, gen_dummy_block_hash
are internal use Functions that are currently undocumented. Look at /bananopie/util.py
to see what they do.
verify_message (Function)
Verifies whether signed message is real
Parameters
public_key
(str): Hex public keysignature
(str): Hex signatureclaimed_message
(str): utf-8 message that was allegedly signed
Returns
bool, True
if message verified, False
if message not verified
verify_message_dummy_block (Function)
Verifies whether signed message (with dummy block) is real
Parameters
public_key
(str): Hex public keysignature
(str): Hex signatureclaimed_message
(str): utf-8 message (with dummy block) that was allegedly signed
Returns
bool, True
if message (with dummy block) verified, False
if message (with dummy block) not verified
whole_to_raw (Function)
Converts whole Banano to raw Banano
Parameters
whole
(str): Whole amount of Banano
Returns int, that is raw amount of Banano
raw_to_whole (Function)
Converts raw Banano to whole Banano (Cuts off at 2 decimal places by default)
Parameters
raw
(int): Raw amount of Bananoprecision
(int, Default: 2): Decimal places to cut off at
Returns int, that is whole amount of Banano
raw_to_whole_no_round (Function)
Converts raw Banano to whole Banano, without rounding
Parameters
raw
(int): Raw amount of Banano
Returns str, that is unrounded whole amount of Banano
gen_work_random (Function)
Generate work given block's previous hash (or if opening block, account public key), and threshold. Generates work using psuedorandom generator.
Parameters
hash
(str): Hex previous hash of block / account public keythreshold
(str): Hex minimum work threshold
Returns str, that is hex of work
gen_work_deterministic (Function)
Generate work given block's previous hash (or if opening block, account public key), and threshold. Generates work deterministically.
Parameters
hash
(str): Hex previous hash of block / account public keythreshold
(str): Hex minimum work threshold
Returns str, that is hex of work
gen_work (Function)
Generate work given block's previous hash (or if opening block, account public key). Basically a wrapper for gen_work_deterministic
with threshold being the hardcoded Banano default.
Parameters
hash
(str): Hex previous hash of block / account public key
Returns str, that is hex of work
verify_work (Function)
Verify whether work is valid or not, given previous hash of block (or if opening block, account public key).
Parameters
hash
(str): Hex previous hash of block / account public keywork
(str): Hex of work
Returns bool, whether the work is valid or not
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 bananopie-0.1.3.2.tar.gz
.
File metadata
- Download URL: bananopie-0.1.3.2.tar.gz
- Upload date:
- Size: 14.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c6c0a47ba4657e6935ac1c409ee1bdfc2de1d0544cc26e3074da9ff17811ba41 |
|
MD5 | 2ca3f93052933432c9138bcb49eb8e62 |
|
BLAKE2b-256 | 8eb7999b751365b0d61d0f52b9fa4ab3fcf01dad644fa3f2898fd14307aef68c |
File details
Details for the file bananopie-0.1.3.2-py3-none-any.whl
.
File metadata
- Download URL: bananopie-0.1.3.2-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9b760b64647ff084618fa3fc0c9744b24ab1d95ac5df839a5e74a83142fb707 |
|
MD5 | 044f912721ed2c1a06183d796c808e59 |
|
BLAKE2b-256 | f04b377596697ef2e5fa9976045c51013c392f80df3025cdc4eb5cb16a537838 |