2024-03-25 13:59:35 +00:00

34 lines
1.1 KiB
Ruby

class Metapurse < ActiveRecord::Base
belongs_to :user, optional: true
def icpswap_pool_data_raw
icpswap_pool_data_raw = `dfx --identity anonymous canister --network=ic call ggzvv-5qaaa-aaaag-qck7a-cai getAllPools`
end
def icp_usd
JSON.parse(`curl -s https://www.binance.com/api/v3/avgPrice?symbol=ICPUSDT`)["price"].to_f
end
def icp_canister_id
"ryjl3-tyaaa-aaaaa-aaaba-cai"
end
def total_usd
total_usd = 0.0
self.data.each_line do |record|
canister_id = record.split[0]
amount = record.split[1].gsub(",","").to_f # rescue nil
if canister_id == icp_canister_id
value = self.icp_usd
value_amount = (value * amount).round(2) # rescue 0
total_usd += value_amount # rescue 0
else
value = icpswap_pool_data_raw.split("record {").select{|pool| !pool.scan(canister_id).empty? && !pool.scan(icp_canister_id).empty? }[0].scan(/token0Price = [+-]?([1-9]\d*|0)(\.\d+)?/).join.to_f # rescue nil
value_amount = (value * amount).round(2) # rescue 0
total_usd += value_amount # rescue 0
end
end
return total_usd.round(2)
end
end