@@ -971,8 +971,36 @@ def build_cell_inputs(
971971 inputs , ckb_txs , local_block_id , cell_inputs_attributes , prev_cell_outputs_attributes ,
972972input_capacities , tags , udt_address_ids , contained_udt_ids , contained_addr_ids , prev_outputs , addrs_changes , token_transfer_ckb_tx_ids
973973 )
974+ conditions = [ ]
975+
976+ inputs . each do |_ , items |
977+ items . each do |input |
978+ unless from_cell_base? ( input )
979+ conditions << { tx_hash : input . previous_output . tx_hash , cell_index : input . previous_output . index }
980+ end
981+ end
982+ end
983+
984+ query = conditions . inject ( nil ) do |combined , cond |
985+ q = CellOutput . live . where ( cond )
986+ combined . nil? ? q : combined . or ( q )
987+ end
988+
989+ results = query . to_a
990+
974991 tx_index = 0
992+ inputs . each do |tx_index , items |
993+ items . each do |input |
994+ unless from_cell_base? ( input )
995+ ckb_transaction_id = ckb_txs [ tx_index ] [ "id" ]
996+ @tx_previous_outputs [ ckb_transaction_id ] = [ ] if @tx_previous_outputs [ ckb_transaction_id ] == nil
997+ pout = results . find { |r | r . tx_hash == input . previous_output . tx_hash && r . cell_index == input . previous_output . index }
998+ @tx_previous_outputs [ ckb_transaction_id ] << pout
999+ end
1000+ end
1001+ end
9751002
1003+ tx_index = 0
9761004 inputs . each do |tx_index , items |
9771005 input_capacities [ tx_index ] = 0 if tx_index != 0
9781006 items . each_with_index do |item , index |
@@ -1239,11 +1267,7 @@ def cell_input_attributes(input, ckb_transaction_id, local_block_id,
12391267 }
12401268 else
12411269 # previous_output = prev_outputs["#{input.previous_output.tx_hash}-#{input.previous_output.index}"]
1242- previous_output = CellOutput . live . find_by tx_hash : input . previous_output . tx_hash ,
1243- cell_index : input . previous_output . index
1244-
1245- @tx_previous_outputs [ ckb_transaction_id ] = [ ] if @tx_previous_outputs [ ckb_transaction_id ] == nil
1246- @tx_previous_outputs [ ckb_transaction_id ] << previous_output
1270+ previous_output = @tx_previous_outputs [ ckb_transaction_id ] . find { |p_out | input . previous_output . tx_hash == p_out . tx_hash && p_out . cell_index == input . previous_output . index }
12471271
12481272 {
12491273 cell_input : {
0 commit comments