How MeshStack™ subscribers can pool their own hardware, and reach cloud models through it, without the pool learning who is asking: a design, a working virtual lab and the measurements behind both.
Most people who want to run a capable language model can afford neither the hardware nor a metered cloud account, while their neighbours' computers sit idle. This paper specifies and tests a community mesh for THOX MeshStack™: members add their own devices to a shared pool, and any subscriber can run distributed inference on that pool, or reach a hosted cloud model through it, without the pool learning who is asking. The design combines blind-signed subscriber tokens (RFC 9474) and sealed envelopes through a relay (RFC 9180) for requester unlinkability; signed per-hop receipts with sampled replay audits for integrity; contribution credits that raise a member's token budget and tier, with no currency; and a witness-cosigned Merkle ledger that settles credits and penalties after the request, off the token path. We state the limit plainly: a contributor that executes a stage can read its activations, so the pool gives identity privacy, not content privacy, and requests that need the latter are refused rather than routed. On a real 135M-parameter model split into three stages, a token-exact re-execution audit, the natural choice, exposed 69 of 102 cheated requests and missed an fp16 weight substitution on all 17 prompts; a SHA-256 digest of the stage boundary exposed 102 of 102. Minting an unlinkable token costs 7.9 ms at RSA-2048 and verifying one 0.12 ms; the ledger costs 0.92 microseconds per receipt. A virtual lab of 15 processes with real cryptography ran 12 scenarios, including a contributor killed mid-request, an owner reclaiming a device, a cheating contributor caught and penalised, and a forged ledger head refused by every witness; all passed and every lab request was token-identical to the whole model. A simulation shows the cost of unlinkability for fairness: fixed issuance budgets isolate heavy users but waste capacity, and indexing issuance to pool load recovers the waste. This edition is consolidated with a companion THOX paper and lab on the same subject: we adopt its plan-wide admission rule, execution contexts and replica-first default, reproduce its 62 tests and 150-trial campaign on a second host, and measure the replica-first claim in our own lab (6.6% lower per-remote-call round trip for one contributor holding both remote ranges than for two contributors in sequence on loopback, 30 matched pairs; corrected in v1.1.1, see Section 6.7). Nothing here is a THOX device, wide-area or throughput result.
MeshStack™ lets one owner pool their own devices. This report specifies the next step: a community pool that different owners contribute to and any subscriber can use, plus a path to hosted cloud models through the same private front door. It was written after a review of the five MeshStack repositories on 2026-11-10 and it reuses what they already decide: the lease and owner-protection contract of Auto Device Role Mode [1], exact-identifier model sharing, fail-closed admission, and the decisions of record [2]. Where the brief for this paper met an existing decision, the design stays inside the decision and says so. This edition (v1.1.1, erratum version of the v1.1.0 edition) is consolidated with the companion paper MeshStack Community Compute and its virtual lab [3], prepared in parallel on the same day. Section 6.8 reproduces that lab on this host and records where the two works agree, where they differ and who decides.
local_only by default. Second, contributor receipts must carry boundary digests. Token-exactness remains the right gate for certifying a stage decomposition (decision D25) and the wrong predicate for auditing a stranger. Third, contribution can earn access without a coin: non-transferable credits raise a member's token budget and tier, which keeps decision D20 intact. Fourth, hiding the requester moves fairness from the scheduler to token issuance, and a fixed issuance budget is expensive: in simulation it cut served tokens by 28% at 0.6 load. Indexing issuance to one aggregate idle bit from the pool recovers that loss in simulation and works in the lab, but does not isolate heavy members once the pool is saturated. Fifth, prefer a whole remote replica to a partition wherever one device can hold the remote part of the model: fewer hops, fewer parties that see activations, one receipt per token. Sixth, a blockchain-like ledger belongs after the request, not inside it: a witness-cosigned log gives append-only, publicly checkable settlement for microseconds per receipt.Running a capable language model costs either a large computer or a metered cloud account. Most households and small teams have neither, yet between them they own a great deal of idle memory and compute. MeshStack™ already lets one owner pool their own devices: the previous THOX report specified pipeline sharding, a keyed KV graph and lease-fenced device roles for a single household [4], and Auto Device Role Mode lets an owner's device lend itself to that owner's mesh under a lease [1]. This paper takes the next step and asks what has to be true before different owners can pool hardware: a member adds a device to a community pool, and any MeshStack subscriber can run inference on that pool, or reach a hosted cloud model through it, without the pool learning who they are.
Crossing the ownership boundary changes the problem. Inside one household every device answers to the same person. In a community pool the device that executes a stage belongs to a stranger, the requester is a stranger to that device, and neither has a reason to trust the other. Volunteer computing met the same boundary two decades ago and answered with redundancy and spot checks [5, 6]. Petals showed that a large language model can be served by volunteers holding layer ranges [7, 8]. What neither settles for a consumer product is the combination THOX needs: the owner of a contributed device stays sovereign, the requester stays unidentifiable, cheating is caught and costs more than it earns, contribution earns access without a currency, and none of the bookkeeping slows a token.
We are direct about one limit from the first page. A device that computes on a request can read what it computes. Recent work reconstructs prompts from the intermediate activations that pipeline stages exchange [9], and the THOX security model already records the same fact for KV state [10]. The community plane in this paper therefore offers identity privacy, not content privacy against the executing contributor. Requests that need content privacy stay on the requester's own devices, and the system refuses to route them anywhere else.
Contributions:
Petals serves large models by letting volunteers host contiguous transformer blocks and chaining them per request, with fault-tolerant routing when a server disconnects [7, 8]. Parallax schedules layer placement and request-time pipeline selection over a decentralised pool of heterogeneous GPUs [11]. Prima.cpp targets home clusters of mixed, low-resource devices [12]. These systems establish that the pipeline form works over consumer links; they are the base this paper builds on, not a contribution of it. None of them hides the requester from the pool, and none binds admission to a subscription.
Volunteer computing verifies results by replication and spot checks; Sarmenta's analysis of spot-checking with blacklisting and credibility is the classical treatment [6], and BOINC ships replication-based validation [5]. For model inference, optimistic schemes re-execute on dispute [13], Proof of Sampling derives an equilibrium in which sampled verification makes honesty the rational strategy [14], Proof of Quality replaces exact verification with quality consensus [15], SVIP trains a proxy task on returned hidden states to detect model substitution [16], and TOPLOC commits to intermediate activations with a locality-sensitive hash that tolerates hardware differences [17]. Our audit is the simplest member of this family: an exact digest of the stage boundary, replayed by an auditor in the same determinism class. Its only novelty is the measurement in Section 6.2 that the weaker, more natural predicate (compare the tokens) does not work, and the binding of the audit to signed receipts and a public ledger.
Privacy Pass separates the party that attests a client from the party that serves it, using tokens the issuer cannot link to their redemption [18, 19]; the publicly verifiable variant uses RSA blind signatures [20]. Oblivious HTTP places a relay between client and gateway so that the relay sees the client's address but not the request and the gateway sees the request but not the address [21], building on HPKE [22]. Apple's Private Cloud Compute combines both, an OHTTP relay and RSA blind-signature credentials, in front of attested servers [23]. Onion routing generalises the relay to multiple hops [24]. We adopt the Privacy Pass and OHTTP split unchanged and apply it to a pool whose servers are other members' devices.
Embedding inversion recovers text from dense embeddings [25] and from next-token distributions [26]. For the pipeline setting specifically, prompt inversion against collaborative LLM inference reconstructs inputs from intermediate activations [9], and proposed defences trade utility for reduced leakage without eliminating it [27]. Cryptographic private inference remains orders of magnitude slower than plaintext [28]. Trusted execution environments bound the exposure with a modest overhead on server CPUs [29] and are the long-term answer the THOX security model already names [10]; contributed consumer devices do not offer one today.
The Virtual Token Counter serves the least-served client first and lifts a returning client's counter so idle time banks no credit [30]; later work adds prefix locality [31] and per-token latency isolation [32]. Dominant Resource Fairness is the multi-resource baseline [33]. All of these keep a counter per client. Section 4.4 explains why an unlinkable pool cannot, and what replaces it.
| System | Hardware from | Requester hidden from pool | Result verification | Access model | Owner pre-emption |
|---|---|---|---|---|---|
| Petals [7, 8] | volunteers | no | none stated in the abstracts we cite | open | server may leave |
| Parallax [11] | decentralised GPU pool | no | not in scope | open pool | dynamic availability |
| BOINC [5] | volunteers | n/a (project is requester) | replication | project-run | volunteer preferences |
| Proof of Sampling [14] | staked nodes | no | sampled re-execution, game-theoretic | payment | n/a |
| Private Cloud Compute [23] | one operator | yes (relay and blind tokens) | attested software | device entitlement | n/a |
| This paper | subscribers' own devices | yes (relay and blind tokens) | boundary-digest audit, signed receipts, public ledger | subscription, non-transferable credits | owner always wins within one chunk |
Curious contributor: follows the protocol and tries to learn who is asking and what. Lazy or dishonest contributor: returns cheaper or wrong results to earn credit (skips layers, substitutes lower precision, perturbs outputs). Free rider: a subscriber, or a non-subscriber, who tries to consume more than their share. Curious operator: the coordinator or the authority tries to link requests to accounts, or rewrites the credit history. Network observer: sees traffic between parties. Out of scope: a contributor reading the activations it legitimately computes (Section 1), collusion between the relay and the coordinator, traffic-timing correlation, and physical attacks on devices.
| Requirement | |
|---|---|
| R1 | Owner sovereignty. Contribution is opt-in per device and per exact model identifier. An owner who returns to their device waits at most one service chunk; community work never evicts owner work. |
| R2 | Requester unlinkability. No party other than the subscription authority learns which member made a request, and the authority cannot link a token it issued to the request that redeems it. |
| R3 | Stated content exposure. Every request carries a privacy class. local_only never leaves the device; mesh_only never leaves the owner's devices; community accepts that the executing contributor can read activations; cloud accepts that the provider can read the prompt; confidential requires an attested execution boundary on every stage that handles plaintext, which no contributed consumer device offers today, so it is refused. A request is refused, not downgraded, when its class forbids a plane. |
| R4 | Subscriber-only, bounded admission. Only tokens issued to subscribers are accepted. Each token authorises one bounded service quantum and is spent once. Issuance per account per epoch is bounded. |
| R5 | Auditable integrity. Every hop yields a signed receipt binding input and output digests. A contributor that returns a wrong result is caught with probability approaching one under sampled audit, and loses more than it gained. |
| R6 | Contribution earns access without identifying the requester. |
| R7 | Plane provenance. Every response is labelled with the plane that produced it. A cloud-hosted model is never advertised as contributed compute [34]. |
| R8 | No cross-member cache. KV state stays keyed to and readable by one principal, as decisions D19 and D43 require [2]. |
| R9 | Verifiable settlement off the token path. Credits and penalties are append-only, publicly checkable and replayable, carry no requester identity, and add no work between two generated tokens. |
| R10 | Fail closed with attribution. A failed hop, an audit mismatch, a broken receipt chain or a stale lease stops that path and names the hop. Recovery is a new route, never a silent degradation. |
A request tries planes in a fixed order and stops at the first that both fits the model and is permitted by the privacy class: the local model, the owner's own mesh [4, 1], the community pool, then the cloud plane. This extends the seat order of Auto Device Role Mode by one seat and keeps its rule that an empty pool is a fall-through, not an error. The plane that served a response is part of the response.
The privacy classes of R3 correspond to the execution contexts of the companion paper [3], which we adopt: owner-controlled mesh (local_only, mesh_only), trusted community hosts (community), attested confidential hosts (confidential) and external model service (cloud). They are policy contexts, not a ranking. We also adopt its plan-wide admission rule. A job may run on a plan at time only if
where is subscriber entitlement (here, a valid unspent token), consent (the privacy class), model rights and compatibility (the certified fingerprint), admission at every stage (enrolled, owner idle, not suspended, lease valid) and authorisation of every data edge (sealed to the next hop's key). Only eligible plans are ranked; an ineligible candidate is excluded, never given a worse price. In the lab the signed lease is the plan: it carries a plan digest over route, keys, model fingerprint, quantum and expiry, and every receipt repeats that digest.
Replica first. Also following [3], the default route is a whole replica of the remote layers (the requesting device retains the first ten layers locally in both routes): if one eligible device can hold all of the remote layers, use it, and split across devices only when no single device can and a measured benefit exists. A replica route has fewer hops, exposes activations to one contributor instead of two, and needs one receipt per token. Section 6.7 measures the difference in the lab and calculates it for wide-area links.
The authority holds one RSA key per tier. To obtain a token the member's device draws a random 32-byte nonce, appends the intended audience (community or cloud), blinds the encoded message under the tier's public key and sends the blinded value with its account credential. The authority checks the account and the tier budget, signs the blinded value, and returns it. The device removes the blinding factor and holds a standard RSASSA-PSS signature on a message the authority has never seen.
The redeemer (coordinator or cloud gateway) verifies under the tier key, checks the audience, and records in a spent set. One token buys one request of at most generated tokens. The tier is visible to the redeemer because it is the key that verifies; nothing else about the holder is.
1 device: token <- wallet(tier, aud=community) # issued earlier, unlinkable
2 device -> relay -> coordinator: seal(lease request, token, privacy class)
3 coordinator: verify token, check spent set, refuse local_only / mesh_only,
pick one eligible node per remote stage (not owner-active, not suspended, not busy),
return signed lease {route, TTL, quantum Q}
4 for step t = 0 .. Q-1:
5 device: h0 <- local layers(embed(prompt + generated))
6 device -> relay -> stage 1: seal(lease, t, h0) # stage checks lease signature, route, owner switch
7 stage 1: h1 <- layers(h0); receipt1 = sign(lease, t, SHA256(h0), SHA256(h1))
8 stage 1 -> stage 2 directly: seal(lease, t, h1, receipt1)
9 stage 2: h2 <- layers(h1)[last position]; receipt2 = sign(lease, t, SHA256(h1), SHA256(h2))
10 reply to device, sealed to its one-time key: h2, receipt1, receipt2
11 device: verify both signatures and the chain in1 = SHA256(h0), in2 = out1, out2 = SHA256(h2)
12 device: with probability q send (h0, receipts) to an auditor; on mismatch submit fraud proof, reroute, restart
13 device: next token <- argmax(head(h2)) # head stays local
14 device -> coordinator: close(lease, receipts) # credits go to the ledger after the fact
any failure at 6-11: reroute excluding the named hop and repeat step t (hops are stateless in the lab)Three properties of this path matter. Token identifiers never leave the device: embeddings and the output head are local, so contributors receive activations only. The receipt chain lets the device detect, without any replay, a stage that signs one output and forwards another, because the next stage signs what it actually received. And the owner switch is checked on every hop, so a returning owner is served at the next hop boundary (R1).
Fair serving normally keeps a service counter per client [30]. A pool that cannot link two requests from the same member cannot. We move the per-member accounting to the one party that knows members, the authority, and express it as an issuance budget: each account may draw a bounded number of tokens per epoch. Contribution raises the budget and unlocks a higher tier. The coordinator then needs only per-tier state. It grants the queued tier with the least service per unit weight, with the counter lift of VTC applied per tier so an idle tier banks nothing.
Here is service granted to tier , its weight, member 's budget and the verified service that member's devices gave to others. Credits are non-transferable and buy only tokens. Decision D20 rejected a payments market for MeshStack [2]; this design stays inside that decision. The cost of moving fairness to issuance is that a budget is not work-conserving: capacity can sit idle while a member waits for their bucket to refill. Section 6.4 measures that cost in simulation. The remedy is to index issuance to pool load: the coordinator publishes one aggregate bit (a route is free and nothing is queued), and while it is set the authority issues one base-tier token past the budget. The bit identifies nobody. Contributor-tier tokens are never issued as surplus.
An audit replays a hop. The device sends the auditor the stage input it produced and the receipts it received. The auditor, holding the same layer ranges at the same engine build, recomputes each remote stage in turn and compares the SHA-256 digest of its output with the digest the contributor signed. A mismatch yields a fraud proof: the contributor's signed receipt and the auditor's signed finding over the same input digest with a different output digest. The coordinator verifies both signatures and suspends the node; the authority zeroes the owner's credit; the device reroutes and restarts the request so that nothing the cheater touched is kept.
Settlement is where a blockchain-like structure earns its place, and where it must not cost latency. Receipts are signed in band because audits need them anyway. Everything else happens after the request. The coordinator signs a record per lease (member credited, token-steps served) or per penalty and appends it to a log. Each epoch the log is rolled into a Merkle tree with the hashing of Certificate Transparency [35]; the tree head names its epoch, size, root and the hash of the previous head; witnesses cosign it. A member proves a credit, or anyone proves a penalty, with an inclusion proof of hashes. Balances are a deterministic replay of the log, so the authority's balance can be checked by anyone holding it.
prev field equals the hash of the last head that witness cosigned. A head is accepted with more than cosignatures. Then two different heads for the same epoch cannot both be accepted unless some witness cosigned both, which an honest witness never does. Proof. Two majorities of witnesses intersect; the common witness signed at most one head for that epoch. The log operator can stop publishing; it cannot show two members two histories. The proposition assumes no witness is faulty: with one faulty witness among three, two majorities can intersect only in that witness, which may sign two heads for one epoch. The rule above also checks head chaining, not that the new log's contents contain the old log's. A fixed witness roster with retained-prefix validation before signing is the correction path (corrected statement added in v1.1.1).We chose a witnessed transparency log over a consensus chain on purpose. A public chain or a per-hop BFT round would put seconds or a consensus round between tokens. A permissioned BFT committee that orders only epoch heads is a compatible later step if THOX should not be the sole log operator; it changes who signs heads, not the request path.
Subscribers also want models no pool of small devices can hold. The cloud plane reaches a hosted model through the same relay with the same tokens, bound to the cloud audience so a community token cannot be replayed there. The gateway can read the prompt; that is what hosted inference is. What the plane adds is that the provider receives a request it can authorise and bill against THOX without learning which subscriber sent it, in the manner of [21, 23]. The response carries the label cloud, and the coordinator refuses any advertisement that lists a cloud-tagged model as contributed compute, which is ADR-025 enforced at the pool boundary [34].
A route needs one online, owner-idle contributor per remote stage. If each of enrolled devices for a stage is independently available with probability , a route with -fold choice per stage across remote stages exists with probability
| Device availability a | Devices per stage for one candidate (r = 1) | Devices per stage for a spare (r = 2) |
|---|---|---|
| 0.50 | 8 | 12 |
| 0.67 | 5 | 8 |
| 0.80 | 4 | 6 |
| 0.90 | 3 | 4 |
The virtual lab is 15 operating-system processes on one host that speak HTTP over loopback: authority, coordinator, relay, four contributor stage nodes, one auditor, a cloud gateway, the settlement ledger, three witnesses, and the requester's device. The model is SmolLM2-135M-Instruct [36] (135M parameters, 30 layers) at a pinned revision, split into three ten-layer stages. Each stage node loads the checkpoint and keeps only its own layer range (35.4M of 134.5M parameters). Cryptography is real: RSA blind signatures are implemented from RFC 9474 in Python integers and checked against the RFC's Appendix A.3 vector and against an independent library verifier; HPKE [22], Ed25519 [37] and RSASSA-PSS verification come from the cryptography library. Hops are stateless in the lab (each step recomputes the sequence), which makes reroute trivial and costs throughput we do not report.
The lab is virtual in one sense only: every party is a process, not a machine. It establishes that the protocol composes, that the refusals refuse, and that the information each party receives is what the design says. It establishes nothing about THOX devices, wide-area links or throughput.
| Req. | Exercised by | Result recorded |
|---|---|---|
| R1 | Lab D (owner returns mid-request); simulation owner-delay bound | request moved off the owner's device at the next hop, output token-exact: True; simulated worst owner wait 32.0 s against a one-chunk bound of 32.0 s |
| R2 | Lab B (tokens), Lab I (wire scan) | authority saw the account and no token value; coordinator, relay, stage nodes and gateway received no account on the wire (213 tokens issued) |
| R3 | Lab B, Lab H | local_only at the coordinator: local_only_never_leaves_device; mesh_only: mesh_only_never_leaves_owner_devices; confidential: confidential_unavailable_no_attested_boundary; community class at the cloud gateway: privacy_class_forbids_cloud_plane |
| R4 | Lab A, Lab B, Lab G | non-subscriber: not_a_subscriber; second redemption: double_spend; forged signature: invalid_token; over budget: budget_exhausted |
| R5 | Experiment E1; Lab C, Lab F | digest audit exposed 102 of 102 cheated requests; lab fraud proof accepted, node suspended |
| R4, R6 | Lab L | past the budget with the pool idle: issued as surplus (200); with every route leased: budget_exhausted; contributor tier as surplus: refused (429) |
| R6 | Lab G | contributor's contributor-tier budget 13, consumer's 0; grant order b c c c b c b b b b b b |
| R7 | Lab A, Lab H | cloud-tagged advertisement: cloud_model_is_not_mesh_compute; cloud response label: cloud |
| R8 | By construction | stateless hops; no KV state leaves a process in the lab. Not a test of the production KV graph. |
| R9 | Experiment E4; Lab J | 123 records, 3 of 3 cosignatures valid, replayed balances equal the authority's: True, forged head cosigned by 0 witnesses |
| R10 | Lab D, Lab E, Lab F | killed contributor named in the error (C1), rerouted, output token-exact: True |
All measurements ran on one Linux container (x86_64, 2 vCPU, 7 GB RAM, Python 3.13.18, PyTorch 2.15.0+cpu on CPU). The model is SmolLM2-135M-Instruct at revision 12fd25f7 [36], fp32, greedy decoding. Timings are medians after warm-up with the repetition count stated; nothing else ran on the host during a timed run. Results are labelled measured, virtual lab, simulated or calculated, and the labels are not interchangeable. Five questions:
We split the model into three ten-layer stages inside one process, serialising the residual stream to fp32 bytes at each boundary and hashing those bytes into a receipt chain. A contributor runs the middle stage. For each of 17 prompts we generate 32 tokens honestly and under six cheats, and ask two auditors whether they would notice: one re-executes the request and compares output tokens, the other compares the boundary digest.
Baseline sanity. The staged pipeline reproduced the whole model's tokens on 17 of 17 prompts. Honest boundary digests were identical across two repeats (17 of 17) and between two threads and one thread (17 of 17), so on this host an honest contributor is never flagged. Staging cost nothing measurable: 1.53 s per request staged against 1.53 s whole (medians of 5 alternating passes; the difference, 0.0% in magnitude, is inside run-to-run spread). With key-value caching, a request moved 320 KiB across the two boundaries.
| Cheat by the middle stage | Boundary-digest audit exposes | Token-exact audit exposes | Median first diverging token |
|---|---|---|---|
| skip 1 of 10 layers | 17 / 17 | 17 / 17 | token 0 |
| skip 3 of 10 layers | 17 / 17 | 17 / 17 | token 0 |
| skip the whole stage | 17 / 17 | 17 / 17 | token 0 |
| stage weights rounded to fp16 | 17 / 17 | 0 / 17 | never diverged |
| stage weights quantised to int8 | 17 / 17 | 16 / 17 | token 6 |
| 0.1% Gaussian noise on the stage output | 17 / 17 | 2 / 17 | token 0 |
The negative result. Comparing tokens exposes gross cheats immediately: any skipped layer changed the first or second token on every prompt. It does not expose economical ones. Rounding the stage's weights to fp16 changed no output token on any of the 17 prompts within 32 tokens, and a 0.1% output perturbation changed tokens on 2. Int8 weights were exposed on 16 of 17, but the median first divergence was token 6, so a short audit prefix misses most of them (Figure 2, right). These are exactly the substitutions a contributor has a reason to make, because they save memory or compute. MeshStack's certification gate for stage decomposition is token-exactness against the whole model (decision D25 [2]); it is the right gate for certifying an engine and the wrong predicate for auditing a stranger. The boundary digest exposed every cheat on every prompt.
With the digest predicate, sampling is cheap. At an audit rate of 5% a persistent cheat is caught with 99% probability within 90 requests, at 10% within 44, at 25% within 17 (Figure 3). By Proposition 3, if a detected cheat forfeits 100 times what one cheated request earns, any audit rate above about 1% makes cheating unprofitable; at a ratio of 10 the rate must exceed about 9%. With the token predicate against an fp16 substitution, no audit rate suffices, because d was zero in our sample.
The blind-signature implementation reproduced RFC 9474 Appendix A.3 exactly: encoded message, blinded message, blind signature and final signature all matched (5 of 5 checks including verification by an independent library). At RSA-2048, over 200 runs, blinding took 0.64 ms on the client, the issuer's blind signature 7.25 ms, unblinding 0.02 ms and verification 0.12 ms; all 200 tokens verified. At RSA-4096 the issuer's cost rises to 47.7 ms (60 runs). The signing arithmetic here is plain Python integers, so these are upper bounds on a native implementation. A token is one signature per request, obtained in advance, so none of this is on the token path.
Sealing a message to a recipient with HPKE adds 48 bytes and took 89 to 148 microseconds across payloads from 256 bytes to 64 KiB (200 runs each); opening took 55 to 91 microseconds. The cost is dominated by the key encapsulation, not the payload, and the medians are not monotonic in size at this scale. The envelope is paid once per hop. Against a hop that carries hundreds of kilobytes of activations and runs ten transformer layers, it is not the term that matters; the extra network hop through the relay is, and this paper does not measure it.
The simulation has 12 contributor devices with abstract service rates of 8, 15 and 30 tokens per second, each unavailable while its owner is active (mean 20 minutes active, 40 idle, so availability 0.67), and 40 members of whom 12 own the devices and two submit 10 times the demand of the rest (34% of all demand). Five policies see identical arrival and availability traces: FIFO, least-served-first with counter lift (VTC-style, equal weights), the same with weights that grow with a member's contribution, the unlinkable form in which per-member token buckets gate entry to a FIFO pool, and that form with issuance indexed to pool load. 30 seeds per point, eight simulated hours each. The rates are scenario parameters, not device measurements.
| Load | Policy | Contributors p95 wait | Other members p95 wait | Heavy members' share of service | Tokens served |
|---|---|---|---|---|---|
| 0.6 | FIFO | 47 s | 49 s | 34.2% | 1.91 M |
| 0.6 | least-served-first | 19 s | 18 s | 34.2% | 1.91 M |
| 0.6 | contribution-weighted | 8 s | 22 s | 34.2% | 1.91 M |
| 0.6 | fixed issuance budget (unlinkable) | 3 s | 464 s | 9.3% | 1.38 M |
| 0.6 | load-indexed budget (unlinkable) | 13 s | 17 s | 34.2% | 1.91 M |
| 1.0 | FIFO | 1,498 s | 1,473 s | 34.8% | 3.12 M |
| 1.0 | least-served-first | 221 s | 232 s | 32.7% | 3.12 M |
| 1.0 | contribution-weighted | 15 s | 300 s | 32.7% | 3.12 M |
| 1.0 | fixed issuance budget (unlinkable) | 144 s | 2,373 s | 5.9% | 2.19 M |
| 1.0 | load-indexed budget (unlinkable) | 62 s | 1,745 s | 33.4% | 3.12 M |
| 1.2 | FIFO | 4,763 s | 4,737 s | 34.6% | 3.19 M |
| 1.2 | least-served-first | 635 s | 644 s | 21.1% | 3.19 M |
| 1.2 | contribution-weighted | 18 s | 799 s | 21.2% | 3.19 M |
| 1.2 | fixed issuance budget (unlinkable) | 272 s | 4,639 s | 5.2% | 2.48 M |
| 1.2 | load-indexed budget (unlinkable) | 194 s | 4,502 s | 26.4% | 3.19 M |
Three findings. First, with identity, contribution weighting does what it should: at load 1.2 contributors' p95 wait is 18 s against 635 s under equal weights and 4,763 s under FIFO, at a cost to other members (799 s against 644 s). Second, FIFO lets two heavy members take 35% of service at every load; counter-based policies cut that only once the pool saturates (21% at load 1.2).
The negative result. The unlinkable budget policy isolates heavy members at every load (9% of service at load 0.6), but as parameterised it is a poor scheduler. It is not work-conserving: at load 0.6 it served 1.38 M tokens where the others served 1.91 M, and ordinary members' p95 wait was 464 s against 18 s, because a member whose bucket is empty waits while devices idle. A fixed issuance rate is the wrong control.
Load-indexed issuance. Letting the authority issue past the budget while the pool reports an idle device and an empty queue removes the waste: at load 0.6 the policy served 1.91 M tokens (0.87 M of them as surplus) and ordinary members' p95 wait fell to 17 s. It is not a complete answer. Surplus issuance is first come, first served, so below saturation heavy members again take their share of demand (34%), which is harmless while capacity is spare; at load 1.2 they still take 26% against 21% under least-served-first, and ordinary members wait 4,502 s at p95 against 644 s. Unlinkable admission that matches counter-based fairness under overload remains open. Lab scenario L shows the mechanism working end to end: a member past their budget received a surplus token while the pool was idle and was refused while every route was leased.
Censoring (added in v1.1.1). The waiting times above cover requests that started. A never-started accounting over the same runs (arrival traces regenerated, started counts taken from the results above, no consistency failures across 750 runs) shows what the waits omit: at load 0.6 the fixed-budget policy leaves a median 27.7% of all requests never started, 80.3% for heavy members and 0.2% for ordinary members, while least-served-first leaves a median of 0% (59 of 139,921 requests pooled). The budget policy's isolation of heavy members is therefore stronger, and its service denial larger, than the waiting times alone suggest.
Owner protection. Across all 75,032 simulated owner returns, the longest an owner waited for their own device was 32.0 s, under the one-chunk bound of 32 s for a 256-token chunk on the slowest device (R1). The bound is a property of the chunk size and the device, not of the policy.
Signing a 239-byte receipt took 45 microseconds and verifying it 142 (200 runs); these are the only ledger-related costs paid per hop, and audits need them regardless. Building the Merkle tree for an epoch of 16,384 receipts took 15.0 ms (0.92 microseconds per receipt, 30 runs). 5 witness cosignatures on the head took 208 microseconds to produce and 561 to verify. An inclusion proof at that size is 14 hashes, 448 bytes, verified in 8.4 microseconds.
The structure gives what a chain would be used for here: an ordered, append-only, publicly verifiable record that the operator cannot fork unnoticed (Proposition 4) and from which every balance can be recomputed. It does so with no work between two generated tokens. What it does not give is operator-independent liveness: the log operator can stop. If that matters, a small committee can order epoch heads; the request path does not change.
The lab ran the full protocol across 15 processes (2 vCPU host) and recorded one evidence file. Table 7 lists the 12 scenarios. Community-plane requests were token-identical to the whole model on 8 of 8 prompts with 512 signed receipts verified by the device, and all 32 hops of one honest request were replayed by the auditor in a separate process with every digest matching, so cross-process replay raised no false alarm.
| Scenario | What the evidence file records | ||
|---|---|---|---|
| A | Enrolment | 5 devices enrolled with authority certificates and signed advertisements; self-signed certificate refused (no_authority_certificate); non-subscriber refused (not_a_subscriber); advertisement listing a cloud-tagged model refused (cloud_model_is_not_mesh_compute) | pass |
| B | Tokens | valid token redeemed for a signed lease; second redemption double_spend; forged signature invalid_token; cloud-audience token at the pool invalid_token; over-budget issuance budget_exhausted; local_only request local_only_never_leaves_device | pass |
| C | Inference | 8 / 8 requests token-exact; 512 receipts verified; 32 honest hops audited, all match | pass |
| D | Owner returns | owner of B1 became active at step 8; next hop refused (owner_active); request continued on B2; output token-exact; a new lease while the owner was active avoided the device; it rejoined when the owner left | pass |
| E | Contributor dies | process C1 killed at step 12; upstream stage reported downstream_failed naming C1; rerouted to C2; output token-exact | pass |
| F | Cheating contributor | digest audit exposed noise, fp16 and skipped-layer cheats at the first audited hop, while the noise and fp16 cheats left the unaudited output token-exact; with a sampled audit at q = 0.25, the cheat was caught at step 1, the fraud proof accepted, the node suspended, its owner's credit set to zero, and the request restarted on another node with token-exact output | pass |
| G | Admission | contributor's contributor-tier budget 13 tokens, consumer's 0; 8 base-tier and 4 contributor-tier requests granted in the order b c c c b c b b b b b b; heavy member's extra issuance budget_exhausted | pass |
| H | Cloud plane | request served through the relay with label cloud and the notice that the provider can read the prompt; token replay double_spend; community-class request privacy_class_forbids_cloud_plane | pass |
| I | Information flow | across 205 MB received by the relay, 90 MB by the busiest stage node and everything received by the coordinator, auditor and gateway, no consumer account, token value or prompt text appeared on the wire; the authority received accounts and no token value | pass |
| K | Replica route | a contributor joined mid-run holding both remote layer ranges (70.8M parameters) and was leased as a whole replica; 62 of 62 requests completed across both topologies, all token-exact; replica hops audited, all match (timing in Section 6.7) | pass |
| L | Load-indexed issuance | member past budget, pool idle: token issued and marked surplus; every route leased: budget_exhausted; routes released: issued again; contributor-tier surplus refused | pass |
| J | Ledger | 123 coordinator-signed records sealed in one epoch; 3 of 3 witness cosignatures valid; balances replayed from the log equal the authority's; inclusion proof for the penalty record valid (7 hashes) and invalid after a one-character change; a forged head for the same epoch cosigned by 0 witnesses; next epoch chains to the first | pass |
Two observations from the lab belong in the design. First, scenario F reproduced the audit finding end to end: a contributor that perturbed or down-cast its output produced a response the requester could not distinguish from an honest one, and was still caught at the first audited hop. Second, scenario I is a statement about the wire, not about knowledge. Stage nodes decrypt activations and the gateway decrypts the prompt, by design. The scan shows that the relay, which holds no key, and the coordinator, which holds only its own, receive nothing readable that identifies a consumer.
Lab timings are not performance results. A hop took a median of 145 ms and a 32-token request 7.5 s, on stateless hops that recompute the whole sequence at every step, over loopback, with 15 processes sharing two cores.
Measured in the lab. In scenario K a third contributor joined mid-run holding both remote layer ranges, and the requester alternated between the two-stage pipeline route and the whole-replica route in ABBA order: 30 trials each of 8 generated tokens, one labelled warm-up per topology kept in the record, nothing discarded. The mean remote round trip per token was 134.5 ms for the pipeline (95% bootstrap interval 132.5 to 136.5; trial-mean CV 4.3%) and 124.4 ms for the replica (122.7 to 126.2; CV 4.0%), a reduction of 7.5%. The intervals do not overlap and both CVs are under the 10% dispersion condition of decision D37, which is necessary and not sufficient for a claim-grade number: this is one host, loopback, a small model and stateless hops. The saving here is one sealed hop and one receipt; the layers computed are the same.
Correction (v1.1.1). The comparison above gave each route different prompts, so the 7.5% figure is superseded. A matched-prompt rerun inside this pipeline (30 pairs, the same prompt on both routes, order alternating, auditing kept out of the timed requests, every attempt token-exact, recorded in exp/results/erratum_rerun.json) measured 126.4 ms per remote call for two contributors in sequence against 118.0 ms for one contributor holding both remote ranges on a quiet host: a paired difference of 8.35 ms (95% interval 6.27 to 10.27), 6.6% lower, with the single contributor faster in 27 of 30 pairs. An earlier run on a shared host agreed in direction (131.5 against 124.6 ms, 5.2% lower). The conclusion stands at the corrected size; the v1.1.0 figure does not.
Calculated for real links. The companion paper models one serial decode stream as compute plus per-link delay plus bytes over goodput [3]. We re-derived its four-stage example and obtained the same cycle times (44.39, 83.93, 167.86, 319.32 ms). Applying the same form to this design, with 40 ms of assumed total compute per token, a sealed fp32 position of 2,352 bytes for the test model, 303 bytes per signed receipt, six link traversals per token for the pipeline through the relay and four for a replica through the relay, gives Table 8. On a wide-area link the relay and the extra stage dominate: delay, not payload, is the term that matters at this hidden size.
| Link assumption | One-way delay, goodput | Pipeline via relay | Whole replica via relay | Replica advantage |
|---|---|---|---|---|
| Nearby LAN | 1 ms, 1,000 Mbps | 46.1 ms (21.68 tok/s) | 44.1 ms (22.69 tok/s) | 5% |
| Metro | 10 ms, 100 Mbps | 101.3 ms (9.87 tok/s) | 80.8 ms (12.38 tok/s) | 25% |
| WAN | 30 ms, 50 Mbps | 222.5 ms (4.49 tok/s) | 161.6 ms (6.19 tok/s) | 38% |
| Constrained WAN | 60 ms, 10 Mbps | 412.7 ms (2.42 tok/s) | 288.0 ms (3.47 tok/s) | 43% |