From 977214d102e6b75a9014c8d52babeb12148c1eda Mon Sep 17 00:00:00 2001 From: "Jesse C. Fisher" Date: Thu, 8 Feb 2024 16:57:27 +0000 Subject: [PATCH] Add refresh method to Token model --- app/models/token.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/app/models/token.rb b/app/models/token.rb index fe6bd107..cb2f13d5 100644 --- a/app/models/token.rb +++ b/app/models/token.rb @@ -1,6 +1,7 @@ class Token < ActiveRecord::Base enum standard: [:dip20, :icrc1, :unknown] validates :canister_id, uniqueness: true, allow_nil: true + before_create :refresh def transfer_fee_to_f if self.transfer_fee.present? && self.decimals.present? @@ -26,4 +27,43 @@ class Token < ActiveRecord::Base "Get token_info coming soon." end end + + def refresh + metadata = `dfx canister --network ic call #{self.canister_id} icrc1_metadata 2>&1` + if metadata.scan(/no update method/).present? + # TODO: Use getTokenInfo instead of getMetadata + metadata = `dfx canister --network ic call #{self.canister_id} getMetadata 2>&1` + if metadata.scan(/no update method/).present? + self.standard = :unknown + else + self.standard = :dip20 + + # TODO: Use getTokenInfo instead of getMetadata + tokenInfo = `dfx canister --network ic call #{self.canister_id} getTokenInfo 2>&1` + self.holder_number = tokenInfo.lines[2].split[2] + + self.transfer_fee = metadata.lines[2].split[2].to_i + self.decimals = metadata.lines[3].split[2] + # self.owner = metadata.lines[4].split[3] + # self.logo_url = metadata.lines[5].split("\"")[1] + self.logo_url = tokenInfo.lines[8].split[2].split('"')[1] + self.name = metadata.lines[6].split("\"")[1] + self.total_supply = metadata.lines[7].split[2].to_i/(10.0**self.decimals) + self.symbol = metadata.lines[8].split("\"")[1] + end + else + self.standard = :icrc1 + self.transfer_fee = metadata.lines[2].split[7].to_i + self.decimals = metadata.lines[5].split[7].to_i + begin + self.logo_url = metadata.lines[9].split("\"")[1] + rescue + end + self.name = metadata.lines[3].split("\"")[3] + total_supply = `dfx canister --network ic call #{self.canister_id} icrc1_total_supply 2>&1` + self.total_supply = total_supply.split[0][1..-1].to_i/(10.0**self.decimals) + self.symbol = metadata.lines[4].split("\"")[3] + end + end + end