尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A methane clause for gas supply contracts that enforces itself: satellite-confirmed leaks rebate the buyer from the seller's bond (IEEE ClimateChain 2026, Track 4)
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A speed camera for methane, written into the gas contract between an EU gas importer and its supplier.
Live demo: the story on a map · try to cheat it (60 s) · full page · your wallet as a witness (10 min)
Satellites confirm a leak → the seller's bond pays the buyer.
No new leak on later passes → the seller earns money back in steps, up to the rebate, from a sponsor's pool (for example its lender's).
No one runs the payout: once enough independent witnesses sign the same sighting and the appeal window passes, the contract pays the buyer from the bond. The seller can appeal — then the witnesses must confirm it again — but cannot delete the sighting or hold the money.
Public satellite records are the cameras; independent witnesses (separate organisations) each fetch the record and sign it; when enough of them sign the same leak and the appeal window passes, the seller's bond pays the buyer — the ticket goes to the buyer, not to a state. A clean pass never undoes a paid rebate or proves a repair; it only earns money back from the sponsor's pool.
The bond is money the seller locks in up front: the ticket is prepaid.
Why each side signs. The buyer, an EU gas importer, must show from 1 Jan 2027 that gas bought under contracts concluded or renewed since 4 Aug 2024 is under producer-level monitoring, reporting and verification equivalent to the EU's (Regulation (EU) 2024/1787, Art. 28); this clause gives it an executable remedy. The seller keeps that buyer, shows a bonded commitment that buyers and lenders can check, and earns part of the rebate back with clean passes.
Runs on Ethereum Sepolia (testnet): a confirmed leak paid the buyer [SIM] (simulated party) a 0.003 ETH rebate from the seller's bond; the same signed record with its leak rate edited was refused and the bond did not move. Transactions: confirmed after the appeal window 0x470bcc…, rebate withdrawn 0xe15306…, refused 0x93a4c8… (receipt status 0, InvalidSignature).
Why now. The UN's alert system (UNEP MARS) lists 1,122 oil and gas sources as quiet (absent: no MARS plume in six months); Carbon Mapper still saw a plume within 1.5 km of 203 of them (CRITERION). A pre-registered forward test projects that a 220-facility clause portfolio [SIM] would stop ~3.4 kt CH₄/yr (~0.10 Mt CO₂e/yr; 95 % ~0.9–6.5 kt), against a stake of ~0.5 Mt CH₄/yr across 428 of those sources (a Carbon Mapper plume any time after MARS's first plume there; low bound; stake, not abatement).
User · data · unit of impact. User: the methane desk of an EU gas importer. Data: Carbon Mapper plumes and scenes joined with UNEP MARS labels. Unit: t CH₄/yr stopped at covered sources, against today's baseline — an alert that pays no one and, where answered, changed Carbon Mapper's detection rate by −0.020 against unanswered sources (95 % CI −0.105 to +0.066: no measurable change) — at USD 0.0055 of ledger calls per projected t CO₂e (forward basis).
k of n: k of the n named witnesses must sign; an appeal needs k + 1. Stake: what those sources emit, not what the clause removes; low bound: the duty cycle's lower confidence limit and a low-percentile rate.
make setup && make test && make demo # Python 3.12 + uv, Foundry; no keys, no accounts
IEEE ClimateChain Global Hackathon 2026 — Track 4, Climate Data & Environmental Monitoring (secondary: Track 1).
spec · SECURITY · ETHICS · DATA ·
FOOTPRINT · SCALING · failure modes · page
hosted and app/.
60 seconds. Open the page with the edit applied (or
make app-preview and its printed ?tamper=A link): the signed rate is edited, the hash and both signatures fail in
your browser and the bond stays — the edit Sepolia refused above.
10 minutes: your own key as a witness. In the judge sandbox [SIM], organisation OBS_JUDGE registers your wallet as a witness:
# a fresh testnet wallet (`cast wallet new`), one faucet drip; never a key with real funds
export JUDGE_PK=0x...
make judge-attest SOURCE=TKM_S_276 && make judge-propose && make judge-tamper && make judge-challenge
# after the sandbox window; then `make judge-cure`: DZA's real relapse, a claim, a pass you sign
make judge-finalize
make judge-local # no test ETH: the same on Anvil
Foundry only, no setup: VERIFY re-reads the refusal, signers, verdict and payout with cast;
who signs what, what the contract decides.
Re-check our record, no key (after make setup): make verify-evidence re-reads each recorded Sepolia
transaction, the deployed code and the signed bundle through a public RPC (OFFLINE=1 replays recorded RPC answers;
only the live run checks the chain).
UNEP's Methane Alert and Response System has issued more than 5,000 satellite alerts across 33 countries and helped trigger more than 40 verified repairs, yet only 13 % of alerts receive a response (UN News, 23 Jul 2026). Answering an alert moved nothing we can measure: in our event study over MARS's notified sources, Carbon Mapper's detection rate changed by −0.020 where the operator or government answered, relative to where nobody did (95 % CI −0.105 to +0.066; 83 and 354 sources; the design detects changes of 0.125 or more). For most alerts no one answers, and the alert itself pays no one. Two public datasets also disagree about the same gas facility:
A buyer who contracted "no super-emitters" has no executable remedy, and any one party's database can drop the record. This clause gives that buyer a remedy that pays.
The methane desk of an EU gas importer (Regulation (EU) 2024/1787) decides each Monday which contracted sources
had an attested re-detection, what rebate is due, which refunds run and what to file. The Commission's model clauses
(Recommendation (EU) 2026/1834) pass information down the chain and leave the money open; this is that clause. It
arrives as the IEA Annex D JSON the page exports and the credit note make demo exports. No system of the importer is
replaced (parallel run). Seller, buyer and sponsor are [SIM]; the plumes, MARS labels, scene records, signatures
and chain execution are real.
| Today | With the clause | |
|---|---|---|
| Signal | a MARS alert to the operator or government; the buyer is not in the loop | a CONFIRMED episode on a contracted source, read on the page or with make verify-evidence |
| Remedy | none in the contract | the rebate withdrawn from the bond, or a credit note citing the verdict |
| Filing | assembled by hand | the IEA Annex D record attached to the Art. 27 report |
not_cloudy flag, the scene footprint over the source's plume origins, no plume on the scene, no UNEP MARS plume within ±7 days, the instrument's detection floor at most the episode's rate — are attested by k observer organisations and count after a clean window open to challenge. At 3, 6 and 10 counted passes, 30 %, 30 % and 40 % of the rebate are scheduled; the last needs two instruments, a MARS corroboration and a 540-day cure term within the covenant term (one-year Sepolia policy: ≤ 60 %; 3-year Sepolia covenant 2: final reachable for episodes to 2027-06-07). The refund never exceeds the episode's rebate, freezes while a new detection is reviewed, and a later attested detection cancels what is unpaid.Each scene rule is a challenge reason anyone can raise in the clean window (CLOUD_FLAG … FLOOR_MISMATCH).
Front words → code names (spec, code, ABI): witness = observer organisation · sighting = episode · confirmed leak =
CONFIRMED episode · appeal window = challenge window · the seller's appeal = contest() · anyone's objection =
challenge() with a reason code · clean pass = qualified clean pass · earn-back = refund (IncentivePool) · earn-back
step = installment · clause = covenant.
On DZA_S_012 (Algeria) the replay counts 8 qualified clean passes (a lower bound) after the 2024-09-29 episode; the relapse on 2026-02-01 cancels the claim: paid 60 %, forfeited 40 %. On TKM_S_276: no attestable clean pass since the 2026-06-11 episode yet. Why the refund is capped: a quiet run is weak evidence: in Carbon Mapper's catalogue (897 cells; all instruments, unqualified passes) the pass after three non-detections still saw a plume 22 % of the time (47/210, 95 % CI 17–29 %), and the passes after longer quiet runs saw one 19–24 % of the time.
| Question | Answer |
|---|---|
| Multiple parties? | Seller, buyer, a sponsor, k of n observer organisations named in the clause (n ≥ k + 2; none is the seller's or the buyer's), open challengers. |
| No trusted operator? | None exists for this function. Registries (MiQ, JOGMEC CLEAN, UNEP MARS) certify and notify but cannot move a seller's money; a bank can move money but cannot adjudicate satellite evidence; a court can do both and takes years. Seller and buyer are counterparties: neither accepts an operator chosen by the other, so the decision has to come from k independent observers plus an open challenge window — which is what the contract executes. |
| Outside verification? | Anyone can re-fetch Carbon Mapper, recompute the canonical bundle hash and challenge an episode or a clean pass with an objective reason code. |
| Fits the ledger? | Only hashes, IDs and money: evidenceHash, sceneHash, policyHash, a Merkle root of covered facilities, the bond, the pool. Raw data stays with the providers and the observers. |
Without the chain, a signed database is run by one of these parties, and that party decides whether a re-detection counts and whether the rebate is paid; here the contract pays on k independent signatures and an open appeal window, and no administrator can touch the funds. The existing registries stay what they are — inputs and certification — and the clause adds the one thing none of them does: executing a counterparty's commitment on an independent re-detection.
Evidence (signed bundles; hashes on chain) → verdict (CONFIRMED / VOID after an open challenge window; on
chain everywhere) → settlement (the money that follows, chosen per jurisdiction). Every rebate leaves a public,
checkable record — which detection, which witnesses, which policy, which payment — that the buyer can file (IEA Annex
D with the EU evidence mapping) and a lender can use as a contract KPI. On chain where a euro token is lawful: a MiCA
euro e-money token (the prototype uses testnet ETH). As a credit note where crypto payments are not: the CBRT
regulation of 16 April 2021 bans crypto-assets in payments in Türkiye, so a Türkiye-type importer's covenant runs
verdict-only and make demo exports its credit note.
The Türkiye ETS (Official Gazette 33353) prices no methane and exempts gas transmission and storage in its first period, so a contractual clause is the methane incentive Turkish gas counterparties have today. Lenders' margins already move on methane intensity (Petrobras 2022 SLL; Gasunie SLB, 10 bp per missed KPI); the pool is that margin step made source- and event-level. Payouts are pulls; AML/KYC on paying a third-country seller is the sponsor's obligation.
Amounts are representative test values; a production clause sets them in euros in the parties' policy.
Production-shaped today: the v1 core (registry admin renounced), provider-agnostic attestations, a policy committed by
hash, verdict-only settlement with a credit note, the IEA Annex D export, a model clause.
Production adds witnesses as separate organisations with their own keys, a commercial data agreement, a second
satellite provider (a NASA EMIT plume reader), a euro e-money token where lawful, a signed pilot. On a permissioned
ledger, Hyperledger Fabric carries the verdict (covenant as chaincode, k-of-n as the endorsement policy of
proposeEpisode, seller and buyer peers excluded) and the rebate follows by instruction; between counterparties
without a shared regulated venue, the parties use a public chain. Details: docs/PRODUCTION.md.
Each observer runs five steps, labelled alike in terminal and page: Fetch → Validate → Seal (RFC 8785 JCS, SHA-256) → Sign (EIP-712, secp256k1 ECDSA on chain; ML-DSA-44 off chain) →
Re-check. Threats, mechanisms and tests: SECURITY.
Observers that disagree produce no quorum. The bond is sized by a rule committed in policyHash.
Assurance. The 11 live Sepolia contracts are source-verified on Etherscan (e.g. MethaneCovenant, IncentivePool); Slither: all 52 findings triaged (9 false positive, 43 accepted), no High or Medium open (slither.md); Halmos: 12 bounded symbolic checks pass (REPORT).
make demo)Four runs on a local chain — a real two-sided replay, the v1 rebate with its refused inputs, a verdict-only covenant with its credit note, and a portfolio covenant — each with its checks and every rejection a failed transaction.
| Run | What happens on chain | Checks |
|---|---|---|
| DZA replay, own chain from 2024-09-01 [SIM clock] | covenant via a SuretyBond (operator's withdraw fails NotFunder); the 2024-09-29 episode CONFIRMED; real passes counted, installments 1–2 released; MARS corroboration; a seeded [SIM] bad pass voided (CLOUD_FLAG); while the relapse is PROPOSED, cancel and release fail SourceUnderReview; then relapse() cancels the real claim (paid 60 %) and a second claim built on today's origin points [SIM look-ahead], whose scheduled final installment is voided before payment; refunds pulled to the surety | 91 checks, 85 txs, 3 status 0 |
| v1, TKM_S_276 | the 2026-06-11 plume → CONFIRMED → rebate withdrawn; InvalidSignature, SelfAttestation, AttestationMismatch, NotCovered, Replay, DuplicateEvidence, RevokedKey; LINKED | 33 checks |
| TKM verdict-only [SIM importer] | no bond; the pool refuses ETH (BadParams); CONFIRMED is the verdict; model-clause Annex C hash read back; credit note round-trips | 11 checks |
| Portfolio, set v3 | one covenant, 205 facilities; a wrong-set proof fails NotCovered; an episode proven by its 8-step path → CONFIRMED → claim | 7 checks |
A fresh clone skips the DZA observer's Re-check step: no raw cache (LIVE=1 or METHANECLAUSE_RAW enables it).
Every rejection is a real failed transaction (receipt status 0) that leaves the bond and the counts unchanged. Every
wait is skipped on a pinned clock that only moves forward, printed as [SIM: chain clock advanced …].
The operator's run, main deployment (make testnet-run, testnet-finalize; record: data/derived/testnet_run.json, rebuilt from the chain):
| Step | Result (status 0: nothing moves) | Transaction |
|---|---|---|
| Seller [SIM] creates the covenant, posts the bond; start backdated to 2026-01-01 [SIM] | bond 0.015 ETH | 0x74edf3… |
| Refused: rate edited 2,548 → 548 kg/h, signatures kept; the seller's key as an observer; a Carbon Mapper twin's id; the same attestation twice | status 0 | InvalidSignature SelfAttestation NotCovered Replay |
| OBS_A + OBS_B sign the bundle → 2-of-3 episode | episode 1 PROPOSED, tier 2 | 0x263e93… |
| Challenge window over → anyone finalizes | CONFIRMED | 0x470bcc… |
| Buyer [SIM] withdraws the rebate | 0.003 ETH paid out | 0xe15306… |
Refund side, by a judge test wallet [SIM] run by the author (observer OBS_JUDGE, judge sandbox, make judge-cure):
the DZA_S_012 relapse of 2026-02-01 (694 kg/h) CONFIRMED 0x978213…; a refund claim opened 0x43845f…; the real 2026-07-13 Tanager clean pass, signed by the test key and observer 1 [SIM], counted after its clean window (10-minute sandbox window [SIM]; one day in the policy) 0x571add… (1 of the 3 the first installment needs).
| Contract | Main (private keys) | Judge sandbox [SIM] (published keys) |
|---|---|---|
MethaneCovenant | 0xcAcB…f5f8 | 0x12B9…0aDa |
KeyRegistry (admin renounced) | 0x8f96…0fc7 | 0x9BEb…0682 |
IncentivePool + 5 libraries | 0x2bEf…6bBc, buyer [SIM] funds 0.001 ETH 0xdfb7e3… | 0x5D32…D982 |
Measured (make measure → data/derived/measurements.json): 138 Sepolia transactions from our addresses (make sepolia-txs); 7 intended reverts, 2 unintended failures, causes in the file. Latency, send → receipt (public RPC): p50 11.03 s, p90 12.28 s (n = 21 logged since 2026-10-15 in sepolia_txlog.jsonl; earlier, n = 43, measured 2026-10-15, raw samples not kept: p50 11.18 s). Evidence bundle: 754 bytes off-chain, only its 32-byte hash on chain.
Gas per call, Sepolia median (USD at 1 gwei and Chainlink's ETH $2,424.39): createCovenant 1,254,826 ($3.04), proposeEpisode 1,340,989 ($3.25), finalize 397,954 ($0.96); Anvil gas and the 23 other calls: FOOTPRINT.
MODEL_CARD). Held out, the rule called zero on passes that still showed a plume 7.2 % / 9.2 % of the time (the reason it is smoothed).From projection to measurement. The pilot replaces both ASSUMPTIONs with its own record: the action share from CONFIRMED episodes followed by qualified clean passes, the time share from a confidence upper bound on how often the source still emits above the floor. Year one reports a measured stop share beside this projection.
| Not evaluated | Why | Instead |
|---|---|---|
| Emission reduction or repair | passes bound how often a source emits above a floor, not its rate | a confidence upper bound, from N clean passes, on how often the source emits above the floor; "observed, not abated" |
| Refunds outside the scene-data scope | scene data only for join candidates and demo cases with a claim | backtest counts rebates set-wide, refunds only there |
| Real parties, independent keys, a legal opinion, a euro token | no partner yet; prototype keys: see Limits | [SIM] roles, the judge's own key, KeyRegistryV2 by majority (Anvil), credit note, testnet ETH; production path |
| Verification time by hand | the manual protocol is not timed yet | the tool path, author-measured, not a user study: median 1.35 s over n = 5 (snapshot) |
Python 3.12 + uv, Foundry 1.8.5 (foundryup -i v1.8.5), curl, free ports ANVIL_PORT and ANVIL_PORT+1
(default 8545/8546).
make setup # Python venv with pinned deps
make test # in a fresh clone of the public export: pipeline 413 passed, 10 skipped; contracts (forge) 308 tests passed, 0 failed
make demo # the four runs in the table above
make check # + judge-local, the strict audit, wording, links, secrets; page and builder tests: 174 passed, 7 skipped
make reproduce re-fetches the data (keyless, cached in data/raw/, never committed) and diffs every number
against data/derived/audit_numbers.json. Decisions: contracts/README.md, pipeline/README.md.
make demo and the Sepolia deployments run the prototype policy's 2 of 3 (POLICY_V2); a production clause names at least k + 2 observer organisations, so a contest, which needs k + 1 of them, keeps a spare (PRODUCTION, item 8).createdAt is real
and later than the plumes and passes it settles (starts backdated [SIM]). These runs prove the mechanism, not the
absence of foreknowledge; the chain shows the plume was public first.docs/preregistration.md and the paper.One student, with AI assistance: Anthropic's Claude models wrote most of the code and documents under the author's direction (one model planned and reviewed, another built, in three parallel workstreams); reviewer agents read each result before it was accepted, and their findings withdrew figures. ChatGPT gave research leads, checked before use. The author made every decision. Every result of ours quoted here is generated from committed files, and every transaction is real.
Code: MIT (LICENSE). Data in data/derived/: Data by Carbon Mapper® (Carbon Mapper Terms of Use:
non-commercial, attribution, redistribution under the same terms) and UNEP IMEO MARS (CC BY-NC-SA 4.0) — see
data/derived/DATA_LICENSE.md.
pipeline/projection.py, data/derived/projection.json (forward); what was fixed before computing, with its hashes: docs/preregistration.md.