🌟 Green Bond V2 🌟

Table of Contents

  1. Introduction
  2. Getting Started
  3. Main Actions
  4. Stats Page
  5. External Links
  6. Further reading
  7. Contact Support

Introduction

Welcome to the Green Bond V2 - your gateway to decentralized finance green bonds on the Arbitrum network. This user documentation will guide you through the key features and actions available on our platform.

Getting Started

Connecting to the Dapp

To start using GreenBondV2, follow these steps:

  1. Ensure that you have an Ethereum wallet with funds.
  2. Visit greenchain.capital in your preferred web browser.
  3. Connect your wallet to the dapp by clicking on the "Connect Wallet" button and selecting your wallet provider.

Main Actions

1. Deposit USDT for gBOND

To deposit USDT and acquire gBOND, follow these steps:

Deposit USDT

  1. Navigate to the "Deposit" section on the dapp.
  2. Enter the amount of USDT you want to deposit.
  3. Confirm the transaction on your wallet.
  4. Once the transaction is confirmed, you will receive the equivalent amount of gBOND.

2. Redeem gBOND for USDT

To redeem gBOND for USDT, follow these steps:

Redeem gBOND

  1. Go to the "Redeem" section on the dapp.
  2. Enter the amount of gBOND you want to redeem.
  3. Confirm the transaction on your wallet.
  4. After the transaction is confirmed, you will receive the corresponding amount of USDT.

Stats Page

Explore the "Stats" page to track bond investment and rewards:

  • Total Amount Invested: View the total USDT deposited.
  • Rewards Earned: Monitor the rewards earned from investments.

Bridge Assets to Arbitrum 🌉

Use the following link to bridge assets to Arbitrum:

Arbitrum Bridge

Swap Assets on Arbitrum 🔄

For asset swapping on Arbitrum, use the following link:

Swap assets on Arbitrum

Further Reading

Contact Support 🤔

For further assistance, reach out to our support team at [info@greenchain.capital](mailto: info@greenchain.capital).

Green Bond V2 Technical Overview

Green Bond Contract on Arbitrum (ERC4626 compatible)

Deployed at 0xD24644Ca8cB5D67E776291b37896Bc3D557A47B8

GreenBond V2 Summary

GreenBond V2 contract builds upon GreenBond with the following features:

  • Fully ERC4626 compatible
  • Aave passive income instead of Curve
    • Simplified interfacing (more robust and secure)
    • Better rate of return (currently ~10% APR for Aave as opposed to ~6% for Curve)
    • Automatic rewards as opposed to claiming processes

Overrall design to provide stable returns for renewable energy project financing, in the form of a stablecoin (USDT) bond. It enforces a minimum lock-up period (3-6 months) for deposited assets, in order to establish new projects' active income. Passive income is earned through Aave lending.

Green energy projects are registered for asset deployment. Master contract agreements are publically linked for transparency and accountability of operations. Income is received from these projects to pay dividends to investors.

Interaction Between GreenBond and Projects:

  • Reward Accumulation: Users deposit stablecoins (USDT) into the GreenBond contract to earn rewards over time. These rewards are automatically accumulated, based on both passive income from Aave lending and active income from active projects.

  • Income Receipt: The Projects generate income for the investors either in a fixed payment agreement or through re-sale of the project.

  • Supplier Payment: The GreenBond contract, under governance control, can pay the registered project admin. Governance initiates the payment by calling the payProject function, specifying the project details.

  • Activation and Completion: Each project can be activated by governance, marking the start of the payment process. Once the term of the agreement is over, the company can complete the project by calling the completeProject function.

  • Governance Control: The GreenBond contract is under governance control, allowing designated addresses to manage contract parameters, such as the fixed interest rate, lock-up period, and governance address.

By combining the features of the GreenBond and project finance agreements, investors can earn rewards for providing liquidity, while the contract benefits from a flexible payment processing solution that supports income receipt, project payments, and project completion.

Project Finance Operations

Renewable Energy Project Finance: A Comprehensive Guide

Renewable energy is a key component of the global effort to combat climate change and reduce reliance on fossil fuels. However, developing and implementing renewable energy projects requires substantial investment and careful financial planning. In this article, we will delve into the intricacies of renewable energy project finance, exploring the key concepts and strategies that drive the funding of these sustainable initiatives.

Introduction to Renewable Energy Project Finance

Renewable energy project finance is the process of securing the necessary capital to plan, construct, and operate renewable energy projects. These projects can encompass a wide range of technologies, including solar, wind, hydroelectric, geothermal, and biomass energy. The success of these projects relies on a well-structured financial plan, which must take into account several critical factors.

Key Elements of Renewable Energy Project Finance

1. Project Structuring

The first step in financing a renewable energy project is to establish a clear project structure. This involves defining the technology to be used, project location, size, and the expected energy output. Project structuring also includes setting up special purpose vehicles (SPVs) or legal entities dedicated to the project. SPVs are crucial for ring-fencing the project from other corporate assets and liabilities.

2. Financing Sources

There are various sources of financing for renewable energy projects, including:

  • Debt Financing: This involves securing loans or bonds to fund the project. Debt financing can come from banks, financial institutions, or bonds issued in the capital market.

  • Equity Financing: Investors provide equity capital in exchange for ownership stakes in the project. These investors can include private equity firms, venture capitalists, or public shareholders.

  • Grants and Subsidies: Government incentives and grants can significantly reduce the financial burden of renewable energy projects.

  • Tax Equity Financing: Tax benefits are often used to attract investors by offering tax credits and deductions associated with renewable energy projects.

3. Power Purchase Agreements (PPAs)

PPAs are long-term contracts that secure a buyer for the energy generated by the project. These agreements are crucial for assuring revenue streams and attracting investors. PPAs can be structured as fixed-price, escalating price, or indexed to inflation.

4. Risk Mitigation

Renewable energy projects involve various risks, including technology risk, regulatory risk, and market risk. Effective risk management strategies, such as insurance, hedges, and contractual agreements, are essential to provide confidence to investors and lenders.

5. Financial Models

Developing comprehensive financial models is crucial to assess the economic viability of the project. These models include cash flow projections, sensitivity analysis, and scenario planning to account for variables like energy prices, operating costs, and project timelines.

Renewable Energy Project Finance Process

The process of financing a renewable energy project typically follows these steps:

  1. Project Origination: Identifying suitable project locations and technologies.

  2. Pre-Feasibility Study: Conducting initial studies to determine the project's economic feasibility.

  3. Project Structuring: Creating a legal entity, securing permits, and designing the project.

  4. Financial Planning: Determining the optimal mix of financing sources and creating financial models.

  5. Fundraising: Attracting investors and securing loans or grants.

  6. Construction and Commissioning: Building the project according to the design.

  7. Operations and Maintenance: Ensuring the project operates efficiently and profitably.

  8. Monitoring and Reporting: Regularly evaluating project performance against financial models.

  9. Exit Strategy: Determining when and how investors can exit the project with returns.

Conclusion

Renewable energy project finance is a complex and multifaceted process that requires careful planning and a deep understanding of financial instruments, risks, and market dynamics. As the world continues to shift towards sustainable energy sources, the ability to secure the necessary financing for renewable projects becomes increasingly critical. By following the principles outlined in this article, project developers and investors can work together to drive the growth of renewable energy and combat climate change.

Disclaimer: This article provides a high-level overview of renewable energy project finance. Specific projects may have unique characteristics and requirements. It is advisable to consult with financial experts and legal advisors for detailed guidance on your specific project.

Xstructure - Project Finance Operator Workflow

Overview

Xstructure is responsible for managing and operating the GreenBondV2 contract, which serves as an ERC4626 Vault on Arbitrum for the GreenBond project. This technical workflow outlines the key roles and operations that Xstructure performs as a project finance operator for the GreenBond DeFi platform.

Key Roles and Operations

1. Initial Setup

Xstructure's role as a project finance operator begins with the initial setup of the GreenBondV2 contract. This setup involves deploying the contract and configuring various parameters, such as the lockup period, asset addresses, Aave pool, and encoder.

2. Governance

As a project finance operator, Xstructure has governance control over the contract. This control includes the ability to make critical decisions and changes. Key governance-related operations include:

  • Changing Lockup Period: Xstructure can modify the lockup period as needed to align with project requirements.

  • Adding and Removing Governance Addresses: Xstructure can add or remove addresses from the governance list to grant or revoke control over contract parameters.

  • Recovering Tokens: In cases where token recovery is necessary, Xstructure can initiate the transfer of tokens from the contract to a designated receiver.

3. Project Management

Xstructure plays a pivotal role in managing and supervising projects that interact with the GreenBond platform. Project management operations include:

  • Registering Projects: Xstructure can register new projects by specifying project administrators and project names. This step initiates the project's interaction with the GreenBond platform.

  • Linking Project Agreements: Xstructure can link project agreements by associating project IDs with master agreements. This ensures that project-related agreements are stored securely on the blockchain.

  • Completing Projects: When a project has successfully repaid its deployed assets, Xstructure can mark the project as completed.

  • Paying Projects: Xstructure has the authority to pay projects by transferring assets to the project administrators. This action activates the project and increases the total assets supplied to that project.

  • Receiving Income: Xstructure handles the reception of income from projects. Income received is then distributed to the project's address, effectively repaying the assets.

4. Master Agreement Preparation

One of Xstructure's critical responsibilities as a project finance operator is to facilitate the creation and preparation of the master agreement for each project. The master agreement serves as a binding contract that formalizes the relationship between the project, the GreenBond platform, and the bondholders. It establishes the terms and conditions under which the project's assets and revenue rights are tied to the bond. Here's an overview of the master agreement preparation process:

  • Project-Specific Terms: Xstructure collaborates with the project administrators to define project-specific terms within the master agreement. These terms may include the duration of the project, the asset lockup period, revenue-sharing arrangements, and any special conditions that pertain to the project.

  • Legal Compliance: Xstructure ensures that the master agreement complies with all relevant legal and regulatory requirements. This may involve consulting with legal experts to draft or review the agreement to ensure it adheres to local and international laws.

  • Asset Lockup Period: The master agreement explicitly outlines the asset lockup period, which may range from 3 to 6 months. During this period, the project's assets are locked, and revenue is accrued, further securing bondholders' investments.

  • Revenue Distribution: The master agreement defines how revenue generated by the project is distributed. This may include specifying the percentage of revenue allocated to bondholders, project expenses, and the project's administrators.

  • Rights and Obligations: The agreement outlines the rights and obligations of all parties involved, including the project administrators, GreenBond platform, and bondholders. It clearly defines the responsibilities and expectations of each party.

  • Performance Metrics: To ensure transparency and accountability, the master agreement may include performance metrics and reporting requirements. These metrics are used to track the project's progress and assess its financial health.

  • Dispute Resolution: In the event of disputes or disagreements, the master agreement outlines a clear dispute resolution process. This process helps in resolving issues and maintaining the integrity of the bond.

  • Amendments and Updates: The agreement may specify the process for making amendments or updates to the terms and conditions. This ensures that the agreement can adapt to changing circumstances or project developments.

  • Signing and Execution: Once the master agreement is drafted, it is reviewed and signed by all relevant parties, including project administrators, bondholders, and the GreenBond platform. The agreement becomes legally binding upon execution.

By meticulously preparing the master agreement, Xstructure helps establish a secure and transparent framework that ties the project's assets and revenue rights to the bond. This agreement ensures that all parties involved are aware of their rights and responsibilities, ultimately fostering trust and confidence in the GreenBond platform and its mission to support renewable energy initiatives.

Conclusion

Xstructure plays a critical role in managing and operating the GreenBondV2 contract as a project finance operator. Their responsibilities include governance, project management, and asset management, all of which are vital for the success and sustainability of the GreenBond DeFi platform. Through these operations, Xstructure contributes to the growth and stability of the DeFi green bond project, furthering its mission to support renewable energy initiatives.

Disclaimer: The technical workflow presented here is a high-level overview of Xstructure's role and operations as a project finance operator for the GreenBond project. Actual workflows may vary depending on specific project requirements and contractual agreements.

Green Bond Governance

Bond deployments, upgrades and projects are managed by a Decentralized Autonomous Organization (DAO). Owners of GREEN token have voting rights for bond management.

Green Token deployed at 0xf518f2EbeA5df8Ca2B5E9C7996a2A25e8010014b

Green Token holders

Contents

IL2Encoder

Git Source

Author: Aave

Defines the basic extension interface for an L2 Aave Encoder.

Functions

encodeSupplyParams

function encodeSupplyParams(address asset, uint256 amount, uint16 referralCode) external view returns (bytes32);

encodeSupplyWithPermit

function encodeSupplyWithPermit(address asset, uint256 amount, uint16 referralCode, uint256 deadline, uint8 permitV, bytes32 permitR, bytes32 permitS)
    external
    view
    returns (bytes32, bytes32, bytes32);

encodeWithdrawParams

function encodeWithdrawParams(address asset, uint256 amount) external view returns (bytes32);

IL2Pool

Git Source

Author: Aave

Defines the basic extension interface for an L2 Aave Pool.

Functions

supply

Calldata efficient wrapper of the supply function on behalf of the caller

the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max

assetId is the index of the asset in the reservesList.

function supply(bytes32 args) external;

Parameters

NameTypeDescription
argsbytes32Arguments for the supply function packed in one bytes32 96 bits 16 bits 128 bits 16 bits

supplyWithPermit

Calldata efficient wrapper of the supplyWithPermit function on behalf of the caller

the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max

assetId is the index of the asset in the reservesList.

function supplyWithPermit(bytes32 args, bytes32 r, bytes32 s) external;

Parameters

NameTypeDescription
argsbytes32Arguments for the supply function packed in one bytes32 56 bits 8 bits 32 bits 16 bits 128 bits 16 bits
rbytes32The R parameter of ERC712 permit sig
sbytes32The S parameter of ERC712 permit sig

withdraw

Calldata efficient wrapper of the withdraw function, withdrawing to the caller

the shortenedAmount is cast to 256 bits at decode time, if type(uint128).max the value will be expanded to type(uint256).max

assetId is the index of the asset in the reservesList.

function withdraw(bytes32 args) external returns (uint256);

Parameters

NameTypeDescription
argsbytes32Arguments for the withdraw function packed in one bytes32 112 bits 128 bits 16 bits

Returns

NameTypeDescription
<none>uint256The final amount withdrawn

GreenBondV2

Git Source

Inherits: ERC4626

Author: @sandybradley

ERC4626 Vault on Arbitrum, wth USDT as asset and Aave as passive income lockup. Active income is earned through project payouts, financed by deployed assets. Time weighted asset lockup period of 3-6 months applies to enable the above.

State Variables

ASSET

USDT on arbitrum

ERC20 internal constant ASSET = ERC20(0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9);

AAVE_ASSET

aUSDT on arbitrum

ERC20 public constant AAVE_ASSET = ERC20(0x6ab707Aca953eDAeFBc4fD23bA73294241490620);

POOL

Aave pool on arbitrum (proxy)

IL2Pool public constant POOL = IL2Pool(0x794a61358D6845594F94dc1DB02A252b5b4814aD);

ENCODER

Aave encoder on arbitrum

IL2Encoder public constant ENCODER = IL2Encoder(0x9abADECD08572e0eA5aF4d47A9C7984a5AA503dC);

LOCKUP

Deposit lockup time, default 3 months

uint64 public LOCKUP = 3 * 30 days;

DEPLOYED_ASSETS

Transient tokens deployed to project (~ 6 months lock-up)

uint256 public DEPLOYED_ASSETS;

TOTAL_DEPLOYED_ASSETS

Total assets deployed to projects

uint256 public TOTAL_DEPLOYED_ASSETS;

TOTAL_REPAID_ASSETS

Total assets paid by projects

uint256 public TOTAL_REPAID_ASSETS;

GOV

Governance addresses

mapping(address => bool) public GOV;

depositTimestamps

Time weighted average lockup time per address

mapping(address => uint256) public depositTimestamps;

projectCount

uint256 public projectCount;

projects

mapping(uint256 => Project) public projects;

rewards

mapping(address => uint256) internal rewards;

lastClaimTimestamps

mapping(address => uint256) internal lastClaimTimestamps;

Functions

constructor

constructor() ERC4626(ASSET, "GreenBondV2", "gBOND2");

_govCheck

function _govCheck() internal view;

changeLockup

function changeLockup(uint64 newLockup) external;

addGov

function addGov(address newGov) external;

removeGov

function removeGov(address oldGov) external;

recoverToken

function recoverToken(address token, address receiver, uint256 tokenAmount) external;

registerProject

function registerProject(address projectAdmin, string calldata projectName) external returns (uint256);

linkProjectAgreement

function linkProjectAgreement(uint256 projectId, string calldata masterAgreement) external;

completeProject

function completeProject(uint256 projectId) external;

payProject

function payProject(uint256 assets, uint256 projectId) external;

receiveIncome

function receiveIncome(uint256 assets, uint256 projectId) external;

totalAssets

function totalAssets() public view virtual override returns (uint256);

deposit

function deposit(uint256 assets, address receiver) public virtual override returns (uint256 shares);

mint

function mint(uint256 shares, address receiver) public virtual override returns (uint256 assets);

withdraw

function withdraw(uint256 assets, address receiver, address owner) public virtual override returns (uint256 shares);

redeem

function redeem(uint256 shares, address receiver, address owner) public virtual override returns (uint256 assets);

transfer

function transfer(address to, uint256 amount) public virtual override returns (bool success);

transferFrom

function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool success);

beforeWithdraw

function beforeWithdraw(uint256 assets, uint256) internal virtual override;

afterDeposit

function afterDeposit(uint256 assets, uint256) internal virtual override;

_updateDepositTimestamp

function _updateDepositTimestamp(address account, uint256 shares) internal;

_updateTransferTimestamp

function _updateTransferTimestamp(address account, uint256 shares) internal;

Events

GovernorAdded

event GovernorAdded(address newGov);

GovernorRemoved

event GovernorRemoved(address oldGov);

PaidProject

event PaidProject(address admin, uint256 amount, uint256 projectId);

ReceivedIncome

event ReceivedIncome(address indexed sender, uint256 assets, uint256 projectId);

ProjectRegistered

event ProjectRegistered(uint256 indexed project);

Errors

InsufficientAsset

error InsufficientAsset();

InsufficientLiquidity

error InsufficientLiquidity();

InsufficientBalance

error InsufficientBalance();

InsufficientAllowance

error InsufficientAllowance();

UnknownToken

error UnknownToken();

ZeroShares

error ZeroShares();

ZeroAmount

error ZeroAmount();

ZeroAddress

error ZeroAddress();

Overflow

error Overflow();

IdenticalAddresses

error IdenticalAddresses();

InsufficientLockupTime

error InsufficientLockupTime();

Unauthorized

error Unauthorized();

NotProject

error NotProject();

Structs

Project

struct Project {
    bool isActive;
    bool isCompleted;
    address admin;
    uint128 totalAssetsSupplied;
    uint128 totalAssetsRepaid;
    string projectName;
    string masterAgreement;
}