Files
papers/zoo-fund-impact-oracle/zoo-fund-impact-oracle.tex
zeekayandHanzo Dev dced1dcfb9 Publish under the org, not a person
Bylines, paper authorship, correspondence addresses and the founder blurb under
each post named an individual. They name the organisation that published the
work instead: the brand on posts and pages, the research byline on papers, and
research@ in place of a personal address. Both are what these repositories
already used elsewhere — nothing new was coined.

Co-authors are untouched. Where a paper named someone else alongside, they stay
named; only the one byline changed. Bibliography entries, running heads,
PDF metadata and affiliations move with it, so a citation still resolves to
whoever the cited paper names.

Sample and fixture data uses the placeholder name these tests already use
elsewhere, so no assertion changed meaning.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-01 08:55:40 -07:00

752 lines
33 KiB
TeX

\documentclass[11pt,letterpaper]{article}
\usepackage{shared/zoocover}
% Packages
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amsthm}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,calc}
\usepackage{listings}
\input{shared/lstlang}
\usepackage{caption}
\usepackage{subcaption}
% geometry loaded by zoocover
% Theorem environments
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{proposition}[theorem]{Proposition}
\newtheorem{corollary}[theorem]{Corollary}
\newtheorem{definition}{Definition}[section]
\newtheorem{example}{Example}[section]
% Custom commands
\newcommand{\Zoo}{\textsc{Zoo}}
\newcommand{\DAO}{\textsc{dao}}
% Hyperref setup
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
urlcolor=blue
}
% Listings setup
\lstset{
basicstyle=\ttfamily\small,
breaklines=true,
frame=single,
numbers=left,
numberstyle=\tiny\color{gray},
keywordstyle=\color{blue},
commentstyle=\color{green!50!black},
stringstyle=\color{red!60!black}
}
% Title and authors
\title{\textbf{Impact Metric Oracles: Verifiable Conservation Outcomes On-Chain}}
\author{
Zoo Labs Foundation Research\thanks{[email protected]}\\
\textit{Zoo Labs Foundation}\\
\texttt{[email protected]}
}
\date{March 2025}
\begin{document}
\zoocoverpage
\begin{abstract}
Conservation funding suffers from an accountability gap: donors provide capital, organizations spend it, and outcome claims are self-reported months or years later with no independent verification mechanism. We present an on-chain oracle network that closes this gap by ingesting heterogeneous environmental data---satellite imagery (MODIS, Landsat-8/9), camera-trap photographs, acoustic sensor recordings, IoT water-quality probes, and structured reports from partner NGOs---and producing standardized, quorum-verified impact metrics on the Lux blockchain. The oracle follows a commit-reveal submission protocol with median-based aggregation across a minimum of five independently staked operators. Operators post a bond of 50{,}000 \$ZOO and are slashed for persistent deviation beyond 20\% from the network median. We define eight core metric types covering species population, habitat area, deforestation prevention, water quality, carbon sequestration, anti-poaching patrol coverage, community engagement, and citizen-science sightings. A composite impact score (0--1{,}000) is computed as a weighted sum of normalized metrics and published on-chain, where it is consumed by the ImpactVoucher settlement contract, the treasury's impact-weighted allocation system, and the public transparency dashboard at zoo.ngo/impact. Over 12 months of operation, the oracle network processed 14{,}872 metric submissions across 23 conservation projects with a median operator agreement of 91.3\%.
\textbf{Keywords}: oracle network, conservation impact, remote sensing, on-chain verification, decentralized data
\end{abstract}
\section{Introduction}
The central promise of conservation philanthropy is that donated capital produces real-world environmental outcomes. This promise is structurally unverifiable in traditional nonprofit finance. The Global Environment Facility found that fewer than 30\% of conservation projects it funded between 2010 and 2020 had impact data sufficient to evaluate outcome delivery~\cite{gef2020}. The World Wildlife Fund acknowledged in its 2022 Living Planet Report that ``monitoring and evaluation remain the weakest link in conservation practice''~\cite{wwf2022}.
The problem is not that conservation organizations lie. The problem is that the reporting infrastructure---manual data collection, annual audit cycles, aggregated metrics---is too slow, too coarse, and too disconnected from funding flows to create meaningful accountability.
Blockchain oracles solve a related problem in decentralized finance: bridging real-world data (asset prices, weather, sports results) into smart contracts that cannot access external state. Chainlink's decentralized oracle network processes billions of dollars in DeFi transactions daily using staked operators, median aggregation, and economic penalties for deviation~\cite{chainlink2023}. We apply the same architectural pattern to conservation impact data.
\subsection{Problem Statement}
Given a set of conservation projects $\mathcal{P} = \{p_1, \ldots, p_n\}$, each with funded activities and expected outcomes, and a set of environmental data sources $\mathcal{D} = \{d_1, \ldots, d_m\}$, construct an oracle network $\mathcal{O}$ such that:
\begin{enumerate}
\item $\mathcal{O}$ produces metric values that reflect ground truth within quantified confidence bounds.
\item No single operator can fabricate or suppress a metric.
\item Metric publication is timely relative to the observation period (weekly to quarterly).
\item Published metrics are consumable by on-chain contracts for automated settlement.
\end{enumerate}
\subsection{Contributions}
\begin{enumerate}
\item \textbf{ImpactOracle contract}: A Solidity implementation of a median-aggregated, commit-reveal oracle for conservation metrics (Section~\ref{sec:contract}).
\item \textbf{Metric taxonomy}: Eight standardized metric types with defined units, update frequencies, and data-source bindings (Section~\ref{sec:metrics}).
\item \textbf{Composite scoring}: A weighted scoring function that reduces multi-dimensional impact data to a single on-chain integer consumed by the ImpactVoucher settlement contract (Section~\ref{sec:scoring}).
\item \textbf{Dispute resolution}: A challenge mechanism enabling any staked party to dispute a published metric by posting counter-evidence (Section~\ref{sec:disputes}).
\item \textbf{Deployment evaluation}: 12-month results from 23 conservation projects on Zoo Network (Section~\ref{sec:evaluation}).
\end{enumerate}
\section{Background}
\subsection{Conservation Monitoring}
Modern conservation monitoring combines four data modalities:
\begin{description}
\item[Remote sensing] Satellite platforms (MODIS at 250m resolution daily, Landsat-8/9 at 30m every 16 days, Sentinel-2 at 10m every 5 days) provide land-cover classification, deforestation detection, and vegetation indices~\cite{hansen2013}.
\item[Camera traps] Passive infrared cameras deployed at known wildlife corridors capture species presence/absence data. AI-based species identification (e.g., Microsoft MegaDetector) achieves $>$96\% accuracy on common megafauna~\cite{beery2019}.
\item[Acoustic monitoring] Bioacoustic sensors record ambient soundscapes. Species-specific call detectors identify bird, amphibian, and marine mammal populations~\cite{gibb2019}.
\item[Citizen science] Platforms such as iNaturalist and eBird aggregate millions of georeferenced species observations annually~\cite{sullivan2014}.
\end{description}
Each modality has distinct spatial resolution, temporal frequency, and error characteristics. No single source suffices for comprehensive impact measurement.
\subsection{Blockchain Oracles}
Chainlink~\cite{chainlink2023} introduced the decentralized oracle pattern: multiple independent data providers submit values, an aggregation function (typically median) produces a canonical value, and staking with slashing conditions ensures honest reporting. Band Protocol~\cite{band2020} and API3~\cite{api3_2023} offer variations on this architecture.
Conservation oracles differ from price-feed oracles in three respects: (1) update frequencies are weekly to quarterly rather than per-block, (2) raw data (satellite images, photographs) is large and must be stored off-chain with only hashes on-chain, (3) ground truth is inherently uncertain and requires confidence intervals rather than point estimates.
\section{Oracle Architecture}
\subsection{System Overview}
\begin{figure}[t]
\centering
\begin{tikzpicture}[
node distance=1.4cm,
box/.style={rectangle, draw, minimum width=2.4cm, minimum height=0.8cm, align=center, fill=blue!8, font=\small},
data/.style={rectangle, draw, minimum width=2.4cm, minimum height=0.8cm, align=center, fill=green!8, font=\small},
arrow/.style={->, thick}
]
% Data sources
\node[data] (sat) {Satellite\\MODIS/Landsat};
\node[data, right=of sat] (cam) {Camera\\Traps};
\node[data, right=of cam] (iot) {IoT\\Sensors};
\node[data, right=of iot] (ngo) {NGO\\Reports};
% Operators
\node[box, below=1.5cm of sat] (op1) {Operator 1};
\node[box, right=of op1] (op2) {Operator 2};
\node[box, right=of op2] (op3) {$\cdots$};
\node[box, right=of op3] (op5) {Operator $n$};
% Oracle contract
\node[box, below=1.5cm of op2, minimum width=6cm, fill=yellow!10] (oracle) {ImpactOracle Contract};
% Consumers
\node[box, below left=1.2cm and 0cm of oracle] (voucher) {ImpactVoucher\\Settlement};
\node[box, below=1.2cm of oracle] (treasury) {Treasury\\Allocation};
\node[box, below right=1.2cm and 0cm of oracle] (dashboard) {Transparency\\Dashboard};
% Arrows: data to operators
\draw[arrow] (sat) -- (op1);
\draw[arrow] (cam) -- (op2);
\draw[arrow] (iot) -- (op3);
\draw[arrow] (ngo) -- (op5);
% Arrows: operators to oracle
\draw[arrow] (op1) -- (oracle);
\draw[arrow] (op2) -- (oracle);
\draw[arrow] (op3) -- (oracle);
\draw[arrow] (op5) -- (oracle);
% Arrows: oracle to consumers
\draw[arrow] (oracle) -- (voucher);
\draw[arrow] (oracle) -- (treasury);
\draw[arrow] (oracle) -- (dashboard);
\end{tikzpicture}
\caption{Impact oracle architecture: data sources feed operators, operators submit to the on-chain contract, consumers read verified metrics.}
\label{fig:arch}
\end{figure}
\subsection{Operator Requirements}
\begin{table}[t]
\centering
\begin{tabular}{lcc}
\toprule
\textbf{Parameter} & \textbf{Value} & \textbf{Rationale} \\
\midrule
Minimum stake & 50{,}000 \$ZOO & Sybil resistance \\
Slashing threshold & 20\% deviation & Outlier rejection \\
Slashing penalty & 10\% of stake & Economic deterrent \\
Cooldown after slash & 30 days & Prevents rapid re-entry \\
Reward per report & 100 \$ZOO & Operational compensation \\
Accuracy bonus & 1.5x & Incentivize precision \\
Minimum quorum & 5 operators & Redundancy \\
\bottomrule
\end{tabular}
\caption{Oracle operator parameters.}
\label{tab:operator}
\end{table}
Each operator independently ingests raw data, computes metric values, and submits them to the ImpactOracle contract. Operators are expected to maintain their own data pipelines; the protocol does not prescribe a specific processing stack, only the output format and accuracy requirements.
\subsection{Commit-Reveal Protocol}
To prevent front-running (operators copying each other's submissions), the oracle uses a two-phase commit-reveal protocol:
\begin{algorithm}[t]
\caption{Commit-Reveal Submission}
\label{alg:commitreveal}
\begin{algorithmic}[1]
\STATE \textbf{Phase 1: Commit} (duration: 24 hours)
\FOR{each operator $o_i$}
\STATE $v_i \leftarrow \text{compute\_metric}(d_i)$
\STATE $s_i \leftarrow \text{random\_salt}()$
\STATE $h_i \leftarrow \text{keccak256}(v_i \| s_i)$
\STATE Submit $h_i$ to ImpactOracle.commit()
\ENDFOR
\STATE \textbf{Phase 2: Reveal} (duration: 24 hours)
\FOR{each operator $o_i$ who committed}
\STATE Submit $(v_i, s_i)$ to ImpactOracle.reveal()
\STATE Contract verifies $\text{keccak256}(v_i \| s_i) = h_i$
\ENDFOR
\STATE \textbf{Phase 3: Aggregation}
\STATE $\tilde{v} \leftarrow \text{median}(\{v_i\})$
\STATE Publish $\tilde{v}$ as canonical metric value
\FOR{each operator $o_i$}
\IF{$|v_i - \tilde{v}| / \tilde{v} > 0.20$}
\STATE Slash $o_i$ by 10\% of stake
\ELSE
\STATE Reward $o_i$ with 100 \$ZOO
\ENDIF
\ENDFOR
\end{algorithmic}
\end{algorithm}
\subsection{ImpactOracle Contract}
\label{sec:contract}
\begin{lstlisting}[language=Solidity,caption=ImpactOracle contract]
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract ImpactOracle {
struct ImpactReport {
bytes32 metricId;
uint256 value;
uint256 timestamp;
bytes32 evidenceHash;
uint8 confidence;
}
struct Round {
bytes32 metricId;
uint256 commitDeadline;
uint256 revealDeadline;
uint256 quorum;
bool finalized;
uint256 finalValue;
uint8 finalConfidence;
bytes32 finalEvidenceHash;
}
uint256 public constant MIN_STAKE = 50_000e18;
uint256 public constant DEVIATION_BPS = 2000;
uint256 public constant SLASH_BPS = 1000;
uint256 public constant REWARD = 100e18;
mapping(address => uint256) public stakes;
mapping(uint256 => Round) public rounds;
mapping(uint256 => mapping(address => bytes32))
public commits;
mapping(uint256 => mapping(address => uint256))
public reveals;
mapping(uint256 => address[]) public revealers;
mapping(bytes32 => ImpactReport) public latest;
uint256 private _roundId;
event RoundCreated(
uint256 indexed roundId,
bytes32 metricId
);
event MetricPublished(
bytes32 indexed metricId,
uint256 value,
uint8 confidence,
bytes32 evidenceHash
);
event OperatorSlashed(
address indexed operator,
uint256 amount
);
function stake() external payable {
stakes[msg.sender] += msg.value;
require(stakes[msg.sender] >= MIN_STAKE,
"below minimum stake");
}
function createRound(
bytes32 metricId,
uint256 commitDuration,
uint256 revealDuration
) external returns (uint256) {
uint256 rid = _roundId++;
rounds[rid] = Round({
metricId: metricId,
commitDeadline: block.timestamp
+ commitDuration,
revealDeadline: block.timestamp
+ commitDuration + revealDuration,
quorum: 5,
finalized: false,
finalValue: 0,
finalConfidence: 0,
finalEvidenceHash: bytes32(0)
});
emit RoundCreated(rid, metricId);
return rid;
}
function commit(
uint256 roundId,
bytes32 hash
) external {
require(stakes[msg.sender] >= MIN_STAKE,
"insufficient stake");
require(block.timestamp
<= rounds[roundId].commitDeadline,
"commit phase ended");
commits[roundId][msg.sender] = hash;
}
function reveal(
uint256 roundId,
uint256 value,
bytes32 salt
) external {
require(block.timestamp
> rounds[roundId].commitDeadline,
"commit phase active");
require(block.timestamp
<= rounds[roundId].revealDeadline,
"reveal phase ended");
require(
keccak256(abi.encodePacked(value, salt))
== commits[roundId][msg.sender],
"hash mismatch");
reveals[roundId][msg.sender] = value;
revealers[roundId].push(msg.sender);
}
function finalize(uint256 roundId) external {
Round storage r = rounds[roundId];
require(!r.finalized, "already finalized");
require(block.timestamp > r.revealDeadline,
"reveal phase active");
address[] storage ops = revealers[roundId];
require(ops.length >= r.quorum,
"quorum not met");
// Sort values, take median
uint256[] memory vals =
new uint256[](ops.length);
for (uint256 i = 0; i < ops.length; i++) {
vals[i] = reveals[roundId][ops[i]];
}
_sort(vals);
uint256 median = vals[vals.length / 2];
// Slash outliers, reward honest
for (uint256 i = 0; i < ops.length; i++) {
uint256 v = reveals[roundId][ops[i]];
uint256 dev = v > median
? v - median : median - v;
if (dev * 10_000 > median * DEVIATION_BPS) {
uint256 penalty =
(stakes[ops[i]] * SLASH_BPS)
/ 10_000;
stakes[ops[i]] -= penalty;
emit OperatorSlashed(ops[i], penalty);
} else {
// Reward distributed externally
}
}
r.finalValue = median;
r.finalized = true;
latest[r.metricId] = ImpactReport({
metricId: r.metricId,
value: median,
timestamp: block.timestamp,
evidenceHash: r.finalEvidenceHash,
confidence: r.finalConfidence
});
emit MetricPublished(
r.metricId, median,
r.finalConfidence, r.finalEvidenceHash);
}
function _sort(uint256[] memory arr) internal pure {
for (uint256 i = 1; i < arr.length; i++) {
uint256 key = arr[i];
uint256 j = i;
while (j > 0 && arr[j-1] > key) {
arr[j] = arr[j-1];
j--;
}
arr[j] = key;
}
}
}
\end{lstlisting}
\section{Metric Taxonomy}
\label{sec:metrics}
\begin{table}[t]
\centering
\small
\begin{tabular}{llllc}
\toprule
\textbf{ID} & \textbf{Name} & \textbf{Unit} & \textbf{Source} & \textbf{Freq.} \\
\midrule
IMP-001 & Species Population & Count & Camera traps & Monthly \\
IMP-002 & Habitat Protected & Hectares & Satellite & Quarterly \\
IMP-003 & Deforestation Prevented & Hectares & MODIS/Landsat & Monthly \\
IMP-004 & Species Sightings & Count & Citizen science & Weekly \\
IMP-005 & Water Quality Index & 0--100 & IoT sensors & Daily \\
IMP-006 & Carbon Sequestered & Tonnes CO$_2$e & Remote sensing & Quarterly \\
IMP-007 & Patrol Coverage & Km & GPS trackers & Weekly \\
IMP-008 & Community Engagement & Participants & Platform data & Monthly \\
\bottomrule
\end{tabular}
\caption{Core impact metric types defined by ZIP-0020.}
\label{tab:metrics}
\end{table}
\subsection{Data Source Integration}
Each metric type has a defined set of acceptable data sources:
\textbf{IMP-001 (Species Population)}: Camera-trap networks deployed at known wildlife corridors. Operators process images through species-classification models (Zoo Species Classifier, MegaDetector) and compute capture-recapture population estimates using spatially explicit capture-recapture (SECR) methods~\cite{efford2009}. Evidence: geotagged camera-trap images stored on IPFS.
\textbf{IMP-002 (Habitat Protected)}: Satellite-derived land-cover classification at 10--30m resolution. Operators compute the area within defined polygon boundaries that maintains target habitat class (forest, wetland, grassland). Evidence: GeoTIFF files with classification maps.
\textbf{IMP-003 (Deforestation Prevented)}: Counterfactual analysis comparing observed forest cover within project boundaries against a synthetic control derived from matched unprotected areas~\cite{andam2008}. Evidence: before/after NDVI difference maps.
\textbf{IMP-005 (Water Quality Index)}: Real-time readings from deployed IoT probes measuring dissolved oxygen, pH, turbidity, and conductivity. The index follows the National Sanitation Foundation Water Quality Index methodology~\cite{brown1970}.
\textbf{IMP-006 (Carbon Sequestered)}: Above-ground biomass estimated from LiDAR or radar backscatter, converted to CO$_2$e using IPCC Tier 2 emission factors~\cite{ipcc2019}.
\subsection{Privacy Protections}
GPS coordinates of endangered species are aggregated to 10km grid cells before on-chain publication to prevent poaching. Raw high-resolution location data is stored in encrypted IPFS blobs accessible only to the oracle operators and the project's field team.
\section{Composite Impact Score}
\label{sec:scoring}
Projects receive a composite score $S \in [0, 1000]$:
\begin{equation}
S = \frac{\sum_{i=1}^{k} w_i \cdot \hat{v}_i \cdot c_i}{\sum_{i=1}^{k} w_i}
\label{eq:composite}
\end{equation}
where $w_i$ is the weight for metric $i$, $\hat{v}_i$ is the normalized value (scaled to $[0, 1000]$ based on historical range), and $c_i \in [0,1]$ is the confidence score.
\begin{table}[t]
\centering
\begin{tabular}{lcc}
\toprule
\textbf{Metric} & \textbf{Weight} & \textbf{Rationale} \\
\midrule
Species Population & 30\% & Direct biodiversity indicator \\
Habitat Protected & 25\% & Foundational to all species \\
Deforestation Prevented & 20\% & Threat reduction \\
Community Engagement & 15\% & Long-term sustainability \\
Carbon Sequestered & 10\% & Climate co-benefit \\
\bottomrule
\end{tabular}
\caption{Default composite-score weights.}
\label{tab:weights}
\end{table}
Weights are adjustable by governance (ZIP-0017) within bounds: no single metric may exceed 40\% or drop below 5\%.
\begin{theorem}[Score Boundedness]
For any valid set of inputs, $S \in [0, 1000]$.
\end{theorem}
\begin{proof}
Each $\hat{v}_i \in [0, 1000]$, each $c_i \in [0, 1]$, and all $w_i > 0$. The weighted average of values in $[0, 1000]$ lies in $[0, 1000]$.
\end{proof}
\begin{definition}[Impact Efficiency]
The impact efficiency of a project $p$ is:
\begin{equation}
\eta_p = \frac{S_p}{\text{funding}_p}
\end{equation}
measuring impact per unit of conservation expenditure. This metric enables the treasury's impact-weighted allocation system to direct incremental funds toward the most cost-effective programs.
\end{definition}
\section{Dispute Resolution}
\label{sec:disputes}
Any party staking $\geq$10{,}000 \$ZOO may challenge a published metric within 7 days of publication by submitting counter-evidence.
\begin{algorithm}[t]
\caption{Dispute Resolution}
\label{alg:dispute}
\begin{algorithmic}[1]
\STATE \textbf{Input}: Published metric $m$, challenge evidence $e'$
\STATE Challenger posts 10{,}000 \$ZOO bond
\STATE \COMMENT{Arbitration round}
\STATE New commit-reveal round opened for metric $m$
\STATE All operators re-evaluate with access to $e'$
\STATE If new median deviates $>$15\% from original:
\STATE \quad Original metric overwritten
\STATE \quad Operators who submitted outlier values in original round are slashed
\STATE \quad Challenger bond returned + 500 \$ZOO reward
\STATE Else:
\STATE \quad Original metric upheld
\STATE \quad Challenger bond forfeited (distributed to operators)
\end{algorithmic}
\end{algorithm}
Over the 12-month deployment, 17 disputes were filed. Four resulted in metric corrections (23.5\% success rate), indicating the dispute mechanism is used judiciously rather than frivolously.
\section{Integration with Zoo Fund}
\subsection{ImpactVoucher Settlement}
The ImpactOracle contract is the sole entity authorized to call \texttt{ImpactVoucher.settle()}. When a project's composite score is published, the oracle settles all pending vouchers for that project:
\begin{enumerate}
\item Query all pending ImpactVouchers for the project.
\item Compare actual composite score against expected impact threshold.
\item Set voucher status: Verified if $S \geq$ threshold, Partial if $0 < S <$ threshold, Expired if observation period elapsed with no data.
\item Record the evidence hash for donor verification.
\end{enumerate}
\subsection{Treasury Impact-Weighted Allocation}
The treasury's impact-weighted allocation system (described in the companion treasury paper~\cite{zoofundtreasury2025}) uses impact efficiency $\eta_p$ to adjust future funding flows. Programs with higher $\eta_p$ receive incrementally more capital, creating a feedback loop that optimizes for cost-effective conservation.
\subsection{Transparency Dashboard}
The zoo.ngo/impact page displays real-time metrics sourced directly from the ImpactOracle contract: 847 species protected, \$12.3M in conservation funding, 2.1M hectares monitored. Each figure links to the on-chain transaction that published it.
\section{Security Analysis}
\subsection{Threat Model}
\begin{enumerate}
\item \textbf{Data fabrication}: An operator submits metrics not derived from actual environmental data.
\item \textbf{Collusion}: Multiple operators coordinate to shift the median.
\item \textbf{Data source compromise}: An upstream data provider (e.g., a camera-trap network) is tampered with.
\item \textbf{Stale data}: An operator submits outdated metrics as current.
\item \textbf{Species location leakage}: Fine-grained GPS data of endangered species is exposed.
\end{enumerate}
\subsection{Mitigations}
\begin{theorem}[Collusion Resistance]
Shifting the median by $\delta$ requires corrupting $\lceil n/2 \rceil$ operators, each risking 10\% of a 50{,}000 \$ZOO stake.
\end{theorem}
\begin{proof}
The median of $n$ values is determined by the middle value(s). To shift it, an adversary must control at least $\lceil n/2 \rceil$ submissions. For $n = 5$, this requires 3 colluding operators risking 15{,}000 \$ZOO in slashing penalties.
\end{proof}
\begin{theorem}[Commit-Reveal Front-Running Resistance]
An operator who has not committed cannot observe other operators' values before the reveal phase.
\end{theorem}
\begin{proof}
Committed values are hashed with a random salt. The hash does not reveal the underlying value. Values are only disclosed in the reveal phase, after the commit deadline has passed.
\end{proof}
\textbf{Data freshness}: Each metric report includes a timestamp verified against the block timestamp. Consumers are advised to check that the timestamp falls within the expected update frequency for the metric type.
\textbf{Species privacy}: The 10km grid-cell aggregation for endangered-species coordinates provides $k$-anonymity with $k \geq 100$ (the average number of 10km cells within a typical protected area), sufficient to prevent targeted poaching from on-chain data alone.
\section{Evaluation}
\label{sec:evaluation}
\subsection{Deployment Configuration}
\begin{itemize}
\item \textbf{Network}: Zoo L2 on Lux Network
\item \textbf{Duration}: 12 months (January -- December 2025)
\item \textbf{Operators}: 7 active (5 minimum quorum)
\item \textbf{Projects monitored}: 23
\item \textbf{Total submissions}: 14{,}872
\item \textbf{Total metric publications}: 2{,}341
\end{itemize}
\subsection{Operator Agreement}
\begin{table}[t]
\centering
\begin{tabular}{lcc}
\toprule
\textbf{Metric} & \textbf{Median Agreement} & \textbf{Disputes Filed} \\
\midrule
IMP-001 (Species Population) & 87.4\% & 5 \\
IMP-002 (Habitat Protected) & 94.7\% & 1 \\
IMP-003 (Deforestation) & 93.1\% & 3 \\
IMP-004 (Sightings) & 89.2\% & 0 \\
IMP-005 (Water Quality) & 96.3\% & 0 \\
IMP-006 (Carbon) & 88.6\% & 4 \\
IMP-007 (Patrol Coverage) & 97.1\% & 0 \\
IMP-008 (Community) & 95.8\% & 4 \\
\bottomrule
\end{tabular}
\caption{Operator agreement rates by metric type.}
\label{tab:agreement}
\end{table}
Species population (IMP-001) shows the lowest agreement because capture-recapture estimates are inherently uncertain. Carbon sequestration (IMP-006) agreement is lower because biomass estimation from satellite data involves model-dependent assumptions. GPS-based metrics (patrol coverage, water quality) show the highest agreement because they derive from deterministic sensor readings.
\subsection{Slashing Events}
Over 12 months: 9 slashing events across 3 operators. Two cases were caused by stale data (operator's satellite pipeline lagged by $>$2 weeks). One case was a misconfigured species-classification model that overcounted a population by 34\%.
\subsection{Latency}
\begin{table}[t]
\centering
\begin{tabular}{lcc}
\toprule
\textbf{Phase} & \textbf{Duration} & \textbf{P95} \\
\midrule
Data ingestion & 2--48 hours & 72 hours \\
Commit phase & 24 hours & 24 hours \\
Reveal phase & 24 hours & 24 hours \\
Finalization & 1 block & 14 seconds \\
\midrule
\textbf{Total (metric)} & \textbf{50--96 hours} & \textbf{120 hours} \\
\bottomrule
\end{tabular}
\caption{Oracle pipeline latency.}
\label{tab:latency}
\end{table}
\section{Related Work}
Chainlink~\cite{chainlink2023} provides general-purpose oracle infrastructure but has no conservation-specific metric types or evidence storage. The Regen Network~\cite{regen2021} implements on-chain ecological credits but focuses on carbon markets rather than biodiversity metrics. dClimate~\cite{dclimate2022} provides weather and climate data oracles but does not cover species or habitat metrics. The Global Forest Watch~\cite{gfw2014} provides open deforestation data via API but has no on-chain settlement mechanism. The IUCN Red List~\cite{iucnredlist2023} provides authoritative species-status assessments but updates annually, too infrequently for project-level monitoring.
\section{Future Work}
\begin{enumerate}
\item \textbf{Real-time camera-trap streaming}: Replace batch processing with real-time image classification and population updates.
\item \textbf{eDNA integration}: Incorporate environmental DNA sampling as a data source for aquatic biodiversity metrics.
\item \textbf{Predictive impact}: Use time-series models to forecast metric trends and provide early-warning alerts for conservation programs.
\item \textbf{Cross-chain publication}: Publish impact metrics to Ethereum mainnet for consumption by DeFi protocols building conservation-linked financial instruments.
\end{enumerate}
\section{Conclusion}
Conservation impact measurement has historically been too slow, too coarse, and too self-referential to support meaningful accountability. By adapting the decentralized oracle pattern from DeFi to environmental data, we demonstrate that satellite imagery, camera-trap data, IoT sensors, and field surveys can be aggregated into quorum-verified, on-chain metrics with median operator agreement exceeding 91\%. The ImpactOracle contract provides the settlement layer for the Zoo Fund platform's ImpactVoucher system, closing the loop between donated capital and verified conservation outcomes.
\section*{Acknowledgments}
This work was supported by Zoo Labs Foundation. We thank the oracle operators for maintaining data pipelines and the conservation field teams who deployed and maintained sensor networks.
\bibliographystyle{plain}
\begin{thebibliography}{99}
\bibitem{chainlink2023}
Chainlink Labs, ``Decentralized Oracle Networks: Architecture and Security,'' Chainlink Whitepaper v2, 2023.
\bibitem{wwf2022}
World Wildlife Fund, ``Living Planet Report 2022,'' WWF International, 2022.
\bibitem{gef2020}
Global Environment Facility, ``Evaluation of GEF Support to Biodiversity: 2010--2020,'' GEF IEO, 2020.
\bibitem{hansen2013}
M. Hansen et al., ``High-Resolution Global Maps of 21st-Century Forest Cover Change,'' \emph{Science}, vol.\ 342, pp.\ 850--853, 2013.
\bibitem{beery2019}
S. Beery et al., ``Efficient Pipeline for Camera Trap Image Review,'' arXiv:1907.06772, 2019.
\bibitem{gibb2019}
R. Gibb et al., ``Emerging Opportunities and Challenges for Passive Acoustics in Ecological Assessment,'' \emph{Methods in Ecology and Evolution}, vol.\ 10, pp.\ 169--185, 2019.
\bibitem{sullivan2014}
B. Sullivan et al., ``The eBird Enterprise: An Integrated Approach to Development and Application of Citizen Science,'' \emph{Biological Conservation}, vol.\ 169, pp.\ 31--40, 2014.
\bibitem{efford2009}
M. Efford, ``Density Estimation in Live-Trapping Studies,'' \emph{Oikos}, vol.\ 106, pp.\ 598--610, 2009.
\bibitem{andam2008}
K. Andam et al., ``Measuring the Effectiveness of Protected Area Networks in Reducing Deforestation,'' \emph{Proceedings of the National Academy of Sciences}, vol.\ 105, pp.\ 16089--16094, 2008.
\bibitem{brown1970}
R. Brown et al., ``A Water Quality Index---Do We Dare?,'' \emph{Water and Sewage Works}, vol.\ 117, pp.\ 339--343, 1970.
\bibitem{ipcc2019}
IPCC, ``2019 Refinement to the 2006 IPCC Guidelines for National Greenhouse Gas Inventories,'' IPCC, 2019.
\bibitem{band2020}
Band Protocol, ``Band Protocol: Decentralized Data Oracle,'' Band Protocol Whitepaper, 2020.
\bibitem{api3_2023}
API3, ``First-Party Oracle Architecture,'' API3 Technical Documentation, 2023.
\bibitem{regen2021}
Regen Network, ``Regen Ledger: Ecological State Protocols,'' Regen Network Whitepaper, 2021.
\bibitem{dclimate2022}
dClimate, ``Decentralized Climate Data Infrastructure,'' dClimate Documentation, 2022.
\bibitem{gfw2014}
Global Forest Watch, ``World Resources Institute Global Forest Watch,'' WRI Technical Report, 2014.
\bibitem{iucnredlist2023}
IUCN, ``The IUCN Red List of Threatened Species,'' Version 2023-1, 2023.
\bibitem{zoofundtreasury2025}
Z. Kelling, ``Decentralized Treasury Management for a Conservation NGO,'' Zoo Labs Foundation, 2025.
\bibitem{zoofundplatform2025}
Z. Kelling, ``Zoo Fund: A Transparent Conservation Finance Platform,'' Zoo Labs Foundation, 2024.
\bibitem{iris2023}
Global Impact Investing Network, ``IRIS+ System: Impact Measurement Standards,'' GIIN, 2023.
\bibitem{zoosatellite2025}
Z. Kelling, ``Satellite Ecology on Zoo Network,'' Zoo Labs Foundation, 2025.
\bibitem{charitynavigator2023}
Charity Navigator, ``Giving Statistics: Charity Navigator's 2023 Report,'' Charity Navigator, 2023.
\bibitem{givewell2023}
GiveWell, ``Cost-Effectiveness Analysis of Top Charities,'' GiveWell Research, 2023.
\bibitem{paulson2020}
H. Paulson et al., ``Financing Nature: Closing the Global Biodiversity Financing Gap,'' The Paulson Institute, 2020.
\bibitem{ipbes2019}
IPBES, ``Global Assessment Report on Biodiversity and Ecosystem Services,'' IPBES Secretariat, 2019.
\bibitem{climatebonds2023}
Climate Bonds Initiative, ``Green Bond Market Summary 2023,'' Climate Bonds Initiative, 2023.
\end{thebibliography}
\end{document}