Skip to main content

Bitcoin Module for XChainPy Clients

Project description

xchainpy/xchainpy_bitcoin

Bitcoin Module for XChainPy Clients

Modules

  • client - Custom client for communicating with bitcoinlib
  • models - model wrapper for bitcoin required types
  • util - Utitilies for using bitcoinlib and bitcoin chain

Following dependencies have to be installed into your project

bip_utils, bitcoinlib , http3 , xchainpy_client , xchainpy_crypto , xchainpy_util

Service Providers

This package uses the following service providers:

Function Service Notes
Balances Sochain https://sochain.com/api#get-balance
Transaction history Sochain https://sochain.com/api#get-display-data-address, https://sochain.com/api#get-tx
Transaction details by hash Sochain https://sochain.com/api#get-tx
Transaction fees Bitgo https://app.bitgo.com/docs/#operation/v2.tx.getfeeestimate
Transaction broadcast Sochain https://sochain.com/api#send-transaction
Explorer Blockstream https://blockstream.info

Sochain API rate limits: https://sochain.com/api#rate-limits (300 requests/minute)

Installation

pip install xchainpy_bitcoin

Before install the package on M1 Mac, execute these commands:

brew install gmp openblas openssl autoconf automake libffi libtool pkg-config

CFLAGS=-I/opt/homebrew/opt/gmp/include LDFLAGS=-L/opt/homebrew/opt/gmp/lib pip3 install fastecdsa

CFLAGS=-I$(brew --prefix openssl)/include LDFLAGS=-L$(brew --prefix openssl)/lib pip3 install scrypt

export OPENBLAS="$(brew --prefix openblas) $OPENBLAS"

Bitcoin Client module

Initialize a client

from xchainpy_client.models.types import Network
from xchainpy_bitcoin.client import Client
from xchainpy_bitcoin.models.client_types import BitcoinClientParams

# Note: This phrase is created by https://iancoleman.io/bip39/ and will never been used in a real-world
phrase = 'atom green various power must another rent imitate gadget creek fat then'
client = Client(BitcoinClientParams(phrase=phrase, network=Network.Testnet))

# if you want to change phrase after initialize the client
client.set_phrase('caution pear excite vicious exotic slow elite marble attend science strategy rude')

# if you want to change network after initialize the client
client.purge_client()
client.set_network(Network.Mainnet)

# when you are done with the client, call this
client.purge_client()

Address methods

from xchainpy_client.models.types import Network
from xchainpy_bitcoin.client import Client
from xchainpy_bitcoin.models.client_types import BitcoinClientParams

phrase = 'atom green various power must another rent imitate gadget creek fat then'
client = Client(BitcoinClientParams(phrase=phrase, network=Network.Testnet))

address = client.get_address()
is_valid = client.validate_address(client.network, address) # bool
print(address)
print(is_valid)

# change index
address = client.get_address(1)
is_valid = client.validate_address(client.network, address) # bool
print(address)
print(is_valid)

Fees

from xchainpy_bitcoin.client import Client
from xchainpy_bitcoin.models.client_types import BitcoinClientParams

client = Client(BitcoinClientParams())

# Get feeRate estimations
fee_rates = await client.get_fee_rates()

# Get fee estimations
fees = await client.get_fees()

# Get fee estimations with memo
memo = 'SWAP:THOR.RUNE'
fees_with_memo = await client.get_fees(memo)


print(f'''fee rates: 
average: {fee_rates.average}
fast: {fee_rates.fast}
fastest: {fee_rates.fastest}\n''')

print(f'''fees: 
average: {fees.average}
fast: {fees.fast}
fastest: {fees.fastest}\n''')

print(f'''fees with memo: 
average: {fees_with_memo.average}
fast: {fees_with_memo.fast}
fastest: {fees_with_memo.fastest}\n''')

Balance

from xchainpy_client.models.types import Network
from xchainpy_bitcoin.client import Client
from xchainpy_bitcoin.models.client_types import BitcoinClientParams

phrase = 'atom green various power must another rent imitate gadget creek fat then'
client = Client(BitcoinClientParams(phrase=phrase, network=Network.Testnet))

address = client.get_address()

balance = await client.get_balance(address=address)
balance = balance[0]

print(f'asset: {balance.asset}, amount: {balance.amount}')

Transactions and Transaction_data

from xchainpy_client.models.tx_types import TxHistoryParams
from xchainpy_client.models.types import Network
from xchainpy_bitcoin.client import Client
from xchainpy_bitcoin.models.client_types import BitcoinClientParams

phrase = 'atom green various power must another rent imitate gadget creek fat then'
client = Client(BitcoinClientParams(phrase=phrase, network=Network.Testnet))

address = client.get_address()

params = TxHistoryParams(address=address, limit=1)
transactions = await client.get_transactions(params)
# type of transactions is xchainpy_client.models.tx_types.TxPage

t = transactions.txs[0]
print(t.asset)
print(t.tx_from[0].amount)
print(t.tx_from[0].address)
print(t.tx_to[0].amount)
print(t.tx_to[0].address)
print(t.tx_date)
print(t.tx_type)
print(t.tx_hash)

transaction = await client.get_transaction_data(t.tx_hash)
# transaction object is equal by t object

Transfer

from xchainpy_client.models.types import Network
from xchainpy_bitcoin.client import Client
from xchainpy_bitcoin.models.client_types import BitcoinClientParams, BitcoinTxParams

phrase = 'atom green various power must another rent imitate gadget creek fat then'
client = Client(BitcoinClientParams(phrase=phrase, network=Network.Testnet))

address = client.get_address()

params = BitcoinTxParams(amount=0.0000001, recipient=address, memo='memo')
tx_hash = await client.transfer(params)

print(tx_hash)

Explorer url

from xchainpy_client.models.types import Network
from xchainpy_bitcoin.client import Client
from xchainpy_bitcoin.models.client_types import BitcoinClientParams

client = Client(BitcoinClientParams())

print(client.get_explorer_url())
print(client.get_explorer_address_url('testAddressHere'))
print(client.get_explorer_tx_url('testTxHere'))

client.purge_client()
client.set_network(Network.Mainnet)

print(client.get_explorer_url())
print(client.get_explorer_address_url('testAddressHere'))
print(client.get_explorer_tx_url('testTxHere'))

Tests

These packages needed to run tests:

  • pytest pip install pytest
  • pytest-asyncio pip install pytest-asyncio

How to run test ?

$ python -m pytest xchainpy/xchainpy_bitcoin/tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xchainpy_bitcoin-0.2.3.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

xchainpy_bitcoin-0.2.3-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file xchainpy_bitcoin-0.2.3.tar.gz.

File metadata

  • Download URL: xchainpy_bitcoin-0.2.3.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.2

File hashes

Hashes for xchainpy_bitcoin-0.2.3.tar.gz
Algorithm Hash digest
SHA256 a0ce844e9ef4edd08ceb503f67efff0946098c1be372361809dcebca601b267c
MD5 b8109da7f38e94f434e8ebb0ac0fdb14
BLAKE2b-256 7b1134d0ca532b00caec561bde6de4fb8d3d4340fa2ec0b8c6f0e62a3860b379

See more details on using hashes here.

File details

Details for the file xchainpy_bitcoin-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: xchainpy_bitcoin-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.2

File hashes

Hashes for xchainpy_bitcoin-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8e65807df3df4dc7d0a10aa28f62f54787baae639bda0a3bdb6d68783c0e30ab
MD5 d350864c4ee1d3d95f76037f5f54f40b
BLAKE2b-256 f59b48f78489bcc807276fca66f0f07b456a308086a88fd3063c3350c9a28350

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page