Issuing Green Bonds on the Algorand Blockchain

08/23/2021 ∙ by Gidon Katten, et al. ∙ 0

Green bonds have been shown to be effective tool for sustainability however market growth is impeded by high issuance and transaction costs. The lack of appropriate standardisation and frameworks raise fear of greenwashing. In this paper, we propose a platform for green bond issuance on the Algorand blockchain. It offers "Green Bonds as a Service", increasing accessibility through automation. The solution has minimal associated costs and supports fractional asset ownership, both of which will help adoption especially in developing countries. A financial regulator must preapprove an investor and can freeze assets in the case of financial irregularities. Green bonds can be bought directly from an issuer or in the secondary market. We also introduce a novel mechanism whereby an issuer can upload proof of impact reports. A green verifier uses these to submit a green rating; poor green ratings result in reputational damage and economic penalties.

READ FULL TEXT VIEW PDF
POST COMMENT

Comments

There are no comments yet.

Authors

page 24

page 42

This week in AI

Get the week's most popular data science and artificial intelligence research sent straight to your inbox every Saturday.

1.1 Motivation

Rapid change and innovation is needed across the world to ensure countries align themselves with the Paris Agreement of keeping the increase in global average temperature to well below 2°C. Green bonds are fixed income instruments used to fund environmentally friendly projects and can be a fundamental tool for climate investment.

Currently the global green bond market represents approximately 2% of the overall bond market [sotm]. Growth is impaired by high issuance and transaction costs [greenbondbarriers], in particular for emerging markets where the size of issuance tends to be smaller [greenbondemergingcountriesbarriers].

One has to look at the fundamentals of the green bond market to understand why a blockchain is an appropriate solution [doyouneedablochchain]. With the exception of treasury bonds, investors must go through a broker to purchase bonds. A bond broker acts as a intermediary between buyers and sellers and may take advantage of the lack of price transparency by marking up prices. In addition, each trade typically has to go through a settlement period, where one has to wait a few days between the trade agreement and the date at which the trade is considered final.

Specific to green bonds, there is an added relationship between the issuer and investor. An investor wants to avoid contributing to greenwashing, whereby the funds generated from the bond are not actually used for green projects. The issuer must produce data and outline the use of proceeds to satisfy investor distrust. At this time, there are no mechanisms to enforce issuer compliance [issuercompliance].

Blockchain presents a number of opportunities. Blockchain can help streamline the clearing and settlement process of green bonds through disintermediation [esma]. Transparent smart contracts would automatically perform atomic transactions, reducing costs and counterparty risk. Blockchain also enables self-custody whereby issuers and investors alike can securely store and manage their assets. This not only eliminates custodian fees, but also helps democratise the green bond market as one does not need access to a financial intermediary service.

Green bond issuance, irrespective of an issuers size, would face similar fees, opening up the retail market. Blockchain can also help automate green bond reporting and provide a structure for green accountability. A credible green bond market can be built by integrating use of proceeds and proof of impact reporting.

Blockchain has been receiving negative media attention regarding its energy consumption. The University of Cambridge Bitcoin Consumption Index [cbeci]estimates Bitcoin uses similar amounts of energy per year compared to countries such as Argentina and the Netherlands. Some would argue this subsequently makes blockchain a bad candidate for green bond issuance, where green investors may be reluctant to use such a technology.

Algorand uses a Proof of Stake (PoS) consensus mechanism whereas Bitcoin and Ethereum use Proof of Work (PoW). PoS consumes several orders of magnitude less energy than PoW [blockchainenergyconsumption]. Ethereum is working on switching to PoS but it remains to be seen when this will happen. This makes Algorand an ideal candidate for green bond issuance. Furthermore the Algorand team claim their blockchain is carbon neutral [algorandcarbonneutral]. Whilst there has yet to be independent research on Algorand’s energy consumption, many environmentally focused companies are leveraging Algorand [planetwatch].

The Algorand blockchain is a permissions blockchain so everyone can review the market and make informed investment decisions. It has a high transaction throughput and low transaction costs, making it accessible to smaller investors. Algorand also has native support for smart contracts and tokens which benefit from the same speed and cost as any other transaction.

1.2 Objectives

The objectives for the project were:

  1. Developing a solution to issue green bonds on the blockchain and assess benefits for all stakeholders (issuer, investor, green verifier and financial regulator).

  2. Investigate the Algorand blockchain and assess how its unique features can benefit the project.

As part of the first objective, it was important to develop a platform, as a proof of concept, that would support the green bond life cycle. This includes issuance, coupons, principal, financial regulation and green verification.

Algorand is a relatively new technology and does not yet have a mature set of developer tools. Therefore the project serves the purpose of discovering if Algorand is ready to support such a product.

1.3 Contributions

The main contributions of the project are:

  • Deploying the bond structure on the blockchain An issuer can specify the bond parameters and investors can receive coupons, and the principal at maturity.

  • Primary and secondary market Investors can purchase green bond directly from an issuer or trade them among themselves in the secondary market. The exchange of the bond and payment are implemented using atomically grouped transactions so if one fails then they both fail. The exchange is confirmed in less than five seconds.

  • Fractional asset ownership An investor can buy and sell parts of a green bond. This opens up the market to smaller investors which may not have the funds to purchase a whole bond or would like to recoup some of their money.

  • Green verification and rating The issuer can upload reports regarding the green status of the bond which the green verifier can read when determining the appropriate green rating to give. Bad ratings negatively impact the coupon payments the issuer pays which should help address greenwashing.

  • Financial regulation All issuers / investors must be preapproved by the financial regulator before they can issue / invest in a green bond. The financial regulator also has the ability to freeze the green bond and prevent any associated payments whether for everyone or specified accounts. This functionality can be used to fulfil KYC and AML obligations.

  • Decentralized application A web application where users can issue green bonds on the Algorand blockchain. One can take the role of an issuer, investor, green verifier or financial regulator and see how they interact with one another.

2.1 Bonds

A bond is an agreement to pay money according to the rules specified at issuance. The bond parameters include:

  • Maturity Date The date of the last payment.

  • Coupon An amount paid periodically up until maturity.

  • Principal An amount paid at maturity. Also known as face value or par value.

Figure 2.1 shows the timeline, between issuance and maturity, for when the coupons and principal are payed out. Variations of bonds exist, for example a zero-coupon bond is a bond with no coupons. The coupon is typically expressed using the coupon rate, which is equal to the coupon amount divided by the principal amount. Let’s say we have a bond that matures after 5 years with a face value of $100 and a coupon rate of 10% payed annually. At the end of each subsequent year, it pays $10 for the coupon and at maturity it pays $100 on top of the coupon.

Figure 2.1: Bond Payout Structure

Assuming a coupon payment has just been made, the theoretical price of a bond can be determined using the following formula:

where is the coupon payment at each time period, is the discount rate (yield to maturity), is the face value of the bond and is the number of time periods until maturity.

2.2 Green Bonds

Green bonds are structured in the same way as regular bonds. An issuer creates the bond to raise funds, and investors receive coupons and a principle when it matures. Like the name suggests, the proceeds of the bond must be used to benefit the environment and are therefore subject to additional checks and regulations. Typically, a second or third party approves the use of proceeds from the bond and all related expenditures. Often there is also ongoing reporting on the status of the project to ensure the green key performance indicators are being met.

It may seem unclear why companies would issue green bonds. They inherit the properties of conventional bonds but have the disadvantage of extra restrictions as well as expensive procedures needed to prove compliance. However green bonds do have several advantages over their generic counterparts.

Green bonds has been shown to attract impact investors and increase institutional ownership [shares], with a stronger response for first time issues and bonds certified by third parties. Investors may also accept lower returns as they prioritise the environment over financial gain [premium].

Green bonds are also an effective tool for sustainability which is reflected in higher share prices as companies credibly signal their commitment to the environment [cgb]. Following the issuance of green bonds, we observe improvements in a company’s environmental performance, in terms of lower CO2 emissions and higher environmental ratings [shares].

2.2.1 Green Bond Standards

There are no universal standards when it comes to green bonds. Two frameworks commonly used are the Green Bond Principles (GBP) [gbp] created by the International Capital Market Association (ICMA) and the Climate Bond Standard (CBS) [cbs], developed by the Climate Bonds Initiative (CBI).

The GBP are a set of voluntary guidelines that can be broken down to four core components:

  1. Use of Proceeds: Outlines the eligible categories for green projects. These range from renewable energy to sustainable water and wastewater management.

  2. Process for Project Evaluation and Selection: Encourages transparency regarding how the project falls within the eligible categories and any potential environmental and social risks associated with the project. Recommends an external review to supplement the review.

  3. Management of Proceeds: Should track funds and inform investors the placement of unallocated net proceeds. Recommends the use of a third party to verify the internal management of proceeds.

  4. Reporting: Should continually update information surrounding the use of proceeds until full allocation. The report should be annual and in cases of material developments.

The voluntary nature of GBP raises concerns of greenwashing, which has led to the development of CBS, a certification scheme based on the underlying principles of GBP. The certification can be separated into two sets of requirements: pre-issuance and post-issuance. For pre-issuance, there are mandatory requirements for the use of proceeds which must be independently verified by an approved body. For post-issuance, the issuer must annually report on the allocation and eligibility for the project however proof of impact is optional.

According to the Climate Bonds Initiative [sotm], 86% of green bonds issued in 2019 have some form of external review, of which almost two-thirds used second party opinions and 17% used the CBS certification. The adoption levels can be partially explained by the cost of certification, which is estimated between USD 10 and 100 thousand [greenbondbarriers].

2.2.2 Green Bond Market

The history of the green bond market begins in 2007 when the European Investment Bank issued the first green bond, then called Climate Awareness Bond. The bond proceeds were targeted to renewable energy and energy efficient projects. The following year, the World Bank issued the green bond as we know today. CICERO was used as second opinion provider to certify the greenness of the bond and the World Bank incorporated impact reporting. More recently in the UK, the Chancellor Rishi Sunak announced Britain will issue its first green government bond in 2021.

At that time, 2019 became the largest year for the global green bond market [sotm]. USD 258.9 billion worth of bonds was issued, bringing the cumulative issuance since 2007 to USD 754 billion. Fig 2.2 shows the market size is growing, especially in Europe. Overall green bonds represent between 2-3% of the total bond market share, leaving room for significant expansion.

Figure 2.2: Green bond issuance by region [sotm]

2.2.3 Blockchain Green Bonds

To date there has only been a handful of blockchain green bond, highlighting the need for further research in this area. In early 2019, BBVA Group became the first to issue a blockchain green bond. The bond was labelled green by DNV GL, a second party opinion provider. A permissioned blockchain (see section 2.3.1) was used to issue the bond, and a copy of the transaction was recorded in the permissionless Ethereum Testnet blockchain. This allowed BBVA to meet its Know Your Customer (KYC) requirements whilst providing transparency to the public.

A report by HSBC and Sustainable Digital Finance Alliance outlined three areas where blockchain can be applied to green bonds [hsbc]:

  1. Structuring, issuance and distribution

  2. Transfer of ownership, payment and settlement

  3. Benchmarking and reporting

The last area is specific to green bonds, whereas the first two also apply to conventional bonds. We can therefore use the more explored regular blockchain bonds as a reference to how the technology could be used for green bonds.

In September 2019, Santander issued the first end-to-end blockchain bond [santandercasestudy]. They used the public Ethereum blockchain however the bonds were only available to internal group companies. They both tokenized the USD 20 million debt and settled it with ERC-20 tokens. A smart contract was used ensure ownership eligibility as the Ethereum blockchain is permissionless.

2.3 Blockchain

A blockchain is a distributed ledger in which blocks are linked in a chain using hash pointers. It is the underlying technology of Bitcoin and other cryptocurrencies. The technology itself provides a secure mechanism for storing ordered data, and eliminates the need for a central authority. Instead of pointing to the location of a block, a hash pointer points to a block’s data. These pointers refer back to the previous block in the chain such that there is a single genesis block which is the root and does not point to anything. Fig 2.3 shows the structure of a blockchain.

Figure 2.3: Blockchain: A linked list using hash pointers

A collision resistant cryptographic hash function is used to ensure it is infeasible to create two blocks with the same hash. If someone were to tamper with a block then its hash would change. The next block in the sequence’s hash pointer would no longer match the hash of the block it is pointing to which would invalidate the chain. Therefore an adversary would also have to tamper the next blocks hash, and so on, all the way to the head of the list. Therefore a given block in the chain guarantees the integrity of the whole history of the blockchain up to that point. As long as the head of the blockchain is agreed upon, and the cryptographic hash function is collision resistant, then the blockchain is tamper proof.

There are a variety of approaches to processing, authenticating and validating blocks. Permissioned blockchains, where only trusted actors can participate in reading and writing, can operate with much lower levels of protection. The disadvantage of this type of blockchain though is its closeness and centralisation, and for this reason, will not be the focus of this paper. Permissionless blockchains are open to the public and are fully transparent. Anyone can participate and read the on-chain data, which unlocks the green bond market to a wider investor population. Due to their openness, permissionless blockchains require extra protection to prevent adversarial attacks on the integrity of the blockchain.

2.3.1 Proof of Work vs. Proof of Stake

There are a number of ways of achieving consensus in permissionless blockchains. Two of these are Proof of Work (PoW) and Proof of Stake (PoS).

In PoW, miners race to solve a difficult cryptographic puzzle and the first one able to do so is rewarded with a cryptocurrency payment. The most famous example of a cryptocurrency that uses PoW is Bitcoin. Included in the block header is an arbitrary number called a nonce. Miners change the nonce till they found one such that the hash of the block is less than or equal to the current target hash value set by the network. The puzzle is designed in such a way that once a solution has been found, it is easy for the other nodes to verify that it is indeed a correct solution and only then is it used to append a block to the end of the blockchain.

The security of PoW relies on the difficulty of these puzzles. To achieve a fork in the chain, one would have to mine blocks faster than everyone else in the network. This would require large amounts of computing power which would be expensive and suffer from a significant opportunity cost. Even then, a fork may not succeed if the community decides not accept the longer chain.

One problem with PoW is the energy inefficiency [energy]. Green bond investors may be reluctant to use technologies that have such cost even if it may be fractional compared to the effect of the bond. For this reason, this paper will focus on blockchains that use PoS where little energy is needed to mine blocks.

In PoS, the influence each node has is proportional to the number of tokens it has. A subset of nodes are chosen at random and together create and validate a proposed block. Algorand, the blockchain of choice for this project, achieves consensus through a pure PoS protocol [algorandPPoS] based upon a decentralized Byzantine Agreement protocol. Section 2.4 covers Algorand in more detail.

With PoS, the users with the most influence also are the most invested in the cryptocurrency. This serves as a strong incentive for these users to be honest because they have the most to lose if trust is lost in the technology and the currency depreciates. In addition, PoS removes the need for wasteful energy consumption making it appropriate for green bond issuance.

Another criticism leveraged at PoW that PoS addresses is its barrier to entry for mining. In PoW, miners often compete with each other using specialist hardware. This can lead to centralisation as a few large mining centres control the market [pooledmining]. Comparatively, PoS enables more nodes to join the network and participate in the consensus protocol.

One potential issue with PoS is known as the nothing at stake problem. In PoW mining, an attacker would have to consume a lot of resources attempting to create a fork in the chain. With naive PoS, at no extra cost one can continually try to create a fork while simultaneously mining on top of current longest chain. To solve this issue, PoS blockchains utilise mechanisms that punish nodes that are building blocks on more than one chain.

2.3.2 Smart Contracts

A smart contract is a computer program written to a blockchain that can be used to automatically enforce contracts. Smart contracts facilitate the transfer of digital assets between parties once predetermined conditions are met, without the need for a central authority. The code of the smart contract determines its functionality and often cannot be altered once added to the blockchain.

Smart contracts have many interesting applications [smartContract]. Specific to green bonds, they can facilitate issuance and settlements, as well as automate investors coupons and principal payments. This presents opportunities to standardise the green bond offerings and provide bonds as a service [hsbc] [sustainableInvestmentBlockchain], where people can create their own green bonds at low costs.

An important property of smart contracts is its openness. Since they are written to a blockchain, their contents can be viewed by everyone. Trust is very important in the bond market so smart contracts present an opportunity to increase trust through its transparency [transparency].

2.3.3 Decentralised Applications

Decentralised Applications (DApps) are applications with their backend code running on a decentralised peer-to-peer network. They typically have a frontend user interface and the backend utilises smart contract functionality. These applications benefit from its decentralised properties, making them more trustworthy and secure.

2.3.4 Tokens and Stablecoins

Tokens are assets that can be transferred using blockchain technology. Tokens can be fungible or non-fungible and can represent anything from a security to a voting right. Bitcoin is one such example of a fungible token. Tokens should not be used to store large amounts of data because storing data on a blockchain is very expensive. Instead this data should be stored externally, and its hash which acts as a fingerprint can be stored on the blockchain and tracked by tokens. Through this approach, tokens can be used for green reporting.

Another application of tokens is stablecoins, which address the problem of cryptocurrency volatility. Bond issuers and investors are unlikely to want to expose themselves to the risk of rapid price changes. Stablecoins can be divided into a number of categories depending on what, if anything, it is collateralized against. These are: fiat-collateralized, commodity-collateralized, crypto-collateralized and non-collateralized. The most common type and the type which provides the greatest stability, fiat-collateralized stablecoins, are digital assets that track fiat currency using smart contracts.

A key difference between fiat-collateralized stablecoins and their corresponding fiat currency is where there risk fall. Fiat currency is guaranteed by the Central Bank however a stablecoin is not. One well known stablecoin is Tether, which is tied to the US Dollar. Tether originally claimed to have one-to-one reserves but have since admitted to using loans from affiliated entities. Using Tether and similar stablecoins requires trusting them and the commercial banks that are holding their reserves. Table 2.1 summarises the different types of fiat-collateralized stablecoins and their respective risks.

Issuer Examples Risks
Central Bank There are currently no examples National currency
Bank JPMCoin
Bank holding the reserves
National currency
Consortium Bank Fnality
Risk spread across the banks
National currency
Finance Company
Tether (USDT)
USD Coin (USDC)
Finance company
Bank holding the reserves
National currency
Table 2.1: Fiat-collateralized stablecoin types

2.4 Algorand

Algorand [algorand]

, founded in 2017 by Turing Award winner Silvio Micali, is an open source public blockchain that uses proof of stake to achieve consensus. The currency used in Algorand is

Algos, and all online users with Algos are eligible to participate in selecting and writing a given block into the blockchain.

The Algorand blockchain is also non-forking. In a given round, at most one block is certified and written to the chain. We can use its property of finality to confirm transactions in under five seconds.

When talking about blockchain, it is common to refer to layer-1 and layer-2. Layer-1 refers to the underlying main blockchain architecture and layer-2 the overlaying network that is built on top of the blockchain. Algorand anticipated many of its use cases and provided layer-1 features to solve them. In the subsequent sections, we will explain some of the features utilised in this project.

2.4.1 Accounts

An account in Algorand is made up of a (unique) public address and a corresponding private key. Each account has its own associated on-chain data, for example its Algo balance.

A person can sign a transaction from their account using its’ private key and submit it to the blockchain. There are various types of transactions that are supported, the most relevant of which are:

  • Payment Transfer Algos to an account

  • AssetTransfer Send ASAs (see section 2.4.2) to an account

  • ApplicationCall Call a stateful smart contract (see section 2.4.6)

2.4.2 Algorand Standard Assets

Algorand Standard Assets (ASAs) are assets built into layer-1 of the Algorand blockchain. They share the same properties as Algos in that they can be held by different addresses and can be transferred between parties.

ASAs can represent stablecoins, digital art, securities etc. When creating an asset you specify its parameters like the total number you would like to mint. Each created ASA is given a unique identification number. Just like with any currency, you cannot distinguish between instances of the same ASA.

To receive an ASA, one must first opt into it. This is because otherwise someone could send an account many meaningless assets which would pollute their holdings and incur a fee (see section 2.4.8).

ASAs also offer additional functionality, two of which we will make use of. The first is that the asset creator can specify an account which has the ability to freeze all assets or freeze asset holdings for a specific account. The second is that the asset creator can set a clawback account that is allowed to revoke assets from one account and send these to another account. We will later combine these features in our implementation, section 4.1.2.

2.4.3 Atomic Transfers

Trading money and assets traditionally requires a trusted intermediary which ensures that both parties receive what they expect. Algorand solves this problem with its layer-1 Atomic Transfer protocol.

In Algorand, you can group multiple transactions and submit them at one time. If any of the transactions within the group fail then they all do, and if they all succeed then the transactions are successful. A maximum of 16 transactions can be grouped together and these transactions can be of all different types. For example you can group a Payment transaction and an AssetTransfer transaction to exchange Algos for an asset.

2.4.4 Smart Contracts

Smart contracts in Algorand can be split into two categories: stateless and stateful. They are both written in the Transaction Execution Approval Language (TEAL), see section 2.4.7. Often stateful and stateless contracts are linked together. This is done when you need to store some persistent data (stateful), whether global or local, which is paired with some type of spending transaction (stateless).

2.4.5 Stateless Smart Contracts

Stateless smart contracts can be further divided into two models of use: contract accounts and delegated signatures. In both cases the contracts are not stored on the blockchain and their logic is evaluated at the time when a transaction is submitted.

Contract accounts are like any other Algorand account, they have an address, can send and receive Algos and ASAs and can call stateful smart contracts. The only difference is that instead of using a private key to approve transactions from itself, it uses its associated stateless smart contract. This is known as a Logic Signature.

Contract accounts can therefore be used as an escrow account. The address may own some Algos and ASAs and under certain conditions determined by its logic, one can transfer some of these holdings to another account. Fig 2.4 shows the process of sending a transaction from a contract account.

Figure 2.4: Transaction from contract account

Delegated signatures is another way of using stateless smart contracts. An Algorand account can sign a stateless smart contract with their private key. At this point then someone can use this stateless smart contract to sign transactions on behalf of the original account that signed the logic. This two stage process is outlined in Fig 2.5.

Figure 2.5: Signing TEAL logic and submitting transaction from account using delegated signature

An example use case for delegated signatures would be someone signing logic which can be used by their gas company to extract payment from them. The stateless smart contract can be written and signed to approve a monthly transfer of 100 Algos from their account to the gas company.

2.4.6 Stateful Smart Contracts

Stateful smart contracts, also known as applications, live on the blockchain and their logic is evaluated during block assembly time. Stateful smart contracts differ with stateless smart contracts in that they do not approve spending transactions from an account, but rather they approve logic that manipulates its stored state. If the application call transaction returns false, any changes to its state triggered by the transaction will be cancelled. Fig 2.6 shows an overview of the stateful smart contract in Algorand.

Stateful smart contracts utilise on chain storage by storing additional values both in a global state and a local state. An application has a single global state which is accessible to any account that calls the smart contract. To access local state, one must first opt into the application. Each opted in account has its own local state.

The global state of the contract is limited to 64 key-value pairs, and the local state is limited to 16 key-value pairs for each individual account that interacts with it. The cost of the contract is proportional to the amount of storage used. The creator account must fund the global state cost while each opted in account is responsible for its own local storage cost, see section 2.4.8 for more details.

Figure 2.6: Algorand Stateful Smart Contract

Stateful smart contracts are made up of two programs: the ApprovalProgram and the ClearStateProgram. There are a set number of supported application calls; the ClearState transaction type is handled by the ClearStateProgram and all others are handled by the ApprovalProgram:

  • OptIn Enable local state storage

  • NoOp Generic application call

  • UpdateApplication Update the TEAL program with new logic code

  • DeleteApplication Delete the application

  • CloseOut Opt out of application and its TEAL logic

  • ClearState Like CloseOut but will always opt out of the application whether the transaction succeeds or fails

A transaction can include arguments as well as the IDs of additional applications and accounts. The global state of the applications referenced can only be read, and the local state of caller and referenced accounts can both be read and written to. In addition, the local state of the five mentioned accounts can be read for any smart contract written to the blockchain.

As seen above in the supported application calls list, Algorand has a unique functionality that allows you to update and delete a stateful smart contract. By default anyone can perform these actions so additional logic must be added to the ApprovalProgram to prevent this. State requirements for the contract must be specified at creation and is the one exception in that it cannot be altered once the contract has been written to the blockchain.

2.4.7 Teal

Algorand smart contracts are written in an assembly like language called Transaction Execution Approval Language (TEAL) and is processed with a stack machine. TEAL contains a set of operators that interact with the values on the stack, for example pop and bz. There is scratch space which allows you to store and retrieve values in a program. TEAL also supports passing byte array arguments to a program.

Smart contracts can also be written in Python and compiled to TEAL using PyTeal. PyTeal introduces some basic control flow operations such as If and Cond but still remains very primitive. The majority of its supported statements can be directly mapped one-to-one with its equivalent in TEAL making PyTeal a simple wrapper. The compiler for PyTeal to TEAL performs no optimisations as well so one has to ensure they write efficient code.

TEAL version 3 (TEAL3), the most recent update to TEAL, is not Turing-complete as it does not support backwards branching. Although this restricts its functionality, it makes smart contracts written in TEAL more secure and easier to validate. Currently TEAL3 does not support functions either. There are only two types: uint64 and []byte in TEAL, TealType.uint64 and TealType.bytes in PyTeal.

Fig 2.7 is an example of some code written in PyTeal and TEAL. The contract verifies that you are sending at least 50,000 microAlgos to a given address and the total spend including the transaction fee is less than 55,000 microAlgos. You can see the similarities between the two languages.

from pyteal import *
def contract():
  to = Txn.receiver() == Addr(…)
  send = Txn.amount() > Int(50000)
  tot = Txn.amount() + Txn.fee()
  spend = tot < Int(55000)
  return And(
    to,
    send,
    spend
  )
Listing 1: PyTeal
txn Receiver
addr 
==
txn Amount
int 50000
>
&&
txn Amount
txn Fee
+
int 55000
<
&&
Listing 2: TEAL
Figure 2.7: Snippet of equivalent PyTeal and TEAL code

Algorand does not use the concept of gas to restrict TEAL program computation; there are no additional costs (on top of the fee that every transaction has) when calling an application irrespective of what gets executed. However there are some hard limits which restricts the size and contents of the TEAL programs you can write.

TEAL programs: stateless and stateful are limited to 1,000 bytes and 1,024 bytes respectively. Each TEAL opcode also has an associated numeric value representing its cost. For many opcodes such as >, the cost is 1, but for more computationally expensive opcodes, the cost is higher. To ensure a high transaction throughput there is a maximum opcode cost for TEAL programs. As stateless smart contracts live off-chain their total opcode cost limit is 20,000, whereas a stateful smart contract have a total opcode cost limit of 700.

2.4.8 Fees

All fees in Algorand are paid using Algos. The lowest denomination of Algos is microAlgos (1,000,000 microAlgos in an Algo). Every account in Algorand must have a minimum balance of 100,000 microAlgos. If a transaction is sent that would result in a balance below 100,000 microAlgos, then the transaction will fail. The minimum balance requirement applies to contract accounts as well.

There are fees for: submitting a transaction, opting into an ASA, creating a stateful smart contract and opting into a stateful smart contract.

Transactions in Algorand have a 1,000 microAlgos fee regardless of the transaction type. If the number of transactions increase above the maximum supported 1,000 transactions per second (approximately) then these costs will increase as you compete with others to get your transaction recorded. However this has yet to happen for any sustained period of time.

The minimum balance requirement increases for every opted into ASA, and for creating and opting into a stateful smart contract. For an ASA the increase is 100,000 microAlgos. For stateful smart contracts the increase is determined by the following formula:

For the creator, the variables refer to the global state and for the account that is opting in, the variables refer to the local state.

3.1 Stakeholders

There are a number of stakeholders to consider when it comes to green bonds:

  • Issuer The issuer is the entity that borrows money by selling the green bond. This could be a government, bank or corporation.

  • Investor The investor is the entity that lends money by purchasing the green bond. This could be institutional or retail investors.

  • Green verifier The agency that assesses the greenness of the bond.

  • Financial regulator The agency that keeps track that the bond is compliant with financial regulation.

3.1.1 Issuer

The issuer must be able to issue the green bond to the market and in return receive stablecoin payment. They would then be able to freely use these funds for their project. There must also be a mechanism for the issuer to fulfil the green bond requirements as per the green bond standards framework, and the ability to repay investors in the form of coupons and principal payments.

3.1.2 Investor

The investor must be able to purchase the available green bonds either directly from the issuer at the time of issuance or in the secondary market. They must be able to make informed decisions regarding the credit worthiness of the issuer, and the greenness of the bond. Bond holders should also be able to receive regular coupon and principal payments using stablecoin.

3.1.3 Green verifier

The green verifier must be able to provide a green rating to a green bond initial use of proceeds proposal and also evaluate the ongoing green bond reporting of the issuer. To do this they will have to be able to read the issuers report and publicly share their assessments.

3.1.4 Financial regulator

The financial regulator must be able to approve the green bond issuance, monitor the financial transactions of the bond, freeze the bond in the presence of financial irregularities and also be able to prevent specific investors from benefiting from the bonds in cases such as AML violations.

3.2 Bond Life Cycle

The design for the life cycle of the green bond is very similar to that of a regular bond as shown in Fig 3.1.

Figure 3.1: The life cycle of a green bond

The bond is initially issued and there is a set window where investors can buy the bond directly from the issuer at a fixed cost.

After the buy period closes, the bond can be traded freely in the secondary market for the rest of its lifetime. There are periodic coupon payments specified according to the bond’s configuration. At maturity the bond can be exchanged for its’ principal.

At every payment event, there is a check to see whether the issuer has supplied enough funds to pay out all the money owed at that time. It is the responsibility of the issuer to transfer funds to an escrow account from which investors can claim their money from. For example if the coupon payments where $10 per bond and there was 1,000 bonds in circulation, then the total money owed at the first coupon payment will be $10,000. Similar checks are made for every coupon payment and the final principal payment. In the scenario where there is insufficient funds to pay the money owed then the bond defaults. At this point investors can claim a proportion of the remaining funds available that was from the issuer. For example, using the previous case where $10,000 is owed and there is 1,000 bonds in circulation: if an investor owns 5 bonds and there is $3,000 available then they would be able to claim $15 of the $50 owed, or 0.05% of $3,000.

3.3 Green Rating

One of the key barriers to green bond adoption is a lack of green credit ratings [greenbondbarriers]. Incorporating a rating mechanism into the structure of the green bond should help solve this issue.

The green verifier provides ratings for the following events:

  • Use of Proceeds When the bond is first issued.

  • Reporting At a coupon payment period, typically annually or biannually.

The rating is on a scale between one and five, one being the worst and five being the best. Figure 3.2 summarises the report-rating timeline.

Figure 3.2: The timeline of green reports and ratings

Between issuance and the date from which investors can purchase the bond, the issuer submits a report for the use of proceeds of the bond. The green verifier can use the uploaded document(s) to then assign a green rating which must also be done before the buy period.

In addition, at every coupon period there is an opportunity for investors to add further reporting based on their green Key Performance Indicators (KPIs). Again the green verifier provides a green rating towards the end of the period based on this information.

Environmental, Social, and Governance (ESG) funds and more generally green investors are looking to place their money in green bonds which meet certain green standards and avoid greenwashing. Low green ratings may result in reduced bond pricing in the secondary market and would reflect badly on the issuer and the ESG fund managers that have chosen to invest in a poorly rated green bond.

To increase incentives for issuers to meet their green targets and achieve high green ratings, Dr Enrico Biffis, an Associate Professor of Actuarial Finance at Imperial College Business School, suggested linking the bond coupon rate to the green rating. Similar approaches have been suggested in the past for incorporating carbon pricing into green bonds [carbonprice].

The design is such that a most recent rating of 5 means that the coupon payment specified at issuance is used to determine the coupon payouts to investors. However the issuer is penalised for lower ratings, where each drop in rating increases the coupon payments by 10%. Table 3.1 provides an example of how this would work.

Green Rating Penalty Coupon Payment Value (2dp)
5 0% $5.00
4 10% $5.50
3 21% $6.05
2 33.1% $6.66
1 46.4% $7.32
Table 3.1: Effect of green ratings on coupon payments

3.4 Secondary Market

The bond can be freely traded among investors in the secondary market. Pricing is fully determined by market forces. Investors may use some of the following when making decisions regarding a specific green bond: the uploaded reports from the investor, the green ratings of the bond, the money in the bond’s escrow account and the parameters of the bond.

4.1 Algorand Blockchain

All the smart contracts and assets were deployed on the Algorand TestNet. The TestNet allows developers to test their applications with the latest protocol version before before deploying to the MainNet. There are faucets available so that one can fund their TestNet accounts with Algos to use for free.

The implementation made use of a variety of Algorand features which are covered in section 2.4. In particular: atomic transfers, ASAs, stateful smart contracts and stateless smart contracts (contract accounts and delegated signatures).

4.1.1 Stablecoin

In Algorand, stablecoins such as Tether USDt and USDC are simply ASAs. Therefore since we do not have a way of obtaining these for testing purposes, we created a new ASA on the blockchain with a total supply of 1,000,000,000,000 and 6 decimals.

By distributing this stablecoin ASA to accounts, we can replicate the scenario of investors transferring stablecoin to issuers and other investors to purchase bonds, and also the associated green bond coupon and principal stablecoin payments.

4.1.2 Green Bond

For each green bond issuance, a new ASA is created with a unique identification number. Its supply is equal to the number of bonds the issuers would like to sell and has 6 decimals to support fractional bond ownership. For instance, an investor with 0.5 of this ASA can exchange their holdings for half the principal amount at maturity.

4.1.3 Linking Stateful and Stateless Smart Contracts

Before detailing the smart contracts involved, it is important to understand how stateful and stateless smart contracts can be linked. As explained in sections 2.4.5 and 2.4.6, stateless smart contracts are used to approve transactions spent from an account and stateful smart contracts are used to store and manage state. What happens then when you need to use on-chain data (stateful) to approve transactions from an account (stateless)? The answer is that you link together the two.

Figure 4.1: Linking (stateless) contract account and stateful application

When you deploy a stateful smart contract you get an an application identification number. The stateless smart contract can incorporate this into its logic by declaring that all transactions from the account will fail unless they are grouped with an application call to the stateful smart contract. The stateless smart contract can be compiled and you get the escrow address for the contract account. If you similarly want to require an application call to the stateful smart contract state to also submit a transaction from the stateless smart contract then you can embed its escrow address into its TEAL. However this creates a cycle where the stateful and stateless depend on one another as shown in figure 4.1. To solve this issue you can add the escrow address to the already deployed application by either adding it to its state or using the UpdateApplication transaction described in section 2.4.6. We made use of the second approach.

4.1.4 ASA Custom Transfer Logic

As discussed in section 2.4.2 assets can be traded similar to how Algos are traded, by submitting an asset transfer transaction. However by utilising the freeze and clawback functionality, one can require custom logic to be executed every time these assets are traded. This logic can track these assets as well as approve / reject any transactions which transfer them.

The figure 4.2 outlines how this would work for example when trading a bond in the secondary market. The ASA which represents the bond is frozen so they cannot be transferred freely between two parties. Frozen assets can still be transferred though by the clawback account which has the ability to revoke the asset holding of an account and send them to another account. We can therefore utilise stateless smart contract functionality, and set the clawback account to be a contract account. At this point the only way for the bond to be transferred is for the logic of the contract account to approve the transaction.

Figure 4.2: Asset custom transfer using smart contract logic

This solution provides the mechanism for the bond to be transferred from the issuer to the investor when they group the transaction atomically with a stablecoin payment and vice versa when the bond is exchanged for the principal at maturity.

Furthermore we can also use on-chain data when approving these asset transfer transactions by linking the stateless smart contract with a stateful smart contract as explained in section 4.1.3.

Fig 4.2 shows how all of this comes together. Let’s say Bob wants to transfer the green bond in the secondary market to Alice. Bob cannot submit an AssetTransfer transaction as the ASA representing the green bond is frozen. Bob must instead have the clawback account perform the transfer on their behalf. The clawback account is this case is a contract account; it is controlled by its TEAL logic. In this logic it outlines that Bob must call the stateful smart contract or otherwise it will reject the clawback transaction. At this point we finally have our solution: Bob calls the stateful smart contract, and groups that with a clawback transaction signed by the logic of the stateless smart contract.

4.1.5 Smart Contracts

For each green bond issuance, a new set of smart contracts are created and deployed:

  • Main Stateful smart contract that exposes mechanisms to buy green bonds, trade green bonds, claim coupons and claim principals.

  • Manage Stateful smart contract that manages green ratings and bond defaults.

  • Bond Contract Account Stateless smart contract whose logic approves bond transfers.

  • Stablecoin Contract Account Stateless smart contract that issuer funds and whose logic approves stablecoin payments for coupons and principal.

In sections 4.1.3 and 4.1.4 we outlined how stateless and stateful smart contracts can be linked together, and how to ensure all ASA transfers are approved / rejected by smart contract logic. In our case the Bond Contract Account is the stateless contract account that is set as the clawback account for the green bond ASA. To approve any bond transfer (clawback transaction), it firsts checks that it is atomically grouped with an application call to the Main application.

The Main application contains the following key value pairs in its storage:

  • Local CouponsPaid The number of collected coupons by an investor and their green bonds.

  • Local Trade The number of bonds owned by the account that are willing to be traded. This paired with a delegated signature, see section 4.1.9, is used to facilitate trading in the secondary market.

  • Local Frozen Boolean for if an account is frozen. Determines if they can buy / trade the green bonds and claim coupons / principal payments. Initially this is set to false (zero) such that only approved investors can purchase the green bond.

  • Global CouponsPaid The maximum Local CouponsPaid across all investors. Used for bond defaults.

  • Global Reserve The amount of stablecoin reserved in the stablecoin contract account that will be used to fund coupon and principal payments. Used for bond defaults.

  • Global Frozen Boolean for if all accounts are frozen. Determines if anyone can buy / trade the green bonds and claim coupons / principal payments. Initially this is set to false (zero) such that only approved issuers can sell their green bonds.

The Manage application contains the key value pairs for the green rating. Ideally we would like to store an array of length (No. Coupon Rounds + 1). Index 0 would contain the green rating for the use of proceeds and all the other postions will contain a green rating for the corresponding coupon round. However in PyTeal / TEAL there is no support for arrays.

Instead we can use the key value map as an array. The key 0 can contain the use of proceeds green rating, the key 1 the first coupon green rating and so on. However this is costly as we would need one key value pair for every rating, and moreover the global state is limited to 64 key value pairs in total. Therefore because each value is 8 bytes in length, we store 8 ratings in each state value. Now we only need Math.ceil((No. Coupon Rounds + 1) / 8) key value pairs.

For example a green bond which has ratings of 5, 3, 4, 5, 5, 5, 5, 4, 3 would have state:

  • Global 0 0x0503040505050504 base16

  • Global 1 0x0300000000000000 base16

One interesting implementation decision when writing the stateful smart contracts concerned when to hard code values in the TEAL smart contracts and when to rather store them in the global state. The advantage of hard coding the values is that there is no extra cost of having extra key value pairs in the global state. However this means that it is difficult to read these values from the blockchain as the smart contracts have to be decompiled and then parsed. In contrast, if the values are in the global state, they can be easily read from the blockchain but this incurs an added storage cost.

The approach chosen was that any values that are updated during the bond life cycle is stored in the smart contract state and all other values that are set at issuance and hard coded into the logic. For example the number of coupon rounds paid in stored in the smart contract state whereas the maturity date is not.

Main is a stateful smart contract which coordinates everything together. A typical pattern one can use in an application in Algorand is to pass a string to a NoOp application call and execute different logic depending on the string. This gives the impression of an application having different methods an account can call.

The Main application supports passing the following strings:

  • freeze

  • freeze_all

  • buy

  • set_trade

  • trade

  • coupon

  • sell

  • default

In addition the Manage application supports passing the following strings:

  • rate

  • defaulted

  • not_defaulted

  • claim_default

We will cover these in more detail in the following sections.

4.1.6 Green Rating

Fig 3.2 gives an overview of the timeline for green verifier ratings. The green verifier is able to call the Manage application with the string "rate". The transaction also requires a second argument for the rating which is an integer between one and five inclusive. The time that the transaction was submitted at will determine what the rating is for.

max width= Tx Type Sign From App Arg0 Arg1 0 NoOp App Call Secret Key Green Verifier Manage rate <rating>

Table 4.1: Rate transaction

4.1.7 Freeze

The financial regulator can call the Main application with either the string "freeze" or "freeze_all".

The green bond is default frozen until the financial regulator approves the listing. They do this using "freeze_all" and passing a non-zero number as an argument, and can also later revoke this license by calling "freeze_all" with argument zero.

max width= Tx Type Sign From App Arg1 Arg2 0 NoOp App Call Secret Key Financial Regulator Main freeze_all <number>

Table 4.2: Freeze All Transaction

The financial regulator can also freeze a specific account from interacting with the green bond, whether buying, trading or claiming money on their already owned bonds. Table 4.3 outlines the freeze account transaction. Accounts are set to frozen by default which allows the financial regulator to perform KYC and AML checks before approving an investor.

max width= Tx Type Sign From App Arg1 Arg2 0 NoOp App Call Secret Key Financial Regulator Main freeze <number>

Table 4.3: Freeze Account Transaction

4.1.8 Buy

You can buy the green bond between the start buy date and end buy date by submitting the transactions in Table 4.4 grouped together. The bond and stablecoin payment are exchanged using the asset custom transfer logic we spoke about earlier in section 4.1.4.

max width= Tx Type Sign From Revoke Target To Amount App Args 0 NoOp App Call Secret Key Investor - - - Main buy 1 Algo Transfer Secret Key Investor - Bond Escrow Fee Of Tx2 - - 2 Asset Transfer (Bond) Logic Signature Bond Escrow Bond Escrow Investor N - - 3 Asset Transfer (Stablecoin) Secret Key Investor - Issuer N*Cost - -

Table 4.4: Buy Atomic Transaction Group

4.1.9 Trade

To trade the green bond, the owner must call the Main application with "trade". This must be coupled with the bond transfer, using the clawback functionality, and also a small fee for bond escrow that revoked the asset from investor 1 to investor 2.

The trade verification makes no assumption about any further transactions in the group. For example one may decide to gift their green bond to a friend or sell it on the secondary market for Algos.

Imagine an investor wants to sell their green bond on the secondary market in exchange for stablecoin. The blockchain can facilitate this transfer without the need for an intermediary, ensuring both the bond holder and buyer can trust the transfer.

The bond holder first sets the number of bonds they are willing to trade using the transaction in table 4.5. Then a stateless smart contract can be generated which specifies the terms under which they would sell the bond - the stablecoin amount and an expiry date. This is then signed with the investor’s private key and can now be used as a delegated signature by the buyer. The buyer can submit the following group of transactions in table 4.6 to trigger the trade of the bond.

max width= Tx Type Sign From App Arg0 Arg1 0 NoOp App Call Secret Key Investor 1 Main set trade N

Table 4.5: Set number of bonds willing to trade

The reason why the bond holder first sets in their local state how many bonds they would like to trade in total is because otherwise people can take advantage of their delegated signature. For example if an investor were to encode in a stateless smart contract that they would like to sell 2 bonds then that delegated signature could be used multiple times until the investor no longer owns any green bonds. The stateless smart contract logic has no concept of on-chain data so cannot tell whether it has already been used before when approving future trades. Subsequently we use the bond holders local storage and if they are willing to sell 2 of their bonds at a cost of $1,000 per bond then a person can come along and buy 0.5 bonds for $500 which would update the state value to 1.5 bonds. Then a second buyer could purchase the remaining 1.5 bonds at $1,500 and then at that point all trades from that account will be blocked by the Main application call (or transaction 0).

max width= Tx Type Sign From Revoke Target To Amount App Args 0 NoOp App Call Logic Signature Investor 1 - - - Main trade 1 Algo Transfer Logic Signature Investor 1 - Bond Escrow Fee Of Tx2 - - 2 Asset Transfer (Bond) Logic Signature Bond Escrow Investor 1 Investor 2 N - - 3 Asset Transfer (Stablecoin) Secret Key Investor 2 - Investor 1 N*Price -

Table 4.6: Trade Atomic Transaction Group Using Logic Signature

4.1.10 Coupon

Green bond owners can claim coupons using the transactions in table 4.7. As explained in the requirements section 3.3, the amount of stablecoin paid is inversely proportional to the green rating of the bond. The smart contract calls verify that the correct payment is made based on this rating.

max width= Tx Type Sign From To Amount App Args 0 NoOp App Call Secret Key Investor - - Main coupon 1 NoOp App Call Secret Key Investor - - Manage not defaulted 2 Algo Transfer Secret Key Investor Stablecoin Escrow Fee Of Tx3 - - 3 Asset Transfer (Stablecoin) Logic Signature Stablecoin Escrow Investor N*Coupon - -

Table 4.7: Claim Coupon Atomic Transaction Group

One interesting consideration is checking if the green bond has defaulted. Each time someone tries to claim a coupon, we use the local number of coupon payments collected and compare that to the global maximum number of coupon payments across all investors. If the transactions are the first time a coupon has been claimed for that round, which we know when Local CouponsPaid exceeds Global CouponsPaid, then we need to check that the bond has not defaulted. This is done by incrementing Global Reserve by the coupon payment value multiplied by the number of bonds in circulation. We then assert in Manage application that there is enough funds in the stablecoin escrow amount to meet the entire Reserve amount.

Table 4.8 is an example run through of how this works in practise. We are using a fixed $100 coupon payment per bond to simplify the calculations here but in reality this will be dependant on the green ratings.

max width= Action No. Bonds In Circulation Invetor 1 Local Coupons Payed Invetor 2 Local Coupons Payed Global Coupons Payed Reserve ($) Stablecoin Escrow Balance ($) Approved? Investor 1 buys 5 green bonds 5 0 0 0 0 0 yes Investor 2 buys 10 green bonds 15 0 0 0 0 0 yes Issuer funds escrow $1,500 15 0 0 0 0 1,500 yes Investor 2 claims coupon 15 0 1 1 500 500 yes Investor 1 claims coupon 15 1 1 1 0 0 yes Issuer funds escrow $1,000 15 1 1 1 0 1000 yes Investor 1 claims coupon 15 2 1 2 1500 1000 no

Table 4.8: Default checks when investors claiming $100 coupons

4.1.11 Principal

Claiming the green bond principal is similar to claiming coupons with the addition of forfeiting all bonds owned. At maturity, the investor can submit the transactions in table 4.9 atomically grouped.

In addition to verifying there is sufficient funds to pay all coupons owed, there is a check to ensure all principals can be payed. If there is not enough money to do so, then the grouped transactions will be rejected.

max width= Tx Type Sign From Revoke Target To Amount App Args 0 NoOp App Call Secret Key Investor - - - Main coupon 1 NoOp App Call Secret Key Investor - - - Manage not defaulted 2 Asset Transfer (Bond) Logic Signature Bond Escrow Investor Bond Escrow N - - 3 Asset Transfer (Stablecoin) Logic Signature Stablecoin Escrow - Investor N*Principal - - 4 Algo Transfer Secret Key Investor - Bond Escrow Fee Of Tx2 - - 5 Algo Transfer Secret Key Investor - Stablecoin Escrow Fee Of Tx3 - -

Table 4.9: Claim Principal Atomic Transaction Group

4.1.12 Default

To claim a default, there must be insufficient funds to pay all money owed to investors. The implementation first verifies that the bond owner has claimed all the coupon payments that they are entitled to up to and including the Global CouponsPayed, ensuring investors do not lose out on any money based on their delayed stablecoin payment requests.

The Manage application checks not whether a bond has been defaulted, but whether the one additional coupon payment (or principal) would cause the bond to default. That way investors are able to maximise the money they can recoup.

max width= Tx Type Sign From Revoke Target To Amount App Args 0 NoOp App Call Secret Key Investor - - - Main default 1 NoOp App Call Secret Key Investor - - - Manage claim default 2 Asset Transfer (Bond) Logic Signature Bond Escrow Investor Bond Escrow N - - 3 Asset Transfer (Stablecoin) Logic Signature Stablecoin Escrow - Investor Default Proportion - - 4 Algo Transfer Secret Key Investor - Bond Escrow Fee Of Tx2 - - 5 Algo Transfer Secret Key Investor - Stablecoin Escrow Fee Of Tx3 - -

Table 4.10: Claim Default Atomic Transaction Group

When a bond defaults there are a number of options available to the investor. They can wait in the hope that the issuer transfers more stablecoin into the escrow account, can trade the bond in the secondary market to distressed debt investors or exchange the bond for a proportion of the remaining funds in the escrow. For the last option, they submit the transaction group in table 4.10 and the stateful smart contracts together verify the stablecoin transfer is equal to:

4.1.13 InterPlanetary File System

As part of the green verifier rating, the issuer uploads documents for the use of proceeds and green reporting. Blockchain is not designed to store large amounts of data and it would be very costly to do so.

To overcome these limitations, we use the InterPlanetary File System (IPFS) to share the files uploaded by the issuer. IPFS is a protocol and peer-to-peer network for storing data in a distributed way. Each file is hashed to get a Content IDentifier (CID) which can be used to uniquely refer to the file. When a client want to look up a particular file, all they need to do is supply the CID and the distributed nodes cooperate to return the contents from the global namespace.

To link this to the Algorand blockchain the issuer first uploads the file to IPFS and then submit a transaction from their Algorand account with the hash in the note field. The issuer may be responsible for many bonds so the hash is prepended by the associated Manage application identification number for the green bond. The structure is:

When we want to retrieve the files for a given green bond, the blockchain can be searched by looking up all transactions from the issuers address that has the note prefix of "<MANAGE_APP_ID>+". The suffix of the note for the transactions returned are the CIDs which can be used to query the distributed file system known as IPFS.

4.1.14 Testing

As Algorand smart contract development is relatively recent, there are not many tools available when it comes to testing. One method of testing smart contracts is by creating a local private network, deploying them there and manually checking their functionality. This is tedious and cumbersome as due to the time nature of the green bond life cycle, you have to wait until a certain coupon date or maturity. Furthermore all the setup takes several minutes.

The main way the implementation was tested was using the Algo Builder framework [algobuilder]. It includes a runtime package which can simulate (most) Algorand transactions including stateful smart contract calls. This was combined with Mocha for the test framework and Chai for assertions. Together these were able to automate testing of all different scenarios and edge cases that would otherwise be difficult to test manually.

4.1.15 Alternative Implementations

A number of different implementations were considered for the green bond. Section 4.1.2 outlined the decision to issue one ASA per green bond issuance with its supply equal to the number of bonds the issuer intends to sell. Two alternatives considered were:

  1. ASA for every bond Issuer wants to sell n number of bonds. In total n number of ASA are created, each with a supply of 1.

  2. ASA for each coupon round and the final principal Issuer wants to sell n number of bonds with p coupon payment periods (e.g. p=10 for 5 year bond with biannual coupons). In total p+1 ASAs are created, each with a supply of n.

The benefits of the first approach is that you can distinguish between each bond using its unique identification number. Instead of storing in the application how many coupon payments were made to a particular account, you rather store how many coupon payments were made for a particular bond. You no longer need to track bond transfers in the secondary market as you will always be able to identify which bond is which.

There are a few problems with the first approach however, the most severe of which is that it does not scale. There is a fixed cost per ASA creation, you must opt in to receive an ASA which incurs a transaction fee, and currently a single Algorand account can opt into a maximum of 1,000 different ASA. This would restrict an account from owning more than 1,000 bonds. You can get around this by each user having more than one Algorand account when necessary but the costs are still way too high.

The second approach is a lot more viable than the first. Idea 2 enables investors to trade coupons independently of the bond. This is known as Coupon Bonds or Bearer Bonds. The stateful smart contract simply exchanges these coupon ASA for stablecoin, and coupon payments are no longer stored.

One concern with this implementation is how the market will react to the new financial instrument. Pricing becomes different as you are not trading bonds but now a form of futures, which may deter some investors.

Another consideration one has to make is the cost of the solution. An investor who purchases the bond upfront would need to opt into every ASA. This is a significant upfront cost. In addition, there are opcode and size limitations for stateful smart contracts. One would need to store the asset identification numbers of many ASA which may breach these limits as the number of coupon payments grows. You could have one contract per ASA but this would be costly on the issuer.

4.2 DApp

A DApp was created as a demo application for how users would interact with the platform as a whole. The DApp gives the users the ability to act as an issuer, investor, green verifier or financial regulator. In practise, a user would have to be approved before they can have these permissions. For example an investor would have some KYC checks and only a handful of accounts would be a green verifier or financial regulator.

The DApp interacts with the Algorand blockchain using both a frontend user interface and backend server. The frontend allows users to sign transactions using their locally stored keys. The backend is used to interact with the blockchain using private keys which is used in issuance and the stablecoin dispenser. There is also a connected database for off-chain storage such as the addresses linked to a user account. The DApp architecture is shown in Figure 4.3.

Figure 4.3: DApp Architecture

A user guide on how interact with the web application is provided in Appendix A.

4.2.1 Languages, Frameworks and Tools Used

Some of the technologies used include:

  • TypeScript [typescript] Programming language that adds optional static typing to JavaScript. Used to write more reliable and easier to refactor code.

  • React [react] A JavaScript library for building user interfaces. Used to build encapsulated components, each with their own state, which can be combined to create complex views.

  • React Redux [reactredux] React bindings for Redux, a state management library for JavaScript applications. Used to share state across components.

  • Material-UI [material-ui] A React UI framework that provides components for faster and easier development.

  • Node.js [nodejs] An asynchronous event-driven JavaScript runtime. Used in the server to handle concurrent network connections and requests.

  • Express [express] Node.js web framework. Used for routing and authentication middleware.

  • PostgreSQL [postgresql] Relational database system that uses the SQL language. Used to store off-chain data.

  • Auth0 [auth0] Authentication platform. Used for authorisation and account management.

  • Rand Labs Algorand Developer API [algoranddeveloperapi] Used to interact with the blockchain without needing to run our own node.

  • MyAlgo Connect [myalgo-connect] JavaScript library to securely sign Algorand transaction with the MyAlgo wallet

4.2.2 Redux

The Redux store holds the whole state tree of your application. To update the state inside it, you must dispatch an action. This triggers a call to the reducer which changes the state depending on the action and the previous state value.

For the application, the state tree is split into two branches: one to store state about the logged in user and the other to store state about the green bonds.

interface BondState {
  apps: Map<number, App>;
  selectedApp?: number;
  trades: Map<number, Trade>;
  selectedTrade?: number;
}
interface UserState {
  addresses: string[];
  selectedAccount?: UserAccount;
}
Figure 4.4: React Redux Store

The BondState interface contains two map data structures. The first links the main smart contract application identification number for a given green bond, to the application itself. The value contains information including the bond identification number, and blockchain readings like the stateful smart contracts’ global state. The other map stores trade offers for a given application and will be discussed in more detail in section 4.2.5.

The UserState interface is used to store the Algorand addresses connected to the user account and also information regarding the selected Algorand address. This comprises of blockchain readings for the Algo balance, owned green bonds and stateful smart contracts’ local state.

4.2.3 React Components

The React components were divided into two categories: presentational components and container components. Presentational components control how the user interface looks and are often reusable, whereas container components manage state and the application logic. This design pattern helped separate to separate concerns, making it easier to refactor and reason about the code.

An example of the pattern in use are the components GreenVerifierPageContainer and GreenVerifierPage. As the name suggest, GreenVerifierPageContainer is the container component. It utilises the connect() function from Redux that allows the component to dispatch actions and read the global state. The component also contains the logic for submitting a green rating. GreenVerifierPageContainer passes props to its child component GreenVerifierPage which is the presentational component. GreenVerifierPage is responsible for positioning the page components and does not contain any state.

Figure 4.5: Simplified React Component Tree

Figure 4.5 shows a simplified component tree, starting from App, the top level component. The NavbarManager is shared across all pages so it is a direct child of App. The React Router is used to simulate multiple URLs in the web application. It is coupled with Auth0 React package which protects each page so that only authenticated users can access them. If a user tries to go to one of these paths they are automatically redirected to the login page. Subsequently there are an additional six ProtectedRoute children components for the dashboard, issuer, investor, green verifier, financial regulator and settings pages. The last component is Route which is for the home page and it catches all unknown paths.

4.2.4 MyAlgo

To use the web application, a user must first create a MyAlgo Wallet account. They can then share their public Algorand addresses with the web application and make use of the MyAlgo Connect functionality to sign transactions securely, without having to expose their private keys. Figure 4.6 is a screenshot of a generated Algorand transaction from which the user can review and sign.

Figure 4.6: Signing Transaction Using MyAlgo Connect

Other than MyAlgo connect, the only other alternative for allowing users to sign transactions without having to store private keys is AlgoSigner [algosigner]. AlgoSigner has the same functionality as MyAlgo Connect, however it is only available as a chrome extension so was not preferred.

One limitation with MyAlgo Connect is that you cannot sign grouped atomic transactions, see section 2.4.3. This provides a negative experience for the user as they have to sign each transaction separately and unless they look at the underlying code, they are unaware of any grouped atomic transactions. A malicious website could use this behaviour to steal funds from an account. For example, the user could sign a payment transaction expecting it to be grouped with a returned asset transfer. The website could then submit signed transaction alone.

Therefore the current implementation is not ideal and would not be suitable in a production environment. The MyAlgo team say that MyAlgo Connect will support grouped transactions in the next release so the problem should be resolved in the near future.

4.2.5 Issuer

To issue a bond the issuer needs to fill in a form with the bond parameters: number of bonds to mint, number of coupon payments, start buy date, end buy date, maturity date, bond cost, bond coupon value and bond principal amount. For the purpose of the demo and allowing users to try out all the available interactions, they also specify the Algorand address for the green verifier and financial regulator. In practise, for the green verifier and financial regulator fields, there would either be a drop down option where the issuer can select from a few choices or they would have no say in the matter.

When the issuer submits the form, the request is sent to the backend where the parameters are encoded into the smart contracts and are deployed. A new ASA is also created. The reason why these transactions are not created for the issuer to sign and submit is because of the current limitations in Algorand. Each address is only allowed to create up to 10 stateful smart contracts. There are two stateful smart contracts per issuance which would limit a single address to five green bond issuances in total. This can be handled by having the issuer generate and link new Algorand addresses but an easier solution is to just deploy the stateful smart contracts on behalf of the issuer. This is done in the backend by funding a new Algorand account which is used only ever once to both mint the green bond and create the applications. No additional keys have to be stored as the address will never need to be used again.

The page also lists all the green bonds the account has issued. From there an issuer can upload the use of proceeds and periodic reports, fund the stablecoin escrow account, as well as review the ratings they have received. To upload a document, an issuer first chooses a locally stored PDF which is uploaded to IPFS. They are then asked to sign a zero Algo payment transaction which contains the content identifier for the file, as explained in section 4.1.13.

4.2.6 Investor

The investor can view for sale, ongoing and expired green bonds. These are each listed in their own data table from which they are able to filter by cost, expiry date etc. To obtain the green bond offerings, a request is sent to the NodeJS server which retrieves the bond and stateful smart contracts identification numbers from the PostgreSQL database.

The MyAlgo developer API is then queried to obtain blockchain readings concerning the green bonds. The number of minted bonds, the balance in the stablecoin escrow account, the number of coupons paid, among other values, are all returned.

The user can enter into a particular green bond by clicking on an entry in the table. From the new view, the user can register for the green bond which enables them to purchase the bond. Registering is defined as opting into the green bond ASA so that their Algorand address can hold them, and opting into one of the stateful smart contracts so that we can store information in their local state. All of this is hidden from the user in that they only need to click on the Register button and these transactions are automatically generated for them to sign.

When purchasing the bond, the user can enter the number of bonds up to six decimal places (fractional asset ownership). Bond holders can then use the other exposed functionality to claim coupons, principal or default. The application will for example, verify they own some bonds, check that they have claimed all the coupons available and make sure their is insufficient funds in the stablecoin escrow account to pay all the remaining money owed, before allowing the investor to claim a default. If all these pass, then the investor can submit a default claim and the application will determine the amount of money owed to them which is embedded into the generated transactions. If the investor tries to get around the checks by creating these transactions themselves then the smart contract logic will reject them since they have their own similar checks.

Another part of the DApp is the ability for investors to trade their bonds in the secondary market. Green bond owners can set the number of bonds they are willing to sell and at which price. Other investors can then search and filter through all these trade offers and decide to accept them.

Investors can use the interface to generate the delegated logic signatures which is stored in the PostgreSQL database so that when someone wants to use a particular trade offer, the signature is retrieved for the purpose of signing some of the transactions in the atomic transfer. Section 4.1.9 describes the blockchain part of the implementation in more detail.

4.2.7 Green Verifier

The green verifier has a similar view to an issuer, except that instead of uploading PDF report and reviewing ratings, they review PDF reports and submit ratings. To do this, the green verifier first selects the green bond from a list of all the bonds they are a green verifier of.

The uploaded PDFs are retrieved by searching the blockchain transactions of the issuer for the content identifiers which is used as a lookup into IPFS. The interface tells the green verifier the period for which they can add a rating for as demonstrated in Figure 3.2 and then they simply select the number of appropriate stars. A transaction is generated with these values for them to sign.

4.2.8 Financial Regulator

The financial regulator can select from all the green bonds that they are the financial regulator for. After selecting a particular green bond, the financial regulator can see the list of all registered investors for the bond and their respective balances, all obtained from reading the blockchain.

By default both the issuer and all investors must be approved by the financial regulator. The financial regulator simply clicks on the button with their desired action and the corresponding transaction is generated for them to sign.

5.1 Algorand Fees

There are no currently available tools that estimate the cost values for you so all the costs were manually calculated using the Algorand documentation as a reference. To review the fees in Algorand, please see section 2.4.8.

The exact cost is dependant on a number of factors. For example an issuer has to submit an additional transaction for every report they upload. Therefore the final values will be expressions from which we can substitute example values into.

To issue the green bond there are fees to mint a new ASA, deploy the stateful smart contracts and supply the contract account with the minimum balance fee. The calculation can be seen in table 5.1, where n is the number of uploaded reports and c is equal to:

max width= Action Amount (microAlgos) Minimum Balance Fee (microAlgos) Transaction Fee (microAlgos) Total (microAlgos) Create new ASA 0 100,000 1,000 101,000 Fund contract accounts 202,000 0 1,000 203,000 Send green bond to escrow and configure 0 0 2,000 2,000 Deploy Main App 0 184,000 1,000 185,000 Deploy Manage App 0 100,000 + 50,000c 1,000 101,000 + 50,000c Update Apps 0 0 2,000 2,000 Upload Report 0 0 1000n 1000n 594,000 + 50,000c + 1,000n

Table 5.1: Issuance Cost

The investor has a minimum balance to opt into receiving the green bond and storing local state in the main application. After that, the investor simply pays for transaction fees. The cost for each investor function is specified in table 5.2.

Action
Amount
(microAlgos)
Minimum
Balance Fee
(microAlgos)
Transaction
Fee
(microAlgos)
Total
(microAlgos)
Opt into ASA 0 100,000 1,000 101,000
Opt into App 0 184,000 1,000 185,000
Buy 1,000 0 3,000 4,000
Trade Sell 1,000 0 3,000 4,000
Trade Buy 0 0 1,000 1,000
Claim Coupon 1,000 0 3,000 4,000
Claim Principal 2,000 0 4,000 6,000
Claim Default 2,000 0 4,000 6,000
Table 5.2: Investor Costs

The green verifier and financial regulator pay in total 1,000 microAlgos per transaction. This would be to provide a green rating or to freeze the bond.

For a green bond that has annual coupon payments for 10 years, assuming one report per period and ignoring trading (which has a very small fee), we have the following costs:

  • Issuer 1.104 Algos or $1.13

  • Investor 0.336 Algos or $0.34

  • Green Verifier 0.011 Algos or $0.01

  • Financial Regulator Negligible

These costs are minimal; if Algorand’s market cap reached Ethereum’s market cap, the cost of issuance would be $103.60 and the investor would pay $30.84 in total.

5.2 Green Rating

As we have seen, the green verifier submits green ratings for a bond before each coupon. For every rating dropped from 5 stars, the coupon payment values increase by 10% compounded, i.e. if the coupon rate is 2% (for 5 stars) then the coupon rate for 3 stars is 2.42%. Section 3.3 covers this in more details.

We can use the bond price formula in section 2.1 to evaluate the effect the green ratings have on the theoretical price of the bond. Figures 5.1 and 5.2 plots the price of the green bond against the green rating. We assume that the green bond received the same green ratings for all its coupons.

For figure 5.1: the bond pays an annual coupon rate of 5% (for 5 stars), has a face value of $100 and has a discount rate of 5%. Each colour represents a different length of time until maturity, and these range from 5 years to 20 years.

The graph shows that bad green performance over increased time periods results in larger price increases. Investors receive higher coupon payments so the price of the bond is driven up. We can view green ratings similar to credit ratings where even though investors may get a higher return on their investments, there is an added risk where their funds may not be used for suitably green projects.

Figure 5.1: Green bond price against green rating for various time periods

For figure 5.2: the bond has a face value of $100, a discount rate of 5% and has 10 years until maturity. Each colour represents a different annual coupon rate (for 5 stars), and these range from 0% (zero coupon bond) to 8%.

Green ratings have no effect on the price of a zero coupon bond as the ratings are tied to the coupon payments. This reflects are architecture where we expect the issuer to supply data and documentation at every coupon period regarding the green status of their project. If there are no coupons then there is no reporting (other than the use of proceeds).

Overall we can see that as the coupon becomes less of a factor in the pricing of the bond, the green ratings have a smaller impact on the price as well. We could look into potentially reducing the penalties as the coupon rate in relation to the face value increases, and introducing a penalty for the principal which decreases as the face value in relation to the coupon rate decreases.

Figure 5.2: Green bond price against green rating for various coupon rates

5.3 Security

The Algorand recommend guidelines were followed when writing the smart contracts. The contracts verify that there in never any rekeying which prevents a malicious actor from being able to take control of an Algorand account through an unchecked transaction. There are also checks that the close-to property of a transaction is not set so funds cannot be stolen from the escrow accounts.

Unit tests were written to verify the behaviour of the smart contracts and possible edge cases. These ensure that certain transactions fail and that malformed arguments are handled appropriately.

The stateful smart contracts also disables the update functionality. A compromised issuer account would not have any impact on the security of their issued green bonds. Once the green bond is created and the funds are received, the issuer no longer interacts with the applications.

Two concerns though are the green verifier and financial regulator. Through their rating, the green verifier directly impacts the money the issuer owes. The financial regulator has the ability to freeze the bond entirely. Both of these actors are assumed to be trustworthy but there should be additional safeguards in place to protect against malicious behaviour or leaked private keys.

5.4 Contributions to The Algorand Ecosystem

Since Algorand is a relatively new technology, the ecosystem as a whole is underdeveloped. When working with community tools many bugs were found which stunted project progress. Some of the most important ones were:

  • Vulnerability in MyAlgo Wallet where you can spam an account with millions of assets. The attack goes as follows: let’s say we have two new Algorand accounts, one controlled by Alice and the other controlled by Bob. Alice then sends Bob a zero amount of an ASA. The transaction fails on the blockchain since Bob never opted into the asset, however the MyAlgo displays the ASA in Bob’s list of holdings. Alice can repeatedly do this at no cost since the transactions would never be approved.

  • Major bug in Algo Builder [algobuildertxnbug], the only testing framework for Algorand smart contracts. The Txn opcode always referenced the first transaction in a transaction group as opposed to the current transaction.

  • Bug in Algo Builder [algobuildercloseassetbug] where you could opt out of an asset using a clawback transaction. This behaviour is not allowed on the Algorand blockchain.

As well as the above issues, an additional three issues were filed in the Algo Builder repositories detailing improvements that could be made that resulted in pull requests. There were also two minor bugs reported on the MyAlgo Connect signing tool that were also fixed.

5.5 Algorand

There are many challenges to working with Algorand. As outlined above, there are few available tools for developers to work with and some of them have not been thoroughly tested.

As discussed in 4.2.4, there exists two signing tools that allow the user to sign transactions using their locally stored private keys. One is AlgoSigner but that can only be used as a chrome extension. Therefore the project uses My Algo Connect. My Algo Connect has a severe limitation in that it does not support grouped transactions (AlgoSigner does not support them either). This means that a user has to sign each transaction separately without having the guarantee that it is being grouped with another transaction. For Algorand to be a viable option, grouped transaction signing must be added. After reaching out to the MyAlgo team about this, they responded that they plan on adding this functionality in their next major release.

There is also only one testing framework for Algorand smart contracts. At the moment, most developers are manually testing their smart contracts by using a private network and writing scripts. This methodology was used at the start of the project but became very tedious as the set up times are long and it is difficult to test smart contracts manually that are dependent on time.

To solve this issue, the project made use of the Algo Builder tool. The project became the first open source project using Algo Builder. Algo Builder was difficult to work with at first as it lacked documentation and had a number of bugs. In late May 2021, version 1.0 of Algo Builder was released which included new documentation and fixed many of the reported bugs. Algo Builder still remains limited in that it only supports up to TEAL2. All TEAL3 code has to be commented out so portions of the smart contracts must be tested solely manually.

There are also a number of problems with TEAL. Currently TEAL does not support looping which restricts what you can write. In addition there are size limitations on these contracts, see section 2.4.7, which were quickly exceeded. To combat this, argument names had to be shortened and the stateful smart contract code had to be split into two stateful smart contracts that referenced each other.

The supported languages for smart contract development are very basic. In the case of PyTeal, it is a simple wrapper of the TEAL language in which you still have to directly interact with the stack. In addition, all debugging must be done by first compiling to TEAL and then stepping through the code.

In May 2021, the Reach language [reach], which targets the Algorand and Ethereum blockchain, was released on MainNet. Reach uses a subset of JavaScript and is much more expressive than TEAL. It has a compiler which is integrated with a satisfiability-modulo-theories (SMT) theorem prover which verifies the correctness of the application. Since Reach came towards the end of the project, there was not enough time to test it out, however it looks like a great step to lowering the barrier to entry for Algorand.

5.6 Comparison With Existing Solutions

There are few comparable solutions for green bond issuance on the blockchain. Some companies are working on blockchain bonds more generally, but they are still in development. This presents a unique opportunity in the market for a platform like the one developed in this project.

5.6.1 Green Assets Wallet

One platform that is aimed towards green bonds is Green Assets Wallet (GAW) [greenassetswallet]. GAW support green impact reporting using the Chromia blockchain. It uses the concept of Validators, whose role it is is to assess the documentation and data provided by an issuer. This is similar to the green verifier in our case. However the platform is limited; it only allows investors to view this information but all bond transfers and payments are done off-chain. Our proposed implementation supports the green bond in all aspects, from issuance to maturity, and thus benefits from immediate settlement and reduced transaction costs.

7.1 Reflection

The green bond market remains relatively small in comparison to the global bond market. The main obstacles to growth is: the perception of higher issuance costs, the risks of greenwashing for all stakeholders and lack of standardisation [greenbondmarket].

The work in this project demonstrates that blockchain can be used to substantially lower the costs and also provide transparency and accountability with regards to greenwashing. The settlement period can be entirely eliminated through disintermediation. We can also use a financial regulator to approve issuers and investors, thus complying with KYC / AML legal requirements.

The Algorand blockchain has many features that make it a great fit for green bond issuance. It has high throughput, low costs, and layer-1 support for assets and smart contracts. Its consensus mechanism also uses a lot less energy compared to other blockchains. However further development is needed around the Algorand ecosystem before it should be used in a production environment.

7.2 Summary of Achievements

We have developed a proof of concept application for green bond issuance on blockchain that is cost effective. The implementation supports the life cycle of green bonds from issuance to maturity. Fractional asset ownership and low issuance fees opens the market to smaller investors and issuers. Issuers can receive stablecoin from the proceeding of the bond and investors can receive stablecoin through the coupons and principal. The green bonds can also be traded in the secondary market at virtually no cost.

We created a novel system whereby an issuer can upload reports which are validated by a green verifier. The green ratings submitted has a direct impact on the issuer and the coupon amounts. The issuer not only suffers reputations damage, they are also hit with economic penalties.

Lastly the financial regulator is able to freeze tokens to ensure the integrity of the market. An investor must first be preapproved before they are able to purchase the green bond, whether on the primary or secondary market. The blockchain also can be used to monitor the financial transactions of the green bond. Mechanisms are in place for investors to recover any remaining funds in the case of bond default.

7.3 Future Work

We believe that there are a number of opportunities for extending the project. Below are a selection of the most important areas for future work.

7.3.1 Blockchain Oracles For Impact Reporting

At the moment the issuer uploads reports detailing the green impact of their project. The green verifier must review this documentation and submit an appropriate green rating. Credibility can be improved by shifting the validation from the green verifier to tokenised data [hsbc]. The first stage of this is integrating blockchain oracles that provide trusted off-chain data to the smart contracts.

7.3.2 Green Penalties

The current formula for green penalties results in harsher penalties for green bonds with higher coupon rates. The most extreme case being zero coupon bonds, where the ratings have no impact. We can refine the formula to take into account the principal, and potentially scale the coupon and principal penalties according to their respective contribution to the price of the bond. One way we can do this for the coupon is by basing the penalty on the spread, the interest rate in excess of the risk free rate.

7.3.3 Primary Market

Currently the issuer sets a price up front. An investor must either pay that price initially, or buy the bond from another investor. However to better reflect the primary market experience, the issuer should be able to select if they would like to issue the green bond using a bought deal or auction.

7.3.4 Automated Transactions

In Algorand, smart contracts cannot create transactions, only approve them. Therefore an Algorand account needs to submit the appropriate transactions to for example claim the coupon, and the smart contracts verify that the amount of money being claimed is correct and so on. Up to now each investor has been responsible for claiming their own coupons but it would be preferable if these were claimed on their behalf.

A scheduling service can be deployed that does exactly this. An investor would sign logic detailing the transactions needed. A script would record the dates of the coupon payments and at each event, it would use the delegated signature to submit the transactions as if it came from the investor. A similar approach can be used in other areas including bond defaults and principal payments.

Appendix A User Guide

This section will be a resource for how to get setup with the application and interact with it. You can access the site using the URL https://blockchain-bonds.herokuapp.com/. Note that it may take some time for the page to initially load the website if there has not been any recent traffic. Similarly after logging in, it make take some time to retrieve the associated Algorand addresses linked to your account while the server is booting up.

The recommended browser to use when accessing the website is Google Chrome. Other browsers have not been tested although they should still all work.

The web application is designed so that you can try out all the different roles. You can be an issuer, investor, green verifier or financial regulator.

a.1 Create An Account

  1. Create an account by clicking on the Sign Up button in the top right corner of the page.

  2. Sign up by typing in your email and a password, or by using Google account.

After logging in, you will be directed to the dashboard page. The dashboard page shows the selected Algorand address, as well as its Algo and stablecoin balances.

Figure A.1: Screenshot From Dashboard

a.2 Set Up My Algo Wallet

If this is your first time logging in, you will have to set up your account by connecting your Algorand addresses stored in your MyAlgo Wallet.

  1. Click on Settings on the top right, next to Log Out.

  2. Click on the CONNECT button, a popup should appear. If you already have a MyAlgo account then you can skip to step 7.

    Figure A.2: MyAlgo Set Up Wallet Pop Up
  3. Click Set Up Wallet in My Algo, a new tab for https://wallet.myalgo.com/ should be opened.

  4. Click Access Now, accept the terms of service and type in a password. The MyAlgo Wallet will only be accessible in that browser as all the keys are privately stored and thus not accessible through the Internet.

  5. On the top right, click on the drop down menu and select TESTNET.

    Figure A.3: Switch to TestNet in MyAlgo
  6. Select the second option from the top New Wallet. Follow the instructions to generate a new Algorand address. You can name the wallet whatever you like.

  7. Return to the settings page and click CONNECT again. This time a pop should appear asking you to type in your MyAlgo password.

    Figure A.4: MyAlgo Connect Addresses Pop Up
  8. Tick the addresses you would like like to connect to and press Continue. The addresses should now be listed under Connected Account. From here you can select which address you would like to interact with the blockchain from.

    Figure A.5: MyAlgo Connect Addresses Pop Up

a.3 Fund Algos

Before you can interact with the Algorand blockchain, you first need to fund your account with Algos.

  1. Click on Dashboard on the top left of the page.

  2. Click on dispenser under the Algo Balance heading. This should open a new tab.

  3. Fill in the form with the address you would like to add Algos to and click dispense. If you return to the dashboard page, you should see the updated Algo balance. 10 Algo should be plenty.

a.4 Fund Stablecoin

Before you can purchase a bond / fund an escrow account as an issuer, you need to have some stablecoin in your Algorand account.

  1. Click on Dashboard on the top left of the page.

  2. Click on FUND under the Stablecoin Balance heading. You should see the updated stablecoin balance.

    Figure A.6: Issue Bond Form

a.5 Issuer

To take the role of an issuer, click on Issuer in the top navigation bar. The issuer has a number of functionalities: they can issue green bonds and manage their existing ones. This includes funding the account from which the coupon and principal payments will be taken from and uploading their green documentation.

To issue a new bond:

  1. Click on ISSUE NEW BOND at the bottom of the page.

  2. Fill in the form with the green bond parameters. If you would like to be the green verifier and financial regulator then you can give an Algorand account address that you control in these fields. In practise you would not have the ability to set the green verifier and financial regulator.

    Figure A.7: Issue Bond Form
  3. Click CREATE. This will take a few minutes to set up in the background. After everything has been created, you should be able to see the bond listed in your issuer page.

  4. Before investors can purchase the new green bond, it must be first approved by the financial regulator by them unfreezing the bond, see section A.8 for how to do this.

To upload reports for a green bond you have issued:

  1. Click on the green bond you would like to upload a report on from the table.

  2. If at the appropriate time (before the start buy date for the use of proceeds or in a coupon period for a report) then there will be a button enabled to upload a PDF. Click on Upload PDF For <X> and choose a PDF from your local file system.

  3. Sign the generated transaction. You should see the uploaded report after refreshing the page.

To fund the escrow account of a green bond you have issued:

  1. Click on the green bond you would like to upload a report on from the table.

  2. At the bottom of the page, enter the dollar amount you would like to transfer into the escrow account, and click the button to the right.

  3. Sign the generated transaction. You should see the uploaded report after refreshing the page.

a.6 Investor

To take the role of an investor, click on Investor in the top navigation bar. You will have a number of options to select from depending on what you would like to do.

To buy a bond in the primary market:

  1. Click on Bonds For Sale and select the bond you would like to purchase.

  2. You can review information about the bond, like its timeline, uploaded reports and green ratings.

  3. Before you can own the green bond you must first register by clicking on REGISTER. You will then have to wait until your account has been approved by the financial regulator.

  4. After you have been approved, under the Purchase heading, specify the number of bonds you would like and click the buy button.

  5. Sign the generated transactions. You should see that the number of bonds you own update.

The buttons for claiming a coupon, principal or default are enabled when appropriate. If disabled, you can hover over the button to see the reason why.

To sell a bond in the secondary market:

  1. Navigate to the green bond page for the one you would like to trade.

  2. Under the Trade heading, specify how many bonds you would like to trade and click the button to the right.

  3. Sign the generated transactions. You should see the number of bonds that can be traded update.

  4. Generate a trade logic signature by filling in the fields below, specifying the price per bond and the expiry date of the trade offer and click the button to the right.

  5. Sign the generated transactions.

  6. If you return to the investor page and click My Trades, you should see your newly created trades there.

To buy a bond in the secondary market:

  1. Click on Live Trade Offers and select the trade offer you would like to take up.

  2. If you have not already registered for the bond, you must first do so by clicking on REGISTER. You will then have to wait until your account has been approved by the financial regulator.

  3. Specify the number of bonds you would like to buy, up to the maximum number available, and click on the button to the right.

  4. Sign the generated transactions. You should see that the number of bonds you own update.

a.7 Green Verifier

To take the role of a green verifier, click on Green Verifier in the top navigation bar. The page will list all the green bonds that you are a green verifier for. To add a green rating for a bond:

  1. Click on the green bond you would like to upload a rating for from the table.

  2. You can review the issuer’s uploaded PDFs by opening a time period and clicking on the links.

  3. If at the appropriate time (before the start buy date for the use of proceeds or in a coupon period for a report) then there will be a button enabled to submit a rating. Specify the number of stars to give and click on Add Rating For <X>.

  4. Sign the generated transaction. You should see the page update with the submitted rating.

a.8 Financial Regulator

To take the role of an financial regulator, click on Financial Regulator in the top navigation bar. From there you can see all the accounts that have registered for the green bond.

To freeze / unfreeze the green bond as a whole then click on the button at the top of the page and sign the generated transaction. When a green bond is first issued, it is created frozen so unfreezing it is the financial regulator approving the bond for sale.

To freeze / unfreeze the green bond for a specific account, click on the switch next to the account you would like to perform the action to. When an account registers for a green bond, their account is frozen so unfreezing it is the financial regulator approving that account to own, claim money from and trade the green bond.

a.1 Create An Account

  1. Create an account by clicking on the Sign Up button in the top right corner of the page.

  2. Sign up by typing in your email and a password, or by using Google account.

After logging in, you will be directed to the dashboard page. The dashboard page shows the selected Algorand address, as well as its Algo and stablecoin balances.

Figure A.1: Screenshot From Dashboard

a.2 Set Up My Algo Wallet

If this is your first time logging in, you will have to set up your account by connecting your Algorand addresses stored in your MyAlgo Wallet.

  1. Click on Settings on the top right, next to Log Out.

  2. Click on the CONNECT button, a popup should appear. If you already have a MyAlgo account then you can skip to step 7.

    Figure A.2: MyAlgo Set Up Wallet Pop Up
  3. Click Set Up Wallet in My Algo, a new tab for https://wallet.myalgo.com/ should be opened.

  4. Click Access Now, accept the terms of service and type in a password. The MyAlgo Wallet will only be accessible in that browser as all the keys are privately stored and thus not accessible through the Internet.

  5. On the top right, click on the drop down menu and select TESTNET.

    Figure A.3: Switch to TestNet in MyAlgo
  6. Select the second option from the top New Wallet. Follow the instructions to generate a new Algorand address. You can name the wallet whatever you like.

  7. Return to the settings page and click CONNECT again. This time a pop should appear asking you to type in your MyAlgo password.

    Figure A.4: MyAlgo Connect Addresses Pop Up
  8. Tick the addresses you would like like to connect to and press Continue. The addresses should now be listed under Connected Account. From here you can select which address you would like to interact with the blockchain from.

    Figure A.5: MyAlgo Connect Addresses Pop Up

a.3 Fund Algos

Before you can interact with the Algorand blockchain, you first need to fund your account with Algos.

  1. Click on Dashboard on the top left of the page.

  2. Click on dispenser under the Algo Balance heading. This should open a new tab.

  3. Fill in the form with the address you would like to add Algos to and click dispense. If you return to the dashboard page, you should see the updated Algo balance. 10 Algo should be plenty.

a.4 Fund Stablecoin

Before you can purchase a bond / fund an escrow account as an issuer, you need to have some stablecoin in your Algorand account.

  1. Click on Dashboard on the top left of the page.

  2. Click on FUND under the Stablecoin Balance heading. You should see the updated stablecoin balance.

    Figure A.6: Issue Bond Form

a.5 Issuer

To take the role of an issuer, click on Issuer in the top navigation bar. The issuer has a number of functionalities: they can issue green bonds and manage their existing ones. This includes funding the account from which the coupon and principal payments will be taken from and uploading their green documentation.

To issue a new bond:

  1. Click on ISSUE NEW BOND at the bottom of the page.

  2. Fill in the form with the green bond parameters. If you would like to be the green verifier and financial regulator then you can give an Algorand account address that you control in these fields. In practise you would not have the ability to set the green verifier and financial regulator.

    Figure A.7: Issue Bond Form
  3. Click CREATE. This will take a few minutes to set up in the background. After everything has been created, you should be able to see the bond listed in your issuer page.

  4. Before investors can purchase the new green bond, it must be first approved by the financial regulator by them unfreezing the bond, see section A.8 for how to do this.

To upload reports for a green bond you have issued:

  1. Click on the green bond you would like to upload a report on from the table.

  2. If at the appropriate time (before the start buy date for the use of proceeds or in a coupon period for a report) then there will be a button enabled to upload a PDF. Click on Upload PDF For <X> and choose a PDF from your local file system.

  3. Sign the generated transaction. You should see the uploaded report after refreshing the page.

To fund the escrow account of a green bond you have issued:

  1. Click on the green bond you would like to upload a report on from the table.

  2. At the bottom of the page, enter the dollar amount you would like to transfer into the escrow account, and click the button to the right.

  3. Sign the generated transaction. You should see the uploaded report after refreshing the page.

a.6 Investor

To take the role of an investor, click on Investor in the top navigation bar. You will have a number of options to select from depending on what you would like to do.

To buy a bond in the primary market:

  1. Click on Bonds For Sale and select the bond you would like to purchase.

  2. You can review information about the bond, like its timeline, uploaded reports and green ratings.

  3. Before you can own the green bond you must first register by clicking on REGISTER. You will then have to wait until your account has been approved by the financial regulator.

  4. After you have been approved, under the Purchase heading, specify the number of bonds you would like and click the buy button.

  5. Sign the generated transactions. You should see that the number of bonds you own update.

The buttons for claiming a coupon, principal or default are enabled when appropriate. If disabled, you can hover over the button to see the reason why.

To sell a bond in the secondary market:

  1. Navigate to the green bond page for the one you would like to trade.

  2. Under the Trade heading, specify how many bonds you would like to trade and click the button to the right.

  3. Sign the generated transactions. You should see the number of bonds that can be traded update.

  4. Generate a trade logic signature by filling in the fields below, specifying the price per bond and the expiry date of the trade offer and click the button to the right.

  5. Sign the generated transactions.

  6. If you return to the investor page and click My Trades, you should see your newly created trades there.

To buy a bond in the secondary market:

  1. Click on Live Trade Offers and select the trade offer you would like to take up.

  2. If you have not already registered for the bond, you must first do so by clicking on REGISTER. You will then have to wait until your account has been approved by the financial regulator.

  3. Specify the number of bonds you would like to buy, up to the maximum number available, and click on the button to the right.

  4. Sign the generated transactions. You should see that the number of bonds you own update.

a.7 Green Verifier

To take the role of a green verifier, click on Green Verifier in the top navigation bar. The page will list all the green bonds that you are a green verifier for. To add a green rating for a bond:

  1. Click on the green bond you would like to upload a rating for from the table.

  2. You can review the issuer’s uploaded PDFs by opening a time period and clicking on the links.

  3. If at the appropriate time (before the start buy date for the use of proceeds or in a coupon period for a report) then there will be a button enabled to submit a rating. Specify the number of stars to give and click on Add Rating For <X>.

  4. Sign the generated transaction. You should see the page update with the submitted rating.

a.8 Financial Regulator

To take the role of an financial regulator, click on Financial Regulator in the top navigation bar. From there you can see all the accounts that have registered for the green bond.

To freeze / unfreeze the green bond as a whole then click on the button at the top of the page and sign the generated transaction. When a green bond is first issued, it is created frozen so unfreezing it is the financial regulator approving the bond for sale.

To freeze / unfreeze the green bond for a specific account, click on the switch next to the account you would like to perform the action to. When an account registers for a green bond, their account is frozen so unfreezing it is the financial regulator approving that account to own, claim money from and trade the green bond.

References