Add refresh method to Token model
This commit is contained in:
parent
5f3ed30d21
commit
4b0c785a67
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user