A Bitcoin SV (BSV) Python Library that is extremely simple to use but more.
- MAINNET and TESTNET supported
- P2PKH and P2PK supported
- All the SIGHASH flags supported
- Additional script types can be customized
- MetaSV, SensibleQuery, and WhatsOnChain API integrated
- Ability to adapt to different service providers
- Fully ECDSA implementation
- ECDH and Electrum ECIES (aka BIE1) implementation
- HD implementation (BIP-32, BIP-39, BIP-44)
👉 Join our Telegram group for discussions or support.
$ pip install bsvlib - Send BSV in one line
from bsvlib import Wallet # Donate to aaron67! print(Wallet(['YOUR_WIF_GOES_HERE']).send_transaction(outputs=[('1HYeFCE2KG4CW4Jwz5NmDqAZK9Q626ChmN', 724996)]))- Send unspent locked by different keys in one transaction, support OP_RETURN output as well
from bsvlib import Wallet from bsvlib.constants import Chain w = Wallet(chain=Chain.TEST) w.add_key('cVwfreZB3i8iv9JpdSStd9PWhZZGGJCFLS4rEKWfbkahibwhticA') w.add_key('93UnxexmsTYCmDJdctz4zacuwxQd5prDmH6rfpEyKkQViAVA3me') print(w.get_balance(refresh=True)) outputs = [('mqBuyzdHfD87VfgxaYeM9pex3sJn4ihYHY', 724), ('mr1FHq6GwWzmD1y8Jxq6rNDGsiiQ9caF7r', 996)] pushdatas = ['hello', b'world'] print(w.send_transaction(outputs=outputs, pushdatas=pushdatas, combine=True))- Operate P2PK
from bsvlib import Wallet, TxOutput, Transaction from bsvlib.keys import Key from bsvlib.script import P2pkScriptType from bsvlib.service import SensibleQuery private_key = Key('L5agPjZKceSTkhqZF2dmFptT5LFrbr6ZGPvP7u4A6dvhTrr71WZ9') w = Wallet(provider=SensibleQuery()) w.add_key(private_key) w.add_key('5KiANv9EHEU4o9oLzZ6A7z4xJJ3uvfK2RLEubBtTz1fSwAbpJ2U') t = Transaction() t.add_inputs(w.get_unspents(refresh=True)) t.add_output(TxOutput(P2pkScriptType.locking(private_key.public_key().serialize()), 996, P2pkScriptType())) t.add_change(private_key.address()) print(t.sign().broadcast())- Sign with different SIGHASH flags, more examples
from bsvlib import Wallet, Transaction, TxInput, TxOutput from bsvlib.constants import SIGHASH from bsvlib.keys import Key from bsvlib.service import WhatsOnChain provider = WhatsOnChain() private_key = Key('L5agPjZKceSTkhqZF2dmFptT5LFrbr6ZGPvP7u4A6dvhTrr71WZ9') unspents = Wallet([private_key]).get_unspents(refresh=True, provider=provider) t = Transaction(provider=provider) t.add_input(TxInput(unspents[0], sighash=SIGHASH.SINGLE_FORKID)) t.add_output(TxOutput(private_key.address(), 135)) t.sign() # it's good to append any outputs AFTER the first output, no need to sign, can broadcast directly print(t.add_change().broadcast())- Sign arbitrary text with private key
from bsvlib import Key, verify_signed_text private_key = Key('L5agPjZKceSTkhqZF2dmFptT5LFrbr6ZGPvP7u4A6dvhTrr71WZ9') text = 'hello world' # sign arbitrary text with bitcoin private key address, signature = private_key.sign_text(text) # verify https://reinproject.org/bitcoin-signature-tool/ print(address, signature) # verify print(verify_signed_text(text, address, signature))- Encrypt message with public key, decrypt with the corresponding private key
from bsvlib import Key private_key = Key('L5agPjZKceSTkhqZF2dmFptT5LFrbr6ZGPvP7u4A6dvhTrr71WZ9') public_key = private_key.public_key() plain = 'hello world' # use public key to encrypt encrypted = public_key.encrypt_text(plain) print(encrypted) # decrypt with the corresponding private key print(private_key.decrypt_text(encrypted))- Process HD wallet derivation
from typing import List from bsvlib.hd import mnemonic_from_entropy, Xprv, derive_from_mnemonic # # HD derivation # entropy = 'cd9b819d9c62f0027116c1849e7d497f' # snow swing guess decide congress abuse session subway loyal view false zebra mnemonic: str = mnemonic_from_entropy(entropy) print(mnemonic) keys: List[Xprv] = derive_from_mnemonic(mnemonic, path="m/44'/0'/0'", change=1, index_start=0, index_end=5) for key in keys: print(key.address(), key.private_key().wif()) # # random mnemonic # print() print(mnemonic_from_entropy()) print(mnemonic_from_entropy(lang='en')) print(mnemonic_from_entropy(lang='zh-cn'))If you like my work or have found this library useful, feel free to donate me a cup of coffee.
Every little satoshi helps. 👏
1HYeFCE2KG4CW4Jwz5NmDqAZK9Q626ChmN 
