Transaction

Bitcoin transaction in blockchain network.

class swap.providers.bitcoin.transaction.Transaction(network: str = 'mainnet', version: int = 2)

Bitcoin Transaction.

Parameters
  • network (str) – Bitcoin network, defaults to testnet.

  • version (int) – Bitcoin transaction version, defaults to 2.

Returns

Transaction – Bitcoin transaction instance.

Note

Bitcoin has only two networks, mainnet and testnet.

fee()int

Get Bitcoin transaction fee.

Returns

int – Bitcoin transaction fee.

>>> from swap.providers.bitcoin.transaction import ClaimTransaction
>>> claim_transaction = ClaimTransaction("testnet")
>>> claim_transaction.build_transaction("mgokpSJoX7npmAK1Zj8ze1926CLxYDt1iF", "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> claim_transaction.fee()
576
hash()str

Get Bitcoin transaction hash.

Returns

str – Bitcoin transaction id/hash.

>>> from swap.providers.bitcoin.transaction import FundTransaction
>>> fund_transaction = FundTransaction("testnet")
>>> fund_transaction.build_transaction("mkFWGt4hT11XS8dJKzzRFsTrqjjAwZfQAC", "2N6kHwQy6Ph5EdKNgzGrcW2WhGHKGfmP5ae", 10000)
>>> fund_transaction.hash()
"9cc0524fb8e7b2c5fecaee4eb91d43a3dc5cc18e9906abcb35a5732ff52efcc7"
json()dict

Get Bitcoin transaction json format.

Returns

dict – Bitcoin transaction json format.

>>> from swap.providers.bitcoin.transaction import RefundTransaction
>>> refund_transaction = RefundTransaction("testnet")
>>> refund_transaction.build_transaction("mkFWGt4hT11XS8dJKzzRFsTrqjjAwZfQAC", "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> refund_transaction.json()
{"hex": "02000000012c392217483906f902e73c4bc132864de58153772d79268960998162266634be0100000000ffffffff02e80300000000000017a914971894c58d85981c16c2059d422bcde0b156d04487a6290000000000001976a9146bce65e58a50b97989930e9a4ff1ac1a77515ef188ac00000000", "txid": "9cc0524fb8e7b2c5fecaee4eb91d43a3dc5cc18e9906abcb35a5732ff52efcc7", "hash": "9cc0524fb8e7b2c5fecaee4eb91d43a3dc5cc18e9906abcb35a5732ff52efcc7", "size": 117, "vsize": 117, "version": 2, "locktime": 0, "vin": [{"txid": "be346626628199608926792d775381e54d8632c14b3ce702f90639481722392c", "vout": 1, "scriptSig": {"asm": "", "hex": ""}, "sequence": "4294967295"}], "vout": [{"value": "0.00001000", "n": 0, "scriptPubKey": {"asm": "OP_HASH160 971894c58d85981c16c2059d422bcde0b156d044 OP_EQUAL", "hex": "a914971894c58d85981c16c2059d422bcde0b156d04487", "type": "p2sh", "address": "2N729UBGZB3xjsGFRgKivy4bSjkaJGMVSpB"}}, {"value": "0.00010662", "n": 1, "scriptPubKey": {"asm": "OP_DUP OP_HASH160 6bce65e58a50b97989930e9a4ff1ac1a77515ef1 OP_EQUALVERIFY OP_CHECKSIG", "hex": "76a9146bce65e58a50b97989930e9a4ff1ac1a77515ef188ac", "type": "p2pkh", "address": "mqLyrNDjpENRMZAoDpspH7kR9RtgvhWzYE"}}]}
raw()str

Get Bitcoin main transaction raw.

Returns

str – Bitcoin transaction raw.

>>> from swap.providers.bitcoin.transaction import ClaimTransaction
>>> claim_transaction = ClaimTransaction("testnet")
>>> claim_transaction.build_transaction("mgokpSJoX7npmAK1Zj8ze1926CLxYDt1iF", "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> claim_transaction.raw()
"02000000012c392217483906f902e73c4bc132864de58153772d79268960998162266634be0100000000ffffffff02e80300000000000017a914971894c58d85981c16c2059d422bcde0b156d04487a6290000000000001976a9146bce65e58a50b97989930e9a4ff1ac1a77515ef188ac00000000"
type()str

Get Bitcoin signature transaction type.

Returns

str – Bitcoin signature transaction type.

>>> from swap.providers.bitcoin.transaction import ClaimTransaction
>>> claim_transaction = ClaimTransaction("testnet")
>>> claim_transaction.build_transaction("mgokpSJoX7npmAK1Zj8ze1926CLxYDt1iF", "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> claim_transaction.type()
"bitcoin_claim_unsigned"

FundTransaction

class swap.providers.bitcoin.transaction.FundTransaction(network: str = 'mainnet', version: int = 2)

Bitcoin Fund transaction.

Parameters
  • network (str) – Bitcoin network, defaults to testnet.

  • version (int) – Bitcoin transaction version, defaults to 2.

Returns

FundTransaction – Bitcoin fund transaction instance.

Warning

Do not forget to build transaction after initialize fund transaction.

build_transaction(address: str, htlc_address: str, amount: int, locktime: int = 0)swap.providers.bitcoin.transaction.FundTransaction

Build Bitcoin fund transaction.

Parameters
  • address (str) – Bitcoin sender address.

  • htlc_address (str) – Bitcoin Hash Time Lock Contract (HTLC) address.

  • amount (int) – Bitcoin amount to fund.

  • locktime (int) – Bitcoin transaction lock time, defaults to 0.

Returns

FundTransaction – Bitcoin fund transaction instance.

>>> from swap.providers.bitcoin.transaction import FundTransaction
>>> fund_transaction = FundTransaction("testnet")
>>> fund_transaction.build_transaction(address="mkFWGt4hT11XS8dJKzzRFsTrqjjAwZfQAC", htlc_address="2N6kHwQy6Ph5EdKNgzGrcW2WhGHKGfmP5ae", amount=10000)
<swap.providers.bitcoin.transaction.FundTransaction object at 0x0409DAF0>
sign(solver: swap.providers.bitcoin.solver.FundSolver)swap.providers.bitcoin.transaction.FundTransaction

Sign Bitcoin fund transaction.

Parameters

solver (bitcoin.solver.FundSolver) – Bitcoin fund solver.

Returns

FundTransaction – Bitcoin fund transaction instance.

>>> from swap.providers.bitcoin.transaction import FundTransaction
>>> from swap.providers.bitcoin.solver import FundSolver
>>> from swap.providers.bitcoin.wallet import Wallet, DEFAULT_PATH
>>> sender_wallet = Wallet("testnet").from_entropy("72fee73846f2d1a5807dc8c953bf79f1").from_path(DEFAULT_PATH)
>>> fund_solver = FundSolver(sender_wallet.root_xprivate_key())
>>> fund_transaction = FundTransaction("testnet").build_transaction(sender_wallet.address(), "2N6kHwQy6Ph5EdKNgzGrcW2WhGHKGfmP5ae", 10000)
>>> fund_transaction.sign(solver=fund_solver)
<swap.providers.bitcoin.transaction.FundTransaction object at 0x0409DAF0>
transaction_raw()str

Get Bitcoin fund transaction raw.

Returns

str – Bitcoin fund transaction raw.

>>> from swap.providers.bitcoin.transaction import FundTransaction
>>> fund_transaction = FundTransaction("testnet")
>>> fund_transaction.build_transaction("mkFWGt4hT11XS8dJKzzRFsTrqjjAwZfQAC", "2N6kHwQy6Ph5EdKNgzGrcW2WhGHKGfmP5ae", 10000)
>>> fund_transaction.transaction_raw()
"eyJmZWUiOiA2NzgsICJyYXciOiAiMDIwMDAwMDAwMTJjMzkyMjE3NDgzOTA2ZjkwMmU3M2M0YmMxMzI4NjRkZTU4MTUzNzcyZDc5MjY4OTYwOTk4MTYyMjY2NjM0YmUwMTAwMDAwMDAwZmZmZmZmZmYwMmU4MDMwMDAwMDAwMDAwMDAxN2E5MTQ5NzE4OTRjNThkODU5ODFjMTZjMjA1OWQ0MjJiY2RlMGIxNTZkMDQ0ODdhNjI5MDAwMDAwMDAwMDAwMTk3NmE5MTQ2YmNlNjVlNThhNTBiOTc5ODk5MzBlOWE0ZmYxYWMxYTc3NTE1ZWYxODhhYzAwMDAwMDAwIiwgIm91dHB1dHMiOiBbeyJhbW91bnQiOiAxMjM0MCwgIm4iOiAxLCAic2NyaXB0IjogIjc2YTkxNDZiY2U2NWU1OGE1MGI5Nzk4OTkzMGU5YTRmZjFhYzFhNzc1MTVlZjE4OGFjIn1dLCAidHlwZSI6ICJiaXRjb2luX2Z1bmRfdW5zaWduZWQifQ"

ClaimTransaction

class swap.providers.bitcoin.transaction.ClaimTransaction(network: str = 'mainnet', version: int = 2)

Bitcoin Claim transaction.

Parameters
  • network (str) – Bitcoin network, defaults to testnet.

  • version (int) – Bitcoin transaction version, defaults to 2.

Returns

ClaimTransaction – Bitcoin claim transaction instance.

Warning

Do not forget to build transaction after initialize claim transaction.

build_transaction(address: str, transaction_id: str, amount: int, locktime: int = 0)swap.providers.bitcoin.transaction.ClaimTransaction

Build Bitcoin claim transaction.

Parameters
  • address (str) – Bitcoin recipient address.

  • transaction_id (str) – Bitcoin fund transaction id to redeem.

  • amount (int) – Bitcoin amount to withdraw.

  • locktime (int) – Bitcoin transaction lock time, defaults to 0.

Returns

ClaimTransaction – Bitcoin claim transaction instance.

>>> from swap.providers.bitcoin.transaction import ClaimTransaction
>>> claim_transaction = ClaimTransaction("testnet")
>>> claim_transaction.build_transaction(address="mgokpSJoX7npmAK1Zj8ze1926CLxYDt1iF", transaction_id="1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", amount=10000)
<swap.providers.bitcoin.transaction.ClaimTransaction object at 0x0409DAF0>
sign(solver: swap.providers.bitcoin.solver.ClaimSolver)swap.providers.bitcoin.transaction.ClaimTransaction

Sign Bitcoin claim transaction.

Parameters

solver (bitcoin.solver.ClaimSolver) – Bitcoin claim solver.

Returns

ClaimTransaction – Bitcoin claim transaction instance.

>>> from swap.providers.bitcoin.transaction import ClaimTransaction
>>> from swap.providers.bitcoin.solver import ClaimSolver
>>> from swap.providers.bitcoin.wallet import Wallet, DEFAULT_PATH
>>> recipient_wallet = Wallet("testnet").from_mnemonic("6bc9e3bae5945876931963c2b3a3b040").from_path(DEFAULT_PATH)
>>> bytecode = "63aa20821124b554d13f247b1e5d10b84e44fb1296f18f38bbaa1bea34a12c843e01588876a9140e259e08f2ec9fc99a92b6f66fdfcb3c7914fd6888ac6702e803b27576a91433ecab3d67f0e2bde43e52f41ec1ecbdc73f11f888ac68"
>>> claim_solver = ClaimSolver(recipient_wallet.root_xprivate_key(), "Hello Meheret!", bytecode)
>>> claim_transaction = ClaimTransaction("testnet")
>>> claim_transaction.build_transaction(recipient_wallet.address(), "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> claim_transaction.sign(solver=claim_solver)
<swap.providers.bitcoin.transaction.ClaimTransaction object at 0x0409DAF0>
transaction_raw()str

Get Bitcoin claim transaction raw.

Returns

str – Bitcoin claim transaction raw.

>>> from swap.providers.bitcoin.transaction import ClaimTransaction
>>> claim_transaction = ClaimTransaction("testnet")
>>> claim_transaction.build_transaction("mgokpSJoX7npmAK1Zj8ze1926CLxYDt1iF", "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> claim_transaction.transaction_raw()
"eyJmZWUiOiA2NzgsICJyYXciOiAiMDIwMDAwMDAwMTJjMzkyMjE3NDgzOTA2ZjkwMmU3M2M0YmMxMzI4NjRkZTU4MTUzNzcyZDc5MjY4OTYwOTk4MTYyMjY2NjM0YmUwMTAwMDAwMDAwZmZmZmZmZmYwMmU4MDMwMDAwMDAwMDAwMDAxN2E5MTQ5NzE4OTRjNThkODU5ODFjMTZjMjA1OWQ0MjJiY2RlMGIxNTZkMDQ0ODdhNjI5MDAwMDAwMDAwMDAwMTk3NmE5MTQ2YmNlNjVlNThhNTBiOTc5ODk5MzBlOWE0ZmYxYWMxYTc3NTE1ZWYxODhhYzAwMDAwMDAwIiwgIm91dHB1dHMiOiBbeyJhbW91bnQiOiAxMjM0MCwgIm4iOiAxLCAic2NyaXB0IjogIjc2YTkxNDZiY2U2NWU1OGE1MGI5Nzk4OTkzMGU5YTRmZjFhYzFhNzc1MTVlZjE4OGFjIn1dLCAidHlwZSI6ICJiaXRjb2luX2Z1bmRfdW5zaWduZWQifQ"

RefundTransaction

class swap.providers.bitcoin.transaction.RefundTransaction(network: str = 'mainnet', version: int = 2)

Bitcoin Refund transaction.

Parameters
  • network (str) – Bitcoin network, defaults to testnet.

  • version (int) – Bitcoin transaction version, defaults to 2.

Returns

RefundTransaction – Bitcoin refund transaction instance.

Warning

Do not forget to build transaction after initialize refund transaction.

build_transaction(address: str, transaction_id: str, amount: int, locktime: int = 0)swap.providers.bitcoin.transaction.RefundTransaction

Build Bitcoin refund transaction.

Parameters
  • address (str) – Bitcoin sender address.

  • transaction_id (str) – Bitcoin fund transaction id to redeem.

  • amount (int) – Bitcoin amount to withdraw.

  • locktime (int) – Bitcoin transaction lock time, defaults to 0.

Returns

RefundTransaction – Bitcoin refund transaction instance.

>>> from swap.providers.bitcoin.transaction import RefundTransaction
>>> refund_transaction = RefundTransaction("testnet")
>>> refund_transaction.build_transaction(address="mkFWGt4hT11XS8dJKzzRFsTrqjjAwZfQAC", transaction_id="1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", amount=10000)
<swap.providers.bitcoin.transaction.RefundTransaction object at 0x0409DAF0>
sign(solver: swap.providers.bitcoin.solver.RefundSolver)swap.providers.bitcoin.transaction.RefundTransaction

Sign Bitcoin refund transaction.

Parameters

solver (bitcoin.solver.RefundSolver) – Bitcoin refund solver.

Returns

RefundTransaction – Bitcoin refund transaction instance.

>>> from swap.providers.bitcoin.transaction import RefundTransaction
>>> from swap.providers.bitcoin.solver import RefundSolver
>>> from swap.providers.bitcoin.wallet import Wallet, DEFAULT_PATH
>>> sender_wallet = Wallet("testnet").from_entropy("72fee73846f2d1a5807dc8c953bf79f1").from_path(DEFAULT_PATH)
>>> bytecode = "63aa20821124b554d13f247b1e5d10b84e44fb1296f18f38bbaa1bea34a12c843e01588876a9140e259e08f2ec9fc99a92b6f66fdfcb3c7914fd6888ac6702e803b27576a91433ecab3d67f0e2bde43e52f41ec1ecbdc73f11f888ac68"
>>> refund_solver = RefundSolver(sender_wallet.root_xprivate_key(), bytecode, sequence=1000)
>>> refund_transaction = RefundTransaction("testnet")
>>> refund_transaction.build_transaction(sender_wallet.address(), "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> refund_transaction.sign(solver=refund_solver)
<swap.providers.bitcoin.transaction.RefundTransaction object at 0x0409DAF0>
transaction_raw()str

Get Bitcoin refund transaction raw.

Returns

str – Bitcoin refund transaction raw.

>>> from swap.providers.bitcoin.transaction import RefundTransaction
>>> refund_transaction = RefundTransaction("testnet")
>>> refund_transaction.build_transaction("mkFWGt4hT11XS8dJKzzRFsTrqjjAwZfQAC", "1006a6f537fcc4888c65f6ff4f91818a1c6e19bdd3130f59391c00212c552fbd", 10000)
>>> refund_transaction.transaction_raw()
"eyJmZWUiOiA2NzgsICJyYXciOiAiMDIwMDAwMDAwMTJjMzkyMjE3NDgzOTA2ZjkwMmU3M2M0YmMxMzI4NjRkZTU4MTUzNzcyZDc5MjY4OTYwOTk4MTYyMjY2NjM0YmUwMTAwMDAwMDAwZmZmZmZmZmYwMmU4MDMwMDAwMDAwMDAwMDAxN2E5MTQ5NzE4OTRjNThkODU5ODFjMTZjMjA1OWQ0MjJiY2RlMGIxNTZkMDQ0ODdhNjI5MDAwMDAwMDAwMDAwMTk3NmE5MTQ2YmNlNjVlNThhNTBiOTc5ODk5MzBlOWE0ZmYxYWMxYTc3NTE1ZWYxODhhYzAwMDAwMDAwIiwgIm91dHB1dHMiOiBbeyJhbW91bnQiOiAxMjM0MCwgIm4iOiAxLCAic2NyaXB0IjogIjc2YTkxNDZiY2U2NWU1OGE1MGI5Nzk4OTkzMGU5YTRmZjFhYzFhNzc1MTVlZjE4OGFjIn1dLCAidHlwZSI6ICJiaXRjb2luX2Z1bmRfdW5zaWduZWQifQ"