Remove AdminSellVault from arena deploy path #314

Closed
opened 2026-06-13 07:34:20 +00:00 by PlasticDigits · 18 comments
PlasticDigits commented 2026-06-13 07:34:20 +00:00 (Migrated from gitlab.com)

Parent

Gap analysis follow-up from #309.

Current codebase

  • AdminSellVault.sol — legacy swap/rescue vault; notifyFunded never called from TimeArena (0% admin on buys #300).
  • TimeArena.initialize still requires non-zero adminSellVault (TimeArena.sol L208–237).
  • Deploy scripts wire AdminSellVault for Anvil/mainnet fixtures.
  • docs/operations/ references admin share history.

Why needed

Approved: Remove AdminSellVault legacy surface; no platform take on buys.

Constraints / guardrails

  • Do not reintroduce admin fee on buy path.
  • Update deploy scripts (DeployDev, Anvil fixtures) and registry JSON.
  • Migration: existing deployments may need initializer/storage cleanup or documented deprecation path.

Relevant files

  • contracts/src/arena/AdminSellVault.sol
  • contracts/src/arena/TimeArena.sol — adminSellVault storage
  • contracts/script/ deploy scripts
  • contracts/test/AdminSellVault.t.sol, DevStackIntegration.t.sol
  • scripts/lib/anvil_deploy_dev.sh, deployment registries
  1. Remove adminSellVault from TimeArena storage/initialize or make optional zero-address.
  2. Delete or archive AdminSellVault.sol if no other consumers.
  3. Update deploy scripts and tests; remove AdminSellVault.t.sol or reduce to historical note.

Acceptance criteria

  • Arena deploy no longer requires AdminSellVault.
  • Buy routing tests still show 0% admin take.
  • Anvil stack scripts deploy without AdminSellVault.

Test plan

  • cd contracts && forge test.
  • bash scripts/verify-evm-dev-wallet-seed-anvil.sh.
  • bash scripts/start-local-anvil-stack.sh --no-frontend smoke.

Attack / abuse test plan

  • Confirm no hidden fee sink remains in buy path.
  • Upgrade safety: existing proxies handle removed immutables via storage gap.

Verification criteria

  • test_buy_routes_doub_split shows zero admin vault balance.
  • DeployDev succeeds on fresh Anvil.
## Parent Gap analysis follow-up from [#309](https://gitlab.com/PlasticDigits/yieldomega/-/issues/309). ## Current codebase - `AdminSellVault.sol` — legacy swap/rescue vault; `notifyFunded` never called from `TimeArena` (0% admin on buys #300). - `TimeArena.initialize` still requires non-zero `adminSellVault` (`TimeArena.sol` L208–237). - Deploy scripts wire `AdminSellVault` for Anvil/mainnet fixtures. - `docs/operations/` references admin share history. ## Why needed Approved: Remove `AdminSellVault` legacy surface; no platform take on buys. ## Constraints / guardrails - Do not reintroduce admin fee on buy path. - Update deploy scripts (`DeployDev`, Anvil fixtures) and registry JSON. - Migration: existing deployments may need initializer/storage cleanup or documented deprecation path. ## Relevant files - `contracts/src/arena/AdminSellVault.sol` - `contracts/src/arena/TimeArena.sol` — `adminSellVault` storage - `contracts/script/` deploy scripts - `contracts/test/AdminSellVault.t.sol`, `DevStackIntegration.t.sol` - `scripts/lib/anvil_deploy_dev.sh`, deployment registries ## Recommended direction 1. Remove `adminSellVault` from `TimeArena` storage/initialize or make optional zero-address. 2. Delete or archive `AdminSellVault.sol` if no other consumers. 3. Update deploy scripts and tests; remove `AdminSellVault.t.sol` or reduce to historical note. ## Acceptance criteria - [ ] Arena deploy no longer requires `AdminSellVault`. - [ ] Buy routing tests still show 0% admin take. - [ ] Anvil stack scripts deploy without AdminSellVault. ## Test plan - `cd contracts && forge test`. - `bash scripts/verify-evm-dev-wallet-seed-anvil.sh`. - `bash scripts/start-local-anvil-stack.sh --no-frontend` smoke. ## Attack / abuse test plan - Confirm no hidden fee sink remains in buy path. - Upgrade safety: existing proxies handle removed immutables via storage gap. ## Verification criteria - `test_buy_routes_doub_split` shows zero admin vault balance. - DeployDev succeeds on fresh Anvil.
PlasticDigits commented 2026-06-13 07:34:43 +00:00 (Migrated from gitlab.com)

mentioned in issue #309

mentioned in issue #309
PlasticDigits commented 2026-06-13 08:15:44 +00:00 (Migrated from gitlab.com)

mentioned in commit 7f6694d84f

mentioned in commit 7f6694d84fa63ce948650821b6d89be8e6f3b71d
PlasticDigits commented 2026-06-13 08:15:58 +00:00 (Migrated from gitlab.com)

mentioned in merge request !464

mentioned in merge request !464
PlasticDigits commented 2026-06-13 09:39:19 +00:00 (Migrated from gitlab.com)

mentioned in commit 868a79120c

mentioned in commit 868a79120ca63a288fcd1fa53af72eede7897295
PlasticDigits commented 2026-06-13 10:01:09 +00:00 (Migrated from gitlab.com)

mentioned in commit 1a7b8ed5d0

mentioned in commit 1a7b8ed5d097c10936c645a219d1b00f7bf44405
PlasticDigits commented 2026-06-13 12:58:34 +00:00 (Migrated from gitlab.com)

mentioned in commit 28fbbba370

mentioned in commit 28fbbba37045376e6af1aac1cc6700db0c483a28
PlasticDigits commented 2026-06-13 12:58:38 +00:00 (Migrated from gitlab.com)

mentioned in merge request !465

mentioned in merge request !465
PlasticDigits commented 2026-06-13 13:32:12 +00:00 (Migrated from gitlab.com)

Verification — issue #314 (Remove AdminSellVault from arena deploy path)

Result: FAIL — primary acceptance criteria are not met on main. Implementation work is still outstanding.

Acceptance criteria

Criterion Result Evidence
Arena deploy no longer requires AdminSellVault FAIL TimeArena.initialize still takes AdminSellVault _adminSellVault and reverts on zero (TimeArena.sol L208–223). DeployDev.s.sol / DeployProduction.s.sol still deploy and wire AdminSellVault. UUPSDeployLib passes it into initialize.
Buy routing tests still show 0% admin take PASS forge test --match-test test_buy_routes_doub_split — assertEq(doub.balanceOf(address(adminVault)), 0); no AdminVaultFunded events. ArenaBuyRouting has no admin sink.
Anvil stack scripts deploy without AdminSellVault FAIL verify-evm-dev-wallet-seed-anvil.sh and start-local-anvil-stack.sh --no-frontend both log/deploy AdminSellVault. contracts/deployments/local-anvil-registry.json includes "AdminSellVault": "0x5FC8…".

Test plan (issue body)

Command Result Notes
cd contracts && forge test PARTIAL 157 passed; 5 DoubAirdropMegaethFork tests fail without gitignored airdrop/doub.csv (known, out of scope).
forge test --match-test test_buy_routes_doub_split PASS Zero admin vault balance on buy.
bash scripts/verify-evm-dev-wallet-seed-anvil.sh PASS DeployDev + seed idempotent; still emits AdminSellVault address (contradicts AC).
bash scripts/start-local-anvil-stack.sh --no-frontend PASS (smoke) Postgres :5433, Anvil :8545, indexer :3100 healthy (curl /v1/status); registry still lists AdminSellVault.
DevStackIntegration.t.sol PASS Includes test_deployDev_wiring_adminVault_points_at_arena — confirms vault still wired.

Attack / abuse (issue body)

Check Result Notes
No hidden fee sink on buy path PASS TimeArena buy path does not call adminSellVault.notifyFunded; only PodiumVaults receive DOUB.
Upgrade safety after removing immutables SKIP Removal not implemented; storage gap / proxy migration not exercised.
  • adminSellVault still required in TimeArena storage/initialize.
  • AdminSellVault.sol and AdminSellVault.t.sol still present.
  • Deploy scripts, registry JSON writers, verify scripts, frontend VITE_ADMIN_SELL_VAULT_ADDRESS, and ops docs still reference the contract.

Follow-ups

  1. agent:implement — remove adminSellVault from TimeArena init/storage (or accept zero address), delete/archive AdminSellVault.sol, update DeployDev / DeployProduction / UUPSDeployLib, registry writers, Anvil scripts, frontend env, indexer registry schema, and tests (DevStackIntegration, AdminSellVault.t.sol).
  2. Document migration path for existing mainnet proxies that already store adminSellVault (storage slot cleanup or deprecated read-only getter).
  3. After implementation, re-run this verify checklist and update invariants that still list AdminSellVault as a mandatory registry key (INV-INDEXER-156, INV-DEPLOY-259-REGISTRY) where appropriate.

Issue left open — criteria not satisfied.

## Verification — issue #314 (Remove AdminSellVault from arena deploy path) **Result: FAIL** — primary acceptance criteria are not met on `main`. Implementation work is still outstanding. ### Acceptance criteria | Criterion | Result | Evidence | |-----------|--------|----------| | Arena deploy no longer requires `AdminSellVault` | **FAIL** | `TimeArena.initialize` still takes `AdminSellVault _adminSellVault` and reverts on zero (`TimeArena.sol` L208–223). `DeployDev.s.sol` / `DeployProduction.s.sol` still deploy and wire `AdminSellVault`. `UUPSDeployLib` passes it into `initialize`. | | Buy routing tests still show 0% admin take | **PASS** | `forge test --match-test test_buy_routes_doub_split` — `assertEq(doub.balanceOf(address(adminVault)), 0)`; no `AdminVaultFunded` events. `ArenaBuyRouting` has no admin sink. | | Anvil stack scripts deploy without `AdminSellVault` | **FAIL** | `verify-evm-dev-wallet-seed-anvil.sh` and `start-local-anvil-stack.sh --no-frontend` both log/deploy `AdminSellVault`. `contracts/deployments/local-anvil-registry.json` includes `"AdminSellVault": "0x5FC8…"`. | ### Test plan (issue body) | Command | Result | Notes | |---------|--------|-------| | `cd contracts && forge test` | **PARTIAL** | 157 passed; 5 `DoubAirdropMegaethFork` tests fail without gitignored `airdrop/doub.csv` (known, out of scope). | | `forge test --match-test test_buy_routes_doub_split` | **PASS** | Zero admin vault balance on buy. | | `bash scripts/verify-evm-dev-wallet-seed-anvil.sh` | **PASS** | DeployDev + seed idempotent; still emits `AdminSellVault` address (contradicts AC). | | `bash scripts/start-local-anvil-stack.sh --no-frontend` | **PASS** (smoke) | Postgres `:5433`, Anvil `:8545`, indexer `:3100` healthy (`curl /v1/status`); registry still lists `AdminSellVault`. | | `DevStackIntegration.t.sol` | **PASS** | Includes `test_deployDev_wiring_adminVault_points_at_arena` — confirms vault still wired. | ### Attack / abuse (issue body) | Check | Result | Notes | |-------|--------|-------| | No hidden fee sink on buy path | **PASS** | `TimeArena` buy path does not call `adminSellVault.notifyFunded`; only `PodiumVaults` receive DOUB. | | Upgrade safety after removing immutables | **SKIP** | Removal not implemented; storage gap / proxy migration not exercised. | ### Recommended direction (not done) - `adminSellVault` still required in `TimeArena` storage/`initialize`. - `AdminSellVault.sol` and `AdminSellVault.t.sol` still present. - Deploy scripts, registry JSON writers, verify scripts, frontend `VITE_ADMIN_SELL_VAULT_ADDRESS`, and ops docs still reference the contract. ### Follow-ups 1. **`agent:implement`** — remove `adminSellVault` from `TimeArena` init/storage (or accept zero address), delete/archive `AdminSellVault.sol`, update `DeployDev` / `DeployProduction` / `UUPSDeployLib`, registry writers, Anvil scripts, frontend env, indexer registry schema, and tests (`DevStackIntegration`, `AdminSellVault.t.sol`). 2. Document migration path for existing mainnet proxies that already store `adminSellVault` (storage slot cleanup or deprecated read-only getter). 3. After implementation, re-run this verify checklist and update invariants that still list `AdminSellVault` as a mandatory registry key (`INV-INDEXER-156`, `INV-DEPLOY-259-REGISTRY`) where appropriate. Issue left **open** — criteria not satisfied.
PlasticDigits commented 2026-06-13 14:12:32 +00:00 (Migrated from gitlab.com)

mentioned in merge request !466

mentioned in merge request !466
PlasticDigits commented 2026-06-13 14:13:32 +00:00 (Migrated from gitlab.com)

mentioned in commit 15e2998f9b

mentioned in commit 15e2998f9bfa213471e487979c64e3cd99856499
PlasticDigits commented 2026-06-14 02:56:28 +00:00 (Migrated from gitlab.com)

Verification — issue #314 (Remove AdminSellVault from arena deploy path)

Result: FAIL — primary acceptance criteria are still not met on main. Implementation work remains outstanding (agent:implement).

Acceptance criteria

Criterion Result Evidence
Arena deploy no longer requires AdminSellVault FAIL TimeArena.initialize still requires non-zero AdminSellVault _adminSellVault (TimeArena.sol L208–223). DeployDev.s.sol / DeployProduction.s.sol still deploy and wire AdminSellVault. UUPSDeployLib passes it into initialize.
Buy routing tests still show 0% admin take PASS forge test --match-test test_buy_routes_doub_split — assertEq(doub.balanceOf(address(adminVault)), 0); no AdminVaultFunded events. ArenaBuyRouting has no admin sink; TimeArena buy path never calls adminSellVault.notifyFunded.
Anvil stack scripts deploy without AdminSellVault FAIL verify-evm-dev-wallet-seed-anvil.sh logs AdminSellVault=0xc3e5…. start-local-anvil-stack.sh --no-frontend smoke PASS (Postgres :5433, Anvil :8545, indexer :3100 healthy) but local-anvil-registry.json still lists AdminSellVault.

Test plan (issue body)

Command Result Notes
cd contracts && forge test PARTIAL 163 passed; 4 DoubAirdropMegaethFork tests fail without gitignored airdrop/doub.csv (known, out of scope).
forge test --match-test test_buy_routes_doub_split PASS Zero admin vault balance on buy.
bash scripts/verify-evm-dev-wallet-seed-anvil.sh PASS (script) / FAIL (AC) DeployDev + seed idempotent; still emits AdminSellVault address.
bash scripts/start-local-anvil-stack.sh --no-frontend PASS (smoke) / FAIL (AC) curl /v1/status healthy; registry still includes AdminSellVault.
forge test --match-contract DevStackIntegration PASS Includes test_deployDev_wiring_adminVault_points_at_arena — confirms vault still wired.

Attack / abuse (issue body)

Check Result Notes
No hidden fee sink on buy path PASS Buy path routes 100% DOUB to PodiumVaults only; adminSellVault storage is unused on buys.
Upgrade safety after removing immutables SKIP Removal not implemented; storage gap / proxy migration not exercised.

Follow-ups

  1. agent:implement — remove adminSellVault from TimeArena init/storage (or accept zero address), delete/archive AdminSellVault.sol, update DeployDev / DeployProduction / UUPSDeployLib, registry writers, Anvil scripts, frontend env (VITE_ADMIN_SELL_VAULT_ADDRESS), indexer registry schema, invariants (INV-INDEXER-156, INV-DEPLOY-259-REGISTRY), and tests (DevStackIntegration, AdminSellVault.t.sol).
  2. Document migration path for existing mainnet proxies that already store adminSellVault.
  3. Re-run verify after implementation.

Issue left open — criteria not satisfied.

## Verification — issue #314 (Remove AdminSellVault from arena deploy path) **Result: FAIL** — primary acceptance criteria are still not met on `main`. Implementation work remains outstanding (`agent:implement`). ### Acceptance criteria | Criterion | Result | Evidence | |-----------|--------|----------| | Arena deploy no longer requires `AdminSellVault` | **FAIL** | `TimeArena.initialize` still requires non-zero `AdminSellVault _adminSellVault` (`TimeArena.sol` L208–223). `DeployDev.s.sol` / `DeployProduction.s.sol` still deploy and wire `AdminSellVault`. `UUPSDeployLib` passes it into `initialize`. | | Buy routing tests still show 0% admin take | **PASS** | `forge test --match-test test_buy_routes_doub_split` — `assertEq(doub.balanceOf(address(adminVault)), 0)`; no `AdminVaultFunded` events. `ArenaBuyRouting` has no admin sink; `TimeArena` buy path never calls `adminSellVault.notifyFunded`. | | Anvil stack scripts deploy without `AdminSellVault` | **FAIL** | `verify-evm-dev-wallet-seed-anvil.sh` logs `AdminSellVault=0xc3e5…`. `start-local-anvil-stack.sh --no-frontend` smoke PASS (Postgres `:5433`, Anvil `:8545`, indexer `:3100` healthy) but `local-anvil-registry.json` still lists `AdminSellVault`. | ### Test plan (issue body) | Command | Result | Notes | |---------|--------|-------| | `cd contracts && forge test` | **PARTIAL** | 163 passed; 4 `DoubAirdropMegaethFork` tests fail without gitignored `airdrop/doub.csv` (known, out of scope). | | `forge test --match-test test_buy_routes_doub_split` | **PASS** | Zero admin vault balance on buy. | | `bash scripts/verify-evm-dev-wallet-seed-anvil.sh` | **PASS** (script) / **FAIL** (AC) | DeployDev + seed idempotent; still emits `AdminSellVault` address. | | `bash scripts/start-local-anvil-stack.sh --no-frontend` | **PASS** (smoke) / **FAIL** (AC) | `curl /v1/status` healthy; registry still includes `AdminSellVault`. | | `forge test --match-contract DevStackIntegration` | **PASS** | Includes `test_deployDev_wiring_adminVault_points_at_arena` — confirms vault still wired. | ### Attack / abuse (issue body) | Check | Result | Notes | |-------|--------|----------| | No hidden fee sink on buy path | **PASS** | Buy path routes 100% DOUB to `PodiumVaults` only; `adminSellVault` storage is unused on buys. | | Upgrade safety after removing immutables | **SKIP** | Removal not implemented; storage gap / proxy migration not exercised. | ### Follow-ups 1. **`agent:implement`** — remove `adminSellVault` from `TimeArena` init/storage (or accept zero address), delete/archive `AdminSellVault.sol`, update `DeployDev` / `DeployProduction` / `UUPSDeployLib`, registry writers, Anvil scripts, frontend env (`VITE_ADMIN_SELL_VAULT_ADDRESS`), indexer registry schema, invariants (`INV-INDEXER-156`, `INV-DEPLOY-259-REGISTRY`), and tests (`DevStackIntegration`, `AdminSellVault.t.sol`). 2. Document migration path for existing mainnet proxies that already store `adminSellVault`. 3. Re-run verify after implementation. Issue left **open** — criteria not satisfied.
PlasticDigits commented 2026-06-14 05:33:23 +00:00 (Migrated from gitlab.com)

mentioned in commit 0388c86b3b

mentioned in commit 0388c86b3b4e7bec991356513de6c04ad168f408
PlasticDigits commented 2026-06-14 05:34:02 +00:00 (Migrated from gitlab.com)

mentioned in merge request !484

mentioned in merge request !484
PlasticDigits commented 2026-06-14 05:42:17 +00:00 (Migrated from gitlab.com)

Verification — issue #314 (Remove AdminSellVault from arena deploy path)

Result: FAIL — primary acceptance criteria are still not met on main. Implementation work remains outstanding (agent:implement).

Acceptance criteria

Criterion Result Evidence
Arena deploy no longer requires AdminSellVault FAIL TimeArena.initialize still requires non-zero AdminSellVault _adminSellVault (TimeArena.sol L208–223). DeployDev.s.sol / DeployProduction.s.sol still deploy and wire AdminSellVault. UUPSDeployLib passes it into initialize.
Buy routing tests still show 0% admin take PASS forge test --match-test test_buy_routes_doub_split — assertEq(doub.balanceOf(address(adminVault)), 0); buy path routes 100% DOUB to PodiumVaults only; TimeArena never calls adminSellVault.notifyFunded on buys.
Anvil stack scripts deploy without AdminSellVault FAIL verify-evm-dev-wallet-seed-anvil.sh logs AdminSellVault=0x5FC8… / 0xc3e5…. start-local-anvil-stack.sh --no-frontend smoke PASS but local-anvil-registry.json still lists "AdminSellVault": "0x5FC8…".

Test plan (issue body)

Command Result Notes
cd contracts && forge test PARTIAL 157 passed; 5 DoubAirdropMegaethFork tests fail without gitignored airdrop/doub.csv (known, out of scope).
forge test --match-test test_buy_routes_doub_split PASS Zero admin vault balance on buy.
bash scripts/verify-evm-dev-wallet-seed-anvil.sh PASS (script) / FAIL (AC) DeployDev + seed idempotent; still emits AdminSellVault address.
bash scripts/start-local-anvil-stack.sh --no-frontend PASS (smoke) / FAIL (AC) Postgres :5433, Anvil :8545, indexer :3100 healthy (curl /v1/status); registry still includes AdminSellVault.
forge test --match-contract DevStackIntegration PASS Includes test_deployDev_wiring_adminVault_points_at_arena — confirms vault still wired.

Attack / abuse (issue body)

Check Result Notes
No hidden fee sink on buy path PASS Buy path routes 100% DOUB to PodiumVaults only; adminSellVault storage is unused on buys.
Upgrade safety after removing immutables SKIP Removal not implemented; storage gap / proxy migration not exercised.

Follow-ups

  1. agent:implement — remove adminSellVault from TimeArena init/storage (or accept zero address), delete/archive AdminSellVault.sol, update DeployDev / DeployProduction / UUPSDeployLib, registry writers, Anvil scripts, frontend env (VITE_ADMIN_SELL_VAULT_ADDRESS), indexer registry schema, invariants (INV-INDEXER-156, INV-DEPLOY-259-REGISTRY), and tests (DevStackIntegration, AdminSellVault.t.sol).
  2. Document migration path for existing mainnet proxies that already store adminSellVault.
  3. Re-run verify after implementation.

Issue left open — criteria not satisfied.

## Verification — issue #314 (Remove AdminSellVault from arena deploy path) **Result: FAIL** — primary acceptance criteria are still not met on `main`. Implementation work remains outstanding (`agent:implement`). ### Acceptance criteria | Criterion | Result | Evidence | |-----------|--------|----------| | Arena deploy no longer requires `AdminSellVault` | **FAIL** | `TimeArena.initialize` still requires non-zero `AdminSellVault _adminSellVault` (`TimeArena.sol` L208–223). `DeployDev.s.sol` / `DeployProduction.s.sol` still deploy and wire `AdminSellVault`. `UUPSDeployLib` passes it into `initialize`. | | Buy routing tests still show 0% admin take | **PASS** | `forge test --match-test test_buy_routes_doub_split` — `assertEq(doub.balanceOf(address(adminVault)), 0)`; buy path routes 100% DOUB to `PodiumVaults` only; `TimeArena` never calls `adminSellVault.notifyFunded` on buys. | | Anvil stack scripts deploy without `AdminSellVault` | **FAIL** | `verify-evm-dev-wallet-seed-anvil.sh` logs `AdminSellVault=0x5FC8…` / `0xc3e5…`. `start-local-anvil-stack.sh --no-frontend` smoke PASS but `local-anvil-registry.json` still lists `"AdminSellVault": "0x5FC8…"`. | ### Test plan (issue body) | Command | Result | Notes | |---------|--------|-------| | `cd contracts && forge test` | **PARTIAL** | 157 passed; 5 `DoubAirdropMegaethFork` tests fail without gitignored `airdrop/doub.csv` (known, out of scope). | | `forge test --match-test test_buy_routes_doub_split` | **PASS** | Zero admin vault balance on buy. | | `bash scripts/verify-evm-dev-wallet-seed-anvil.sh` | **PASS** (script) / **FAIL** (AC) | DeployDev + seed idempotent; still emits `AdminSellVault` address. | | `bash scripts/start-local-anvil-stack.sh --no-frontend` | **PASS** (smoke) / **FAIL** (AC) | Postgres `:5433`, Anvil `:8545`, indexer `:3100` healthy (`curl /v1/status`); registry still includes `AdminSellVault`. | | `forge test --match-contract DevStackIntegration` | **PASS** | Includes `test_deployDev_wiring_adminVault_points_at_arena` — confirms vault still wired. | ### Attack / abuse (issue body) | Check | Result | Notes | |-------|--------|-------| | No hidden fee sink on buy path | **PASS** | Buy path routes 100% DOUB to `PodiumVaults` only; `adminSellVault` storage is unused on buys. | | Upgrade safety after removing immutables | **SKIP** | Removal not implemented; storage gap / proxy migration not exercised. | ### Follow-ups 1. **`agent:implement`** — remove `adminSellVault` from `TimeArena` init/storage (or accept zero address), delete/archive `AdminSellVault.sol`, update `DeployDev` / `DeployProduction` / `UUPSDeployLib`, registry writers, Anvil scripts, frontend env (`VITE_ADMIN_SELL_VAULT_ADDRESS`), indexer registry schema, invariants (`INV-INDEXER-156`, `INV-DEPLOY-259-REGISTRY`), and tests (`DevStackIntegration`, `AdminSellVault.t.sol`). 2. Document migration path for existing mainnet proxies that already store `adminSellVault`. 3. Re-run verify after implementation. Issue left **open** — criteria not satisfied.
PlasticDigits commented 2026-06-14 06:54:17 +00:00 (Migrated from gitlab.com)

mentioned in commit 24dca3ef0b

mentioned in commit 24dca3ef0b06cf7a028fb83bf435282a4e6f722a
PlasticDigits commented 2026-06-14 06:54:19 +00:00 (Migrated from gitlab.com)

mentioned in merge request !485

mentioned in merge request !485
PlasticDigits commented 2026-06-14 13:00:49 +00:00 (Migrated from gitlab.com)

mentioned in merge request !496

mentioned in merge request !496
PlasticDigits commented 2026-06-14 14:11:05 +00:00 (Migrated from gitlab.com)

Verification — issue #314 (Remove AdminSellVault from arena deploy path)

Result: PASS — all acceptance criteria satisfied on main. No repo changes or MR required.

Acceptance criteria

Criterion Result Evidence
Arena deploy no longer requires AdminSellVault PASS TimeArena.initialize has no adminSellVault param; former slot is __reservedAdminSellVault only (TimeArena.sol L70–71, L206–218). AdminSellVault.sol and AdminSellVault.t.sol removed. DeployDev.s.sol / DeployProduction.s.sol / UUPSDeployLib deploy arena stack without admin vault.
Buy routing tests still show 0% admin take PASS forge test --match-test test_buy_routes_doub_split — 100% DOUB to PodiumVaults; assertFalse(sawAdminFunded); no AdminVaultFunded events.
Anvil stack scripts deploy without AdminSellVault PASS verify-evm-dev-wallet-seed-anvil.sh logs TimeArena=… PodiumVaults=… only (no AdminSellVault). start-local-anvil-stack.sh --no-frontend smoke: Postgres :5433, Anvil :8545, indexer :3100 healthy (curl /v1/status); local-anvil-registry.json omits AdminSellVault key.

Test plan (issue body)

Command Result Notes
cd contracts && forge test PARTIAL 203 passed; 4 DoubAirdropMegaethFork tests fail without gitignored airdrop/doub.csv (known, out of scope).
forge test --match-test test_buy_routes_doub_split PASS Zero admin fee events; full DOUB to podium vaults.
bash scripts/verify-evm-dev-wallet-seed-anvil.sh PASS DeployDev + KEY_EVM_1..3 seed idempotent; no admin vault in deploy output.
bash scripts/start-local-anvil-stack.sh --no-frontend PASS Stack healthy; registry JSON has TimeArena, PodiumVaults, ReferralRegistry only.
forge test --match-contract DevStackIntegration PASS 5 wiring tests; test_deployDev_wiring_adminVault_points_at_arena removed (#314).
make check-frontend-env PASS Required VITE_* present; no VITE_ADMIN_SELL_VAULT_ADDRESS.

Attack / abuse (issue body)

Check Result Notes
No hidden fee sink on buy path PASS TimeArena buy path routes 100% DOUB to PodiumVaults; no notifyFunded / admin vault calls.
Upgrade safety after removing immutables PASS Former adminSellVault slot preserved as __reservedAdminSellVault (do-not-repurpose comment).

Verification criteria

Check Result
test_buy_routes_doub_split shows zero admin vault balance / events PASS
DeployDev succeeds on fresh Anvil PASS

Follow-ups

  • contracts/deployments/README.md still lists AdminSellVault as a required registry key — update to match INV-DEPLOY-314 / optional legacy key.
  • Indexer decoder retains AdminVaultFunded handling for historical mainnet logs (zero address in address-registry.megaeth-mainnet.json); fine for backfill, document if operators prune.

Closing — criteria satisfied.

## Verification — issue #314 (Remove AdminSellVault from arena deploy path) **Result: PASS** — all acceptance criteria satisfied on `main`. No repo changes or MR required. ### Acceptance criteria | Criterion | Result | Evidence | |-----------|--------|----------| | Arena deploy no longer requires `AdminSellVault` | **PASS** | `TimeArena.initialize` has no `adminSellVault` param; former slot is `__reservedAdminSellVault` only (`TimeArena.sol` L70–71, L206–218). `AdminSellVault.sol` and `AdminSellVault.t.sol` removed. `DeployDev.s.sol` / `DeployProduction.s.sol` / `UUPSDeployLib` deploy arena stack without admin vault. | | Buy routing tests still show 0% admin take | **PASS** | `forge test --match-test test_buy_routes_doub_split` — 100% DOUB to `PodiumVaults`; `assertFalse(sawAdminFunded)`; no `AdminVaultFunded` events. | | Anvil stack scripts deploy without `AdminSellVault` | **PASS** | `verify-evm-dev-wallet-seed-anvil.sh` logs `TimeArena=… PodiumVaults=…` only (no `AdminSellVault`). `start-local-anvil-stack.sh --no-frontend` smoke: Postgres `:5433`, Anvil `:8545`, indexer `:3100` healthy (`curl /v1/status`); `local-anvil-registry.json` omits `AdminSellVault` key. | ### Test plan (issue body) | Command | Result | Notes | |---------|--------|-------| | `cd contracts && forge test` | **PARTIAL** | 203 passed; 4 `DoubAirdropMegaethFork` tests fail without gitignored `airdrop/doub.csv` (known, out of scope). | | `forge test --match-test test_buy_routes_doub_split` | **PASS** | Zero admin fee events; full DOUB to podium vaults. | | `bash scripts/verify-evm-dev-wallet-seed-anvil.sh` | **PASS** | DeployDev + KEY_EVM_1..3 seed idempotent; no admin vault in deploy output. | | `bash scripts/start-local-anvil-stack.sh --no-frontend` | **PASS** | Stack healthy; registry JSON has `TimeArena`, `PodiumVaults`, `ReferralRegistry` only. | | `forge test --match-contract DevStackIntegration` | **PASS** | 5 wiring tests; `test_deployDev_wiring_adminVault_points_at_arena` removed ([#314](https://gitlab.com/PlasticDigits/yieldomega/-/issues/314)). | | `make check-frontend-env` | **PASS** | Required `VITE_*` present; no `VITE_ADMIN_SELL_VAULT_ADDRESS`. | ### Attack / abuse (issue body) | Check | Result | Notes | |-------|--------|-------| | No hidden fee sink on buy path | **PASS** | `TimeArena` buy path routes 100% DOUB to `PodiumVaults`; no `notifyFunded` / admin vault calls. | | Upgrade safety after removing immutables | **PASS** | Former `adminSellVault` slot preserved as `__reservedAdminSellVault` (do-not-repurpose comment). | ### Verification criteria | Check | Result | |-------|--------| | `test_buy_routes_doub_split` shows zero admin vault balance / events | **PASS** | | DeployDev succeeds on fresh Anvil | **PASS** | ### Follow-ups - `contracts/deployments/README.md` still lists `AdminSellVault` as a required registry key — update to match `INV-DEPLOY-314` / optional legacy key. - Indexer decoder retains `AdminVaultFunded` handling for historical mainnet logs (zero address in `address-registry.megaeth-mainnet.json`); fine for backfill, document if operators prune. Closing — criteria satisfied.
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-06-14 14:11:06 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/yieldomega#314
No description provided.