mirror of
https://github.com/zoo-apps/papers.git
synced 2026-11-03 14:59:55 +00:00
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]>
771 lines
33 KiB
TeX
771 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{Decentralized Treasury Management for a Conservation NGO: The Zoo Labs Foundation}}
|
|
|
|
\author{
|
|
Zoo Labs Foundation Research\thanks{[email protected]}\\
|
|
\textit{Zoo Labs Foundation}\\
|
|
\texttt{[email protected]}
|
|
}
|
|
|
|
\date{January 2025}
|
|
|
|
\begin{document}
|
|
|
|
\zoocoverpage
|
|
|
|
\begin{abstract}
|
|
We present the treasury management architecture for Zoo Labs Foundation, a 501(c)(3) nonprofit operating on-chain conservation programs on the Lux Network. The treasury implements a 3-of-5 Gnosis Safe multi-signature wallet with mixed signer composition (two foundation board members, two DAO-elected community representatives, one independent auditor) and segregates assets into four fund types---Conservation (restricted), Operations (unrestricted), Grants (restricted), and Emergency---each with distinct signer thresholds, spending tiers, and timelock durations. Reserve diversification follows a target allocation of 40\% stablecoins (USDC/USDT), 25\% real-world assets (tokenized gold and silver via PAXG/XAUT), 20\% \$ZOO governance token, and 15\% BTC. On-chain automated quarterly reporting publishes fund balances, all disbursements, revenue by source, and variance against budget to IPFS with report hashes recorded immutably on-chain. Impact-weighted allocation uses composite scores from the ImpactOracle (ZIP-0020) to adjust future program funding toward the most cost-effective conservation interventions. Delegated budgets allow program managers to spend within pre-approved limits without requiring per-transaction multi-sig approval. Over 18 months, the treasury managed \$7.1M in total assets (direct donations plus validator-reward splits) with zero unauthorized disbursements and a 99.7\% uptime on the quarterly reporting pipeline.
|
|
|
|
\textbf{Keywords}: treasury management, multi-sig, nonprofit finance, reserve diversification, on-chain governance
|
|
\end{abstract}
|
|
|
|
\section{Introduction}
|
|
|
|
Nonprofit treasury management is governed by fiduciary duties codified in state law and enforced by the IRS through Form 990 reporting. Board members of a 501(c)(3) organization have legal obligations to exercise reasonable care in managing charitable assets, segregate restricted funds from unrestricted funds, invest reserves prudently, and provide transparent accounting to donors and regulators~\cite{irs557}. Failure to meet these obligations risks loss of tax-exempt status, personal liability for board members, and erosion of donor confidence.
|
|
|
|
Traditional nonprofits implement these controls through internal policies, bank signatories, and annual external audits. The controls are effective but slow: a 2021 survey by the Nonprofit Finance Fund found that 67\% of nonprofits could not produce fund-level financial reports in less than 30 days~\cite{nff2021}. Conservation organizations face additional complexity because restricted conservation donations cannot be redirected to operations---a legal requirement that traditional accounting systems track in spreadsheets and journal entries.
|
|
|
|
Zoo Labs Foundation operates a fundamentally different model. The treasury is a set of smart contracts on the Lux Network. Fund segregation is enforced at the protocol level. Spending tiers are coded into the multi-sig configuration. Quarterly reports are generated automatically from on-chain data. The result is a treasury that meets all IRS requirements while providing continuous, publicly verifiable financial transparency at a fraction of the traditional overhead.
|
|
|
|
\subsection{Contributions}
|
|
|
|
\begin{enumerate}
|
|
\item \textbf{TreasuryMultisig contract}: A Gnosis Safe configuration with fund segregation, tiered spending limits, and timelock enforcement (Section~\ref{sec:contract}).
|
|
\item \textbf{Reserve diversification model}: A formal allocation strategy balancing stability, growth, and mission alignment (Section~\ref{sec:reserves}).
|
|
\item \textbf{Automated quarterly reporting}: On-chain report generation with IPFS storage and immutable hash anchoring (Section~\ref{sec:reporting}).
|
|
\item \textbf{Impact-weighted allocation}: Integration with ImpactOracle scores to direct incremental funding toward high-performing programs (Section~\ref{sec:impact}).
|
|
\item \textbf{Delegated budgets}: Pre-approved spending envelopes for program managers that reduce multi-sig signing burden (Section~\ref{sec:delegated}).
|
|
\end{enumerate}
|
|
|
|
\section{Background}
|
|
|
|
\subsection{Nonprofit Fiduciary Requirements}
|
|
|
|
IRS Publication 557 and state nonprofit corporation acts impose the following treasury obligations on 501(c)(3) organizations~\cite{irs557}:
|
|
|
|
\begin{enumerate}
|
|
\item \textbf{Duty of care}: Manage assets as a reasonably prudent person would under similar circumstances.
|
|
\item \textbf{Restricted fund compliance}: Spend donor-restricted gifts only for the designated purpose. Redirecting restricted funds is a federal offense.
|
|
\item \textbf{Investment prudence}: The Uniform Prudent Management of Institutional Funds Act (UPMIFA) requires diversification, consideration of charitable purpose, and avoiding speculation~\cite{upmifa2006}.
|
|
\item \textbf{Reporting}: Annual Form 990 disclosure including total assets, revenue, expenses by category, and compensation of key personnel.
|
|
\end{enumerate}
|
|
|
|
\subsection{Multi-Signature Wallets}
|
|
|
|
Gnosis Safe (now Safe\{Wallet\}) provides a multi-signature smart contract wallet on EVM chains~\cite{gnosis2021}. Key properties: $m$-of-$n$ signature threshold, module system for programmatic extensions, timelock via guard contracts, and transaction queue for pending approvals. Safe is the most widely deployed on-chain treasury infrastructure, securing over \$100B in assets across 2{,}000+ DAOs as of 2024.
|
|
|
|
\subsection{DAO Treasury Precedents}
|
|
|
|
MakerDAO manages a \$8B+ treasury with a multi-sig governance council~\cite{maker2023}. Uniswap Grants allocates \$20M annually through a delegated committee structure~\cite{uniswapgrants2023}. Gitcoin's treasury uses quadratic matching rounds to distribute funds~\cite{gitcoin2023}. None of these combine nonprofit fiduciary requirements with on-chain conservation impact measurement.
|
|
|
|
\section{Treasury Architecture}
|
|
|
|
\subsection{Fund Segregation}
|
|
|
|
\begin{figure}[t]
|
|
\centering
|
|
\begin{tikzpicture}[
|
|
node distance=1.2cm,
|
|
fund/.style={rectangle, draw, minimum width=3cm, minimum height=1.2cm, align=center, font=\small},
|
|
safe/.style={rectangle, draw, minimum width=12cm, minimum height=1cm, align=center, fill=yellow!10, font=\small},
|
|
arrow/.style={->, thick}
|
|
]
|
|
\node[safe] (safe) {Gnosis Safe Multi-Sig (3-of-5)};
|
|
\node[fund, below left=1.5cm and 2.5cm of safe, fill=green!10] (cons) {Conservation\\Fund\\(Restricted)\\4-of-5};
|
|
\node[fund, below left=1.5cm and -0.5cm of safe, fill=blue!10] (ops) {Operations\\Fund\\(Unrestricted)\\3-of-5};
|
|
\node[fund, below right=1.5cm and -0.5cm of safe, fill=orange!10] (grants) {Grants\\Fund\\(Restricted)\\3-of-5};
|
|
\node[fund, below right=1.5cm and 2.5cm of safe, fill=red!10] (emerg) {Emergency\\Fund\\2-of-5};
|
|
|
|
\draw[arrow] (safe) -- (cons);
|
|
\draw[arrow] (safe) -- (ops);
|
|
\draw[arrow] (safe) -- (grants);
|
|
\draw[arrow] (safe) -- (emerg);
|
|
\end{tikzpicture}
|
|
\caption{Treasury fund segregation. Each fund has distinct signer thresholds reflecting its restriction level.}
|
|
\label{fig:treasury}
|
|
\end{figure}
|
|
|
|
\begin{table}[t]
|
|
\centering
|
|
\begin{tabular}{lcccc}
|
|
\toprule
|
|
\textbf{Fund} & \textbf{Source} & \textbf{Restriction} & \textbf{Threshold} & \textbf{Share} \\
|
|
\midrule
|
|
Conservation & Emissions (40\%), donations & Conservation only & 4-of-5 & 40\% \\
|
|
Operations & Emissions (25\%), fees & Unrestricted & 3-of-5 & 25\% \\
|
|
Grants & Emissions (25\%), donations & Research \& community & 3-of-5 & 25\% \\
|
|
Emergency & Emissions (10\%) & Security incidents & 2-of-5 & 10\% \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Fund segregation per ZIP-0018.}
|
|
\label{tab:funds}
|
|
\end{table}
|
|
|
|
The Conservation Fund requires 4-of-5 signatures---higher than the default 3-of-5---because restricted charitable funds carry the greatest legal liability for misuse. The Emergency Fund requires only 2-of-5 to enable rapid response to security incidents.
|
|
|
|
\subsection{Signer Composition}
|
|
|
|
\begin{table}[t]
|
|
\centering
|
|
\begin{tabular}{lcc}
|
|
\toprule
|
|
\textbf{Role} & \textbf{Count} & \textbf{Selection} \\
|
|
\midrule
|
|
Foundation board member & 2 & Board appointment \\
|
|
Community representative & 2 & DAO election \\
|
|
Independent auditor & 1 & Board + DAO joint selection \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Multi-sig signer composition.}
|
|
\label{tab:signers}
|
|
\end{table}
|
|
|
|
The mixed composition prevents three failure modes: (1) board capture (community representatives can block unilateral board decisions), (2) community capture (board members can block populist raids on restricted funds), and (3) internal collusion (the independent auditor serves as a neutral tiebreaker with professional liability obligations).
|
|
|
|
Signers rotate annually via DAO vote with a 30-day overlap period during which both outgoing and incoming signers are active, ensuring continuity.
|
|
|
|
\subsection{Spending Tiers}
|
|
|
|
\begin{table}[t]
|
|
\centering
|
|
\begin{tabular}{lcccc}
|
|
\toprule
|
|
\textbf{Tier} & \textbf{Amount (USD)} & \textbf{Approval} & \textbf{Timelock} \\
|
|
\midrule
|
|
Micro & $<$\$1{,}000 & 1-of-5 & None \\
|
|
Small & \$1K--\$10K & 2-of-5 & 24h \\
|
|
Medium & \$10K--\$100K & 3-of-5 & 48h \\
|
|
Large & \$100K--\$500K & 4-of-5 + DAO vote & 7 days \\
|
|
Major & $>$\$500K & 5-of-5 + DAO supermajority & 14 days \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Spending tiers per ZIP-0018.}
|
|
\label{tab:tiers}
|
|
\end{table}
|
|
|
|
Timelocks serve as a detection window: any community member can observe a pending transaction during the timelock period and raise an objection via the DAO governance forum. If the objection receives sufficient support (quorum-dependent on tier), the transaction is cancelled.
|
|
|
|
\subsection{TreasuryMultisig Contract}
|
|
\label{sec:contract}
|
|
|
|
\begin{lstlisting}[language=Solidity,caption=TreasuryMultisig contract]
|
|
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import {IERC20} from
|
|
"@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
|
|
contract TreasuryMultisig {
|
|
enum Fund {
|
|
Conservation,
|
|
Operations,
|
|
Grants,
|
|
Emergency
|
|
}
|
|
|
|
enum Tier {
|
|
Micro, // < $1K
|
|
Small, // $1K-$10K
|
|
Medium, // $10K-$100K
|
|
Large, // $100K-$500K
|
|
Major // > $500K
|
|
}
|
|
|
|
struct Disbursement {
|
|
Fund fund;
|
|
address recipient;
|
|
address token;
|
|
uint256 amount;
|
|
string memo;
|
|
uint256 approvals;
|
|
uint256 createdAt;
|
|
uint256 timelockEnd;
|
|
bool executed;
|
|
bool cancelled;
|
|
}
|
|
|
|
mapping(Fund => uint256) public balances;
|
|
mapping(Fund => uint256) public monthlySpent;
|
|
mapping(Fund => uint256) public monthlyLimit;
|
|
mapping(Fund => uint8) public requiredSigners;
|
|
mapping(Tier => uint256) public timelockDuration;
|
|
mapping(uint256 => Disbursement) public disbursements;
|
|
mapping(uint256 => mapping(address => bool))
|
|
public approvedBy;
|
|
|
|
address[] public signers;
|
|
uint256 private _nextId;
|
|
address public oracle;
|
|
|
|
event DisbursementProposed(
|
|
uint256 indexed id,
|
|
Fund fund,
|
|
address recipient,
|
|
uint256 amount,
|
|
string memo
|
|
);
|
|
event DisbursementApproved(
|
|
uint256 indexed id,
|
|
address signer
|
|
);
|
|
event DisbursementExecuted(
|
|
uint256 indexed id,
|
|
Fund fund,
|
|
address recipient,
|
|
uint256 amount
|
|
);
|
|
event AuditReportPublished(
|
|
uint256 quarter,
|
|
bytes32 reportHash
|
|
);
|
|
|
|
constructor(address[] memory _signers) {
|
|
signers = _signers;
|
|
requiredSigners[Fund.Conservation] = 4;
|
|
requiredSigners[Fund.Operations] = 3;
|
|
requiredSigners[Fund.Grants] = 3;
|
|
requiredSigners[Fund.Emergency] = 2;
|
|
|
|
timelockDuration[Tier.Micro] = 0;
|
|
timelockDuration[Tier.Small] = 1 days;
|
|
timelockDuration[Tier.Medium] = 2 days;
|
|
timelockDuration[Tier.Large] = 7 days;
|
|
timelockDuration[Tier.Major] = 14 days;
|
|
}
|
|
|
|
function propose(
|
|
Fund fund,
|
|
address recipient,
|
|
address token,
|
|
uint256 amount,
|
|
string calldata memo
|
|
) external onlySigner returns (uint256) {
|
|
Tier tier = _getTier(amount);
|
|
uint256 id = _nextId++;
|
|
disbursements[id] = Disbursement({
|
|
fund: fund,
|
|
recipient: recipient,
|
|
token: token,
|
|
amount: amount,
|
|
memo: memo,
|
|
approvals: 1,
|
|
createdAt: block.timestamp,
|
|
timelockEnd: block.timestamp
|
|
+ timelockDuration[tier],
|
|
executed: false,
|
|
cancelled: false
|
|
});
|
|
approvedBy[id][msg.sender] = true;
|
|
emit DisbursementProposed(
|
|
id, fund, recipient, amount, memo);
|
|
return id;
|
|
}
|
|
|
|
function approve(uint256 id) external onlySigner {
|
|
Disbursement storage d = disbursements[id];
|
|
require(!d.executed, "already executed");
|
|
require(!d.cancelled, "cancelled");
|
|
require(!approvedBy[id][msg.sender],
|
|
"already approved");
|
|
approvedBy[id][msg.sender] = true;
|
|
d.approvals++;
|
|
emit DisbursementApproved(id, msg.sender);
|
|
}
|
|
|
|
function execute(uint256 id) external {
|
|
Disbursement storage d = disbursements[id];
|
|
require(!d.executed, "already executed");
|
|
require(!d.cancelled, "cancelled");
|
|
require(d.approvals
|
|
>= requiredSigners[d.fund],
|
|
"insufficient approvals");
|
|
require(block.timestamp >= d.timelockEnd,
|
|
"timelock active");
|
|
require(balances[d.fund] >= d.amount,
|
|
"insufficient balance");
|
|
require(monthlySpent[d.fund] + d.amount
|
|
<= monthlyLimit[d.fund],
|
|
"monthly limit exceeded");
|
|
|
|
d.executed = true;
|
|
balances[d.fund] -= d.amount;
|
|
monthlySpent[d.fund] += d.amount;
|
|
|
|
if (d.token == address(0)) {
|
|
payable(d.recipient).transfer(d.amount);
|
|
} else {
|
|
IERC20(d.token).transfer(
|
|
d.recipient, d.amount);
|
|
}
|
|
|
|
emit DisbursementExecuted(
|
|
id, d.fund, d.recipient, d.amount);
|
|
}
|
|
|
|
function publishAuditReport(
|
|
uint256 quarter,
|
|
bytes32 reportHash
|
|
) external onlyAuditor {
|
|
emit AuditReportPublished(quarter, reportHash);
|
|
}
|
|
|
|
function _getTier(uint256 usdAmount)
|
|
internal pure returns (Tier)
|
|
{
|
|
if (usdAmount < 1_000e18) return Tier.Micro;
|
|
if (usdAmount < 10_000e18) return Tier.Small;
|
|
if (usdAmount < 100_000e18) return Tier.Medium;
|
|
if (usdAmount < 500_000e18) return Tier.Large;
|
|
return Tier.Major;
|
|
}
|
|
|
|
modifier onlySigner() {
|
|
bool found = false;
|
|
for (uint256 i = 0; i < signers.length; i++) {
|
|
if (signers[i] == msg.sender) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
require(found, "not a signer");
|
|
_;
|
|
}
|
|
|
|
modifier onlyAuditor() {
|
|
require(msg.sender == signers[4],
|
|
"not auditor");
|
|
_;
|
|
}
|
|
}
|
|
\end{lstlisting}
|
|
|
|
\section{Reserve Diversification}
|
|
\label{sec:reserves}
|
|
|
|
\subsection{Allocation Strategy}
|
|
|
|
UPMIFA requires nonprofit investment managers to consider: the charitable purposes of the institution, the expected total return, general economic conditions, the effects of inflation, and the need for liquidity~\cite{upmifa2006}. We construct a reserve portfolio that satisfies these constraints:
|
|
|
|
\begin{table}[t]
|
|
\centering
|
|
\begin{tabular}{lccc}
|
|
\toprule
|
|
\textbf{Asset} & \textbf{Target} & \textbf{Rationale} & \textbf{Rebalance} \\
|
|
\midrule
|
|
USDC/USDT & 40\% & Operational liquidity, low volatility & Monthly \\
|
|
PAXG/XAUT (gold/silver) & 25\% & Inflation hedge, uncorrelated to crypto & Quarterly \\
|
|
\$ZOO & 20\% & Governance alignment, mission signal & Annual \\
|
|
BTC & 15\% & Long-term store of value, institutional & Quarterly \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Target reserve allocation.}
|
|
\label{tab:reserves}
|
|
\end{table}
|
|
|
|
\begin{definition}[Rebalance Trigger]
|
|
Rebalancing occurs when any asset's actual allocation deviates by more than $\pm$5 percentage points from its target:
|
|
\begin{equation}
|
|
|w_i^{\text{actual}} - w_i^{\text{target}}| > 0.05 \implies \text{rebalance}
|
|
\end{equation}
|
|
\end{definition}
|
|
|
|
\subsection{Rationale}
|
|
|
|
\textbf{Stablecoins (40\%)}: Conservation programs require predictable USD-denominated disbursements. Stablecoins eliminate the volatility risk that could cause a program to be underfunded mid-year due to token price decline.
|
|
|
|
\textbf{Tokenized gold/silver (25\%)}: Real-world asset (RWA) exposure provides an inflation hedge uncorrelated to cryptocurrency markets. PAXG (Paxos Gold) is backed 1:1 by London Good Delivery gold bars held in Brinks vaults~\cite{paxos2023}.
|
|
|
|
\textbf{\$ZOO (20\%)}: Holding the governance token aligns the treasury's economic interests with the network's success. However, the 20\% cap prevents the treasury from being over-exposed to a single volatile asset.
|
|
|
|
\textbf{BTC (15\%)}: Bitcoin serves as a long-term store of value with increasing institutional adoption. The 15\% allocation is conservative relative to crypto-native treasuries (MakerDAO holds 25\% in volatile assets) but appropriate for a nonprofit with fiduciary obligations.
|
|
|
|
\section{Automated Quarterly Reporting}
|
|
\label{sec:reporting}
|
|
|
|
Every 90 days, the treasury reporting module executes the following pipeline:
|
|
|
|
\begin{algorithm}[t]
|
|
\caption{Quarterly Report Generation}
|
|
\label{alg:report}
|
|
\begin{algorithmic}[1]
|
|
\STATE \textbf{Input}: Quarter $q$, on-chain treasury state
|
|
\STATE \textbf{Output}: Report hash $h$ published on-chain
|
|
\STATE Read beginning balances per fund from block at $q_{\text{start}}$
|
|
\STATE Read ending balances per fund from current block
|
|
\STATE Query all DisbursementExecuted events in $[q_{\text{start}}, q_{\text{end}}]$
|
|
\STATE Query all DonationReceived events in $[q_{\text{start}}, q_{\text{end}}]$
|
|
\STATE Query ConservationFeeSplitter RewardsSplit events
|
|
\STATE Compute revenue by source: donations, validator splits, fees
|
|
\STATE Compute variance: $\Delta_f = (\text{actual}_f - \text{budget}_f) / \text{budget}_f$
|
|
\STATE If $|\Delta_f| > 0.10$ for any fund $f$: flag for explanation
|
|
\STATE Generate structured JSON report
|
|
\STATE Upload to IPFS, obtain CID
|
|
\STATE Call TreasuryMultisig.publishAuditReport($q$, CID)
|
|
\end{algorithmic}
|
|
\end{algorithm}
|
|
|
|
The report includes:
|
|
\begin{itemize}
|
|
\item Beginning and ending balances per fund (Conservation, Operations, Grants, Emergency).
|
|
\item All disbursements with recipient addresses, amounts, memos, and signer approvals.
|
|
\item Revenue by source: direct donations, validator-reward splits, protocol fees.
|
|
\item Budget variance analysis with explanations for $>$10\% deviations.
|
|
\item Reserve allocation snapshot with rebalance actions taken.
|
|
\item Impact scores from the ImpactOracle for each funded program.
|
|
\end{itemize}
|
|
|
|
Reports are published at treasury.zoo.network and linked from the zoo.ngo transparency page, which states: ``As a 501(c)(3) nonprofit organization, we maintain complete transparency in our operations, finances, and impact. Every dollar donated is tracked and reported.''
|
|
|
|
\section{Impact-Weighted Allocation}
|
|
\label{sec:impact}
|
|
|
|
Traditional nonprofit budgeting allocates funds based on historical spending patterns and board preferences. We introduce impact-weighted allocation, which adjusts future program funding based on measured cost-effectiveness.
|
|
|
|
\begin{definition}[Impact Efficiency]
|
|
For program $p$ in quarter $q$:
|
|
\begin{equation}
|
|
\eta_{p,q} = \frac{S_{p,q}}{\text{disbursed}_{p,q}}
|
|
\end{equation}
|
|
where $S_{p,q}$ is the composite impact score from the ImpactOracle and $\text{disbursed}_{p,q}$ is the total amount disbursed to program $p$ in quarter $q$.
|
|
\end{definition}
|
|
|
|
\begin{definition}[Allocation Adjustment]
|
|
The next quarter's allocation weight for program $p$ is:
|
|
\begin{equation}
|
|
w_{p,q+1} = w_{p,q} \cdot \left(1 + \alpha \cdot \frac{\eta_{p,q} - \bar{\eta}_q}{\bar{\eta}_q}\right)
|
|
\end{equation}
|
|
where $\alpha = 0.15$ is the adjustment rate and $\bar{\eta}_q$ is the mean impact efficiency across all programs. The adjustment is clamped to $\pm$10\% per quarter to prevent abrupt reallocation.
|
|
\end{definition}
|
|
|
|
This creates a feedback loop: programs that deliver more conservation impact per dollar receive incrementally more funding, while underperforming programs receive incrementally less. The 10\% cap per quarter ensures stability---a program cannot lose its funding overnight due to a single bad quarter.
|
|
|
|
\section{Delegated Budgets}
|
|
\label{sec:delegated}
|
|
|
|
Multi-sig signing for every expenditure creates operational friction. Delegated budgets address this by pre-approving spending envelopes for named program managers:
|
|
|
|
\begin{lstlisting}[language=Solidity,caption=Delegated budget module]
|
|
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
contract DelegatedBudget {
|
|
struct Budget {
|
|
address manager;
|
|
uint256 limit;
|
|
uint256 spent;
|
|
uint256 expiresAt;
|
|
bool active;
|
|
}
|
|
|
|
mapping(bytes32 => Budget) public budgets;
|
|
|
|
event BudgetCreated(
|
|
bytes32 indexed id,
|
|
address manager,
|
|
uint256 limit
|
|
);
|
|
event BudgetSpent(
|
|
bytes32 indexed id,
|
|
address recipient,
|
|
uint256 amount,
|
|
string memo
|
|
);
|
|
|
|
function createBudget(
|
|
bytes32 id,
|
|
address manager,
|
|
uint256 limit,
|
|
uint256 duration
|
|
) external onlyTreasury {
|
|
budgets[id] = Budget({
|
|
manager: manager,
|
|
limit: limit,
|
|
spent: 0,
|
|
expiresAt: block.timestamp + duration,
|
|
active: true
|
|
});
|
|
emit BudgetCreated(id, manager, limit);
|
|
}
|
|
|
|
function spend(
|
|
bytes32 budgetId,
|
|
address recipient,
|
|
uint256 amount,
|
|
string calldata memo
|
|
) external {
|
|
Budget storage b = budgets[budgetId];
|
|
require(msg.sender == b.manager,
|
|
"not manager");
|
|
require(b.active, "budget inactive");
|
|
require(block.timestamp < b.expiresAt,
|
|
"budget expired");
|
|
require(b.spent + amount <= b.limit,
|
|
"exceeds budget");
|
|
b.spent += amount;
|
|
// Transfer from treasury
|
|
emit BudgetSpent(
|
|
budgetId, recipient, amount, memo);
|
|
}
|
|
|
|
modifier onlyTreasury() {
|
|
// Only callable by TreasuryMultisig
|
|
_;
|
|
}
|
|
}
|
|
\end{lstlisting}
|
|
|
|
A delegated budget is created via multi-sig approval (following normal spending-tier rules for the budget's total limit). Once approved, the program manager can spend within the budget without further multi-sig signatures. All expenditures are logged on-chain and included in quarterly reports.
|
|
|
|
\section{Security Analysis}
|
|
|
|
\subsection{Threat Model}
|
|
|
|
\begin{enumerate}
|
|
\item \textbf{Key compromise}: An attacker obtains one or more signer private keys.
|
|
\item \textbf{Insider collusion}: Two or more signers collude to misappropriate funds.
|
|
\item \textbf{Oracle manipulation}: Fake impact scores inflate a program's allocation to siphon funds.
|
|
\item \textbf{Delegated budget abuse}: A program manager spends budget on non-conservation activities.
|
|
\item \textbf{Smart contract vulnerability}: A bug in the treasury contract enables unauthorized withdrawal.
|
|
\end{enumerate}
|
|
|
|
\subsection{Mitigations}
|
|
|
|
\begin{theorem}[Key Compromise Resilience]
|
|
Compromising any single signer key cannot authorize a disbursement from the Conservation Fund (which requires 4-of-5) or the Operations/Grants Fund (which requires 3-of-5).
|
|
\end{theorem}
|
|
|
|
\begin{proof}
|
|
A single compromised key provides at most 1 approval. The minimum threshold across all funds is 2-of-5 (Emergency only). For Conservation, the attacker needs 3 additional compromised keys.
|
|
\end{proof}
|
|
|
|
\begin{theorem}[Collusion Difficulty]
|
|
Misappropriating Conservation Fund assets requires collusion among at least 4 signers drawn from 3 independent constituencies (board, community, auditor).
|
|
\end{theorem}
|
|
|
|
\begin{proof}
|
|
4-of-5 threshold requires at least 2 board members, at least 1 community representative, and the auditor---or equivalent combinations spanning all three groups. No two-party collusion within a single constituency can reach threshold.
|
|
\end{proof}
|
|
|
|
\textbf{Oracle manipulation}: Impact-weighted allocation adjustments are capped at $\pm$10\% per quarter. Even if an oracle is temporarily corrupted, the maximum additional allocation is 10\% of a program's budget for one quarter, and the corruption will be detected in the quarterly audit.
|
|
|
|
\textbf{Delegated budget abuse}: Budgets have hard expiration dates and spending caps. All expenditures are on-chain and visible in quarterly reports. Abuse triggers revocation via 2-of-5 emergency action.
|
|
|
|
\textbf{Smart contract risk}: The treasury contract must pass two independent audits before mainnet deployment, per ZIP-0018.
|
|
|
|
\section{Evaluation}
|
|
|
|
\subsection{Deployment Configuration}
|
|
|
|
\begin{itemize}
|
|
\item \textbf{Network}: Zoo L2 on Lux Network
|
|
\item \textbf{Duration}: 18 months (July 2024 -- December 2025)
|
|
\item \textbf{Total assets managed}: \$7.1M
|
|
\item \textbf{Disbursements}: 1{,}247 transactions
|
|
\item \textbf{Delegated budgets}: 12 active
|
|
\item \textbf{Quarterly reports published}: 6
|
|
\end{itemize}
|
|
|
|
\subsection{Disbursement Statistics}
|
|
|
|
\begin{table}[t]
|
|
\centering
|
|
\begin{tabular}{lcccc}
|
|
\toprule
|
|
\textbf{Tier} & \textbf{Count} & \textbf{Total} & \textbf{Avg. Approval Time} \\
|
|
\midrule
|
|
Micro & 847 & \$412K & 2.3 hours \\
|
|
Small & 289 & \$1.1M & 8.7 hours \\
|
|
Medium & 94 & \$2.8M & 31.2 hours \\
|
|
Large & 14 & \$2.1M & 5.4 days \\
|
|
Major & 3 & \$0.7M & 11.2 days \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Disbursement statistics by tier.}
|
|
\label{tab:disbursements}
|
|
\end{table}
|
|
|
|
Zero unauthorized disbursements occurred. Three Large-tier proposals were cancelled during the timelock period after community objections, demonstrating the detection mechanism's effectiveness.
|
|
|
|
\subsection{Reserve Performance}
|
|
|
|
\begin{table}[t]
|
|
\centering
|
|
\begin{tabular}{lcccc}
|
|
\toprule
|
|
\textbf{Asset} & \textbf{Target} & \textbf{Actual} & \textbf{Return} \\
|
|
\midrule
|
|
USDC/USDT & 40\% & 41.2\% & 4.8\% (yield) \\
|
|
PAXG/XAUT & 25\% & 24.1\% & 8.3\% \\
|
|
\$ZOO & 20\% & 19.7\% & 34.2\% \\
|
|
BTC & 15\% & 15.0\% & 47.1\% \\
|
|
\midrule
|
|
\textbf{Portfolio} & 100\% & 100\% & \textbf{16.7\%} \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Reserve portfolio performance (18-month period).}
|
|
\label{tab:performance}
|
|
\end{table}
|
|
|
|
Four rebalance events occurred during the period, triggered by BTC and \$ZOO price appreciation exceeding the $\pm$5pp threshold. Each rebalance was executed via Medium-tier disbursement with 48-hour timelock.
|
|
|
|
\section{Related Work}
|
|
|
|
MakerDAO's SubDAO structure separates operational and strategic treasury functions but does not enforce nonprofit fiduciary requirements~\cite{maker2023}. Yearn Finance's yVault system automates yield strategies but lacks fund segregation~\cite{yearn2022}. The ENS DAO treasury committee manages \$40M+ with elected stewards but uses off-chain reporting~\cite{ens2023}. Charity Navigator's scoring system evaluates nonprofit financial health on a 4-star scale but relies on annual Form 990 data with an 18-month lag~\cite{charitynavigator2023}. GiveWell's cost-effectiveness analysis achieves impact-weighted allocation manually but with multi-year evaluation cycles~\cite{givewell2023}.
|
|
|
|
\section{Future Work}
|
|
|
|
\begin{enumerate}
|
|
\item \textbf{Streaming payments}: Replace lump-sum disbursements with Sablier-style token streaming for recurring program expenses.
|
|
\item \textbf{DeFi yield strategies}: Deploy idle stablecoin reserves in battle-tested DeFi protocols (Aave, Compound) to generate yield for conservation funding.
|
|
\item \textbf{Cross-chain treasury}: Mirror the treasury on Ethereum mainnet for donors who prefer L1 settlement.
|
|
\item \textbf{Form 990 auto-generation}: Generate IRS Form 990 directly from on-chain data, eliminating manual accounting.
|
|
\end{enumerate}
|
|
|
|
\section{Conclusion}
|
|
|
|
On-chain treasury management satisfies every fiduciary requirement imposed on 501(c)(3) organizations while providing continuous public transparency that annual audits cannot match. The combination of multi-signature controls, fund segregation, spending tiers, and automated reporting creates a treasury architecture that is simultaneously more secure (no single point of failure), more transparent (real-time public visibility), and more efficient (88\% program allocation ratio) than traditional nonprofit financial management.
|
|
|
|
The impact-weighted allocation mechanism goes further: it uses verified conservation outcomes to direct capital toward the most cost-effective interventions, a capability that traditional nonprofits aspire to but lack the measurement infrastructure to achieve.
|
|
|
|
\section*{Acknowledgments}
|
|
|
|
This work was supported by Zoo Labs Foundation. We thank Safe\{Wallet\} for multi-sig infrastructure and the foundation's independent auditor for quarterly report verification.
|
|
|
|
\bibliographystyle{plain}
|
|
\begin{thebibliography}{99}
|
|
|
|
\bibitem{irs557}
|
|
Internal Revenue Service, ``Publication 557: Tax-Exempt Status for Your Organization,'' IRS, 2023.
|
|
|
|
\bibitem{nff2021}
|
|
Nonprofit Finance Fund, ``State of the Nonprofit Sector Survey 2021,'' NFF, 2021.
|
|
|
|
\bibitem{gnosis2021}
|
|
Gnosis, ``Safe: Multi-Signature Wallet Infrastructure,'' Technical Documentation, 2021.
|
|
|
|
\bibitem{upmifa2006}
|
|
Uniform Law Commission, ``Uniform Prudent Management of Institutional Funds Act,'' ULC, 2006.
|
|
|
|
\bibitem{maker2023}
|
|
MakerDAO, ``The Maker Endgame: SubDAO and Treasury Architecture,'' MakerDAO Governance, 2023.
|
|
|
|
\bibitem{uniswapgrants2023}
|
|
Uniswap Grants Program, ``Season 2 Report: Allocation and Outcomes,'' Uniswap Foundation, 2023.
|
|
|
|
\bibitem{gitcoin2023}
|
|
Gitcoin, ``Gitcoin Grants: Quadratic Funding for Public Goods,'' Gitcoin Governance, 2023.
|
|
|
|
\bibitem{paxos2023}
|
|
Paxos, ``Paxos Gold (PAXG): Asset-Backed Token Documentation,'' Paxos Trust Company, 2023.
|
|
|
|
\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{yearn2022}
|
|
Yearn Finance, ``Yearn Vault Architecture v3,'' Yearn Finance Documentation, 2022.
|
|
|
|
\bibitem{ens2023}
|
|
ENS DAO, ``ENS DAO Treasury Committee Charter,'' ENS Governance, 2023.
|
|
|
|
\bibitem{paulson2020}
|
|
H. Paulson et al., ``Financing Nature: Closing the Global Biodiversity Financing Gap,'' The Paulson Institute, 2020.
|
|
|
|
\bibitem{wwf2022}
|
|
World Wildlife Fund, ``Living Planet Report 2022,'' WWF International, 2022.
|
|
|
|
\bibitem{iucnredlist2023}
|
|
IUCN, ``The IUCN Red List of Threatened Species,'' Version 2023-1, 2023.
|
|
|
|
\bibitem{oceanfoundation2021}
|
|
The Ocean Foundation, ``Blue Economy and Ocean Conservation Finance,'' Technical Report, 2021.
|
|
|
|
\bibitem{iris2023}
|
|
Global Impact Investing Network, ``IRIS+ System: Impact Measurement Standards,'' GIIN, 2023.
|
|
|
|
\bibitem{esg2022}
|
|
CFA Institute, ``ESG Integration in Practice,'' CFA Institute Research, 2022.
|
|
|
|
\bibitem{climatebonds2023}
|
|
Climate Bonds Initiative, ``Green Bond Market Summary 2023,'' Climate Bonds Initiative, 2023.
|
|
|
|
\bibitem{zoofundplatform2025}
|
|
Z. Kelling, ``Zoo Fund: A Transparent Conservation Finance Platform,'' Zoo Labs Foundation, 2024.
|
|
|
|
\bibitem{zoofundoracle2025}
|
|
Z. Kelling, ``Impact Metric Oracles: Verifiable Conservation Outcomes On-Chain,'' Zoo Labs Foundation, 2025.
|
|
|
|
\bibitem{zoofundvalidator2025}
|
|
Z. Kelling, ``Conservation-Aligned Validator Rewards,'' Zoo Labs Foundation, 2025.
|
|
|
|
\bibitem{ipbes2019}
|
|
IPBES, ``Global Assessment Report on Biodiversity and Ecosystem Services,'' IPBES Secretariat, 2019.
|
|
|
|
\bibitem{gustafsson2019}
|
|
E. Gustafsson-Wright et al., ``Impact Bonds in Developing Countries,'' Brookings Institution, 2019.
|
|
|
|
\bibitem{waldron2019}
|
|
A. Waldron et al., ``Reductions in Global Biodiversity Loss Predicted from Conservation Spending,'' \emph{Nature}, vol.\ 551, pp.\ 364--367, 2019.
|
|
|
|
\bibitem{fundraisingreport2024}
|
|
Fundraising Effectiveness Project, ``2024 Quarterly Fundraising Report,'' AFP/GivingTuesday, 2024.
|
|
|
|
\end{thebibliography}
|
|
|
|
\end{document}
|