350 lines
8.9 KiB
JSON
350 lines
8.9 KiB
JSON
{
|
|
"v": 1,
|
|
"kind": "aere-conformance-rules",
|
|
"levels": [
|
|
"integrity",
|
|
"authenticity",
|
|
"anchoring",
|
|
"finality"
|
|
],
|
|
"verifiers": {
|
|
"aip23-envelope": {
|
|
"artifacts": [
|
|
"envelope"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "envelope.form",
|
|
"source": "form",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the envelope has a statement (object) and a statementHash (0x + 64 hex)"
|
|
},
|
|
{
|
|
"id": "envelope.integrity",
|
|
"source": "integrity",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "sha256 of the canonical statement text is the statementHash"
|
|
},
|
|
{
|
|
"id": "envelope.signature",
|
|
"source": "signature",
|
|
"level": "authenticity",
|
|
"sites": 1,
|
|
"says": "the ML-DSA signature the envelope carries verifies over the canonical statement text"
|
|
},
|
|
{
|
|
"id": "envelope.finality",
|
|
"source": "finality",
|
|
"level": "anchoring",
|
|
"sites": 6,
|
|
"says": "the statementHash is recorded in the notary under a state root that a verified post-quantum anchor certificate covers (level by site: see finalitySites)"
|
|
}
|
|
],
|
|
"finalitySites": [
|
|
{
|
|
"site": "most recent anchor did not verify",
|
|
"level": "finality",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "the header the endpoint served for block",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "has no account at",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "is not the AereNotary contract",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "the Merkle proof for block",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": false
|
|
},
|
|
{
|
|
"site": "not notarized:",
|
|
"level": "anchoring",
|
|
"reachableWithAnHonestEndpoint": true
|
|
}
|
|
]
|
|
},
|
|
"payment-risk": {
|
|
"artifacts": [
|
|
"payment-risk"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "risk.form",
|
|
"source": "forma",
|
|
"level": "integrity",
|
|
"sites": 4,
|
|
"says": "payer and payee are addresses; chain, asset, a positive integer amount and the time are given"
|
|
},
|
|
{
|
|
"id": "risk.asset",
|
|
"source": "activ",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the asset on that chain is allowed by the declared policy"
|
|
},
|
|
{
|
|
"id": "risk.counterparty",
|
|
"source": "contrapartida",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the payee is not the payer and is not a refused counterparty of the policy"
|
|
},
|
|
{
|
|
"id": "risk.rate",
|
|
"source": "curs",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the USD rate is declared (value, source, time) when the policy requires it"
|
|
},
|
|
{
|
|
"id": "risk.limit",
|
|
"source": "limita",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the amount in USD is within the per-payment limit of the policy"
|
|
},
|
|
{
|
|
"id": "risk.window",
|
|
"source": "fereastra",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the amount and the count stay within the sliding window of the policy"
|
|
}
|
|
]
|
|
},
|
|
"payment-receipt": {
|
|
"artifacts": [
|
|
"payment-receipt"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "receipt.binding",
|
|
"source": "legatura",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the settlement envelope commits to this instruction and says the same thing"
|
|
},
|
|
{
|
|
"id": "receipt.amount",
|
|
"source": "suma",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the USD amount is the amount at the declared rate, exactly"
|
|
},
|
|
{
|
|
"id": "receipt.policy",
|
|
"source": "politica",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the policy shown hashes to the policy the risk verdict names"
|
|
},
|
|
{
|
|
"id": "receipt.risk",
|
|
"source": "risc",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "the risk verdict reproduces from the inputs and the policy, and it allowed this payment"
|
|
},
|
|
{
|
|
"id": "receipt.chain",
|
|
"source": "lant",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the transaction supplied is this payment: payer, payee, value, block, mined"
|
|
}
|
|
]
|
|
},
|
|
"market-timeline": {
|
|
"artifacts": [
|
|
"market-timeline"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "market.form",
|
|
"source": "forma",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the timeline is well formed: events with name, arguments, sender, integer time and block; the job and the constants with their integer fields"
|
|
},
|
|
{
|
|
"id": "market.complete",
|
|
"source": "intreg",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the timeline carries every event the job state implies: posted; claimed when a provider is set; submitted and disputed when their times are set"
|
|
},
|
|
{
|
|
"id": "market.posting",
|
|
"source": "postare",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the JobPosted event matches the job (requester, spec, deadline, reward)"
|
|
},
|
|
{
|
|
"id": "market.deadline",
|
|
"source": "termen",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "claim and submission are within the deadline; an expiry refund only after it"
|
|
},
|
|
{
|
|
"id": "market.window",
|
|
"source": "fereastra",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "a dispute is raised inside the challenge window; a third party finalizes only after it"
|
|
},
|
|
{
|
|
"id": "market.arbiter",
|
|
"source": "arbitru",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "a dispute is resolved by the arbiter, or timed out only after the arbitration timeout"
|
|
},
|
|
{
|
|
"id": "market.payout",
|
|
"source": "plata",
|
|
"level": "integrity",
|
|
"sites": 4,
|
|
"says": "the terminal payout matches the final state (who, how much, which bond)"
|
|
},
|
|
{
|
|
"id": "market.result",
|
|
"source": "rezultat",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the result bytes hash to the commitment on chain"
|
|
},
|
|
{
|
|
"id": "market.replay",
|
|
"source": "replay",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "the public task recomputed agrees with who was paid or slashed"
|
|
},
|
|
{
|
|
"id": "market.proof",
|
|
"source": "dovada",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the execution envelope names this job and existed before the window closed"
|
|
}
|
|
]
|
|
},
|
|
"dataset": {
|
|
"artifacts": [
|
|
"dataset-record",
|
|
"dataset-answer",
|
|
"dataset-consistency",
|
|
"dataset-sample"
|
|
],
|
|
"rules": [
|
|
{
|
|
"id": "dataset.form",
|
|
"source": "forma",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "a row carries its field commitments and its disclosed fields"
|
|
},
|
|
{
|
|
"id": "dataset.commitment",
|
|
"source": "angajament",
|
|
"level": "integrity",
|
|
"sites": 4,
|
|
"says": "the record, answer or proof names the commitment it is checked against"
|
|
},
|
|
{
|
|
"id": "dataset.field",
|
|
"source": "camp",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "a disclosed value opens its salted field commitment"
|
|
},
|
|
{
|
|
"id": "dataset.inclusion",
|
|
"source": "includere",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "the record is in the log of that version (RFC 9162 inclusion)"
|
|
},
|
|
{
|
|
"id": "dataset.index",
|
|
"source": "index",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "the row is at its stated position of the sorted index"
|
|
},
|
|
{
|
|
"id": "dataset.range",
|
|
"source": "interval",
|
|
"level": "integrity",
|
|
"sites": 2,
|
|
"says": "every row returned is inside the queried range"
|
|
},
|
|
{
|
|
"id": "dataset.order",
|
|
"source": "ordine",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "consecutive rows are in index order"
|
|
},
|
|
{
|
|
"id": "dataset.completeness",
|
|
"source": "completitudine",
|
|
"level": "integrity",
|
|
"sites": 5,
|
|
"says": "the rows are the whole contiguous run; the neighbours on both sides are outside the range"
|
|
},
|
|
{
|
|
"id": "dataset.consistency",
|
|
"source": "consistenta",
|
|
"level": "integrity",
|
|
"sites": 3,
|
|
"says": "the older log is a prefix of the newer (RFC 9162 consistency) and the versions are linked"
|
|
},
|
|
{
|
|
"id": "dataset.sample",
|
|
"source": "esantion",
|
|
"level": "integrity",
|
|
"sites": 1,
|
|
"says": "every sampled position is served and verifies"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"notEnrolled": [
|
|
{
|
|
"verifier": "ai-trust",
|
|
"refusalSites": 20,
|
|
"why": "its refusals already carry a level and a code; enrolling it is a vector per code, not done here"
|
|
},
|
|
{
|
|
"verifier": "agents (ledger)",
|
|
"refusalSites": 17,
|
|
"why": "its refusals are free text; a rule id per refusal comes first"
|
|
},
|
|
{
|
|
"verifier": "identity",
|
|
"refusalSites": 15,
|
|
"why": "its checks are labelled rows, not rule ids"
|
|
},
|
|
{
|
|
"verifier": "verify-layer (log and tree)",
|
|
"refusalSites": 36,
|
|
"why": "its refusals are free text; a rule id per refusal comes first"
|
|
}
|
|
]
|
|
}
|