nx_commons_sybilcost.nx
buildroot/runtime/nx_commons_sybilcost.nx
about
nx_commons_sybilcost.nx -- what does an attack actually COST? The sybil bound, measured.
WHY THIS EXISTS: every layer built today claims sybil resistance, and a claim is not a bound.
"The ring collapses because it cannot manufacture witnesses" is an ASSERTION until someone states
the quantity an attacker must spend and shows it does not shrink as the attack grows.
★ SYBIL-RESISTANT IS NOT A PROPERTY, IT IS A PRICE. Name the price or you have said nothing.
KNOWN GOOD: the trust-flow bound (Advogato's metric; SybilGuard / SybilLimit). Its theorem is the
one useful result in this area and it is counter-intuitive enough to be worth stating plainly:
an attacker's total influence is bounded by the number of ATTACK EDGES -- honest members who
vouch for a sybil -- and is INDEPENDENT of how many sybils the attacker creates.
Minting identities is free; being vouched for by someone honest is not. So the cost scales with
the only thing the attacker cannot manufacture: other people's genuine regard.
NOTE ON SCOPE, because it is the honest half: there is no in-estate known good for proof-of-
personhood, and I looked -- nx_realperson is CONTENT SAFETY about real people (NCII, defamation,
right of publicity), not "is this account a human". I inferred otherwise from its NAME and was
wrong. Nor is there a good global answer: biometric uniqueness centralises and builds a honeypot,
government ID excludes the undocumented and is best-held by exactly the class we are excluding.
★ BUT FOR A BOUNDED NEIGHBOUR COMMONS, PERSONHOOD IS THE EASY CASE, NOT THE HARD ONE -- neighbours
physically know each other, and the witness layer already built IS the mechanism. This organ does
not add a new check; it PRICES the one we have.
Integer only. license_tier: ORIGINAL No hw writes (Rule 26).
dependencies 1 imports · 1 importers
imports: nx_syscalls.nx
imported by: nx_commons_sybilcost_gate.nx
structs
| none |
consts
| 27 | const SC_PERMIL: i64 = 1000 |
functions
| 32 | func sc_standing_naive(n_sybils: i64, vouches_each: i64, unit: i64) -> i64 called by 1: main |
| 43 | func sc_standing_flowbound(caps: *i64, n_attack: i64) -> i64 |
| 56 | func sc_per_sybil(caps: *i64, n_attack: i64, n_sybils: i64) -> i64 |
| 63 | func sc_cost_permil(n_attack: i64, standing: i64) -> i64 called by 1: main |
| 70 | func sc_honest_unchanged(before: i64, after: i64) -> i64 called by 1: main |