@@ -374,7 +374,7 @@ impl RpcApi for Client {
374
374
fn fund_raw_transaction < R : bitcoincore_rpc:: RawTx > (
375
375
& self ,
376
376
tx : R ,
377
- _options : Option < & json:: FundRawTransactionOptions > ,
377
+ options : Option < & json:: FundRawTransactionOptions > ,
378
378
_is_witness : Option < bool > ,
379
379
) -> bitcoincore_rpc:: Result < json:: FundRawTransactionResult > {
380
380
let mut transaction: Transaction = encode:: deserialize_hex ( & tx. raw_hex ( ) ) ?;
@@ -421,15 +421,22 @@ impl RpcApi for Client {
421
421
..Default :: default ( )
422
422
} ;
423
423
424
- transaction. input . insert ( 0 , txin) ;
424
+ let insert_idx = match options {
425
+ Some ( option) => option
426
+ . change_position
427
+ . unwrap_or ( ( transaction. input . len ( ) ) as u32 ) ,
428
+ None => ( transaction. input . len ( ) ) as u32 ,
429
+ } ;
430
+
431
+ transaction. input . insert ( insert_idx as usize , txin) ;
425
432
tracing:: debug!( "New transaction: {transaction:?}" ) ;
426
433
427
434
let hex = serialize ( & transaction) ;
428
435
429
436
Ok ( json:: FundRawTransactionResult {
430
437
hex,
431
438
fee : Amount :: from_sat ( 0 ) ,
432
- change_position : 0 ,
439
+ change_position : insert_idx as i32 ,
433
440
} )
434
441
}
435
442
@@ -822,7 +829,7 @@ mod tests {
822
829
let tx = deserialize :: < Transaction > ( & res. hex ) . unwrap ( ) ;
823
830
824
831
assert_ne ! ( og_tx, tx) ;
825
- assert_eq ! ( res. change_position, 0 ) ;
832
+ assert_ne ! ( res. change_position, - 1 ) ;
826
833
827
834
let res = rpc. fund_raw_transaction ( & tx, None , None ) . unwrap ( ) ;
828
835
let new_tx = String :: consensus_decode ( & mut res. hex . as_slice ( ) ) . unwrap ( ) ;
0 commit comments