avax-python is a Python library and set of utils for the exploration of the Avalanche AVAX cryptocurrency and its network.
The crypto.bi avax-python project began as a thin wrapper around AvalancheGo node API, but it now supports several other functionalities such as wallet address and secret phrase generation, network traffic capture, customizable protocol handlers and a lot more.
In this section we document the basics of the library. We’ll publish tutorials and use cases as we go.
Help Support crypto.bi!
avax-python is released under the MIT license.
It’s free, and will always be, to use and modify for your own projects, commercial or otherwise.
If you find avax-python
useful, please consider sending a tip to : X-avax1rlsj0xgvu85awrvkvjlvlqq37q8hmaq2rsraxz
crypto.bi is 100% ad and tracker free, so your support is very much appreciated!
Requirements
sudo pip3 install numpy
sudo pip3 install pyopenssl
sudo pip3 install cryptography
If you plan on generating the python files from api.specification
, then spec2py.py
requires TatSu
sudo pip install TatSu
Other required libraries are embedded in this project, under the 3rdparty
subdirectory. You can also install these using pip, if you wish to run online:
sudo pip install mnemonic
sudo pip install py-crypto-hd-wallet
sudo pip install bip-utils
sudo pip install pysha3
We’ve embedded some of the security-related libs so that the project can run offline as much as possible, if you choose to.
Specifically, this project includes code from the following libraries under the 3rdparty/
subdirectory:
Installation
avax-python
runs from its downloaded location.
If a git
client is not available, then you may download a ZIP archive instead.
For the online functions, Avalanchego must be running and listening on localhost
port 9650
To use the library and utils, just :
- Clone the git repo
- Set the environment
- Build and install
pysha3
In short:
git clone https://github.com/cryptobi/avax-python.git
cd avax-python/
. setenv.sh
pysha3 Build
For this step you’ll need the Python development headers to be installed.
E.g. on Ubuntu do :
sudo apt-get install python3-dev
Then do:
cd 3rdparty/pysha3
python3 setup.py build
sudo python3 setup.py install
Offline Scripts
Scripts under the offline/
directory at the project root do not make use of the network.
If you want to be extra safe and perform some actions in an air-gapped environment, then we’ve grouped the offline scripts inside this directory.
There shouldn’t be any network activity coming from any of the scripts in the offline/
subdirectory.
Examples
Generate Random Mnemonic Phrase (Generate Wallet)
From the avax-python root directory, run:
python3 offline/wallet/generate_wallets.py
gas ecology detail erase mandate legend fever chicken rule crop detect length shoot tattoo ozone elder present attend seven tonight wild spell dash hedgehog
You can generate several wallets at once by passing a number argument:
python3 offline/wallet/generate_wallets.py 3
orphan decline express slogan hub oven frequent must approve kitchen clarify cargo journey pony armor potato chase during uphold critic cover ankle club media
clinic supply vault slice style news front casual predict vital depth among wolf diagram gas used dolphin peasant pact wrong chaos science mixture crowd
drill abstract solar magic crash derive chief fish mention sausage tenant drum violin enroll excess wife capable special tent venue predict captain museum question
List Addresses From Mnemonic Phrase
Given a mnemonic phrase, list AVAX addresses:
python3 offline/wallet/addresses_from_mnemonic.py drill abstract solar magic crash derive chief fish mention sausage tenant drum violin enroll excess wife capable special tent venue predict captain museum question
X-avax1j666klq273q0k6h4z4r23hdlh26klkljtkcy78
X-avax1alcjha6py3cr8zgpfedgkx9m5ru8n7tcsftvpz
X-avax1al9vxgnaa4wqrqcm0lp097rukkpxhcuhvvcjum
X-avax1e8vncqlahdhe75dxrsrlquhpmad2n94ddwmcw4
X-avax1ajxa6v5fmwtcvyymdfkjjkt6hst3dner38fld9
X-avax124fed922xg32amzmg6f0t8e5n5nmf52kklfxns
X-avax16kcyxum6vjcxd0gc0pr4rehvkrel7g8we9dtu4
X-avax1s5laylnj539yxvyukrugu55jvlzkcyu2sdun2s
X-avax1ceaqyzc0n8379kvj0avanz02qff7ghsxq5hp9m
X-avax1tu2m5nrjja2vgdrn49mnt6rn7yskqx5um6rdsc
Launch a subnet validator:
First, generate user/password credentials for your node.
Then, enter your username and password on userpass.txt
.
Then run:
python3 send-x-p.py <dest_P_addr> <amount_nAVA>
to send funds from X-Chain to P-Chain, then
python3 platform.addDefaultSubnetValidator.py
Done!
Export all Blockchains IPC
python3 ipcs.publishBlockchains.py
Generate apimeta.py
If you update the api.specification
file, then you must regenerate the API metainformation file apimeta.py
To recreate it, run generate_api.py:
python3 generate_api.py
Implement the AVA API in Any Language
The spec2py.py
script reads the API specification in api.specification
, the grammar in api.tatsu
and generates an AST which can be used to implement the API in any language.
If you need to customize the API, the api.specification
file format is very simple.
- An API endpoint begins a new section. Leave a blank line after the endpoint:/url/here line.
- See the provided
api.specification
file and follow the same syntax for function definitions. - Functions can be defined over several lines. Don’t leave blank lines within a function definition.
- Leave one blank line after each function definition.
To customize the generator grammar, see the Tatsu documentation
Note that changing the grammar will require changes to spec2py.py
. The generator uses hard coded offsets which will break if the grammar is modified.
Notes
Where possible, the python sources follow the same directory structure as the reference Go implementation.
It isn’t always possible to keep the code exactly the same, because Go and Python differ in many ways. For example, Go names which are defined in one file and are automatically available across a package in multiple sources, must be explicitly part of some Python module. This leads to some apparent namespace redundancy, like genesis.genesis.FromConfig(...)
. You can often mitigate this by working the import statement in Python, e.g. from genesis import genesis
.
We’ve tried to make the code as intuitive as possible for those familiar with the Go implementation. Just keep in mind it isn’t always possible.
Additional avax-python implementation notes
License
This software released under the MIT license.
See the LICENSE file in this distribution for details.
Legal Notice
Avalanche and AVAX are registered trademarks of Ava Labs Inc.
This is not an official Ava Labs project. We are in no way affiliated with Ava Labs.
This free open source software provided for Avalanche AVAX learning and exploration purposes.