Learn  ·  Topic 3 of 10

signdata

Six pieces of data, one signature, one provable tree.

What it is

signdata is a Verus RPC call that builds a Merkle Mountain Range (MMR) over a set of data leaves, then signs the root hash with a VerusID's private key. The result is a compact cryptographic commitment: one signature that covers every leaf atomically.

In Bitcoin Kali, each piece has six leaves:

  1. name — the Sanskrit epithet (e.g. "Mahāmāyā")
  2. description — the devotional verse
  3. attributes — generative metadata as JSON
  4. image-datahash — the SHA-256 of the PNG file
  5. rights — the on-chain rights assertion
  6. delivery — z-address, EVK, txid, filename

The signature is bound to a specific VDXF key (i5mntfEpcAWot1dses5qu3hGom3y7r6VHmseries1), scoping it to this project's data schema.

Why it matters

Because the MMR covers all six fields, tampering with any single leaf changes the root hash and breaks the signature. The curator can't sign the name and image but leave the rights unsigned — it's all or nothing. And because the signature is bound to a named VDXF key, verifiers know exactly which schema the signature applies to.

This atomic signing pattern extends naturally to any domain where multiple fields need joint provenance: an audit report with findings and recommendations, a medical record with diagnosis and treatment, a supply chain certificate with origin and test results.

Worked example

The curator kali.bitcoins@ (i5FXH74Xnqm3AS6iWJSLoMW1PZaev2F1bj) signed piece 1 (Destroyer of Fiat) at block height 4022271. The resulting outputs:

mmrroot
020bd9feddc5fde8e7f8a16be7a99e0044c83544f24d01cf01324ff73093bf00
vdxfkeys
["i5mntfEpcAWot1dses5qu3hGom3y7r6VHm"]
signer
i5FXH74Xnqm3AS6iWJSLoMW1PZaev2F1bj

The signature, the mmrroot, and a crosschaindataref pointing to the full mmrdescriptor are all stored in the piece's contentmultimap under the series1.provenance label (i58zX14hJD7TqbLsnKMN6RHyPxtUC3jExx).

The mmrdescriptor itself — containing the per-leaf salts needed to reconstruct the tree — is delivered via sendcurrency to a shielded transaction: be429f049365e4556becc05da181839e1ba6f999ae9f3999b615bb55db54276d.

Watch the verification theatre reconstruct this proof →