Overview
A verifiable SAT answer network
3SAT coordinates three roles around hard SAT instances: issuers post bounties, solvers produce answers, and verifiers attest whether those answers satisfy the original problem.
Search first
Users can check whether a format-normalized instance already has a finalized answer before posting a new bounty.
Settle on-chain
Bounty creation, solver commitments, verifier attestations, and finalization are enforced by smart contracts.
Gate answers
Artifacts are stored off-chain, while access to finalized answer bundles is controlled by protocol rules.
Quickstart
Choose your path
Start from the role that matches what you want to do. The app handles wallet signing and transaction preparation.
I have a SAT problem
Search the answer database first. If no verified answer exists, create a bounty and escrow the reward in USDC or $3SAT.
Open issuer guideI want to solve bounties
Browse open bounties, run the solver client, and submit SAT assignments or UNSAT proofs through commit and reveal.
Open solver guideVerifier operations
During the initial launch period, revealed submissions are checked by the official 3SAT verifier node. Third-party verifier onboarding is temporarily paused.
View verifier statusConcepts
Core concepts
These terms appear across the marketplace, role consoles, clients, and API responses.
Bounty
A task posted by an issuer. It links a CNF instance, payment asset, reward, timing windows, verifier quorum, and settlement rules.
Payment asset
The ERC-20 asset selected for a bounty. USDC bounties settle reward, solver payout, verifier reward, bond, and answer access in USDC; $3SAT bounties settle those flows in $3SAT.
Instance file
The SAT problem artifact, represented as a DIMACS CNF file up to 4 MiB and stored through the protocol artifact API.
Solution file
The solver answer artifact. It can be a SAT assignment or an UNSAT proof. Finalized winners can be distributed as a bundle with the original problem and answer artifact.
Matched answer bundle
Format-normalized and variable-renamed SAT matches are rebuilt immediately. Matched UNSAT proofs use an asynchronous transform job and are released only after the target checker accepts them.
Commit reveal
Solvers commit a hash first, then reveal the answer before the post-commit reveal deadline. This prevents simple answer copying during submission.
Verifier quorum
The minimum positive attestations required before a revealed submission can become the accepted candidate. During the initial official-verifier launch phase, issuer bounties use quorum 1.
Finalization
When accept quorum is reached, the keeper can finalize the accepted candidate as soon as the contract reports it as finalizable.
Payments
Supported payment assets
3SAT is a multi-asset protocol. The issuer selects the bounty payment asset, and the same asset is used for that bounty's reward, solver payout, verifier reward pool, solver bond, and answer access fee.
Guides
Role guides
Each role has a focused path. You can use the web app directly or automate the same lifecycle through protocol clients and API endpoints.
Issuer
Open- 1Prepare a DIMACS CNF instance.
- 2Search the database for an existing verified answer.
- 3If no answer exists, upload the instance and configure the bounty.
- 4Select USDC or $3SAT as the bounty payment asset.
- 5Review reward, solver bond, verifier reward pool, timing windows, and verifier quorum.
- 6Approve the selected payment asset and create the bounty with your wallet.
- 7After finalization, access the winning answer without paying a separate unlock fee.
Solver
Open- 1Browse the marketplace for open bounties.
- 2Download a selected instance or run the solver client.
- 3Generate a valid SAT assignment or UNSAT proof artifact.
- 4Approve the solver bond in the bounty payment asset.
- 5Commit the solution hash while the bounty is open for solving.
- 6Reveal the solution before the post-commit reveal deadline.
- 7Wait for verifier attestations and keeper finalization. Payout uses the bounty payment asset.
Verifier
Open- 1Verification is currently operated by the official 3SAT verifier node.
- 2Third-party and personal verifier node onboarding is temporarily paused.
- 3Public verifier client downloads are disabled until verifier onboarding opens.
- 4Issuer-created bounties use verifier quorum 1 during this official-verifier launch phase.
- 5The official verifier checks SAT assignments and supported UNSAT proofs, then submits attestations on-chain.
Answer access
Open- 1Search by exact CNF, format-normalized CNF, or variable-renamed structure.
- 2Review the bounty code, payment asset, answer status, and access price.
- 3If you are the issuer, download the finalized answer bundle without a separate unlock payment.
- 4If you are a buyer, approve and pay the answer access fee in the bounty payment asset.
- 5From search, download a SAT bundle rebuilt for the submitted CNF. For a non-raw UNSAT match, poll the returned transform job until the target checker accepts it and a signed bundle URL becomes available.
- 6From bounty detail, download the original finalized bounty bundle.
- 7Verify file digests against protocol metadata when integrating programmatically.
Lifecycle
Protocol lifecycle
The network advances a bounty through a small number of public phases. Timing is configured when the bounty is created.
Examples
Developer examples
These examples show the public API shape for common integrations. On-chain actions still require the user's wallet to sign the prepared transaction data.
Standardize CNF before search
Normalize DIMACS formatting and compute both format-normalized and variable-renamed structure fingerprints.
curl -X POST https://3sat.network/api/protocol/sdk/cnf/standardize \
-H "content-type: application/json" \
-d '{"text":"p cnf 2 1\n1 -2 0\n"}'Search the verified answer database
Search exact, format-normalized, and variable-renamed CNF fingerprints to check whether a finalized answer already exists.
curl -X POST https://3sat.network/api/protocol/search \
-H "content-type: application/json" \
-d '{"text":"p cnf 2 1\n1 -2 0\n"}'Resolve a public bounty code
Use the public SAT-... code shown in the marketplace instead of relying on small internal numeric ids.
curl https://3sat.network/api/protocol/sdk/bounties/SAT-XXXX-XXXX-XXXXReference
Protocol API overview
The API supports discovery, artifact handling, and transaction preparation. Wallet signatures and on-chain transactions remain under the user's control.
Discovery
/api/protocol/marketplaceList indexed bounties for the marketplace and client discovery.
/api/protocol/searchSearch exact, format-normalized, and variable-renamed CNF fingerprints and return answer availability status.
/api/protocol/sdk/bounties/{idOrCode}Resolve a bounty by public code or internal identifier.
Artifacts
/api/protocol/storageUpload DIMACS CNF instances up to 4 MiB and metadata up to 25 MiB through controlled server-side multipart storage. Solution artifacts are rejected here and always use the signed direct-upload flow.
/api/protocol/storage/uploadsReserve a wallet-signed, field-bound, short-lived R2 staging upload for any SAT solution or UNSAT proof.
/api/protocol/storage/uploads/{uploadId}/completeFinalize a reserved upload only after R2 HEAD metadata, immutable copy, actual byte size, Keccak digest, filename/kind/format bindings, and SAT syntax (when applicable) pass.
/api/protocol/storageDownload authorized artifacts when access checks pass.
/api/protocol/bundles/answerDownload the finalized problem and answer bundle for an authorized user after issuer or paid-access checks.
/api/protocol/bundles/answerReturn a matched SAT/raw-UNSAT ZIP immediately, or HTTP 202 with an opaque poll token for a non-raw UNSAT proof transform job.
/api/protocol/unsat-transform/uploadsInitialize an authorized, time-limited direct R2 upload for matched SAT or UNSAT target CNFs too large for the Vercel request-body limit.
/api/protocol/unsat-transform/jobs/{jobId}Poll a transform job with its opaque Bearer token. A successful response contains a short-lived signed ZIP download URL and checker report.
Issuer and solver SDK
/api/protocol/sdk/cnf/standardizeNormalize DIMACS CNF content before hashing and searching.
/api/protocol/sdk/issuer/build-metadataPrepare public bounty metadata from issuer input. Verifier quorum is currently required to be 1.
/api/protocol/sdk/issuer/prepare-create-bountyPrepare create-bounty transaction data, including the selected payment asset, for wallet signing. Verifier quorum is currently required to be 1.
/api/protocol/sdk/solver/prepare-commitValidate an opaque artifactId, privately bind it to the commitment, and prepare a solver commit using the bounty's snapshotted bond.
/api/protocol/sdk/solver/prepare-revealPrepare reveal transaction data for a committed SAT assignment or UNSAT proof.
Official verifier automation
/api/protocol/verifier/revealedList revealed submissions inspected by the official verifier automation.
/api/protocol/verifier/artifactFetch the problem and answer artifacts needed by authorized verifier automation.
Clients
Download clients
Clients are provided for users who want to run solver or verifier automation outside the web app.
3SAT CLI
Open-source command line client for issuers, buyers, and professional solvers. It supports marketplace discovery, bounty creation dry-runs, answer purchases, solution upload, commit preparation, commit, and reveal.
Solver client
One-click CryptoMiniSat and Kissat clients for users who want to discover bounties, solve CNF instances, and submit SAT or UNSAT answers automatically. macOS and Linux packages require Node.js LTS installed first.
Verifier client
Public verifier client downloads are temporarily disabled. During the initial launch period, verification is operated by the official 3SAT verifier node.
Security
Operational notes
The protocol is designed so users keep control of their wallets and the chain remains the source of truth.
Use dedicated wallets
Run clients with dedicated issuer, solver, or verifier wallets instead of a personal main wallet.
Treat the indexer as cache
Marketplace and search views are cached for speed. Contract state is the authoritative record.
Use generated configs
The app can generate client configuration values so users do not need to hand-edit protocol addresses.
Protect artifacts
Answer access is mediated by API checks and protocol state rather than public bucket URLs.