diff --git a/README.md b/README.md index 0a51021..1b9a5f1 100644 --- a/README.md +++ b/README.md @@ -177,9 +177,10 @@ Supported blockchains (independent of wallet type): - [X] [Algorand](https://algorand.com/) *(powered by [AlgoNode.io](https://algonode.io/))* - [ ] Cardano -- [X] Ethereum-based - - [ ] Arbitrum - - [X] [Ethereum](https://ethereum.org/) *(powered by [Etherscan.io APIs](https://etherscan.io/))* +- [X] Ethereum-based *(powered by [Etherscan.io APIs](https://etherscan.io/))* + - [X] [Arbitrum (One)](https://arbitrum.io/) + - [X] [Base](https://www.base.org/) + - [X] [Ethereum](https://ethereum.org/) - [X] [1inch](https://1inch.io/) - [X] [Aave](https://aave.com/) - [X] [AirSwap](https://about.airswap.io/) @@ -187,8 +188,8 @@ Supported blockchains (independent of wallet type): - [ ] Lido - [X] [Rocket Pool](https://rocketpool.net/) - [X] [Uniswap](https://uniswap.org/) - - [ ] Optimism - - [X] [Polygon](https://polygon.technology/) *(powered by [PolygonScan APIs](https://polygonscan.com/))* + - [X] [Optimism](https://www.optimism.io/) + - [X] [Polygon](https://polygon.technology/) - [X] [Tezos](https://tezos.com/) *(powered by [TzKT API](https://tzkt.io/))* #### Self-hosting diff --git a/client/docker-finance.d/container/fetch/fetch.yaml.in b/client/docker-finance.d/container/fetch/fetch.yaml.in index ad9a648..3c39978 100644 --- a/client/docker-finance.d/container/fetch/fetch.yaml.in +++ b/client/docker-finance.d/container/fetch/fetch.yaml.in @@ -1,6 +1,6 @@ # docker-finance | modern accounting for the power-user # -# Copyright (C) 2021-2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +# Copyright (C) 2021-2025 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 @@ -48,17 +48,39 @@ # 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. -# Accounts below will provide unique details/caveats on API key creation. +# 3. For account APIs: # -# 4. Feel free to delete any unused accounts/subaccounts as needed. +# - 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 +# +# - Use "etherscan" as the blockchain API, 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. -# NOTE: +# 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@ @@ -170,15 +192,13 @@ version: @DOCKER_FINANCE_VERSION@ #subaccount: "platform/{BTC,LTC,ETH,USDC,USD}" coinbase-wallet: - # API scanner keys can be generated at etherscan.io, polygonscan.com - # key format: blockchain1/API_KEY1,blockchain2/API_KEY2 - key: "ethereum/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + key: "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" subaccount: ethereum: - "phone:cb-1/0x10Bd3c5d536f69e87C8d4ECB49C01dDc9db4637b" coinomi: - key: "ethereum/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + key: "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" subaccount: # NOTE: same account name can only be used with differing networks ethereum: @@ -187,20 +207,22 @@ version: @DOCKER_FINANCE_VERSION@ - "phone:coinomi-1/BO65GIBYYYUPK4KTQ32IRO5BE2H3VEFTK65GKI2GNHZYPNUMJKGJOFJWSY" metamask: - # API scanner keys can be generated at etherscan.io, polygonscan.com - # key format: blockchain1/API_KEY1,blockchain2/API_KEY2 - key: "ethereum/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,polygon/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + 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: - # API scanner keys can be generated at etherscan.io, polygonscan.com - # key format: blockchain1/API_KEY1,blockchain2/API_KEY2 - key: "ethereum/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" + key: "etherscan/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" subaccount: algorand: - "nano:x-1:general-1/R7U6QWS4QLDB5YLBI25TWCPW47N565FUUDP6GG5XEWAKD5INLATHIG24NE" diff --git a/container/src/finance/lib/internal/fetch/blockchains/fetch.php b/container/src/finance/lib/internal/fetch/blockchains/fetch.php index e1df969..e9eb431 100644 --- a/container/src/finance/lib/internal/fetch/blockchains/fetch.php +++ b/container/src/finance/lib/internal/fetch/blockchains/fetch.php @@ -2,7 +2,7 @@ // docker-finance | modern accounting for the power-user // -// Copyright (C) 2021-2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +// Copyright (C) 2021-2025 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 @@ -68,6 +68,7 @@ namespace docker_finance\blockchains utils\CLI::throw_fatal('invalid metadata. Did you give accurate account information (account exists? is mispelled?)?'); } } + $metadata->set_blockchain($parsed_metadata[0]); $metadata->set_subaccount($parsed_metadata[1]); $metadata->set_address($parsed_metadata[2]); @@ -99,7 +100,12 @@ namespace docker_finance\blockchains $metadata->set_account(array_pop($head_end)); $metadata->set_out_dir($out_dir); - // Set blockchain API key (blockchain scanning). NOTE: one key per chain, per account + /** + * Set blockchain API key (blockchain scanning). + * + * Expects one key per chain (per account), except for + * ethereum-based chains (which only expects one key for all chains). + */ $metadata->set_api_key(''); // Initialize to prevent fatal error if (str_contains($this->get_env()->get_env('API_KEY'), '/')) { $key_entries = explode(',', $this->get_env()->get_env('API_KEY')); @@ -107,8 +113,22 @@ namespace docker_finance\blockchains $api_blockchain = explode('/', $entry)[0]; $api_key = explode('/', $entry)[1]; - if ($api_blockchain == $metadata->get_blockchain()) { - $metadata->set_api_key($api_key); + if (empty($api_key)) { + utils\CLI::throw_fatal("no blockchain API key value"); + } + + if (!empty($api_blockchain)) { + switch ($api_blockchain) { + // TODO: WARNING: if adding non-ethereum-based chain, update as needed. + case 'algorand': + case 'etherscan': + case 'tezos': + $metadata->set_api_key($api_key); + break; + default: + utils\CLI::throw_fatal("invalid blockchain API"); + break; + } } } } @@ -120,7 +140,10 @@ namespace docker_finance\blockchains // API factory switch ($metadata->get_blockchain()) { + case 'arbitrum': + case 'base': case 'ethereum': + case 'optimism': case 'polygon': $this->api = new internal\blockchains\Ethereum($this->get_env()); break; diff --git a/container/src/finance/lib/internal/fetch/blockchains/internal/base.php b/container/src/finance/lib/internal/fetch/blockchains/internal/base.php index cd33bbd..e8cf26b 100644 --- a/container/src/finance/lib/internal/fetch/blockchains/internal/base.php +++ b/container/src/finance/lib/internal/fetch/blockchains/internal/base.php @@ -2,7 +2,7 @@ // docker-finance | modern accounting for the power-user // -// Copyright (C) 2021-2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +// Copyright (C) 2021-2025 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 @@ -228,8 +228,9 @@ namespace docker_finance\blockchains\internal $file = $out_dir . '/' . $metadata->get_address(); - // If contract type needed, then append type - if ($metadata->get_blockchain() == 'ethereum' || $metadata->get_blockchain() == 'polygon') { + // If ethereum-based contract type is needed, append contract type. + // TODO: WARNING: if adding non-ethereum-based chain, update as needed. + if ($metadata->get_blockchain() != 'algorand' && $metadata->get_blockchain() != 'tezos') { $file = $out_dir . '/' . $metadata->get_address() . '-' . $metadata->get_contract_type(); } diff --git a/container/src/finance/lib/internal/fetch/blockchains/internal/blockchains/ethereum.php b/container/src/finance/lib/internal/fetch/blockchains/internal/blockchains/ethereum.php index 397d774..6a34add 100644 --- a/container/src/finance/lib/internal/fetch/blockchains/internal/blockchains/ethereum.php +++ b/container/src/finance/lib/internal/fetch/blockchains/internal/blockchains/ethereum.php @@ -2,7 +2,7 @@ // docker-finance | modern accounting for the power-user // -// Copyright (C) 2021-2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +// Copyright (C) 2021-2025 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 @@ -95,7 +95,11 @@ namespace docker_finance\blockchains\internal\blockchains\ethereum //! @brief Implements response handler public function get_response(internal\Metadata $metadata): mixed { - return json_decode($this->request($metadata->get_url()), true, 512, JSON_PRETTY_PRINT)['result']; + $response = json_decode($this->request($metadata->get_url()), true, 512, JSON_PRETTY_PRINT)['result']; + if (is_string($response)) { + utils\CLI::throw_fatal($response); + } + return $response; } //! @brief Implements parser @@ -149,13 +153,16 @@ namespace docker_finance\blockchains\internal\blockchains\ethereum switch ($contract_type) { case 'normal': switch ($blockchain) { + case 'arbitrum': + case 'base': case 'ethereum': + case 'optimism': $token_name = 'Ethereum'; $symbol = 'ETH'; break; case 'polygon': $token_name = 'Polygon'; - $symbol = 'MATIC'; + $symbol = 'MATIC'; // TODO: update to POL along with mockups break; default: utils\CLI::throw_fatal('Unsupported subaccount name/network'); @@ -171,11 +178,14 @@ namespace docker_finance\blockchains\internal\blockchains\ethereum $token_name = 'INTERNAL'; // TODO: contract address / symbol from parent tx would be needed $contract_address = ''; switch ($blockchain) { + case 'arbitrum': + case 'base': case 'ethereum': + case 'optimism': $symbol = 'ETH'; break; case 'polygon': - $symbol = 'MATIC'; + $symbol = 'MATIC'; // TODO: update to POL along with mockups break; default: utils\CLI::throw_fatal('Unsupported subaccount name/network'); @@ -254,18 +264,32 @@ namespace docker_finance\blockchains\internal\blockchains\ethereum public function write_transactions(internal\Metadata $metadata): void { switch ($metadata->get_blockchain()) { - case 'ethereum': - $domain = 'api.etherscan.io'; + // Arbitrum One Mainnet + case 'arbitrum': + $chain_id = 42161; break; + // Base Mainnet + case 'base': + $chain_id = 8453; + break; + // Ethereum Mainnet + case 'ethereum': + $chain_id = 1; + break; + // OP Mainnet + case 'optimism': + $chain_id = 10; + break; + // Polygon Mainnet case 'polygon': - $domain = 'api.polygonscan.com'; + $chain_id = 137; break; default: utils\CLI::throw_fatal('invalid type: ' . $metadata->get_blockchain()); break; } - assert(!empty($domain)); + assert(!empty($chain_id)); $address = $metadata->get_address(); $api_key = $metadata->get_api_key(); @@ -277,7 +301,7 @@ namespace docker_finance\blockchains\internal\blockchains\ethereum 'erc-1155' => 'token1155tx'); foreach ($request as $type => $action) { - $metadata->set_url("https://{$domain}/api?module=account&action={$action}&address={$address}&startblock=0&endblock=999999999&sort=asc&apiKey={$api_key}"); + $metadata->set_url("https://api.etherscan.io/v2/api?chainId={$chain_id}&module=account&action={$action}&address={$address}&startblock=0&endblock=999999999&sort=asc&apiKey={$api_key}"); $metadata->set_contract_type($type); $response = $this->parse_response($metadata, $this->get_response($metadata)); if (!empty($response)) { diff --git a/container/src/finance/lib/internal/lib_fetch.bash b/container/src/finance/lib/internal/lib_fetch.bash index 901c13a..608940a 100644 --- a/container/src/finance/lib/internal/lib_fetch.bash +++ b/container/src/finance/lib/internal/lib_fetch.bash @@ -2,7 +2,7 @@ # docker-finance | modern accounting for the power-user # -# Copyright (C) 2021-2024 Aaron Fiore (Founder, Evergreen Crypto LLC) +# Copyright (C) 2021-2025 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 @@ -67,9 +67,19 @@ function lib_fetch::__parse_args() api${global_arg_delim_2} - Support account(s): + Account(s): - account${global_arg_delim_2} + account${global_arg_delim_2} + + Supported account(s): + + - coinbase + - coinbase-wallet + - coinomi + - gemini + - ledger + - metamask + - pera-wallet Fetch year: @@ -79,6 +89,15 @@ function lib_fetch::__parse_args() (block)chain${global_arg_delim_2} + Supported blockchain(s): + + - algorand + - arbitrum + - base + - ethereum + - optimism + - tezos + Tor (proxy): tor${global_arg_delim_2}<{on|true}|{off|false}> (default 'off') @@ -129,20 +148,20 @@ function lib_fetch::__parse_args() \e[37;2m# Fetch ethereum/polygon subaccounts for account metamask, year 2022\e[0m $ $global_usage account${global_arg_delim_2}metamask blockchain${global_arg_delim_2}ethereum${global_arg_delim_3}polygon year${global_arg_delim_2}2022 - \e[37;2m# Fetch multiple blockchains' subaccounts for account ledger, and ethereum for metamask, year 2023\e[0m - $ $global_usage account${global_arg_delim_2}ledger${global_arg_delim_3}metamask blockchain${global_arg_delim_2}ethereum${global_arg_delim_3}tezos${global_arg_delim_3}algorand year${global_arg_delim_2}2023 + \e[37;2m# Fetch multiple blockchains' subaccounts for account ledger and metamask, year 2023\e[0m + $ $global_usage account${global_arg_delim_2}ledger${global_arg_delim_3}metamask blockchain${global_arg_delim_2}ethereum${global_arg_delim_3}base${global_arg_delim_3}tezos${global_arg_delim_3}algorand year${global_arg_delim_2}2023 \e[37;2m# Same as previous command but with shorthand option 'chain'\e[0m - $ $global_usage account${global_arg_delim_2}ledger${global_arg_delim_3}metamask chain${global_arg_delim_2}ethereum${global_arg_delim_3}tezos${global_arg_delim_3}algorand year${global_arg_delim_2}2023 + $ $global_usage account${global_arg_delim_2}ledger${global_arg_delim_3}metamask chain${global_arg_delim_2}ethereum${global_arg_delim_3}base${global_arg_delim_3}tezos${global_arg_delim_3}algorand year${global_arg_delim_2}2023 \e[37;2m# Fetch multiple blockchains/subaccounts for ledger\e[0m $ $global_usage account${global_arg_delim_2}ledger chain${global_arg_delim_2}ethereum/nano:x-1${global_arg_delim_3}tezos${global_arg_delim_1}nano:s-plus${global_arg_delim_3}algorand${global_arg_delim_1}nano:x-2 \e[37;2m# Fetch specific blockchain/subaccount/address for metamask\e[0m - $ $global_usage account${global_arg_delim_2}metamask chain${global_arg_delim_2}ethereum/phone:wallet-1/0x236ba53B56FEE4901cdac3170D17f827DF43E969 + $ $global_usage account${global_arg_delim_2}metamask chain${global_arg_delim_2}ethereum/phone:wallet-1/0x236ba53B56FEE4901cdac3170D17f827DF43E969${global_arg_delim_3}optimism/phone:wallet-3/0x18BFAa3f9Fa06123985d0456b4a911730382009D \e[37;2m# Fetch given blochchain-based subaccounts for current year, over the Tor network\e[0m - $ $global_usage account${global_arg_delim_2}metamask${global_arg_delim_3}ledger blockchain${global_arg_delim_2}ethereum${global_arg_delim_3}polygon${global_arg_delim_3}tezos${global_arg_delim_3}algorand tor${global_arg_delim_2}on + $ $global_usage account${global_arg_delim_2}metamask${global_arg_delim_3}ledger blockchain${global_arg_delim_2}ethereum${global_arg_delim_3}polygon${global_arg_delim_3}arbitrum${global_arg_delim_3}tezos${global_arg_delim_3}algorand tor${global_arg_delim_2}on \e[32mNotes:\e[0m diff --git a/container/src/hledger-flow/accounts/blockchain-explorers/ethereum-based/ethereum-based-shared.rules b/container/src/hledger-flow/accounts/blockchain-explorers/ethereum-based/ethereum-based-shared.rules index c10eff1..7395e9e 100644 --- a/container/src/hledger-flow/accounts/blockchain-explorers/ethereum-based/ethereum-based-shared.rules +++ b/container/src/hledger-flow/accounts/blockchain-explorers/ethereum-based/ethereum-based-shared.rules @@ -56,7 +56,7 @@ if %direction ^OUT$ # at times, send to the contract address for certain end-user addresses. So, # reports will produce a double-spend unless this is corrected here. if %direction ^OUT$ -& %blockchain (^ethereum$|^polygon$) +& %blockchain (^ethereum$|^polygon$|^arbitrum$|^base$|^optimism$) & %type ^normal$ & %fees [1-9] account3 assets:%account_name:%subaccount_name:%blockchain:%symbol @@ -69,7 +69,7 @@ if %direction ^OUT$ # Remove 0 value txs (or else journal is cluttered). These should appear for FEE spends only if %direction ^OUT$ -& %blockchain (^ethereum$|^polygon$) +& %blockchain (^ethereum$|^polygon$|^arbitrum$|^base$|^optimism$) & %amount_ ^[^1-9]*$ account1 account2 @@ -99,6 +99,8 @@ if %to_address ^0x401f6c983ea34274ec46f84d70b31c151321188b$ # NOTE: No ERC-20 txs here for WETH... all "normal" or "internal" +# TODO: on all supported chains + # BUY if %to_address ^0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2$ & %blockchain ^ethereum$ @@ -169,6 +171,8 @@ if %to_address ^0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2$ # Swapping # # ---------------------------------------------------------------------------- # +# TODO: on all supported chains + include ./rules.d/swap.d/1inch.rules include ./rules.d/swap.d/airswap.rules include ./rules.d/swap.d/metamask.rules @@ -178,6 +182,8 @@ include ./rules.d/swap.d/uniswap.rules # Lending # # ---------------------------------------------------------------------------- # +# TODO: on all supported chains + include ./rules.d/lending.d/aave.rules include ./rules.d/lending.d/compound.rules @@ -185,6 +191,8 @@ include ./rules.d/lending.d/compound.rules # Staking # # ---------------------------------------------------------------------------- # +# TODO: on all supported chains + include ./rules.d/staking.d/lido.rules include ./rules.d/staking.d/rocket-pool.rules diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/arbitrum/coinbase-wallet-arbitrum.rules b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/arbitrum/coinbase-wallet-arbitrum.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/arbitrum/coinbase-wallet-arbitrum.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/arbitrum/preprocess b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/arbitrum/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/arbitrum/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/base/coinbase-wallet-base.rules b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/base/coinbase-wallet-base.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/base/coinbase-wallet-base.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/base/preprocess b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/base/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/base/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/optimism/coinbase-wallet-optimism.rules b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/optimism/coinbase-wallet-optimism.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/optimism/coinbase-wallet-optimism.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/optimism/preprocess b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/optimism/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/optimism/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/polygon/coinbase-wallet-polygon.rules b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/polygon/coinbase-wallet-polygon.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/polygon/coinbase-wallet-polygon.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/polygon/preprocess b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/polygon/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/coinbase-wallet/template/coinbase-wallet/polygon/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/arbitrum/ledger-arbitrum.rules b/container/src/hledger-flow/accounts/ledger/template/ledger/arbitrum/ledger-arbitrum.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/arbitrum/ledger-arbitrum.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/arbitrum/preprocess b/container/src/hledger-flow/accounts/ledger/template/ledger/arbitrum/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/arbitrum/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/base/ledger-base.rules b/container/src/hledger-flow/accounts/ledger/template/ledger/base/ledger-base.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/base/ledger-base.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/base/preprocess b/container/src/hledger-flow/accounts/ledger/template/ledger/base/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/base/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/optimism/ledger-optimism.rules b/container/src/hledger-flow/accounts/ledger/template/ledger/optimism/ledger-optimism.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/optimism/ledger-optimism.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/optimism/preprocess b/container/src/hledger-flow/accounts/ledger/template/ledger/optimism/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/optimism/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/polygon/ledger-polygon.rules b/container/src/hledger-flow/accounts/ledger/template/ledger/polygon/ledger-polygon.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/polygon/ledger-polygon.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/ledger/template/ledger/polygon/preprocess b/container/src/hledger-flow/accounts/ledger/template/ledger/polygon/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/ledger/template/ledger/polygon/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/metamask/template/metamask/arbitrum/metamask-arbitrum.rules b/container/src/hledger-flow/accounts/metamask/template/metamask/arbitrum/metamask-arbitrum.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/metamask/template/metamask/arbitrum/metamask-arbitrum.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/metamask/template/metamask/arbitrum/preprocess b/container/src/hledger-flow/accounts/metamask/template/metamask/arbitrum/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/metamask/template/metamask/arbitrum/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/metamask/template/metamask/base/metamask-base.rules b/container/src/hledger-flow/accounts/metamask/template/metamask/base/metamask-base.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/metamask/template/metamask/base/metamask-base.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/metamask/template/metamask/base/preprocess b/container/src/hledger-flow/accounts/metamask/template/metamask/base/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/metamask/template/metamask/base/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file diff --git a/container/src/hledger-flow/accounts/metamask/template/metamask/optimism/metamask-optimism.rules b/container/src/hledger-flow/accounts/metamask/template/metamask/optimism/metamask-optimism.rules new file mode 100644 index 0000000..8f94f87 --- /dev/null +++ b/container/src/hledger-flow/accounts/metamask/template/metamask/optimism/metamask-optimism.rules @@ -0,0 +1,20 @@ +# docker-finance | modern accounting for the power-user +# +# Copyright (C) 2025 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 . + +include ../../ethereum-based-shared.rules + +# vim: sw=2 sts=2 si ai et diff --git a/container/src/hledger-flow/accounts/metamask/template/metamask/optimism/preprocess b/container/src/hledger-flow/accounts/metamask/template/metamask/optimism/preprocess new file mode 120000 index 0000000..0f2fb20 --- /dev/null +++ b/container/src/hledger-flow/accounts/metamask/template/metamask/optimism/preprocess @@ -0,0 +1 @@ +../../ethereum-based-shared.bash \ No newline at end of file