🌟 Green Bond V2 🌟
Table of Contents
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:
- Ensure that you have an Ethereum wallet with funds.
- Visit greenchain.capital in your preferred web browser.
- 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:
- Navigate to the "Deposit" section on the dapp.
- Enter the amount of USDT you want to deposit.
- Confirm the transaction on your wallet.
- 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:
- Go to the "Redeem" section on the dapp.
- Enter the amount of gBOND you want to redeem.
- Confirm the transaction on your wallet.
- 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.
External Links
Bridge Assets to Arbitrum 🌉
Use the following link to bridge assets to Arbitrum:
Swap Assets on Arbitrum 🔄
For asset swapping on Arbitrum, use the following link:
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:
-
Project Origination: Identifying suitable project locations and technologies.
-
Pre-Feasibility Study: Conducting initial studies to determine the project's economic feasibility.
-
Project Structuring: Creating a legal entity, securing permits, and designing the project.
-
Financial Planning: Determining the optimal mix of financing sources and creating financial models.
-
Fundraising: Attracting investors and securing loans or grants.
-
Construction and Commissioning: Building the project according to the design.
-
Operations and Maintenance: Ensuring the project operates efficiently and profitably.
-
Monitoring and Reporting: Regularly evaluating project performance against financial models.
-
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
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
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
Name | Type | Description |
---|---|---|
args | bytes32 | Arguments 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
Name | Type | Description |
---|---|---|
args | bytes32 | Arguments for the supply function packed in one bytes32 56 bits 8 bits 32 bits 16 bits 128 bits 16 bits |
r | bytes32 | The R parameter of ERC712 permit sig |
s | bytes32 | The 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
Name | Type | Description |
---|---|---|
args | bytes32 | Arguments for the withdraw function packed in one bytes32 112 bits 128 bits 16 bits |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | The final amount withdrawn |
GreenBondV2
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;
}