Argonmine
Audit date ·
Audits are prepared by the site owner with a self-hosted (local) AI, checked against the exact commit above, and hand-edited before publishing. This is not financial, legal, or investment advice. Read it as one person's notes on one commit at one date. Do your own research.
This is a point-in-time review of code quality and tokenomics at the commit above, not a safety certification. Projects can change after this date. Check for newer releases or a newer audit before relying on these scores.
A Go layer-1 with a clean money path and no premine. The label is PROBLEMS FOUND because of a coinbase accounting bug that left about 330 ARG unminted, service keys held in host environment variables, and a bridge vault whose owner is one project wallet that can pause and hand over without a timelock.
🪙 ARGONMINE (ARG) — Code & Tokenomics Audit
Repo: argonchain-source/argonchain at commit 2034424b4e913deb227cf89852d45f775590aac5 (Go node, explorer, bridge, swap service, app)
Date: 2026-11-01 Scope: code review of the money path (subsidy, treasury share, coinbase assembly, vault contract powers, service key custody), tokenomics, live network numbers from explorer.argonmine.com/api/stats and /api/pool/stats fetched 2026-11-01. Tests were read, not executed; decoders and the vault contract not cryptanalytically re-proved.
🎯 Verdict: MIXED (code 7.5 / tokenomics 8.0, band 7.5 = MIXED, raised by the instant override)
Argonmine is a Go layer-1 with a genuinely clean money path: the subsidy is a pure function of height, the treasury share is integer arithmetic inside the block, no coin is minted outside Subsidy(height) + fees, the genesis block pays nobody, and the vault keeps the stablecoin backing separate from its fee surplus. Storage and transport look competent: wallet seeds are Argon2id-deriving a key for XChaCha20-Poly1305, decoders are canonical and fuzz-covered, and 106 test files exist including end-to-end runs with real guardians.
Two things put it here. A coinbase accounting bug ran on mainnet for about 660 browser-mined blocks: the treasury share was taken twice, so the miner got 49.0 instead of 49.5 and 0.5 ARG per block was never minted — about 330 ARG that will not exist. The fix is in this commit, but the explorer still reports the theoretical schedule as supply, so the number a reader sees is about 330 ARG above what actually exists. And the money on the EVM side sits under one project wallet: the vault's onlyOwner can pause the vault and hand the vault to a new owner immediately, with no timelock, while the guardian veto only covers proposals that are already timelocked. A single key backs uARG, and the roadmap states that every change the owner makes waits 7 days while the contract makes pause() and transferOwnership() immediate — that contradiction is the instant override, so the label here is PROBLEMS FOUND, even though the 7.5 score falls in the MIXED band.
🔑 At a glance
| Field | Value |
|---|---|
| Project | Argonmine (ARG) |
| Chain / consensus | Own L1, Argon2id 8 MiB PoW, ASERT, 10-minute blocks |
| Code score | 7.5 / 10 |
| Tokenomics score | 8.0 / 10 |
| Risk score | 7.5 / 10 (the lower of the two) |
| Verdict | MIXED (instant override; the band for 7.5 is MIXED) |
Live numbers (fetched 2026-11-01): height 2,609; displayed supply 130,450.00 ARG; network hashrate 15.06 MH/s; treasury address balance 1,374.99999338 ARG (1,155.00 from the rule over blocks 300-2609, plus 219.99999338 from fee routing); pool 25 blocks found, 873.25763679 ARG paid, 8.83239101 ARG owed, 8.91001861 ARG pool fees, 231 active miners.
🔗 Links & sources
| What | Link | Status |
|---|---|---|
| 🏠 Homepage | https://argonmine.com/ | ✅ fetched |
| 💻 Source | https://github.com/argonchain-source/argonchain at 2034424b | ✅ cloned in this audit |
| 📄 Docs / spec | https://docs.argonmine.com/ and https://docs.argonmine.com/spec | ✅ fetched |
| 🔎 Explorer | https://explorer.argonmine.com/ (data via /api/stats, /api/pool/stats, /api/address/) | ✅ live API read |
| 📣 Announcement | https://docs.argonmine.com/overview (mainnet launched 2026-10-28 12:00 UTC) | ✅ fetched |
| 💬 Socials | X @argonminechain | not opened in this pass |
🧮 Risk score inputs
| # | Finding | file:line | Reachable | Deduction | Applies to |
|---|---|---|---|---|---|
| 1 | Treasury share of the block subsidy is 1%, taken inside every block from height 300, paid to one project-held key with no on-chain spending rule. Rate is below the 3% band used in this corpus (3% → −1, 10% → −2, 75% → −3; 1% placed at −0.5 by inference) | consensus/treasury.go:22, consensus/params.go:125 | live every block | −0.5 | tokenomics |
| 2 | The bridge vault is governed by one project wallet (onlyOwner). pause() and transferOwnership() are immediate — no timelock; the guardian veto only applies to already-timelocked proposals. Mitigations measured: the backing (obligations) can never be swept as surplus, most owner changes carry a 7-day timelock (up to 30 days), releases need a guardian threshold | contracts/Vault.sol:313, 369, 681, docs/BRIDGE.md:160 | live (uARG redemption path) | −1.5 | tokenomics |
| 3 | A coinbase accounting bug ran on mainnet from block 300 for about 660 browser-mined blocks: the treasury share was taken twice, the miner got 49.0 instead of 49.5, and 0.5 ARG per block was never minted — about 330 ARG that will not exist. Fixed at this commit (cmd/argonmine-explorer/work.go:362 refuses a template below the subsidy, miner.AssembleFromTemplate pays the treasury itself), and the incident is recorded in docs/SECURITY-REVIEW.md:58-64. The explorer's supply figure is the theoretical schedule, not the outputs, so the number shown is about 330 ARG above what exists | cmd/argonmine-explorer/work.go:362, cmd/argonmine-explorer/index.go:1181-1195 | live chain state, fixed path | −1.0 | code |
| 4 | Service key custody: the pool wallet and the swap service run from mnemonics read from the host environment (POOL_MNEMONIC, SWAP_MNEMONIC) plus a password variable. These single keys hold miner balances and swap funds on public hosts. User wallets are encrypted at rest, so this is the service side, not the user side | cmd/argonmine-explorer/main.go:222, cmd/argonmine-swap/main.go:89 | live (every payout) | −1.0 | code |
| 5 | No CI in the repo: no workflow file, only deploy/docker-compose.yml. 106 test files, including fuzz targets for every decoder and end-to-end guardian runs, exist but nothing runs them automatically | repo root, deploy/docker-compose.yml, consensus/fuzz_test.go | release path | −0.5 | code |
code deductions, one at a time:
1.0 -> 2.0 -> 2.5
tokenomics deductions, one at a time:
0.5 -> 2.0
code_score = 10 − (1.0 + 1.0 + 0.5) = 7.5
tokenomics_score = 10 − (0.5 + 1.5) = 8.0
risk_score = min(7.5, 8.0) = 7.5
Band check: 7.5 sits in 3.0-7.9, which is MIXED. The verdict is MIXED because an instant override fires: docs/ROADMAP.md:307 states that "Every change the owner makes to a vault waits 7 days", and the contract it describes does not do that. contracts/Vault.sol:36 and :37 list pause and withdrawSurplus as immediate owner actions, :313 is withdrawSurplus under onlyOwner, :369 is pause() open to the owner and every guardian, and :677 and :681 make transferOwnership immediate and not timelocked. The project's own bridge page states the immediate paths (docs/BRIDGE.md:160), so the roadmap line contradicts the code. Scores stay at code 7.5 / tokenomics 8.0 — the contradiction changes the label, not the numbers. The treasury rule is a soft fork by design (a pre-rule node still accepts a block that omits the treasury output) — stated as a fact, not a deduction.
✅ Verified good (code)
Subsidy(height)is a pure function; 64 halvings end at exactly 0 and the shift is never performed with a count >= 64 (consensus/subsidy.go:14).- No block can connect that creates more than
Subsidy + fees;MoneyRangeandAddAmountsrefuse overflow and wrap, with tests (consensus/money_test.go). - The genesis coinbase never enters the UTXO set (
cmd/genesis,cmd/argonmine-explorer/index.go:1181), so the no-premine claim is backed by code, not only by prose. - Decoders accept one canonical encoding per structure and are fuzz-covered with a re-encode property (
consensus/fuzz_test.go); the varint panic is on the write path, documented as a programming-error guard (consensus/encoding.go:45). - Wallet seeds are encrypted with XChaCha20-Poly1305 under an Argon2id key (64 MiB, 3 passes) (
wallet/store.go:18, 123). - Pool accounting is weight-based and public: nothing is paid that a block did not earn, off-chain blocks pay nothing, and the whole ledger is published at
/api/pool/ledger(cmd/argonmine-explorer/pool.go:30-46). - The vault keeps surplus separate from backing, so the owner cannot sweep user redemptions (
contracts/Vault.sol:308-313).
🗺 Roadmap (context, not scored)
Read from docs/ROADMAP.md (page last updated 2026-10-28). Plans are promises, not code, so no
plan moves a score. What the roadmap says about the two scored items:
- Custody: a 2-of-3 Safe on each EVM chain, keys on separate devices, none on a server, vault ownership moved to it — Planned, nothing built. Today the project runs all three guardian keys itself. Moving a guardian key changes the custody key and the uARG asset id.
- External audit of the vault contract, deposit router and guardian daemon: Planned, when funded. No funds raised, so the bridge holds real money with in-house passes only.
- Property tests and fuzzing of the money-moving parts: Planned. Fuzz targets exist in the repo today; nothing runs them automatically.
- Seed nodes: one runs today, at least two more providers planned.
- Releases: archives with
SHA256SUMSdone, code signing planned, source published 2026-10-30, two days after the 2026-10-28 launch. - Buying ARG from the project was built and withdrawn on 2026-10-31, recorded as a presale.
- Later: FROST threshold signing so uARG issuance does not need every guardian.
The only claim the roadmap makes that the contract contradicts is the 7-day rule for every owner
change (docs/ROADMAP.md:307 against contracts/Vault.sol:36, :37, :313, :369, :681). That is what raises this card to
MIXED.
🔍 Open questions (not scored)
- Who holds the treasury key and the vault owner key, and whether the planned 2-of-3 Safe exists yet (roadmap, not code).
- The 1% fee-band value used here is inference from published score→deduction pairs; the rubric skill was not available in this pass.
- Tests read, not executed; the vault contract and the guardian set not re-proved or re-audited externally (
SECURITY.mdstates there is no external audit and no bounty funds yet). - Referral share (5% today, up to 50% by the work-server operator, only for browser miners who accepted an invite) is operator-set economic context, not scored.
- Known gaps the project lists itself: unencrypted unauthenticated P2P transport, no network-adjusted time, mempool does not re-add transactions from reorganised blocks, one seed node at launch (
docs/SECURITY-REVIEW.md).
Files we opened
consensus/treasury.go:22
consensus/params.go:125
contracts/Vault.sol:313
contracts/Vault.sol:369
contracts/Vault.sol:681
cmd/argonmine-explorer/work.go:362
cmd/argonmine-explorer/index.go:1181-1195
cmd/argonmine-explorer/main.go:222
cmd/argonmine-swap/main.go:89
wallet/store.go:18
consensus/fuzz_test.go
docs/SECURITY-REVIEW.md:58-64
docs/BRIDGE.md:160
Every file listed here was opened by us during the audit. Nothing here is a guess.