How Caper approaches this
Caper runs no identity check at all, and makes no claim that any member is human. It attacks the same problem from the cost side instead. A member’s vote weight is earned: it grows with the soulbound vote tokens their own ballots mint, which cannot be bought or transferred, not with the size of their holding alone.
Two things about v matter here, and the second is the one that is easy to get wrong. It is untransferable: its depositor role is bound to the caper’s own state component and the updater is deny_all, so no wallet can send it to another (contracts/core/src/caper_dao.rs). It is not, however, unacquirable. The deployed contract mints v on exactly one surface: casting a ranked ballot mints one (VOTE_MINT, contracts/logic/src/lib.rs), and buying, selling and transferring mint none – the trade-side accrual was removed in the genesis redeploy of 11 September 2026. So v still has a published price, the flat 100 XRD a ballot costs, but the only till that sells it is the ballot box, and it stays in the wallet that voted.
The multiplicative form is what does the Sybil work, and it does it against a cost floor rather than against unbuyability. Splitting one holding across ten wallets multiplies nothing: each wallet then holds a tenth of the tokens, and to reproduce the original weight every one of them would have to accrue its own record from zero – ten times the outlay for, at best, the same weight, while each extra mint inflates V, the denominator every member shares. Extra identities are strictly a worse deal than one, and that holds whether the attacker builds the record by voting or by trading.
It is a narrower promise than proof of personhood: Caper cannot tell you a member is a distinct human, only that concentrated influence had to be paid for in XRD and cannot be consolidated after the fact. But it is a promise the contract keeps by itself, with no external issuer, no expiring credential, and no weights file that a third party can re-tune. See proposals for the voting mechanics.