# docker-finance | modern accounting for the power-user
#
# Copyright (C) 2021-2026 Aaron Fiore (Founder, Evergreen Crypto LLC)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.

# docker-finance @DOCKER_FINANCE_VERSION@

#
# Configuration for `fetch` command
#

# Documentation:
#
#   1. Replace subaccount names with the subaccount name you created during
#      Environment Generation (in your Flow Layout):
#
#        - For exchange accounts, this will be a single directory name
#        - For blockchain-based accounts, this will be in the format:
#
#            subaccount-1[:subaccount-2:...]/address
#
#          Where :subaccount-2:... (and successive subaccounts) are optional
#          (the final subaccount in the chain being wallet-name (per address)).
#
#   2. For asset prices:
#
#        - Mobula:
#
#            1. Visit mobula.io to search for your asset
#            2. Prepend the ID to the ticker (as seen below)
#               a. If necessary, use contract address as asset ID
#               b. If necessary, prepend the blockchain to asset ID (as seen below)
#
#        - CoinGecko:
#
#            1. Visit coingecko.com to get the assets's ID
#            2. Prepend the ID to the ticker (as seen below)
#
#   3. For account APIs:
#
#      - Replace XXXXXXX... with your API-related information.
#
#        * See the accounts below for unique details/caveats on API key creation.
#
#   4. For blockchain-based APIs:
#
#     - 'key' format: blockchain1/API_KEY1,blockchain2/API_KEY2
#
#       * For ethereum-based chains:
#
#         - As of now, you *MUST* use an API key.
#           Generate your API key at etherscan.io but take note
#           of what chain is supported by which free/paid plan.
#
#         - Use "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
#           as the blockchain API, replacing X with the API key,
#           as its unified API is used for all ethereum-based chains.
#
#       * For algorand/tezos: currently, no API key is required.
#
#
#   5. Feel free to delete any unused accounts/subaccounts as needed.

# Disclaimer:
#
#   The example wallet accounts/addresses used in this file:
#
#     - were picked randomly from the blockchain and are meant to be used for
#       demonstration purposes only
#
#     - outside the realm of testing and development, have no association with
#       the author or docker-finance or Evergreen Crypto LLC
#
#     - are not endorsements of the wallet's activity or tokenomics

version: @DOCKER_FINANCE_VERSION@
@DOCKER_FINANCE_PROFILE@:
  @DOCKER_FINANCE_SUBPROFILE@:
    price:
      mobula:
        # NOTE: visit mobula.io for free API key
        key:
        asset:
          - "algorand/ALGO"
          - "autonolas/OLAS"
          - "bitcoin/BTC"
          - "busd/BUSD"
          - "cardano/ADA"
          - "ethereum/ETH"
          - "litecoin/LTC"
          - "metacade/MCADE"
          - "multichain/MULTI"
          - "tether/USDT"
          - "tezos/XTZ"

          # USDC
          - "usdc/USDC"
          #- "ethereum:usdc/USDC"  # same as above
          #- "avalanche:0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e/USDC"
          #- "optimistic:0x0b2c639c533813f4aa9d7837caf62653d097ff85/USDC"

          # USDC (bridged USDC.e)
          - "arbitrum:0xff970a61a04b1ca14834a43f5de4533ebddb5cc8/USDC.e"

          # Aave V2 USDC
          #- "ethereum:0xbcca60bb61934080951369a648fb03df4f96263c/aUSDC" # TODO: 2026-03-13: upstream has started to return 'Time range too large for period "5m". Would generate 10272 candles, max is 10000. Use a larger period or smaller time range.' which appears to be a server-side(?) problem. Commenting out here for now in order to not break CI.
          #- "polygon:0x625e7708f30ca75bfd92586e17077590c60eb4cd/aUSDC"

          # Gemini USD
          - "ethereum:0x056fd409e1d7a124bd7017459dfea2f387b6d5cd/GUSD"

          # MATIC (on Ethereum)
          - "ethereum:0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0/MATIC"

          # Paxos (treated as USDP)
          - "ethereum:0x8e870d67f660d95d5be530380d0ec0bd388289e1/PAX"

          # PayPal USD
          - "ethereum:0x6c3ea9036406852006290770bedfcaba0e23a0e8/PYUSD"

      coingecko:
        # NOTE: an empty `key` will use the free Public API. Otherwise, Pro API (paid plan) will be used.
        key:
        asset:
          # Assets not currently available (or accessible) through Mobula
          - "aave-v3-weth/aEthWETH"
          - "aave-weth/aWETH"
          - "bitcoin-cash/BCH"
          - "weth/WETH"
          - "wrapped-bitcoin/WBTC"

          # Duplicates of `mobula`-fetched assets above
          #- "compound-usdt/cUSDT"  # NOTE: delisted on coingecko: 2022-06-18
          #- "aave-usdc/aUSDC"
          #- "algorand/ALGO"
          #- "autonolas/OLAS"
          #- "binance-usd/BUSD"
          #- "bitcoin/BTC"
          #- "cardano/ADA"
          #- "ethereum/ETH"
          #- "gemini-dollar/GUSD"
          #- "litecoin/LTC"
          #- "matic-network/MATIC"
          #- "metacade/MCADE"
          #- "multichain/MULTI"
          #- "paxos-standard/PAX"
          #- "paypal-usd/PYUSD"
          #- "tether/USDT"
          #- "tezos/XTZ"
          #- "usd-coin/USDC"

    account:
      gemini:
        # NOTE: When creating a Gemini API key, create a key with only the "Auditor" role
        key: "account-XXXXXXXXXXXXXXXXXXXX"
        secret: "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        # Use this format to fetch all supported symbols/pairs
        subaccount: "exchange"
        # Use this format to fetch only trades with the following symbols/pairs (all BTC pairs and only GUSD/USD pair)
        #subaccount: "exchange/{BTC,gusdusd}"

      coinbase:
        # CDP (Coinbase Developer Platform) API key
        #
        #  NOTE: When creating a CDP key, only select readonly
        #
        #  WARNING: support for Legacy Keys removed on 2025-02-05
        key: "organizations/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/apiKeys/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
        secret: "-----BEGIN EC PRIVATE KEY-----\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\nXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX==\n-----END EC PRIVATE KEY-----\n"

        # Use this format to fetch all supported symbols/pairs
        subaccount: "platform"

        # Use this format to fetch only accounts with the following codes
        # NOTE: codes will likely be the ticker symbol. See the following for details:
        #   - https://docs.cdp.coinbase.com/sign-in-with-coinbase/docs/api-currencies
        #subaccount: "platform/{BTC,LTC,ETH,USDC,USD}"

      coinbase-wallet:
        key: "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        subaccount:
          ethereum:
            - "phone:cb-1/0x10Bd3c5d536f69e87C8d4ECB49C01dDc9db4637b"

      coinomi:
        key: "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        subaccount:
          # NOTE: same account name can only be used with differing networks
          ethereum:
            - "phone:coinomi-1/0x27A309082a170557353C2A7C207ae2d81fb17659"
          algorand:
            - "phone:coinomi-1/BO65GIBYYYUPK4KTQ32IRO5BE2H3VEFTK65GKI2GNHZYPNUMJKGJOFJWSY"

      metamask:
        key: "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        subaccount:
          ethereum:
            - "laptop:wallet-1/0x6546d43EA6DE45EB7298A2074e239D5573cA02F3"
            - "phone:wallet-1/0x236ba53B56FEE4901cdac3170D17f827DF43E969"
          polygon:
            - "laptop:wallet-2/0xEad0B2b6f6ab84d527569835cd7fe364e067cFFf"
          arbitrum:
            - "phone:wallet-2/0xd3b29C94a67Cfa949FeD7dd1474B71d006fa0A2A"
          base:
            - "laptop:wallet-3/0x4C7219b760b71B9415E0e01Abd34d0f65631e57e"
          optimism:
            - "phone:wallet-3/0x53004E863Aa0F4028B154ECA65CFb32Eb5a8f5bB"

      ledger:
        key: "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        subaccount:
          algorand:
            - "nano:x-1:general-1/R7U6QWS4QLDB5YLBI25TWCPW47N565FUUDP6GG5XEWAKD5INLATHIG24NE"
            - "nano:x-1:general-2/LO26MYSSWSFN5U6JDXAOZN2HZ3GCQHLXYEPHRTPJDSD4A3IZUK25GCV7UM"
          ethereum:
            # Hypothetically used with MetaMask but stored on Ledger
            - "nano:s-1:usdt-1/0x66ca49dadBA8C6584f178cf7dB67Dd6E868103Cf"
            - "nano:s-1:swap-1/0x7aF0C63540F2117b475BFEE83cCb16B2b8c59351"
            - "nano:s-plus-1:swap-1/0x1c23B471C65747B848f5119dE6687fF567831E92"
            - "nano:x-1:misc-1/0x8360cca892d37201313AF79738551dCa1d0B537d"
          tezos:
            - "nano:x-1:fun-1/tz1b5qZarKoNC8X4x5cknkptN3n7XfGcxY6r"
            - "nano:x-1:staking-1/tz1S1ayWDiHzmL6zFNnY1ivvUkEgDcH88cjx"

      pera-wallet:
        subaccount:
          algorand:
            - "phone:mobile-1/55YXQ2AC7PUOOYIWUFIOGFZ7M5CBWFUDOIT7L3FMZVE7HGC3IKABL7HVOE"
            - "phone:mobile-2/NKXSKLVZ5OHFEXDAVBGL4C5BVW4VJ5FHE4LAK2CSDQZTDGW5T5OVJSGAXY"

# vim: syn=yaml sw=2 sts=2 si ai et
