Payout in 2 hours, rules as written
The text you sign is exactly the text that stays here. Word for word.
Programs
Compare the four programsCompany
Talk to usEvery payout on a public ledger, each one with a certificate you can verify.
Guides, rule explainers and platform updates, written by the desk.
Open roles across trading, risk, support and engineering.
Support, partnerships and press — one form, answered by people.
What changed on the platform and in the rules, dated and public.
A review ledger anchored on-chain
Only a customer who bought an account can write one. They sign it with their own device, its fingerprint goes on-chain, and next to each review you see how the account really ended. Dolvero can reply, but cannot quietly change a thing.
Audit
This page does not ask for trust, it asks to be checked. Press the button: your browser downloads the public ledger, then asks Base and Arweave directly, not our server, whether they hold the same root. None of it can be faked by us.
Live check · runs in your browser
Your browser downloads the public ledger, then asks Arweave and a Base network node directly, not our server, whether they hold the same daily root. The result is the verification record on the right, raw network replies included.
Open your developer tools and watch the network requests.

The daily ledger root is written into a Bitcoin block: proof the root existed by the block time, independent of us.
ots verify day.root.otsmempool.space ↗Every daily root, review and reply gets a public attestation on Base (an Ethereum L2). It cannot be revoked or changed.
0x97FAeCe4…Schema ↗A permanent copy of every daily root and every signed review. Paid once, stored for good, not deletable even by Dolvero.
vFhb7afURc…viewblock ↗Monthly transparency reports
Every month we count what happened in the ledger: how many reviews came in, how many we hid and why, how many times we replied. A closed month is written into the ledger as a leaf and cannot be rewritten.
How a month closes
Badge for your site
For partners and comparison sites: one line of script, the figures come from the public ledger every 5 minutes. No cookies, no visitor tracking.
<script src="https://dolvero.com/trust-badge.js" data-theme="light" data-lang="en" async></script>Specification
dolvero.leaf.v1sha256(0x00 ‖ "dolvero.leaf.v1" ‖ salt ‖ sha256(payload))sha256(0x01 ‖ left ‖ right)depth 16, random padding, one seal a day even with no records; neither the root nor the paths reveal how many records there areots verify day.root.ots · .root file via &what=root0x0f2a83ff4bb9… · bytes32 payloadSha, bytes32 leafHash, string kind, string ref, uint64 tsApp-Name: Dolvero-Trust// independent check of one record
const {createHash} = require('crypto');
const h = (...p) => createHash('sha256').update(Buffer.concat(p)).digest();
const canon = v => Array.isArray(v) ? '[' + v.map(canon).join(',') + ']'
: v && typeof v === 'object' ? '{' + Object.keys(v).sort().map(k => JSON.stringify(k) + ':' + canon(v[k])).join(',') + '}'
: JSON.stringify(v);
const feed = await (await fetch('https://dolvero.com/trust-feed.json')).json();
const r = feed.reviews.find(x => x.leaf && x.leaf.sealed);
const payload = canon({v: 1, kind: 'review', review: JSON.parse(r.payload), signature: r.signature});
let node = h(Buffer.from([0]), Buffer.from('dolvero.leaf.v1'), Buffer.from(r.leaf.salt, 'hex'), h(Buffer.from(payload)));
for (const s of r.leaf.path) node = s.side === 'L'
? h(Buffer.from([1]), Buffer.from(s.hash, 'hex'), node)
: h(Buffer.from([1]), node, Buffer.from(s.hash, 'hex'));
console.log(node.toString('hex') === r.leaf.root ? 'root matches' : 'MISMATCH');Questions
Short answers, no hashes. The technical detail is in the specification above.
Good or bad, it stays exactly as you sign it. Dolvero can reply, nobody can delete.