hukkin
cosmospy
Python

Python tools for Cosmos wallet management and offline transaction signing

Last updated Apr 8, 2026
87
Stars
56
Forks
6
Issues
0
Stars/day
Attention Score
51
Language breakdown
No language data available.
Files click to expand
README

Build Status codecov.io PyPI version

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 transactions

Installing

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.

© 2026 GitRepoTrend · hukkin/cosmospy · Updated daily from GitHub