mirror of
https://github.com/basicswap/basicswap.git
synced 2025-11-05 10:28:10 +01:00
Allow lock-tx nLockTime to be > chain height + 2
This commit is contained in:
@@ -818,7 +818,15 @@ class BCHInterface(BTCInterface):
|
|||||||
self._log.info("Verifying lock tx: {}.".format(self._log.id(txid)))
|
self._log.info("Verifying lock tx: {}.".format(self._log.id(txid)))
|
||||||
|
|
||||||
ensure(tx.nVersion == self.txVersion(), "Bad version")
|
ensure(tx.nVersion == self.txVersion(), "Bad version")
|
||||||
ensure(tx.nLockTime == 0, "Bad nLockTime") # TODO match txns created by cores
|
# locktime must be <= chainheight + 2
|
||||||
|
# TODO: Locktime is set to 0 to keep compaitibility with older nodes.
|
||||||
|
# Set locktime to current chainheight in createSCLockTx.
|
||||||
|
if tx.nLockTime != 0:
|
||||||
|
current_height: int = self.getChainHeight()
|
||||||
|
if tx.nLockTime > current_height + 2:
|
||||||
|
raise ValueError(
|
||||||
|
f"{self.coin_name()} - Bad nLockTime {tx.nLockTime}, current height {current_height}"
|
||||||
|
)
|
||||||
|
|
||||||
script_pk = self.getScriptDest(script_out)
|
script_pk = self.getScriptDest(script_out)
|
||||||
locked_n = findOutput(tx, script_pk)
|
locked_n = findOutput(tx, script_pk)
|
||||||
|
|||||||
@@ -769,6 +769,7 @@ class BTCInterface(Secp256k1Interface):
|
|||||||
) -> bytes:
|
) -> bytes:
|
||||||
tx = CTransaction()
|
tx = CTransaction()
|
||||||
tx.nVersion = self.txVersion()
|
tx.nVersion = self.txVersion()
|
||||||
|
tx.nLockTime = 0 # TODO: match locktimes by core
|
||||||
tx.vout.append(self.txoType()(value, self.getScriptDest(script)))
|
tx.vout.append(self.txoType()(value, self.getScriptDest(script)))
|
||||||
return tx.serialize()
|
return tx.serialize()
|
||||||
|
|
||||||
@@ -1045,7 +1046,15 @@ class BTCInterface(Secp256k1Interface):
|
|||||||
self._log.info("Verifying lock tx: {}.".format(self._log.id(txid)))
|
self._log.info("Verifying lock tx: {}.".format(self._log.id(txid)))
|
||||||
|
|
||||||
ensure(tx.nVersion == self.txVersion(), "Bad version")
|
ensure(tx.nVersion == self.txVersion(), "Bad version")
|
||||||
ensure(tx.nLockTime == 0, "Bad nLockTime") # TODO match txns created by cores
|
# locktime must be <= chainheight + 2
|
||||||
|
# TODO: Locktime is set to 0 to keep compaitibility with older nodes.
|
||||||
|
# Set locktime to current chainheight in createSCLockTx.
|
||||||
|
if tx.nLockTime != 0:
|
||||||
|
current_height: int = self.getChainHeight()
|
||||||
|
if tx.nLockTime > current_height + 2:
|
||||||
|
raise ValueError(
|
||||||
|
f"{self.coin_name()} - Bad nLockTime {tx.nLockTime}, current height {current_height}"
|
||||||
|
)
|
||||||
|
|
||||||
script_pk = self.getScriptDest(script_out)
|
script_pk = self.getScriptDest(script_out)
|
||||||
locked_n = findOutput(tx, script_pk)
|
locked_n = findOutput(tx, script_pk)
|
||||||
@@ -1383,7 +1392,8 @@ class BTCInterface(Secp256k1Interface):
|
|||||||
"feeRate": feerate_str,
|
"feeRate": feerate_str,
|
||||||
}
|
}
|
||||||
rv = self.rpc_wallet("fundrawtransaction", [tx.hex(), options])
|
rv = self.rpc_wallet("fundrawtransaction", [tx.hex(), options])
|
||||||
return bytes.fromhex(rv["hex"])
|
tx_bytes: bytes = bytes.fromhex(rv["hex"])
|
||||||
|
return tx_bytes
|
||||||
|
|
||||||
def getNonSegwitOutputs(self):
|
def getNonSegwitOutputs(self):
|
||||||
unspents = self.rpc_wallet("listunspent", [0, 99999999])
|
unspents = self.rpc_wallet("listunspent", [0, 99999999])
|
||||||
|
|||||||
@@ -490,7 +490,16 @@ class PARTInterfaceBlind(PARTInterface):
|
|||||||
self._log.info("Verifying lock tx: {}.".format(self._log.id(lock_txid_hex)))
|
self._log.info("Verifying lock tx: {}.".format(self._log.id(lock_txid_hex)))
|
||||||
|
|
||||||
ensure(lock_tx_obj["version"] == self.txVersion(), "Bad version")
|
ensure(lock_tx_obj["version"] == self.txVersion(), "Bad version")
|
||||||
ensure(lock_tx_obj["locktime"] == 0, "Bad nLockTime")
|
lock_time: int = lock_tx_obj["locktime"]
|
||||||
|
# locktime must be <= chainheight + 2
|
||||||
|
# TODO: locktime is set to 0 to keep compaitibility with older nodes.
|
||||||
|
# Set locktime to current chainheight in createSCLockTx.
|
||||||
|
if lock_time != 0:
|
||||||
|
current_height: int = self.getChainHeight()
|
||||||
|
if lock_time > current_height + 2:
|
||||||
|
raise ValueError(
|
||||||
|
f"{self.coin_name()} - Bad nLockTime {lock_time}, current height {current_height}"
|
||||||
|
)
|
||||||
|
|
||||||
# Find the output of the lock tx to verify
|
# Find the output of the lock tx to verify
|
||||||
nonce = self.getScriptLockTxNonce(vkbv)
|
nonce = self.getScriptLockTxNonce(vkbv)
|
||||||
|
|||||||
Reference in New Issue
Block a user