Skip to content

Commit

Permalink
Merge pull request #2166 from nervosnetwork/testnet
Browse files Browse the repository at this point in the history
Deploy to mainnet
  • Loading branch information
zmcNotafraid authored Aug 30, 2024
2 parents 43362dd + 29c15a9 commit deeee75
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 18 deletions.
28 changes: 28 additions & 0 deletions app/controllers/api/v2/bitcoin_addresses_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,34 @@ def rgb_cells
render json: { data: { rgb_cells: cells }, meta: { total: bitcoin_vouts.total_count, page_size: @page_size } }
end

def udt_accounts
expires_in 1.minute, public: true, must_revalidate: true, stale_while_revalidate: 10.seconds

address = Addresses::Explore.run!(key: params[:id])
address_ids = address.map(&:id)

cell_types = %w(udt xudt xudt_compatible)
cell_outputs = CellOutput.live.includes(:bitcoin_vout).where(cell_outputs: { address_id: address_ids, cell_type: cell_types }).
where.not(bitcoin_vouts: { status: "unbound" }).group(:cell_type, :type_hash).sum(:udt_amount)

udt_accounts = cell_outputs.map do |k, v|
udt = Udt.find_by(type_hash: k[1], published: true)
next unless udt

{
symbol: udt.symbol,
decimal: udt.decimal,
amount: v,
type_hash: k[1],
udt_icon_file: udt.icon_file,
udt_type: udt.udt_type,
udt_type_script: udt.type_script,
}
end.compact

render json: { data: { udt_accounts: } }
end

private

def set_pagination_params
Expand Down
4 changes: 2 additions & 2 deletions app/models/ckb_sync/new_node_data_processor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -914,13 +914,13 @@ def prepare_script_ids(outputs)
local_cache.fetch("NodeData/LockScript/#{output.lock.code_hash}-#{output.lock.hash_type}-#{output.lock.args}") do
# TODO use LockScript.where(script_hash: output.lock.compute_hash).select(:id)&.first replace search by code_hash, hash_type and args query after script_hash has been filled
LockScript.where(code_hash: output.lock.code_hash, hash_type: output.lock.hash_type,
args: output.lock.args).take!
args: output.lock.args).order("id asc").first
end
if output.type.present?
local_cache.fetch("NodeData/TypeScript/#{output.type.code_hash}-#{output.type.hash_type}-#{output.type.args}") do
# TODO use TypeScript.where(script_hash: output.type.compute_hash).select(:id)&.first replace search by code_hash, hash_type and args query after script_hash has been filled
TypeScript.where(code_hash: output.type.code_hash, hash_type: output.type.hash_type,
args: output.type.args).take!
args: output.type.args).order("id asc").first
end
end
end
Expand Down
6 changes: 0 additions & 6 deletions app/workers/xudt_tag_worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ def mark_tags(udt)
["out-of-length-range"]
elsif utility_lp_token?(udt.args)
["utility"]
elsif !first_xudt?(udt.symbol, udt.block_timestamp)
["suspicious"]
elsif single_use_lock?(udt.issuer_address)
["supply-limited"]
elsif rgbpp_lock?(udt.issuer_address)
Expand All @@ -49,10 +47,6 @@ def out_of_length?(symbol)
symbol.length > 60
end

def first_xudt?(symbol, block_timestamp)
!Udt.published_xudt.where("LOWER(symbol) = ?", symbol.downcase).where("block_timestamp < ?", block_timestamp).exists?
end

def rgbpp_lock?(issuer_address)
address_code_hash = CkbUtils.parse_address(issuer_address).script.code_hash
issuer_address.present? && CkbSync::Api.instance.rgbpp_code_hash.include?(address_code_hash)
Expand Down
1 change: 1 addition & 0 deletions config/routes/v2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@
resources :bitcoin_statistics, only: :index
resources :bitcoin_addresses, only: :show do
get :rgb_cells, on: :member
get :udt_accounts, on: :member
end
resources :rgb_live_cells, only: :index
end
Expand Down
87 changes: 87 additions & 0 deletions lib/tasks/migration/update_cell_output_script_id.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
namespace :migration do
desc "Usage: RAILS_ENV=production bundle exec rake migration:update_cell_output_script_id"
task update_cell_output_script_id: :environment do
ActiveRecord::Base.connection.execute("SET statement_timeout = 0")
p "==============lock scripts"
duplicate_script_hashes = LockScript.
select(:script_hash).
group(:script_hash).
having("COUNT(*) > 1").
pluck(:script_hash)
duplicate_script_hashes.each do |hash|
LockScript.where(script_hash: hash).each do |script|
unless CellOutput.live.where(lock_script_id: script.id).exists?
script.destroy
end
end
end; nil

duplicate_script_hashes.each_with_index do |lock_script_hash, index|
p lock_script_hash
p index
lock_script_ids = LockScript.where(script_hash: lock_script_hash).order("id asc").pluck(:id)
base_lock_script_id = lock_script_ids.delete_at(0)
lock_script_ids.each do |id|
CellOutput.where(lock_script_id: id).in_batches(of: 10000) do |batch|
batch.update_all(lock_script_id: base_lock_script_id)
end
end
end; nil

duplicate_script_hashes = LockScript.
select(:script_hash).
group(:script_hash).
having("COUNT(*) > 1").
pluck(:script_hash)
duplicate_script_hashes.each do |hash|
LockScript.where(script_hash: hash).each do |script|
unless CellOutput.live.where(lock_script_id: script.id).exists?
script.destroy
end
end
end; nil

p "==============type scripts"
duplicate_type_script_hashes = TypeScript.
select(:script_hash).
group(:script_hash).
having("COUNT(*) > 1").
pluck(:script_hash)

duplicate_type_script_hashes.each do |hash|
TypeScript.where(script_hash: hash).each do |script|
unless CellOutput.live.where(type_script_id: script.id).exists?
script.destroy
end
end
end; nil

duplicate_type_script_hashes.each_with_index do |type_script_hash, index|
p type_script_hash
p index
type_script_ids = TypeScript.where(script_hash: type_script_hash).order("id asc").pluck(:id)
base_type_script_id = type_script_ids.delete_at(0)
type_script_ids.each do |id|
CellOutput.where(type_script_id: id).in_batches(of: 10000) do |batch|
batch.update_all(type_script_id: base_type_script_id)
end
end
end; nil

duplicate_type_script_hashes = TypeScript.
select(:script_hash).
group(:script_hash).
having("COUNT(*) > 1").
pluck(:script_hash)

duplicate_type_script_hashes.each do |hash|
TypeScript.where(script_hash: hash).each do |script|
unless CellOutput.live.where(type_script_id: script.id).exists?
script.destroy
end
end
end; nil

puts "done"
end
end
10 changes: 0 additions & 10 deletions test/workers/xudt_tag_worker_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,4 @@ class XudtTagWorkerTest < ActiveJob::TestCase
end
assert_equal ["utility", "rgb++"], XudtTag.last.tags
end

test "insert suspicious tag when not lp token but duplicate" do
udt = create(:udt, :xudt, symbol: "CKBBB", block_timestamp: 1.day.ago.to_i * 1000)
create(:xudt_tag, udt_id: udt.id, udt_type_hash: udt.type_hash, tags: ["rgb++", "layer-1-asset", "supply-limited"])
create(:udt, :xudt, symbol: "ckbbb", block_timestamp: Time.now.to_i * 1000, issuer_address: @address.address_hash)
assert_changes -> { XudtTag.count }, from: 1, to: 2 do
XudtTagWorker.new.perform
end
assert_equal ["suspicious", "rgb++"], XudtTag.last.tags
end
end

0 comments on commit deeee75

Please sign in to comment.