From 80915d9865dfeeb24eff4fed8ccf3e695b20f173 Mon Sep 17 00:00:00 2001 From: tecnovert Date: Sun, 11 May 2025 11:59:19 +0200 Subject: [PATCH] Deduplicate getP2SHScriptForHash --- basicswap/basicswap.py | 5 +---- basicswap/interface/btc.py | 3 +++ basicswap/interface/part.py | 10 ++++------ basicswap/util/script.py | 10 +--------- 4 files changed, 9 insertions(+), 19 deletions(-) diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index dca3f20..083b255 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -50,9 +50,6 @@ from .util import ( make_int, ensure, ) -from .util.script import ( - getP2SHScriptForHash, -) from .util.address import ( toWIF, decodeWif, @@ -4536,7 +4533,7 @@ class BasicSwap(BaseApp): prev_p2wsh = ci.getScriptDest(txn_script) script_pub_key = prev_p2wsh.hex() else: - script_pub_key = getP2SHScriptForHash(ci.pkh(txn_script)).hex() + script_pub_key = ci.get_p2sh_script_pubkey(txn_script).hex() prevout = { "txid": prev_txnid, diff --git a/basicswap/interface/btc.py b/basicswap/interface/btc.py index 04abd5f..a31dd9e 100644 --- a/basicswap/interface/btc.py +++ b/basicswap/interface/btc.py @@ -1393,6 +1393,9 @@ class BTCInterface(Secp256k1Interface): def getScriptDest(self, script): return CScript([OP_0, sha256(script)]) + def getP2WSHScriptDest(self, script): + return CScript([OP_0, sha256(script)]) + def getScriptScriptSig(self, script: bytes) -> bytes: return bytes() diff --git a/basicswap/interface/part.py b/basicswap/interface/part.py index 10c481c..15c5660 100644 --- a/basicswap/interface/part.py +++ b/basicswap/interface/part.py @@ -14,7 +14,6 @@ from basicswap.contrib.test_framework.messages import ( ) from basicswap.contrib.test_framework.script import ( CScript, - OP_0, OP_DUP, OP_HASH160, OP_EQUALVERIFY, @@ -25,7 +24,6 @@ from basicswap.util import ( TemporaryError, ) from basicswap.util.script import ( - getP2WSH, getCompactSizeLen, getWitnessElementLen, ) @@ -256,7 +254,7 @@ class PARTInterfaceBlind(PARTInterface): ephemeral_pubkey = self.getPubkey(ephemeral_key) assert len(ephemeral_pubkey) == 33 nonce = self.getScriptLockTxNonce(vkbv) - p2wsh_addr = self.encode_p2wsh(getP2WSH(script)) + p2wsh_addr = self.encode_p2wsh(self.getP2WSHScriptDest(script)) inputs = [] outputs = [ { @@ -330,7 +328,7 @@ class PARTInterfaceBlind(PARTInterface): locked_coin = input_blinded_info["amount"] tx_lock_id = lock_tx_obj["txid"] refund_script = self.genScriptLockRefundTxScript(Kal, Kaf, csv_val) - p2wsh_addr = self.encode_p2wsh(getP2WSH(refund_script)) + p2wsh_addr = self.encode_p2wsh(self.getP2WSHScriptDest(refund_script)) inputs = [ { @@ -495,7 +493,7 @@ class PARTInterfaceBlind(PARTInterface): lock_txo_scriptpk = bytes.fromhex( lock_tx_obj["vout"][lock_output_n]["scriptPubKey"]["hex"] ) - script_pk = CScript([OP_0, hashlib.sha256(script_out).digest()]) + script_pk = self.getP2WSHScriptDest(script_out) ensure(lock_txo_scriptpk == script_pk, "Bad output script") A, B = extractScriptLockScriptValues(script_out) ensure(A == Kal, "Bad script leader pubkey") @@ -572,7 +570,7 @@ class PARTInterfaceBlind(PARTInterface): lock_refund_txo_scriptpk = bytes.fromhex( lock_refund_tx_obj["vout"][lock_refund_output_n]["scriptPubKey"]["hex"] ) - script_pk = CScript([OP_0, hashlib.sha256(script_out).digest()]) + script_pk = self.getP2WSHScriptDest(script_out) ensure(lock_refund_txo_scriptpk == script_pk, "Bad output script") A, B, csv_val, C = extractScriptLockRefundScriptValues(script_out) ensure(A == Kal, "Bad script pubkey") diff --git a/basicswap/util/script.py b/basicswap/util/script.py index 996ceed..1ceaa78 100644 --- a/basicswap/util/script.py +++ b/basicswap/util/script.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- # Copyright (c) 2022 tecnovert +# Copyright (c) 2025 The Basicswap developers # Distributed under the MIT software license, see the accompanying # file LICENSE or http://www.opensource.org/licenses/mit-license.php. import struct -import hashlib from basicswap.contrib.test_framework.script import ( OP_PUSHDATA1, OP_PUSHDATA2, @@ -89,14 +89,6 @@ def decodePushData(script_bytes, o): return (data, i + datasize - o) -def getP2SHScriptForHash(p2sh): - return bytes((OpCodes.OP_HASH160, 0x14)) + p2sh + bytes((OpCodes.OP_EQUAL,)) - - -def getP2WSH(script): - return bytes((OpCodes.OP_0, 0x20)) + hashlib.sha256(script).digest() - - def SerialiseNumCompact(v): if v < 253: return bytes((v,))