test: Fix P2WPKH_FAKE_WITNESS_SIZE
We would previously push 108 bytes on a P2WPKH witness to simulate signature + pubkey. This was wrong: we should push 106 bytes instead. The max satisfaction size for a P2WPKH is 112 WU: elements in witness (1 byte, 1WU) + OP_PUSH (1 byte, 1WU) + pk (33 bytes, 33 WU) + OP_PUSH (1 byte, 1WU) + signature and sighash (72 bytes, 72 WU) + scriptsig len (1 byte, 4WU) We should push on the witness pk + signature and sighash. This is 105 WU. Since we push just once instead of twice, we add 1WU for the OP_PUSH we are omitting.
This commit is contained in:
		
							parent
							
								
									ae919061e2
								
							
						
					
					
						commit
						50af51da5a
					
				| @ -1871,6 +1871,14 @@ pub(crate) mod test { | ||||
|     use crate::signer::{SignOptions, SignerError}; | ||||
|     use crate::wallet::AddressIndex::{LastUnused, New, Peek, Reset}; | ||||
| 
 | ||||
|     // The satisfaction size of a P2WPKH is 112 WU =
 | ||||
|     // 1 (elements in witness) + 1 (OP_PUSH) + 33 (pk) + 1 (OP_PUSH) + 72 (signature + sighash) + 1*4 (script len)
 | ||||
|     // On the witness itself, we have to push once for the pk (33WU) and once for signature + sighash (72WU), for
 | ||||
|     // a total of 105 WU.
 | ||||
|     // Here, we push just once for simplicity, so we have to add an extra byte for the missing
 | ||||
|     // OP_PUSH.
 | ||||
|     const P2WPKH_FAKE_WITNESS_SIZE: usize = 106; | ||||
| 
 | ||||
|     #[test] | ||||
|     fn test_cache_addresses_fixed() { | ||||
|         let db = MemoryDatabase::new(); | ||||
| @ -2007,7 +2015,7 @@ pub(crate) mod test { | ||||
|             $( | ||||
|                 $( $add_signature )* | ||||
|                 for txin in &mut tx.input { | ||||
|                     txin.witness.push([0x00; 108]); // fake signature
 | ||||
|                     txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|                 } | ||||
|             )* | ||||
| 
 | ||||
| @ -3236,7 +3244,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3296,7 +3304,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3362,7 +3370,7 @@ pub(crate) mod test { | ||||
|         let mut tx = psbt.extract_tx(); | ||||
|         let txid = tx.txid(); | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3406,7 +3414,7 @@ pub(crate) mod test { | ||||
|         let mut tx = psbt.extract_tx(); | ||||
|         let txid = tx.txid(); | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3462,7 +3470,7 @@ pub(crate) mod test { | ||||
|         let mut tx = psbt.extract_tx(); | ||||
|         let txid = tx.txid(); | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3519,7 +3527,7 @@ pub(crate) mod test { | ||||
|         let mut tx = psbt.extract_tx(); | ||||
|         let txid = tx.txid(); | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3560,7 +3568,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3623,7 +3631,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3694,7 +3702,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3765,7 +3773,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3826,7 +3834,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3897,7 +3905,7 @@ pub(crate) mod test { | ||||
|         let txid = tx.txid(); | ||||
|         // skip saving the new utxos, we know they can't be used anyways
 | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -3976,7 +3984,7 @@ pub(crate) mod test { | ||||
|         let mut tx = psbt.extract_tx(); | ||||
|         let txid = tx.txid(); | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
| @ -4020,7 +4028,7 @@ pub(crate) mod test { | ||||
|         let mut tx = psbt.extract_tx(); | ||||
|         let txid = tx.txid(); | ||||
|         for txin in &mut tx.input { | ||||
|             txin.witness.push([0x00; 108]); // fake signature
 | ||||
|             txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
 | ||||
|             wallet | ||||
|                 .database | ||||
|                 .borrow_mut() | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user