Python tools for Cosmos wallet management and offline transaction signing
cosmospy
Version 6.0.0
Tools for Cosmos wallet management and offline transaction signing
Table of Contents generated with mdformat-toc
- Generating a wallet - Converter functions - Mnemonic seed to private key - Private key to public key - Public key to address - Private key to address - Signing transactionsInstalling
Installing from PyPI repository (https://pypi.org/project/cosmospy):
pip install cosmospy
Usage
Generating a wallet
from cosmospy import generate_wallet
wallet = generate_wallet()
The value assigned to wallet will be a dictionary just like:
{
"seed": "arch skill acquire abuse frown reject front second album pizza hill slogan guess random wonder benefit industry custom green ill moral daring glow elevator",
"derivation_path": "m/44'/118'/0'/0/0",
"private_key": b"\xbb\xec^\xf6\xdcg\xe6\xb5\x89\xed\x8cG\x05\x03\xdf0:\xc9\x8b \x85\x8a\x14\x12\xd7\xa6a\x01\xcd\xf8\x88\x93",
"public_key": b"\x03h\x1d\xae\xa7\x9eO\x8e\xc5\xff\xa3sAw\xe6\xdd\xc9\xb8b\x06\x0eo\xc5a%z\xe3\xff\x1e\xd2\x8e5\xe7",
"address": "cosmos1uuhna3psjqfxnw4msrfzsr0g08yuyfxeht0qfh",
}
Converter functions
Mnemonic seed to private key
from cosmospy import BIP32DerivationError, seedtoprivkey
seed = ( "teach there dream chase fatigue abandon lava super senior artefact close upgrade" ) try: privkey = seedtoprivkey(seed, path="m/44'/118'/0'/0/0") except BIP32DerivationError: print("No valid private key in this derivation path!")
Private key to public key
from cosmospy import privkeytopubkey
privkey = bytes.fromhex( "6dcd05d7ac71e09d3cf7da666709ebd59362486ff9e99db0e8bc663570515afa" ) pubkey = privkeytopubkey(privkey)
Public key to address
from cosmospy import pubkeytoaddress
pubkey = bytes.fromhex( "03e8005aad74da5a053602f86e3151d4f3214937863a11299c960c28d3609c4775" ) addr = pubkeytoaddress(pubkey)
Private key to address
from cosmospy import privkeytoaddress
privkey = bytes.fromhex( "6dcd05d7ac71e09d3cf7da666709ebd59362486ff9e99db0e8bc663570515afa" ) addr = privkeytoaddress(privkey)
Signing transactions
from cosmospy import Transaction
tx = Transaction( privkey=bytes.fromhex( "26d167d549a4b2b66f766b0d3f2bdbe1cd92708818c338ff453abde316a2bd59" ), account_num=11335, sequence=0, fee=1000, gas=70000, memo="", chain_id="cosmoshub-4", sync_mode="sync", ) tx.add_transfer( recipient="cosmos103l758ps7403sd9c0y8j6hrfw4xyl70j4mmwkf", amount=387000 ) tx.add_transfer(recipient="cosmos1lzumfk6xvwf9k9rk72mqtztv867xyem393um48", amount=123) pushabletx = tx.getpushable()
Optionally submit the transaction using your preferred method.
This example uses the httpx library.
import httpx
apibaseurl = "https://node.atomscan.com" httpx.post(apibaseurl + "/txs", data=pushable_tx)
One or more token transfers can be added to a transaction by calling the add_transfer method.
When the transaction is fully prepared, calling get_pushable will return a signed transaction in the form of a JSON string. This can be used as request body when calling the POST /txs endpoint of the Cosmos REST API.