mirror of
https://github.com/basicswap/basicswap.git
synced 2026-03-19 08:17:25 +01:00
fix, firo: add createUTXO, fix tests
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (c) 2022-2023 tecnovert
|
# Copyright (c) 2022-2023 tecnovert
|
||||||
# Copyright (c) 2024-2025 The Basicswap developers
|
# Copyright (c) 2024-2026 The Basicswap developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
@@ -136,6 +136,19 @@ class FIROInterface(BTCInterface):
|
|||||||
rv["spark_immature"] = 0
|
rv["spark_immature"] = 0
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
|
def createUTXO(self, value_sats: int):
|
||||||
|
# Create a new address and send value_sats to it
|
||||||
|
|
||||||
|
spendable_balance = self.getSpendableBalance()
|
||||||
|
if spendable_balance < value_sats:
|
||||||
|
raise ValueError("Balance too low")
|
||||||
|
|
||||||
|
address = self.getNewAddress(self._use_segwit, "create_utxo")
|
||||||
|
return (
|
||||||
|
self.withdrawCoin(self.format_amount(value_sats), "plain", address, False),
|
||||||
|
address,
|
||||||
|
)
|
||||||
|
|
||||||
def withdrawCoin(self, value, type_from: str, addr_to: str, subfee: bool) -> str:
|
def withdrawCoin(self, value, type_from: str, addr_to: str, subfee: bool) -> str:
|
||||||
"""Withdraw coins, supporting both transparent and Spark transactions.
|
"""Withdraw coins, supporting both transparent and Spark transactions.
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (c) 2022-2023 tecnovert
|
# Copyright (c) 2022-2023 tecnovert
|
||||||
# Copyright (c) 2024 The Basicswap developers
|
# Copyright (c) 2024-2026 The Basicswap developers
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ class Test(BaseTest):
|
|||||||
0, "getnewaddress", ["mining_addr"], base_rpc_port=FIRO_BASE_RPC_PORT
|
0, "getnewaddress", ["mining_addr"], base_rpc_port=FIRO_BASE_RPC_PORT
|
||||||
)
|
)
|
||||||
# cls.firo_addr = callnoderpc(0, 'addwitnessaddress', [cls.firo_addr], base_rpc_port=FIRO_BASE_RPC_PORT)
|
# cls.firo_addr = callnoderpc(0, 'addwitnessaddress', [cls.firo_addr], base_rpc_port=FIRO_BASE_RPC_PORT)
|
||||||
logging.info("Mining %d Firo blocks to %s", num_blocks, cls.firo_addr)
|
logging.info(f"Mining {num_blocks} Firo blocks to {cls.firo_addr}")
|
||||||
callnoderpc(
|
callnoderpc(
|
||||||
0,
|
0,
|
||||||
"generatetoaddress",
|
"generatetoaddress",
|
||||||
@@ -230,7 +230,7 @@ class Test(BaseTest):
|
|||||||
0, "getblockcount", base_rpc_port=FIRO_BASE_RPC_PORT
|
0, "getblockcount", base_rpc_port=FIRO_BASE_RPC_PORT
|
||||||
)
|
)
|
||||||
num_blocks = 1352 - chain_height # Activate CTLV (bip65)
|
num_blocks = 1352 - chain_height # Activate CTLV (bip65)
|
||||||
logging.info("Mining %d Firo blocks to %s", num_blocks, cls.firo_addr)
|
logging.info(f"Mining {num_blocks} Firo blocks to {cls.firo_addr}")
|
||||||
callnoderpc(
|
callnoderpc(
|
||||||
0,
|
0,
|
||||||
"generatetoaddress",
|
"generatetoaddress",
|
||||||
@@ -286,7 +286,7 @@ class Test(BaseTest):
|
|||||||
self.callnoderpc("generatetoaddress", [num_blocks, self.firo_addr])
|
self.callnoderpc("generatetoaddress", [num_blocks, self.firo_addr])
|
||||||
|
|
||||||
def test_001_firo(self):
|
def test_001_firo(self):
|
||||||
logging.info("---------- Test {} segwit".format(self.test_coin_from.name))
|
logging.info(f"---------- Test {self.test_coin_from.name} segwit")
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Segwit is not currently enabled:
|
Segwit is not currently enabled:
|
||||||
@@ -339,7 +339,7 @@ class Test(BaseTest):
|
|||||||
assert txid_with_scriptsig == tx_signed_decoded["txid"]
|
assert txid_with_scriptsig == tx_signed_decoded["txid"]
|
||||||
|
|
||||||
def test_007_hdwallet(self):
|
def test_007_hdwallet(self):
|
||||||
logging.info("---------- Test {} hdwallet".format(self.test_coin_from.name))
|
logging.info(f"---------- Test {self.test_coin_from.name} hdwallet")
|
||||||
|
|
||||||
swap_client = self.swap_clients[0]
|
swap_client = self.swap_clients[0]
|
||||||
# Run initialiseWallet to set 'main_wallet_seedid_'
|
# Run initialiseWallet to set 'main_wallet_seedid_'
|
||||||
@@ -349,7 +349,7 @@ class Test(BaseTest):
|
|||||||
assert swap_client.checkWalletSeed(self.test_coin_from) is True
|
assert swap_client.checkWalletSeed(self.test_coin_from) is True
|
||||||
|
|
||||||
def test_008_gettxout(self):
|
def test_008_gettxout(self):
|
||||||
logging.info("---------- Test {} gettxout".format(self.test_coin_from.name))
|
logging.info(f"---------- Test {self.test_coin_from.name} gettxout")
|
||||||
|
|
||||||
swap_client = self.swap_clients[0]
|
swap_client = self.swap_clients[0]
|
||||||
|
|
||||||
@@ -428,7 +428,7 @@ class Test(BaseTest):
|
|||||||
assert amount_proved >= require_amount
|
assert amount_proved >= require_amount
|
||||||
|
|
||||||
def test_08_wallet(self):
|
def test_08_wallet(self):
|
||||||
logging.info("---------- Test {} wallet".format(self.test_coin_from.name))
|
logging.info(f"---------- Test {self.test_coin_from.name} wallet")
|
||||||
|
|
||||||
logging.info("Test withdrawal")
|
logging.info("Test withdrawal")
|
||||||
addr = self.callnoderpc(
|
addr = self.callnoderpc(
|
||||||
@@ -447,7 +447,7 @@ class Test(BaseTest):
|
|||||||
}
|
}
|
||||||
json_rv = read_json_api(
|
json_rv = read_json_api(
|
||||||
TEST_HTTP_PORT + 0,
|
TEST_HTTP_PORT + 0,
|
||||||
"wallets/{}/withdraw".format(self.test_coin_from.name.lower()),
|
f"wallets/{self.test_coin_from.name.lower()}/withdraw",
|
||||||
post_json,
|
post_json,
|
||||||
)
|
)
|
||||||
assert len(json_rv["txid"]) == 64
|
assert len(json_rv["txid"]) == 64
|
||||||
@@ -458,7 +458,7 @@ class Test(BaseTest):
|
|||||||
}
|
}
|
||||||
json_rv = read_json_api(
|
json_rv = read_json_api(
|
||||||
TEST_HTTP_PORT + 0,
|
TEST_HTTP_PORT + 0,
|
||||||
"wallets/{}/createutxo".format(self.test_coin_from.name.lower()),
|
f"wallets/{self.test_coin_from.name.lower()}/createutxo",
|
||||||
post_json,
|
post_json,
|
||||||
)
|
)
|
||||||
assert len(json_rv["txid"]) == 64
|
assert len(json_rv["txid"]) == 64
|
||||||
@@ -473,6 +473,14 @@ class Test(BaseTest):
|
|||||||
ci_from = swap_clients[0].ci(coin_from)
|
ci_from = swap_clients[0].ci(coin_from)
|
||||||
ci_to = swap_clients[1].ci(coin_to)
|
ci_to = swap_clients[1].ci(coin_to)
|
||||||
|
|
||||||
|
id_bidder: int = 1
|
||||||
|
self.prepare_balance(
|
||||||
|
coin_to,
|
||||||
|
100.0,
|
||||||
|
1800 + id_bidder,
|
||||||
|
1801 if coin_to in (Coins.XMR,) else 1800,
|
||||||
|
)
|
||||||
|
|
||||||
swap_value = ci_from.make_int(random.uniform(0.2, 20.0), r=1)
|
swap_value = ci_from.make_int(random.uniform(0.2, 20.0), r=1)
|
||||||
rate_swap = ci_to.make_int(random.uniform(0.2, 20.0), r=1)
|
rate_swap = ci_to.make_int(random.uniform(0.2, 20.0), r=1)
|
||||||
offer_id = swap_clients[0].postOffer(
|
offer_id = swap_clients[0].postOffer(
|
||||||
@@ -506,9 +514,7 @@ class Test(BaseTest):
|
|||||||
coin_from = Coins.BTC
|
coin_from = Coins.BTC
|
||||||
coin_to = Coins.FIRO
|
coin_to = Coins.FIRO
|
||||||
logging.info(
|
logging.info(
|
||||||
"---------- Test {} to {} follower recovers coin b lock tx".format(
|
f"---------- Test {coin_from.name} to {coin_to.name} follower recovers coin b lock tx"
|
||||||
coin_from.name, coin_to.name
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
swap_clients = self.swap_clients
|
swap_clients = self.swap_clients
|
||||||
@@ -568,6 +574,14 @@ class Test(BaseTest):
|
|||||||
coin_from, coin_to, swap_value, rate_swap, swap_value, swap_type
|
coin_from, coin_to, swap_value, rate_swap, swap_value, swap_type
|
||||||
)
|
)
|
||||||
|
|
||||||
|
id_bidder: int = 1
|
||||||
|
self.prepare_balance(
|
||||||
|
coin_to,
|
||||||
|
100.0,
|
||||||
|
1800 + id_bidder,
|
||||||
|
1801 if coin_to in (Coins.XMR,) else 1800,
|
||||||
|
)
|
||||||
|
|
||||||
wait_for_offer(test_delay_event, swap_clients[1], offer_id)
|
wait_for_offer(test_delay_event, swap_clients[1], offer_id)
|
||||||
offer = swap_clients[1].getOffer(offer_id)
|
offer = swap_clients[1].getOffer(offer_id)
|
||||||
bid_id = swap_clients[1].postBid(offer_id, offer.amount_from)
|
bid_id = swap_clients[1].postBid(offer_id, offer.amount_from)
|
||||||
@@ -592,7 +606,7 @@ class Test(BaseTest):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_101_full_swap(self):
|
def test_101_full_swap(self):
|
||||||
logging.info("---------- Test {} to XMR".format(self.test_coin_from.name))
|
logging.info(f"---------- Test {self.test_coin_from.name} to XMR")
|
||||||
if not self.test_xmr:
|
if not self.test_xmr:
|
||||||
logging.warning("Skipping test")
|
logging.warning("Skipping test")
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user