diff --git a/README.md b/README.md index c1747e6..2acac70 100644 --- a/README.md +++ b/README.md @@ -1,88 +1,5 @@ +![pybtc logo](doc/img/pybtc.svg) + # pybtc Python bitcoin library - -### Basic Examples - -#### Create private key - - >>> from pybtc import * - >>> create_priv() - b'\xc8\xf5tGf\x00+4\x1c\xe3\xb6\x00\xf4\x14w\x1d\xf0{jiY&4`v\xd4\tmv!\x0f\x1f' - >>> - >>> priv = create_priv() - >>> priv - b'_`\xd7@\x9e\xdb\xbbB5O%@\xd6\x92\xb1\x0e*\xcd\xb6\x89!\xa3JE\xb0\xb6:\x8c\x04\x88\xc9\xa5' - >>> - >>> priv2WIF(priv) - 'KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW' - >>> - >>> priv2WIF(priv, compressed = False) # Mainnet compressed WIF format - '5JYHtgBjYbLT3ZkhGHHCivscdMdDKeVTZBgq5ZK51fyKpqKDhYv' # Mainnet uncompressed WIF format - >>> - >>> priv2WIF(priv, testnet = True) - 'cQn71zxEDWF77m386rfe7PHTshLF3kaJH6KGKY5GD5fcLsCqpPbg' - >>> - >>> priv2WIF(priv, compressed = True, testnet = True) # Testnet compressed WIF format - 'cQn71zxEDWF77m386rfe7PHTshLF3kaJH6KGKY5GD5fcLsCqpPbg' - >>> - >>> priv2WIF(priv, compressed = False, testnet = True) # Testnet uncompressed WIF format - '92JvUR1H8pQb1dFytdB7bXRaH1yvUp2eu8YnABfaMQiNbuKiPVL' - >>> - >>> WIF2priv("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW") - b'_`\xd7@\x9e\xdb\xbbB5O%@\xd6\x92\xb1\x0e*\xcd\xb6\x89!\xa3JE\xb0\xb6:\x8c\x04\x88\xc9\xa5' - >>> - -#### Public key from private key - - >>> from pybtc import * - >>> priv2pub("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW") - b'\x02\xb1-\xc2\x03u\xda\x00*7t\xb9c\xe4A\xdb\x1c\xe0\x89\xb8W\x13\x86\xbe\x82\xee(\x11nrj\xb06' - >>> - >>> priv2pub("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW", hex = True) - '02b12dc20375da002a3774b963e441db1ce089b8571386be82ee28116e726ab036' - >>> - >>> priv = WIF2priv("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW") - >>> priv - b'_`\xd7@\x9e\xdb\xbbB5O%@\xd6\x92\xb1\x0e*\xcd\xb6\x89!\xa3JE\xb0\xb6:\x8c\x04\x88\xc9\xa5' - >>> - >>> priv2pub(priv, hex = True) - '02b12dc20375da002a3774b963e441db1ce089b8571386be82ee28116e726ab036' - >>> - -#### Address from public key/private key - - >>> from pybtc import * - >>> # address in bech32 format - ... - >>> pub2address(priv2pub("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW")) - 'bc1q3hs6985qftzrvfl7aqcshsf7equapuuxzr2kcv' - >>> - >>> # address in legacy format - ... - >>> pub2address(priv2pub("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW"), witness_version = None) - '1DwCaTcMTT5kZmH4wCevDe5nyzffi2Bz9p' - >>> - >>> # uncompressed public key deprecated for bech32 segwit addresses fromat - ... - >>> pub2address(priv2pub("5JYHtgBjYbLT3ZkhGHHCivscdMdDKeVTZBgq5ZK51fyKpqKDhYv")) - Traceback (most recent call last): - File "", line 1, in - File "/usr/local/lib/python3.6/site-packages/pybtc/tools.py", line 233, in pub2address - assert len(pubkey) == 33 - AssertionError - >>> - >>> # uncompressed public key legacy format - ... - >>> pub2address(priv2pub("5JYHtgBjYbLT3ZkhGHHCivscdMdDKeVTZBgq5ZK51fyKpqKDhYv"), witness_version = None) - '1EbTeoa1QgZaSHZFznrhNdKrRbbQupVwuZ' - >>> - >>> # testnet addresses - ... - >>> pub2address(priv2pub("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW"), testnet = True) - 'tb1q3hs6985qftzrvfl7aqcshsf7equapuuxg939rl' - >>> - >>> pub2address(priv2pub("KzR7Z5xNnSYqxKZriSrWk4nQFU2qPJUcD4AoD7ckhy1c68A4zvkW"), witness_version = None, testnet = True) - 'mtT9sWhLGUX1LskgemdJ3ZJ7qzGNaygcXP' - >>> - diff --git a/doc/img/pybtc.svg b/doc/img/pybtc.svg new file mode 100644 index 0000000..29b1592 --- /dev/null +++ b/doc/img/pybtc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + pybtc + \ No newline at end of file diff --git a/pybtc/__init__.py b/pybtc/__init__.py index 4c5a1c4..feaa99a 100644 --- a/pybtc/__init__.py +++ b/pybtc/__init__.py @@ -2,5 +2,6 @@ from .tools import * from .opcodes import * from .consensus import * from .transaction import * +from .address import * version = "2.0.1" diff --git a/pybtc/block.py b/pybtc/block.py index 525d5bb..de899f5 100644 --- a/pybtc/block.py +++ b/pybtc/block.py @@ -15,8 +15,8 @@ class Block(dict): self["bits"] = s.read(4), self["nonce"] = unpack("