D/Labs Docs
Search…
⌃K

ERC-3475 Callable

Callable bonds are those bonds issued with an embedded option that gives the bond issuer the right but not the obligation to redeem the bond before they reach the stated maturity date.

Creating a callable ERC3475 contract

Issuers may chose to call their bonds when the market interest rates fall, since in that case they can borrow at lower interest rates. The basic ERC-3475 contract does not include the callable option, however this basic contract can be used to create a Callable ERC-3475 contract that implements the logic for calling bonds. The Callable ERC-3475 contract must inherit the basic ERC-3475 in order to inherits all methods and properties of the abstract storage bonds standard EIP-3475.
// SPDX-License-Identifier: CC0-1.0
​
pragma solidity ^0.8.0;
​
import "./ERC3475.sol";
​
contract ERC3475Callable is ERC3475, IERC3475Callable {
/**
* add the `call` function that implements the logic for calling bonds
*
* function call(address _from, Transaction[] calldata _transactions)
*/
}

Bonds class meta-datas

In addition to the four bonds meta-datas stored in the basic ERC-3475, new meta-datas describing the call option must be stored in the class meta-datas. In the following example the sixth meta-data has been added and set to a boolean variable that stores the value true that tells that bonds are callable.
classMetadatas = [
{stringValue: "", uintValue: couponRate, addressValue: address(0), boolValue: false},
{stringValue: "", uintValue: couponFrequency, addressValue: address(0), boolValue: false},
{stringValue: "", uintValue: 0, addressValue: currencyAddress, boolValue: false},
{stringValue: "", uintValue: bondDuration, addressValue: address(0), boolValue: false},
{stringValue: "", uintValue: bondDenomination, addressValue: address(0), boolValue: false},
{stringValue: "", uintValue: 0, addressValue: address(0), boolValue: true}
];