3. Why?
Problem
BitDAO wants to fund projects and AEs to grow the BIT ecosystem. As BitDAO deploys more of
its treasury, it faces an increasing economic risk in the case of project failure
Solution
Performance Bonds can provide BitDAO with an economic guarantee, by locking in collateral
that can be slashed (recouped) if a project fails to meet agreed upon performance criteria
4. Scenario
Scenario 1: Basic Performance Bond
● BlimpDAO wants 100K BIT to buy a blimp
● BitDAO asks for 100ETH in collateral before BIT is distributed
● BitDAO creates a ‘100K BIT bond’ asking for 100ETH by June 1
● BlimpDAO + their community buy/fill the bond, and 100K BIT is granted
● Either:
○ BlimpDAO buys a blimp and 100ETH is returned to bond buyers
○ BlimpDAO fails to buy a blimp and 100ETH is recouped by BitDAO
5. Integrations/Use Cases
1. Community Engagement: Allow AEs/BitDAO to engage with
community via bonding. Create incentives for long-term token
holders.
2. Off-to-On-Chain Interaction: Provide assurances when interacting
with off-chain entities (protect against rug pull)
3. DAO Co-Investments: Formalize collaboration by guaranteeing it
6. User Types
Proposer
An outside party requesting funds for their project. Delivers and is responsible for meeting performance
criteria.
Bond Admin
A multisig owner of BitDAO. Creates new bonds and manages status of existing bonds. Defines
performance criteria with the Proposer
Guarantor
Buys (“guarantees”) the bond by providing bond collateral. Redeems their collateral and bond rewards if
the project succeeds
7.
8. Performance Bond States
1. [Offline] Bond is Proposed
2. Bond is Created
3. Bond is Filled
4. Bond is Closed
5. [Offline] Work is Delivered
6. Bond is Assessed
7. Bond is Redeemed
9. Bond Specs - Creation
● A performance bond is capable of accepting ERC 20(s) as collateral
● To create a bond, collateral tokens must be locked in the contract
○ It is possible to create a bond without rewards
○ A bond is defined with a treasury address that must match one of the DAO’s approved
whitelist of treasury addresses
10. Bond Specs - Open/Filling
● Once created, a bond is ‘open’ for a defined period of time (the time between the present and
the epoch start date). While open, a bond can accept collateral up to its maximum collateral
amount
○ A bond remains open until its epoch start date passes
○ There is a minimum contribution requirement for guarantors
○ There is NO maximum contribution limit for guarantors
○ Stake cannot be removed before the epoch start date
● To close, a bond must meet its minimum collateral amount
○ If the minimum collateral amount is not met, the bond ends immediately and users can
redeem their stake without reward
○ If the minimum stake amount is met, the bond enters its lockup period...
11. Bond Specs - Closed/Lockup Period
● To close, a bond must meet its minimum collateral amount
○ If the minimum collateral amount is not met, the bond ends immediately and users can
redeem their stake without reward
○ If the minimum stake amount is met, the bond enters its lockup period...
● There are two pathways out of the lockup period
○ A bond admin evaluates the bond by manually triggering a slashing/redemption event
○ A bond hits its preset evaluation date whereby the rewards and collateral are
automatically made available for full redemption (i.e. no slashing)
12. Bond Specs - Evaluation/Redeem
● There are several outcomes for a bond evaluation:
○ Complete success: In the event that the performance criteria are achieved, 100% of
rewards and collateral are released to guarantors
○ Partial success: In the event that the performance criteria are partially achieved, a Jr./Sr.
admin can slash an arbitrary portion of the collateral and choose an arbitrary portion of the
rewards to release to guarantors
i. Slashed collateral and unreleased rewards are sent to the bond’s treasury address
○ Failure: In the event that the performance criteria are not achieved, 100% of collateral and
all rewards are sent to the bond’s treasury address
13. Contract Architecture
Bond Factory
● createBond()
○ new ERC20SingleCollateralBond()
ERC20SingleCollateralBond
● Inherits ERC20
● deposit()
● redeem()