Skip to content

release-454 - #3143

Merged
UnArbosFive merged 14 commits into
mainfrom
release-454
Sep 4, 2026
Merged

release-454#3143
UnArbosFive merged 14 commits into
mainfrom
release-454

Conversation

@UnArbosFive

@UnArbosFive UnArbosFive commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Runtime release 454.

Included changes

  • Restore contract-proxied stake transfers while preserving the effective proxy-type restrictions.
  • Improve coldkey-wide root claims by selecting root-relevant hotkeys and accounting for actual basket work.
  • Handle minimum-unit claim rounding and clean sub-RAO share residue after full withdrawals.
  • Rerun bounded cleanup for zero-value share rows and stale staking relationships.
  • Align runtime weight accounting, SDK admission and fee estimates, documentation, and regression coverage.

Includes #3140 and #3141.

Runtime

  • spec_version: 454

UnArbosFour and others added 5 commits September 3, 2026 16:06
The proxy origin-filter inheritance fix in release 453 (do_proxy now
propagates the caller's call filter into the proxied call) closed a real
filter-laundering loophole — but it also broke contracts that legitimately
execute transfer_stake through an explicit user proxy delegation.

An escrow contract deployed on this chain performs deposits as:
  call_runtime(Proxy::proxy(real = depositor, TransferStake { .. }))
where the depositor has registered the contract as a proxy beforehand.
Pre-453 the inner TransferStake ran on a freshly authenticated origin and
succeeded; post-453 it must pass ContractCallFilter, which only whitelists
Proxy::proxy, so the inner call fails with CallFiltered inside
ProxyExecuted and every deposit reverts.

Whitelist the single inner call the flow needs. Security posture is
preserved: the transfer still requires the user's explicit proxy
delegation, and the inherited-filter mechanism keeps every other nested
call blocked.
@vercel

vercel Bot commented Sep 4, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
subtensor Ready Ready Preview Sep 4, 2026 5:18pm UTC

Request Review

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🛡️ AI Review — Skeptic (security review)

VERDICT: SAFE

VERY HIGH scrutiny by account-age/public-repo tier, tempered by admin permission and substantial merged subtensor history; no Gittensor association; release-454 -> main.

Reviewed the full 23-file release delta, including root-claim accounting, bounded migrations, share-pool dust handling, and the contract proxy filter. No AI-review trust-boundary files are changed.

Findings

No findings.

Conclusion

No malicious behavior or exploitable security vulnerability was found.


🔍 AI Review — Auditor (domain review)

VERDICT: 👎

UNKNOWN Gittensor association; profile metadata was unavailable, but the author has admin permission and substantial merged subtensor history.

Duplicate work

This release branch includes the contract call-filter fix represented by #3139 via merged PR #3140. This PR is the better candidate. Recommend closing #3139.

The updated PR description now accurately summarizes the release. git diff --check passed and the worktree is clean. No build or test was run because the remaining issue is a static coverage gap.

Findings

Sev File Finding
MEDIUM runtime/src/lib.rs:1416 Add regression coverage for nested proxy filtering inline

Prior-comment reconciliation

  • 47600cdb: not addressed — No test covering the nested contract → proxy → transfer_stake dispatch path was added.

Conclusion

The release description is now adequate, but the contract call-filter change still lacks regression coverage for the exact nested dispatch path it restores. Add that test before merging.


📜 Previous run (superseded)
Sev File Finding Status
MEDIUM runtime/src/lib.rs:1416 Add regression coverage for nested proxy filtering ➡️ Carried forward to current findings
No test covering the nested contract → proxy → transfer_stake dispatch path was added.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🔄 AI review updated — Skeptic: SAFE Auditor: 👍

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review — see the sticky summary comment for the verdict and the inline comments below for specific findings.

Comment thread runtime/src/lib.rs
// previously execute transfer_stake on the user's behalf; allow
// that inner call again. Security is unchanged: the transfer still
// requires the user to have registered the contract as a proxy,
// and the inherited-filter fix keeps every other call blocked.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] Add regression coverage for nested proxy filtering

This behavioral fix has no test proving that a contract-origin Proxy::proxy(transfer_stake) succeeds after inherited filtering while unrelated nested calls remain rejected. Add a runtime-level regression test covering both cases; otherwise this compatibility/security boundary can regress unnoticed.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🔄 AI review updated — Skeptic: SAFE Auditor: 👎

Fix coldkey-wide root claims and stale staking relationships

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review — see the sticky summary comment for the verdict and the inline comments below for specific findings.

Comment thread runtime/src/lib.rs
Comment on lines 1408 to +1416
match call {
RuntimeCall::Proxy(inner) => matches!(inner, pallet_proxy::Call::proxy { .. }),
// Since the proxy origin-filter inheritance fix (release 453), calls
// dispatched *inside* Proxy::proxy must also pass this filter. A
// contract holding an explicit user proxy delegation could
// previously execute transfer_stake on the user's behalf; allow
// that inner call again. Security is unchanged: the transfer still
// requires the user to have registered the contract as a proxy,
// and the inherited-filter fix keeps every other call blocked.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] Add regression coverage for nested proxy filtering

This compatibility fix still lacks a test exercising the complete path: a contract-origin call to Proxy::proxy, inherited ContractCallFilter evaluation of the inner transfer_stake, and rejection of an unrelated inner call. A direct Contains::contains assertion is insufficient because the regression arose from nested origin-filter propagation. Add runtime integration coverage before releasing this exception.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🔄 AI review updated — Skeptic: SAFE Auditor: 👎

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI review — see the sticky summary comment for the verdict and the inline comments below for specific findings.

Comment thread runtime/src/lib.rs
Comment on lines 1409 to +1416
RuntimeCall::Proxy(inner) => matches!(inner, pallet_proxy::Call::proxy { .. }),
// Since the proxy origin-filter inheritance fix (release 453), calls
// dispatched *inside* Proxy::proxy must also pass this filter. A
// contract holding an explicit user proxy delegation could
// previously execute transfer_stake on the user's behalf; allow
// that inner call again. Security is unchanged: the transfer still
// requires the user to have registered the contract as a proxy,
// and the inherited-filter fix keeps every other call blocked.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] Add regression coverage for nested proxy filtering

The release restores a subtle contract → Proxy::proxytransfer_stake path whose behavior depends on inherited origin filters, but no test exercises that composition. Add a runtime integration test proving the nested transfer_stake succeeds with an authorized proxy while another nested Subtensor call remains CallFiltered; testing ContractCallFilter::contains alone would not cover the behavior this change relies on.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

🔄 AI review updated — Skeptic: SAFE Auditor: 👎

@UnArbosFive
UnArbosFive merged commit 14cde64 into main Sep 4, 2026
82 of 87 checks passed
unarbos added a commit that referenced this pull request Sep 4, 2026
Main shipped 454 (#3143), so this release moves to 455. SDK bindings and
generated docs regenerated against the spec-455 node; this also picks up
main's RootClaimTooHeavy wording and shifted source anchors, which was what
the docs drift gate flagged.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants