# Welcome

### Overview

Arbor allows [DAOs](https://ethereum.org/en/dao/) and other on-chain entities to borrow stablecoins using their tokens as collateral with fixed rates and no liquidations.

For lenders, Arbor offers sustainable, fixed yields and token price upside through lending and options.

### Mission

Our mission is to enable DAOs to grow and thrive by giving them access to credit.

If you believe DAOs should have access to credit, join the discussion in the [Arbor community discord](https://discord.arbor.finance). We look forward to meeting you!


# Litepaper

Arbor - DeFi Native Credit Markets

## Abstract

Arbor allows DAOs and other on-chain entities to obtain financing by selling long-term debt. Our first product is bonds for DAOs.

## Introduction

### The value of credit

The creation of credit is an efficient way to allocate resources in a capitalistic ecosystem. It allows for the transfer of capital from parties who cannot competitively create value to those who can in return for a yield. Value-producing parties that have access to credit have a large advantage over players that do not. If properly deployed, their borrowed capital should translate to a higher level of value production. In a competitive market, players with access to credit will, on average, outperform others and thrive, while those who lack access will struggle to compete.

### DAOs lack access to credit

Permissionless credit markets predicated on social capital remain nascent. Notable pioneers like TrueFi or Maple Finance, while allowing for permissionless lending, still require contractual agreements on behalf of borrowers.[1](#references) [2](#references). Such constraints help explain why these types of credit lines have not yet been made available to DAOs. DAOs need dynamic, on-chain financing options that provide long-term capital and flexible repayment schedules to fit their timelines and goals. Bonds are flexible, long term debt instruments which have satisfied the credit needs of corporations for centuries and will do the same for DAOs.

### DAOs need credit

The sale of equity-equivalent, governance tokens is the current, dominant strategy for DAOs looking to raise capital. While valuable as a method to initially fund development, selling governance tokens productively becomes increasingly difficult for a DAO as it matures. To start, there is not enough liquidity for large cap DAOs to sell any meaningful number of tokens on the open market without collapsing the price.[3](#references) Moreover, attempts by DAOs to sell tokens privately to raise funds have sparked community backlash by members wanting to avoid centralization. Even if the community allowed for private sales, the maximum supply inherent to most governance token contracts renders selling them unsustainable. Issuing bonds offers a sustainable way for mature DAOs to raise the capital needed for protocol development.

### Investing in bonds

Bonds have a different risk profile than equity investments as a result of their predetermined return and duration. Their risk is primarily dependent on the issuer’s ability to repay the amount borrowed plus interest. In contrast, the risk and return from equity depends on the value assigned to the selling organization by the equity market. For parties looking to hedge their risk with a productive asset, bonds remain an attractive option.

Investors who purchase debt issued by DAOs benefit from increased accessibility and transparency. Traditionally, investors do not have access to purchase debt instruments until they have been touched by many fee-taking middlemen. Decentralized bonds can be sold directly to investors without gatekeepers, leading to better terms for both sides. In addition, the transparency of DAO financials leads to lower risk for bond holders — both DAO cash flows and balance sheets exist on-chain in real-time.

## Bond implementation

Bonds are issued as ERC-20 tokens with a new token for each issuance event. The bond tokens are represented as zero coupon bonds. Each bond has a par value of 1 USD and provides a return through the discount at which it is purchased.

### Repayment

A bond issuer is responsible for paying borrowed principal plus interest to a repayment contract before maturity. At maturity, bond holders can redeem their bond tokens for their share of principal and interest.

### Default and delinquency

If a bond issuer does not pay the owed amount by the maturity date, the bond becomes delinquent. Subsequently, Arbor alerts the bond holders as well as credit protocols. If the principal and interest is not paid after one week, the bond is declared to be in default and the aforementioned parties are alerted once again. Once a bond is defaulted on, bond holders will be able to exchange their bond tokens for a prorated share of the collateral provided at issuance from the collateral contract.

### Mitigating default risk

A default would have a negative impact on the value of a DAO’s governance token. If the issuing party used their governance token as collateral, a large supply of their governance token would be released to the bond holders in the event of a default. The bond holders would likely sell the collateral on the open market to recoup their investment, pushing down the token price. Because bond status is publicly available, front-runners would preempt the trade, knowing that a large supply of tokens are likely to be sold. This would amplify the price impact and be to the further detriment of the bond issuer who defaulted.

A bond issuer’s credit is also at stake. As touched upon in the introduction, the ability to attain credit is essential to survival in a capitalistic ecosystem. Defaulting on debt would render the issuer uncreditworthy, preventing them from obtaining financing in the future and damaging their competitiveness.

### Convertibility

To compensate investors for the default risk taken, DAOs can elect to make their bonds convertible to the collateral deposited at issuance. Convertibility gives bond holders the option to redeem their bonds for a prorated share of the collateral provided at any time. This provides bond holders a call option on the asset in the collateral contract with the breakeven price being determined by the amount of the collateral and the price of the bond with respect to the collateral asset. The value of convertibility is shown below in Figure 1.

![convertibility chart](/files/H9TDCCbstjud4MoIe1KH) **Figure 1:** Value of convertible bond. Assumes price of collateral asset is 1 USD at issuance and non-convertible bond is valued at 1 USD.

## Bond offering

A bond offering constitutes the initial pricing, issuance, and sale of bonds.

### Issuance

To start a bond offering, bond issuers choose the following parameters, among others.

* Bond Amount
  * Number of bonds to issue
* Term length
  * Amount of time until bond matures
* Collateral
  * Amount and type of collateral securing debt
* Convertibility
  * Whether or not the bonds will be redeemable for the collateral provided

Once the parameters are chosen and the required assets are deposited, bond tokens are minted to the issuer.

### Auction

Once the bond tokens are created the issuer has the ability to sell the bonds. They choose the following parameters.

* Auction period
  * Start and end datetime of the bond offering
* Funding threshold
  * Minimum amount to raise
* APR cap
  * Maximum interest rate issuer is willing to pay

The debt offering is structured as a batch auction where bidders submit public bids with their desired allocation and interest rate. At the auction clearing, the bond interest rate is calculated. Bids are included in the order of lowest interest rate to highest with a higher bid amount breaking ties. The minimum interest rate required to reach the funding threshold is chosen. As shown in Figure 2, this is where supply and demand intersect. This is the final rate for all participants. Bidders who specified an interest rate lower than or equal to the final clearing interest rate receive bonds at the clearing interest rate. Bidders that specified an interest rate higher than the final clearing interest rate do not receive any bonds and have their funds refunded.

![auction chart](/files/BPmkp1tVR6LpIOjzDwhf) **Figure 2:** Interest rate discovery of batch auction

If the funding threshold is not surpassed, there is no auction settlement and bidders’ funds are returned.

## References

1. TrustToken. *Introducing TrueFi, the DeFi Protocol for Uncollateralized Lending.* URL: <https://blog.trusttoken.com/introducing-truefi-the-defi-protocol-for-uncollateralized-lending-9bfd6594a48>
2. Katya Ternopolska. *Guide to Lending on Maple.* URL: <https://maplefinance.ghost.io/lending/>
3. Hasu. *A New Mental Model for Defi Treasuries.* URL: <https://uncommoncore.co/a-new-mental-model-for-defi-treasuries/>
4. 0xMaki. *Sushi Phantom Troupe - Strategic Raise.* URL: <https://forum.sushi.com/t/withdrawn-sushi-phantom-troupe-strategic-raise/4554>

## Disclaimer

This paper is for general information purposes only. It does not constitute investment advice or a recommendation or solicitation to buy or sell any investment and should not be used in the evaluation of the merits of making any investment decision. It should not be relied upon for accounting, legal or tax advice or investment recommendations. The opinions reflected herein are subject to change without being updated.


# FAQ

### Do you have a token?

We have not launched a [token](/protocol/arbor-token). However, if we do, early users and partners will be compensated.

### Are Arbor's DeFi bonds the same as TradFi bonds?

No. Bonds in traditional finance require legal infrastructure to enforce lending agreements. If a company defaults on their debt, lenders can take them through a process called bankruptcy where their assets are sold to repay creditors. This process relies on legal agreements and law enforcement entities to enforce said legal agreements. However, DAOs don't exist within the bounds of most, if any, legal systems in their current state. Therefore, the enforceability of legal agreements they sign is uncertain and risky. Instead of using legal contracts, Arbor uses smart contracts built on Ethereum to enforce agreements made between lenders and borrowers. Assets supplied as collateral are stored in smart contracts and made available for lenders to claim in the case of a [default](/participants/lenders/defaults).

### How is Arbor different than Olympus Pro / Bond Protocol?

Although OlympusPro and Bond Protocol use the term "bond", they are not selling bonds. Bonds are financial instruments, under which the issuer owes the holders a debt and (depending on the terms of the bond) is obliged to pay them interest (the coupon) and to repay the principal at a later date, termed the maturity date. Bond Protocols bonding mechanism does not require principal to be repaid and therefore can be simplified to selling tokens at a discount with a lockup period. From the OlympusDAO's documentation: *\[Bonding] allows Olympus to acquire its own liquidity and other reserve assets such as LUSD by selling OHM at a discount in exchange for these assets.*

### How are Arbor Convertible Bonds different than UMA Range Tokens?

Similar to the OlympusDAO bonds, UMA Range Tokens do not require principal to be repaid. Therefore, when a DAO sells a Range Token, they are not borrowing, they are selling their project tokens with more or fewer tokens being sold depending on the price of their project token at the settlement date.


# Auctions

How Arbor bonds are sold

## Summary

Auctions allow borrowers to set a minimum price for their bond sales and allow market demand to set the final price. Setting a minimum price also sets a maximum interest rate the borrower is willing to pay.

{% embed url="<https://www.youtube.com/watch?v=dlOd0nAUmVM>" %}

## Market-driven bond pricing

Auctions are implemented as batch auctions where lenders submit public bids with their desired amount and interest rate. Bids are included in the order of lowest interest rate to highest, with a higher bid amount breaking ties. At the close of the auction, the minimum interest rate required to reach the funding threshold is determined. This is the final rate for all participants. Lenders who specified an interest rate lower than or equal to the final clearing interest rate receive bonds at the clearing interest rate. Lenders that specified an interest rate higher than the final clearing interest rate do not receive any bonds and have their funds refunded.

![](/files/OH2zydnohwSvpFMGZvgJ)

If the funding threshold is not surpassed, there is no auction settlement and lenders’ funds are returned.

{% hint style="info" %}
Auctions are powered by Gnosis Auction. For more details, [read their docs](https://gnosis-auction.eth.link/#/docs#topAnchor).
{% endhint %}

## Auction details

Once you click on an ongoing auction under the “offerings” tab, you will see the auction details with all the necessary information available.

![Screenshot 2022-12-06 at 15 30 53](https://user-images.githubusercontent.com/112566599/205860129-23223a61-903f-4dd0-a641-ed7906989fc5.png)

As seen in the screenshot above, you will find the following information.

Offering amount: The total amount of bonds offered during this auction

Current bond price: The current price you can purchase the bond for. The price might change depending on the total order volume.

Total order volume: This amount shows the total amount of USDC already deposited for the offered bonds.

Current bond YTM (Yield to maturity): The number shows what annualized yield you will receive in total if participating in the offering. It reflects the delta in-between the bond price and the face value.

Min. Funding threshold: If the total order volume did not reach this threshold, the auction failed. All deposits will be returned. The threshold needs to be reached within the auction period.

Min. Bond price: The DAO offers the bond for that price at the beginning auction. The minimum bond may be lower than the current bond price if the auction is over-subscribed.

Max bond YTM: The maximum yield to maturity is the total delta in-between the minimum bond price and the face value at maturity. The shown YTM is an annualized rate and is similar to the term “APY” in defi.

## Place an order

To place an order, enter the amount of USDC you would like to lend out.

Define your maximum acceptable bond price and therefore minimum accepted yield for the offering.

![](https://user-images.githubusercontent.com/112566599/205862297-64cf00b6-8c42-4c46-b562-202791b5e915.jpeg)

If the current bond price at the auction's closing is lower than your accepted maximum bond price, your order will get filled. You can claim your bonds after the auction.

Please find a video with a walk-through [here](https://youtu.be/dlOd0nAUmVM).&#x20;


# Token

We have not launched a token. However, if we do, it will be used to compensate our early partners and users.


# Bonds

Borrowing on Arbor starts with bond issuance. At launch, Arbor will offer two types of bonds: [Simple bonds](/protocol/bonds/simple) and [Convertible bonds](/protocol/bonds/convert).


# Simple bonds

## Summary

Simple bonds allow DAOs and other on-chain entities to borrow stablecoins using tokens they have in their treasury as collateral. Simple bonds give lenders a sustainable, fixed yield. Simple bonds are [zero coupon bonds](/financial-concepts/zero-coupon-bonds), which are sold at a discount to the face value and do not pay coupons, hence why they are called "zero coupon" bonds.

> Simple Bond = Zero Coupon Bond

## Why should investors buy simple bonds?

Simple bonds offer investors an alternative to yield farming by providing sustainable, fixed returns.

![](/files/1sy4YjW3gmSS3NOCVlVv)

### Competitive yields

Both yield farming and simple bonds offer competitive yields. Historically, yield farming has provided 10-20% variable returns but those have compressed recently due to decreases in farming token prices. We expect lenders to earn 10-20% return on simple bonds issued through Arbor.

### Sustainable returns

Yield farming programs are inherently unsustainable. The majority of yield earned through yield farming comes from the project providing their native token as a subsidy. Usually, around 10-30% of the APR comes from interest paid by borrowers while 70-90% comes from token subsidies.

![](/files/FuzTfEfxwplNBZctMmpS)

In contrast, the majority of yield earned through lending to DAOs comes from DAOs paying interest. This is because DAOs have revenue generating businesses which allow them to pay higher interest rates. This makes yield earned on DAO bonds much more sustainable because subsidies eventually stop, forcing the yield farming to look for greener pastures.

![](/files/6Klrv4fOjfUVUVWMaurS)

### Fixed rates

While yield farming returns are wildly variable depending on day to day borrow demand, bonds issued by DAOs provide fixed rates. This guarantees investors a predictable return.

### Low smart contract risk

To generate competitive returns, yield farmers are typically forced to deposit funds in complex protocols on non-mainnet Ethereum blockchains. This exposes investors to high smart contract risk as well as bridging risk. As illustrated by the [Wormhole hack](https://cointelegraph.com/news/wormhole-hack-illustrates-danger-of-defi-cross-chain-bridges), bridging funds adds a significant amount of risk to investor strategies.

Arbor smart contracts are on Ethereum mainnet, which eliminates any bridging risk investors are exposed to. In addition, Arbor contracts have gone through [two audits](https://github.com/alwaysbegrowing/arbor-contracts/tree/main/audits) and are [relatively simple](https://github.com/alwaysbegrowing/arbor-contracts/). This reduced complexity results in decreased risk for investors.

### No credit risk

Lending to DAOs does bear a risk that is not shared by yield farming. Credit risk. To mitigate this risk, Arbor helps surface the DAOs financials and history with a public credit report. In addition, DAOs heavily overcollateralize their bond issuances to mitigate incentive to default. DAOs also use an on-chain signature to promise they will repay the amount borrowed plus interest.

## Why should DAOs sell simple bonds?

Simple bonds allow DAOs to borrow funds without the fear of liquidation by using their project tokens, which make up the majority of their treasuries. Borrowers using collateralized debt positions on other protocols must maintain a particular collateral ratio or risk being liquidated.

![](/files/ouKKNmmmIP4GLcoCHQg1)

If the protocol is expected to grow, a DAO might be better off delaying the sale of its project tokens, borrowing now, and selling fewer tokens at a higher price later. Or, even better, using increased protocol revenue from the growth funded by debt to pay off said debt and never having to sell governance tokens.


# Convertible bonds

## Summary

Convertible bonds allow DAOs and other on-chain entities to borrow stablecoins using tokens they have in their treasury as collateral. Any time before the maturity date, lenders can convert their bonds into a set amount of collateral tokens.

Convertible bonds give the lender upside in the collateral token along with the interest rate earned. When purchasing convertible bonds, lenders are effectively buying [call options](/financial-concepts/convertible-bonds/call-options) on the collateral token, and purchasing a [zero coupon bond](/financial-concepts/zero-coupon-bonds).

> Convertible Bond = Zero Coupon Bond + Call Option

## Why should investors buy convertible bonds?

Convertible bonds offer investors an alternative to yield farming by providing sustainable, fixed returns with token upside.

![](/files/D4dDJuJWNH260DOfcFij)

### Competitive yields

Both yield farming and convertible bonds offer competitive yields. Historically, yield farming has provided 10-20% variable returns but those have compressed recently due to decreases in farming token prices. We expect lenders to earn 10-15% return on convertible bonds issued through Arbor. However, returns can be much higher depending on the performance of the collateral token due to the built in [call options](/financial-concepts/convertible-bonds/call-options).

### Sustainable returns

Yield farming programs are inherently unsustainable. The majority of yield earned through yield farming comes from the project providing their native token as a subsidy. Usually, around 10-30% of the APR comes from interest paid by borrowers while 70-90% comes from token subsidies.

![](/files/FuzTfEfxwplNBZctMmpS)

In contrast, the majority of yield earned through lending to DAOs comes from DAOs paying interest. This is because DAOs have revenue generating businesses which allow them to pay higher interest rates. This makes yield earned on DAO bonds much more sustainable because subsidies eventually stop, forcing the yield farming to look for greener pastures.

![](/files/6Klrv4fOjfUVUVWMaurS)

### Token upside

In addition to sustainable yields, convertible bonds also offer token upside on the collateral tokens due to the built-in call options.

![](/files/fj1kNiMUboiPR3frqSGb)

This gives investors the chance to earn massive returns in the case that the collateral token price surpasses the strike price during the life of the bond.

### Fixed rates

While yield farming returns are wildly variable depending on day to day borrow demand, bonds issued by DAOs provide fixed rates. This guarantees investors a predictable return.

### Low smart contract risk

To generate competitive returns, yield farmers are typically forced to deposit funds in complex protocols on non-mainnet Ethereum blockchains. This exposes investors to high smart contract risk as well as bridging risk. As illustrated by the [Wormhole hack](https://cointelegraph.com/news/wormhole-hack-illustrates-danger-of-defi-cross-chain-bridges), bridging funds adds a significant amount of risk to investor strategies.

Arbor smart contracts are on Ethereum mainnet, which eliminates any bridging risk investors are exposed to. In addition, Arbor contracts have gone through [two audits](https://github.com/alwaysbegrowing/arbor-contracts/tree/main/audits) and are [relatively simple](https://github.com/alwaysbegrowing/arbor-contracts/). This reduced complexity results in decreased risk for investors.

### No credit risk

Lending to DAOs does bear a risk that is not shared by yield farming. Credit risk. To mitigate this risk, Arbor helps surface the DAOs financials and history with a public credit report. In addition, DAOs heavily overcollateralize their bond issuances to mitigate incentive to default. DAOs also use an on-chain signature to promise they will repay the amount borrowed plus interest.

## Why should DAOs sell convertible bonds?

Convertible bonds allow DAOs to borrow funds without the fear of liquidation by using their project tokens, which make up the majority of their treasuries. Borrowers using collateralized debt positions on other protocols must maintain a particular collateral ratio or risk being liquidated. Convertible bonds allow DAOs to reduce their cost of borrowing by selling call options on the collateral token.

![](/files/ouKKNmmmIP4GLcoCHQg1)

If the protocol is expected to grow, a DAO might be better off delaying the sale of its project tokens, borrowing now, and selling fewer tokens at a higher price later. Or, even better, using increased protocol revenue from the growth funded by debt to pay off said debt and never having to sell governance tokens.


# Orderbook

The orderbook allows investors to buy and sell active bonds from previous auctions, acting as a secondary marketplace. It follows the  [classic bid-ask model](https://www.investopedia.com/terms/o/order-book.asp) and uses the limit order framework of [1inch protocol](https://app.1inch.io/#/1/simple/swap/ETH/DAI). 1inch is one of the largest DEX aggregators and has [battle-tested code](https://github.com/1inch/limit-order-protocol) allowing Arbor to integrate the orderbook feature directly into our pre-existing UI.

**How to use the orderbook?**

You can find the orderbook here: <https://app.arbor.finance/orderbook>

Orders are listed as "Sell orders" to sell bonds or "Buy Orders" for USDC offered for bonds. All orders are considered limit orders.&#x20;

Select the bond you are interested in buying or selling from the dropdown menu on the right side of the orderbook table:&#x20;

<figure><img src="/files/V1uxrLFJeS17T9wt6x9q" alt=""><figcaption></figcaption></figure>

Connect your wallet to continue. To buy a bond, select the "Sell" tab to find available bonds listed in the market. To sell a bond, select the "Buy" tab to find potential offers for your bonds.&#x20;

<figure><img src="/files/N1XppethPaoJadewIkK3" alt=""><figcaption></figcaption></figure>

Once you identify an appropriate offer, complete the token approval process and fill the order to trigger the transaction from within your connected wallet. Each order can be filled partially or completely. The necessary funds must be in your connected wallet at the time the transaction is submitted to settle the transaction.&#x20;

<figure><img src="/files/kZsqef4b2EcgUUwqYmea" alt=""><figcaption><p>Fill the limit order after approval</p></figcaption></figure>


# Create an order

To create an order, select the "Create Order" button from the orderbook table, or select "Buy Bonds" or "Sell Bonds" from the drop-down menu in the header. You will be guided to the order creation interface.&#x20;

<figure><img src="/files/p0ziHTgGWna3gQakIsxW" alt=""><figcaption><p>Order creation interface</p></figcaption></figure>

1. Select the "Buy" or "Sell" button depending on your preference and select the bond you are interested in buying or selling from the drop-down menu.&#x20;
2. Fill in the number of bonds you want to buy or sell.
3. Select the token you want to exchange for the bonds. If you are buying bonds, this will be the token you use to purchase the bonds. If you are selling bonds, this will be the token you will receive from the purchaser. Currently, all orders are settled in USDC.
4. The "Total Order Token Amount" defines the amount of USDC you are willing to spend or receive for the selected amount of bonds. For example, if you are interested in purchasing 100 bonds, you will enter the amount of USDC you are willing to pay for the total 100 bonds (e.g. 90 USDC).
5. Set the expiration date. If your order is not filled by the expiration date, your order will expire and be removed from the orderbook.

When setting the parameters for the order, the preview to your right shows the summary of the order:

<figure><img src="/files/riUJdddIfKkytYrsRLvy" alt=""><figcaption><p>Order preview</p></figcaption></figure>

Make sure to double-check that your order parameters are as expected. For example, make sure the yield-to-maturity, price per bond, and token amounts are configured correctly. Once your order is correctly configured, select "Continue". Approve the tokens and sign the order in your wallet. Approving costs gas, however listing orders is free of gas. Keep in mind, cancelling or changing the order will cost gas.&#x20;

Navigate to the orderbook table to view your order. As interested users interact with the table, they can fill your order partially or in full. You can also cancel your order from the table.


# Borrowers

Borrowers are creditworthy DAOs who use their treasury tokens as collateral to borrow without having to worry about liquidations or interest rate risk.

{% hint style="info" %}
If you're interested in becoming a borrower, fill out this [borrower form](https://forms.gle/Hn4FQscKbj9BniKu8) and we will get back to you shortly.
{% endhint %}


# How does borrowing work?

Borrowing is facilitated through the creation of a [bond](/protocol/bonds) and its sale through an [auction](/protocol/auctions).

{% hint style="info" %}
If your DAO is interested in becoming a borrower, fill out this [borrower form](https://forms.gle/Hn4FQscKbj9BniKu8) and we will get back to you shortly.
{% endhint %}

## Example

Let's say Uniswap issues 1,000,000 convertible bonds maturing in 12 months and backs each with 0.5 UNI as collateral with each bond being convertible into 0.04 UNI.

### Offering

Uniswap decides to sell the bonds via an auction with a minimum price of $0.943, knowing that they are happy to borrow at or below 6% interest (\[1 - $0.943] / $0.943 = 6%). The more demand, the higher the bonds will sell for which lowers the interest rate Uniswap pays. During the auction, there was sufficient demand and the clearing price ended up being $0.95. Therefore, Uniswap raised $950,000 (1,000,000 bonds \* $0.95/bond) and will owe $1,000,000 in 12 months, which translates to an effective interest rate of 5.3% ($0.05/$0.95).

![](/files/4MwUsk7ResTO5sic1wFX)

### Repayment

For every bond that is repaid, Uniswap is able to withdraw the collateral/bond which is 0.5 UNI.

#### **Full repayment**

If Uniswap fully repays the $1,000,000 before the 12 months have passed, they will be able to withdraw all their collateral.

#### Partial repayment

If Uniswap defaults on their promise and only repays $500,000 (failing to repay the remaining $500,000 by the maturity date) the bondholders will be able to redeem their bonds for $0.5 and 0.25 UNI.

#### No repayment

If Uniswap defaults on their promise and does not repay the bonds by maturity, the bondholders will get the full amount of collateral, 0.5 UNI/bond.

#### Repaying convertible bonds

If UNI appreciates in value and bondholders elect to convert their bonds into the convertible UNI tokens, UNI will owe $1 less for every bond converted. Also, for every bond repaid, Uniswap will be able to withdraw the collateral/bond **until there are only convertible tokens left.** Convertible tokens cannot be withdrawn until maturity to ensure the bondholders have the ability to convert their bonds.


# How does my DAO get verified?

On-chain entities looking to issue bonds will need to be verified and go through our diligence process. Verification ensures an entity is who they say they are. Diligence helps us surface relevant information about the borrower. Borrowers can kickoff the verification/diligence process using [this form](https://docs.google.com/forms/d/e/1FAIpQLSddCygZX3vZu3B8oZ9-ohza15muJbWVo-rhz8u2nSJ4M7NRhw/viewform).


# How do defaults work?

If a borrower does not repay principal and interest by the maturity date, they have a seven day grace period to make the required payments. Borrowers must arrange payment during this time, and are responsible for alerting bondholders the status of their repayment. If the borrower does not make the payment within the grace period, their collateral can be claimed by bondholders. DAOs who default will incur serious reputational damage which would impair their ability to continue operating in the sector as a record of the default will exist on-chain.

![](/files/VjK8Hq5xyKkmgCepvPGG)

Borrowers sign an on-chain agreement promising repayment. This agreement sets out the terms and conditions of their bond issuance.


# Credit Enhancers

Additional steps may be taken to enhance the borrower's credit.

## Promissory Note

Issuers may add an on-chain promise to repay the bond. This is displayed alongside the issuer information on the Bond page. The message to be signed consists of the `bond` address as well as the content **This signature represents a promise to unconditionally repay the bond in full by the maturity date.**

<details>

<summary>Developer Details</summary>

```
ARBOR_PROMISSORY_NOTE_DOMAIN = ({ chainId }: { chainId: number }) => ({
  chainId,
  name: 'Arbor Finance',
  version: '1.0.0',
})

ARBOR_PROMISSORY_NOTE_TYPES = {
  PromissoryNote: [
    { type: 'address', name: 'bond' },
    { type: 'string', name: 'content' },
  ],
}

ARBOR_PROMISSORY_NOTE_VALUE = (address: string) => ({
  bond: address,
  content:
    'This signature represents a promise to unconditionally pay the bond by the maturity date.',
})
```

</details>


# What are the fees?

Establishment fees are paid by borrowers. This fee is paid to the Arbor Treasury.


# Lenders

Lenders are DeFi natives looking to earn sustainable, fixed yields. Read more [here](/protocol/bonds/simple) about the benefits of purchasing DAO bonds over yield farming.

{% hint style="info" %}
If you're interested in becoming a lender join our [discord](https://discord.gg/facdBD3ZtA) .
{% endhint %}


# When can I convert my bonds?

[Convertible bonds](/protocol/bonds/convert) can be converted into convertible tokens up until the maturity date. Once the maturity date passes, bonds are no longer convertible and can only be redeemed for the principal plus interest.

![](/files/P3Elgpdc5dvGyR170Cvx)


# How does lending work?

Lending is facilitated through the purchasing of [bonds](/protocol/bonds). Bonds can be purchased through participation in [auctions](/protocol/auctions).

{% hint style="info" %}
If you're interested in becoming a lender, join our [discord](https://discord.com/invite/facdBD3ZtA) and we will get back to you shortly.
{% endhint %}

## Example

Let's assume Uniswap issues 1,000,000 Convert bonds maturing in 12 months and backs each with 0.5 UNI as collateral with each bond being convertible into 0.04 UNI. The value of this bond at issuance was estimated to be $0.97.

### Offering

Uniswap decides to sell their convertible bonds via an auction with a minimum price of $0.943. After doing some due-dilligence, a lender decides the value to them at $0.96, so they submit a bid with $100,000 volume at a price of $0.96 / bond. The auction closes and the clearing price ended up being $0.95. Because the bid price was greater than the close price, the lender's order gets fulfilled at the lower $0.95/bond closing price instead of the $0.96 offered. Therefore, the lender purchases 105,263 bonds ($100,000 / $0.95) for $100,000 which can be redeemed at maturity for $105,263.

![](/files/f1fvzy48GQvv3fPRiWqF)

### Redemption

#### **Full repayment**

If Uniswap fully repays the bonds before the 12 months have passed, the lender will be able to withdraw $1/bond.

#### Partial repayment

If Uniswap defaults on their promise and pays half the principal and interest but fails to repay the remaining half by the maturity date, the lender will be able to redeem their bonds for $0.5 and 0.25 UNI (half the amount owed and half the collateral).

#### No repayment

If Uniswap defaults on their promise and does not repay the bonds by maturity, the lender will get the full amount of collateral, 0.5 UNI/bond.

#### Converting bonds

If UNI appreciates in value to $50, the lender may elect to convert their bonds into the 0.04 convertible UNI tokens which would be valued at $2/bond for a \~111% return (\[$2 - $0.95] / $0.95).


# How do defaults work?

If a borrower does not repay principal and interest by the maturity date, they have a seven day grace period to make the required payments. Borrowers must arrange payment during this time, and are responsible for alerting bondholders the status of their repayment. If the borrower does not make the payment within the grace period, their collateral can be claimed by bondholders. DAOs who default will incur serious reputational damage which would impair their ability to continue operating in the sector as a record of the default will exist on-chain.

![](/files/VjK8Hq5xyKkmgCepvPGG)

Borrowers sign an on-chain agreement promising repayment. This agreement sets out the terms and conditions of their bond issuance.


# Zero Coupon Bonds

A bond is a fixed-income instrument that represents a loan made by an investor to a borrower. A bond could be thought of as an I.O.U. between the lender and borrower that includes the details of the loan and its payments.

A zero-coupon bond (ZCB) does not pay interest but instead trades at a deep discount, rendering a profit at maturity, when the bond is redeemed for its full face value.

{% hint style="info" %}
The majority of this content was pulled from [Investopedia](https://www.investopedia.com) and modified to better serve Arbor users. We thank [Investopedia](https://www.investopedia.com) for providing these educational materials.
{% endhint %}


# Overview

Zero coupon bonds are financial tools through which organizations raise capital. When bonds are issued, investors purchase those bonds, effectively acting as lenders to the issuing entity. The investors earn a return when the principal and interest are paid at maturity.

### Attributes

Zero coupon bonds have the following basic attributes:

* **Face value** - The amount the bond will be worth at maturity. The face value of a Arbor bond is always $1. For example, say an investor purchases a bond at $0.83, and another investor buys the same bond later when it is $0.9. When the bond matures, both investors will receive the $1 face value of the bond.
* **Maturity date** - The date on which the bond will mature and the bond issuer will pay the bondholder the face value of the bond.


# ZCB pricing

### Pricing formula

The price of a zero-coupon bond can be calculated as:

> Price = F ÷ (1 + r)^n

where:

* F = Face value of the bond
* r = required rate of interest
* n = number of years until maturity

If an investor wishes to make a 10% return on a bond, with $1 face value, that is due to mature in 1 year, they will be willing to pay the following:

> $1 / (1 + 0.1)^1 = $0.91

If the borrower accepts this offer, the bond will be sold to the investor at $0.91 / $1 = 91% of the face value. Upon maturity, the investor gains $1 - $0.91 = $0.09, which translates to 10% interest per year. The greater the length of time until the bond matures, the less the investor pays for it, and vice versa.

The following graph, courtesy of the [FiatDAO whitepaper](https://fiatdao.com/_next/static/ee94825d84674d155ad1.pdf), shows the pricing of zero coupon bonds for different interest rates ranging from 0 (dark blue line color) to 10% (dark red line color). As expected, the fair price converges to the ZCB’s face value when the remaining time-to-maturity approaches 0.

![](/files/MUNdZbEfl8lE02zMP0Dy)

### Duration and convexity

Bonds will rise or fall in value as interest rates change. The sensitivity to changes in the interest rate environment is called **duration**. The use of the term duration in this context can be confusing to new bond investors because it does not refer to the length of time the bond has before maturity. Instead, duration describes how much a bond’s price will rise or fall with a change in interest rates.

The rate of change of a bond’s sensitivity to interest rates (duration) is called **convexity**. These factors are difficult to calculate, and the analysis required is usually done by professionals.


# Options

An option gives the holder the right to buy or sell a particular token at a specified price (the [strike price](https://www.investopedia.com/terms/s/strikeprice.asp)) for a certain period of time. There are two kinds of options, calls and puts. [Calls](/financial-concepts/convertible-bonds/call-options) allow the holder to lock in a price at which to buy the token. Puts allow the holder to lock in the selling price. Options don’t last forever, though, they have an [expiration date](https://www.investopedia.com/terms/e/expiration-date.asp). After this date, the holder can no longer buy or sell the token at the strike price and the option is worthless. Put options aren't used in the protocol so we will only cover call options.

{% hint style="info" %}
Much of this content was pulled from [Lyra protocol's documentation](https://docs.lyra.finance) and [Investopedia](https://www.investopedia.com) and modified to better serve Arbor users. We thank [Lyra](https://www.lyra.finance) and [Investopedia](https://www.investopedia.com) for providing these educational materials and highly recommend you check them out!
{% endhint %}


# Call options

### Understanding Call Options <a href="#mntl-sc-block_1-0-9" id="mntl-sc-block_1-0-9"></a>

A call option gives the holder the right to buy 1 token at the strike price up until the expiration date.

For example, a single call option contract may give a holder the right to buy 1 UNI token at $50 up until the expiration date six months later. As the value of UNI goes up, the price of the option contract goes up, and vice versa. The call option buyer may hold the contract until the expiration date, at which point they can [take delivery](https://www.investopedia.com/terms/d/delivery.asp) of the 1 UNI token.

You pay a fee to purchase a call option, called the [premium](https://www.investopedia.com/terms/p/premium.asp). It is the price paid for the rights that the call option provides. If at expiration the underlying asset is below the strike price, the call buyer loses the premium paid. This is the maximum loss.

### Value at expiration

If the underlying asset's market price is above the strike price at expiration, the profit is the difference in prices, minus the premium.

For example, if UNI is trading at $56 at expiry, the option contract strike price is $50, and the options cost the buyer $2, the profit is $56 - ($50 + $2) = $4.

Now, if at expiration UNI is trading below $50, obviously the buyer won't exercise the option to buy the token at $50 a piece, and the option expires worthless. The buyer loses $2 for each contract they bought.

![](/files/c3MlgLIEbu0kWrREiuN0)


# Option pricing

The three biggest factors that determine the price of an option are:

* **Token price** - the token price relative to the strike price
* **Time** - the amount of time remaining until expiration
* **Historical volatility** - how much the token is expected to move until expiration

### Token Price

If an option is in the money, then it is said to have intrinsic value. For example, the $80 strike call for a token worth $100 can be immediately exercised to realize a $20 gain. When you buy this call, the $20 intrinsic value is baked into the price of the option (you don’t get it for free).

### Time

The more time to expiry, the more time there is for the token to move and the more expensive the option is. The price of an option is strictly increasing with respect to time.

### Historical volatility

Volatility provides a metric for the change in price of an asset over time. Typically, the ***higher*** the volatility of an asset, the ***more*** it is expected to move, and the more expensive the option will be. If volatility is ***low***, the ***less*** it is expected to move, and options will be cheaper.

Traditionally, option pricing models use implied volatility (IV) instead of historical volatility (HV). The IV of an asset expresses how much the asset is expected to move in the future. However, IV is calculated based on the current price of the option and accounts for fluctuations in supply, demand, and a variety of other factors impacting markets. Because the bonds are not currently on the market, it is not possible to accurately assess the IV of the bonds. Therefore, historical volitility (HV) is used. HV provides a metric of the change in an asset over a predefined period of time (e.g., the past 180 days), as opposed to accounting for future changes in the asset. By determining how volatile the underlying asset (e.g. token) has been historically, we can provide an estimation of the price of the option.


# Architecture

The V1 Architecture consists of a Bond and an OpenZeppelin clone factory, BondFactory, to create new instances of the Bond contract.

## Entities

The two entities, Bond and BondFactory, make up the protocol.

An Issuer (EOA) first creates a Bond comprised of many bond shares via the BondFactory. The Issuer can then distribute those bond shares to BondHolder(s) (EOA(s)).

{% @mermaid/diagram content="erDiagram
%% Many Issuers to single BondFactory
Issuer-EOA }|..|| BondFactory: uses
%% Single Issuer to many Bonds
Issuer-EOA ||--|{ Bond : creates
%% Single Bond to zero or more BondHolder
Bond ||--o{ BondHolder-EOA : has

Bond {
string bondName
string bondSymbol
address bondOwner
uint256 maturity
address paymentToken
address collateralToken
uint256 collateralRatio
uint256 convertibleRatio
uint256 maxSupply
}
BondFactory {
uint256 MAX\_TIME\_TO\_MATURITY "3650"
uint8 MAX\_DECIMALS "18"
bytes32 ISSUER\_ROLE
bytes32 ALLOWED\_TOKEN
address tokenImplementation
mapping isBond "(address => bool)"
bool isIssuerAllowListEnabled
bool isTokenAllowListEnabled
}" %}

## Lifecycle

A typical lifecycle starts from issuance and ends when all bond shares have either been redeemed / converted by the bond holders, or burnt by the issuer.

### 1. Arbor Finance Initializes BondFactory Contract

The Bond Factory contract is deployed by the Arbor Admin (multi-sig). The contract assigns the admin role to the deployer and the proxy contract is initialized with the token implementation (Bond contract).

{% @mermaid/diagram content="flowchart LR
arborAdmin((Arbor Admin))
bondFactory\[Bond Factory]
bond\["Bond Implementation"]

bondFactory<-.uses.->bond
arborAdmin--deploys---->bondFactory
bondFactory--grant admin role---->arborAdmin" %}

### 2. Issuer Contacts Arbor Finance

* Arbor Finance evaluates Issuer's credit worthiness
* Arbor Finance recommends parameters for the issuance
  * Amount of ERC20 token backing each bond share or
    * This is known as the **collateral token**
  * Amount of collateral each bond share would convert into
  * Total issuance length
    * This is known as the **maturity date**
  * Total issuance size
    * This is known as the **total supply**
  * The ERC20 token the Bond is denominated
    * This is known as the **payment token**
* Arbor Finance adds Issuer to the Issuer Allow List
* Arbor Finance adds both the Collateral & Payment Tokens to the token allow list

### 3. Issuer Creates a Bond

After the issuance has been approved, the issuer will be on the allowed issuer list and their intended collateral token and payment token will be added to the allowed token list. The Bonds are created (minted) at the same time that the collateral is deposited. After a Bond is created, the issuer can sell the Bond through the [Arbor Finance App](https://app.arbor.garden) (we use [Gnosis' Batch Auction](https://github.com/gnosis/ido-contracts)).

These are sold as [Zero Coupon Bonds](https://docs.arbor.garden/portal/financial-concepts/zero-coupon-bonds). Another party will purchase these bond shares at a discount by paying with the Payment Token. The purchasers are known as **bond holders**. At maturity, the bond holders can redeem their bond shares at 1 to 1 for Payment Tokens.

{% @mermaid/diagram content="flowchart TB
issuer((Issuer))
subgraph Bond Factory
%% Names have newlines (\n) to make the shapes smaller
createBond\[Create Bond]
isIssuerListEnabled{Is Issuer Allow\nList Enabled?}
hasIssuerRole{Is Issuer\nAllowed?}
isTokenListEnabled{Is Token Allow\nList Enabled?}
hasTokenRole{Are Both\nPayment & Collateral\nTokens Allowed?}
hasEnoughCollateral{Has enough\ncollateral?}
createNewBond\[Deposit Collateral\n&\n Create New Bond]
end
issuer--with configuration-->createBond
createBond-->isIssuerListEnabled
%% Separate these and organize with ✅ on left
%% and ❌ on the right to stay consistent
isIssuerListEnabled--"✅"-->hasIssuerRole
isIssuerListEnabled--"❌"-->isTokenListEnabled

```
isTokenListEnabled--"✅"-->hasTokenRole
isTokenListEnabled--"❌"-->hasEnoughCollateral

hasIssuerRole--"✅"-->isTokenListEnabled
hasIssuerRole --"❌"-->Reject

hasTokenRole--"✅"-->hasEnoughCollateral
hasTokenRole--"❌"-->Reject

hasEnoughCollateral--"✅"-->createNewBond
hasEnoughCollateral--"❌"--->Reject" %}
```

## Bond States

Issuers and Bond Holders can both interact with the bond in a few ways. For a simpler view, look at the state transition diagram. Since the Bond is an ERC20 token, the bond shares may be **`transferred`** at any time by any users.

### Issuer States

In addition to the actions taken by bond holders, Issuers have the ability to **`pay`**, **`withdrawExcessCollateral`**, **`withdrawExcessPayment`** and **`sweep`**. These can be called at any time to affect the Bond.

#### Decrease of collateral requirement

If there is an excess of collateral in the contract at any time, the Issuer may call `withdrawExcessCollateral`. This will transfer collateral out of the Bond contract. There are three ways in which the Bond can have an excess amount of collateral in the contract.

1. The total number of bond shares decrease.
   * Issuers may **`burn`** their excess bonds.
   * Bond Holders may **`convert`** their bonds before maturity.
   * Bond Holders may **`redeem`** their bonds.
2. The amount of Payment Tokens in the contract covers a portion of the bond shares.
   * Issuers may **`pay`** a portion of the Payment Token to the contract.
3. (For a convertible bond) The Bond has reached maturity and no longer requires collateral for convertibility.
   * After maturity, the locked collateral required to potentially convert all bonds is lifted.

#### Decrease of payment requirement

There are ways in which the payment requirement can decrease. At any time, the Issuer may also `withdrawExcessPayment` to reclaim any excess Payment Token in the contract.

1. The total number of bond shares decrease.
   * Issuers may **`burn`** their excess bonds.
   * Bond Holders may **`convert`** their bonds before maturity.

#### ERC20 Token Accidentally Sent

The Issuer has a utility function, **`sweep`** available to retrieve any ERC20 token sent to the Bond contract by mistake.

### Bond Holder States

The Bond Holders can interact with the Bond contract in different ways before and after maturity is reached.

#### Before Maturity

1. (For a convertible bond) The bond holders may **`convert`** their bond shares into the underlying collateral at a pre-determined ratio.
2. The bond holders may **`redeem`** for Payment Token if the bond is fully paid.

#### After Maturity

1. The bond holders may **`redeem`** the bond.
   * If the bond is fully paid, redemption will be for Payment Token
   * If the bond has no payment, redemption will be for Collateral Token
   * If the bond is partially paid, redemption will be for a pro-rata amount of Payment Token & Collateral Token


# Bond

A custom ERC20 token that can be used to issue bonds.The contract handles issuance, payment, conversion, and redemption.

## Events

### Approval

| address `indexed` | owner   |
| ----------------- | ------- |
| address `indexed` | spender |
| uint256           | value   |

### CollateralWithdraw

Emitted when collateral is withdrawn.

| address `indexed` | from     |
| ----------------- | -------- |
| address `indexed` | receiver |
| address `indexed` | token    |
| uint256           | amount   |

### Convert

Emitted when bond shares are converted by a Bond holder.

| address `indexed` | from                     |
| ----------------- | ------------------------ |
| address `indexed` | collateralToken          |
| uint256           | amountOfBondsConverted   |
| uint256           | amountOfCollateralTokens |

### ExcessPaymentWithdraw

Emitted when payment over the required amount is withdrawn.

| address `indexed` | from     |
| ----------------- | -------- |
| address `indexed` | receiver |
| address `indexed` | token    |
| uint256           | amount   |

### Initialized

### OwnershipTransferred

| address `indexed` | previousOwner |
| ----------------- | ------------- |
| address `indexed` | newOwner      |

### Payment

Emitted when a portion of the Bond's principal is paid.

| address `indexed` | from   |
| ----------------- | ------ |
| uint256           | amount |

### Redeem

Emitted when a bond share is redeemed.

| address `indexed` | from                          |
| ----------------- | ----------------------------- |
| address `indexed` | paymentToken                  |
| address `indexed` | collateralToken               |
| uint256           | amountOfBondsRedeemed         |
| uint256           | amountOfPaymentTokensReceived |
| uint256           | amountOfCollateralTokens      |

### TokenSweep

Emitted when a token is swept by the contract owner.

| address                 | from     |
| ----------------------- | -------- |
| address `indexed`       | receiver |
| contract IERC20Metadata | token    |
| uint256                 | amount   |

### Transfer

| address `indexed` | from  |
| ----------------- | ----- |
| address `indexed` | to    |
| uint256           | value |

## Errors

### BondBeforeGracePeriodAndNotPaid

* Bond redemption is impossible because the grace period has not yet passed and the bond has not been fully paid.

### BondPastMaturity

* Operation restricted because the Bond has matured.

### NoPaymentToWithdraw

* Attempted to withdraw with no excess payment in the contract.

### NotEnoughCollateral

* Attempted to withdraw more collateral than available.

### PaymentAlreadyMet

* Attempted to pay after payment was met.

### SweepDisallowedForToken

* Attempted to sweep a token used in the contract.

### ZeroAmount

* Attempted to perform an action that would do nothing.

## Methods

### allowance

```solidity
function allowance(address owner, address spender) external view returns (uint256)
```

#### Parameters

| address | owner   |
| ------- | ------- |
| address | spender |

#### Returns

### amountUnpaid

```solidity
function amountUnpaid() external view returns (uint256 paymentTokens)
```

The amount of paymentTokens required to fully pay the contract.

#### Returns

### approve

```solidity
function approve(address spender, uint256 amount) external nonpayable returns (bool)
```

#### Parameters

| address | spender |
| ------- | ------- |
| uint256 | amount  |

#### Returns

### balanceOf

```solidity
function balanceOf(address account) external view returns (uint256)
```

#### Parameters

#### Returns

### burn

```solidity
function burn(uint256 amount) external nonpayable
```

#### Parameters

### burnFrom

```solidity
function burnFrom(address account, uint256 amount) external nonpayable
```

#### Parameters

| address | account |
| ------- | ------- |
| uint256 | amount  |

### collateralBalance

```solidity
function collateralBalance() external view returns (uint256 collateralTokens)
```

The external balance of the ERC20 collateral token.

#### Returns

### collateralRatio

```solidity
function collateralRatio() external view returns (uint256)
```

The number of collateralTokens per Bond.

#### Returns

### collateralToken

```solidity
function collateralToken() external view returns (address)
```

The ERC20 token used as collateral backing the bond.

#### Returns

### convert

```solidity
function convert(uint256 bonds) external nonpayable
```

For convertible Bonds (ones with a convertibilityRatio > 0), the Bond holder may convert their bond to underlying collateral at the convertibleRatio. The bond must also have not past maturity for this to be possible.

#### Parameters

### convertibleRatio

```solidity
function convertibleRatio() external view returns (uint256)
```

The number of convertibleTokens the bonds will convert into.

#### Returns

### decimals

```solidity
function decimals() external view returns (uint8)
```

#### Returns

### decreaseAllowance

```solidity
function decreaseAllowance(address spender, uint256 subtractedValue) external nonpayable returns (bool)
```

#### Parameters

| address | spender         |
| ------- | --------------- |
| uint256 | subtractedValue |

#### Returns

### gracePeriodEnd

```solidity
function gracePeriodEnd() external view returns (uint256 gracePeriodEndTimestamp)
```

One week after the maturity date. Bond collateral can be redeemed after this date.

#### Returns

### increaseAllowance

```solidity
function increaseAllowance(address spender, uint256 addedValue) external nonpayable returns (bool)
```

#### Parameters

| address | spender    |
| ------- | ---------- |
| uint256 | addedValue |

#### Returns

### initialize

```solidity
function initialize(string bondName, string bondSymbol, address bondOwner, uint256 _maturity, address _paymentToken, address _collateralToken, uint256 _collateralRatio, uint256 _convertibleRatio, uint256 maxSupply) external nonpayable
```

This one-time setup initiated by the BondFactory initializes the Bond with the given configuration.

#### Parameters

| string  | bondName           | Passed into the ERC20 token to define the name.                                                                                                                            |
| ------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| string  | bondSymbol         | Passed into the ERC20 token to define the symbol.                                                                                                                          |
| address | bondOwner          | Ownership of the created Bond is transferred to this address by way of \_transferOwnership and also the address that tokens are minted to. See \`initialize\` in \`Bond\`. |
| uint256 | \_maturity         | The timestamp at which the Bond will mature.                                                                                                                               |
| address | \_paymentToken     | The ERC20 token address the Bond is redeemable for.                                                                                                                        |
| address | \_collateralToken  | The ERC20 token address the Bond is backed by.                                                                                                                             |
| uint256 | \_collateralRatio  | The amount of collateral tokens per bond.                                                                                                                                  |
| uint256 | \_convertibleRatio | The amount of convertible tokens per bond.                                                                                                                                 |
| uint256 | maxSupply          | The amount of Bonds given to the owner during the one- time mint during this initialization.                                                                               |

### isMature

```solidity
function isMature() external view returns (bool isBondMature)
```

Checks if the maturity timestamp has passed.

#### Returns

### maturity

```solidity
function maturity() external view returns (uint256)
```

A date set at Bond creation when the Bond will mature.

#### Returns

### name

```solidity
function name() external view returns (string)
```

#### Returns

### owner

```solidity
function owner() external view returns (address)
```

#### Returns

### pay

```solidity
function pay(uint256 amount) external nonpayable
```

Allows the owner to pay the bond by depositing paymentTokens.

#### Parameters

### paymentBalance

```solidity
function paymentBalance() external view returns (uint256 paymentTokens)
```

Gets the external balance of the ERC20 paymentToken.

#### Returns

### paymentToken

```solidity
function paymentToken() external view returns (address)
```

This is the token the borrower deposits into the contract and what the Bond holders will receive when redeemed.

#### Returns

### previewConvertBeforeMaturity

```solidity
function previewConvertBeforeMaturity(uint256 bonds) external view returns (uint256 collateralTokens)
```

Before maturity, if the given bonds are converted, this would be the number of collateralTokens received. This function rounds down the number of returned collateral.

#### Parameters

#### Returns

### previewRedeemAtMaturity

```solidity
function previewRedeemAtMaturity(uint256 bonds) external view returns (uint256 paymentTokensToSend, uint256 collateralTokensToSend)
```

At maturity, if the given bond shares are redeemed, this would be the number of collateralTokens and paymentTokens received by the bond holder. The number of paymentTokens to receive is rounded down.

#### Parameters

#### Returns

| uint256 | The number of paymentTokens that the bond shares would be redeemed for. |
| ------- | ----------------------------------------------------------------------- |
| uint256 | The number of collateralTokens that would be redeemed for.              |

### previewWithdrawExcessCollateral

```solidity
function previewWithdrawExcessCollateral() external view returns (uint256 collateralTokens)
```

The number of collateralTokens that the owner would be able to withdraw from the contract. This does not take into account an amount of payment like `previewWithdrawExcessCollateralAfterPayment` does. See that function for more information.

#### Returns

### previewWithdrawExcessCollateralAfterPayment

```solidity
function previewWithdrawExcessCollateralAfterPayment(uint256 payment) external view returns (uint256 collateralTokens)
```

The number of collateralTokens that the owner would be able to withdraw from the contract. This function rounds up the number of collateralTokens required in the contract and therefore may round down the amount received.

#### Parameters

#### Returns

### previewWithdrawExcessPayment

```solidity
function previewWithdrawExcessPayment() external view returns (uint256 paymentTokens)
```

The number of excess paymentTokens that the owner would be able to withdraw from the contract.

#### Returns

### redeem

```solidity
function redeem(uint256 bonds) external nonpayable
```

The Bond holder can burn bond shares in return for their portion of paymentTokens and collateralTokens backing the Bonds. These portions of tokens depends on the number of paymentTokens deposited. When the Bond is fully paid, redemption will result in all paymentTokens. If the Bond has reached maturity without being fully paid, a portion of the collateralTokens will be available.

#### Parameters

### renounceOwnership

```solidity
function renounceOwnership() external nonpayable
```

### sweep

```solidity
function sweep(contract IERC20Metadata sweepingToken, address receiver) external nonpayable
```

Sends ERC20 tokens to the owner that are in this contract.

#### Parameters

| contract IERC20Metadata | sweepingToken | The ERC20 token to sweep and send to the receiver. |
| ----------------------- | ------------- | -------------------------------------------------- |
| address                 | receiver      | The address that is transferred the swept token.   |

### symbol

```solidity
function symbol() external view returns (string)
```

#### Returns

### totalSupply

```solidity
function totalSupply() external view returns (uint256)
```

#### Returns

### transfer

```solidity
function transfer(address to, uint256 amount) external nonpayable returns (bool)
```

#### Parameters

| address | to     |
| ------- | ------ |
| uint256 | amount |

#### Returns

### transferFrom

```solidity
function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)
```

#### Parameters

| address | from   |
| ------- | ------ |
| address | to     |
| uint256 | amount |

#### Returns

### transferOwnership

```solidity
function transferOwnership(address newOwner) external nonpayable
```

#### Parameters

### withdrawExcessCollateral

```solidity
function withdrawExcessCollateral(uint256 amount, address receiver) external nonpayable
```

The Owner may withdraw excess collateral from the Bond contract. The number of collateralTokens remaining in the contract must be enough to cover the total supply of Bonds in accordance to both the collateralRatio and convertibleRatio.

#### Parameters

| uint256 | amount   | The number of collateralTokens to withdraw. Reverts if the amount is greater than available in the contract. |
| ------- | -------- | ------------------------------------------------------------------------------------------------------------ |
| address | receiver | The address transferred the excess collateralTokens.                                                         |

### withdrawExcessPayment

```solidity
function withdrawExcessPayment(address receiver) external nonpayable
```

The owner can withdraw any excess paymentToken in the contract.

#### Parameters


# BondFactory

This factory contract issues new bond contracts.

## Events

### BondCreated

Emitted when a new bond is created.

| address           | newBond                |
| ----------------- | ---------------------- |
| string            | name                   |
| string            | symbol                 |
| address `indexed` | owner                  |
| uint256           | maturity               |
| address `indexed` | paymentToken           |
| address `indexed` | collateralToken        |
| uint256           | collateralTokenAmount  |
| uint256           | convertibleTokenAmount |
| uint256           | bonds                  |

### IssuerAllowListEnabled

Emitted when the restriction of bond creation to allow-listed accounts is toggled on or off.

### RoleAdminChanged

| bytes32 `indexed` | role              |
| ----------------- | ----------------- |
| bytes32 `indexed` | previousAdminRole |
| bytes32 `indexed` | newAdminRole      |

### RoleGranted

| bytes32 `indexed` | role    |
| ----------------- | ------- |
| address `indexed` | account |
| address `indexed` | sender  |

### RoleRevoked

| bytes32 `indexed` | role    |
| ----------------- | ------- |
| address `indexed` | account |
| address `indexed` | sender  |

### TokenAllowListEnabled

Emitted when the restriction of collateralToken and paymentToken to allow-listed tokens is toggled on or off.

## Errors

### CollateralTokenAmountLessThanConvertibleTokenAmount

* There must be more collateralTokens than convertibleTokens.

### InvalidDeposit

* Fails if the collateralToken takes a fee.

### InvalidMaturity

* Maturity date is not valid.

### TokensMustBeDifferent

* The paymentToken and collateralToken must be different.

### TooManyDecimals

* Decimals with more than 18 digits are not supported.

### ZeroBondsToMint

* Bonds must be minted during initialization.

## Methods

### ALLOWED\_TOKEN

```solidity
function ALLOWED_TOKEN() external view returns (bytes32)
```

The role given to allowed tokens.

#### Returns

### DEFAULT\_ADMIN\_ROLE

```solidity
function DEFAULT_ADMIN_ROLE() external view returns (bytes32)
```

#### Returns

### ISSUER\_ROLE

```solidity
function ISSUER_ROLE() external view returns (bytes32)
```

The role required to issue bonds.

#### Returns

### createBond

```solidity
function createBond(string name, string symbol, uint256 maturity, address paymentToken, address collateralToken, uint256 collateralTokenAmount, uint256 convertibleTokenAmount, uint256 bonds) external nonpayable returns (address clone)
```

Creates a new Bond. The calculated ratios are rounded down.

#### Parameters

| string  | name                   | Passed into the ERC20 token to define the name.                                                       |
| ------- | ---------------------- | ----------------------------------------------------------------------------------------------------- |
| string  | symbol                 | Passed into the ERC20 token to define the symbol.                                                     |
| uint256 | maturity               | The timestamp at which the Bond will mature.                                                          |
| address | paymentToken           | The ERC20 token address the Bond is redeemable for.                                                   |
| address | collateralToken        | The ERC20 token address the Bond is backed by.                                                        |
| uint256 | collateralTokenAmount  | The amount of collateral tokens per bond.                                                             |
| uint256 | convertibleTokenAmount | The amount of convertible tokens per bond.                                                            |
| uint256 | bonds                  | The amount of Bonds given to the owner during the one-time mint during the \`Bond\`'s \`initialize\`. |

#### Returns

### getRoleAdmin

```solidity
function getRoleAdmin(bytes32 role) external view returns (bytes32)
```

#### Parameters

#### Returns

### grantRole

```solidity
function grantRole(bytes32 role, address account) external nonpayable
```

#### Parameters

| bytes32 | role    |
| ------- | ------- |
| address | account |

### hasRole

```solidity
function hasRole(bytes32 role, address account) external view returns (bool)
```

#### Parameters

| bytes32 | role    |
| ------- | ------- |
| address | account |

#### Returns

### isBond

```solidity
function isBond(address) external view returns (bool)
```

Returns whether or not the given address key is a bond created by this Bond factory.

#### Parameters

#### Returns

### isIssuerAllowListEnabled

```solidity
function isIssuerAllowListEnabled() external view returns (bool)
```

If enabled, issuance is restricted to those with ISSUER\_ROLE.

#### Returns

### isTokenAllowListEnabled

```solidity
function isTokenAllowListEnabled() external view returns (bool)
```

If enabled, tokens used as paymentToken and collateralToken are restricted to those with the ALLOWED\_TOKEN role.

#### Returns

### renounceRole

```solidity
function renounceRole(bytes32 role, address account) external nonpayable
```

#### Parameters

| bytes32 | role    |
| ------- | ------- |
| address | account |

### revokeRole

```solidity
function revokeRole(bytes32 role, address account) external nonpayable
```

#### Parameters

| bytes32 | role    |
| ------- | ------- |
| address | account |

### setIsIssuerAllowListEnabled

```solidity
function setIsIssuerAllowListEnabled(bool _isIssuerAllowListEnabled) external nonpayable
```

Sets the state of bond restriction to allow-listed accounts.

#### Parameters

### setIsTokenAllowListEnabled

```solidity
function setIsTokenAllowListEnabled(bool _isTokenAllowListEnabled) external nonpayable
```

Sets the state of token restriction to the list of allowed tokens.

#### Parameters

### supportsInterface

```solidity
function supportsInterface(bytes4 interfaceId) external view returns (bool)
```

#### Parameters

#### Returns

### tokenImplementation

```solidity
function tokenImplementation() external view returns (address)
```

Address where the bond implementation contract is stored.

#### Returns


# Risks

## Summary

Arbor Finance is heavily incentivized to mitigate, communicate, and accurately price the risk its users take. At launch, the Arbor Finance platform will have two users, borrowers and lenders. Given borrowers do not face interest rate risk or liquidation risk, they effectively bear no platform related risk other than smart contract risk, which will be mitigated through auditing. Therefore, we will focus on the risk lenders are taking when using the platform.

## Active trading markets for the bonds may not develop

The bonds are newly issued with no established trading markets. We cannot assure you trading markets for the bonds will develop or of the ability of holders of the bonds to sell their bonds or of the prices at which holders may be able to sell their bonds. If no active trading markets develop, you may be unable to resell the bonds at any price or at their fair market value.

## If trading markets do develop, changes in issuer creditworthiness or the financial markets could adversely affect the market prices of the bonds

The market prices of the bonds will depend on many factors, including, but not limited to, the following:

* Credit-worthiness of the issuing DAO
* Time remaining until maturity of the bonds
* Prevailing interest rates being paid by other DAOs
* Results of issuer operations, financial condition and prospects
* Condition of the financial markets.

The condition of the financial markets and prevailing interest rates have fluctuated in the past and are likely to fluctuate in the future, which could have an adverse effect on the market prices of the bonds.

## DAOs may default on their promises to repay bonds issued

This may lead to complete or partial loss of user funds.

### Mitigating default risk

The Arbor Finance team takes issuers through a verification process and helps to surface details about the issuer.

## In the case of a default, collateral slippage may occur if lenders liquidate collateral

Collateral slippage can occur when there is not enough buy side liquidity for the amount of collateral a lender receives upon a default. Although a lender may not want to liquidate the collateral, and therefore won’t be subject to this risk, it’s important to mention for those who do not want to take delivery of the collateral asset upon default.

For example, let’s say XYZ DAO issues a bond and puts up some $XYZ tokens as collateral. At maturity, if XYZ DAO defaults, the lenders will receive the $XYZ being used as collateral. If there is $100M of $XYZ collateral, but only $1M of liquidity on the secondary market, it is unlikely there is enough buy-side demand to sell the collateral at the current price. Therefore, the price of $XYZ will be drastically reduced upon the sale of the collateral into that market leading to a loss in value for the lenders.

## The use of collateral tokens introduce risk

### Mitigating collateral token risk

Borrowers use collateral tokens to back their issuances. The usage of these collateral tokens introduces risk for users. The following measures are to mitigate the risk faced by users:

* Token contract must be verified on Etherscan.
* Token contract has received an audit from a known security auditor
* The project should have a publicly visible test environment
* Administrative privileges over the protocol should not be owned by an EOA, any multisig must have known members.
* If token supply is not fixed, conditions under which supply can increase needs to be made aware of and low risk
* No restrictions on transferring or trading such as holding the tokens for a number of blocks before you can transfer them, fees/taxes on transfers etc
* Token transfers shouldn’t be pausable or subject to a whitelist
* Token ownership should be widely distributed with no address (whale) owning more than 30%

## The use of smart contracts introduces risk

### Mitigating smart contract risk

The threat of contract vulnerabilities is taken extremely seriously by the Arbor team. Our smart contracts have been audited by two security firms, Zellic and Spearbit. Our audits can be found [here](https://github.com/alwaysbegrowing/arbor-contracts/tree/main/audits).


