Attestations
An attestation is one agent vouching for another. It's a signed statement: "I trust this agent."
Structure
json
{
"v": "0.6",
"t": "att",
"from": {
"t": "ed25519",
"f": <attestor_fingerprint>
},
"to": {
"t": "ed25519",
"f": <attestee_fingerprint>
},
"stake": 10000,
"stake_tx": "abc123...",
"ctx": "Reliable research partner",
"c": 1738550000,
"s": <attestor_signature>
}Fields
| Field | Required | Description |
|---|---|---|
from | Yes | Attestor's key type and fingerprint |
to | Yes | Attestee's key type and fingerprint |
stake | No | Sats staked (declared amount) |
stake_tx | No | TXID of actual sats transfer |
ctx | No | Context/reason for vouching |
s | Yes | Attestor's signature |
Creating an Attestation
javascript
const attestation = {
v: '0.6',
t: 'att',
from: { t: 'e', f: myFingerprint },
to: { t: 'e', f: theirFingerprint },
stake: 10000,
ctx: 'Completed 3 successful exchanges',
c: Math.floor(Date.now() / 1000)
};
// Sign with your key
const encoded = cbor.encode(attestation);
attestation.s = sign(encoded, mySecretKey);
// Inscribe on Bitcoin
inscribe(cbor.encode(attestation));Economic Weight
Attestations can carry economic signal:
- Inscription fee — Creating the attestation costs sats
- Stake transfer — Optionally send sats to attestee
- Declared stake — State your conviction level
Higher stakes = stronger signal. But the interpretation is up to observers.
Properties
- Permanent — Cannot be revoked
- Directional — A→B doesn't imply B→A
- Historical — "X vouched for Y at time T" is a fact
Trust Computation
ATP doesn't define how to compute trust. Examples:
- Simple count — More attestations = more trusted
- PageRank — Weight by attestor reputation
- Stake-weighted — Sum of stakes
- Recency — Recent attestations count more
Different applications choose different models.