From 18b6e1118aee98daef328dc388e02ef736cca5b9 Mon Sep 17 00:00:00 2001 From: zhangyaning Date: Wed, 29 Oct 2025 13:23:43 +0800 Subject: [PATCH] current balance (#2907) --- app/interactions/addresses/ckb_transactions.rb | 2 +- app/models/address.rb | 16 ++++++++++++++++ app/models/null_address.rb | 16 ++++++++++++++++ app/serializers/address_serializer.rb | 8 ++++---- .../api/v1/addresses_controller_test.rb | 2 +- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/app/interactions/addresses/ckb_transactions.rb b/app/interactions/addresses/ckb_transactions.rb index f7abe8e48..7393a38fa 100644 --- a/app/interactions/addresses/ckb_transactions.rb +++ b/app/interactions/addresses/ckb_transactions.rb @@ -32,7 +32,7 @@ def execute select(:ckb_transaction_id). page(page).per(page_size) - total_count = Address.find(address_id).ckb_transactions_count + total_count = Address.find(address_id).current_ckb_transactions_count end ckb_transaction_ids = account_books.map(&:ckb_transaction_id) diff --git a/app/models/address.rb b/app/models/address.rb index c827abb39..d8bfda063 100644 --- a/app/models/address.rb +++ b/app/models/address.rb @@ -160,6 +160,22 @@ def recalc_revalidate_balance! save! end + def current_balance + self.cell_outputs.live.sum(:capacity) + end + + def current_ckb_transactions_count + AccountBook.where(address_id: self.id).count + end + + def current_live_cells_count + self.cell_outputs.live.count + end + + def current_balance_occupied + self.cell_outputs.live.occupied.sum(:capacity) + end + def cal_balance total = cell_outputs.live.sum(:capacity) occupied = cell_outputs.live.occupied.sum(:capacity) diff --git a/app/models/null_address.rb b/app/models/null_address.rb index aa521049b..6a80ca87d 100644 --- a/app/models/null_address.rb +++ b/app/models/null_address.rb @@ -13,6 +13,22 @@ def balance 0 end + 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 + def ckb_transactions_count 0 end diff --git a/app/serializers/address_serializer.rb b/app/serializers/address_serializer.rb index 632088f17..9fad4574e 100644 --- a/app/serializers/address_serializer.rb +++ b/app/serializers/address_serializer.rb @@ -7,10 +7,10 @@ class AddressSerializer object.query_address || object.address_hash end attribute :balance do |object| - object.balance.to_s + object.current_balance.to_s end attribute :transactions_count do |object| - object.ckb_transactions_count.to_s + object.current_ckb_transactions_count.to_s end attribute :dao_deposit do |object| object.dao_deposit.to_s @@ -27,7 +27,7 @@ class AddressSerializer Settings.special_addresses[object.address_hash] end attribute :live_cells_count do |object| - object.live_cells_count.to_s + object.current_live_cells_count.to_s end attribute :mined_blocks_count do |object| object.mined_blocks_count.to_s @@ -144,7 +144,7 @@ class AddressSerializer (object.interest.to_i + object.unclaimed_compensation.to_i).to_s end attribute :balance_occupied do |object| - object.balance_occupied.to_s + object.current_balance_occupied.to_s end attribute :bitcoin_address_hash do |object| object.bitcoin_address&.address_hash diff --git a/test/controllers/api/v1/addresses_controller_test.rb b/test/controllers/api/v1/addresses_controller_test.rb index 5a268483c..af9645b81 100644 --- a/test/controllers/api/v1/addresses_controller_test.rb +++ b/test/controllers/api/v1/addresses_controller_test.rb @@ -191,7 +191,7 @@ class AddressesControllerTest < ActionDispatch::IntegrationTest address_hash: "ckb1qyq0hcfpff4h8w8zvy44uurvlgdrr09tefwqx266dl") valid_get api_v1_address_url(address.address_hash) - assert_equal "0", json.dig("data", 0, "attributes", "balance_occupied") + assert_equal "0.0", json.dig("data", 0, "attributes", "balance_occupied") end test "should return nrc 721 udt accounts with given address hash" do