Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions app/models/address.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Address < ApplicationRecord
has_one :bitcoin_address, through: :bitcoin_address_mapping
has_one :bitcoin_vout

validates :balance, :ckb_transactions_count, :interest, :dao_deposit,
validates :balance, :interest, :dao_deposit,
numericality: { greater_than_or_equal_to: 0 }, allow_nil: true
validates :lock_hash, presence: true, uniqueness: true, on: :create

Expand All @@ -30,10 +30,6 @@ class Address < ApplicationRecord

attr_accessor :query_address

def custom_ckb_transactions
ckb_transactions
end

def ckb_udt_transactions(udt)
udt = Udt.find_by_id(udt) unless udt.is_a?(Udt)
udt&.ckb_transactions || []
Expand Down Expand Up @@ -164,7 +160,8 @@ def current_balance
self.cell_outputs.live.sum(:capacity)
end

def current_ckb_transactions_count

def ckb_transactions_count
AccountBook.where(address_id: self.id).count
end

Expand Down
59 changes: 0 additions & 59 deletions app/models/cell_output.rb
Original file line number Diff line number Diff line change
Expand Up @@ -228,65 +228,6 @@ def create_token
end
end

# Because the balance of address equals to the total capacity of all live cells in this address,
# So we can directly aggregate balance by address from database.
def self.refresh_address_balances
puts "refreshing all balances"
# fix balance and live cell count for all addresses
connection.execute <<-SQL
UPDATE addresses SET balance=sq.balance, live_cells_count=c
FROM (
SELECT address_id, SUM(capacity) as balance, COUNT(*) as c
FROM cell_outputs
WHERE status = 0
GROUP BY address_id
) AS sq
WHERE addresses.id=sq.address_id;
SQL
# fix occupied balances for all addresses
puts "refreshing all occupied balances"
connection.execute <<-SQL
UPDATE addresses SET balance_occupied=sq.balance
FROM (
SELECT address_id, SUM(capacity) as balance
FROM cell_outputs
WHERE status = 0
AND "cell_outputs"."type_hash" IS NOT NULL AND "cell_outputs"."data" != '\x3078'
GROUP BY address_id
) AS sq
WHERE addresses.id=sq.address_id;
SQL
puts "refreshing dao deposits"
connection.execute <<-SQL
UPDATE addresses SET dao_deposit=sq.sum, is_depositor = sq.sum > 0
FROM (
SELECT address_id, SUM(capacity) as sum
FROM cell_outputs
WHERE status = 0
AND cell_type = 1
GROUP BY address_id
) AS sq
WHERE addresses.id=sq.address_id;
SQL
end

# update the history data, which cell_type should be "cota_registry" or "cota_regular"
def self.update_cell_types_for_cota
TypeScript.where(code_hash: CkbSync::Api.instance.cota_registry_code_hash).each do |type_script|
CellOutput.where(type_script_id: type_script.id).each do |cell_output|
cell_output.cell_type = "cota_registry"
cell_output.save!
end
end

TypeScript.where(code_hash: CkbSync::Api.instance.cota_regular_code_hash).each do |type_script|
CellOutput.where(type_script_id: type_script.id).each do |cell_output|
cell_output.cell_type = "cota_regular"
cell_output.save!
end
end
end

def self.dead_reltuples_count
sql = "SELECT reltuples FROM pg_class WHERE relname = 'cell_outputs_dead'"
result = ActiveRecord::Base.connection.execute(sql)
Expand Down
8 changes: 0 additions & 8 deletions app/models/null_address.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,6 @@ def current_balance
0
end

def current_ckb_transactions_count
0
end

def current_live_cells_count
0
end

def current_balance_occupied
0
end
Expand Down
2 changes: 0 additions & 2 deletions app/workers/calculate_address_info_worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ def perform()
id: addr.id,
balance: balance,
balance_occupied: balance_occupied,
ckb_transactions_count: AccountBook.where(address_id: addr.id).count,
live_cells_count: addr.cell_outputs.live.count,
updated_at: Time.current
}

Expand Down
2 changes: 0 additions & 2 deletions app/workers/update_address_info_worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ def perform(block_number)
id: addr.id,
balance: balance,
balance_occupied: balance_occupied,
ckb_transactions_count: AccountBook.where(address_id: addr.id).count,
live_cells_count: addr.cell_outputs.live.count,
updated_at: Time.current
}
end
Expand Down
2 changes: 0 additions & 2 deletions lib/tasks/migration/check_address_info.rake
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ namespace :migration do
if address.last_updated_block_number.nil?
local_tip_block = Block.recent.first
address.last_updated_block_number = local_tip_block.number
address.live_cells_count = address.cell_outputs.live.where("block_timestamp <= ?", local_tip_block.timestamp).count
address.ckb_transactions_count = AccountBook.where(address_id: address.id).where("block_number <= ?", local_tip_block.number).count
address.cal_balance!
address.save!
end
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/migration/fill_nrc_721_token.rake
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ namespace :migration do
# update addresses transaction page cache
CkbTransaction.where(id: tx_ids).find_each do |ckb_tx|
Address.where(id: ckb_tx.contained_address_ids).find_each do |address|
ckb_transactions = address.custom_ckb_transactions.select(:id, :tx_hash, :block_id, :block_number,
ckb_transactions = address.ckb_transactions.select(:id, :tx_hash, :block_id, :block_number,
:block_timestamp, :is_cellbase, :updated_at).recent.page(1).per(CkbTransaction.default_per_page)
Rails.cache.delete("#{ckb_transactions.cache_key}/#{address.query_address}")
end
Expand Down
1 change: 0 additions & 1 deletion lib/tasks/migration/fix_address_tx_count.rake
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ namespace :migration do
puts address.id
local_tip_block = Block.recent.first
address.update(
ckb_transactions_count: AccountBook.where(address_id: address.id).where("block_number <= ?", local_tip_block.number).count,
last_updated_block_number: local_tip_block.number,
)
AddressBlockSnapshot.where(address_id: address.id).delete_all
Expand Down
2 changes: 1 addition & 1 deletion lib/tasks/migration/register_udt.rake
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ class UdtRegister
# update addresses transaction page cache
CkbTransaction.where(id: tx_ids).find_each do |ckb_tx|
Address.where(id: ckb_tx.contained_address_ids).find_each do |address|
ckb_transactions = address.custom_ckb_transactions.select(:id, :tx_hash, :block_id, :block_number,
ckb_transactions = address.ckb_transactions.select(:id, :tx_hash, :block_id, :block_number,
:block_timestamp, :is_cellbase, :updated_at).recent.page(1).per(CkbTransaction.default_per_page)
Rails.cache.delete("#{ckb_transactions.cache_key}/#{address.query_address}")
end
Expand Down
3 changes: 1 addition & 2 deletions lib/tasks/migration/update_addresses_info.rake
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ namespace :migration do
addr_attrs = []
Address.where(id: block.address_ids).select(:id, :mined_blocks_count, :created_at).each do |addr|
next if addr.mined_blocks_count > 0
addr_attrs << { id: addr.id, balance: addr.cell_outputs.live.sum(:capacity),
ckb_transactions_count: addr.custom_ckb_transactions.count, live_cells_count: addr.cell_outputs.live.count,
addr_attrs << { id: addr.id, balance: addr.cell_outputs.live.sum(:capacity),
updated_at: Time.current }
end
Address.upsert_all(addr_attrs)
Expand Down
13 changes: 0 additions & 13 deletions lib/tasks/migration/update_addresses_live_cells_count.rake

This file was deleted.

3 changes: 1 addition & 2 deletions lib/tasks/migration/update_miner_balance.rake
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ namespace :migration do
})

Address.find_each do |addr|
addr.update(balance: addr.cell_outputs.live.sum(:capacity), ckb_transactions_count: addr.custom_ckb_transactions.count,
live_cells_count: addr.cell_outputs.live.count)
addr.update(balance: addr.cell_outputs.live.sum(:capacity))
progress_bar.increment
end

Expand Down
1 change: 0 additions & 1 deletion lib/tasks/migration/update_output_cells_status.rake
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ class UpdateCellOutputsStatus
address = Address.find_by_id address_id
return unless address

address.live_cells_count = address.cell_outputs.live.count
address.cal_balance!
address.save!
address.flush_cache
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ class AddressPendingTransactionsControllerTest < ActionDispatch::IntegrationTest
page = 2
page_size = 10
address = create(:address, :with_pending_transactions, transactions_count: 30)
address_ckb_transactions = address.custom_ckb_transactions.
address_ckb_transactions = address.ckb_transactions.
order("id desc NULLS LAST").
page(page).
per(page_size)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class AddressTransactionsControllerTest < ActionDispatch::IntegrationTest

valid_get api_v1_address_transaction_url(address.address_hash)

address.ckb_transactions_count
options = FastJsonapi::PaginationMetaGenerator.new(
request:,
records: ckb_transactions,
Expand All @@ -102,7 +101,6 @@ class AddressTransactionsControllerTest < ActionDispatch::IntegrationTest

valid_get api_v1_address_transaction_url(address.lock_hash)

address.ckb_transactions_count
options = FastJsonapi::PaginationMetaGenerator.new(
request:,
records: ckb_transactions,
Expand Down Expand Up @@ -257,7 +255,7 @@ class AddressTransactionsControllerTest < ActionDispatch::IntegrationTest
page = 2
page_size = 10
address = create(:address, :with_transactions, transactions_count: 30)
address_ckb_transactions = address.custom_ckb_transactions.
address_ckb_transactions = address.ckb_transactions.
order("block_timestamp desc nulls last, id desc").
page(page).
per(page_size)
Expand Down Expand Up @@ -287,7 +285,6 @@ class AddressTransactionsControllerTest < ActionDispatch::IntegrationTest
valid_get api_v1_address_transaction_url(address.address_hash),
params: { page_size: }

address.ckb_transactions_count
options = FastJsonapi::PaginationMetaGenerator.new(request:,
records: address_ckb_transactions,
page:,
Expand All @@ -313,7 +310,6 @@ class AddressTransactionsControllerTest < ActionDispatch::IntegrationTest
valid_get api_v1_address_transaction_url(address.address_hash),
params: { page:, page_size:, sort: "time.desc"}

address.ckb_transactions_count
options = FastJsonapi::PaginationMetaGenerator.new(request:,
records: address_ckb_transactions,
page:,
Expand All @@ -337,7 +333,6 @@ class AddressTransactionsControllerTest < ActionDispatch::IntegrationTest
valid_get api_v1_address_transaction_url(address.address_hash),
params: { page:, page_size: }

address.ckb_transactions_count
options = FastJsonapi::PaginationMetaGenerator.new(request:,
records: address_ckb_transactions,
page:,
Expand Down
6 changes: 0 additions & 6 deletions test/factories/address.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
end

balance { 0 }
ckb_transactions_count { 0 }
lock_hash { "0x#{SecureRandom.hex(32)}" }
last_updated_block_number { 10 }

Expand All @@ -27,7 +26,6 @@
end

trait :with_transactions do
ckb_transactions_count { 3 }
after(:create) do |address, evaluator|
block = create(:block, :with_block_hash)
ckb_transactions = []
Expand All @@ -36,12 +34,10 @@
end

AccountBook.upsert_all(ckb_transactions.map { |t| { address_id: address.id, ckb_transaction_id: t.id, block_number: t.block_number, tx_index: t.tx_index } })
address.update(ckb_transactions_count: address.ckb_transactions.count)
end
end

trait :with_pending_transactions do
ckb_transactions_count { 3 }
after(:create) do |address, evaluator|
block = create(:block, :with_block_hash)
ckb_transactions = []
Expand All @@ -56,12 +52,10 @@
{ address_id: address.id, ckb_transaction_id: t.id, income: }
end
AccountBook.upsert_all(attrs)
address.update(ckb_transactions_count: address.ckb_transactions.count)
end
end

trait :with_udt_transactions do
ckb_transactions_count { 20 }
after(:create) do |address, evaluator|
evaluator.transactions_count.times do
block = create(:block, :with_block_hash)
Expand Down
4 changes: 2 additions & 2 deletions test/jobs/revert_block_job_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class RevertBlockJobTest < ActiveJob::TestCase
deposit_dao_event = create(:dao_event, block_id: first_block.id, block_timestamp: first_block.timestamp, ckb_transaction_id: tx.id, address_id: @address.id, value: 3000 * (10**8),
event_type: "deposit_to_dao")

@address.update(balance: 6000 * (10**8), balance_occupied: 3000 * (10**8), live_cells_count: 4, ckb_transactions_count: 1, last_updated_block_number: first_block.number)
@address.update(balance: 6000 * (10**8), balance_occupied: 3000 * (10**8), last_updated_block_number: first_block.number)
@parent_block = create(:block, parent_hash: first_block.hash, address_ids: [@address.id], number: 11)
parent_tx = create(:ckb_transaction, block: @parent_block)
create(:cell_input, block_id: @parent_block.id, ckb_transaction: parent_tx, previous_cell_output_id: previous_cell_output1.id, index: 0)
Expand All @@ -31,6 +31,6 @@ class RevertBlockJobTest < ActiveJob::TestCase
deposit_dao_event.update(consumed_block_timestamp: @parent_block.timestamp, consumed_transaction_id: parent_tx.id)
create(:dao_event, block_id: @parent_block.id, block_timestamp: @parent_block.timestamp, ckb_transaction_id: parent_tx.id, address_id: @address.id, value: 3000 * (10**8),
event_type: "withdraw_from_dao")
@address.update(balance: 5000 * (10**8), balance_occupied: 3000 * (10**8), live_cells_count: 2, ckb_transactions_count: 2, last_updated_block_number: @parent_block.number)
@address.update(balance: 5000 * (10**8), balance_occupied: 3000 * (10**8), last_updated_block_number: @parent_block.number)
end
end
4 changes: 2 additions & 2 deletions test/models/address_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ class AddressTest < ActiveSupport::TestCase
address.cal_unclaimed_compensation
end

test "#custom_ckb_transactions should return correct ckb transactions" do
test "#ckb_transactions should return correct ckb transactions" do
address = create(:address)
block = create(:block)
ckb_transactions = create_list(:ckb_transaction, 30, block:, address:,
Expand All @@ -195,7 +195,7 @@ class AddressTest < ActiveSupport::TestCase
expected_ckb_transactions = CkbTransaction.where(id: ckb_transaction_ids).recent

assert_equal expected_ckb_transactions.pluck(:id),
address.custom_ckb_transactions.recent.pluck(:id)
address.ckb_transactions.recent.pluck(:id)
end

test "#ckb_dao_transactions should return correct ckb transactions with dao cell" do
Expand Down
1 change: 0 additions & 1 deletion test/models/ckb_sync/node_data_processor_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1059,7 +1059,6 @@ class NodeDataProcessorTest < ActiveSupport::TestCase
test "#process_block should update abandoned block's contained address's live cells count" do
prepare_node_data(12)
local_block = Block.find_by(number: 12)
origin_live_cells_count = local_block.contained_addresses.sum(:live_cells_count)
local_block.update(block_hash: "0x419c632366c8eb9635acbb39ea085f7552ae62e1fdd480893375334a0f37d1bx")
VCR.use_cassette("blocks/12", record: :new_episodes) do
new_local_block = node_data_processor.call
Expand Down
Loading