@@ -22,7 +22,7 @@ pub use fee_calculator::FeeCalculator;
2222pub trait CkbTransactionBuilder {
2323 fn build (
2424 & mut self ,
25- contexts : & HandlerContexts ,
25+ contexts : & mut HandlerContexts ,
2626 ) -> Result < TransactionWithScriptGroups , TxBuilderError > ;
2727}
2828
@@ -36,6 +36,12 @@ pub struct SimpleTransactionBuilder {
3636 reward : u64 ,
3737}
3838
39+ pub struct PrepareTransactionViewer < ' a > {
40+ pub ( crate ) transaction_inputs : & ' a mut Vec < TransactionInput > ,
41+ pub ( crate ) tx : & ' a mut TransactionBuilder ,
42+ pub ( crate ) reward : & ' a mut u64 ,
43+ }
44+
3945impl SimpleTransactionBuilder {
4046 pub fn new ( configuration : TransactionBuilderConfiguration , input_iter : InputIterator ) -> Self {
4147 Self {
@@ -137,16 +143,13 @@ impl SimpleTransactionBuilder {
137143 }
138144
139145 fn prepare_transaction (
140- transaction_inputs : & mut Vec < TransactionInput > ,
141- tx_builder : & mut crate :: core:: TransactionBuilder ,
146+ viewer : & mut PrepareTransactionViewer ,
142147 configuration : & TransactionBuilderConfiguration ,
143- contexts : & HandlerContexts ,
148+ contexts : & mut HandlerContexts ,
144149 ) -> Result < ( ) , TxBuilderError > {
145150 for handler in configuration. get_script_handlers ( ) {
146- for context in & contexts. contexts {
147- if let Ok ( true ) =
148- handler. prepare_transaction ( transaction_inputs, tx_builder, context. as_ref ( ) )
149- {
151+ for context in & mut contexts. contexts {
152+ if handler. prepare_transaction ( viewer, context. as_mut ( ) ) ? {
150153 break ;
151154 }
152155 }
@@ -162,17 +165,22 @@ macro_rules! celloutput_capacity {
162165 } } ;
163166}
164167
168+ macro_rules! prepare_veiwer {
169+ ( $self: ident) => {
170+ PrepareTransactionViewer {
171+ transaction_inputs: & mut $self. transaction_inputs,
172+ tx: & mut $self. tx,
173+ reward: & mut $self. reward,
174+ }
175+ } ;
176+ }
177+
165178impl CkbTransactionBuilder for SimpleTransactionBuilder {
166179 fn build (
167180 & mut self ,
168- contexts : & HandlerContexts ,
181+ contexts : & mut HandlerContexts ,
169182 ) -> Result < TransactionWithScriptGroups , TxBuilderError > {
170- Self :: prepare_transaction (
171- & mut self . transaction_inputs ,
172- & mut self . tx ,
173- & self . configuration ,
174- contexts,
175- ) ?;
183+ Self :: prepare_transaction ( & mut prepare_veiwer ! ( self ) , & self . configuration , contexts) ?;
176184 let mut lock_groups: HashMap < Byte32 , ScriptGroup > = HashMap :: default ( ) ;
177185 let mut type_groups: HashMap < Byte32 , ScriptGroup > = HashMap :: default ( ) ;
178186 let mut outputs_capacity = 0u64 ;
@@ -198,7 +206,7 @@ impl CkbTransactionBuilder for SimpleTransactionBuilder {
198206 let input = input?;
199207 self . tx . input ( input. cell_input ( ) ) ;
200208 let previous_output = input. previous_output ( ) ;
201- self . tx . witness ( packed :: Bytes :: default ( ) ) ;
209+ self . tx . witness ( Default :: default ( ) ) ;
202210 let lock_script = previous_output. lock ( ) ;
203211 let script_group = lock_groups
204212 . entry ( lock_script. calc_script_hash ( ) )
0 commit comments