Skip to content

Commit

Permalink
chore(server): update cell status on save block
Browse files Browse the repository at this point in the history
  • Loading branch information
shaojunda committed May 24, 2019
1 parent b7c6d38 commit f545e31
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 30 deletions.
9 changes: 8 additions & 1 deletion server/app/models/ckb_sync/persist.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def save_block(node_block, sync_type)
local_block.address_ids = block_contained_addresses.to_a
local_block.ckb_transactions_count = ckb_transactions.size
local_block.save!
update_cell_status!(local_block)
end

Sidekiq::Client.push_bulk("class" => "UpdateAddressInfoWorker", "args" => local_block.address_ids.map { |ids| [ids] }, "queue" => "address_info_updater") if local_block.address_ids.present?
Expand Down Expand Up @@ -98,9 +99,15 @@ def update_address_balance_and_ckb_transactions_count(address)

private

def update_cell_status!(local_block)
cell_output_ids = CellInput.where(ckb_transaction: local_block.ckb_transactions).select("previous_cell_output_id")

CellOutput.where(id: cell_output_ids).update_all(status: :dead)
end

def update_block_address_ids(cell_input_address_arr, ckb_transaction)
block = ckb_transaction.block
block.address_ids += cell_input_address_arr
block.address_ids += cell_input_address_arr.pluck(:id)
block.save

Sidekiq::Client.push_bulk("class" => "UpdateAddressInfoWorker", "args" => block.address_ids.map { |ids| [ids] }, "queue" => "address_info_updater")
Expand Down
8 changes: 0 additions & 8 deletions server/app/models/ckb_sync/validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ def validate(block_number)
return if local_block.blank?

local_block.verify!(node_block)
update_cell_status!(local_block)
update_address_balance_and_ckb_transactions_count!(local_block)
end
end
Expand All @@ -22,19 +21,12 @@ def call(block_hash)
return if local_block.blank?

local_block.verify!(node_block)
update_cell_status!(local_block)
update_address_balance_and_ckb_transactions_count!(local_block)
end
end

private

def update_cell_status!(local_block)
cell_output_ids = CellInput.where(ckb_transaction: local_block.ckb_transactions).select("previous_cell_output_id")

CellOutput.where(id: cell_output_ids).update_all(status: :dead)
end

def update_address_balance_and_ckb_transactions_count!(local_block)
addresses = []
local_block.contained_addresses.each do |address|
Expand Down
21 changes: 0 additions & 21 deletions server/test/models/ckb_sync/validator_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,26 +36,5 @@ class ValidatorTest < ActiveSupport::TestCase
end
end
end

test "should change cell output status from live to dead when it is used" do
block = create(:block, :with_block_hash, :with_block_number)
previous_ckb_transaction = create(:ckb_transaction, block: block)
previous_ckb_transaction.cell_inputs.create(previous_output: { cell: nil, block_hash: block.block_hash })
cell_output = previous_ckb_transaction.cell_outputs.create(capacity: 10**8, address: create(:address), block: block)
cell_output.create_lock_script

ckb_transaction = create(:ckb_transaction, block: block)
ckb_transaction.cell_inputs.create(previous_output: { cell: { tx_hash: previous_ckb_transaction.tx_hash, index: 0 }, block_hash: block.block_hash }, previous_cell_output_id: cell_output.id)

node_block = JSON.parse(fake_node_block(DEFAULT_NODE_BLOCK_HASH))

assert_changes -> { cell_output.reload.status }, from: "live", to: "dead" do
VCR.use_cassette("blocks/10") do
SyncInfo.local_authentic_tip_block_number

CkbSync::Validator.call(node_block.dig("header", "hash"))
end
end
end
end
end

0 comments on commit f545e31

Please sign in to comment.