Repository navigation
fix(cli): remove broken non-proxy dinrep deploy, fix add-slasher crash; refresh contract docs (#203) - #204
Conversation
…ash (InfiniteZeroFoundation#203) The three `dinrep deploy` commands called constructors on contracts that are proxy-only: din-validator-stake and din-model-registry passed arguments to constructors that take none, and din-coordinator deployed an implementation that can never be initialised. Platform deployment goes through foundry/script/DeployPlatform.s.sol and `dincli system import-deployments`. `dinrep add-slasher` with none of --contract / --taskCoordinator / --taskAuditor raised UnboundLocalError. It now exits 1 with a usage message, and loads DinCoordinator only after the target is resolved. Also fixes the add-slasher and registry help texts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…egistry (InfiniteZeroFoundation#203) The shims existed for dincli's `set-dao-admin`, which PR No. 183 removed. Nothing in dincli, the tests or the hardhat scripts calls them, and the foundry contract has no such functions. The hardhat docs now describe the contract without them and mark hardhat as the secondary toolchain. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…h foundry/src (InfiniteZeroFoundation#203) Contract docs (DinCoordinator, DinToken, DinValidatorStake, DINTaskCoordinator, DINTaskAuditor, DINShared) rewritten against the current source: - DinCoordinator: withdraw() is gone; documents sweepFeesToRouter, mintEmission, the mint cap and faucet retirement. - DinValidatorStake: partial slashing with S5 escalation, S6, jailing, 50% burn / 50% treasury, per-model floors and registration caps. - DINTaskCoordinator / DINTaskAuditor: reward pools and claims, dispute flows and the dispute seed, treasury forwarding via slashTreasury(), GIStateChanged, alongside the batch-assignment seed lock (PR No. 191) and T1/T2 commit-reveal (PR No. 197). - DINShared: slashTreasury() on IDinValidatorStake, the dispute-seed errors and the 12 T1/T2 commit-reveal errors. Also: - staking-mechanism.md and storage_layout.md (ERC-7201 namespaced bases). - dincli-testing-guide.md: Foundry is the default toolchain. - roles/dinrep.md: deployment via DeployPlatform.s.sol and import-deployments for local anvil and Optimism Sepolia, replacing the removed `dinrep deploy` commands. - Decision record, backlog and roadmap references updated. Open caveats recorded, not fixed: DINTaskCoordinator is 24,585 bytes at runtime, over the EIP-170 limit, and committed-but-unrevealed is slashed as a liveness miss (issue No. 201); the dincli auditor commit retry and aggregate-t2 batch id bugs (issue No. 202). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Foundation#203) setDAOAdmin() was its only emitter and went with the shims. The hardhat docs no longer say the declaration remains. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- DinValidatorStake.md, staking-mechanism.md: every mention of the 50/50 slash split now says the treasury half is also burned when no treasury is set. - ROADMAP P4-IDX2: refer to list_pending_requests by name, not by a line range that shifts. - dincli-native-proxy-deployment.md: "Interim state" describes the Foundry flow (DeployPlatform.s.sol, then import-deployments) as the current one, with the Hardhat script as the secondary path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Issue No. 203 review amendmentsApplied the amendments from the approval review. Three were already met by the first push (
On amendment 4: no slot number changed for any contract, and to Re-run after these commits: |
Deep verification — PR No. 204 (issue No. 203)Reviewed against dincliClaimed: Verified, holds:
hardhatClaimed: Verified, holds: the grep over Docs: every contract claim checked against
|
Files changed (23), as of
|
| Field | Value |
|---|---|
| Change | Modified |
| Lines | +14/-146 |
| Diff (what exactly is in this PR) | Deletes deploy_app and its three commands (din-coordinator, din-validator-stake, din-model-registry) and the time / load_din_info / save_din_info imports. add_slasher gains an else: that prints "No slasher contract given" and exits 1, and the get_deployed_din_coordinator_contract() call moves below target resolution. The add-slasher and registry help strings are rewritten. |
| Functionality — how & why | How: dinrep now registers only the registry and coordinator sub-apps plus add-slasher. In add_slasher, --contract / --taskCoordinator / --taskAuditor resolve contract_address. With none of them it exits 1 before any contract load or tx. Otherwise it loads DinCoordinator and sends addSlasherContract. Why: the three deploy commands send constructors that don't exist on the proxy-era contracts. Two are rejected by web3. din-coordinator "succeeds", then overwrites din_info.json with an uninitialisable implementation and a zero token address. add-slasher with no flag hit UnboundLocalError at :243. |
Diff vs current develop HEAD |
None: untouched on develop since the merge-base |
| Recommended merge proposal | Merge as-is. Verified: break-then-fix (2 of the 3 new tests fail on develop's file, 3/3 pass on the PR's), real CLI under an isolated HOME (No such command 'deploy', exit 2), full pytest 385 passed. Optional No. 1 from the verification comment: check the flags before get_en_w3_account_console(), so an encrypted-wallet user isn't asked for a password before the usage error. |
| Actual merge proposal | Applied the PR diff plus the No. 1 fix: the no-target check now runs before get_en_w3_account_console() (message via ctx.obj.console, exit 1), so an encrypted-wallet user gets the usage error with no password prompt. The PR's else: branch became unreachable and was removed; DinCoordinator still loads only after target resolution. Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | account_loads == 0 assertion in tests/test_dinrep_add_slasher.py |
| Local merge conflict | No |
| GitHub merge conflict | No |
tests/test_dinrep_add_slasher.py
| Field | Value |
|---|---|
| Change | New |
| Lines | +81/-0 |
| Diff (what exactly is in this PR) | 3 tests with a DummyContextObj that counts coordinator loads and a monkeypatched build_and_send_tx: no target → typer.Exit(1), nothing sent, coordinator_loads == 0, message printed; --contract → one addSlasherContract(SLASHER) send; dinrep deploy --help via the real app → No such command. |
| Functionality — how & why | How: calls dinrep.add_slasher directly with explicit keyword arguments, so it runs without Typer's option parsing or a real network, and runs main_app through CliRunner for the sub-app check. Why: pins both fixes (issue amendment 7 in particular: the coordinator must not load in the no-flag case), so a revert of either change fails CI. |
Diff vs current develop HEAD |
None: file doesn't exist on develop |
| Recommended merge proposal | Merge as-is. Break-then-fix confirmed: 2 failed / 1 passed against develop's dinrep.py, 3 passed against the PR's. |
| Actual merge proposal | Copied from the PR, plus (approved) DummyContextObj now counts get_en_w3_account_console() calls: the no-target test asserts account_loads == 0 (fails against the PR's original dinrep.py, so it pins the No. 1 fix) and the --contract test asserts account_loads == 1. 3 passed. Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | None |
| Local merge conflict | No |
| GitHub merge conflict | No |
hardhat/contracts/DINModelRegistry.sol
| Field | Value |
|---|---|
| Change | Modified |
| Lines | +0/-19 |
| Diff (what exactly is in this PR) | Removes daoAdmin(), setDAOAdmin() and the DAOAdminUpdated event. |
| Functionality — how & why | How: admin transfer is now only the inherited transferOwnership, matching the canonical foundry/src/DINModelRegistry.sol, which never had the shims. Why: the shims existed only for dincli's set-dao-admin, which PR No. 183 removed. There are no callers in dincli, tests, hardhat/test, hardhat/scripts or foundry. |
Diff vs current develop HEAD |
None |
| Recommended merge proposal | Merge as-is. npx hardhat compile (30 files) and npx hardhat test: 32 passing. |
| Actual merge proposal | Applied as-is (daoAdmin(), setDAOAdmin(), DAOAdminUpdated removed; git grep finds no remaining callers). Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | None |
| Local merge conflict | No |
| GitHub merge conflict | No |
Contract docs: Documentation/technical/contracts/DinCoordinator.md, DinToken.md, DinValidatorStake.md, DINTaskCoordinator.md, DINTaskAuditor.md, DINShared.md
| Field | Value |
|---|---|
| Change | Modified (×6) |
| Lines | +148/-125, +60/-21, +170/-518, +220/-386, +139/-280, +122/-34 |
| Diff (what exactly is in this PR) | Rewrites all six against foundry/src. DinCoordinator: withdraw() removed; the fee-router sweep, mint cap, faucet retirement and emission minting added. DinToken: burn. DinValidatorStake: 50/50 slash disposition, slashPartial / S5, S6, jail, reactivate, per-model floors, caps, encryption keys. DINTaskCoordinator: restructured, keeps the seed lock and T1/T2 commit-reveal, adds disputes, weights and the state table. DINTaskAuditor: rewards, test-data disputes, S1/S3. DINShared: missing interface methods and errors. |
| Functionality — how & why | How: each doc now follows the actual function bodies: guards, defaults, events, errors, and the deploy-script step numbers. Each ends with a caveats section listing real gaps (EIP-170 overage, selective non-reveal, per-model recidivism, blacklisted S5 revert, unauthenticated test-data dispute resolution, dincli constructor lag, and more). Why: the old docs described removed functions (withdraw), claimed "no burn" and "nothing sets Jailed", and omitted whole mechanisms, so anyone reading them had a wrong model of the contracts. |
Diff vs current develop HEAD |
None |
| Recommended merge proposal | Merge, with verification No. 2 (DINTaskAuditor.md §3.3: S1 bound "1 – 10 000") folded in. Verified by script: 140/140 DINShared.sol errors present, and every identifier resolves in foundry/src apart from the expected exceptions (OpenZeppelin names, test contracts, env keys, removed names in change logs). Verified by reading every body cited; details in the verification comment. No. 6 (dropped scenarios in DinValidatorStake.md) is your call. |
| Actual merge proposal | Applied the PR diff for all six, plus: No. 2 (DINTaskAuditor.md §3.3 S1 bound → "1 – 10 000"); DINTaskAuditor.md §13 No. 1 now notes the zero default bond / repeatability and links issue No. 205; new DINTaskCoordinator.md §10 No. 11 for the missing onlyCurrentGI on registerDINaggregator, linking issue No. 206; No. 6 (approved): new DinValidatorStake.md §11 "Workflows & Scenarios" restoring onboarding/exit and Scenarios 1–7, updated for the current contract (50/50 burn/treasury split, slashable while blacklisted, per-call MIN_STAKE), plus a new Scenario 8 (S5 escalation, jail, reactivate). Later sections renumbered 12–15 and internal refs updated. Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | DINTaskCoordinator.md §10 caveat for B |
| Local merge conflict | No |
| GitHub merge conflict | No |
Documentation/public/roles/dinrep.md
| Field | Value |
|---|---|
| Change | Modified |
| Lines | +110/-22 |
| Diff (what exactly is in this PR) | Replaces the three dinrep deploy sections with §1a (local anvil, --unlocked) and §1b (Optimism Sepolia, cast wallet import keystore, optional --verify), plus import options. Documents explore-request. Corrects the kill-switch text: task contracts don't read modelDisabled. Rewrites the workflow step 1. |
| Functionality — how & why | How: it documents the real flow, DeployPlatform.s.sol → foundry/deployments/<network>.json → dincli system import-deployments, with the chain-id → file mapping from DeploymentsPath.sol. Why: the public DIN-Representative guide told operators to run commands that cannot deploy the proxied platform. |
Diff vs current develop HEAD |
None |
| Recommended merge proposal | Merge, with verification No. 3 (one sentence plus a link on the tokenomics env keys for §1b, relevant while issue No. 155 is open) and No. 4 ("not gitignored; commit it") folded in. Every flag, path and command was checked against DeploymentsPath.sol, foundry.toml, .gitignore, .env.example and the Typer signatures. |
| Actual merge proposal | Applied the PR diff plus No. 3 (new §1b "Tokenomics parameters" prerequisite: the 11 env keys DeployPlatform.s.sol reads, their fallback to in-code defaults, where to set them, the --- Effective tokenomics --- check, and a link to DeployPlatform.md; no values stated while issue No. 155 is open) and No. 4 ("roughly 30" → "22 transactions: seven implementations, seven proxies, and eight wiring calls"; "committed" → "not gitignored: commit it"). Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | |
| Local merge conflict | No |
| GitHub merge conflict | No |
Documentation/technical/mechanisms/staking-mechanism.md, Documentation/technical/storage_layout.md, Documentation/technical/testing/dincli-testing-guide.md
| Field | Value |
|---|---|
| Change | Modified (×3) |
| Lines | +31/-22, +20/-45, +35/-18 |
| Diff (what exactly is in this PR) | Staking: state diagram gains Jailed; the behavior table covers S1/S2/S5/S6, full-severity faults and the 50/50 disposition. Storage: one ERC-7201 note, bracket rows collapsed, DinToken.coordinator slot 0 / __gap 1–50. Testing guide: foundry is the default toolchain (Anvil + DeployPlatform.s.sol), plus an EIP-170 warning about anvil.sh's code-size override and the new log names. |
| Functionality — how & why | How / why: each fixes a statement the issue listed as wrong on develop ("no function sets Jailed", "slashed DIN remains inside the contract", OZ bases as sequential slots, "Hardhat-only harness"). |
Diff vs current develop HEAD |
None |
| Recommended merge proposal | Merge as-is. Slot numbers are unchanged apart from DinToken's new ones (forge inspect DinToken storageLayout: coordinator slot 0, __gap slots 1–50, as documented). Testing-guide claims match conftest.py / constants.py. On the amendments-comment question: keep the collapsed bracket rows. |
| Actual merge proposal | Applied as-is (collapsed OZ bracket rows kept in storage_layout.md). Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | None |
| Local merge conflict | No |
| GitHub merge conflict | No |
Hardhat docs: Documentation/technical/contracts/hardhat/README.md, contracts/hardhat/tests/DINModelRegistry.upgrade.test.md, upgradable-contracts/hardhat/README.md, upgradable-contracts/hardhat/test/DINModelRegistry.upgrade.test.md
| Field | Value |
|---|---|
| Change | Modified (×4) |
| Lines | +2/-0, +1/-1, +3/-8, +1/-1 |
| Diff (what exactly is in this PR) | Adds "Secondary toolchain" banners to the two READMEs, and replaces the shim descriptions with "removed" notes (issue amendment 2, both paths). |
| Functionality — how & why | How / why: keeps the hardhat docs consistent with the DINModelRegistry.sol removal, and marks hardhat/contracts/ as lagging foundry/src. |
Diff vs current develop HEAD |
None |
| Recommended merge proposal | Merge as-is. The link check passes. |
| Actual merge proposal | Applied as-is. Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | None |
| Local merge conflict | No |
| GitHub merge conflict | No |
Documentation/technical/upgradable-contracts/proxy-deployment-architecture.md
| Field | Value |
|---|---|
| Change | Modified |
| Lines | +7/-0 |
| Diff (what exactly is in this PR) | Adds a status-update banner above the 2026-07 decision record: Foundry is the reference with seven proxies, hardhat is kept but lagging, the interim flow is DeployPlatform.s.sol + import-deployments, and the constructor-based dinrep deploy is removed. |
| Functionality — how & why | How / why: a decision record should stay as written, so the banner flags which of its context statements are now stale without rewriting the decision. |
Diff vs current develop HEAD |
None |
| Recommended merge proposal | Merge, with verification No. 5 (banner date) folded in. |
| Actual merge proposal | Applied the PR diff plus No. 5: banner dated "Status update (2026-09-30)", the day the dinrep deploy removal lands in develop (adjust at the real merge commit if that lands later). Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | |
| Local merge conflict | No |
| GitHub merge conflict | No |
Developer/issues/dincli-native-proxy-deployment.md, Developer/ROADMAP.md, Developer/BACK_LOG.md, Developer/design/din-architecture.md, Documentation/public/workflows/din-workflow.md
| Field | Value |
|---|---|
| Change | Modified (×5) |
| Lines | +19/-12, +1/-1, +1/-1, +5/-5, +1/-1 |
| Diff (what exactly is in this PR) | Issue doc: "Interim state" now shows the Foundry flow (with Hardhat as the secondary path), and the removed commands become "new" commands (amendment 6). ROADMAP P4-IDX2 names list_pending_requests instead of a line range (amendment 5). BL-26 points at DINTaskCoordinator.md §6.3, the section's new number. Architecture doc: "DIN DAO" → "DIN-DAO" (×5). din-workflow: "a entity" → "an entity". |
| Functionality — how & why | How / why: cross-references that the code and doc changes above would otherwise leave dangling or wrong. The §6.3 anchor exists (DINTaskCoordinator.md:158). |
Diff vs current develop HEAD |
None |
| Recommended merge proposal | Merge as-is. The link check on Developer passes (237 links). |
| Actual merge proposal | Applied as-is. Evidence on the final merged tree: forge clean && forge build (via_ir) clean, forge test 476 passed / 0 failed / 0 skipped; pytest -m "not integration" (empty HOME) 385 passed / 0 failed, 133 deselected; npx hardhat compile && npx hardhat test 32 passing; check_doc_links.py 258 (Documentation) + 237 (Developer) links resolve. No build/test fixes were needed. Uncommitted in the develop cwd: not committed or pushed. |
| Pending proposal | None |
| Local merge conflict | No |
| GitHub merge conflict | No |
Verification
Full details are in the verification comment above. In summary:
pytest -m "not integration": 385 passed.forge build/forge test(via_ir, clean): 476 passed, 0 failed (39 suites), matching the PR's count.npx hardhat compile/test: 32 passing.- Doc link check: 257 (
Documentation) + 237 (Developer) resolve. - Break-then-fix on the new tests.
- All 7 issue-No.-203 amendments met.
Local vs. GitHub agree: both clean, with no conflicts.
Actual outcome: PR No. 204 merged, review follow-ups applied (pushed)This supersedes the predictions in the merge-proposal comment above with what actually landed. Two commits, both on
Files unchanged from the PR (16 of 23)
Files changed by
|
| File | What changed vs. this PR's merged version |
|---|---|
dincli/cli/dinrep.py |
No. 1: the no-target check runs before get_en_w3_account_console(), so the usage error comes without a wallet password prompt. The unreachable else: branch is removed. |
tests/test_dinrep_add_slasher.py |
No. 1: DummyContextObj counts account loads. The no-target test asserts 0, which fails against the original ordering, and the --contract test asserts 1. |
Documentation/technical/contracts/DINTaskAuditor.md |
No. 2: the S1 fraction bound is "1 – 10 000". §13 No. 1 now notes the zero default bond and links issue No. 205. |
Documentation/technical/contracts/DINTaskCoordinator.md |
New §10 No. 11: registerDINaggregator lacks onlyCurrentGI, linking issue No. 206. |
Documentation/technical/contracts/DinValidatorStake.md |
No. 6: new §11 Workflows & Scenarios. Onboarding/exit and Scenarios 1–7 are restored and updated for the current contract, plus a new Scenario 8 (S5 escalation, jail, reactivate). Later sections are renumbered 12–15. |
Documentation/public/roles/dinrep.md |
No. 3: a tokenomics env prerequisite for the Optimism Sepolia deploy, with no values while issue No. 155 is open. No. 4: "22 transactions", and "not gitignored: commit it". |
Documentation/technical/upgradable-contracts/proxy-deployment-architecture.md |
No. 5: banner dated 2026-09-30. |
Why the follow-ups
These aren't develop-drift deviations; nothing moved underneath the branch. They are the review's own findings No. 1–6 (see the verification comment) plus doc pointers to the two contract issues surfaced during review: issue No. 205 (unauthenticated test-data dispute resolution) and issue No. 206 (registerDINaggregator has no onlyCurrentGI). The stale wiki DIN-Representative page is tracked separately in issue No. 207.
Verification
On the pushed tree (00c66e0):
forge clean && forge build(via_ir): clean.forge test: 476 passed / 0 failed / 0 skipped.pytest -m "not integration"(emptyHOME): 385 passed.npx hardhat compile && npx hardhat test: 32 passing.- Doc links: 258 (
Documentation) + 237 (Developer) resolve. - Pre-push local CI mirror: PRECHECK OK on
00c66e0(docs, Python, forge build/test on the real via_ir profile, hardhat compile/test). - GitHub
pushrun: success (run 36737582116).
Local vs. GitHub agree: no conflicts, as predicted.
Summary
Closes #203.
Two dincli fixes, one hardhat cleanup, and the contract docs brought up to date with
foundry/src. No foundry contract, ABI or storage layout changes.dincli (
dincli/cli/dinrep.py)Removed the
dinrep deploysub-app (din-coordinator,din-validator-stake,din-model-registry). All three called constructors on proxy-only contracts:din-validator-stakeanddin-model-registrypassed arguments to constructors that take none;din-coordinatordeployed an implementation that can never be initialised, then wrote a zero token address intodin_info.json.Deployment is
foundry/script/DeployPlatform.s.solfollowed bydincli system import-deployments.dinrep add-slasherno longer crashes without a target. With none of--contract/--taskCoordinator/--taskAuditorit raisedUnboundLocalError. It now prints a usage message and exits 1, and loads DinCoordinator only after the target is resolved.Help text fixes for
add-slasherand theregistrysub-app.New
tests/test_dinrep_add_slasher.py(3 tests): no target exits 1 and sends nothing;--contractsendsaddSlasherContract;dinrep deployis not a command. The first and third fail ondevelop.hardhat
daoAdmin()/setDAOAdmin()shims fromhardhat/contracts/DINModelRegistry.sol. They existed for dincli'sset-dao-admin, which fix(cli): replace dead dinrep fee/admin commands with registry + coordinator sweep-fees #183 removed; nothing calls them.Docs
contracts/DinCoordinator.mdwithdraw()section removed (the function is gone). AddssweepFeesToRouter,mintEmission,setMintCap,retireFaucet,ZeroMintAmount, the deploy-script wiring ordercontracts/DinValidatorStake.mdreactivate, 50% burn / 50% treasury, per-model floors, registration caps, encryption keyscontracts/DINTaskCoordinator.mdGIStateChanged, reward weights, treasury forwarding throughslashTreasury(), a state table with current ordinalscontracts/DINTaskAuditor.mdcreateAuditorsBatches(gi, seed), treasury forwardingcontracts/DINShared.mdslashTreasury()onIDinValidatorStake; the dispute-seed errors and the 12 T1/T2 commit-reveal errors, none of which were listedcontracts/DinToken.mdburn()/TokensBurned, one-shotsetCoordinatormechanisms/staking-mechanism.mdstorage_layout.mdtesting/dincli-testing-guide.mdpublic/roles/dinrep.mdexplore-requestdocumentedDeveloper/notesKnown issues recorded in the docs, not fixed here:
DINTaskCoordinatoris 24,585 bytes at runtime, 9 over EIP-170 (measured on this branch fromout/DINTaskCoordinator.sol/DINTaskCoordinator.json).foundry/anvil.shlifts the limit, so the local devnet doesn't show it.aggregate-t2names its worker job after a T1 batch id.Verification
Run on this branch (
dc8cb77, based ondevelop@e373c8d):pytest -m "not integration" -qforge build&&forge testnpx hardhat compile&&npx hardhat testpython .github/scripts/check_doc_links.py Documentationfoundry/src/DINShared.solappears inDINShared.mdfoundry/srcsrc)git grep -nE "dinrep deploy|setDAOAdmin|daoAdmin\("overdincli tests hardhat Documentationreturns only the notes about the planned native deploy and the change-log lines recording the shim removal.🤖 Generated with Claude Code