Attestations
An attestation associates a key-value pair with an identity. For example, hosts
attest to their network address by pairing it with the key "HostAnnouncement"
.
Renters and other clients can then discover hosts by scanning the blockchain for
attestations with this key. And since attestations include a public key and
signature, the renter can verify that the host they connect to is the same host
that created the attestation.
Attestations are a fairly generic affordance, so their semantics are governed by convention. One common convention is that an attestation for a particular key is considered to overwrite any previous attestations with the same key. (This allows hosts to announce a new network address, for example.)
Attestations are included as elements in the Accumulator, and the State also tracks the total number of attestations. This allows a light client to trustlessly download any subset of attestations from a peer or an explorer. Verification of the subset is via multiproof; committing to the total number of attestations prevents the counterparty from omitting any attestations in their response.
In v1
Attestations formalize a common use of Arbitrary Data in
v1, namely host announcements. These would be encoded as an opaque binary blob
and placed in the arbitrary data field. Renters would then scan for arbitrary
data that began with "HostAnnouncement"
and interpret the subsequent bytes as
an announcement object.