From 319124bbcad0f1cb79c244588a73d8e0c95484d3 Mon Sep 17 00:00:00 2001 From: Odysseas Gabrielides Date: Mon, 4 Dec 2023 17:48:59 +0200 Subject: [PATCH] fix: force segwit bip-141 off in tx serialisation (#31) * disable segwit * only for asset_unlock --- dash/src/blockdata/transaction/mod.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dash/src/blockdata/transaction/mod.rs b/dash/src/blockdata/transaction/mod.rs index af6cf7c42..ac38be90d 100644 --- a/dash/src/blockdata/transaction/mod.rs +++ b/dash/src/blockdata/transaction/mod.rs @@ -610,6 +610,10 @@ impl Encodable for Transaction { break; } } + // Forcing have_witness to false for AssetUnlock, as currently Core doesn't support BIP141 SegWit. + if self.tx_type() == TransactionType::AssetUnlock { + have_witness= false; + } if !have_witness { len += self.input.consensus_encode(w)?; len += self.output.consensus_encode(w)?; @@ -640,7 +644,12 @@ impl Decodable for Transaction { let special_transaction_type = TransactionType::try_from(special_transaction_type_u16).map_err(|_| encode::Error::UnknownSpecialTransactionType(special_transaction_type_u16))?; let input = Vec::::consensus_decode_from_finite_reader(r)?; // segwit - if input.is_empty() { + let mut segwit = input.is_empty(); + // Forcing segwit to false for AssetUnlock, as currently Core doesn't support BIP141 SegWit. + if special_transaction_type == TransactionType::AssetUnlock { + segwit = false; + } + if segwit { let segwit_flag = u8::consensus_decode_from_finite_reader(r)?; match segwit_flag { // BIP144 input witnesses