Component
Proof of Personhood
Priority
P0
Summary
DotnsPopController has to recognise a Substrate Root dispatch as an authority to allow governance updates through specific tracks. The only Root check in earlier pallet-revive releases is callerIsRoot, which answers solely for the contract that is the direct callee of the dispatch. The controller is a UUPS proxy, so its implementation executes inside the proxy's delegatecall frame and cannot ask the precompile from its own frame, which is the entire reason RootGatewayDispatcher exists.
originIsRoot (paritytech/polkadot-sdk#12281) returns true whenever the top-level dispatch was Root, regardless of how many contract or delegatecall frames separate the precompile from it. That lets the controller check Root authority directly, and it is the same mechanism any future governance-gated entrypoint would use.
The method is only useful once it exists on the chain dotNS runs on, which means it has to travel a chain of hops in more than one repository. This issue tracks that, so the state is visible in one place rather than spread across pull requests.
Proposal
Follow the method through each hop:
Two dotNS issues depend on the last hop and should not be completed before it:
Acceptance criteria
Component
Proof of Personhood
Priority
P0
Summary
DotnsPopControllerhas to recognise a Substrate Root dispatch as an authority to allow governance updates through specific tracks. The only Root check in earlier pallet-revive releases iscallerIsRoot, which answers solely for the contract that is the direct callee of the dispatch. The controller is a UUPS proxy, so its implementation executes inside the proxy's delegatecall frame and cannot ask the precompile from its own frame, which is the entire reasonRootGatewayDispatcherexists.originIsRoot(paritytech/polkadot-sdk#12281) returns true whenever the top-level dispatch was Root, regardless of how many contract or delegatecall frames separate the precompile from it. That lets the controller check Root authority directly, and it is the same mechanism any future governance-gated entrypoint would use.The method is only useful once it exists on the chain dotNS runs on, which means it has to travel a chain of hops in more than one repository. This issue tracks that, so the state is visible in one place rather than spread across pull requests.
Proposal
Follow the method through each hop:
master: [pallet-revive] ImplementoriginIsRootprecompile method polkadot-sdk#12281unstable2604: [unstable2604 Backport #12281] [pallet-revive] ImplementoriginIsRootprecompile method polkadot-sdk#12923stable2606: [stable2606 Backport #12281] [pallet-revive] ImplementoriginIsRootprecompile method polkadot-sdk#12959unstable2604: published aspallet-revive 0.18.1.stable2606: published aspallet-revive 0.19.1.pallet-revive 0.19.1is ready for reviewTwo dotNS issues depend on the last hop and should not be completed before it:
RootGatewayDispatcherand have the controller verify Root from its own proxy frame._authorizeUpgradegated onoriginIsRoot()holds through the UUPS delegatecall frame wherecallerIsRoot()does not.Acceptance criteria
originIsRootis callable on the chain dotNS deploys to, verified against a live node rather than inferred from a release note.