Kredence is a decentralized, on-chain protocol built on Solana that protects digital creators by establishing immutable proof of originality, providing trustless licensing mechanisms, and maintaining a community-governed dispute resolution system.
In the modern digital landscape, content is easily stolen. Memes are reposted without credit, digital art is scraped and sold, and timestamps on centralized platforms (like Instagram or Twitter) can be faked, manipulated, or lost if the platform shuts down. Creators have no mathematically verifiable way to prove they were the original author, nor an easy way to get paid when their content goes viral. Furthermore, when art is stolen and minted, decentralized networks lack a built-in mechanism to flag and punish bad actors.
Kredence leverages Solana's high throughput and low costs to solve this through a Commit-Reveal scheme combined with Compressed NFTs (cNFTs) and Game-Theoretic Disputes.
- In-Browser Hashing: We generate a unique SHA-256 fingerprint (pHash) of an image entirely locally. Your unminted art never hits a centralized server before protection is verified.
- Immutable Commitment: We store this fingerprint in a Solana Program Derived Address (PDA). The blockchain timestamps this transaction forever.
- cNFT Receipts: The protocol issues a gas-efficient compressed NFT to the creator's wallet acting as a verifiable receipt.
- Community Disputes: Anyone can stake SOL to challenge the originality of content. The community votes using a reputation token, and if proven stolen, ownership of the content is programmatically transferred to the whistleblower.
- Trustless Licensing: Any buyer can verify if an image is claimed and purchase a license in one click, routing a 0.1 SOL royalty directly to the verified creator.
+-------------+ (1) Upload +------------------+
| | --------------------> | |
| Creator | | IPFS / |
| Wallet | <-------------------- | Pinata |
| | (2) File URI +------------------+
+------+------+
|
| (3) Hash + URI + Commit
v
+-----------------------------+
| Kredence Anchor |
| Smart Contract |
+------+---------------+------+
| |
| (4) Save PDA | (5) CPI Mint
v v
+------------+ +-----------------+
| Content | | Metaplex |
| Record PDA | | Bubblegum |
| (On-Chain) | | Program |
+------------+ +--------+--------+
|
| (6) Issue cNFT
v
+-------------+
| |
| Merkle |
| Tree |
| |
+-------------+
Kredence is self-policing. If a bad actor uploads someone else's art, the community can challenge it.
- Stake to Challenge: A whistleblower (Challenger) stakes 0.05 SOL to open a
DisputeRecordon-chain. - Reputation Voting: The community has a 2-minute window to vote using
KRED_REP(a Token-2022 reputation token). The smart contract tallies the votes. - Whistleblower Ownership Transfer: If the Challenger wins, the smart contract physically mutates the
ContentRecordPDA, replacing thecreatorpublic key with thechallengerpublic key. The Challenger becomes the permanent owner, and the staked SOL is distributed pro-rata to voters who chose the winning side.
The core state of Kredence is the ContentRecord PDA. The seed for this PDA is the actual SHA-256 hash of the image. Because the hash acts as the seed, it is mathematically impossible to register the same image twice. The smart contract automatically rejects any transaction trying to initialize a PDA that already exists.
Traditional NFTs on Solana cost roughly ~0.012 SOL in state rent. Kredence utilizes Metaplex Bubblegum to mint Compressed NFTs (cNFTs) into a shared public Merkle Tree. The actual data is pushed to the Solana ledger via the SPL Noop (Log Wrapper) program, dropping the minting cost to a fraction of a cent.
Kredence makes advanced use of CPIs to directly communicate with the Metaplex Bubblegum program to mint cNFTs securely. The Kredence PDA programmatically signs the transaction using its bump seeds.
If you'd like to test the Kredence dApp locally, follow these steps:
- Node.js 18+
- Rust & Anchor CLI installed
- Solana Tool Suite installed (
solana-test-validator)
Open a terminal and start the validator:
solana-test-validatorIn a new terminal, build and deploy the Anchor program:
cd anchor_kredence
anchor build
anchor deployTo support compressed NFTs, you must generate a shared Merkle Tree on your localnet:
npx tsx scripts/create-tree.tsNote: Make sure to update MERKLE_TREE_ADDRESS in src/lib/constants.ts if the script generates a new address.
Configure your environment variables:
cp .env.local.example .env.local
# Add your Pinata API keysStart the Next.js development server:
npm install
npm run devNavigate to http://localhost:3000 to start protecting and licensing your digital media!
- Frontend: Next.js 15, React 19, TailwindCSS v4, Web3.js
- Smart Contract: Solana, Anchor Framework, Rust
- Infrastructure: Metaplex Bubblegum (cNFTs), SPL Account Compression, Token-2022, Pinata (IPFS)