Skip to content

Submit Data

This guide walks through the full submission lifecycle: finding an open target, scoring your data against it, submitting on-chain, and claiming your reward.

  1. Each epoch, validators generate new targets. Query the network for targets that are still accepting submissions.

    Terminal window
    soma target list --status open
  2. Before scoring, fetch the manifests for the models associated with your target. Manifests tell you where to download model weights and how to verify them.

    manifests = await client.get_model_manifests(target)

    Each ModelManifest contains:

    FieldDescription
    urlDownload URL for the model weights
    checksumHash to verify the download
    sizeFile size in bytes
    decryption_keyKey to decrypt the weights after download
  3. Run the target’s models against your data to compute an embedding and distance score. Lower distance means your data is closer to what the network needs.

    Terminal window
    soma target score --target-id <id> --data-url <url>
  4. Compute a commitment hash for your data, upload it to an accessible URL, then submit on-chain.

    Terminal window
    soma target submit \
    --target-id <id> \
    --data-commitment <hex> \
    --data-url <url> \
    --data-checksum <hex> \
    --data-size <bytes> \
    --model-id <model_id> \
    --embedding <comma-separated-floats> \
    --distance-score <float> \
    --bond-coin <coin_id>

    The bond amount is specified in shannons (1 SOMA = 1,000,000,000 shannons). Convert with:

    bond_in_soma = SomaClient.to_soma(target.bond_amount)

    Verify your submission was recorded:

    Terminal window
    soma target info <target_id>
  5. After the challenge window closes (2 epochs after submission), the winning submitter can claim their reward.

    Terminal window
    soma target claim <target_id>

    Verify your balance updated:

    Terminal window
    soma client balance