Giter VIP home page Giter VIP logo

bip_utils's People

Contributors

danizaha avatar ebellocchia avatar git-sgmoore avatar jckdotim avatar jimtje avatar uxio0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bip_utils's Issues

speed up

to increase speed, maybe it is worth looking at other libraries?
ofek / match
Richardkiss / Pycoin

famous electrum wallet uses sec256k1 dll
but they all have a big drawback! They can't do everything you do
I ask you to add the use of swift libraries.

No 'Bip49Coins' in bip_utils

In the examples given in the documentation:
https://pypi.org/project/bip-utils/
it is shown in a table that different coins can be selected for Bip49 just like with Bip44.
With Bip44 everything works as expected. However, there is however no Bip49Coins in bip_utils.
I did notice there is a Bip49Coin, so without the 's' at the end, but this does not contain coins you can select.

I made sure to upgrad to bip_utils-1.11.1.

Problems installing bip_utils - Failed to build ed25519-blake2b

To my suprise I run into trouble installing bip_utils using pip install bip_utils, I got it to work in the past, so not sure what the issue is at the moment. Could it be that my Python to new or is this some sort compilatiopn error?

bip_utils) (4.0.0) Building wheels for collected packages: ed25519-blake2b Building wheel for ed25519-blake2b (setup.py): started Building wheel for ed25519-blake2b (setup.py): finished with status 'error' Running setup.py clean for ed25519-blake2b Failed to build ed25519-blake2b Installing collected packages: ed25519-blake2b, crcmod, bip-utils Running setup.py install for ed25519-blake2b: started Running setup.py install for ed25519-blake2b: finished with status 'error'

Cannot (fully) restore Bip32Secp256k1 from Secp256k1PrivateKey

I'm trying restore a Bip32Secp256k1 context from a Secp256k1PrivateKey. This fails because the code does not restore the chain code and fingerprints correctly

mnemonic = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
seed_bytes = Bip39SeedGenerator(mnemonic).Generate()

bip32_ctx1 = Bip32Secp256k1.FromSeedAndPath(seed_bytes, "m/44'/60'/0'/0")
bip32_prvkey1 = bip32_ctx1.PrivateKey()
bip32_pubkey1 = bip32_ctx1.PublicKey()

# Print other BIP32 data
print(bip32_ctx1.Index().ToInt())
print(bip32_ctx1.Depth().ToInt())
print(bip32_ctx1.ChainCode().ToHex())
print(bip32_ctx1.FingerPrint().IsMasterKey())
print(str(bip32_ctx1.FingerPrint()))
print(bip32_ctx1.ParentFingerPrint().IsMasterKey())
print(str(bip32_ctx1.ParentFingerPrint()))

secp256k1_prvkey = Secp256k1PrivateKey.FromBytes(bytes(bip32_prvkey1.Raw()))
assert bip32_prvkey1.Raw().ToHex() == secp256k1_prvkey.Raw().ToHex()

bip32_ctx2 = Bip32Secp256k1.FromPrivateKey(bytes(secp256k1_prvkey.Raw()))
bip32_ctx2 = bip32_ctx2.DerivePath("m/44'/60'/0'/0")
bip32_prvkey2 = bip32_ctx2.PrivateKey()
bip32_pubkey2 = bip32_ctx2.PublicKey()
# assert bip32_prvkey1.Raw().ToHex() == bip32_prvkey2.Raw().ToHex()
# assert bip32_pubkey1.RawCompressed().ToHex() == bip32_pubkey2.RawCompressed().ToHex()

# Print other BIP32 data
print()
print(bip32_ctx2.Index().ToInt())
print(bip32_ctx2.Depth().ToInt())
print(bip32_ctx2.ChainCode().ToHex())
print(bip32_ctx2.FingerPrint().IsMasterKey())
print(str(bip32_ctx2.FingerPrint()))
print(bip32_ctx2.ParentFingerPrint().IsMasterKey())
print(str(bip32_ctx2.ParentFingerPrint()))

Here the print output ...

0
4
c879d136f02003dc804811e42390714ea06448aeaee158c62d65f12a421d988f
False
e4389614
False
60b68b69

0
4
c7d5faabfe9e8aeb976a7bc1d65a64d6749c29243aac0d676e6f357ff0126c3d
False
4b89e1b1
False
8e9ef2a3

Is there a way to do this round-trip via Secp256k1PrivateKey, which I need for Bip38 encryption

Address generation not working

Hi
After ibrary update code stopped working. Complete code example gives the following error:
`Traceback (most recent call last):
File "./test.py", line 18, in
bip_obj_acc = bip_obj_mst.Purpose().Coin().Account(0)

File "/home/sergey/Документы/2/bip_utils/bip/bip44.py", line 102, in Purpose
return self._PurposeGeneric(self)

File "/home/sergey/Документы/2/bip_utils/bip/bip44_base.py", line 273, in _PurposeGeneric
return cls(bip_obj.m_bip32.ChildKey(cls._GetPurpose()), bip_obj.m_coin_type)

File "/home/sergey/Документы/2/bip_utils/bip/bip32.py", line 226, in ChildKey
return self.__CkdPriv(index) if not self.m_is_public else self.__CkdPub(index)

File "/home/sergey/Документы/2/bip_utils/bip/bip32.py", line 409, in __CkdPriv
fprint = self.FingerPrint(),

File "/home/sergey/Документы/2/bip_utils/bip/bip32.py", line 356, in FingerPrint
return self.KeyIdentifier()[:Bip32Const.FINGERPRINT_BYTE_LEN]

File "/home/sergey/Документы/2/bip_utils/bip/bip32.py", line 348, in KeyIdentifier
return CryptoUtils.Hash160(self.PublicKey().RawCompressed().ToBytes())

File "/home/sergey/Документы/2/bip_utils/bip/bip_keys.py", line 77, in RawCompressed
return BipKeyBytes(self.m_bip32_obj.EcdsaPublicKey().to_string("compressed"))

TypeError: to_string() takes 1 positional argument but 2 were given
`
How to fix it?

update pypi for install

I'm installing bip_utils using pipenv, which pulls the package prom pypi, I think the package is not well deployed, since I'm getting the latest version (1.11.1) but with an outdated package

pipenv install bip_utils==1.11.1

####Current coins supported if installed through pypi

Coin Main net enum Test net enum
Bitcoin Bip44Coins.BITCOIN Bip44Coins.BITCOIN_TESTNET
Bitcoin Cash Bip44Coins.BITCOIN_CASH Bip44Coins.BITCOIN_CASH_TESTNET
BitcoinSV Bip44Coins.BITCOIN_SV Bip44Coins.BITCOIN_SV_TESTNET
Litecoin Bip44Coins.LITECOIN Bip44Coins.LITECOIN_TESTNET
Dogecoin Bip44Coins.DOGECOIN Bip44Coins.DOGECOIN_TESTNET
Dash Bip44Coins.DASH Bip44Coins.DASH_TESTNET
Zcash Bip44Coins.ZCASH Bip44Coins.ZCASH_TESTNET
Ethereum Bip44Coins.ETHEREUM -
Ethereum Classic Bip44Coins.ETHEREUM_CLASSIC -
Ripple Bip44Coins.RIPPLE -
Tron Bip44Coins.TRON -
VeChain Bip44Coins.VECHAIN -
Cosmos Bip44Coins.COSMOS -
Band Protocol Bip44Coins.BAND_PROTOCOL -
Kava Bip44Coins.KAVA -
IRIS Network Bip44Coins.IRIS_NET -
Terra Bip44Coins.TERRA -
Binance Chain Bip44Coins.BINANCE_CHAIN -
Binance Smart Chain Bip44Coins.BINANCE_SMART_CHAIN -
Avalanche C-Chain Bip44Coins.AVAX_C_CHAIN -
Avalanche X-Chain Bip44Coins.AVAX_X_CHAIN -
Avalanche P-Chain Bip44Coins.AVAX_P_CHAIN -
Polygon Bip44Coins.POLYGON -
Fantom Opera Bip44Coins.FANTOM_OPERA -
Harmony One (Metamask address) Bip44Coins.HARMONY_ONE_METAMASK -
Harmony One (Ethereum address) Bip44Coins.HARMONY_ONE_ETH -
Harmony One (Cosmos address) Bip44Coins.HARMONY_ONE_ATOM -
Huobi Chain Bip44Coins.HUOBI_CHAIN -
OKEx Chain (Ethereum address) Bip44Coins.OKEX_CHAIN_ETH -
OKEx Chain (Cosmos address) Bip44Coins.OKEX_CHAIN_ATOM -
OKEx Chain (Old Cosmos address before mainnet upgrade) Bip44Coins.OKEX_CHAIN_ATOM_OLD -

Need help

Good day,
would you mind providing me a small example how to derive the first 20 BTC and ETH addresses(used to receive actual funds) from a "normal" private key? I see, you provided many examples how to do it using mnemonic, seed or private extended key. But I can't wrap my head around, how to do it using private key, generated by various software wallets(Electrum, Exodus, etc.) For example, I have a private key:
KzBfG4pV3xjD4aNsxggFmtY6dLqae55CKEFiU2dDztpxtyotdjib
How do I derive the first BTC address from it, which should be:
129hrvLEK84djejoW4hMEC48gEuYSHMLiD
(Ideally, it should support all BTC address formats, P2PKH, P2SH, Bech32) :)

I'm not lazy, just all the crypto and math stuff is beyond my limits of comprehension. Willing to make a donation :)

Get last AddressIndex.

some wallets have more than 20 address in one account, how can get last address index?

Conversions

  • The Ledger's BIP39 recovery phrase is a seed that along with an eventual passphrase generates a private key.
  • The ALGORAND recovery phrase, however, directly encodes the private key.

Can this library convert a Ledger recovery phrase to an ALGORAND recovery phrase? If yes, how?

hash160

1.How can I get HASH 160 instead of the address from the public key?

Please show how to generate a private key valid for metamask import

For a given mnemonic, I can generate a number of ETH addresses that correspond to what Metamask and MEW show.
From Metamask I can then export the private key to use in uniswap_python

None of the keys that I get through bip44_ctx.PrivateKey().Raw().ToHex() correspond to the metamask key, nor are they usable with uniswap

Could you pls show how to get a usable private key for these addresses from bip_utils?

roof blush uncover blouse basic retire bundle clinic champion guilt make globe

Metamask: 0xe6d13d33cd3ca24071b640fa0d33cf178006c7c8945f04f5db796bb3c8694482

Master-Key: 0xca557027464a183ebabf3db4497db106c44c341c1599aa191007c38888bc8c64
Account-Key: 0xda875f44f8a5aca81a72d9818d7fb91517409cb5c873ed668227185aa1e94ca1
Change-Key: 0xcadd8f17e40b541384273a5e5602b71eaf11ed34c1a88cf209119c5c7fabe645

m/44'/60'/0'/0/0 - 0xeF869F5f88268FbF9B3698F25A87Ea5B77690D1f
m/44'/60'/0'/0/1 - 0xA5E5D00F828F930d56c0DC7cEb059376dB4A257F
m/44'/60'/0'/0/2 - 0xf38FFAA9578C6935534403109A113aee59799132
m/44'/60'/0'/0/3 - 0xC07a971baCC0157651f46322D594Ef66915aDff8
m/44'/60'/0'/0/4 - 0xa16E4d321053cbA37A8D25cAeaF6b7667E417f14

create WHL

is it possible to create a complete package from your library with all dependencies?
This would greatly simplify the installation process.
because your library has big dependencies that need to be compiled. e.g. ed25519-blake2b
installing this library requires MSBUILD.

ANSI C language implementation

Ciao.

Thanks for making available this awesome project.
Unfortunately, my python skills are basic and poor.
I was wondering if we are aware of a similar project to this one (particularly BIP 44/49/84) but implemented in C/C++ language?
Any pointers would be greatly appreciated.

Cheers.

solana address error

mnemonic = Bip39MnemonicGenerator().FromWordsNumber(Bip39WordsNum.WORDS_NUM_24)
print(f"mnemonic: {mnemonic}")
seed_bytes = Bip39SeedGenerator(mnemonic).Generate()
bip44_ctx = Bip44.FromPrivateKey(seed_bytes[:32], Bip44Coins.SOLANA)
print(bip44_ctx.PublicKey().ToAddress())

https://www.sollet.io/
Restore Existing Wallet with mnemonic
can't find the address,
It looks like seed_bytes is wrong。

coincurve no longer supports version 15

subprocess.CalledProcessError: Command '['/private/var/folders/m8/gfy0lvq14bz9418x8bfd_zlc0000gn/T/pip-install-jankibtq/coincurve_876f93a8a1ad4e92bb612d15133fdc43/libsecp256k1/autogen.sh']' returned non-zero exit status 2.

ERROR: Failed building wheel for coincurve
(while installing the package from pip)

Update the dependencies of the project to coincurve v16 please

Add cardano coin

Hi,
Can you add a cardano coin support into bip_utils ?
Thanks.

Problem with installing on RaspberryPi

Hi, Thanks for your awesome module.
I installed bip_utils on my own PC ( Arch/Manjaro ) and it works just perfect.
But when I try to install it on my RPi 4 (with Raspberry Pi OS), I get errors:

(venv) pi@raspberrypi:~/Desktop/backer $ pip install bip_utils
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting bip_utils
  Using cached https://www.piwheels.org/simple/bip-utils/bip_utils-2.1.0-py3-none-any.whl (377 kB)
Collecting pynacl~=1.1
  Using cached https://www.piwheels.org/simple/pynacl/PyNaCl-1.4.0-cp39-cp39-linux_armv7l.whl (599 kB)
Collecting pycryptodome~=3.6
  Using cached https://www.piwheels.org/simple/pycryptodome/pycryptodome-3.12.0-cp35-abi3-linux_armv7l.whl (1.8 MB)
Collecting py-sr25519-bindings<2.0.0,>=0.1.3
  Using cached py_sr25519_bindings-0.1.4.tar.gz (13 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... error
    ERROR: Command errored out with exit status 1:
     command: /home/pi/Desktop/coinopal_backer/venv/bin/python /tmp/tmpk7ridpje_in_process.py prepare_metadata_for_build_wheel /tmp/tmpaymolx6g
         cwd: /tmp/pip-install-c6wxh9ub/py-sr25519-bindings_a7ba08a045b242d78cd2415ac56a67ce
    Complete output (6 lines):
    
    Cargo, the Rust package manager, is not installed or is not on PATH.
    This package requires Rust and Cargo to compile extensions. Install it through
    the system's package manager or via https://rustup.rs/
    
    Checking for Rust toolchain....
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/64/82/f55600547af686b1ef3db123471493800ce6f9a61ac7a9e355b3bd6360aa/py_sr25519_bindings-0.1.4.tar.gz#sha256=5e12ca977014f148f4bfb6ba662f1529b15cc8ce030719d726c4e16a379e976e (from https://pypi.org/simple/py-sr25519-bindings/). Command errored out with exit status 1: /home/pi/Desktop/coinopal_backer/venv/bin/python /tmp/tmpk7ridpje_in_process.py prepare_metadata_for_build_wheel /tmp/tmpaymolx6g Check the logs for full command output.
  Using cached py_sr25519_bindings-0.1.3.tar.gz (13 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... error
    ERROR: Command errored out with exit status 1:
     command: /home/pi/Desktop/coinopal_backer/venv/bin/python /tmp/tmpb8bxbub1_in_process.py prepare_metadata_for_build_wheel /tmp/tmpx9wmg0wi
         cwd: /tmp/pip-install-c6wxh9ub/py-sr25519-bindings_200e206b958348f289959e8c88a18fe5
    Complete output (6 lines):
    
    Cargo, the Rust package manager, is not installed or is not on PATH.
    This package requires Rust and Cargo to compile extensions. Install it through
    the system's package manager or via https://rustup.rs/
    
    Checking for Rust toolchain....
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/bd/32/1b0dd06842466d2e2f9d6af89752f8aafe4d8f85d7bdc5246cece985eb30/py_sr25519_bindings-0.1.3.tar.gz#sha256=8b72ac823b63adf30cd9596508773b93da5ae4a73fb869e1e27266fb3e7ddaea (from https://pypi.org/simple/py-sr25519-bindings/). Command errored out with exit status 1: /home/pi/Desktop/coinopal_backer/venv/bin/python /tmp/tmpb8bxbub1_in_process.py prepare_metadata_for_build_wheel /tmp/tmpx9wmg0wi Check the logs for full command output.
Collecting bip_utils
  Using cached https://www.piwheels.org/simple/bip-utils/bip_utils-2.0.2-py3-none-any.whl (375 kB)
Requirement already satisfied: ecdsa~=0.14 in ./venv/lib/python3.9/site-packages (from bip_utils) (0.17.0)
  Using cached https://www.piwheels.org/simple/bip-utils/bip_utils-2.0.1-py3-none-any.whl (370 kB)
  Using cached https://www.piwheels.org/simple/bip-utils/bip_utils-2.0.0-py3-none-any.whl (370 kB)
  Using cached https://www.piwheels.org/simple/bip-utils/bip_utils-1.11.1-py3-none-any.whl (157 kB)
Requirement already satisfied: pysha3 in ./venv/lib/python3.9/site-packages (from bip_utils) (1.0.2)
Requirement already satisfied: six>=1.9.0 in ./venv/lib/python3.9/site-packages (from ecdsa~=0.14->bip_utils) (1.16.0)
Installing collected packages: bip-utils
Successfully installed bip-utils-1.11.1

Traceback on python

Hi,
I'm getting this traceback when creating a wallet in python:

    bip44_def_ctx = bip_utils.Bip44.FromSeed(
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip44/bip44.py", line 144, in DeriveDefaultPath
    return self._DeriveDefaultPathGeneric(self, Bip44Const.PURPOSE)
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip44_base/bip44_base.py", line 275, in _DeriveDefaultPathGeneric
    bip_obj = cls._PurposeGeneric(bip_obj, purpose)
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip44_base/bip44_base.py", line 306, in _PurposeGeneric
    return cls(bip_obj.m_bip32.ChildKey(purpose),
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip32/bip32_base.py", line 336, in ChildKey
    return self._ValidateAndCkdPriv(index) if not self.IsPublicOnly() else self._ValidateAndCkdPub(index)
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip32/bip32_base.py", line 477, in _ValidateAndCkdPriv
    return self._CkdPriv(index)
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip32/bip32_secp256k1.py", line 87, in _CkdPriv
    return self._CkdPrivEcdsa(self, index)
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip32/bip32_ecdsa_base.py", line 114, in _CkdPrivEcdsa
    fprint=bip32_obj.m_pub_key.FingerPrint(),
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip32/bip32_keys.py", line 162, in FingerPrint
    return Bip32FingerPrint(self.KeyIdentifier())
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/bip/bip32/bip32_keys.py", line 172, in KeyIdentifier
    return CryptoUtils.Hash160(self.m_pub_key.RawCompressed().ToBytes())
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/utils/misc/crypto.py", line 222, in Hash160
    return CryptoUtils.Ripemd160(CryptoUtils.Sha256(data))
  File ".tox/devel/lib/python3.9/site-packages/bip_utils/utils/misc/crypto.py", line 199, in Ripemd160
    return hashlib.new("ripemd160", AlgoUtils.Encode(data)).digest()
  File "/usr/lib64/python3.9/hashlib.py", line 166, in __hash_new
    return __get_builtin_constructor(name)(data)
  File "/usr/lib64/python3.9/hashlib.py", line 123, in __get_builtin_constructor
    raise ValueError('unsupported hash type ' + name)
ValueError: unsupported hash type ripemd160

The code I'm using is

        mnemonic = bip_utils.Bip39MnemonicGenerator().FromWordsNumber(
            bip_utils.Bip39WordsNum.WORDS_NUM_24
        )
        is_valid = bip_utils.Bip39MnemonicValidator().IsValid(mnemonic)
        # Validate a mnemonic, raise exceptions
        try:
            bip_utils.Bip39MnemonicValidator().Validate(mnemonic)
            # Valid...
        except bip_utils.Bip39ChecksumError:
            # Invalid checksum...
            pass
        except ValueError:
            # Invalid length or language...
            pass

        if is_valid:


            seed_bytes = bip_utils.Bip39SeedGenerator(mnemonic).Generate()
            bip44_def_ctx = bip_utils.Bip44.FromSeed(
                seed_bytes, bip_utils.Bip44Coins.CHIHUAHUA
            ).DeriveDefaultPath()
            wallet = bip44_def_ctx.PublicKey().ToAddress()

This worked fine with python 3.9 on F35 (and still does), so I assume it's something in the python side on F36, so any hint will be appreciated. (both are on Python 3.9.10)

Thanks

Signature verification

I see this module is quite completed and provides many capabilities <round a lot of different blockchains, I'm trying to find a module which allows verifying various signatures from different chains, I'm aware in all of them the signature verification is using EDCSA

I would like to know if this module allows for signature verification given the message, Signature and Publickey?

If so, could you point to the appropriate resource within the module?

Many thanks,
Aleix

`Import binascii` missing from README examples

Hi!

I noticed that in some of the examples you are using binascii.unhexlify(), but import binascii is missing. Otherwise you could use bytes.fromhex(), that requires no import.

Really good job! Kind regards

Add electrum

PLS ADD support generate mnemonic and create address electrum v1 (old 100000*sha256) , v2 standart

Support for Solana ?

Hi,
First of all thank you, I find your repo very useful, great job !
I see in the doc Solana is supported, but Bip44Coins.SOLANA is missing. Bip32Secp256k1 also.
I guess the doc is outdated ?

failed to generate address on windows

this code work fine on ubuntu but when i try to run it on window i get the error shown below

Code Snippet:

from bip_utils import Bip44Coins, Bip44, Bip39SeedGenerator, Bip39MnemonicGenerator, Bip39WordsNum

mnemonic = Bip39MnemonicGenerator().FromWordsNumber(Bip39WordsNum.WORDS_NUM_24)
seed_bytes = Bip39SeedGenerator(mnemonic).Generate()
bip44_def_ctx = Bip44.FromSeed(seed_bytes, Bip44Coins.SOLANA)
print(bip44_def_ctx.PublicKey().ToAddress())

The Error:

Traceback (most recent call last):
  File "C:\generate.py", line 5, in <module>
    bip44_def_ctx = Bip44.FromSeed(seed_bytes, Bip44Coins.SOLANA)
  File "C:\Python310\lib\enum.py", line 429, in __getattr__
    raise AttributeError(name) from None
AttributeError: SOLANA

bip_utils/ecc/lib/ed25519_monero_lib.py does not get recognized as a package by setuptools

Hey there, I realize that the master branch is not ready for release so you may already know this but as currently configured, running

python setup.py install 

will not install a working package because setuptools won't read a folder without

__init__.py

as an importable package and so bip_utils/ecc/lib/ed25519_monero_lib.py won't be included when running the installation script. The simplest fix is to change find_packages to find_namespace_packages in setup.py which will enable proper packaging. Alternatively, an empty

__init__.py 

in the ecc/lib folder will also suffice. I have forked the repo and made the fix in a new branch and can submit a pull request if you'd like.

Also, it appears that the latest version of scalecodec changed its namespacing a bit as well, so in bip_utils/substrate/substrate_path.py the ScaleDecoder import needs to be changed to

from scalecodec.base import ScaleDecoder

Likewise, I've forked and made the fix in the aforementioned new branch and can submit a pull request if you'd like. Cheers.

Use Bip44 on solana-py KeyPair()

Hello! How to get seed with derived path "m/44'/501'/0'/0'" for using in KeyPair.from_seed() from solana-py library?

I see my phantom wallet address only after:
bip44_mst_ctx = Bip44.FromSeed(seed_bytes, Bip44Coins.SOLANA)
bip44_acc_ctx = bip44_mst_ctx.Purpose().Coin().Account(0)
bip44_chg_ctx = bip44_acc_ctx.Change(Bip44Changes.CHAIN_EXT)
print(f"Address: {bip44_chg_ctx.PublicKey().ToAddress()}")

But how to get deriveSeed (derive_seed_bytes) for KeyPair? I need this to make transactions.

Add Verge (XVG)

Hi there. I appreciate the work, would you be able to add in Vergecoin and Signum? Thank-you

Error install

jo@Noname-Home:/bip_utils$ pip install . --install-option="--coincurve=0"
/usr/lib/python3/dist-packages/pip/_internal/commands/install.py:255: UserWarning: Disabling all use of wheels due to the use of --build-option / --global-option / --install-option.
cmdoptions.check_install_build_global(options)
Processing /home/jo/bip_utils
Requirement already satisfied: coincurve<16.0.0,>=15.0.1 in /usr/local/lib/python3.8/dist-packages (from bip-utils==2.1.0) (15.0.1)
Collecting crcmod
=1.7
Using cached crcmod-1.7.tar.gz (89 kB)
Collecting ecdsa~=0.15
Using cached ecdsa-0.17.0.tar.gz (158 kB)
Collecting ed25519-blake2b~=1.4
Using cached ed25519-blake2b-1.4.tar.gz (871 kB)
Collecting py-sr25519-bindings<2.0.0,>=0.1.3
Using cached py_sr25519_bindings-0.1.4.tar.gz (13 kB)
Installing build dependencies ... error
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3 /usr/lib/python3/dist-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-313w608l/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple -- 'maturin>=0.12,<0.13'
cwd: None
Complete output (58 lines):
Collecting maturin<0.13,>=0.12
Using cached maturin-0.12.5.tar.gz (138 kB)
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Preparing wheel metadata: started
Preparing wheel metadata: finished with status 'done'
Collecting toml~=0.10.0
Using cached toml-0.10.2.tar.gz (22 kB)
Skipping wheel build for toml, due to binaries being disabled for it.
Building wheels for collected packages: maturin
Building wheel for maturin (PEP 517): started
Building wheel for maturin (PEP 517): finished with status 'error'
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3 /tmp/tmp58sd8_yv build_wheel /tmp/tmpmnhimxtf
cwd: /tmp/pip-install-l0wub0gb/maturin
Complete output (36 lines):
running bdist_wheel
running build
installing to build/bdist.linux-x86_64/wheel
running install
Traceback (most recent call last):
File "/tmp/tmp58sd8_yv", line 280, in
main()
File "/tmp/tmp58sd8_yv", line 263, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
File "/tmp/tmp58sd8_yv", line 204, in build_wheel
return _build_backend().build_wheel(wheel_directory, config_settings,
File "/tmp/pip-build-env-31bqagyx/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 216, in build_wheel
return self._build_with_temp_dir(['bdist_wheel'], '.whl',
File "/tmp/pip-build-env-31bqagyx/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 202, in _build_with_temp_dir
self.run_setup()
File "/tmp/pip-build-env-31bqagyx/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 145, in run_setup
exec(compile(code, file, 'exec'), locals())
File "setup.py", line 115, in
setup(
File "/tmp/pip-build-env-31bqagyx/overlay/lib/python3.8/site-packages/setuptools/init.py", line 153, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.8/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.8/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/tmp/pip-build-env-31bqagyx/overlay/lib/python3.8/site-packages/wheel/bdist_wheel.py", line 335, in run
self.run_command('install')
File "/usr/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "setup.py", line 57, in run
raise RuntimeError(
RuntimeError: cargo not found in PATH. Please install rust (https://www.rust-lang.org/tools/install) and try again
----------------------------------------
ERROR: Failed building wheel for maturin
Failed to build maturin
ERROR: Could not build wheels for maturin which use PEP 517 and cannot be installed directly

ERROR: Command errored out with exit status 1: /usr/bin/python3 /usr/lib/python3/dist-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env-313w608l/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple -- 'maturin>=0.12,<0.13' Check the logs for full command output.

Bip32 for other coin.

Hello dev team.

Thank you for making a library so simple and easy to use.
I'm trying to create a dogecoin wallet with bip32 but it still looks like the address of bitcoin. I have compared with website https://iancoleman.io/bip39/ the private key and public key are same . But when creating a wallet address, it is not the same
Here is my code.
#------------------------
mnemonic='balcony bulk patch salmon illness live hen black try riot author wreck'
seed_bytes = Bip39SeedGenerator(mnemonic).Generate()
#bip32_ctx = Bip32.FromSeedAndPath(seed_bytes, "m/44'/0'/0'",DogecoinConf.BIP44_KEY_NET_VER.Main())
print(bip32_ctx.PrivateKey().ToExtended())
print(bip32_ctx.PublicKey().ToExtended())

Print public key converted to address

print(bip32_ctx.PublicKey().ToAddress())
#-------------
Moreover, how can I get the private key of each wallet address.

Please see where I went wrong and help me to solve the problem.
Thank you

Derive XRP address problem

Hi . Thanks for the great package.
I derive BTC,LTC .... address like below from my seed and it works like a charm . But while I'm change it to produce XRP address it doesn't work.

import binascii
from bip_utils import Bip44, Bip44Coins, Bip44Changes
from bip_utils import (P2PKH, P2SH, P2WPKH, BchP2PKH, BchP2SH, AtomAddr, AvaxPChainAddr, AvaxXChainAddr, EthAddr, TrxAddr, XrpAddr)
# Seed bytes
seed_bytes = binascii.unhexlify(b"MY SEED")
# Create from seed
bip44_mst = Bip44.FromSeed(seed_bytes, Bip44Coins.TRON)
# Derive account 0 for Bitcoin: m/44'/0'/0'
bip44_acc = bip44_mst.Purpose().Coin().Account(0)
# Derive the external chain: m/44'/0'/0'/0
bip44_change = bip44_acc.Change(Bip44Changes.CHAIN_EXT)


bip44_addr = bip44_change.AddressIndex(20)
# Print extended keys and address
print(bip44_addr.PrivateKey().ToExtended())
print(bip44_addr.PublicKey().ToExtended())
print(bip44_addr.PublicKey().ToAddress())
print(TrxAddr.ToAddress(bip44_addr.PublicKey().RawUncompressed().ToBytes()))

I get this exception belongs to last line of above code :

ValueError: Public uncompressed key is required for Ethereum address

By the way , the address generated in this line successfully :

bip44_addr.PublicKey().ToAddress()

But is not a valid XRP address. !
Please help

TypeError: Language is not an enumerative of Bip39Languages

Im testing a bruteforce script im makeing and i keep getting the following error.
Traceback (most recent call last): File "/home/pi/betterbrute.py", line 30, in <module> if generate_address(words_prefix + list(perm)): File "/home/pi/betterbrute.py", line 13, in generate_address if not Bip39MnemonicValidator(mnemonic).Validate(): File "/home/pi/.local/lib/python3.9/site-packages/bip_utils/bip/bip39/bip39_mnemonic_validator.py", line 50, in __init__ self.m_mnemonic_decoder = Bip39MnemonicDecoder(lang) File "/home/pi/.local/lib/python3.9/site-packages/bip_utils/bip/bip39/bip39_mnemonic.py", line 303, in __init__ self.m_words_list = (_Bip39WordsListGetter.Instance().GetByLanguage(lang) File "/home/pi/.local/lib/python3.9/site-packages/bip_utils/bip/bip39/bip39_mnemonic.py", line 164, in GetByLanguage raise TypeError("Language is not an enumerative of Bip39Languages") TypeError: Language is not an enumerative of Bip39Languages
Im using the latest version and my code is the following. I am pretty sure that my code is correct. And the following btc private keys and addresses were generated by iancolman.io/bip39
`from bip_utils import Bip39SeedGenerator, Bip39MnemonicValidator
from bip_utils import Bip44, Bip44Coins, Bip44Changes
import itertools

address = "1EHiMwCPzcvMdeGowsowVF2X2PgLo67Qj7"
words_prefix = ['since', 'desk']
words = ['zone', 'leaf', 'luggage', 'hobby', 'depart', 'thrive', 'practice', 'carbon', 'prison', 'ivory']

def generate_address(words):
mnemonic = " ".join(words)
# Early exit if the checksum word is wrong.
if not Bip39MnemonicValidator(mnemonic).Validate():
return False

# Derive the seed bytes from the mnemonic.
seed_bytes = Bip39SeedGenerator(mnemonic).Generate()
# Derive the master BIP44 key from the seed bytes.
bip44_mst = Bip44.FromSeed(seed_bytes, Bip44Coins.BITCOIN)
# Derive account 0 for Bitcoin: m/44'/0'/0'.
bip44_acc = bip44_mst.Purpose().Coin().Account(0)
# Derive the external chain: m/44'/0'/0'/0
bip44_change = bip44_acc.Change(Bip44Changes.CHAIN_EXT)
# Derive the first address of the external chain: m/44'/0'/0'/0/0
bip44_addr = bip44_change.AddressIndex(0)
return bip44_addr.PublicKey().ToAddress() == address

for perm in itertools.permutations(words):
if generate_address(words_prefix + list(perm)):
print(words_prefix + list(perm))
exit()
`

invalid derived private key

hello i am trying to get derived seed and private key of solana however when i call the private key from the library it gives me back an invalid private key which i cant use on any of solana wallets

from bip_utils import Bip44Coins, Bip44, Bip39SeedGenerator,Bip44Changes

seed_bytes = Bip39SeedGenerator('business visit gather camera cargo ketchup episode keep erosion pact large olympic amount trash bring heavy auto what merry surge motor quality corn okay').Generate()

bip44_def_ctx = Bip44.FromSeed(seed_bytes, Bip44Coins.SOLANA)
bip44_acc_ctx = bip44_def_ctx.Purpose().Coin().Account(0)
bip44_chg_ctx = bip44_acc_ctx.Change(Bip44Changes.CHAIN_EXT)
print("derived address : "+bip44_chg_ctx.PublicKey().ToAddress())
print("derived private key : "+bip44_chg_ctx.PrivateKey().ToExtended())

which output

derived address : 93GqFeUXbtGGAP5GfTu6nBbZSvYTr1MiaCGsVpb8Dhk2
derived private key : xprvA1aUNWiGt1MiJQ17kARGhubHR8zEu49td9jMPEj7UigkbYXwxctNFEZrSE4htNrwR1tm7es8LCN9ubft8ah4VXmkcdT3mUBK9ynHsyL3yVB

the public key is correct but the private key isnt
also i cant see any way of getting a derived seed too

the valid private key is : 2SFFSyM8TqXBpsUNk6BbJkTZzkA2NJdHGLCNnYymWNAcgacJvc8PT9ZE4NsnUkgorbmhEk8tRdPcvvkAUTg6u3tA

Derivation for non standart BIP 44 path

Hey, I want to know how to derive addresses and keys from non standart BIP44 path. For example I want to derive seed for solana addresses in 4 paths: 1) m/44'/501'/0', 2) m/44'/501'/0'/0', 3) m/44'/501'/0/0, 4) m/0/0

For first path I'm using code from readme and it works fine:

import binascii
from bip_utils import Bip44Coins, Bip44

seed_bytes = binascii.unhexlify(b"5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc19a5ac40b389cd370d086206dec8aa6c43daea6690f20ad3d8d48b2d2ce9e38e4")

bip44_mst_ctx = Bip44.FromSeed(seed_bytes, Bip44Coins.SOLANA)
bip44_acc_ctx = bip44_mst_ctx.Purpose().Coin().Account(0)
print(bip44_acc_ctx.PublicKey().ToAddress())

But how can I derive for second, third and fourth pathes?
Thanks

scalecodec comes with requests as a dependency

bip_utils doesn't connect to network however scalecodec which is related to Palkdot is installing requests library. It's included in requirements.txt

Hopefully there would be a way to make scalecodec as an optional dependency. Seems like bip_utils comes with about 20 dependencies. Would you consider documenting which libraries is needed for which functionality.

thank you.

$ poetry show --tree py-crypto-hd-wallet
py-crypto-hd-wallet 1.1.0 HD (Hierarchical Deterministic) wallet for cryptocurrencies based on bip_utils library
└── bip-utils >=2.3,<3.0
    ├── coincurve >=15.0.1,<18.0.0 
    │   ├── asn1crypto * 
    │   └── cffi >=1.3.0 
    │       └── pycparser * 
    ├── crcmod >=1.7,<2.0 
    ├── ecdsa >=0.15,<1.0 
    │   └── six >=1.9.0 
    ├── ed25519-blake2b >=1.4,<2.0 
    ├── py-sr25519-bindings >=0.1.3,<2.0.0 
    ├── pycryptodome >=3.6,<4.0 
    ├── pynacl >=1.1,<2.0 
    │   └── cffi >=1.4.1 (circular dependency aborted here)
    ├── scalecodec >=1.0,<2.0 
    │   ├── base58 >=2.0.1 
    │   ├── more-itertools * 
    │   └── requests >=2.24.0 
    │       ├── certifi >=2017.4.17 
    │       ├── charset-normalizer >=2.0.0,<2.1.0 
    │       ├── idna >=2.5,<4 
    │       └── urllib3 >=1.21.1,<1.27 
    └── six >=1.12.0 (circular dependency aborted here)

Add new coins

Hello! First I want to say thank you for great job you've done. Please add support for these tokens (or some of them):

  • Cardano
  • Solana
  • Polkadot
  • Algorand
  • Filecoin
  • Internet computer
  • Stellar
  • FTX
  • Theta
  • Tezos
  • EOS
  • Hedera
  • NEO

no work code

my code not work. whu?
`
from bip_utils import Bip39SeedGenerator, Bip39EntropyGenerator,Bip39Languages, Bip39MnemonicGenerator, Bip39WordsNum, Bip39Languages, Bip44, Bip44Coins, Bip44Changes, Bip32, Bip32Utils

mnemonic = Bip39MnemonicGenerator().FromWordsNumber(Bip39WordsNum(12))
seed_bytes = Bip39SeedGenerator(mnemonic).Generate()
bip32_ctx = Bip32.FromSeed(seed_bytes)
bip32_ctx_ex = bip32_ctx.DerivePath("0'/0'/0")
bip32_addr:str = bip32_ctx_ex.PublicKey().ToAddress()
`

PubKey verification failed in solana

Using solana CLI to verify seed and pub_key raises an error.

Steps to Reproduce error

### Code Used in Python

    # Generate mnemonic
    entropy_bytes = Bip39EntropyGenerator(Bip39EntropyBitLen.BIT_LEN_256).Generate()
    mnemonic = Bip39MnemonicGenerator(Bip39Languages.ENGLISH).FromEntropy(entropy_bytes)
    print("mnemonic")
    print(mnemonic)
>>> "mnemonic"
>>> "sting limb crash ribbon delay close until easily attract dog recipe cake smooth release august found disagree treat want argue salute entire urge describe"

    # Generate seed
    seed_bytes = Bip39SeedGenerator(mnemonic, Bip39Languages.ENGLISH).Generate()
    print("seed without passphrase")
    print([x for x in seed_bytes])
>>> "seed without passphrase"
>>> [228, 156, 216, 41, 147, 240, 115, 137, 23, 81, 246, 115, 182, 158, 55, 95, 186, 10, 179, 168, 187, 50, 144, 101, 131, 29, 114, 243, 23, 4, 14, 30, 9, 137, 206, 174, 178, 52, 51, 34, 184, 43, 206, 219, 68, 121, 176, 174, 2, 164, 103, 112, 153, 37, 28, 19, 7, 213, 122, 94, 149, 219, 73, 158]
    
    # Derive a Valid Solana PubKey from seed
    bip44_ctx = Bip44.FromSeed(seed_bytes, Bip44Coins.SOLANA).DeriveDefaultPath()
    print("bip44_ctx_pubkey")
    print(bip44_ctx.PublicKey().ToAddress())
>>> "bip44_ctx_pubkey"
>>> "5cHj95qPtR4Xwo8wBkX3b129D8PApqn64LUh5XMVYFo6"

To validate credentials using Solana CLI.

  1. Download Solana cli
    sh -c "$(curl -sSfL https://release.solana.com/v1.7.3/install)"
  2. Store seed array into file
  3. open terminal, navigate to location where the seed_array file is located and run the following command
    solana-keygen verify <public_key> <file_name_where_seed_array_is_stored>

Using the same output in this example i got the following:

$ solana-keygen verify 5cHj95qPtR4Xwo8wBkX3b129D8PApqn64LUh5XMVYFo6 pytohn_test.json
"Verification for public key: 5cHj95qPtR4Xwo8wBkX3b129D8PApqn64LUh5XMVYFo6: Failed"

If I recover the account using the same mnemonic from the example using the following command:
solana-keygen recover --force ASK
The recovered public_key is the following one
XhYnQXtkTdbycmGvaJ7xBaSzKMpYzLPm7mn36PkRhQ3

If I validate this pub_key with the seed_array running the command above:

$ solana-keygen verify XhYnQXtkTdbycmGvaJ7xBaSzKMpYzLPm7mn36PkRhQ3 pytohn_test.json
"Verification for public key: XhYnQXtkTdbycmGvaJ7xBaSzKMpYzLPm7mn36PkRhQ3: Success"

Any thoughts on why is it failing?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.