Getting your Trinity Audio player ready...
|
This post was first published on Medium.
We are excited to introduce a method to issue and manage bonds directly on chain. Our method explores the integration of blockchain technology into the bond market, aiming to leverage its advantages to enhance efficiency and accessibility in the issuance, trading, and management of bonds. More specifically, we use smart contracts to automate and streamline various aspects of bond agreements, such as interest payments and bond redemptions, reducing the need for intermediaries and mitigating counterparty risk by providing a tamper-proof record of ownership and transactions.
What is a bond?
A bond is a debt security that represents a loan made by an investor to a borrower, typically a government or corporation. When an individual or entity purchases a bond, they are essentially lending money to the issuer in exchange for periodic interest payments and the return of the principal amount at the bond’s maturity date. A bond is referred to as a fixed-income instrument since bonds traditionally paid a fixed interest rate (coupon) to debt holders. They are key tools for raising capital and are fundamental to the financial markets.
Imagine that a corporation, ABC Inc., decides to raise capital for a new expansion project. To do this, ABC Inc. issues bonds with a face value of $1,000 each, a fixed interest rate (coupon rate) of 5%, and a maturity period of 10 years.
If an investor, let’s call them Investor A, purchases one of these bonds for $1,000, they are essentially lending $1,000 to ABC Inc. In return, ABC Inc. agrees to pay annual interest to Investor A at a rate of 5%, which amounts to $50 per year (5% of $1,000).
Over the 10-year period, Investor A will receive $50 in interest annually. At the end of the 10 years, ABC Inc. will return the initial principal amount of $1,000 to Investor A.
In summary:
- Face value of the bond: $1,000
- Annual interest rate: 5%
- Annual interest payment: $50
- Maturity period: 10 years
Zero-coupon bonds
Unlike regular bonds, zero-coupon bonds are issued at a discount and do not pay periodic interest. The investor’s return is realized when the bond matures at its face value.
Let’s say Company XYZ issues a zero-coupon bond with a face value of $1,000 and a maturity period of five years. However, this bond is issued at a discount, meaning the investor doesn’t pay the full face value upfront. Instead, they might purchase the bond for $800.
In this case:
- Face value of the zero-coupon bond: $1,000
- Purchase price (discounted): $800
- Maturity period: 5 years
Implementation
Zero-coupon bond
Our initial implementation features a zero-coupon bond smart contract, where a single investor lends capital to a borrower. This simpler bond structure is ideal for demonstrating the basics of bond smart contracts, acting as a basis for more complicated bonds. The smart contract is designed to automate the process of issuing, trading, and redeeming a zero-coupon bond. The contract includes several key public methods:
- buy: handles the purchase of the bond, transferring ownership to a new investor.
- mature: executed by the issuer to pay the face value to the investor upon bond maturity.
- listForSale: allows the current investor to list the bond for sale.
- cancelSale: enables the investor to cancel the sale of the bond.
- default: in case of a default, this method allows the investor to claim the assets locked in the contract.
The bond has the following lifecycle.
- Issuance and Sale: an issuer initializes the bond with its face value, maturity time, and initial price. The bond can then be bought by an investor.
- Trading: investors can trade the bond on the secondary market by listing it for sale and transferring ownership through the buy method.
- Maturity and Redemption: upon reaching maturity, the bond’s face value is paid to the current investor by the issuer.
- Default Handling: in case the bond defaults (issuer fails to pay at maturity), the default method provides a mechanism for the investor to claim compensation.
In our zero-coupon bond smart contract, the issuer must lock a fraction of the bond’s face value in satoshis as collateral during deployment. This feature enhances investor security, acting as a safeguard in case of default. If the issuer fails to pay at maturity, the investor can claim this collateral.
However, for issuers with established credibility, this collateral requirement can be optional. This flexibility allows trustworthy issuers to opt out of locking collateral, making the bond issuance more streamlined and cost-effective.
Transform into a regular coupon bond
The transition from a zero-coupon bond to a regular coupon bond in our smart contract is achieved by adding a makePayment method. This method enables the issuer to make periodic interest payments to the investor.
Support multiple investors
While it is still possible to support multiple investors with the former smart contract by just deploying multiple instances, the sum of which represent the totality of the bond, it is also possible to keep track of multiple investors within the same instance. Instead of only storing a single investor’s public key, we can store an array of investors.
In this case, the methods of our bond contract need to be adjusted in order to manage this array. For example in the method used to make an investment, we would implement something like the following:
Fiat denomination
In practice, a bond is likely denominated in some type of fiat value like USD or CNY, instead of satoshis as shown so far. We can integrate aforementioned bond contracts with BSV-20 tokens, representing fiat units.
The high-level workings of the contract stays mostly the same, however payments represent special token transfers, which the smart contract needs to properly handle. For this we can employ the scrypt-ord SDK.
For example, the invest public method might look something like this:
Conclusion
Full code examples are accessible on GitHub:
Watch: How to use nLockTime for business funding