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. These trusted parties issue an attestation about the data to prove that it is, in fact, authentic, high-quality, unique, and has whatever other properties DLPs value in its data contributions.

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

A DLP that uses TEE validators gets its data contributions attested for (in blue)

A DLP that uses TEE validators gets its data contributions attested for (in blue)

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.
    • subjectInformation about the datapoint being attested for.
    • url URL where the encrypted file lives.
    • file_id The ID of the file, given by the Data Registry
    • 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.
    • metadata* Key/value metadata about the proof that is written onchain.
  • 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 stringified representation, and extract the address that signed it, which should match the prover.address.

📘

Note

The score and metadata fields are written onchain, and a DLP can use these fields to calculate how many DLP-specific tokens should be issued as a reward to the data contributor for their contribution.

Sample Attestation

{  
  "signed_fields": {  
    "subject": {  
      "file_id": 18,  
      "url": "<https://drive.google.com/uc?export=download&id=1E0piiDCaHWgNPqlZdu937pALQt8CeROj">,  
      "owner_address": "0x34529235dAF0B317D30F8e3120Ef04Dff59aB411",  
      "decrypted_file_checksum": "f5b21ff47184fb726101804ab59deb6b1df28c160b47bec03121489f356ef6a9",  
      "encrypted_file_checksum": "33c26529712db36c46aa1bd75d35bfe3b5ec6cfd781ee13694cf327a8861087b",  
      "encryption_seed": "Please sign to retrieve your encryption key"  
    },  
    "prover": {  
      "type": "satya",  
      "address": "0x2B1A9C62397e77Fa365ef95010e27D4eF3de0c55",  
      "url": "<http://172.191.63.53:8091">  
    },  
    "proof": {  
      "image_url": "<https://github.com/vana-com/vana-satya-proof-template/releases/download/v24/gsc-my-proof-24.tar.gz">,  
      "created_at": 1727408053,  
      "duration": 9.1242094039917,  
      "dlp_id": 1234,  
      "valid": false,  
      "score": 0.8411764705882352,  
      "authenticity": 0,  
      "ownership": 1,  
      "quality": 0.7352941176470588,  
      "uniqueness": 0,  
      "attributes": {  
        "total_score": 0.5,  
        "score_threshold": 0.68,  
        "email_verified": true  
      },  
      "metadata": {  
        "dlp_id": 1234  
      }  
    }  
  },  
  "signature": "0xbd0905b9f41d773b25b7ebeb194fafd4475107e1bc5f520ce1ebfaa0d3c362177cf06f8127a9fe07eec95f02d21f2ed893a473cf88e01e0f701460b848fe324b1c"  
}