Zcash
Testnet proof
Three shielded transactions the browser wallet built, proved and broadcast on Zcash testnet, and a script to check them yourself.
The browser wallet built, proved and broadcast these Ironwood spends on Zcash testnet (NU7 is active there). Each one was read back from the same light server the wallet syncs from.
Zcash testnet · GetTransactionThree sends from the browser wallet
ceb45a85df00f55d8a7b6c4318c65aa22c33c702a4bff476c2feef0dee7d4e5d- block 4,529,708
c1569f9f34a75c6896b272f7804ed501285acbfb472ce1dcf53fc869fa6938e2- block 4,529,789
8a14a08bc1af88c6b8f644fdc22d11731e431a8b2257fccac4a3768430981b86- block 4,529,846
Public testnet explorers follow an older testnet chain, so they don't show these. The light server does.
Check them yourself
GetTransaction takes the transaction id with its bytes reversed. This asks the light server for each one and prints
the block height and the size; it needs only Python.
import struct, urllib.request
URL = "https://zcash-testnet.chainsafe.dev/cash.z.wallet.sdk.rpc.CompactTxStreamer/GetTransaction"
TXIDS = [
"ceb45a85df00f55d8a7b6c4318c65aa22c33c702a4bff476c2feef0dee7d4e5d",
"c1569f9f34a75c6896b272f7804ed501285acbfb472ce1dcf53fc869fa6938e2",
"8a14a08bc1af88c6b8f644fdc22d11731e431a8b2257fccac4a3768430981b86",
]
def varint(buf, i):
value = shift = 0
while True:
byte = buf[i]; i += 1
value |= (byte & 0x7F) << shift; shift += 7
if byte < 0x80:
return value, i
for txid in TXIDS:
filt = bytes([0x1A, 32]) + bytes.fromhex(txid)[::-1] # TxFilter.hash, reversed
frame = b"\x00" + struct.pack(">I", len(filt)) + filt # one gRPC-web frame
req = urllib.request.Request(URL, data=frame, method="POST", headers={
"content-type": "application/grpc-web+proto", "x-grpc-web": "1"})
body = urllib.request.urlopen(req, timeout=30).read()
msg = body[5:5 + struct.unpack(">I", body[1:5])[0]] # RawTransaction
i = size = height = 0
while i < len(msg):
tag = msg[i]; i += 1
if tag >> 3 == 1: # data
size, i = varint(msg, i); i += size
else: # height
height, i = varint(msg, i)
print(txid[:16], "block", height, size, "bytes")Timings measured on testnet
| Step | Time | Source |
|---|---|---|
| Orchard proving key warm-up | 11.8 s | README evidence table, 2026-10-23 |
| One proof, single-threaded | about 17.5 s | README evidence table |
| Testnet block spacing | about 22–25 s | packages/engine/src/constants.ts |