mirror of
https://github.com/basicswap/basicswap.git
synced 2026-05-09 07:52:13 +02:00
Fix: PIVX/Firo bug and test_pivx.py
This commit is contained in:
@@ -1083,8 +1083,8 @@ class BTCInterface(Secp256k1Interface):
|
|||||||
return self.encode_p2wsh(script)
|
return self.encode_p2wsh(script)
|
||||||
|
|
||||||
def getDestForAddress(self, address: str) -> bytes:
|
def getDestForAddress(self, address: str) -> bytes:
|
||||||
bech32_prefix = self.chainparams_network()["hrp"]
|
bech32_prefix: str | None = self.chainparams_network().get("hrp", None)
|
||||||
if address.startswith(bech32_prefix + "1"):
|
if bech32_prefix and address.startswith(bech32_prefix + "1"):
|
||||||
_, witprog = segwit_addr.decode(bech32_prefix, address)
|
_, witprog = segwit_addr.decode(bech32_prefix, address)
|
||||||
return CScript([OP_0, bytes(witprog)])
|
return CScript([OP_0, bytes(witprog)])
|
||||||
|
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ class FIROInterface(BTCInterface):
|
|||||||
)
|
)
|
||||||
return pay_fee
|
return pay_fee
|
||||||
|
|
||||||
def signTxWithKey(self, tx: bytes, key: bytes) -> bytes:
|
def signTxWithKey(self, tx: bytes, key: bytes, prev_amount=None) -> bytes:
|
||||||
key_wif = self.encodeKey(key)
|
key_wif = self.encodeKey(key)
|
||||||
rv = self.rpc(
|
rv = self.rpc(
|
||||||
"signrawtransaction",
|
"signrawtransaction",
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from .btc import BTCInterface
|
|||||||
from basicswap.rpc import make_rpc_func
|
from basicswap.rpc import make_rpc_func
|
||||||
from basicswap.chainparams import Coins
|
from basicswap.chainparams import Coins
|
||||||
from basicswap.util.address import decodeAddress
|
from basicswap.util.address import decodeAddress
|
||||||
from .contrib.pivx_test_framework.messages import CBlock, ToHex, FromHex, CTransaction
|
from .contrib.pivx_test_framework.messages import CTransaction
|
||||||
from basicswap.contrib.test_framework.script import (
|
from basicswap.contrib.test_framework.script import (
|
||||||
CScript,
|
CScript,
|
||||||
OP_DUP,
|
OP_DUP,
|
||||||
@@ -100,29 +100,13 @@ class PIVXInterface(BTCInterface):
|
|||||||
return decodeAddress(address)[1:]
|
return decodeAddress(address)[1:]
|
||||||
|
|
||||||
def getBlockWithTxns(self, block_hash):
|
def getBlockWithTxns(self, block_hash):
|
||||||
# TODO: Bypass decoderawtransaction and getblockheader
|
block = self.rpc("getblock", [block_hash, True])
|
||||||
block = self.rpc("getblock", [block_hash, False])
|
|
||||||
block_header = self.rpc("getblockheader", [block_hash])
|
|
||||||
decoded_block = CBlock()
|
|
||||||
decoded_block = FromHex(decoded_block, block)
|
|
||||||
|
|
||||||
tx_rv = []
|
tx_rv = []
|
||||||
for tx in decoded_block.vtx:
|
for txid_str in block["tx"]:
|
||||||
tx_dec = self.rpc("decoderawtransaction", [ToHex(tx)])
|
tx_dec = self.rpc("getrawtransaction", [txid_str, True])
|
||||||
tx_rv.append(tx_dec)
|
tx_rv.append(tx_dec)
|
||||||
|
block["tx"] = tx_rv
|
||||||
block_rv = {
|
return block
|
||||||
"hash": block_hash,
|
|
||||||
"previousblockhash": block_header["previousblockhash"],
|
|
||||||
"tx": tx_rv,
|
|
||||||
"confirmations": block_header["confirmations"],
|
|
||||||
"height": block_header["height"],
|
|
||||||
"time": block_header["time"],
|
|
||||||
"version": block_header["version"],
|
|
||||||
"merkleroot": block_header["merkleroot"],
|
|
||||||
}
|
|
||||||
|
|
||||||
return block_rv
|
|
||||||
|
|
||||||
def withdrawCoin(self, value, addr_to, subfee):
|
def withdrawCoin(self, value, addr_to, subfee):
|
||||||
params = [addr_to, value, "", "", subfee]
|
params = [addr_to, value, "", "", subfee]
|
||||||
@@ -150,7 +134,7 @@ class PIVXInterface(BTCInterface):
|
|||||||
)
|
)
|
||||||
return pay_fee
|
return pay_fee
|
||||||
|
|
||||||
def signTxWithKey(self, tx: bytes, key: bytes) -> bytes:
|
def signTxWithKey(self, tx: bytes, key: bytes, prev_amount=None) -> bytes:
|
||||||
key_wif = self.encodeKey(key)
|
key_wif = self.encodeKey(key)
|
||||||
rv = self.rpc(
|
rv = self.rpc(
|
||||||
"signrawtransaction",
|
"signrawtransaction",
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ def prepareDir(datadir, nodeId, network_key, network_pubkey):
|
|||||||
"datadir": node_dir,
|
"datadir": node_dir,
|
||||||
"bindir": cfg.PARTICL_BINDIR,
|
"bindir": cfg.PARTICL_BINDIR,
|
||||||
"blocks_confirmed": 2, # Faster testing
|
"blocks_confirmed": 2, # Faster testing
|
||||||
|
"wallet_name": "bsx_wallet",
|
||||||
},
|
},
|
||||||
"pivx": {
|
"pivx": {
|
||||||
"connection_type": "rpc",
|
"connection_type": "rpc",
|
||||||
@@ -191,6 +192,7 @@ def prepareDir(datadir, nodeId, network_key, network_pubkey):
|
|||||||
"bindir": PIVX_BINDIR,
|
"bindir": PIVX_BINDIR,
|
||||||
"use_csv": False,
|
"use_csv": False,
|
||||||
"use_segwit": False,
|
"use_segwit": False,
|
||||||
|
"wallet_name": "",
|
||||||
},
|
},
|
||||||
"bitcoin": {
|
"bitcoin": {
|
||||||
"connection_type": "rpc",
|
"connection_type": "rpc",
|
||||||
@@ -199,6 +201,7 @@ def prepareDir(datadir, nodeId, network_key, network_pubkey):
|
|||||||
"datadir": btcdatadir,
|
"datadir": btcdatadir,
|
||||||
"bindir": cfg.BITCOIN_BINDIR,
|
"bindir": cfg.BITCOIN_BINDIR,
|
||||||
"use_segwit": True,
|
"use_segwit": True,
|
||||||
|
"wallet_name": "bsx_wallet",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"check_progress_seconds": 2,
|
"check_progress_seconds": 2,
|
||||||
@@ -760,7 +763,17 @@ class Test(unittest.TestCase):
|
|||||||
rtx = pivxRpc(f'getrawtransaction "{txid}" true')
|
rtx = pivxRpc(f'getrawtransaction "{txid}" true')
|
||||||
assert rtx["version"] == 3
|
assert rtx["version"] == 3
|
||||||
|
|
||||||
block_hash = pivxRpc(f'generatetoaddress 1 "{generate_addr}"')[0]
|
block_hash = None
|
||||||
|
for i in range(15):
|
||||||
|
rtx = pivxRpc(f'getrawtransaction "{txid}" true')
|
||||||
|
if "blockhash" in rtx:
|
||||||
|
block_hash = rtx["blockhash"]
|
||||||
|
logging.info(f"Shielded tx confirmed in block {block_hash} after {i}s")
|
||||||
|
break
|
||||||
|
if i == 5:
|
||||||
|
pivxRpc(f'generatetoaddress 1 "{generate_addr}"')
|
||||||
|
delay_event.wait(1)
|
||||||
|
assert block_hash is not None, "Shielded tx was not confirmed"
|
||||||
|
|
||||||
ci = self.swap_clients[0].ci(Coins.PIVX)
|
ci = self.swap_clients[0].ci(Coins.PIVX)
|
||||||
block = ci.getBlockWithTxns(block_hash)
|
block = ci.getBlockWithTxns(block_hash)
|
||||||
@@ -837,7 +850,11 @@ class Test(unittest.TestCase):
|
|||||||
swap_value = ci_from.make_int(swap_value)
|
swap_value = ci_from.make_int(swap_value)
|
||||||
assert swap_value > ci_from.make_int(9)
|
assert swap_value > ci_from.make_int(9)
|
||||||
|
|
||||||
itx = pi.getFundedInitiateTxTemplate(ci_from, swap_value, True)
|
addr_to = pi.getMockAddrTo(ci_from)
|
||||||
|
funded_tx = ci_from.createRawFundedTransaction(
|
||||||
|
addr_to, swap_value, True, lock_unspents=True
|
||||||
|
)
|
||||||
|
itx = bytes.fromhex(funded_tx)
|
||||||
itx_decoded = ci_from.describeTx(itx.hex())
|
itx_decoded = ci_from.describeTx(itx.hex())
|
||||||
|
|
||||||
n = pi.findMockVout(ci_from, itx_decoded)
|
n = pi.findMockVout(ci_from, itx_decoded)
|
||||||
|
|||||||
Reference in New Issue
Block a user