diff --git a/app/models/address.rb b/app/models/address.rb index d8bfda063..f6b552bbc 100644 --- a/app/models/address.rb +++ b/app/models/address.rb @@ -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 @@ -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 || [] @@ -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 diff --git a/app/models/cell_output.rb b/app/models/cell_output.rb index cf50fa03e..347d831ec 100644 --- a/app/models/cell_output.rb +++ b/app/models/cell_output.rb @@ -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) diff --git a/app/models/null_address.rb b/app/models/null_address.rb index 6a80ca87d..62ed19c25 100644 --- a/app/models/null_address.rb +++ b/app/models/null_address.rb @@ -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 diff --git a/app/workers/calculate_address_info_worker.rb b/app/workers/calculate_address_info_worker.rb index 676ad5161..d387e12b7 100644 --- a/app/workers/calculate_address_info_worker.rb +++ b/app/workers/calculate_address_info_worker.rb @@ -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 } diff --git a/app/workers/update_address_info_worker.rb b/app/workers/update_address_info_worker.rb index 32ee821ee..d68fab454 100644 --- a/app/workers/update_address_info_worker.rb +++ b/app/workers/update_address_info_worker.rb @@ -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 diff --git a/lib/tasks/migration/check_address_info.rake b/lib/tasks/migration/check_address_info.rake index da0e5b17c..553457c13 100644 --- a/lib/tasks/migration/check_address_info.rake +++ b/lib/tasks/migration/check_address_info.rake @@ -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 diff --git a/lib/tasks/migration/fill_nrc_721_token.rake b/lib/tasks/migration/fill_nrc_721_token.rake index 6ba7e1199..a4d0fc7dc 100644 --- a/lib/tasks/migration/fill_nrc_721_token.rake +++ b/lib/tasks/migration/fill_nrc_721_token.rake @@ -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 diff --git a/lib/tasks/migration/fix_address_tx_count.rake b/lib/tasks/migration/fix_address_tx_count.rake index 478f1f642..f1ae2dd41 100644 --- a/lib/tasks/migration/fix_address_tx_count.rake +++ b/lib/tasks/migration/fix_address_tx_count.rake @@ -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 diff --git a/lib/tasks/migration/register_udt.rake b/lib/tasks/migration/register_udt.rake index 9d02e154e..e0564016e 100644 --- a/lib/tasks/migration/register_udt.rake +++ b/lib/tasks/migration/register_udt.rake @@ -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 diff --git a/lib/tasks/migration/update_addresses_info.rake b/lib/tasks/migration/update_addresses_info.rake index a8f10bb8d..bd4fe7b31 100644 --- a/lib/tasks/migration/update_addresses_info.rake +++ b/lib/tasks/migration/update_addresses_info.rake @@ -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) diff --git a/lib/tasks/migration/update_addresses_live_cells_count.rake b/lib/tasks/migration/update_addresses_live_cells_count.rake deleted file mode 100644 index 45ff86dfc..000000000 --- a/lib/tasks/migration/update_addresses_live_cells_count.rake +++ /dev/null @@ -1,13 +0,0 @@ -namespace :migration do - task update_addresses_live_cells_count: :environment do - addresses_count = Address.where(live_cells_count: 0).count - progress_bar = ProgressBar.create({ total: addresses_count, format: "%e %B %p%% %c/%C" }) - Address.where(live_cells_count: 0).find_each do |address| - address.update_column(:live_cells_count, address.cell_outputs.live.count) - address.flush_cache - progress_bar.increment - end - - puts "done" - end -end diff --git a/lib/tasks/migration/update_miner_balance.rake b/lib/tasks/migration/update_miner_balance.rake index 28c82215f..68ed56e20 100644 --- a/lib/tasks/migration/update_miner_balance.rake +++ b/lib/tasks/migration/update_miner_balance.rake @@ -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 diff --git a/lib/tasks/migration/update_output_cells_status.rake b/lib/tasks/migration/update_output_cells_status.rake index f63e2bc7b..4d9d8baf7 100644 --- a/lib/tasks/migration/update_output_cells_status.rake +++ b/lib/tasks/migration/update_output_cells_status.rake @@ -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 diff --git a/test/controllers/api/v1/address_pending_transactions_controller_test.rb b/test/controllers/api/v1/address_pending_transactions_controller_test.rb index 00106d5cb..dbfe8be51 100644 --- a/test/controllers/api/v1/address_pending_transactions_controller_test.rb +++ b/test/controllers/api/v1/address_pending_transactions_controller_test.rb @@ -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) diff --git a/test/controllers/api/v1/address_transactions_controller_test.rb b/test/controllers/api/v1/address_transactions_controller_test.rb index f2fa3c6a0..f35582890 100644 --- a/test/controllers/api/v1/address_transactions_controller_test.rb +++ b/test/controllers/api/v1/address_transactions_controller_test.rb @@ -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, @@ -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, @@ -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) @@ -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:, @@ -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:, @@ -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:, diff --git a/test/factories/address.rb b/test/factories/address.rb index cee57729e..bbc31ec4a 100644 --- a/test/factories/address.rb +++ b/test/factories/address.rb @@ -7,7 +7,6 @@ end balance { 0 } - ckb_transactions_count { 0 } lock_hash { "0x#{SecureRandom.hex(32)}" } last_updated_block_number { 10 } @@ -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 = [] @@ -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 = [] @@ -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) diff --git a/test/jobs/revert_block_job_test.rb b/test/jobs/revert_block_job_test.rb index 3d668dcd1..61af218f4 100644 --- a/test/jobs/revert_block_job_test.rb +++ b/test/jobs/revert_block_job_test.rb @@ -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) @@ -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 diff --git a/test/models/address_test.rb b/test/models/address_test.rb index 4becffac3..7d618677c 100644 --- a/test/models/address_test.rb +++ b/test/models/address_test.rb @@ -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:, @@ -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 diff --git a/test/models/ckb_sync/node_data_processor_test.rb b/test/models/ckb_sync/node_data_processor_test.rb index 63a9e2cf0..3e29de66a 100644 --- a/test/models/ckb_sync/node_data_processor_test.rb +++ b/test/models/ckb_sync/node_data_processor_test.rb @@ -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