Utils

Bitcoin Utils.

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(transaction_input=2, transaction_output=9)
1836
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.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(network="testnet")
True
swap.providers.bitcoin.utils.is_address(address: str, network: Optional[str] = None, address_type: Optional[str] = None) bool

Check Bitcoin address.

Parameters
  • address (str) – Bitcoin address.

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

  • address_type (str) – Bitcoin address type, defaults to None.

Returns

bool – Bitcoin valid/invalid address.

>>> from swap.providers.bitcoin.utils import is_address
>>> is_address(address="mrmtGq2HMmqAogSsGDjCtXUpxrb7rHThFH", network="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
>>> transaction_raw = "eyJmZWUiOiA2NzgsICJyYXciOiAiMDIwMDAwMDAwMTg4OGJlN2VjMDY1MDk3ZDk1NjY0NzYzZjI3NmQ0MjU1NTJkNzM1ZmIxZDk3NGFlNzhiZjcyMTA2ZGNhMGYzOTEwMTAwMDAwMDAwZmZmZmZmZmYwMjEwMjcwMDAwMDAwMDAwMDAxN2E5MTQyYmIwMTNjM2U0YmViMDg0MjFkZWRjZjgxNWNiNjVhNWMzODgxNzhiODdiY2RkMGUwMDAwMDAwMDAwMTk3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYzAwMDAwMDAwIiwgIm91dHB1dHMiOiBbeyJhbW91bnQiOiA5ODQ5NDYsICJuIjogMSwgInNjcmlwdCI6ICI3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYyJ9XSwgIm5ldHdvcmsiOiAidGVzdG5ldCIsICJ0eXBlIjogImJpdGNvaW5fZnVuZF91bnNpZ25lZCJ9"
>>> is_transaction_raw(transaction_raw=transaction_raw)
True
swap.providers.bitcoin.utils.amount_unit_converter(amount: Union[int, float], unit_from: str = 'Satoshi2BTC') Union[int, float]

Bitcoin amount unit converter

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

  • unit_from (str) – Bitcoin unit convert from symbol, default to Satoshi2BTC.

Returns

int, float – BTC asset amount.

>>> from swap.providers.bitcoin.utils import amount_unit_converter
>>> amount_unit_converter(amount=10_000_000, unit_from="Satoshi2BTC")
0.1
swap.providers.bitcoin.utils.decode_transaction_raw(transaction_raw: str, offline: bool = True, headers: dict = {'accept': 'application/json', 'content-type': 'application/json; charset=utf-8', 'user-agent': 'Swap User-Agent 0.5.0'}, 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=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, endpoint: str = 'sochain', headers: dict = {'accept': 'application/json', 'content-type': 'application/json; charset=utf-8', 'user-agent': 'Swap User-Agent 0.5.0'}, timeout: int = 60) dict

Submit transaction raw to Bitcoin blockchain.

Parameters
  • transaction_raw (str) – Bitcoin transaction raw.

  • endpoint (str) – Bitcoin transaction submiter endpoint api name, defaults to sochain.

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

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

Returns

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

>>> from swap.providers.bitcoin.utils import submit_transaction_raw
>>> transaction_raw = "eyJmZWUiOiA2NzgsICJyYXciOiAiMDIwMDAwMDAwMTg4OGJlN2VjMDY1MDk3ZDk1NjY0NzYzZjI3NmQ0MjU1NTJkNzM1ZmIxZDk3NGFlNzhiZjcyMTA2ZGNhMGYzOTEwMTAwMDAwMDAwZmZmZmZmZmYwMjEwMjcwMDAwMDAwMDAwMDAxN2E5MTQyYmIwMTNjM2U0YmViMDg0MjFkZWRjZjgxNWNiNjVhNWMzODgxNzhiODdiY2RkMGUwMDAwMDAwMDAwMTk3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYzAwMDAwMDAwIiwgIm91dHB1dHMiOiBbeyJhbW91bnQiOiA5ODQ5NDYsICJuIjogMSwgInNjcmlwdCI6ICI3NmE5MTQ2NGE4MzkwYjBiMTY4NWZjYmYyZDRiNDU3MTE4ZGM4ZGE5MmQ1NTM0ODhhYyJ9XSwgIm5ldHdvcmsiOiAidGVzdG5ldCIsICJ0eXBlIjogImJpdGNvaW5fZnVuZF91bnNpZ25lZCJ9"
>>> submit_transaction_raw(transaction_raw=transaction_raw)
{'fee': '...', 'type': '...', 'transaction_id': '...', 'network': '...', 'date': '...'}
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"