Module: Mpp::Methods::Evm::Assets

Defined in:
lib/mpp/methods/evm/assets.rb

Overview

Known EIP-3009 assets plus helpers to resolve a currency config.

Defined Under Namespace

Classes: Asset

Constant Summary collapse

BASE_USDC =
Asset.new(
  address: hex_address("833589fCD6eDb6E08f", "4c7C32D4f71b54bdA02913"),
  decimals: 6,
  chain_id: 8453,
  name: "USD Coin",
  version: "2"
)
BASE_SEPOLIA_USDC =
Asset.new(
  address: hex_address("036CbD53842c542663", "4e7929541eC2318f3dCF7e"),
  decimals: 6,
  chain_id: 84532,
  name: "USDC",
  version: "2"
)
CELO_USDC =
Asset.new(
  address: hex_address("cebA9300f2b948710d", "2653dD7B07f33A8B32118C"),
  decimals: 6,
  chain_id: 42220,
  name: "USDC",
  version: "2"
)
CELO_USDT =
Asset.new(
  address: hex_address("48065fbBE25f71C928", "2ddf5e1cD6D6A887483D5e"),
  decimals: 6,
  chain_id: 42220,
  name: "Tether USD",
  version: "1"
)
CELO_SEPOLIA_USDC =
Asset.new(
  address: hex_address("01C5C0122039549AD1", "493B8220cABEdD739BC44E"),
  decimals: 6,
  chain_id: 11142220,
  name: "USDC",
  version: "2"
)

Class Method Summary collapse

Class Method Details

.checksum(address) ⇒ Object



86
87
88
# File 'lib/mpp/methods/evm/assets.rb', line 86

def checksum(address)
  Authorization.checksum_address(address)
end

.resolve(currency, authorization: nil, chain_id: nil, decimals: nil) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/mpp/methods/evm/assets.rb', line 59

def resolve(currency, authorization: nil, chain_id: nil, decimals: nil)
  if currency.is_a?(Asset)
    auth = authorization_hash(authorization) || {"name" => currency.name, "version" => currency.version}
    return {
      address: checksum(currency.address),
      chain_id: chain_id || currency.chain_id,
      decimals: decimals || currency.decimals,
      authorization: auth
    }
  end

  address = currency.to_s
  Kernel.raise ArgumentError, "EVM currency must be a known asset or 0x-prefixed address" unless address.match?(/\A0x[a-fA-F0-9]{40}\z/)
  Kernel.raise ArgumentError, "EVM authorization requires `chain_id`." if chain_id.nil?
  Kernel.raise ArgumentError, "EVM authorization requires `decimals`." if decimals.nil?

  auth = authorization_hash(authorization)
  Kernel.raise ArgumentError, "EVM authorization requires `authorization` metadata." unless auth

  {
    address: checksum(address),
    chain_id: Kernel.Integer(chain_id),
    decimals: Kernel.Integer(decimals),
    authorization: auth
  }
end