Tersign Evidence

io.github.tersignhq由 GitHub 帳號 tersignhq 發布v0.6.8更新於 Nov 3, 2026

The record layer for the machine age: counter-signed receipts and agent action records.

概覽

AI 產生的概覽

Tersign Evidence 讓助理簽發、驗證與處理爭議的聯署收據和代理操作紀錄,形成可防竄改的行為與付款憑證。

可以做什麼
  • 簽發與驗證收據:為已結算的付款簽發 x402 收據,離線驗證收據或合規紀錄,並依摘要向帳本查詢
  • 記錄揭露:在本機對揭露文字取摘要,由帳本聯署寫入依簽署者劃分的雜湊鏈
  • 處理退款:針對已在鏈上的收據登錄一筆待處理退款項目
  • 處理爭議:依原因代碼開啟爭議、提交雙方簽章證據、執行確定性分流,並完整讀取爭議內容
適用情境
當代理透過 x402 收款或付款,而你需要每筆交易可被獨立查核的證據時使用;也適合需要留存「已呈現 AI 揭露」的簽章時間憑證,或對已記錄收據登錄退款、進行客觀爭議分流的場景。
執行需求
透過 npx 在本機執行(需 Node.js)。無需設定:未設定 TERSIGN_SELLER_KEY 時,使用 macOS 鑰匙圈或金鑰檔中的金鑰,首次執行會自動產生。選用的 TERSIGN_LEDGER_URL、TERSIGN_LEDGER_API_KEY 與 TERSIGN_LEDGER_SELLER_ID 可啟用聯署、鏈式收據與退款;爭議工具需要帳本位址。簽發者名稱、管轄地與稅號為選用。呼叫帳本需要網路,離線驗證則不需要。
安裝前請注意
伺服器持有簽章金鑰:TERSIGN_SELLER_KEY 或磁碟上產生的金鑰檔,所簽紀錄都代表你自己的陳述。TERSIGN_LEDGER_API_KEY 是帳本上的賣方憑證。紀錄與摘要會傳送到所設定的帳本,由其聯署並公開錨定;揭露文字只在本機取摘要,但摘要會外傳。工具不轉移資金,但 issue_receipt 與 record_refund 會寫入帳本項目,爭議與證據提交也會被記錄為聲明。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Tersign Evidence,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Tersign — the record layer for the machine age]

[npm version] [Apache-2.0 license] [npm provenance attested] [MCP registry]

Tersign is the record layer for the machine age: what AI agents do and pay, counter-signed by a party outside the deal, anchored where no one can move it, checkable by anyone. Machines can generate anything but the past. Sellers sign EIP-712 receipts; Tersign chains them per seller and counter-signs every entry. When the dispute comes, the transcript is already sealed.

Venues rotate. The transcript endures.


Verify a Real Entry — Right Now

No account. No API key. This is the genesis receipt, seq 1 on the production chain. It is a self-signed demo: Tersign signed it as seller and named its own key as payer, so its EIP-712 payload signature (domain {name: "x402 receipt", version: "1", chainId: 1}, per the x402 offer-and-receipt extension) recovers to the payload's own payer, 0x36f82906859E5B0bd076069f8cdfAea355358b14. /v1/genesis serves the record with the recipe for each of its signatures.

sh
npx tersign verify 0xe5874f1ffe87f0a6dd9eb157730f67b86ee4538b125fe30fcc4e165213dd3fc4
text
ledger:    https://tersign.ai           reports: found, counter-signed chain intact (seller tersign-first, seq 1, …) — not checked locallyVALID (ledger-reported) — https://tersign.ai reports the record and its counter-signed chain; nothing was verified locally

npx tersign verify <receipt.json | 0xdigest> [--signer 0xaddr] [--ledger url] takes a receipt file or a digest.

  • A receipt file is checked locally and touches no network unless you add --ledger. The EIP-712 signature is recovered, and --signer compares it with the issuer's address, which you take from the issuer through a channel you trust, never from the receipt. Without --signer the signer is reported UNAUTHENTICATED and the verdict reads VALID (signer UNAUTHENTICATED): recovery yields an address for any payload, so an edited receipt reaches that same line with a different address.
  • A receipt signed with a published test key (the 20 Hardhat/Anvil default dev-mnemonic accounts, or private key 1, 2 or 3) is flagged published test key either way: anyone can produce that signature. Fields in the file that the signature does not cover are listed by name, and a signed field in another JSON type ("version": "1") is refused. The signature must be the one canonical encoding (0x + 130 lower-case hex digits, v 27/28, low-s): a re-encoding of a genuine signature (v 0/1, upper-case hex, the high-s twin) also recovers the issuer, under a different digest, so it is refused.
  • The file is a receipt, {receipt, record}, or an evidence-bundle record file (records/NNNNNN.json, verdict qualified record artifact only: its chain fields are not checked here). Anything else that nests a receipt — a second receipt at the top level, or any other field beside it — is refused, because a reader would take those fields for the receipt that was checked. Duplicate keys and non-integer numbers are refused too.
  • A digest is looked up on the Tersign ledger unless --ledger names another; the answer is that ledger's own counter-signed chain check, nothing in it is re-verified locally, and the verdict says so (VALID (ledger-reported)). The ledger consulted is always printed. The local check is the receipt file with --signer.

Exit status: 0 valid (read the last line — for a file, a bare VALID means a bound, non-test-key signer on a receipt or {receipt, record}; a digest is always VALID (ledger-reported)), 1 invalid, 2 usage (an unknown or valueless flag, --signer with a digest, a missing or non-JSON file). Prefer raw HTTP? The same proof, no CLI:

sh
curl https://tersign.ai/v1/receipts/0xe5874f1ffe87f0a6dd9eb157730f67b86ee4538b125fe30fcc4e165213dd3fc4/verify

One-Call Disclosure Evidence

Counter-signed evidence that your agent presented a disclosure — one command, no account:

sh
npx tersign disclose "You are chatting with an AI assistant." --medium chat --agent-id my-agent

The text is digested locally (only the digest travels — data-minimization by construction). Your key signs the record; the ledger counter-signs it into a per-signer hash chain whose head is submitted for Bitcoin anchoring on a six-hourly cron. The first call self-provisions a free signer-keyed account bound set-once to your key, unless that key is already registered to an API-key ledger account (409: submit through that account) or the day's provisioning caps are reached (429). Key resolution: TERSIGN_SELLER_KEY env → macOS keychain tersign-signer → ~/.tersign/signer.key, created on first use. Free tier is quota- and rate-limited — limits. What this is: independently verifiable evidence the disclosure was attested at that time. What it is not: a compliance certification.

Chain of Custody

Every entry takes the same path: the seller signs the receipt (EIP-712, x402 offer-receipt extension) → Tersign computes the keccak256 canonical digest → the digest joins that seller's hash chain, each seq n bound to seq n−1 → the neutral ledger counter-signs (secp256k1) → anyone verifies, and any venue gets a serialized envelope.

Since 2026-08-28 each anchor stamps a chain commitment — an accumulator over every counter-signed link — so one anchored digest covers the whole prefix; rows anchored earlier bind the head record only and say so (subjectSchema).

mermaid
graph LR    A["agent transaction<br/>x402"] --> B["seller-signed receipt<br/>EIP-712"]    B --> C["canonical digest<br/>keccak256"]    C --> D["per-seller hash chain<br/>seq n binds seq n−1"]    D --> E["neutral counter-signature<br/>secp256k1 ledger"]    E --> F["verifiable by anyone<br/>venue-formatted envelope"]

Diagram renders on GitHub. On npm, the paragraph above IS the diagram.

A refund record references the record it corrects by digest (refundOf). Disputes attach to the digest with objective reason codes. Party statements are structurally segregated behind an UNVERIFIED marker — the evidence stays prompt-injection-hardened.

Enter the Record

sh
npm i tersign

withAssure() wraps your x402 fetch handler. On a settled call it signs a receipt and a compliance-fields record with your key and merges both into the PAYMENT-RESPONSE header, the base64 JSON settlement response x402 wallets already read; the response body is left alone. When it cannot issue them (a settlement network that is neither CAIP-2 nor a v1 name in its table, such as "bsc", or a ledger error), the paid response goes out exactly as your handler returned it, with no receipt, and the error goes to onError (default: console.error); with idempotency on, a retry with the same payment id replays that response. On a 402 it adds compliance-fields to the PAYMENT-REQUIRED header. When the Assure is built with a ledger, the ledger counter-signs the receipt into your chain; the compliance-fields record is not counter-signed, and is bound to its receipt only by your own signature, which covers the receipt's digest. Without a ledger, both carry your signature alone.

ts
import { privateKeyToAccount } from 'viem/accounts';import { Assure, withAssure } from 'tersign';
const signer = privateKeyToAccount(process.env.TERSIGN_SELLER_KEY as `0x${string}`);const assure = new Assure({ signer, issuer: { name: 'Example API Ltd', jurisdiction: 'HK' } });export default { fetch: withAssure(app.fetch, { assure }) }; // app: your x402-protected Hono app

A wallet finds the receipt at extensions["offer-receipt"].info.receipt and the record at extensions["compliance-fields"].info.record of the decoded PAYMENT-RESPONSE (X-PAYMENT-RESPONSE on x402 v1). Sellers whose readers still parse the JSON body can pass legacyBodyPlacement: true for one more minor release.

The full register:

CapabilityIn the record
ReceiptsSeller-signed EIP-712 (x402 offer-receipt extension), keccak256 canonical digests
withAssure()x402 fetch-handler adapter — receipt + compliance-fields record in PAYMENT-RESPONSE on each paid call it can issue for, the paid response passed through unchanged when it cannot; compliance-fields advertised on 402
Compliance-fields recordsMINIMAL tier (Art 226b simplified-invoice content) via buildMinimalRecord · ledger exports format=art226b · format=s51c — mappings, not certifications
Action recordsActionRecordV1 — GDPR-minimized; states that an Art-50 disclosure was presented, with a digest of its text and never the text, signed by the deployer and counter-signed when it reaches the ledger; what it says is still the deployer's own report
RefundsA refund record carries refundOf, the digest of the record it corrects · record_refund logs a pending refund entry on the ledger (not counter-signed); it moves no money
Disputes v0Objective reason codes, signed evidence submission, deterministic triage: fixed rules classify a duplicate charge (R1 reads receipts from one seller to one payer that share one settlement transaction as one payment) or an unanswered claim and record the result as data, not an adjudication; anything else is marked escalated, for an external venue the parties choose
Venue envelopesInternet Court (5,000-char slot) · Kleros ERC-1497 · UMA · generic
Evidence packsformat=art50 · format=safr (beta)
IdempotencyIn-memory + Cloudflare D1 stores
tersign interceptAudit capture at the MCP boundary — a signed, digest-only action record per tool call (experimental)

Capture at the MCP Boundary — tersign intercept

An agent's tool calls are usually recorded, if at all, inside the agent's own code. Record them at the wire instead:

sh
npx tersign intercept -- npx your-mcp-server

The proxy is a pure observer: bytes reach the server and the client exactly as sent, in order, unmodified. It runs on your side with your key, so each record is still your own report. Every tools/call that gets a response becomes an ActionRecordV1 signed by your key and, when a ledger is configured, counter-signed into a hash chain; a call cancelled or never answered leaves no record. Digests only: each record carries a digest of the call's arguments and one of its result or error (canonical JSON), never the content. Records go to a configured ledger, and fall back to a local ~/.tersign/intercepts-<date>.jsonl, where they carry your signature only, so evidence is never silently dropped.

Experimental, and deliberately unopinionated about where the protocol lands: it implements the observation semantics of the audit-mode validator described in MCP SEP-2624 (Draft) as a transport-level proxy today, and is structured to move onto the interceptor primitive if and when that stabilizes. It makes no conformance claim to that draft.

For Agents — the MCP Server

npx tersign starts the MCP server (stdio). Official registry entry: io.github.tersignhq/evidence (active).

json
{  "mcpServers": {    "tersign": {      "command": "npx",      "args": ["tersign"]    }  }}

No configuration is needed. With TERSIGN_SELLER_KEY unset or empty, the server signs with the key in the macOS keychain (tersign-signer) or ~/.tersign/signer.key, and generates one there on first run; the key never leaves your machine. Set TERSIGN_SELLER_KEY only to bring your own.

Tools — issue_receipt · verify_receipt · verify_compliance_record · record_disclosure · record_refund · open_dispute · submit_dispute_evidence · adjudicate_dispute · get_dispute

No tool moves money: issue_receipt and record_refund record payments and refunds that already happened. adjudicate_dispute runs deterministic triage and records its result: fixed rules, stated in the tool's description, classify a duplicate charge or an unanswered claim; the result is data, not an adjudication, and decides no legal claim. The duplicate-charge rule, R1, reads receipts from one seller to one payer that share one settlement transaction as one payment.

Env varRequiredPurpose
TERSIGN_SELLER_KEYnoyour own 0x-prefixed signing key; unset or empty, the keychain or keyfile key is used (generated on first run). If your ledger account has a registered signing key, set that key here: the ledger rejects respondent dispute evidence signed by any other key
TERSIGN_LEDGER_URLnoledger for counter-signing + chain checks; needed by the dispute tools; record_disclosure defaults to https://tersign.ai
TERSIGN_LEDGER_API_KEYnoyour seller API key on that ledger; with the seller id, enables record_refund and chained issue_receipt; also authenticates respondent dispute evidence
TERSIGN_LEDGER_SELLER_IDnoyour seller id on that ledger; with the API key, enables record_refund and chained issue_receipt
TERSIGN_ISSUER_NAMEnoissuer name stamped on action records
TERSIGN_ISSUER_JURISDICTIONnoissuer jurisdiction stamped on action records
TERSIGN_ISSUER_TAX_IDnoissuer tax / business-registration id stamped on action records

Cold to counter-signed in one session, with no configuration: call record_disclosure, then check the digest it returns with npx tersign verify <digest> (a bare digest checks against https://tersign.ai). issue_receipt counter-signs as well once TERSIGN_LEDGER_URL, TERSIGN_LEDGER_API_KEY and TERSIGN_LEDGER_SELLER_ID are set; without them it returns a locally signed, unchained receipt.

The agent skill tersign-evidence ships at tersignhq/skills.

The Live Record

  • Ledger + dashboard — public verify page: https://tersign.ai/verify
  • Census — hash-chained observations across the live x402 seller catalog, probed autonomously; the numbers are served live, never quoted stale: https://prober.tersign.ai/v1/prober/stats
  • Conformance — RFC 8785 (JCS) canonical serialization, keccak256 digests, and the public two-sided vector suite (canonical bytes, number domain, content address, chain continuity, completeness, anchored existence, phase separation, offer binding, independence — every criterion carrying both an accepting and an adversarial vector): tersignhq/evidence-record-conformance. Reproduce the bytes and your implementation is conformant — in any language.
  • Standards — the compliance-fields extension — a typed compliance-record schema plus four evaluator-side disqualifications (independence, completeness/existence, economic-phase separation, and commitment scope — an independence claim reaches exactly as far as the record's own commitments), each executable as a two-sided conformance vector — is under review upstream (x402-foundation/x402#2853) and referenced in the x402 TSC's evidence-record charter agenda (tsc#4). The merged offer-receipt spec already carries post-session verification guidance — signer authorization evaluated as of issuedAt, with mutable-source rotation handled explicitly (#2811, merged); the completeness, independence, existence and phase disqualifications are the open extension's normative core.

Machine Surfaces

Full URLs, readable without auth. If you are an agent, start here.

SurfaceAddress
npm packagetersign — https://www.npmjs.com/package/tersign
MCP registryio.github.tersignhq/evidence — npx tersign needs no configuration; record_disclosure's first call self-provisions a signer-keyed account, unless the key is registered to an API-key account (409) or the daily provisioning caps are reached (429)
ARD catalog (Agentic Resource Discovery)https://tersign.ai/.well-known/ai-catalog.json
Verify APIGET https://tersign.ai/v1/receipts/{digest}/verify
Envelope APIGET https://tersign.ai/v1/receipts/{digest}/envelope?venue={internet-court|kleros|uma|generic}
Ledger statsGET https://tersign.ai/v1/stats
Ledger signerGET https://tersign.ai/v1/ledger
Bundle verifier, out-of-bandFetch the checker from the address the archive's VERIFY.md section 0 names: the content address of the release the archive was built with, https://tersign.ai/verify/sha256/<sha256 of its SHA256SUMS>/ (archives whose VERIFY.md names https://tersign.ai/verify/v1/ use that). Each release serves verify_bundle.py · keccak.py · secp256k1.py · SHA256SUMS, and its files never change; https://tersign.ai/verify/releases.json lists every release. A bundle ships its own checker; for evidence from an interested party fetch that release and diff the two.
llms.txthttps://raw.githubusercontent.com/tersignhq/tersign-js/main/llms.txt
Conformance vectors (RFC 8785 + keccak256, two-sided)https://github.com/tersignhq/evidence-record-conformance
Sample compliance-fields record + digestshttps://github.com/tersignhq/tersign-js/blob/main/test/fixtures/compliance-record.json
Genesis verifynpx tersign verify 0xe5874f1ffe87f0a6dd9eb157730f67b86ee4538b125fe30fcc4e165213dd3fc4

Contributing — read this before opening a pull request

tersignhq/tersign-js is a publish snapshot, not the development repository. Each release overwrites src/, test/ and the packaged manifests wholesale from an upstream working tree, so a pull request opened here cannot be merged in any durable way — the next release would silently erase it. That is a property of the pipeline, not an assessment of the change.

Contributions are wanted; the mechanics just have to route around that:

  • Bugs, questions, spec disagreements — open an issue here. Issues are read, and they are the right surface for anything that does not need to touch this tree.
  • Code changes — open the issue first with the diff or a description. The change is applied upstream preserving your authorship, released, and the issue closed with a link to the version that carries your work. Credit follows commit authorship, not a merge badge.
  • Conformance disagreements — the two-sided vector suite at tersignhq/evidence-record-conformance takes pull requests normally, and is the better venue for "this criterion is wrong" or "here is the case it misses." External vectors have been merged there.

If a maintainer ever asks you to reopen work elsewhere because of this, that is why.


[Tersign seal]

Apache-2.0 from 0.6.1; earlier releases were MIT · built and published from tersignhq/tersign-js via trusted-publishing CI, provenance attested · Python verifier: pip install tersign

Venues rotate. The transcript endures.

來源:README.md,提交 75e3c5c

工具

9

issue_receipt

Issue signed receipt

Issue an x402 offer-receipt (EIP-712) plus a Tersign compliance record (returned as `compliance`; verify_compliance_record checks it) for a payment that has ALREADY settled; when a ledger is configured, the ledger counter-signs the receipt into your hash chain, while the compliance-fields record is not counter-signed and is bound to its receipt only by your own signature, which covers the receipt's digest. Use this for money that moved; use record_disclosure for a non-payment agent action. Recording only: it moves no money and executes no payment. Side effects: signs with your signing key (the one set in the Tersign plugin's settings in Claude Code, or the TERSIGN_* environment variables, else the one generated and kept locally on first run), and performs ONE network write to the ledger when a ledger URL, API key and seller id are set there too (without them it signs locally and returns an unchained artifact). Returns the signed receipt artifact, its keccak256 canonical digest, and — when chained — the ledger counter-signature and sequence number.

輸入參數payer必填txHashnetwork必填currencyprincipalsettledAttaxSchemeresourceUrl必填supplyDescription必填

verify_receipt

Verify signed receipt

Verify an x402 offer-receipt artifact, fully OFFLINE (no network, no API key, no account; checks no ledger or chain): recover the address whose key produced its EIP-712 signature over the six signed payload fields (version, network, resourceUrl, payer, issuedAt, transaction), and compute its canonical digest (the content address a ledger records it under). Recovery yields SOME address for any payload, so without expectedSigner the signer is UNAUTHENTICATED: valid:true then proves neither who signed nor that the receipt is unmodified — an edited receipt recovers a different address and still returns valid:true. Pass expectedSigner, the issuer's address obtained out-of-band, to bind it: valid:true then means the signed fields were signed by that key; a mismatch returns valid:false with the recovered signer so you can see who actually signed. Use this for a receipt (money); use verify_compliance_record for the compliance record issue_receipt returns beside a receipt. Returns { verdict, valid, signer, signerStatus: BOUND | UNAUTHENTICATED | MISMATCH, signerBound, testKey? (the signer is a PUBLISHED test key — anyone can sign as it), digest, unsignedFields? (present in the artifact but not covered by the signature), reason? }. Read verdict first.

輸入參數artifact必填expectedSigner

record_disclosure

Record counter-signed disclosure

One-call disclosure evidence (EU AI Act Art 50 dialect): digests the disclosure text LOCALLY, signs an action record with your key, and the public ledger counter-signs it into your per-signer hash chain. It moves no money. No API key needed — the first call self-provisions a free signer-keyed account, except when your key is already registered to an API-key account (409) or the daily provisioning caps are reached (429; https://tersign.ai/pricing).

輸入參數kindtextmediumagentId必填textDigestresourceUrl

verify_compliance_record

Verify compliance record

Verify ONE record type: the compliance record that issue_receipt returns beside a receipt (`compliance`: a ComplianceRecordV1 `record` plus its ComplianceAttestation `attestation`, EIP-712 domain "compliance-fields"), fully OFFLINE (no network, no API key, no account): recompute the record's canonical digest, check that the attestation's signed payload names that exact digest and the same receiptDigest as the record, and recover the address that signed the attestation. It does NOT verify the disclosure record record_disclosure returns: that is a different record type (an action record, EIP-712 domain "tersign action-record"), and passed here it fails with a digest mismatch that says nothing about tampering. Use verify_receipt for the payment receipt itself. Without expectedSigner the signer is UNAUTHENTICATED and valid:true proves internal consistency only — anyone can edit a record, recompute its digest and re-sign the attestation with their own key, and still get valid:true with a different signer. Pass expectedSigner, obtained out-of-band, to bind authorship. Returns { verdict, valid, signer, signerStatus: BOUND | UNAUTHENTICATED | MISMATCH, signerBound, testKey? (a PUBLISHED test key — anyone can sign as it), digest (the recomputed record digest), reason? }. Read verdict first.

輸入參數record必填attestation必填expectedSigner

record_refund

Record refund

Log a refund against a receipt already on your chain, as the SELLER. The ledger stores it as a PENDING refund entry that references the original receipt digest; the entry is NOT counter-signed or appended to the hash chain, and it has no digest or sequence number of its own. Nothing is edited or deleted: the original receipt and its chain position stay exactly as they were. Requires a ledger URL, API key and seller id (the Tersign plugin's settings in Claude Code, or the TERSIGN_* environment variables) and performs one network write; errors if the original digest is not on your chain. This RECORDS a refund you have already made: it moves no money and executes no payment or refund. For a signed refund RECORD, build a compliance record with refundOf set to the original record digest (buildMinimalRecord in the SDK). Returns { id, status: "pending" }.

輸入參數amount必填reason必填originalDigest必填

open_dispute

Open dispute

Open an objective dispute against a counter-signed receipt as the PAYER (the configured key must be the receipt payer). Reasons: not_delivered, wrong_content, duplicate_charge. Recording only: the ledger records your signed claim and opens an evidence window; it moves no money. The ledger opens a dispute only with room reserved in its dispute capacity for the claim, its triage and each party's first evidence item, the same on every plan; while that capacity is full it opens none (HTTP 503). adjudicate_dispute later runs deterministic triage on it, which classifies a duplicate_charge from the ledger's own receipts only when the disputed receipt carries a settlement transaction hash in 0x-prefixed 64-hex-digit form (either letter case), and escalates it otherwise; classifies an unanswered claim from the seller's silence; and marks anything else escalated, for an external venue the parties choose. Triage's duplicate_charge rule, R1, reads receipts from one seller to one payer that share one settlement transaction as one payment.

輸入參數reason必填statementclaimAmount必填receiptDigest必填

submit_dispute_evidence

Submit dispute evidence

Submit signed evidence to an open dispute before its evidence deadline. Claimant evidence must be signed by the payer key; respondent evidence additionally requires the seller API key (the Tersign plugin's settings in Claude Code, or the TERSIGN_* environment variables). Each artifact is sent as its digest and kind, plus its time and note when given; its content never leaves your side. Triage (adjudicate_dispute) uses only whether each side filed, never the content, kind or note of what was filed; the evidence stays on the record for the parties and any external venue. It moves no money. Each party's first item on a dispute always fits the room reserved for it when the dispute opened; a later item is refused (HTTP 503) while the ledger's dispute capacity is full.

輸入參數role必填artifacts必填disputeDigest必填

adjudicate_dispute

Run dispute triage

Run deterministic triage on an open dispute and record the result. Triage applies fixed rules, stated here, to the dispute record: R1 (duplicate_charge) looks up the receipts the ledger counter-signed for the same seller, payer and settlement transaction hash, reading the hash only in 0x-prefixed 64-hex-digit form and the payer only in 0x-prefixed 40-hex-digit form (either letter case), and lists at most 16 of those receipts, the earliest ones and the disputed one (on a settlement of more than 16 the rationale says "more than 16 receipts" and which are listed, and adjudicationInputs carries sameSettlementTruncated: true), and classifies the disputed receipt refund when an earlier one shares that hash and uphold otherwise; R2 (not_delivered, wrong_content) classifies the claim refund when the seller filed no evidence before the evidence deadline; anything else, including a duplicate_charge receipt without a settlement transaction hash or a payer in those forms, is marked escalated with no result, for an external venue the parties choose. R1 reads receipts from one seller to one payer that share one settlement transaction as one payment. The rules never read the content, kind or note of any evidence, or the claimant's statement; no discretion and no model are involved, and the same inputs always produce the same result and rationale. The result is a triage classification recorded as data: it is not an adjudication, award or legal conclusion, it decides no legal claim, and it binds no one unless the parties separately agree. Side effects: writes the result to the dispute record, signed by the ledger; a refund result also logs a PENDING refund entry against the receipt for the claimed amount (not counter-signed into the chain; no payment is checked and no money moves). Runs once: the first successful call closes the dispute to evidence, and every later call returns 409. This tool sends no API key, so a not_delivered or wrong_content dispute can be triaged only after its

輸入參數disputeDigest必填

get_dispute

Get dispute record

Fetch a dispute in full: its status, claim and evidence deadline, both sides' signed evidence references, and, once triage has run, the triage result (verdict: refund, uphold, or null when escalated), its rationale, the inputs the rules ran on, and the ledger signature over the result. Read-only — one network read, no key required, and safe to poll while a dispute is open.

輸入參數disputeDigest必填

版本歷史

10
  1. v0.6.8最新Oct 29, 2026
  2. v0.6.7Oct 17, 2026
  3. v0.6.6Oct 15, 2026
  4. v0.6.4Oct 12, 2026
  5. v0.6.3Oct 9, 2026
  6. v0.6.2Oct 7, 2026
  7. v0.6.1Oct 2, 2026
  8. v0.6.0Oct 1, 2026
  9. v0.5.0Sep 27, 2026
  10. v0.4.11Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分