Utils

Bitcoin Utils.

swap.providers.bitcoin.utils.amount_converter(amount: Union[int, float], symbol: str = 'SATOSHI2BTC') → Union[int, float]

Amount converter

Parameters
  • amount (Union[int, float]) – Bitcoin amount.

  • symbol (str) – Bitcoin symbol, default to SATOSHI2BTC.

Returns

float – BTC asset amount.

>>> from swap.providers.bitcoin.utils import amount_converter
>>> amount_converter(amount=10_000_000, symbol="SATOSHI2BTC")
0.1
swap.providers.bitcoin.utils.fee_calculator(transaction_input: int = 1, transaction_output: int = 1) → int

Bitcoin fee calculator.

Parameters
  • transaction_input (int) – transaction input numbers, defaults to 1.

  • transaction_output (int) – transaction output numbers, defaults to 1.

Returns

int – Bitcoin fee (SATOSHI amount).

>>> from swap.providers.bitcoin.utils import fee_calculator
>>> fee_calculator(2, 9)
1836
swap.providers.bitcoin.utils.is_network(network: str) → bool

Check Bitcoin network.

Parameters

network (str) – Bitcoin network.

Returns

bool – Bitcoin valid/invalid network.

>>> from swap.providers.bitcoin.utils import is_network
>>> is_network("testnet")
True
swap.providers.bitcoin.utils.is_address(address: str, network: Optional[str] = None) → bool

Check Bitcoin address.

Parameters
  • address (str) – Bitcoin address.

  • network (str) – Bitcoin network, defaults to None.

Returns

bool – Bitcoin valid/invalid address.

>>> from swap.providers.bitcoin.utils import is_address
>>> is_address("mrmtGq2HMmqAogSsGDjCtXUpxrb7rHThFH", "testnet")
True
swap.providers.bitcoin.utils.is_transaction_raw(transaction_raw: str) → bool

Check Bitcoin transaction raw.

Parameters

transaction_raw (str) – Bitcoin transaction raw.

Returns

bool – Bitcoin valid/invalid transaction raw.

>>> from swap.providers.bitcoin.utils import is_transaction_raw
>>> is_transaction_raw("...")
True
swap.providers.bitcoin.utils.decode_transaction_raw(transaction_raw: str, offline: bool = True, headers: dict = {}, timeout: int = 60) → dict

Decode Bitcoin transaction raw.

Parameters
  • transaction_raw (str) – Bitcoin transaction raw.

  • offline (bool) – Offline decode, defaults to True.

  • headers (dict) – Request headers, default to common headers.

  • timeout (int) – Request timeout, default to 60.

Returns

dict – Decoded Bitcoin transaction raw.

>>> from swap.providers.bitcoin.utils import decode_transaction_raw
>>> transaction_raw = "eyJmZWUiOiA2NzgsICJyYXciOiAiMDIwMDAwMDAwMTg4OGJlN2VjMDY1MDk3ZDk1NjY0NzYzZjI3NmQ0MjU1NTJkNzM1ZmIxZDk3NGFlNzhiZjcyMTA2ZGNhMGYzOTEwMTAwMDAwMDAwZmZmZmZmZmYwMjEwMjcwMDAwMDAwMDAwMDAxN2E5MTQyYmIwMTNjM2U0YmViMDg0MjFkZWRjZjgxNWNiNjVhNWMzODgxNzhiODdiY2RkMGUwMDAwMDAwMDAwMTk3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYzAwMDAwMDAwIiwgIm91dHB1dHMiOiBbeyJhbW91bnQiOiA5ODQ5NDYsICJuIjogMSwgInNjcmlwdCI6ICI3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYyJ9XSwgIm5ldHdvcmsiOiAidGVzdG5ldCIsICJ0eXBlIjogImJpdGNvaW5fZnVuZF91bnNpZ25lZCJ9"
>>> decode_transaction_raw(transaction_raw)
{'fee': 678, 'type': 'bitcoin_fund_unsigned', 'tx': {'hex': '0200000001888be7ec065097d95664763f276d425552d735fb1d974ae78bf72106dca0f3910100000000ffffffff02102700000000000017a9142bb013c3e4beb08421dedcf815cb65a5c388178b87bcdd0e00000000001976a91464a8390b0b1685fcbf2d4b457118dc8da92d553488ac00000000', 'txid': 'abc70fd3466aec9478ea3115200a84f993204ad1f614fe08e92ecc5997a0d3ba', 'hash': 'abc70fd3466aec9478ea3115200a84f993204ad1f614fe08e92ecc5997a0d3ba', 'size': 117, 'vsize': 117, 'version': 2, 'locktime': 0, 'vin': [{'txid': '91f3a0dc0621f78be74a971dfb35d75255426d273f766456d9975006ece78b88', 'vout': 1, 'scriptSig': {'asm': '', 'hex': ''}, 'sequence': '4294967295'}], 'vout': [{'value': '0.00010000', 'n': 0, 'scriptPubKey': {'asm': 'OP_HASH160 2bb013c3e4beb08421dedcf815cb65a5c388178b OP_EQUAL', 'hex': 'a9142bb013c3e4beb08421dedcf815cb65a5c388178b87', 'type': 'p2sh', 'address': '2MwEDybGC34949zgzWX4M9FHmE3crDSUydP'}}, {'value': '0.00974268', 'n': 1, 'scriptPubKey': {'asm': 'OP_DUP OP_HASH160 64a8390b0b1685fcbf2d4b457118dc8da92d5534 OP_EQUALVERIFY OP_CHECKSIG', 'hex': '76a91464a8390b0b1685fcbf2d4b457118dc8da92d553488ac', 'type': 'p2pkh', 'address': 'mphBPZf15cRFcL5tUq6mCbE84XobZ1vg7Q'}}]}, 'network': 'testnet'}
swap.providers.bitcoin.utils.submit_transaction_raw(transaction_raw: str, headers: dict = {}, timeout: int = 60) → dict

Submit transaction raw to Bitcoin blockchain.

Parameters
  • transaction_raw (str) – Bitcoin transaction raw.

  • headers (dict) – Request headers, default to common headers.

  • timeout (int) – Request timeout, default to 60.

Returns

dict – Bitcoin transaction id, fee, type and date.

>>> from swap.providers.bitcoin.utils import submit_transaction_raw
>>> transaction_raw = "eyJmZWUiOiA2NzgsICJyYXciOiAiMDIwMDAwMDAwMTg4OGJlN2VjMDY1MDk3ZDk1NjY0NzYzZjI3NmQ0MjU1NTJkNzM1ZmIxZDk3NGFlNzhiZjcyMTA2ZGNhMGYzOTEwMTAwMDAwMDAwZmZmZmZmZmYwMjEwMjcwMDAwMDAwMDAwMDAxN2E5MTQyYmIwMTNjM2U0YmViMDg0MjFkZWRjZjgxNWNiNjVhNWMzODgxNzhiODdiY2RkMGUwMDAwMDAwMDAwMTk3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYzAwMDAwMDAwIiwgIm91dHB1dHMiOiBbeyJhbW91bnQiOiA5ODQ5NDYsICJuIjogMSwgInNjcmlwdCI6ICI3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYyJ9XSwgIm5ldHdvcmsiOiAidGVzdG5ldCIsICJ0eXBlIjogImJpdGNvaW5fZnVuZF91bnNpZ25lZCJ9"
>>> submit_transaction_raw(transaction_raw)
{'fee': '...', 'type': '...', 'transaction_id': '...', 'network': '...', 'date': '...'}
swap.providers.bitcoin.utils.get_address_type(address: str) → str

Get Bitcoin address type.

Parameters

address (str) – Bitcoin address.

Returns

str – Bitcoin address type (P2PKH, P2SH).

>>> from swap.providers.bitcoin.utils import get_address_type
>>> get_address_type(address="mrmtGq2HMmqAogSsGDjCtXUpxrb7rHThFH")
"p2pkh"
swap.providers.bitcoin.utils.get_address_hash(address: str, script: bool = False) → Union[str, btcpy.structs.script.P2pkhScript, btcpy.structs.script.P2shScript]

Get Bitcoin address hash.

Parameters
  • address (str) – Bitcoin address.

  • script (bool) – Return script (P2pkhScript, P2shScript), default to False.

Returns

str – Bitcoin address hash.

>>> from swap.providers.bitcoin.utils import get_address_hash
>>> get_address_hash(address="mrmtGq2HMmqAogSsGDjCtXUpxrb7rHThFH", script=False)
"7b7c4431a43b612a72f8229935c469f1f6903658"