Create and issue

Create and issue

Create and issue

Tokens

NFTs

Attestations

Tokens

Points

Timestamps

Tokens

NFTs

Attestations

Tokens

Points

Timestamps

Tokens

NFTs

Attestations

Tokens

Points

Timestamps

at scale

at scale

at scale

Zero transaction fees

Using Witness requires no upfront or dynamic transaction fees. Remove user friction when issuing ownership to users, explore new use cases, and better prepare to scale.

Witness any data

If you can hash it, you can Witness it. Leverage signatures and custom data schemas to issue claims for onchain objects such as NFTs, attestations, tokens, and points

Maintain onchain composability

Despite Witnessed data existing offchain by default, the protocol enables trustless verification and onchain composability.

D̶o̶n̶'t̶ Can't be evil.

Once your data has been Witnessed, it can be verified using only access to any of the underlying blockchains. No trust or intermediary required.

How Witness works

An illustration from Carlos Gomes Cabral
An illustration from Carlos Gomes Cabral
An illustration from Carlos Gomes Cabral

01.

Create

Hash any data, attestation, or schema.

02.

Checkpoint

03.

Retrieve

04.

Verify

01.

Create

Hash any data, attestation, or schema.

02.

Checkpoint

03.

Retrieve

04.

Verify

01.

Create

Hash any data, attestation, or schema.

02.

Checkpoint

03.

Retrieve

04.

Verify

Get Started

Get started

Is it onchain?

Witness your data

Witness your data

Witness your data

Submit data and issue Web3 ownership with simple API calls

Make your data verifiable by anyone in the future without transaction fees

Get started quickly with a simple Typescript SDK and OpenAPI specification

import { WitnessClient } from "@witnesswtf/client";

const witness = new WitnessClient();
const leafHash = witness.hash("Check the chain!");

await witness.postLeaf(leafHash);
await witness.waitForCheckpointedLeafHash(leafHash);

const timestamp = await witness.getTimestampForLeafHash(leafHash);
console.log(`Leaf ${leafHash} was timestamped at ${timestamp}`);
import { WitnessClient } from "@witnesswtf/client";

const witness = new WitnessClient();
const leafHash = witness.hash("Check the chain!");

await witness.postLeaf(leafHash);
await witness.waitForCheckpointedLeafHash(leafHash);

const timestamp = await witness.getTimestampForLeafHash(leafHash);
console.log(`Leaf ${leafHash} was timestamped at ${timestamp}`);
pragma solidity ^0.8.23;

import { ERC721 } from "solady/tokens/ERC721.sol";
import { IWitness, Proof } from "src/interfaces/IWitness.sol";
import { WitnessConsumer } from "src/WitnessConsumer.sol";

/// @dev A simple implementation of ERC721 that
/// supports minting via Witness proofs.
contract ERC721Wit is ERC721, WitnessConsumer {
      /// @dev Bridges provenance from Witness and mints an NFT.
    function mint(bytes calldata bridgeData, Proof calldata proof) 
        public override {
            ...
        }
}

Don't Trust, Verify

Consume Witnessed data, even onchain

Consume Witnessed data, even onchain

Consume Witnessed data, even onchain

Radical transparency and cryptography ensure that anyone— even a contract onchain— can verify Witnessed data at any point in the future

Leverage customizable data schemas and contract standards to empower Witnessed data to compose with smart contracts

Explore the novel properties of digital ownership and tokenization via NFTs, tokens, and attestations without worrying about upfront transaction fees

Stay up to date

Get the best of Witness, right to your inbox

Stay up to date

Get the best of Witness, right to your inbox