Data Attestation

Anyone can submit data to the Vana network. However, for data to be considered valid by a DLP, it must be attested for by a trusted party, i.e. in a DLP. These trusted parties issue an attestation to prove that this data is, in fact, authentic, high-quality, unique, and has whatever other properties DLPs value in its data contributions.

Data attestations live offchain, and a URL to a data's attestation is written onchain alongside the data itself.

Attestation Schema

The attestation of a data point must follow a spec. Attestations show relevant information about how the data was evaluated, proof-of-contribution scores, integrity checksums, and custom metadata relevant to a specific DLP.

An example of when this would be useful: consider a ChatGPT DLP that accepts GDPR exports from chatgpt.com. Say the DLP considers the export to be high quality when the number of conversations in the export exceeds 10. This DLP can insert numberOfConversations: xxx in the attestation when Proof of Contribution is run, and anyone can see how valuable that encrypted data point is.

Schema

  • signed_fields Contains the main data fields that are signed by the prover.

    • subject Information about the datapoint being attested for.

      • url URL where the encrypted file lives.

      • owner_address Wallet address of the file owner.

      • decrypted_file_checksum Checksum of the decrypted file for integrity verification.

      • encrypted_file_checksum Checksum of the encrypted file for integrity verification.

      • encryption_seed The message that was signed by the owner to retrieve the encryption key.

    • prover Information about the prover.

      • type Type of the prover, satya is one of the confidential TEE nodes in the Satya network. Proofs can also be self-signed where the data owner generates the proof.

      • address Wallet address of the prover.

      • url URL or address where the prover service is hosted.

    • proof Details about the generated proof.

      • image_url Docker image URL of where the instructions to generate the proof is downloaded from

      • created_at Timestamp of when the proof was created.

      • duration Duration of the proof generation process, in seconds.

      • dlp_id DLP ID from the Root Network Contract, this is used to tie the proof to a DLP.

      • valid Boolean indicating if the subject is valid.

      • score Overall score of the subject, from 0-1.

      • authenticity Authenticity score of the subject, from 0-1.

      • ownership Ownership score of the subject, from 0-1.

      • quality Quality score of the subject, from 0-1.

      • uniqueness Uniqueness score of the subject, from 0-1.

      • attributes Additional key/value pairs that will be available on the public proof. These can be used to quickly view properties about the encrypted subject.

  • signature Generated by the prover signing a stringified representation of signed_fields, sorted by the key name. To verify it, we can take the signature and the striningifed representation, and extract the address that signed it, which should match the prover.address.

Sample Attestation

{
  "signed_fields": {
    "subject": {
      "url": "https://drive.google.com/uc?export=download&id=1VZo7xNqjUwZq-JLdQ8w0pyYcygOIkz43",
      "owner_address": "0xD867102a1955046F3190c89c48D9f0CE79D6Bda7",
      "decrypted_file_checksum": "f5b21ff47184fb726101804ab59deb6b1df28c160b47bec03121489f356ef6a9",
      "encrypted_file_checksum": "27b257fe397947c12475db63bc8d40449fe1ff128ef15ab676ab95b7f371c6f1",
      "encryption_seed": "Please sign to retrieve your encryption key"
    },
    "prover": {
      "type": "satya",
      "address": "0x2B1A9C62397e77Fa365ef95010e27D4eF3de0c55",
      "url": "https://172.191.63.53:8091"
    },
    "proof": {
      "image_url": "https://github.com/vana-com/vana-satya-proof-template/releases/download/v20/gsc-my-proof-20.tar.gz",
      "proof_enclave": null,
      "created_at": 1726369955,
      "duration": 8.00402045249939,
      "dlp_id": 1234,
      "valid": false,
      "score": 0.7614457831325301,
      "authenticity": 1.0,
      "ownership": 1.0,
      "quality": 0.6024096385542169,
      "uniqueness": 0,
      "attributes": {
        "total_score": 0.5,
        "score_threshold": 0.83,
        "email_verified": true
      }
    }
  },
  "signature": "0x0x96594c078a576167733c6219dcb1c7fc34c7cadbe96eabceb695b995405c90ed7923954a7891661cd2cc7c7050582c0c5dfb995922b6e6f817d2a42beef69d181b"
}

Last updated