Skip to content

Commit a56a7c7

Browse files
authored
optimisze tx list and show (#2865)
1 parent 1cbafd7 commit a56a7c7

19 files changed

+76
-35
lines changed

app/controllers/api/v1/address_dao_transactions_controller.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ def show
88
address = Address.find_address!(params[:id])
99
raise Api::V1::Exceptions::AddressNotFoundError if address.is_a?(NullAddress)
1010

11-
includes = { :cell_inputs => {:previous_cell_output => {:type_script => [], :bitcoin_vout => [], :lock_script => [] }, :block => []}, :cell_outputs => {}, :bitcoin_annotation => [], :account_books => {} }
11+
includes = { bitcoin_annotation: [],
12+
cell_outputs: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script],
13+
cell_inputs: [:block, previous_cell_output: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
14+
1215
ckb_dao_transactions = address.ckb_dao_transactions
1316
.includes(includes)
1417
.select(select_fields)

app/controllers/api/v1/address_udt_transactions_controller.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ def show
1212
udt = Udt.find_by(type_hash: params[:type_hash], published: true)
1313
raise Api::V1::Exceptions::UdtNotFoundError if udt.blank?
1414

15-
includes = { :cell_inputs => {:previous_cell_output => {:type_script => [], :bitcoin_vout => [], :lock_script => [] }, :block => []}, :cell_outputs => {}, :bitcoin_annotation => [], :account_books => {} }
15+
includes = { bitcoin_annotation: [],
16+
cell_outputs: [:address, :deployed_contract, :udt_cell, :type_script, :bitcoin_vout, :lock_script],
17+
cell_inputs: [:block, previous_cell_output: [:udt_cell, :address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
18+
1619
ckb_udt_transactions = address.ckb_udt_transactions(udt.id)
1720
.includes(includes)
1821
.select(select_fields)

app/controllers/api/v1/block_transactions_controller.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ def show
1818
where(account_books: { address_id: address.id })
1919
end
2020

21-
includes = { :cell_inputs => {:previous_cell_output => {:type_script => [], :bitcoin_vout => [], :lock_script => [] }, :block => []}, :cell_outputs => {}, :bitcoin_annotation => [], :account_books => {} }
21+
includes = { bitcoin_annotation: [],
22+
cell_outputs: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script],
23+
cell_inputs: [:block, previous_cell_output: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
2224

2325
if stale?(ckb_transactions)
2426
expires_in 10.seconds, public: true, must_revalidate: true, stale_while_revalidate: 5.seconds

app/controllers/api/v1/ckb_transactions_controller.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,10 @@ def query
8484
CkbTransaction.recent.normal.page(@page).per(@page_size).fast_page
8585
end
8686

87-
includes = { :cell_inputs => {:previous_cell_output => {:type_script => [], :bitcoin_vout => [], :lock_script => [] }, :block => []}, :cell_outputs => {}, :bitcoin_annotation => [], :account_books => {} }
87+
includes = { bitcoin_annotation: [],
88+
cell_outputs: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script],
89+
cell_inputs: [:block, previous_cell_output: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
90+
8891
ckb_transactions = ckb_transactions.includes(includes).select(:id, :tx_hash, :block_id, :tags,
8992
:block_number, :block_timestamp, :is_cellbase, :updated_at, :created_at)
9093
json =
@@ -139,7 +142,15 @@ def validate_query_params
139142
end
140143

141144
def find_transaction
142-
@ckb_transaction = CkbTransaction.where(tx_hash: params[:id]).order(tx_status: :asc).first
145+
146+
includes = { bitcoin_annotation: [],
147+
witnesses: [],
148+
block: [:epoch_statistic],
149+
cell_dependencies: [:cell_output, :contract],
150+
cell_outputs: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script],
151+
cell_inputs: [:block, previous_cell_output: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
152+
153+
@ckb_transaction = CkbTransaction.includes(includes).where(tx_hash: params[:id]).first
143154
raise Api::V1::Exceptions::CkbTransactionNotFoundError if @ckb_transaction.blank?
144155
end
145156
end

app/controllers/api/v1/contract_transactions_controller.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def show
1111
if stale?(dao_contract)
1212
expires_in 10.seconds, public: true, must_revalidate: true, stale_while_revalidate: 5.seconds
1313

14-
ckb_transactions = dao_contract.ckb_transactions.includes(:cell_inputs, :cell_outputs).tx_committed.order("ckb_transactions.block_timestamp desc nulls last, ckb_transactions.id desc")
14+
ckb_transactions = dao_contract.ckb_transactions.tx_committed.order("ckb_transactions.block_timestamp desc nulls last, ckb_transactions.id desc")
1515

1616
if params[:tx_hash].present?
1717
ckb_transactions = ckb_transactions.where(tx_hash: params[:tx_hash])
@@ -25,7 +25,9 @@ def show
2525
where(account_books: { address_id: address.id })
2626
end
2727

28-
includes = { :cell_inputs => {:previous_cell_output => {:type_script => [], :bitcoin_vout => [], :lock_script => [] }, :block => []}, :cell_outputs => {}, :bitcoin_annotation => [], :account_books => {} }
28+
includes = { bitcoin_annotation: [],
29+
cell_outputs: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script],
30+
cell_inputs: [:block, previous_cell_output: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
2931

3032
ckb_transactions = ckb_transactions
3133
.includes(includes)

app/interactions/addresses/ckb_transactions.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,16 @@ def execute
3737

3838
ckb_transaction_ids = account_books.map(&:ckb_transaction_id)
3939

40-
includes = { :cell_inputs => {:previous_cell_output => {:type_script => [], :bitcoin_vout => [], :lock_script => [] }, :block => []}, :cell_outputs => {}, :bitcoin_annotation => [], :account_books => {} }
41-
includes[:bitcoin_transfers] = {} if is_bitcoin
40+
includes = if is_bitcoin
41+
{ bitcoin_annotation: [],
42+
bitcoin_transfers: [:bitcoin_transaction],
43+
cell_outputs: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script, bitcoin_vout: [:bitcoin_address, :bitcoin_transaction]],
44+
cell_inputs: [:block, previous_cell_output: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script, bitcoin_vout: [:bitcoin_address, :bitcoin_transaction]]]}
45+
else
46+
{ bitcoin_annotation: [],
47+
cell_outputs: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script],
48+
cell_inputs: [:block, previous_cell_output: [:address, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
49+
end
4250

4351
records = CkbTransaction.where(id: ckb_transaction_ids)
4452
.includes(includes)

app/interactions/addresses/live_cells.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ def fetch_cell_output_scope(address)
3939
scope =
4040
if bound_status
4141
vout_ids = BitcoinVout.where(address_id: address_ids, status: bound_status).pluck(:cell_output_id)
42-
CellOutput.live.includes(:type_script, :lock_script).where(id: vout_ids)
42+
CellOutput.live.includes(:type_script, :lock_script, :block).where(id: vout_ids)
4343
else
44-
CellOutput.live.includes(:type_script, :lock_script).where(address_id: address_ids)
44+
CellOutput.live.includes(:type_script, :lock_script, :block).where(address_id: address_ids)
4545
end
4646

4747
tag.present? ? filter_by_tag(scope) : scope

app/interactions/udts/ckb_transactions.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ def execute
3030
where(account_books: { address_id: address.map(&:id) }).distinct
3131
end
3232

33-
includes = { :cell_inputs => {:previous_cell_output => {:type_script => [], :bitcoin_vout => [], :lock_script => [] }, :block => []}, :cell_outputs => {}, :bitcoin_annotation => [], :account_books => {} }
33+
includes = { bitcoin_annotation: [],
34+
cell_outputs: [:address, :deployed_contract, :udt_cell, :type_script, :bitcoin_vout, :lock_script],
35+
cell_inputs: [:block, previous_cell_output: [:address, :udt_cell, :deployed_contract, :type_script, :bitcoin_vout, :lock_script]]}
3436

3537
records = ckb_transactions
3638
.includes(includes)

app/models/cell_dependency.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ class CellDependency < ApplicationRecord
33
belongs_to :cell_output, foreign_key: "contract_cell_id", class_name: "CellOutput"
44
has_many :cell_deps_out_points, foreign_key: :contract_cell_id, primary_key: :contract_cell_id, class_name: "CellDepsOutPoint"
55
has_many :contracts, foreign_key: :contract_cell_id, primary_key: :contract_cell_id, class_name: "Contract"
6+
has_one :contract, -> { where(is_primary: true) }, foreign_key: :contract_cell_id, primary_key: :contract_cell_id, class_name: "Contract"
67

78
enum :dep_type, %i[code dep_group]
89

910
def to_raw
10-
contract = contracts.primary.first
1111
script =
1212
if contract
1313
{

app/models/cell_output.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ class CellOutput < ApplicationRecord
4949
belongs_to :address
5050
belongs_to :lock_script
5151
belongs_to :type_script, optional: true
52+
has_one :deployed_contract, foreign_key: :deployed_cell_output_id, class_name: "Contract"
53+
belongs_to :udt_cell, ->(c) { where(published: true) }, foreign_key: :type_hash, class_name: 'Udt', optional: true
5254

5355
has_many :cell_dependencies, foreign_key: :contract_cell_id,
5456
dependent: :delete_all

0 commit comments

Comments
 (0)