# Tips & Tricks ## Gathering UTXO For Bitcoin-based networks there are two ways to create UTXO list: automated and manual. ### Automated This method is used behind the scene in the `atomic_swap()` method when the `solvable_utxo` argument hasn't been passed. from clove.network import Litecoin network = Litecoin() utxo = network.get_utxo(address='LUAn5PWmsPavgz32mGkqsUuAKncftS37Jq', amount='0.01') utxo [ Utxo( tx_id='0cd90567497823097d03464b4b2d08dd659f1c5621dd55e9540bc9bcd3e191ec', vout='0', value='0.00976168', tx_script='76a91485c0522f6e23beb11cc3d066cd20ed732648a4e688ac', wallet=None, secret=None, refund=False ), Utxo( tx_id='a5c027027c695f403fe570850e35ffd44bb28479ecaaee039372015fe0aae7b2', vout='0', value='0.00097114', tx_script='76a91485c0522f6e23beb11cc3d066cd20ed732648a4e688ac', wallet=None, secret=None, refund=False ) ] ### Manual If some network doesn't have block explorer integration to gather UTXO automatically you can still create it manually by getting required data (`tx_id`, `vout`, `value` and `tx_script`) from some other source. from clove.network.bitcoin.utxo import Utxo utxo_list = [ Utxo( tx_id='5d920e7093b2f0ac94cb1c13a42a79ed1c1290fcc4155d15a123d69b1afe05d2', vout=1, value=2.086, tx_script='76a9142b6a3314e8fcf1f1fd6b4d70b112bd5a1928505788ac' ), ] and then you can use this list in atomic swap transaction. network.atomic_swap( sender_address=alice_address, recipient_address=bob_address, value=1.5, solvable_utxo=utxo_list, ) ## Getting fee In Bitcoin-based networks every transaction needs to include some small fee for miners. Fee depends on several factors and is changing over time. ### via Clove API The easiest way to get a current fee is to ask Clove API via `get_current_fee_per_kb` method. Clove API is a proxy between you and block explorer with a cache layer so you will not be exposed to requests limits in some block explorers. from clove.network import Bitcoin network = Bitcoin() network.get_current_fee_per_kb() 0.00014827 ### via block explorer You can omit the Clove API and calculate fee directly from network's block explorer from clove.network import Mooncoin network = Mooncoin() network.get_fee() 0.00200369 some of those networks support also counting fee from a given number of last transactions network.get_fee(tx_limit=20) 0.00200362 ### Setting fee manually If you want to suggest your own fee value you can do this directly by setting `transaction.fee`. transaction.fee = 0.005 transaction.add_fee() transaction.sign(SOME_WALLET) ## Publishing custom transactions Even if you have non atomic swap transaction you can still use clove for publishing. raw_transaction = '010000000184a38a4e8743964249665fb241fbd3...35b' network.publish(raw_transaction) ## Getting transaction details Using clove you can check details of every transaction by hash. from clove.network import Mooncoin network = Mooncoin() network.get_transaction('675e379fa2e0ce4853b8d33ee13d90eb1cdc71aecdf94ecf455d3b7cf04577ac') {'block': 1358589, 'confirmations': 72, 'fees': 0.000654, 'hash': '675e379fa2e0ce4853b8d33ee13d90eb1cdc71aecdf94ecf455d3b7cf04577ac', 'index': 2, 'inputs': [{'addr': '2ZqW69xn69cLSqRjdaCgyCutmVtpGc5hy5', 'amount': 5655.451082, 'received_from': {'n': 0, 'tx': 'f7d5e6eb642db342647017621bda3c3f78ccb1338cf10d2a0ae90bd606582c26'}}], 'outputs': [{'addr': '2PtewZ6yPQUyb3ATgUnUH5kaLHhNm9QupF', 'amount': 5650.170428, 'script': '76a914774ef2ad06c0bf967b55b5e221af795d01e66bd388ac'}, {'addr': '2Z1cWuzCzWAxo1BumMiiqDd7k5jpv5JvGk', 'amount': 0.76, 'script': '76a914db58f7b45d5555bff1b49a7a79e6e1cb25eb558288ac'}, {'addr': '2VQFxhq4LFRu2wfq2gP6btve2MiVwuiXsm', 'amount': 2.04, 'script': '76a914b3c0df73140cc787723252cc9f7c0db04953023188ac'}, {'addr': '2MzTQt2GuGd7fx1aT4vsBWQDg2uh1aLKGQ', 'amount': 0.6, 'script': '76a9146277917f54f218d4723452a307f7134542db079688ac'}, {'addr': '2bimR99ZxpyeTxVeRrtoE4V3eEbUaDdLgD', 'amount': 1.88, 'script': '76a914f911b40d716f6a2da724cb333cccdb4f2546fb7688ac'}], 'timestamp': 1539000366, 'total_input': 5655.451082, 'total_output': 5655.450428} ## Getting balance To check the balance of a given wallet or contract just use from clove.network import BitcoinTestNet network = BitcoinTestNet() network.get_balance('msJ2ucZ2NDhpVzsiNE5mGUFzqFDggjBVTM') 4.22188744