Skip to main content

Bounty Marketplace

The NullGraph Bounty Marketplace connects researchers who own Null Knowledge Assets (NKAs) with BioDAOs and research organizations willing to pay for specific negative results.
All bounties are denominated in BIO tokens and use automatic escrow — rewards are locked on-chain the moment a bounty is created.

How It Works

1

BioDAO Posts Bounty

Creator describes needed null result, sets BIO reward amount, and chooses deadline
2

Automatic Escrow

BIO tokens are immediately transferred to a program-controlled vault
3

Researcher Submits NKA

A researcher with matching NKA links their asset to the bounty
4

Creator Reviews

Bounty creator reviews submission and either approves or closes bounty
5

Instant Payout

On approval: 97.5% to researcher, 2.5% to protocol treasury

Bounty Account Structure

Each bounty is stored in a NullBounty PDA:
PDA Seeds:
  • Bounty: ["null_bounty", creator_pubkey, bounty_number_le_bytes]
  • Vault: ["bounty_vault", bounty_pda_key]

Bounty Status Flow

Bounties transition through four states:

Creating a Bounty

Instruction: create_bounty

Escrow Guarantee

The moment create_bounty succeeds, BIO tokens leave the creator’s wallet and are locked in the vault. The creator cannot access these funds except by closing the bounty.

Frontend Example

Submitting to a Bounty

Instruction: submit_to_bounty

Researchers link their existing NKA to an open bounty:
Security: The has_one = researcher constraint in the account context ensures only the NKA owner can submit it.

Submission Account

Each submission creates a BountySubmission PDA:
Seeds: ["bounty_submission", bounty_pda_key, null_result_pda_key]
Submission PDAs are unique per bounty-NKA pair, preventing duplicate submissions of the same NKA to the same bounty.

Approving a Submission

Instruction: approve_bounty_submission

Bounty creator approves the submission, triggering automatic payout:

Atomic Payout

Both transfers (researcher + treasury) happen in a single transaction. Either both succeed or both fail.

Vault Authority

Vault uses PDA signer seeds to authorize transfers. No private keys involved.

Closing a Bounty

Instruction: close_bounty

Creators can reclaim escrowed BIO from Open or Matched bounties:
Cannot close Fulfilled bounties — once approved, the bounty is permanently marked as Fulfilled and vault is already empty.

BIO Token Integration

SPL Token Interface

All token operations use the SPL Token Interface (anchor-spl/token_interface):

Why transfer_checked?

  • Validates mint — ensures tokens are actually BIO, not a fake mint
  • Validates decimals — prevents precision errors
  • Safer than transfer — explicit validation at instruction level

BIO Decimals

BIO tokens use 6 decimals:
Frontend conversion:

Events

All bounty lifecycle actions emit events for indexing:

Security Model

Signer Checks

Only creator can approve/close their bounty (enforced via has_one = creator)

Status Guards

Each instruction validates current status before mutation

Submission Match

approve_bounty_submission verifies matched_submission PDA matches provided submission

Safe Math

All fee/payout calculations use checked_mul, checked_div, checked_sub

Error Handling

Browse Bounties

Fetch all bounties from the program:

Next Steps

Protocol Fees

Deep dive into the 2.5% fee model and treasury distribution

BIO Integration

Learn about Bio Protocol alignment and token economics