Documentation

Debitum Protocol

A fully on-chain, permissionless bond protocol. Projects sell tokens with vesting at a discount — every position is an NFT.

Introduction

What is Debitum?

Debitum is a Bond-as-a-Service protocol for EVM chains. It allows any DeFi project to sell tokens at a discount in exchange for immediate liquidity, while distributing those tokens to buyers over time via an on-chain vesting schedule.

Unlike traditional token sales or OTC deals, every Debitum bond position is minted as an ERC721 NFT. This makes positions transferable, composable, and self-custodial — no backend, no escrow third-party, no admin keys.

Fully on-chain

All logic, state, and vesting lives in smart contracts deployed on EVM-compatible networks.

Permissionless

Any project can deploy a bond for any ERC20 token without approval.

NFT positions

Every purchase mints an ERC721 that represents a vesting position.

Self-custodial

Buyers hold their NFT. Projects fund their own bond escrow directly.

Protocol

How It Works

01

Project deploys a bond contract

A project calls the BondFactory to deploy an individual bond contract. They specify the principal token (what buyers receive), the payment token (what buyers pay), a discount in basis points, vesting parameters, optional token-gate rules, and the total bond capacity.

02

Project funds the bond

The project deposits principal tokens into the bond contract up to the configured capacity. Until the contract holds enough tokens, it will not accept purchases.

03

Buyers purchase positions

Buyers call purchase() on the bond contract, sending the payment token. They receive an ERC721 NFT that represents a vesting position. The NFT records the principal amount, start time, and vesting schedule.

04

Tokens vest on-chain

As time passes, the vesting contract allows more principal to be claimed. Buyers call claim() at any time to withdraw unlocked tokens to their wallet. The position NFT remains valid until fully claimed.

Guide

For Bond Buyers

Buying a bond lets you acquire tokens at a discount compared to their current market price. In exchange, those tokens are released to you over a vesting period rather than immediately.

How to buy a bond

1

Go to the Marketplace and browse available bonds.

2

Click a bond to open its detail page. Review the discount %, payment token, and vesting schedule.

3

Connect your wallet. If the bond has a token gate, make sure you hold the required tokens.

4

Enter the amount you want to pay. The interface shows how many tokens you'll receive and when they unlock.

5

Approve the payment token spend (one-time ERC20 approval), then confirm the purchase transaction.

6

An NFT is minted to your wallet. Go to Portfolio to see your position and claim unlocked tokens.

Your Portfolio

  • Visit /portfolio to see all your active bond positions.
  • Each card shows the total principal, amount already claimed, and amount currently claimable.
  • Click Claim to withdraw unlocked tokens to your connected wallet.
  • Your position NFT can be transferred to any wallet — the new holder can claim the remaining tokens.
Guide

For Projects — Creating a Bond

Any project can permissionlessly launch a bond. No approval, no KYC, no governance vote. You need only the token you want to distribute and a wallet connected to the supported network.

Bond configuration

Principal TokenThe ERC20 token you want to distribute (what buyers receive).
Payment TokenThe token buyers pay with. Use address(0) for native ETH, or any ERC20.
CapacityTotal principal tokens available for purchase across all buyers.
Price Per TokenStatic price per principal token, denominated in the payment token. Ignored if using an oracle.
Discount (bps)Discount in basis points (e.g. 500 = 5%). Applied on top of the price or oracle feed.
Min / Max PurchaseOptional per-transaction limits in principal token units.
Vesting TypeLinear, Cliff, or Step. See the Vesting Types section below.
Vesting ParamsDuration, cliff date, or step count — depends on vesting type chosen.
Token GateOptional: require buyers to hold a minimum balance of an ERC20 or ERC721 to unlock an extra discount.
OracleOptional: connect a price feed for dynamic pricing.

Deployment steps

1

Go to /create and connect your project wallet.

2

Fill in the bond parameters. Review the preview to confirm pricing looks correct.

3

Submit the transaction — this calls BondFactory.createBond() and deploys a new bond contract.

4

After deployment, approve the bond contract to spend your principal tokens.

5

Deposit principal tokens into the bond contract. The bond becomes purchasable once funded.

6

Monitor via /dashboard — pause or close the bond at any time. Unfilled capacity can be withdrawn.

Vesting

Vesting Types

Linear

Continuous unlock

Tokens unlock gradually and continuously every second over the full vesting duration. Buyers can claim any available amount at any time.

Params: vestingDuration (seconds)
Cliff

Locked until cliff date

All tokens are locked until the cliff date, at which point they either unlock all at once or continue vesting linearly. Ideal for team token releases.

Params: cliffTimestamp, vestingDuration (seconds after cliff)
Step

Equal periodic tranches

Tokens unlock in equal installments on a fixed schedule — for example, 25% every quarter. Clean and predictable for both parties.

Params: stepCount, stepDuration (seconds), totalDuration
Pricing

Oracle Pricing

Static

Fixed price

Set a fixed price per principal token at bond creation time. The discount is calculated from this price. Simple and predictable — best for projects without an on-chain price feed.

  • No oracle dependency
  • Predictable payment amounts
  • Suitable for new tokens
Oracle

Dynamic price feed

Connect a price oracle (Chainlink, Uniswap TWAP, or custom feed). The bond price tracks the live market price and applies the discount on top. Buyers always get the exact discount percentage they see.

  • Discount % stays constant
  • Price adjusts with market
  • Prevents arbitrage on price moves
Token Gate

Token Gates

Projects can optionally require buyers to hold a minimum balance of a specified ERC20 or ERC721 token to unlock a higher discount tier. Multiple thresholds can be set per bond.

Use cases

  • Reward your existing token holders with exclusive discounts
  • Gate access to NFT holders of a specific collection
  • Create multiple tiers — the more they hold, the bigger the discount
  • Configurable per bond, not globally enforced
Example tiers
Hold 100+ tokens+3% discount
Hold 500+ tokens+7% discount
Hold 1,000+ tokens+12% discount
Deployment

Smart Contract Addresses

Contracts are deployed on multiple EVM networks. All source code is open-source and verified on each network's block explorer.

BaseChain ID 8453
BondFactory

Deploys new bond contracts. Call createBond() to launch a bond.

0x01f1ea69d712457a25f62c19325e8edf3a68cc6e
View on explorer ↗
BondNFT

ERC721 contract. Mints one NFT per purchase representing the vesting position.

0x6cdefd13eab04c52f9e4f1a587de3bcb98d9f346
View on explorer ↗
VestingModule

Stateless vesting math — Linear, Cliff, and Step schedules.

0xa872f5b4f78e40a222aa97aab422ddb41ab6f9d1
View on explorer ↗
TokenGate

Verifies buyer token balances against configured discount tiers.

0xe7e97f4f480f4a7b78270332c6603a0d6a7bd874
View on explorer ↗
Unit ZeroChain ID 88811
BondFactory

Deploys new bond contracts. Call createBond() to launch a bond.

0xd1Ce0FB550B9e2565F478388Dd879149E5c02726
View on explorer ↗
BondNFT

ERC721 contract. Mints one NFT per purchase representing the vesting position.

0x3fC0b3B0bBbe1BeE1a5326964d0afC247b357C00
View on explorer ↗
VestingModule

Stateless vesting math — Linear, Cliff, and Step schedules.

0x22c833Ad10450e172E05DeB67f9578F36C7C0DE9
View on explorer ↗
TokenGate

Verifies buyer token balances against configured discount tiers.

0x5aE618657e8347D2Fb999799Af3440e6945b200E
View on explorer ↗
Security

Decentralization & Immutability

Debitum is built around a single principle: once a bond is deployed, its terms are permanent. No team member, admin key, or governance vote can modify the vesting schedule, discount rate, price, or any other parameter of an existing bond. The protocol enforces all guarantees in code.

Contract upgrade status

VestingModuleNon-upgradeable

A pure, stateless contract — deterministic math only. No storage, no admin role, no initializer, no upgrade path. Computes vesting schedules identically forever.

BondFactoryNon-upgradeable

The factory that deploys bond clones. It has no UUPS proxy. The bond implementation and VestingModule it references are fixed at deployment time. Admin can only update the protocol fee and fee collector — changes only affect future bonds, never existing ones.

BondNFTNon-upgradeable

The ERC721 contract that mints and tracks bond positions. Removed from UUPS. Its logic — minting, claiming, position snapshots — cannot be altered after deployment.

BondContract (per bond)Non-upgradeable

Each bond is a minimal proxy clone of the BondContract implementation. Clones have no upgrade mechanism. The terms encoded at creation are final and immutable.

TokenGateUpgradeable (UUPS)

The optional discount module. It retains an upgrade path to allow new check types (e.g. new oracle formats) to be added in future. Critically, it controls only optional additional discounts — it cannot alter bond terms, vesting schedules, or principal amounts in any way.

What is guaranteed for buyers

  • The vesting schedule of your position is snapshotted at mint time and stored permanently in the NFT — it cannot change.
  • The principal token and amount are locked at purchase — you will always receive exactly what was promised.
  • The VestingModule address is snapshotted per position at mint time — even if a new VestingModule were deployed, your position uses the original.
  • Unclaimed tokens accumulate indefinitely on-chain. There is no expiry or clawback mechanism.
  • Your position NFT is transferable — the new holder inherits all vesting rights with no change to the schedule.

What can change (and what it means)

mutable
Protocol fee (BondFactory)Only applies to bonds created after the change. All existing bonds use their original fee setting, set at creation.
mutable
Fee collector address (BondFactory)Changes where future protocol fees are sent. Does not affect existing bonds or any buyer positions.
mutable
TokenGate discount rules (per bond)Bond creators can update their own discount tiers. This affects the optional extra discount available to future buyers — never the base bond terms.
immutable
Bond terms (price, vesting, discount, tokens)Immutable. Set once at bond creation and enforced by non-upgradeable smart contract code.
immutable
Buyer position vesting scheduleImmutable. Snapshotted in the NFT at mint time. No mechanism exists to alter it.

Verification

All contract source code is open source and verified on each network's block explorer. You can independently confirm the upgrade status of any contract by checking whether it has an _authorizeUpgrade function — contracts without it have no upgrade path. For proxy contracts, verify that no ProxyAdmin with upgrade rights exists.

FAQ

Frequently Asked Questions

Is there a fee to create or buy a bond?

Debitum charges no protocol fee at this time. You only pay gas for the on-chain transactions. The bond capacity and discount are fully configurable by the project.

Can I cancel or close my bond as a project?

Yes. Bond owners can pause purchases or close the bond at any time from the Dashboard. Closing a bond returns any unfilled principal tokens to the project wallet. Existing buyer positions continue to vest normally.

Can I transfer my vesting position to another wallet?

Yes. Your position is an ERC721 NFT and can be transferred like any other token. The new holder inherits the remaining vesting schedule and can claim tokens as they unlock.

What happens if I miss a claim?

Nothing bad. Unlocked tokens accumulate on-chain indefinitely. You can claim at any time — even months after the vesting period ends — and receive all accrued tokens in one transaction.

Does Debitum support native ETH as a payment token?

Yes. When creating a bond, set the payment token to address(0) to accept native ETH. Buyers will send ETH directly in the purchase transaction.

What oracle formats are supported?

The protocol supports Chainlink AggregatorV3Interface and custom oracle adapters that implement the same interface. Uniswap v3 TWAP oracles can also be wrapped to match the expected interface.

Is the contract code audited?

All contracts are open-source and verified on their respective block explorers. An independent security review is in progress. Links will be published when available.

What networks are supported?

Debitum is deployed on multiple EVM-compatible networks. Connect your wallet to the supported network of your choice to interact with the protocol.

Ready to get started?

Browse existing bonds or launch your own in minutes.