Learn  ·  Topic 6 of 10

sendcurrency

The PNG you see in the gallery was decrypted from the Verus blockchain three seconds ago.

What it is

sendcurrency is a Verus RPC call that sends value — but it can also attach arbitrary data to the transaction. When the daemon is running with -enablefileencryption and the destination is a shielded z-address, the attached data is encrypted automatically. The format is data: { filename: "image.png" }, and the file contents (up to ~1 MB) are included in the shielded transaction output.

To read the encrypted data, you need the z-address's extended viewing key (EVK). The Sapling EVK reveals all incoming notes to that address — which is exactly why the curator uses a single-purpose z-address that only ever held these 7 deliveries. Publishing the EVK leaks the contents of those 7 transactions and nothing else.

The decryption call is decryptdata, which takes the encrypted objectdata and the EVK and returns the original plaintext bytes. The viewer does this live — every image you see is decrypted from the blockchain in real time via the whitelisted endpoint at rpc.vrsc.syncproof.net.

Why it matters

This is cryptographic proof of delivery. The encrypted bytes are on chain, the viewing key is published, and anyone can run decryptdata to recover the original file. Then they SHA-256 the result and compare against the on-chain image-datahash that the curator signed. If the hashes match, the delivery is proven: the file the curator sent is exactly the file the curator signed.

The pattern generalises. Healthcare records where a patient publishes a scoped viewing key to their doctor. Legal documents delivered with cryptographic proof of content. Evidence chains where the delivery itself is independently verifiable. Any scenario where "I sent you exactly this file" needs to be provable to third parties.

Worked example

The curator sent Destroyer of Fiat's PNG to a single-purpose z-address via sendcurrency:

z-address
zs1lvuwaz6npsfwhcxc6mhxcsr7n8hs7qz4v3wqzewhqm8sk8ygt2p74pk2dqhku7h5dljrwmghc7s
PNG txid
3c3aa7af01ca1d2ea6714fad2cc9d76ee02a1083426a11f80365dd1fa1db7150
filename
Kali-Destroyer-of-Fiat.png
EVK
zxviews1q0gjmgj6qyqqpqrkzas7rfgvksaqsdjfyxu6gt9l8zn8jm6mf36keqv6mljvz0az3vmmwt3787qez35gqxf7jvun2xer8tr0dmsand0rnzmz774aefj0xqg9j22pymgr6vr8jf974ek0e8grmduhg7qx0at5eqvwqukvtuv2dckduwmfux8j76rsmcpk7s03ztc4rpmjgreevxj76xu00mfvp9t4typy4haeaxz4d8xev6pp8dekcz2za76xpd8vnftravsn6w55vfgjg8net

The viewer calls decryptdata with the objectdata from that transaction and the EVK above. The response is raw PNG bytes. It then computes SHA-256 over those bytes:

SHA-256 (BE)
da1c74478f035afe1a4f9cc1499d2e7c1530777241a68b2604ed65aba1aa087a
on-chain (LE)
7a08aaa1ab65ed04268ba641727730157c2e9d49c19c4f1afe5a038f47741cda

Verus stores uint256 values in little-endian byte order. Reverse the SHA-256 bytes and they match the on-chain value exactly. The delivery is verified.

Watch the image decrypt live on the piece page →