The referendum description can also be found in this document: https://docs.google.com/document/d/1mxCdEUmb05nQXDrh1m_-vV-QapTFHTbvQV6Q0J26MM8/edit?usp=sharing
PCF owns and publishes the Polkadot App under #1082 and #1573.
This referendum enables the last on-chain parameters needed for username registration in the Polkadot App. Approving this referendum also confirms PCF as the operator of the onboarding service.
When a new user joins through the App, they choose a username. Behind the scenes, the onboarding service does two things:
registers the user as a lite person on the People chain;
reserves the user's .dot name on Asset Hub.
A lite person is a light form of personhood on the People chain. In this case iIt shows that an account comes from an app installation the onboarding service has verified and attested, not that it belongs to a unique human. It lets the user claim small fee-free allowances, such as for messaging and app storage, anonymously through a membership ring. On-chain it records only the user's account and a public membership key: no real name, email, or other personal details. The username the user picks is public, as every .dot name is.
Both systems already exist on Polkadot. What is missing today is the allowance and routing setup that lets the onboarding service use them. Until those values are set, new registrations remain pending.
This proposal sets those values and grants three base app names used by the Polkadot App. It does not upgrade any runtime, deploy new code, or request Treasury funding.
| Track | Whitelisted Caller |
| Requires | Fellowship whitelist in Fellowship referendum #639 |
| Enacts at | Relay block 33539498, about 22 October 2026, 09:00 CEST |
| Inner call | 0x90640a174e1d62b5645f31cb053d562e95a63881fd1e0f9197edbbcf83e21fad (547 bytes) |
| Preimage | 0x294b20f9659cfb82c624b9391106bb3533cad0921e595b70389b12ab68e8e54a (549 bytes), noted on Asset Hub |
| Verification release | pcf-refs app-onboarding/v2 |
The referendum contains four existing calls, bundled together and executed with Root through the Whitelisted Caller track.
| Call | Result |
|---|---|
DotnsGateway.increase_attestation_allowance(attester, 1,000,000) on Asset Hub |
Allows the attester to reserve up to 1,000,000 user names through the dotNS gateway. |
DotnsGateway.set_dispatcher_address(0xA06d1CB1e3FedFF7b5dFa779b4Cc61703F8A46A1) on Asset Hub |
Points the gateway to the dotNS PopController from the live dotNS release. |
PeopleLite.increase_attestation_allowance(attester, 1,000,000) on People, sent from Asset Hub |
Allows the attester to register up to 1,000,000 lite people. |
grantNames([getcash, dotns, browse], 0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De) on the dotNS name whitelist |
Grants PCF's names account the right to register getcash.dot, dotns.dot, and browse.dot. The grant itself does not register the names. |
The main parameters are:
| Parameter | Value |
|---|---|
| Attester | 15sDLj4T9NnCtT665koDMxBs1PZw3rzDc6wcz9tN9kKTQ2zj |
| Allowance | 1,000,000 on Asset Hub and 1,000,000 on People |
| Dispatcher | 0xA06d1CB1e3FedFF7b5dFa779b4Cc61703F8A46A1 |
| Names owner | 0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De |
| Names | getcash.dot, dotns.dot, browse.dot |
An allowance is not a transfer of funds. One unit is consumed only when one user is onboarded, and each attestation is visible on-chain.
It only sets the parameters listed above.
There are two important accounts in this proposal: the attester, which handles user onboarding, and the names owner, which holds the three base app names once they are registered.
The attester is:
15sDLj4T9NnCtT665koDMxBs1PZw3rzDc6wcz9tN9kKTQ2zj
It is a pure proxy, so no private key exists for the attester account itself. It was created in Asset Hub extrinsic 21514129-2.
To onboard users, the service signs as the attester with the onboarding service key:
12jrwPAgzi1iTCSxxbdjzmLitdeKB87xh8yeriV2ihWH8vBt
That key is held by the PCF.
If the signing key were compromised, the holder could register lite people and reserve names for accounts of their choice, up to the remaining allowance on each chain. They could also act as the attester account itself, including over its own funds and delegates.
They could not touch user funds, other accounts, the names owner, or the dotNS contracts.
The response path is clear:
clear_attestation_allowance on either chain, through Whitelisted Caller or Root.Lite people already registered would remain registered. Removing them would require a separate governance action.
The names owner is:
0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De
This maps to the Asset Hub account:
13oaSihqaoZ8zprCpbnuqdQqi9zLw99rwkSk3zG2hbzxU3ke
The mapping is on-chain:
Revive.OriginalAccount(0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De) = 13oaSihqaoZ8zprCpbnuqdQqi9zLw99rwkSk3zG2hbzxU3ke
The account is also a pure proxy. It was created by PCF's 4-of-6 multisig in Asset Hub extrinsic 20362133-2, and that multisig is its only delegate.
It has the on-chain identity "PCF" and owns the live dotNS contracts listed in the dotNS v1.0.0-pcf.1 release.
Each new user consumes one allowance unit on each chain:
.dot name.An allowance of 1,000,000 on each chain therefore covers about one million new users.
PCF considered a smaller first tranche, such as 100,000, with later top-ups. The trade-off is that each top-up would require another full governance process. If the allowance runs out while a top-up is pending, new users cannot finish onboarding.
The larger allowance is bounded in several ways:
When the allowance eventually runs low, PCF would request a top-up before onboarding pauses. If the Fellowship or the community prefers a smaller first tranche, PCF is open to that.
The three granted names belong to base apps published for the Polkadot App:
| Name | App |
|---|---|
getcash.dot |
Get CASH |
dotns.dot |
dotNS app |
browse.dot |
Browse app |
dotNS reserves names of five characters or fewer for governance. That is why these names need a governance grant instead of being registered directly.
The app files themselves are stored on the Bulletin chain. PCF pays for that storage without any governance grant.
PCF registers lite personhood for itself with PeopleLite.register_with_fee, a one-off fee of 75 DOT. Each lite person can then claim about 10 MiB of Bulletin storage every 14 days with Resources.claim_long_term_storage. Claims and uploads pay no transaction fees.
Data on Bulletin is kept for 14 days, so each app is stored again every 14 days. The files are the same, so the address the .dot name points to does not change. New releases use the same storage flow.
| App | Lite people | One-off cost |
|---|---|---|
| Get CASH | 1 | 75 DOT |
| dotNS app | 1 | 75 DOT |
| Browse | 1 | 75 DOT |
In total, this is about 225 DOT once for the three apps, with no recurring cost beyond running the re-stores. This assumes each app stays under about 10 MiB.
PCF first discussed this request publicly with the Technical Fellowship on the Polkadot Forum and in the Fellowship open channel.
The first version had five calls. After Fellowship feedback, PCF made three changes:
33525098, about 21 October 2026, 09:00 CEST. The verification release includes the call data, decoded call breakdown, and the reports used to check the proposal.
It covers three types of checks:
CallIsNotWhitelisted, as expected, until the Fellowship whitelist lands. To reproduce the checks:
git clone https://github.com/Polkadot-Community-Foundation/pcf-refs
cd pcf-refs
npm ci
npm test
npm run decode
npm run preflight
npm run dry-run
npm run rehearse
The proposal README explains each call, what each check proves, and how to compare this referendum with Fellowship referendum #639 at the byte level.
The Fellowship raised one important limitation, and PCF agrees that it should be stated clearly.
The dotNS gateway calls the dispatcher with Root origin. The dispatcher is an upgradeable contract owned by PCF. If PCF upgraded that contract with an illegitimate version of the source, the new code could call other contracts that trust Root origin, such as the dotNS name whitelist.
That does not give system-level Root access. It cannot upgrade the runtime, spend from other accounts, or act as Root over XCM. Still, it is a real trust assumption until the next fix lands.
The necessary changes have already been notified to both parity and the fellowship such that a future runtime version can own the contracts in this referendum:
Until the improvements are enacted, any upgrade would also be a public on-chain event. If the community wants a stronger interim guarantee, PCF can place dotNS ownership behind a public time delay that a referendum can veto.
Everything this referendum changes can be reversed by governance.
| Change | How governance can undo it |
|---|---|
| Attestation allowances | Call clear_attestation_allowance on the relevant chain. |
| Dispatcher address | Call set_dispatcher_address with a different address. |
| Name grants | Call revokeName, as long as the name has not yet been registered. |
Once a name is registered, it can no longer be revoked this way. dotNS names do not expire, so a registered name stays with its owner unless the owner transfers it. If governance later prefers a different holder for any of the three names, PCF will transfer it.
The referendum description can also be found in this document: https://docs.google.com/document/d/1mxCdEUmb05nQXDrh1m_-vV-QapTFHTbvQV6Q0J26MM8/edit?usp=sharing
PCF owns and publishes the Polkadot App under #1082 and #1573.
This referendum enables the last on-chain parameters needed for username registration in the Polkadot App. Approving this referendum also confirms PCF as the operator of the onboarding service.
When a new user joins through the App, they choose a username. Behind the scenes, the onboarding service does two things:
registers the user as a lite person on the People chain;
reserves the user's .dot name on Asset Hub.
A lite person is a light form of personhood on the People chain. In this case iIt shows that an account comes from an app installation the onboarding service has verified and attested, not that it belongs to a unique human. It lets the user claim small fee-free allowances, such as for messaging and app storage, anonymously through a membership ring. On-chain it records only the user's account and a public membership key: no real name, email, or other personal details. The username the user picks is public, as every .dot name is.
Both systems already exist on Polkadot. What is missing today is the allowance and routing setup that lets the onboarding service use them. Until those values are set, new registrations remain pending.
This proposal sets those values and grants three base app names used by the Polkadot App. It does not upgrade any runtime, deploy new code, or request Treasury funding.
| Track | Whitelisted Caller |
| Requires | Fellowship whitelist in Fellowship referendum #639 |
| Enacts at | Relay block 33539498, about 22 October 2026, 09:00 CEST |
| Inner call | 0x90640a174e1d62b5645f31cb053d562e95a63881fd1e0f9197edbbcf83e21fad (547 bytes) |
| Preimage | 0x294b20f9659cfb82c624b9391106bb3533cad0921e595b70389b12ab68e8e54a (549 bytes), noted on Asset Hub |
| Verification release | pcf-refs app-onboarding/v2 |
The referendum contains four existing calls, bundled together and executed with Root through the Whitelisted Caller track.
| Call | Result |
|---|---|
DotnsGateway.increase_attestation_allowance(attester, 1,000,000) on Asset Hub |
Allows the attester to reserve up to 1,000,000 user names through the dotNS gateway. |
DotnsGateway.set_dispatcher_address(0xA06d1CB1e3FedFF7b5dFa779b4Cc61703F8A46A1) on Asset Hub |
Points the gateway to the dotNS PopController from the live dotNS release. |
PeopleLite.increase_attestation_allowance(attester, 1,000,000) on People, sent from Asset Hub |
Allows the attester to register up to 1,000,000 lite people. |
grantNames([getcash, dotns, browse], 0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De) on the dotNS name whitelist |
Grants PCF's names account the right to register getcash.dot, dotns.dot, and browse.dot. The grant itself does not register the names. |
The main parameters are:
| Parameter | Value |
|---|---|
| Attester | 15sDLj4T9NnCtT665koDMxBs1PZw3rzDc6wcz9tN9kKTQ2zj |
| Allowance | 1,000,000 on Asset Hub and 1,000,000 on People |
| Dispatcher | 0xA06d1CB1e3FedFF7b5dFa779b4Cc61703F8A46A1 |
| Names owner | 0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De |
| Names | getcash.dot, dotns.dot, browse.dot |
An allowance is not a transfer of funds. One unit is consumed only when one user is onboarded, and each attestation is visible on-chain.
It only sets the parameters listed above.
There are two important accounts in this proposal: the attester, which handles user onboarding, and the names owner, which holds the three base app names once they are registered.
The attester is:
15sDLj4T9NnCtT665koDMxBs1PZw3rzDc6wcz9tN9kKTQ2zj
It is a pure proxy, so no private key exists for the attester account itself. It was created in Asset Hub extrinsic 21514129-2.
To onboard users, the service signs as the attester with the onboarding service key:
12jrwPAgzi1iTCSxxbdjzmLitdeKB87xh8yeriV2ihWH8vBt
That key is held by the PCF.
If the signing key were compromised, the holder could register lite people and reserve names for accounts of their choice, up to the remaining allowance on each chain. They could also act as the attester account itself, including over its own funds and delegates.
They could not touch user funds, other accounts, the names owner, or the dotNS contracts.
The response path is clear:
clear_attestation_allowance on either chain, through Whitelisted Caller or Root.Lite people already registered would remain registered. Removing them would require a separate governance action.
The names owner is:
0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De
This maps to the Asset Hub account:
13oaSihqaoZ8zprCpbnuqdQqi9zLw99rwkSk3zG2hbzxU3ke
The mapping is on-chain:
Revive.OriginalAccount(0xA5C4c241985D77A0296a0FB83E0FA5905e9E39De) = 13oaSihqaoZ8zprCpbnuqdQqi9zLw99rwkSk3zG2hbzxU3ke
The account is also a pure proxy. It was created by PCF's 4-of-6 multisig in Asset Hub extrinsic 20362133-2, and that multisig is its only delegate.
It has the on-chain identity "PCF" and owns the live dotNS contracts listed in the dotNS v1.0.0-pcf.1 release.
Each new user consumes one allowance unit on each chain:
.dot name.An allowance of 1,000,000 on each chain therefore covers about one million new users.
PCF considered a smaller first tranche, such as 100,000, with later top-ups. The trade-off is that each top-up would require another full governance process. If the allowance runs out while a top-up is pending, new users cannot finish onboarding.
The larger allowance is bounded in several ways:
When the allowance eventually runs low, PCF would request a top-up before onboarding pauses. If the Fellowship or the community prefers a smaller first tranche, PCF is open to that.
The three granted names belong to base apps published for the Polkadot App:
| Name | App |
|---|---|
getcash.dot |
Get CASH |
dotns.dot |
dotNS app |
browse.dot |
Browse app |
dotNS reserves names of five characters or fewer for governance. That is why these names need a governance grant instead of being registered directly.
The app files themselves are stored on the Bulletin chain. PCF pays for that storage without any governance grant.
PCF registers lite personhood for itself with PeopleLite.register_with_fee, a one-off fee of 75 DOT. Each lite person can then claim about 10 MiB of Bulletin storage every 14 days with Resources.claim_long_term_storage. Claims and uploads pay no transaction fees.
Data on Bulletin is kept for 14 days, so each app is stored again every 14 days. The files are the same, so the address the .dot name points to does not change. New releases use the same storage flow.
| App | Lite people | One-off cost |
|---|---|---|
| Get CASH | 1 | 75 DOT |
| dotNS app | 1 | 75 DOT |
| Browse | 1 | 75 DOT |
In total, this is about 225 DOT once for the three apps, with no recurring cost beyond running the re-stores. This assumes each app stays under about 10 MiB.
PCF first discussed this request publicly with the Technical Fellowship on the Polkadot Forum and in the Fellowship open channel.
The first version had five calls. After Fellowship feedback, PCF made three changes:
33525098, about 21 October 2026, 09:00 CEST. The verification release includes the call data, decoded call breakdown, and the reports used to check the proposal.
It covers three types of checks:
CallIsNotWhitelisted, as expected, until the Fellowship whitelist lands. To reproduce the checks:
git clone https://github.com/Polkadot-Community-Foundation/pcf-refs
cd pcf-refs
npm ci
npm test
npm run decode
npm run preflight
npm run dry-run
npm run rehearse
The proposal README explains each call, what each check proves, and how to compare this referendum with Fellowship referendum #639 at the byte level.
The Fellowship raised one important limitation, and PCF agrees that it should be stated clearly.
The dotNS gateway calls the dispatcher with Root origin. The dispatcher is an upgradeable contract owned by PCF. If PCF upgraded that contract with an illegitimate version of the source, the new code could call other contracts that trust Root origin, such as the dotNS name whitelist.
That does not give system-level Root access. It cannot upgrade the runtime, spend from other accounts, or act as Root over XCM. Still, it is a real trust assumption until the next fix lands.
The necessary changes have already been notified to both parity and the fellowship such that a future runtime version can own the contracts in this referendum:
Until the improvements are enacted, any upgrade would also be a public on-chain event. If the community wants a stronger interim guarantee, PCF can place dotNS ownership behind a public time delay that a referendum can veto.
Everything this referendum changes can be reversed by governance.
| Change | How governance can undo it |
|---|---|
| Attestation allowances | Call clear_attestation_allowance on the relevant chain. |
| Dispatcher address | Call set_dispatcher_address with a different address. |
| Name grants | Call revokeName, as long as the name has not yet been registered. |
Once a name is registered, it can no longer be revoked this way. dotNS names do not expire, so a registered name stays with its owner unless the owner transfers it. If governance later prefers a different holder for any of the three names, PCF will transfer it.