Inspiration for Rainforest Proof-Of-Conservation Token Project

The existence of all life on earth depends on the rainforests sheltering vast amounts of biodiversity and enriching the atmosphere with oxygen. Securing and conserving the Earth's rainforests is therefore a goal of crucial importance for humankind.

Yet, incentives for the destruction and unsustainable exploitation of rainforests outweigh the rewards for their conservation. Existing conservation incentives, like e.g. carbon certificates, leverage trusted intermediaries and centralized authorities; inefficiency, intransparancy, failure, and tremendous trust issues ensued.

RaCoTo, the Rainforest Proof-Of-Conservation Token Project, aims to sustainably incentivize rainforest conservation with a transparent, disintermediate protocol that rewards rainforest owners for conserving their forest with tokens that are backed by publicly auditable and tamper-proof satellite image analysis data.

What RaCoTo does

RaCoTo aims to establish a trustless protocol for securing rainforests with token incentives through its key features, the Proof-Of-Conservation and Proof-Of-Ownership processes.

Proof-Of-Conservation obtains real-time satellite tracking data to proof rainforest conservation verified across multiple independent sources and delivered on-chain via Chainlink Functions.

Proof-Of-Ownership is a due-diligence vetting that verifies the ownership of the rainforest registered with RaCoTo and vets for registrations for double counting of carbon sequestration or irregularities with ownership documentation.

The RaCoTo dApp prototype is deployed on Polygon's Mumbai testnet. Eventually, Rainforest owners that wish to earn rewards for the conservtion of the forest they own could use a live RaCoTo dApp frontend for this purpose. The user flow follows the following simple steps:

How we built RaCoTo

To clearly underpin the progress made in the present Constellation Hackathon, we set out by first describing the key features and shortcomings of our RaCoTo prototype in the Chainlink Spring '23 Hackathon.

The Beginnings - Chainlink Spring 23 Hackathon

A first RaCoTo prototype was created in the Chainlink Spring 23 Hackathon. This prototype used a Chainlink Functions request to obtain the estimate the sequestered carbon dioxide, R, from a user-registered area of rainforest.

In this first prototype, R was approximated by

R = R_a / t

where R_a is the average annual CO2 sequestration rate observed in the years 2001-2021 obtained from the GlobalForestWatch API (see this paper for details) and t represents the time that has passed since the last user request.

After a successful request, the dApp would mint one token for each ton of absorbed CO2 and make that available for the user to claim.

The key pitfalls with this approach are that it lacks close-to-real-time data and is based on a single data origin. Moreover, the prototype UX was clunky, as the users were required to request and claim their rewards.

Minimizing Trust Assumptions - Chainlink Constellation Hackathon 23

In the course of the Chainlink Constellation 23 Hackathon, we aimed at a RaCoTo prototype with improved security and trust-minimization and a better UX. To achieve the improved UX, we planned to automate the satellite image analysis Chainlink Functions requests and trigger incentive payouts in regular intevals. We didn't manage to finalize this latter goal in time for the present submission, but - as described in the following - we were able to make significant progress on the security and trust-minimization goals for the data origination.

Improved tracking data accuracy

Using integrated deforestation alerts in close to real time the accuracy and reliability of the estimate for the sequestered amount of CO2 was drastically improved and now reads

R = ( R_a / t) (1 - D/A),

where R_a represents the average annual carbon sequestration rate 2001-2022, t is the time since the last user request, D is the area for which deforestation alerts were observed, and A is the area covered by rainforest. The typical refresh rate for the deforestation alert data and D is once to twice per week. All quantities in the above estimate R are obtained through Chainlink Functions requests against the GlobalForestWatch API, see details here.

Improved tracking data verification

To trust-minimze the Proof-Of-Conservation, the GlobalForestWatch-based estimate for R needs to be verified against an independent alternate data source. This is performed by computing the CO2 sequestration potential of the regestired rainforest from data obtained through a Chainlink Functions request against the SentinelHub statistical API. An upper bound (x=u) or lower bound (x=l) for the CO2 sequestration R_x in a time interval t is obtained as follows:

R_x = C_x A_F t,

where C_u and C_l are estimates for the lower and upper bound of the annual CO2 sequestration of primary rainforests, t is the time since the last user request and A_F is the actually observed area of primary rainforest. This area, A_F, is obtained by analyzing the multispectral features of Sentinel-2 images for the normalized differenced vegetation index (NDVI), e.g. here. Areas with an NDVI larger than 0.6 are classified as rainforest and areas with water are excluded, while we make sure that our analysis computationally replaces areas obfuscated by clouds with the most recent available images without clouds. We chose C_l = 50.000kg and C_u = 300.000kg for the confidence interval [C_l, C_u] of the net carbon sequestration potential of primary rainforest in our Chainlink Functions request to obtain R_l,R_u. Unfortunately, we did not manage to finalize the integration of this request with RaCoTo dApp within the Constellation Hackathon, but we came quite close to the solution, see JS here and Functions here.

Eventually, the RaCoTo app will dispense token rewards only if the amount of absorbed CO2 estimated via the GlobalForestWatch data, R, lies within the confidence interval [R_l,R_u] estimated from the SentinelHub data.

Tech Stack

Backend & Frontend

  • NodeJS
  • TypeScript
  • MongoDB
  • NextJS

Smart Contracts

  • Solidity
  • Chainlink Functions
  • Hardhat

Services / Tooling

Challenges we ran into

  • our goals were too ambitious to do the integration of the developed backend features with our frontend
  • OAuth and POST requests with Chainlink Functions were tough to debug and were the reason we couldn't finalize the second satellite tracking data origin (SentinelHub) on-chain integration

Accomplishments that we're proud of

  • improved accuracy of the estimated amount of rainforest carbon dioxide absorption by the integration of deforestation alerts into the Chainlink Functions request to GlobalForestWatch, see transaction here https://github.com/Rainforest-Conservation-Tokens/RaCoTo-Backend/blob/main/Test.md
  • verification of carbon sequestration amount through a request for data from an independent alternative data source, SentinelHub (see JS here and Functions prototype here
  • conceptualized improvement of user experience by using Chainlink Automation to regularly trigger data origination and rewards payout
  • prospect user contacts with the potential to secure an annual negative CO2 net flux of about 500 kilotons by conserving the 5000 km² of rainforest they own.

What we learned

  • Trustless satellite data origination for dApps is tough, but worth going the extra mile
  • Chainlink Functions sandboxes and vanilla JS have appreciable differences

What's next for the Rainforest Proof-Of-Conservation Project

  • Improvement and optimization of our data origination procedure
  • Trust-minimization through yet more satellite data sources for Proof-Of-Conservation (finalize and integrate SentinelHub functions request and Ice Eye)
  • Building data ecosystem with independent third-party data sources for a trust minimization in the Proof-Of-Ownership process
  • Completing the light and white paper
  • Token registration with authorities
  • Security audit and improvement/refactoring of backend
  • Deployment on a mainnet and start of user onboarding

The RaCoTo Team thus far

  • Dr. Lode, AUJ (Germany), hybrid smart contracts / data origination
  • Dipl.-Biol. Schinko, APB (Switzerland), biologist / rainforest / operations
  • Jangra, A (India), solidity / backend
  • Singhal, P (India), frontend / integration
  • Agrawal, Y (India), hybrid smart contracts / Chainlink functions
Share this project:

Updates