@@ -2,9 +2,11 @@ extern crate bitcoin;
22extern crate lightning;
33extern crate secp256k1;
44
5- use bitcoin:: network:: constants:: Network ;
5+ use bitcoin:: util:: hash:: Sha256dHash ;
6+ use bitcoin:: blockdata:: script:: { Script , Builder } ;
7+ use bitcoin:: blockdata:: opcodes;
68
7- use lightning:: chain:: chaininterface;
9+ use lightning:: chain:: chaininterface:: { ChainError , ChainWatchInterface , ChainListener } ;
810use lightning:: ln:: channelmanager:: ChannelDetails ;
911use lightning:: ln:: msgs;
1012use lightning:: ln:: msgs:: { MsgDecodable , RoutingMessageHandler } ;
@@ -19,7 +21,8 @@ mod utils;
1921
2022use utils:: test_logger;
2123
22- use std:: sync:: Arc ;
24+ use std:: sync:: { Weak , Arc } ;
25+ use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
2326
2427#[ inline]
2528pub fn slice_to_be16 ( v : & [ u8 ] ) -> u16 {
@@ -47,6 +50,46 @@ pub fn slice_to_be64(v: &[u8]) -> u64 {
4750 ( ( v[ 7 ] as u64 ) << 8 * 0 )
4851}
4952
53+
54+ struct InputData {
55+ data : Vec < u8 > ,
56+ read_pos : AtomicUsize ,
57+ }
58+ impl InputData {
59+ fn get_slice ( & self , len : usize ) -> Option < & [ u8 ] > {
60+ let old_pos = self . read_pos . fetch_add ( len, Ordering :: AcqRel ) ;
61+ if self . data . len ( ) < old_pos + len {
62+ return None ;
63+ }
64+ Some ( & self . data [ old_pos..old_pos + len] )
65+ }
66+ }
67+
68+ struct DummyChainWatcher {
69+ input : Arc < InputData > ,
70+ }
71+
72+ impl ChainWatchInterface for DummyChainWatcher {
73+ fn install_watch_script ( & self , _script_pub_key : & Script ) {
74+ }
75+
76+ fn install_watch_outpoint ( & self , _outpoint : ( Sha256dHash , u32 ) , _out_script : & Script ) {
77+ }
78+
79+ fn watch_all_txn ( & self ) {
80+ }
81+
82+ fn register_listener ( & self , _listener : Weak < ChainListener > ) {
83+ }
84+
85+ fn get_chain_utxo ( & self , _genesis_hash : Sha256dHash , _unspent_tx_output_identifier : u64 ) -> Result < ( Script , u64 ) , ChainError > {
86+ match self . input . get_slice ( 1 ) {
87+ Some ( slice) => Ok ( ( Builder :: new ( ) . push_opcode ( opcodes:: All :: OP_PUSHBYTES_0 ) . into_script ( ) . to_v0_p2wsh ( ) , 0 ) ) ,
88+ None => Err ( ChainError :: UnknownTx ) ,
89+ }
90+ }
91+ }
92+
5093#[ inline]
5194pub fn do_test ( data : & [ u8 ] ) {
5295 reset_rng_state ( ) ;
@@ -110,7 +153,13 @@ pub fn do_test(data: &[u8]) {
110153 }
111154
112155 let logger: Arc < Logger > = Arc :: new ( test_logger:: TestLogger { } ) ;
113- let chain_monitor = Arc :: new ( chaininterface:: ChainWatchInterfaceUtil :: new ( Network :: Bitcoin , Arc :: clone ( & logger) ) ) ;
156+ let input = Arc :: new ( InputData {
157+ data : data. to_vec ( ) ,
158+ read_pos : AtomicUsize :: new ( 0 ) ,
159+ } ) ;
160+ let chain_monitor = Arc :: new ( DummyChainWatcher {
161+ input : input,
162+ } ) ;
114163
115164 let our_pubkey = get_pubkey ! ( ) ;
116165 let router = Router :: new ( our_pubkey. clone ( ) , chain_monitor, Arc :: clone ( & logger) ) ;
0 commit comments