Prove your data hasn't changed. No middleman.
Provifier lets any application hash its data and commit that hash on-chain. Verification is trustless: re-hash locally, compare to the blockchain. No data goes on-chain — only 64-character SHA-256 hashes.
How it works
Your app calls Provifier.hashRecord(table, rowId, data). Domain-separated SHA-256 ensures hashes are unique per table and row — no cross-protocol collisions.
The hash is signed and submitted to Sui, Solana, Ethereum, Polygon, or Base. Server-side with a private key, or client-side via the user's wallet — your choice.
Re-hash the data, fetch the on-chain event, compare. If they match, the data is authentic and hasn't been tampered with since commitment. Fully trustless — the blockchain is the referee.
Key features
Sui, Solana, Ethereum, Polygon, Base
Commit thousands of records in one transaction
Users commit from their own wallet (Sui)
Hashes scoped by table + row ID
Only 64-char hashes, never your data
Free, open source, no lock-in
Hashes live on-chain forever. Verify without provifier.com
Quick start
npm install @provifier/sdk
const { Provifier } = require('@provifier/sdk');
const p = new Provifier({
chain: 'sui', // or 'solana', 'ethereum', 'polygon', 'base'
network: 'testnet',
privateKey: process.env.SUI_PRIVATE_KEY,
packageId: '0x...', // Sui only — deployed Move contract
});
// Commit a record
const receipt = await p.commit({
table: 'documents',
rowId: 'doc-7',
data: documentContent,
});
console.log(receipt.txDigest); // Sui transaction digest
console.log(receipt.explorerUrl); // https://suiscan.xyz/testnet/tx/...
// Verify later — trustless
const result = await p.verify({
table: 'documents',
rowId: 'doc-7',
data: documentContent,
txDigest: receipt.txDigest,
});
console.log(result.valid); // true
Batch commits (Merkle tree)
Commit many records in a single transaction. Each entry gets a Merkle proof for individual verification.
const batch = await p.commitBatch({
entries: [
{ table: 'users', rowId: '1', data: JSON.stringify(user1) },
{ table: 'users', rowId: '2', data: JSON.stringify(user2) },
{ table: 'users', rowId: '3', data: JSON.stringify(user3) },
],
});
// Verify one entry from the batch
const result = await p.verify({
table: 'users',
rowId: '2',
data: JSON.stringify(user2),
merkleProof: batch.receipts[1].merkleProof,
merkleRoot: batch.receipts[1].merkleRoot,
txDigest: batch.txDigest,
});
console.log(result.valid); // true
Client-side wallet signing
For dApps where the user commits from their own wallet — maximum trust, zero server dependency.
const p = new Provifier({
chain: 'sui',
network: 'mainnet',
packageId: '0x...',
// No privateKey — client-side mode
});
const { transaction, hash } = p.buildCommitTx({
table: 'documents',
rowId: 'doc-7',
data: documentContent,
});
// Pass to user's wallet (Sui Wallet, Suiet, zkLogin)
const result = await wallet.signAndExecuteTransaction({
transaction,
});
Multi-chain
Move contract with typed events
Client-side wallet signing
~$0.001 per commit
RecommendedSPL Memo — no deploy needed
Lowest possible cost
~$0.0005 per commit
Zero setupInput data memo — no contract
Highest security guarantees
~$0.50+ per commit
Self-host / SDKInput data memo — no contract
EVM-compatible, low cost
~$0.01 per commit
Self-host / SDKInput data memo — no contract
Coinbase L2, fast finality
~$0.001 per commit
Zero setupUse cases
Games, social platforms, and NFT marketplaces store most data off-chain for cost and speed. Provifier lets users independently verify that their inventory, profile, or listing data hasn't been silently altered by the platform — re-hash locally, compare to the blockchain.
Financial records, healthcare data, and legal documents require proof that data existed in a specific state at a specific time. Provifier anchors SHA-256 hashes with on-chain timestamps — auditors verify directly against the blockchain without trusting your internal systems.
Hash shipment manifests, quality certificates, and IoT sensor readings at each checkpoint in your supply chain. Each commit creates an immutable waypoint — if any record is altered between checkpoints, re-hashing reveals the tampering instantly. No centralized authority required.
Commit hashes of your infrastructure configs, Terraform state, Kubernetes manifests, and deployment artifacts at release time. On any subsequent audit, re-hash the live files and compare — unauthorized modifications are detected with cryptographic certainty, not just heuristic diff tools.
Contracts, research papers, IP filings, and creative works can be timestamped with a single hash commit. The on-chain timestamp proves the document existed in its exact form at that moment — establishing priority, preventing backdating, and creating admissible digital evidence.
Periodically hash critical database tables and commit the root. If a breach, insider threat, or software bug silently corrupts records, the next verification cycle catches it — even if the attacker covered their tracks in application logs. Works with any database that can export rows.
Sui Move contract
Deploy once, use forever. The contract emits events — no stored objects, cheapest possible on-chain operation.
// Two event types:
// HashCommitted — single record: committer, table, row_id, data_hash, timestamp
// BatchCommitted — Merkle batch: committer, merkle_root, leaf_count, timestamp
cd contracts/sui
sui move build
sui client publish --gas-budget 100000000
API reference
| Method | Returns | Description |
|---|---|---|
Provifier.hash(data) |
string | SHA-256 with provifier:v1: domain prefix |
Provifier.hashRecord(table, rowId, data) |
string | Domain-separated hash per table/row |
commit({ table, rowId, data }) |
Promise<Receipt> | Commit a single hash on-chain |
commitBatch({ entries }) |
Promise<BatchResult> | Merkle batch commit |
verify({ ... }) |
Promise<VerifyResult> | Re-hash + on-chain comparison |
buildCommitTx({ ... }) |
{ transaction, hash } | Unsigned Sui tx for wallet signing |
Hosted API
Don't want to manage keys and chain connections? Use the hosted API at provifier.com. Same SDK — just point it at our endpoint instead of running your own.
Deploy your own instance
Your keys, your chain costs
Sui, Solana, Base, Polygon, Ethereum
Free forever (MIT)
No setup — just get an API key
We handle chain transactions
Sui, Solana, Base
1 credit per commit ($0.01)
Verify: always free
Pay-as-you-go
25 free credits/week# Hosted API — no SDK needed, just curl
curl -X POST https://provifier.com/v1/commit \
-H "X-Provifier-Key: pvf_live_..." \
-H "Content-Type: application/json" \
-d '{"table":"docs","rowId":"doc-7","data":"Hello world"}'
# Verify (free, no auth)
curl https://provifier.com/v1/verify/SuiTxDigest...
Decentralization & self-hosting
Hash commitments are on-chain events. Once committed, they exist permanently on the blockchain and can be verified by anyone without provifier.com.
Hash events are immutable on-chain data. If provifier.com goes offline, every commit ever made remains verifiable. Re-hash locally, fetch the on-chain event from any RPC, compare. No server needed.
The SDK talks directly to blockchains — no provifier.com dependency. Point it at your own RPC and sign with your own keys. The hosted API is a convenience layer, not a requirement.
On Sui, the Move contract emits events — no stored objects, no admin capability. On Solana/EVM, commits use memo instructions with no contract authority. Nobody can alter or delete committed hashes.
Verification never touches provifier.com. It's a local SHA-256 hash compared to a public on-chain event. Any blockchain explorer, RPC endpoint, or SDK instance can do it. Zero cost, zero trust.
Testing
cd packages/sdk
node --test test/sdk.test.js
# 25 tests — hashing, Merkle trees, commit/verify, tamper detection
# Uses mock chain adapters — no network access needed