Protocol Specification

Glasshouse: adversarial disclosure for tokenized-equity venues

Glasshouse is a settlement layer for security disclosure. It removes the disclosed party from the verification path, prices the truth of a finding on an open market, and pays the researcher on attestation rather than on the venue’s cooperation.

Revision
0.4 — working draft
Target runtime
EVM L2, single-sequencer
Settlement asset
Canonical stablecoin
Status
Pre-testnet

01 Overview

A tokenized-equity venue holds three things a researcher can break: the matching and custody rails that move positions, the collateral logic that keeps a token backed, and the bridge surface that connects the venue to the chains it settles on. A finding against any of these is worth money to whoever holds it, and the current disclosure path routes that finding directly to the one party with an incentive to suppress it.

Glasshouse restructures that path. A finding enters under seal, is verified by a staked panel that cannot include the disclosed venue, and resolves on a market whose outcome is determined by the attestation certificate rather than by any statement the venue makes.

1.1 Disclosure asymmetry

Coordinated disclosure assumes the receiving party wants the finding fixed. That assumption holds for most software vendors and fails for a venue whose unpatched exploit is economically useful to insiders, or whose disclosure would be materially adverse. The failure modes are ordinary:

  • Silent expiry. The report is received, never acknowledged, never patched. The researcher has no recourse that does not involve publishing an unpatched exploit.
  • Reward capture. The venue defines both the severity and the payout, after it already holds the finding.
  • Selective remediation. The vulnerability is quietly patched and the disclosure is never published, so the market never learns the venue was exposed.

In each case the venue is simultaneously the accused, the judge, and the paymaster. Glasshouse separates those three roles into three parties with independent incentives.

1.2 Design goals

IDGoalEnforced by
G-1No unpatched finding is public before the remediation window closesSealed ingress, threshold decryption
G-2The disclosed venue never participates in verifying its own claimRecusal filter at quorum formation
G-3Researcher payout is independent of venue cooperationEscrowed pool, attestation-triggered release
G-4A false claim is more expensive than filing nothingFiler bond, slashing on rejection
G-5Non-participation is observableRegistry coverage flag
G-6Settlement is deterministic and independently recomputableOn-chain certificates, public event log

1.3 Non-goals

  • Glasshouse does not assess individual tokenized securities, issuers, or their underlying equities. The scanned surface is venue infrastructure only.
  • Glasshouse is not a replacement for a pre-deployment audit. It operates against systems already carrying live value.
  • The protocol does not execute, prove, or reproduce exploits against production systems. Verification operates on forked state.
Invariant I-0

No protocol action publishes a finding’s technical payload while the associated remediation window is open and the venue is in ACKNOWLEDGED or PATCHING. This holds regardless of market state.

02 System architecture

Seven components. Three run on-chain as contracts, three are off-chain services with on-chain anchoring, and one is a client library distributed to agent operators.

OFF-CHAIN CONSENSUS ON-CHAIN gh-agent-sdk scanner runtime, signing gh-gateway ingress, rate limit, seal gh-indexer event log, coverage feed gh-panel n-of-m attestors, BLS gh-sandbox forked-state replay gh-vault bonds, stake, slashing gh-market pool, settlement gh-registry disclosures, coverage sealed envelope replay job quorum cert resolve() publish() events → index bond lock
Fig. 1 — Component topology and trust zones

2.1 Components

ComponentRuntimeResponsibility
gh-agent-sdkOperator hostScanner scheduling, finding normalization, envelope construction, submission signing.
gh-gatewayServiceAuthenticated ingress, per-agent rate limiting, envelope sealing, commitment anchoring.
gh-panelAttestor clientThreshold decryption, independent review, severity assignment, BLS partial signature.
gh-sandboxServiceDeterministic forked-state execution of a candidate finding. Never touches production.
gh-vaultContractCustody of filer bonds, attestor stake and venue coverage bonds. Executes slashing.
gh-marketContractPool accounting, position tracking, deterministic settlement from a quorum certificate.
gh-registryContractCanonical disclosure record, remediation deadlines, venue coverage state.

2.2 Trust boundaries

The gateway is trusted for availability but not for integrity: it never holds plaintext it can read alone, and every accepted submission is anchored by a commitment the filer can prove independently. The panel is trusted for correctness under an honest-majority assumption bounded by t of n attestors. Contracts are trusted for execution and hold all custody.

Invariant I-1

A gateway operator acting alone cannot read a finding payload, cannot forge an attestation, and cannot alter a settlement outcome. Gateway compromise degrades liveness, not confidentiality or correctness.

03 Claim lifecycle

A claim is the protocol’s unit of work. It carries a commitment, a sealed payload, a target venue, a bond reference and — after quorum — a certificate. Claims move through a strictly ordered state machine; no transition is reversible except DISPUTED, which re-enters review once.

SEALED TRIAGE ATTESTED WINDOW DISCLOSED SETTLED REJECTED DISPUTED t-of-n expiry | patch quorum fail bond slashed → settle NO re-review, once
Fig. 2 — Claim state machine

3.1 States

StatePayload visibilityMarketExit condition
SEALEDEncrypted, undecryptableClosedGateway anchors commitment
TRIAGEPanel only, threshold-decryptedClosedQuorum reached or review deadline
ATTESTEDPanel onlyClosedCertificate written to registry
WINDOWVenue + panelClosedPatch proof accepted, or deadline expiry
DISCLOSEDPublicOpenTrading period ends
DISPUTEDPublicHaltedSecond review concludes
REJECTEDSealed, permanentlyNever openedTerminal
SETTLEDPublicClosedTerminal
Ordering constraint

The market cannot open before DISCLOSED. This is the structural reason Glasshouse cannot be used to trade on a live unpatched exploit: at every state where the finding is exploitable and secret, there is no market to take a position on.

3.2 Transition rules

// transition guards, evaluated in gh-registry
SEALED   → TRIAGE    requires bond.locked && commitment.anchored
TRIAGE   → ATTESTED  requires |sig| ≥ t && recusal.clean && severity.agreed
TRIAGE   → REJECTED  requires |sig| < t at review.deadline
ATTESTED → WINDOW    auto, deadline = now + window(severity)
WINDOW   → DISCLOSED on patchProof.verified or block.timestamp > deadline
DISCLOSED→ SETTLED   on tradingPeriod.elapsed && !dispute.raised
DISCLOSED→ DISPUTED  on challengeBond.posted within challengeWindow
DISPUTED → SETTLED   on secondReview.final   // no further appeal

04 Sealed ingress

Ingress must satisfy two properties that pull against each other: the protocol has to prove a specific finding existed at a specific time, and no party may be able to read it until the panel is assembled. The first is solved by commitment, the second by threshold encryption.

4.1 Envelope format

// submitted to gh-gateway; only `header` is ever readable pre-quorum
{
  "header": {
    "venue":        "gh:venue:<registry-id>",
    "surface":      "custody" | "matching" | "collateral" | "bridge",
    "claimedSev":   "S0" | "S1" | "S2" | "S3",
    "agent":        "gh:agent:<pubkey-hash>",
    "nonce":        "<uint64>",
    "submittedAt":  "<unix-seconds>"
  },
  "commitment":   "keccak256(payload ‖ salt)",
  "payload":      "<threshold-encrypted blob>",
  "encScheme":    "tpke-bls12381-g1",
  "sig":          "<agent signature over header ‖ commitment>"
}

The header is deliberately coarse. It carries enough for routing, recusal and rate limiting, and not enough to identify the vulnerability class. claimedSev is the filer’s assertion and carries no weight at settlement; the panel assigns the binding severity.

4.2 Commit–reveal

  1. The agent computes C = keccak256(payload ‖ salt) and encrypts payload to the current panel epoch public key.
  2. The gateway anchors C, the header and the agent signature on-chain. The anchoring transaction establishes priority: the earliest anchored commitment for a colliding finding is the one that pays.
  3. At quorum formation, t attestors each contribute a decryption share. Reconstruction happens in the attestor client, never at the gateway.
  4. At disclosure, salt is published, so any observer can recompute C and confirm the published finding is byte-identical to the one committed before review.
Invariant I-2

The disclosed payload always hashes to the commitment anchored at ingress. A panel that alters a finding during review produces a certificate that fails public verification.

05 Attestation layer

Attestation replaces the venue as arbiter. An attestor is an address with stake locked in gh-vault, a published identity commitment, and a disclosed affiliation set used for recusal.

5.1 Quorum and certificates

Each claim draws a panel of n attestors by verifiable random selection seeded on the anchoring block hash, filtered by the recusal predicate. A certificate is valid when at least t partial BLS signatures over the same (claimId, verdict, severity, payloadHash) tuple aggregate successfully.

// aggregate verification, executed on-chain
function verify(
    bytes32 claimId,
    uint8   verdict,        // 0 = reject, 1 = affirm
    uint8   severity,
    bytes32 payloadHash,
    bytes   aggSig,
    uint256 signerBitmap
) returns (bool) {
    require(popcount(signerBitmap) ≥ threshold);
    require(noRecusalViolation(claimId, signerBitmap));
    return blsVerify(aggregateKeys(signerBitmap),
                     digest(claimId, verdict, severity, payloadHash),
                     aggSig);
}

Severity is agreed by median of submitted values among affirming signers, not by unanimity. A signer whose severity deviates by more than one band from the median is recorded; repeated deviation reduces selection weight.

5.2 Severity taxonomy

Generic vulnerability scoring maps poorly onto venue infrastructure, where the meaningful axis is value at risk rather than exploit complexity. Glasshouse uses four bands.

BandDefinitionWindowPool weight
S0Direct loss of custodied assets, or unbacked mint of a tokenized position72h1.00
S1Collateralization can breach threshold undetected; forced liquidation path7d0.65
S2Liquidity or settlement disruption without permanent loss14d0.35
S3Information leakage, accounting drift, degraded controls30d0.15

5.3 Recusal rules

An attestor is excluded from a panel when any of the following holds. Violation is slashable, and detection is retrospective — affiliations are published as commitments and revealed on challenge.

  • The attestor’s disclosed affiliation set intersects the target venue’s operator set.
  • The attestor operates, or shares an operator with, the filing agent.
  • The attestor holds an open position on the claim, or on any claim against the same venue in DISCLOSED.
  • The attestor was slashed within the preceding cooldown period.

06 Remediation window

On attestation the venue receives the finding and a deadline derived from severity. The window is the only period in which the protocol withholds information from the public, and it is bounded on both ends.

  • Acknowledgement. The venue may acknowledge, which is recorded but grants no extension. Silence is not a veto and does not pause the clock.
  • Patch proof. The venue submits a proof of remediation — a deployment reference plus a sandbox re-run that fails to reproduce. Acceptance moves the claim to DISCLOSED immediately, with remediation noted.
  • Expiry. At deadline, disclosure publishes regardless of venue state. There is no extension mechanism and no administrative override.

A venue with a coverage bond may request one extension per claim, capped at the original window, which is drawn against that bond. This is the only cooperation-linked concession in the protocol and it costs the venue capital rather than time granted for free.

07 Market engine

The market prices one proposition: this finding, as disclosed, is a genuine vulnerability of the attested severity against the named venue. It opens only on disclosure and resolves from the certificate.

7.1 Pool mechanics

Positions are parimutuel rather than order-book. A pool avoids the thin-book failure mode that would otherwise let a well-capitalized venue set the price on its own claim, and makes settlement a division rather than a matching problem.

// settlement, YES resolution
poolTotal   = yesStake + noStake
protocolFee = poolTotal × feeRate
distributable = poolTotal − protocolFee

filerShare  = distributable × filerRate × severityWeight
winnerPool  = distributable − filerShare

for each position p in YES:
    payout(p) = winnerPool × (p.stake / yesStake)

The filer’s share scales with attested severity, not with claimed severity or pool size alone. A trivial finding that attracts speculative volume does not pay out like a custody break.

7.2 Settlement

Settlement is a pure function of on-chain state: the certificate, the position ledger and the parameter set at the block the claim was disclosed. Any observer can recompute every payout from public events. Parameters are pinned per-claim at disclosure so a governance change cannot retroactively alter an open market.

Invariant I-3

No settlement path reads venue-supplied data. A venue that refuses to engage entirely cannot delay, block, or alter payout.

08 Collateral and slashing

Three distinct bonds, held by gh-vault, each answering a different failure.

BondPosted byReleased onSlashed on
filerBondAgent operatorAttestation affirmedQuorum rejects; duplicate of an earlier commitment; malformed payload
attestorStakeAttestorUnbonding period after exitRecusal violation; signing a certificate overturned on dispute; liveness failure
coverageBondVenueVoluntary exit after all claims settleExtension draw; failure to honour an accepted remediation commitment
challengeBondChallengerDispute upheldDispute dismissed

Slashed filer bonds do not accrue to the venue under any condition. Routing them to the accused would create a direct incentive to influence rejection. Destination is one of treasury, attestor reward pool, or burn — see §13.

A venue with no coverage bond is not exempt from claims. It is recorded in the registry as coverage: none, which the indexer exposes as a public field. Non-participation is a disclosure, not an escape.

09 Agent interface

Agents are autonomous scanners registered by an operator who posts bond on their behalf. The protocol is indifferent to whether an agent is a model, a fuzzing harness, a static analyzer or a person driving the SDK by hand; it verifies findings, not authorship.

9.1 SDK surface

// gh-agent-sdk, operator-side
const agent = await Glasshouse.register({
  operator:  wallet,
  bond:      parseUnits("...", 6),
  surfaces:  ["custody", "collateral"],
});

agent.on("venue:registered", async (venue) => {
  const findings = await scan(venue.surfaces);
  for (const f of findings) {
    await agent.submit({
      venue:      venue.id,
      surface:    f.surface,
      claimedSev: f.severity,
      payload:    f.report,        // sealed client-side before transit
    });
  }
});

agent.on("claim:attested", (c) => log(c.id, c.severity, c.window));
agent.on("claim:settled",  (c) => log(c.id, c.payout));

9.2 Reputation

Each agent carries a rolling record: submissions, affirmation rate, median attested severity, and slashing history. Reputation is not a score the protocol trusts — it does not gate settlement — but it drives two mechanisms:

  • Bond scaling. Required filerBond is a function of recent affirmation rate. A consistently accurate agent posts less capital per claim.
  • Ingress priority. Under gateway congestion, submissions are ordered by reputation before timestamp, bounded so a new agent cannot be starved indefinitely.

An operator whose agent is rejected repeatedly enters a cooldown during which the agent cannot file. The cooldown is per-agent, not per-operator, and does not transfer on re-registration — identity is bound to the operator’s bonded address.

10 Threat model

IDAdversary and objectiveMitigation
T-1Filer exploits their own finding before disclosure to force a YES resolutionResolution derives from the certificate, not from observed on-chain damage. Exploiting does not change the verdict and forfeits the bond if the finding is withdrawn.
T-2Observer front-runs disclosure by monitoring ingressPayload is threshold-encrypted; header carries no vulnerability class. Anchoring reveals that a claim exists against a venue, not what it is.
T-3Venue infiltrates the panel to force rejectionVerifiable random selection, recusal predicate, slashable affiliation, and dispute path with challenge bond.
T-4Attestor cartel affirms a fabricated finding to drain a poolPublic payload at disclosure; any observer can reproduce in sandbox and raise a dispute. Overturned certificates slash every signer.
T-5Sybil agents flood ingress to degrade the gatewayPer-agent bond, rate limits keyed to bonded address, reputation-ordered admission.
T-6Griefing via duplicate submission of a known findingCommitment priority; later colliding commitments are rejected and bonded capital is slashed.
T-7Venue stalls remediation to run out the market clockDeadline is enforced by block timestamp with no override; expiry publishes.
T-8Governance alters parameters mid-market to change payoutsParameters pin per-claim at disclosure. Live markets are immune to parameter change.
Residual risk

T-4 is bounded but not eliminated: a cartel controlling more than t stake can produce a valid certificate for a false finding, and the protocol relies on the dispute path plus stake loss to make that unprofitable. Attestor set decentralization is therefore a live security parameter, not a launch detail.

11 Parameters

Protocol constants and their intended calibration. Values marked provisional are targets for testnet calibration, not commitments; they are pinned per-claim at disclosure once set.

SymbolMeaningTargetStatus
t / nAttestation threshold over panel size5 / 9Provisional
filerRateShare of distributable pool to the filing operator0.20Provisional
feeRateProtocol fee on pool total—Unset
window(S0..S3)Remediation deadline by severity band72h / 7d / 14d / 30dProvisional
cooldownPost-rejection filing lock, per agent604800sProvisional
reviewDeadlineMaximum time in TRIAGE before auto-reject120hProvisional
challengeWindowDispute period after disclosure48hProvisional
tradingPeriodMarket open duration before settlement—Unset
unbondingAttestor stake withdrawal delay21dProvisional

12 Roadmap

Sequenced by dependency rather than date. Each phase closes on a capability, and no phase that touches live value ships before the phase that verifies it.

Phase 0In progress

Protocol definition

  • State machine, envelope format and certificate schema frozen
  • Severity taxonomy validated against historical venue incidents
  • Threat model reviewed externally; residual risks documented
  • Parameter ranges bounded for testnet calibration
Phase 1Next

Verification core

  • gh-sandbox deterministic forked-state replay across target chains
  • gh-panel attestor client with threshold decryption and BLS aggregation
  • Certificate verification contract, gas-bounded for a 9-signer panel
  • Reproducibility harness: identical certificate from independent replays
Phase 2Planned

Custody and settlement

  • gh-vault bond custody, slashing execution, unbonding queue
  • gh-market parimutuel accounting with per-claim parameter pinning
  • gh-registry disclosure record, deadline enforcement, coverage state
  • Testnet with synthetic venues and seeded findings; end-to-end settlement
Phase 3Planned

Ingress and agents

  • gh-gateway sealing, anchoring, rate limiting, congestion ordering
  • gh-agent-sdk public release with surface adapters
  • Reputation accounting and bond scaling
  • Attestor onboarding: staking, affiliation commitments, selection weighting
Phase 4Planned

Guarded mainnet

  • Capped pools and a permissioned attestor set
  • Venue onboarding with coverage bonds; registry coverage feed public
  • Independent audit of vault, market and certificate verification
  • Dispute path exercised against deliberately seeded false certificates
Phase 5Planned

Open participation

  • Permissionless attestor entry above a stake floor
  • Pool caps lifted; fee parameters set by governance
  • Coverage feed exposed as a consumable signal for external risk systems
  • Cross-venue disclosure correlation

13 Open problems

Recorded rather than deferred quietly. Each blocks a parameter freeze, not the architecture.

RefProblemConstraint
O-1Destination of slashed filer bondsMust not accrue to the accused venue; must not create an incentive for attestors to reject.
O-2Bond size at ingressHigh enough to price out spam, low enough that an unfunded independent researcher can still file.
O-3Whether a filing operator may hold a position on its own claimSelf-dealing versus skin-in-the-game; interacts with T-1.
O-4Attestor compensation sourceFee share, inflation, or challenge-bond capture; must not scale with affirmation rate.
O-5Window length calibrationLong enough for a venue to ship a real fix, short enough that delay is not a strategy.
O-6Coverage bond sizing and venue exit termsMust make participation cheaper than the reputational cost of coverage: none.

14 Glossary

AttestorA staked address selected to review sealed claims and contribute partial signatures to a certificate.
CertificateAn aggregated threshold signature over a claim’s verdict, severity and payload hash. The sole input to settlement.
ClaimThe protocol’s unit of work: a committed, sealed finding against a named venue surface.
CoverageA venue’s participation state in the registry. Absence is recorded, not hidden.
FilerThe operator whose bonded agent submitted a claim.
SurfaceA classified area of venue infrastructure: custody, matching, collateral or bridge.
VenueA platform operating tokenized-equity or RWA trading infrastructure. The unit under scan; never the asset itself.
WindowThe bounded remediation period between attestation and mandatory disclosure.