Skip to content

Commit b5bbe87

Browse files
authored
optimize account select (#2799)
optimize cell outputs find
1 parent 3252ecb commit b5bbe87

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

app/models/ckb_sync/new_node_data_processor.rb

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -971,8 +971,36 @@ def build_cell_inputs(
971971
inputs, ckb_txs, local_block_id, cell_inputs_attributes, prev_cell_outputs_attributes,
972972
input_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

Comments
 (0)