This is a request for 8 KSM from the Kusama treasury, as a bounty on the Small Tipper track (30). It is an experiment, sized so that the treasury learns something whichever way it goes.
It tries two things at once.
A different way to run a bounty. A Kusama bounty needs a curator, and the curator decides when money is released. Normally that decision rests on the curator's judgement. Here the curator is bound to a published condition that anyone can recompute with a published checker, so the curator's only decision is whether the checker passed. A third party who was never involved can rerun it and dispute the result, and the dispute is settled by recomputation rather than by argument.
A way to bootstrap proof of individuality. The condition is attendance at a live session, witnessed by the other people in the room. The KSM pays for one thing: the on-chain membership that is minted for a person when they join the community. Nobody is paid. Money is released from the approved funds to cover a membership only for an attendee the room can vouch for, and only once per person, however many accounts that person holds. The amounts are small and the witnessing is informal. What it tests is whether treasury money can be settled against a record of recognition between people, which is the settlement half of any personhood system, before the recognition half is cryptographic.
Birdbrain is a community on Kreivo, a Kusama parachain, where membership of a community is an on-chain item. Chaos Sessions are Birdbrain's open weekly video calls, held every Monday. There have been thirty-four. People sign into each call with a passkey, which gives us a sign-in log for every session, and everyone on the call can see who else is there.
Each membership costs about 0.3 KSM on Kreivo. Until now that cost has been paid out of pocket by the people running the community. This bounty would fund it from the treasury, one membership per verified attendee. The KSM goes to the community's own account and is spent on minting memberships. None of it goes to the attendees themselves.
The Small Tipper track can spend at most 8.33333333325 KSM in one referendum. Every figure in this proposal was read from Kusama Asset Hub rather than taken from documentation, and this one was tested a planck either side through the funding call itself: at the ceiling it is accepted, one planck over it is refused. The request is 8 KSM, inside that limit.
It is deliberately small. This is a test of a mechanism, not a funding round. 8 KSM pays for roughly 25 memberships. If the mechanism is wrong, Kusama will have spent the price of a round of drinks finding out, in public.
After each session, the people who signed in are turned into a list of attendees, and the list is turned into a Merkle root. The root is written to Kusama Asset Hub before any payout is made against it. Each leaf binds three things:
leaf = blake2_256( 0x00 ‖ blake2_256(person_id) ‖ account ‖ blake2_256(session_id) )
node = blake2_256( 0x01 ‖ sort(a, b) )
A person's membership is funded if and only if all four of these hold.
The first condition is enforced by the chain, not by us. Each session is funded through its own child bounty, and the session's root is that child bounty's metadata. The chain refuses to create the child unless the root is already stored on chain and readable by anyone, so the award cannot be made without it.
The fourth condition is the one most attendance schemes leave out. Attendance answers was a human in the room. It does not answer is this the same human whose membership has already been funded. The chain cannot answer that either, because it knows accounts, not people: someone who opens a fresh account looks like a newcomer. Without the second question, one person with five accounts is funded five times, and every one of those accounts looks legitimate. So the person is part of the leaf, and the checker refuses to build a root in which one person appears with two accounts, or two people share one account. A duplicate is stopped before a root exists, not discovered after a payout.
The same person turning up the following week is checked too. Before each session's child bounty is created, every person in its root is compared against the people in every session already funded, and anyone found there is dropped. The child bounty is then sized to the people who are left, at the cost of one membership each. The earlier rosters are public and each funded session is a child bounty carrying its root, so anyone can rerun that comparison.
A leaf is only given to someone who signed in with a passkey they control themselves. Some members hold their membership on an account whose key the community's administrator holds on their behalf. Funding a membership on one of those accounts would be funding ourselves, so those people are left out of the root and listed in the roster with the reason.
The case for the fourth condition is our own register. At Kreivo block #38,961,176 the Birdbrain community holds 37 memberships across 36 accounts:
Seven of those fifteen people hold more than one membership. One holds nine, most of them left over from testing the sign-in flow. Nothing in the register itself could have told you which accounts belonged to the same person, because that information was never recorded in it.
Custody splits the fifteen:
Holding an account is not the same as being able to use it. At the most recent session, CS34 on 21 September 2026, two people who were failing to sign in registered fresh passkeys during the call. Each new passkey was minted a membership, one of them twice over, and both people still ended up joining on a guest link with no passkey at all. A failed sign-in added memberships to the register and nobody to the room. That is how a community of fifteen people comes to hold thirty-seven memberships.
So before the first membership is funded, the community is reset. All 37 memberships are burned and the list of what was burned is published. After that, memberships are rebuilt at one per person, for people who turn up and sign in with their own key. The before and after is part of the evidence.
CS33, 14 September 2026. Eight people were in the room and four have leaves. Two held memberships only on administrator-held accounts. Two joined on guest links with no passkey. A ninth sign-in was a second device belonging to someone who already has a leaf, and it is counted once.
CS34, 21 September 2026. Twelve names in the sign-in log, from ten or eleven people, and five have leaves. Two people held memberships only on administrator-held accounts. The two whose sign-in failed came in on guest links, and so did one person who has never registered a passkey. Of the other three guest links, two were second logins by people already counted, and one we cannot place from the log.
Four or five eligible people a session is the honest rate today, out of the eight to eleven who come. Moving people onto accounts they control, and fixing sign-in so that a failure does not leave them stranded, is our work and is not funded by this bounty. How many people the mechanism can admit week to week is one of the things the experiment measures.
The checker and every anchored roster are public at https://github.com/Birdbrain-wtf/attendance-checker, alongside Birdbrain's identity layer, Seeds.
The published rosters name nobody. Each attendee is given as the hash blake2_256(person_id), which is exactly what the leaf contains, so a roster with no names rebuilds the same root. This is pseudonymity rather than anonymity: the identifiers are short, and someone who guesses one can confirm it. The accounts are public on chain regardless.
One root is on chain so far. It was anchored before this bounty was proposed, which matters, because a root published after a payout could have been chosen to fit it.
| session | CS33, 14 September 2026 |
| root | 0xcc04a401c1900bc950f297d83025a930fb3a6250b5b115d9bddb8007c4d686a0 |
| remark | birdbrain/attendance/v2:CS33:0xcc04a401… |
| block | Kusama Asset Hub #21,513,860 |
| extrinsic | 0x0a04550ef4ec44a2d067553b6dcba3aa1a415ae4607cb975efbf59ed298680dd |
| cost | 0.0000767 KSM |
To rebuild it and compare it with the chain:
bun install
bun run attendance-root.ts self-test
bun run attendance-root.ts build rosters/CS33.json
bun run verify-chain.ts rosters/CS33.json
The last command reads the anchoring transaction off Kusama Asset Hub, decodes it, and compares it with the root rebuilt from the published roster. It signs nothing and needs no keys.
CS34's root is built but not yet anchored. It will be anchored before any award is made against it, and published at the same time.
This is falsifiable, not trustless. The list linking each person to their account comes from the session's own sign-in log, and everyone who was in the room can see it and challenge it. That is a real cost to anyone trying to fake attendance, and a cheap one to contest. It is not a cryptographic guarantee, and calling it one would be dishonest.
The planned sequence is:
pallet-people, from Parity's Individuality work, takes over the person slot once it is available. Nothing else in the award condition changes when it does.That last step is why we think this is worth Kusama's money rather than only ours. Individuality builds personhood out of a recurring game of people recognising each other. Chaos Sessions are a recurring game of people recognising each other, now on their thirty-fourth round. This bounty tests what it looks like to release treasury money against that recognition, and it is built so the recognition can be swapped for a better one without touching the rest.
The referendum is submitted by DJe2JJvcMNjxjkhi3UsoNZwSaYnHQqQB7AAavEAz1wDrJGh, the Birdbrain community's operator account, registered on the Kusama People Chain under the name Birdbrain (not yet verified by a registrar). The same account is named as curator.
We would rather say that plainly than bury it. Three things limit what the curator can do:
The curator key is an online one rather than a cold one, because the same account signs members into the community. The worst a compromise of it could do is make an award early. It could not send money anywhere other than the fixed beneficiary.
The intended end state is for the community's own account to hold the curator role, so that a vote inside the community makes each award and no individual does. That needs Kreivo to act on Asset Hub through a cross-chain message, which we have not yet rehearsed.
The beneficiary is DfjYNoRLGy2q6PoMVQydCe6tUdAhgSZ7VULVmec28vvrimB, the Birdbrain community's own account on Kusama Asset Hub. It is derived by Kreivo from the community's identity, Parachain(2281) + Plurality(Index 1786, Voice).
No key controls that account. It can only be spent by a referendum inside the Birdbrain community. Treasury money does not pass through a personal account at any point.
From there, the KSM has to move to Kreivo, where memberships are paid for. The bounty pallet cannot send it there directly: Kusama Asset Hub pays bounty awards only to local accounts, and refuses every other destination, on the live chain as in testing. So the onward transfer is ours to run. Both halves of it already dry-run cleanly against live Asset Hub, including the message as Kreivo actually sends it. Nothing on that path has been broadcast yet, and nothing needs to be until the bounty is funded.
The parent bounty is carved into one child bounty per session, each awarded only after the checker passes against that session's root. Every cohort leaves its own trace on chain, and a session that fails the checker simply gets no child bounty.
A treasury spend pays a fixed amount to a fixed recipient on a fixed schedule. There is nowhere in it for a condition to live, so the mechanism proposed here could not be tested through one. The curator role is the only place in Kusama's treasury machinery that can hold a spending condition, and binding that role to a published check is the proposal.
The treasury's exposure is 8 KSM. Ours is about 0.25 KSM in deposits to get the bounty funded and active, plus about 0.045 KSM per session, all of it refundable:
| KSM | returned when | |
|---|---|---|
| referendum submission deposit | 0.0333 | the referendum concludes |
| decision deposit | 0.0333 | the referendum concludes |
| title preimage | ~0.019 | the preimage is removed |
| curator deposit | 0.1667 | the bounty closes |
| each session's root preimage | ~0.045 | the preimage is removed |
This bounty uses the newer multi-asset bounties pallet, which has no proposal step and so no proposer bond. If the referendum fails, nothing is forfeited to the treasury.
The whole sequence, from funding through to a settled payout, has been run in two ways. A read-only rehearsal walks every step against the live chain, twelve steps, no keys, nothing signed, and anyone can rerun it. At one planck over the Small Tipper ceiling it is refused, which is the control. The same sequence has also been run end to end on a copy of Kusama Asset Hub, signing with the operator account and the balance it really holds, from funding to a 2.5 KSM payout into the community account. Every deposit in this proposal has therefore been paid once already, from the money that would pay it for real.
The pallet also needs a nudge that the chain does not send by itself. A bounty and each of its children move to their next state only when someone calls checkStatus, and a curator who does not know this finds out when a payment sits unfinished for weeks. Our award command sends those calls as part of the award, and a daily job looks for anything left mid-payment and clears it.
Nothing in the award condition is specific to Birdbrain, to memberships, or to video calls. It is an anchored root, a check that each person is funded once, a published checker, and a curator bound to it. Any bounty that funds something per verified person doing a verifiable thing can take the same shape: conference attendance, translation, moderation shifts, bug triage.
If it works, the curator stops being an allocator of funds and becomes a verifier of a public record. If it does not, it fails in public, for 8 KSM.
Birdbrain is a community on Kreivo, a Kusama blockchain. It is asking Kusama's treasury for 8 KSM to pay for community memberships. Birdbrain holds open video calls every Monday called Chaos Sessions. People who show up can join the community on-chain.
This is a request for 8 KSM from the Kusama treasury, as a bounty on the Small Tipper track (30). It is an experiment, sized so that the treasury learns something whichever way it goes.
It tries two things at once.
A different way to run a bounty. A Kusama bounty needs a curator, and the curator decides when money is released. Normally that decision rests on the curator's judgement. Here the curator is bound to a published condition that anyone can recompute with a published checker, so the curator's only decision is whether the checker passed. A third party who was never involved can rerun it and dispute the result, and the dispute is settled by recomputation rather than by argument.
A way to bootstrap proof of individuality. The condition is attendance at a live session, witnessed by the other people in the room. The KSM pays for one thing: the on-chain membership that is minted for a person when they join the community. Nobody is paid. Money is released from the approved funds to cover a membership only for an attendee the room can vouch for, and only once per person, however many accounts that person holds. The amounts are small and the witnessing is informal. What it tests is whether treasury money can be settled against a record of recognition between people, which is the settlement half of any personhood system, before the recognition half is cryptographic.
Birdbrain is a community on Kreivo, a Kusama parachain, where membership of a community is an on-chain item. Chaos Sessions are Birdbrain's open weekly video calls, held every Monday. There have been thirty-four. People sign into each call with a passkey, which gives us a sign-in log for every session, and everyone on the call can see who else is there.
Each membership costs about 0.3 KSM on Kreivo. Until now that cost has been paid out of pocket by the people running the community. This bounty would fund it from the treasury, one membership per verified attendee. The KSM goes to the community's own account and is spent on minting memberships. None of it goes to the attendees themselves.
The Small Tipper track can spend at most 8.33333333325 KSM in one referendum. Every figure in this proposal was read from Kusama Asset Hub rather than taken from documentation, and this one was tested a planck either side through the funding call itself: at the ceiling it is accepted, one planck over it is refused. The request is 8 KSM, inside that limit.
It is deliberately small. This is a test of a mechanism, not a funding round. 8 KSM pays for roughly 25 memberships. If the mechanism is wrong, Kusama will have spent the price of a round of drinks finding out, in public.
After each session, the people who signed in are turned into a list of attendees, and the list is turned into a Merkle root. The root is written to Kusama Asset Hub before any payout is made against it. Each leaf binds three things:
leaf = blake2_256( 0x00 ‖ blake2_256(person_id) ‖ account ‖ blake2_256(session_id) )
node = blake2_256( 0x01 ‖ sort(a, b) )
A person's membership is funded if and only if all four of these hold.
The first condition is enforced by the chain, not by us. Each session is funded through its own child bounty, and the session's root is that child bounty's metadata. The chain refuses to create the child unless the root is already stored on chain and readable by anyone, so the award cannot be made without it.
The fourth condition is the one most attendance schemes leave out. Attendance answers was a human in the room. It does not answer is this the same human whose membership has already been funded. The chain cannot answer that either, because it knows accounts, not people: someone who opens a fresh account looks like a newcomer. Without the second question, one person with five accounts is funded five times, and every one of those accounts looks legitimate. So the person is part of the leaf, and the checker refuses to build a root in which one person appears with two accounts, or two people share one account. A duplicate is stopped before a root exists, not discovered after a payout.
The same person turning up the following week is checked too. Before each session's child bounty is created, every person in its root is compared against the people in every session already funded, and anyone found there is dropped. The child bounty is then sized to the people who are left, at the cost of one membership each. The earlier rosters are public and each funded session is a child bounty carrying its root, so anyone can rerun that comparison.
A leaf is only given to someone who signed in with a passkey they control themselves. Some members hold their membership on an account whose key the community's administrator holds on their behalf. Funding a membership on one of those accounts would be funding ourselves, so those people are left out of the root and listed in the roster with the reason.
The case for the fourth condition is our own register. At Kreivo block #38,961,176 the Birdbrain community holds 37 memberships across 36 accounts:
Seven of those fifteen people hold more than one membership. One holds nine, most of them left over from testing the sign-in flow. Nothing in the register itself could have told you which accounts belonged to the same person, because that information was never recorded in it.
Custody splits the fifteen:
Holding an account is not the same as being able to use it. At the most recent session, CS34 on 21 September 2026, two people who were failing to sign in registered fresh passkeys during the call. Each new passkey was minted a membership, one of them twice over, and both people still ended up joining on a guest link with no passkey at all. A failed sign-in added memberships to the register and nobody to the room. That is how a community of fifteen people comes to hold thirty-seven memberships.
So before the first membership is funded, the community is reset. All 37 memberships are burned and the list of what was burned is published. After that, memberships are rebuilt at one per person, for people who turn up and sign in with their own key. The before and after is part of the evidence.
CS33, 14 September 2026. Eight people were in the room and four have leaves. Two held memberships only on administrator-held accounts. Two joined on guest links with no passkey. A ninth sign-in was a second device belonging to someone who already has a leaf, and it is counted once.
CS34, 21 September 2026. Twelve names in the sign-in log, from ten or eleven people, and five have leaves. Two people held memberships only on administrator-held accounts. The two whose sign-in failed came in on guest links, and so did one person who has never registered a passkey. Of the other three guest links, two were second logins by people already counted, and one we cannot place from the log.
Four or five eligible people a session is the honest rate today, out of the eight to eleven who come. Moving people onto accounts they control, and fixing sign-in so that a failure does not leave them stranded, is our work and is not funded by this bounty. How many people the mechanism can admit week to week is one of the things the experiment measures.
The checker and every anchored roster are public at https://github.com/Birdbrain-wtf/attendance-checker, alongside Birdbrain's identity layer, Seeds.
The published rosters name nobody. Each attendee is given as the hash blake2_256(person_id), which is exactly what the leaf contains, so a roster with no names rebuilds the same root. This is pseudonymity rather than anonymity: the identifiers are short, and someone who guesses one can confirm it. The accounts are public on chain regardless.
One root is on chain so far. It was anchored before this bounty was proposed, which matters, because a root published after a payout could have been chosen to fit it.
| session | CS33, 14 September 2026 |
| root | 0xcc04a401c1900bc950f297d83025a930fb3a6250b5b115d9bddb8007c4d686a0 |
| remark | birdbrain/attendance/v2:CS33:0xcc04a401… |
| block | Kusama Asset Hub #21,513,860 |
| extrinsic | 0x0a04550ef4ec44a2d067553b6dcba3aa1a415ae4607cb975efbf59ed298680dd |
| cost | 0.0000767 KSM |
To rebuild it and compare it with the chain:
bun install
bun run attendance-root.ts self-test
bun run attendance-root.ts build rosters/CS33.json
bun run verify-chain.ts rosters/CS33.json
The last command reads the anchoring transaction off Kusama Asset Hub, decodes it, and compares it with the root rebuilt from the published roster. It signs nothing and needs no keys.
CS34's root is built but not yet anchored. It will be anchored before any award is made against it, and published at the same time.
This is falsifiable, not trustless. The list linking each person to their account comes from the session's own sign-in log, and everyone who was in the room can see it and challenge it. That is a real cost to anyone trying to fake attendance, and a cheap one to contest. It is not a cryptographic guarantee, and calling it one would be dishonest.
The planned sequence is:
pallet-people, from Parity's Individuality work, takes over the person slot once it is available. Nothing else in the award condition changes when it does.That last step is why we think this is worth Kusama's money rather than only ours. Individuality builds personhood out of a recurring game of people recognising each other. Chaos Sessions are a recurring game of people recognising each other, now on their thirty-fourth round. This bounty tests what it looks like to release treasury money against that recognition, and it is built so the recognition can be swapped for a better one without touching the rest.
The referendum is submitted by DJe2JJvcMNjxjkhi3UsoNZwSaYnHQqQB7AAavEAz1wDrJGh, the Birdbrain community's operator account, registered on the Kusama People Chain under the name Birdbrain (not yet verified by a registrar). The same account is named as curator.
We would rather say that plainly than bury it. Three things limit what the curator can do:
The curator key is an online one rather than a cold one, because the same account signs members into the community. The worst a compromise of it could do is make an award early. It could not send money anywhere other than the fixed beneficiary.
The intended end state is for the community's own account to hold the curator role, so that a vote inside the community makes each award and no individual does. That needs Kreivo to act on Asset Hub through a cross-chain message, which we have not yet rehearsed.
The beneficiary is DfjYNoRLGy2q6PoMVQydCe6tUdAhgSZ7VULVmec28vvrimB, the Birdbrain community's own account on Kusama Asset Hub. It is derived by Kreivo from the community's identity, Parachain(2281) + Plurality(Index 1786, Voice).
No key controls that account. It can only be spent by a referendum inside the Birdbrain community. Treasury money does not pass through a personal account at any point.
From there, the KSM has to move to Kreivo, where memberships are paid for. The bounty pallet cannot send it there directly: Kusama Asset Hub pays bounty awards only to local accounts, and refuses every other destination, on the live chain as in testing. So the onward transfer is ours to run. Both halves of it already dry-run cleanly against live Asset Hub, including the message as Kreivo actually sends it. Nothing on that path has been broadcast yet, and nothing needs to be until the bounty is funded.
The parent bounty is carved into one child bounty per session, each awarded only after the checker passes against that session's root. Every cohort leaves its own trace on chain, and a session that fails the checker simply gets no child bounty.
A treasury spend pays a fixed amount to a fixed recipient on a fixed schedule. There is nowhere in it for a condition to live, so the mechanism proposed here could not be tested through one. The curator role is the only place in Kusama's treasury machinery that can hold a spending condition, and binding that role to a published check is the proposal.
The treasury's exposure is 8 KSM. Ours is about 0.25 KSM in deposits to get the bounty funded and active, plus about 0.045 KSM per session, all of it refundable:
| KSM | returned when | |
|---|---|---|
| referendum submission deposit | 0.0333 | the referendum concludes |
| decision deposit | 0.0333 | the referendum concludes |
| title preimage | ~0.019 | the preimage is removed |
| curator deposit | 0.1667 | the bounty closes |
| each session's root preimage | ~0.045 | the preimage is removed |
This bounty uses the newer multi-asset bounties pallet, which has no proposal step and so no proposer bond. If the referendum fails, nothing is forfeited to the treasury.
The whole sequence, from funding through to a settled payout, has been run in two ways. A read-only rehearsal walks every step against the live chain, twelve steps, no keys, nothing signed, and anyone can rerun it. At one planck over the Small Tipper ceiling it is refused, which is the control. The same sequence has also been run end to end on a copy of Kusama Asset Hub, signing with the operator account and the balance it really holds, from funding to a 2.5 KSM payout into the community account. Every deposit in this proposal has therefore been paid once already, from the money that would pay it for real.
The pallet also needs a nudge that the chain does not send by itself. A bounty and each of its children move to their next state only when someone calls checkStatus, and a curator who does not know this finds out when a payment sits unfinished for weeks. Our award command sends those calls as part of the award, and a daily job looks for anything left mid-payment and clears it.
Nothing in the award condition is specific to Birdbrain, to memberships, or to video calls. It is an anchored root, a check that each person is funded once, a published checker, and a curator bound to it. Any bounty that funds something per verified person doing a verifiable thing can take the same shape: conference attendance, translation, moderation shifts, bug triage.
If it works, the curator stops being an allocator of funds and becomes a verifier of a public record. If it does not, it fails in public, for 8 KSM.