๐ The Blaze Papers / Proof of Existence
๐ฅ๐ Proof of Existence
What ๐ฅ The Eternal Flame is doing when it seals a file, what that seal actually proves in front of a sceptic, and โ just as importantly โ the four things people assume it proves that it does not.
๐งพ What a stamp is
๐ฅฑ degen tl;dr
You drop a file. Your browser turns it into a fingerprint โ 64 characters that change completely if you alter one single byte. That fingerprint gets written into a Sonic block, and blocks can't be backdated. So from then on, anyone can prove that file existed by that moment. The file itself never goes anywhere. ๐
๐ค the nerd stuff
The fingerprint is a SHA-256 hash, computed client-side and
chunked so a multi-gigabyte file never needs to be held in memory at once. The
contract stores mapping(bytes32 => Stamp), where a
Stamp is the block number, the block timestamp, the BLAZE burned, the
S contributed and the sealing address โ 32 opaque bytes in, five facts out.
Verification is a single mapping read, which is why it's free and needs no wallet.
We deliberately do not use the browser's built-in
crypto.subtle. It's a one-shot API with no streaming interface, and
it only exists in a secure context โ so it silently fails over plain
http. A notary whose hashing depends on the transport is a notary
that breaks exactly when someone is testing it. The implementation is vendored,
has no network access at all, and a test fails the build if anyone ever gives it
some.
โ What it proves โ and ๐ซ what it doesn't
๐ฅฑ degen tl;dr
It proves: this exact file existed no later than that date. That's it. That's the product.
It does NOT prove: who made it ๐ซ ยท who owns it ๐ซ ยท that anything in it is true ๐ซ ยท anything a court has to accept ๐ซ
It's a cryptographic timestamp, not a legal notary. If you need legal standing, you need an actual notary. We're not one and we won't pretend. ๐ซก
๐ค the nerd stuff
One subtlety that matters and that most timestamp services gloss over: the
stamper field is the payer, not the author.
stamp() is a bare commit with no proof-of-knowledge attached, so a
hash sitting in the mempool is public before it's mined. Anyone watching can
resubmit the same hash with a higher priority fee and be recorded as the sealer,
while the original caller's transaction reverts AlreadyStamped.
Note what that does and doesn't cost: it steals credit, not time. The hash still gets sealed, at the same moment, so the existence proof still exists โ under someone else's name. A salt does not defend against this either: a salt hides the content from guessers, and this hash has already been broadcast.
So read stamper as "the wallet that paid to seal this",
never as "the wallet that made this". That wording is baked into the contract's
own documentation, permanently.
๐ง The catch: guessable content leaks
๐ฅฑ degen tl;dr
A fingerprint only hides things that were hard to guess in the first
place. Seal a 200-page manuscript and nobody's ever finding it. Seal the
sentence I think SONIC hits $2 by December
and anyone who guesses that
exact sentence can fingerprint it themselves and confirm you sealed it.
Fix: add a salt ๐ง โ 16 random bytes mixed in before fingerprinting. Now guessing the content isn't enough. But lose the salt and you lose the proof, so back it up.
๐ค the nerd stuff
This is a dictionary attack on a low-entropy preimage. Hashing isn't encryption: it's one-way, but it's also deterministic and cheap, so an attacker with a candidate list simply hashes the whole list and compares. Short, structured or predictable content has far too little entropy to resist that.
The salt construction is pinned as
SHA-256(salt_bytes โ file_bytes) โ the salt is decoded from hex to
raw bytes and prepended before the content. Because it's prepended, it costs
nothing to apply while streaming, and anyone holding both the file and the salt
can independently recompute the hash forever.
The salt is generated in your browser, stored only in your browser, and is in the JSON export precisely so "back it up" is something you can actually act on.
๐ฅ Why proof costs a burn
๐ฅฑ degen tl;dr
There are two ways to pay, and they do different things with your money โ which is why the page tells you before you pick, not after.
Pay in BLAZE: half is destroyed. Permanently, on chain, unrecoverable by anyone including us. The other half stays with the project. Pay in S: none of it is burned โ all of it stays with the project, earmarked for BLAZE liquidity.
So a BLAZE seal really does shrink the token, by half of what you paid. An S seal doesn't shrink anything; it funds the pool. Both produce exactly the same proof. ๐ฅ
And anyone can add more fire to any stamp, forever โ including total strangers. A stamp with a lot of heat is one that a lot of people spent something real to back. Heat is cost, not truth.
๐ค the nerd stuff
The contract pulls the fee, measures its own balance before and after, and splits what actually arrived โ because BLAZE charges a 0.042% burn tax on transfers while supply is above 3.18e9, so the contract receives slightly less than it pulls. That tax stops permanently below the threshold, and measuring rather than assuming is correct in both worlds. A 420 BLAZE seal today records 209.9118 burned, not 210.
The burn share is BURN_BPS = 5000 โ 50% โ and it is a
constant with no setter. The split between
"burned forever" and "kept by the owner" is the single number a treasury
contract would be most tempted to move, so it was placed beyond reach rather
than merely bounded.
The two backing figures a stamp carries โ BLAZE burned and S contributed โ are stored and displayed separately, never merged. They are two different currencies, and a proof record is not the place to convert one into the other: any rate we applied would be a number the contract never saw. A BLAZE/wS pool exists now (๐ The Price) and it changes nothing here โ a live quote is still our conversion, taken at a moment that has nothing to do with when the stamp was sealed. Printing an invented number on a proof page is precisely what this project refuses to do.
๐๏ธ Sealing a whole folder at once
๐ฅฑ degen tl;dr
Drop 500 files, burn once. Later you can prove one of them was in that batch without revealing โ or even still having โ the other 499. ๐ณ
You get a proof.json when you seal. Keep it. Without
it a batch member can't be proven.
๐ค the nerd stuff
Every file is hashed into a leaf, leaves are folded pairwise into a Merkle tree, and only the root is sealed on-chain. A membership proof is the sibling path from your leaf to the root โ logarithmic in batch size, so a 500-file batch needs 9 hashes, not 499.
The construction is pinned RFC 6962 style, and two of its choices are load-bearing security decisions rather than taste:
Domain separation. Leaves are SHA-256(0x00 โ โฆ) and
internal nodes are SHA-256(0x01 โ left โ right). Without distinct
prefixes, a crafted 65-byte "file" whose bytes equal 0x01 โ left โ
right could be presented as a member of the batch. Different prefixes make
the two spaces disjoint, so no byte string can be read as both.
Odd nodes are promoted, not duplicated. Bitcoin duplicates the
last hash when a level has an odd count, which famously lets two different trees
produce the same root (CVE-2012-2459). Promotion has no such ambiguity โ
[a,b,c] and [a,b,c,c] give different roots here, and
there's a test that says so.
One consequence worth stating plainly: because leaves carry the 0x00
prefix, a file sealed inside a batch does not have the same hash
as the same file sealed on its own. That's intentional โ it keeps the two proof
systems from being mistaken for each other.
๐ Who controls this, exactly
๐ฅฑ degen tl;dr
The BLAZE token has its ownership renounced โ nobody can touch it. This notary, like every other BLAZE dapp, is an owner-controlled contract. We'd rather tell you straight than let you find out later. ๐ซก
The owner CAN: change both prices, but only inside limits fixed in the contract with no setter (1โ420 BLAZE, 0.01โ10 S) ยท pause new stamps ยท withdraw the treasury โ the retained half of every BLAZE fee, and all collected S.
That last one is a real, ongoing power over real funds, and we're not going to describe it as a mistake-recovery hatch. The burned half is different: it's destroyed on chain and nobody can bring it back, us included.
The owner CANNOT: delete, alter, re-date or re-assign any stamp ๐ซ ยท change any stamp's recorded heat ๐ซ ยท stop anyone verifying a stamp that already exists ๐ซ ยท learn anything at all about your file ๐ซ
๐ค the nerd stuff
The guarantee that matters most here is the third one, so it's worth being exact
about why it holds. verify() is a plain view function
and carries no pause modifier, deliberately and permanently.
A notary whose owner could switch off verification would make every proof ever sealed contingent on that owner's continued cooperation โ which is precisely the thing a timestamp exists to eliminate. Pausing halts new stamps and new fire. It cannot un-seal, hide, alter or obscure a stamp that already exists. Sealed is sealed.
The immutability guarantee is structural rather than promised: the stamp mapping has exactly three write sites in the whole contract, no owner-only function touches it at all, and the three fields that constitute the proof โ block, timestamp, sealer โ are written once, inside a branch guarded by a revert-if-already-stamped check.
Heat is monotonic for everyone including the
owner, who can only ever add to it through the same public
addFire anyone else uses.
The contract is audited by AI agents, not by a paid security firm. That is adversarial AI review, which is not the same thing as a firm's audit, and we won't pretend it is.
๐ Checking one yourself
๐ฅฑ degen tl;dr
You don't have to trust our page. Take the file, fingerprint it with any SHA-256 tool on earth, and look the result up on the contract directly via sonicscan.org. Same answer, none of our code involved. ๐ซก
๐ค the nerd stuff
On any Unix-ish machine: sha256sum yourfile (or
shasum -a 256 yourfile on a Mac). Prefix the result with
0x and pass it to verify(bytes32) on the contract's
Read tab on SonicScan. If the file was salted, prepend the raw salt bytes to the
file before hashing โ
cat salt.bin yourfile | sha256sum โ since the pinned construction is
salt-then-content.
This is the property that makes the whole thing worth building: the proof lives on a public chain in a verified contract, so our website is a convenience, not an authority. If sonicblaze.xyz vanished tomorrow, every stamp ever made would still be there and still be checkable.