Source code for bitcoinlib.services.bitcoinlibtest

# -*- coding: utf-8 -*-
#
#    BitcoinLib - Python Cryptocurrency Library
#    BitcoinLib Test Network for Unit Tests
#    © 2018 February - 1200 Web Development <http://1200wd.com/>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

import logging
import hashlib
from bitcoinlib.services.baseclient import BaseClient
from bitcoinlib.main import MAX_TRANSACTIONS
from bitcoinlib.encoding import addr_to_pubkeyhash, addr_bech32_to_pubkeyhash, double_sha256, to_bytes

_logger = logging.getLogger(__name__)

PROVIDERNAME = 'bitcoinlib'


[docs] class BitcoinLibTestClient(BaseClient): """ Dummy service client for bitcoinlib test network. Only used for testing. Does not make any connection to a service provider, so can be used offline. """ def __init__(self, network, base_url, denominator, *args): super(self.__class__, self).__init__(network, PROVIDERNAME, base_url, denominator, *args)
[docs] def getbalance(self, addresslist): """ Dummy getbalance method for bitcoinlib testnet :param addresslist: List of addresses :type addresslist: list :return int: """ return self.units * len(addresslist)
def _get_txid(self, address, n): try: pkh = str(n).encode() + addr_to_pubkeyhash(address)[1:] except Exception: pkh = str(n).encode() + addr_bech32_to_pubkeyhash(address)[1:] return hashlib.sha256(pkh).hexdigest()
[docs] def getutxos(self, address, after_txid='', limit=10, utxos_per_address=2): """ Dummy method to retreive UTXO's. This method creates a new UTXO for each address provided out of the testnet void, which can be used to create test transactions for the bitcoinlib testnet. :param address: Address string :type address: str :param after_txid: Transaction ID of last known transaction. Only check for utxos after given tx id. Default: Leave empty to return all utxos. If used only provide a single address :type after_txid: str :param limit: Maximum number of utxo's to return :type limit: int :return list: The created UTXO set """ utxos = [] for n in range(utxos_per_address): txid = self._get_txid(address, n) utxos.append( { 'address': address, 'txid': txid, 'confirmations': 10, 'output_n': 0, 'index': 0, 'value': 1 * self.units, 'script': '', } ) return utxos
# def gettransaction(self, tx_id): # def gettransactions(self, address, after_txid='', limit=MAX_TRANSACTIONS):
[docs] def sendrawtransaction(self, rawtx): """ Dummy method to send transactions on the bitcoinlib testnet. The bitcoinlib testnet does not exists, so it just returns the transaction hash. :param rawtx: A raw transaction hash :type rawtx: bytes, str :return str: Transaction hash """ txid = double_sha256(to_bytes(rawtx))[::-1].hex() return { 'txid': txid, 'response_dict': {} }
[docs] def estimatefee(self, blocks): """ Dummy estimate fee method for the bitcoinlib testnet. :param blocks: Number of blocks :type blocks: int :return int: Fee as 100000 // number of blocks """ return 100000 // blocks
[docs] def blockcount(self): return 1
[docs] def mempool(self, txid=''): return [txid]