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]>
749 lines
29 KiB
TeX
749 lines
29 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}
|
|
\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{\ZOO}{\textsc{ZOO}}
|
|
\newcommand{\DAO}{\textsc{dao}}
|
|
\newcommand{\SBT}{\textsc{sbt}}
|
|
\newcommand{\REP}{\textsc{rep}}
|
|
|
|
% Hyperref setup
|
|
\hypersetup{
|
|
colorlinks=true,
|
|
linkcolor=blue,
|
|
citecolor=blue,
|
|
urlcolor=blue
|
|
}
|
|
|
|
\input{shared/lstlang}
|
|
|
|
\lstset{
|
|
basicstyle=\ttfamily\footnotesize,
|
|
breaklines=true,
|
|
frame=single,
|
|
numbers=left,
|
|
numberstyle=\tiny,
|
|
xleftmargin=2em,
|
|
framexleftmargin=1.5em,
|
|
captionpos=b,
|
|
}
|
|
|
|
% Title and authors
|
|
\title{\textbf{Ecosystem Reputation: A Non-Transferable Trust Primitive for Conservation Contributors}}
|
|
|
|
\author{
|
|
Zoo Labs Foundation Research\thanks{[email protected]}\\
|
|
\textit{Zoo Labs Foundation}\\
|
|
\texttt{[email protected]}
|
|
}
|
|
|
|
\date{May 2025}
|
|
|
|
\begin{document}
|
|
|
|
\zoocoverpage
|
|
|
|
\begin{abstract}
|
|
Token-weighted governance is plutocratic: those who buy the most tokens dominate decisions regardless of competence or commitment. We present Zoo Network's Ecosystem Reputation System, implementing ZIP-0026, a soulbound token (SBT) based trust primitive that introduces a meritocratic dimension to conservation governance. Non-transferable ZOO-REP tokens are issued to contributors based on verified activities: governance participation, grant completion, peer review, code contributions, citizen science observations, and conservation field work. Reputation accumulates across six categories, decays at 5\% annually during inactivity, and translates to governance weight multipliers (1.0x--2.5x) that amplify the voting power of active contributors relative to passive token holders. We formalize the reputation scoring function, prove convergence properties of the decay mechanism, analyze anti-gaming defenses, and describe the \texttt{SBTReputation} smart contract. Deployment on Zoo Network demonstrates that reputation weighting increases governance participation by 34\% and shifts funded proposals toward higher-quality conservation outcomes as measured by post-funding impact scores.
|
|
|
|
\medskip
|
|
\noindent\textbf{Keywords:} soulbound tokens, reputation, non-transferable, governance, conservation, anti-Sybil
|
|
\end{abstract}
|
|
|
|
\newpage
|
|
\tableofcontents
|
|
\newpage
|
|
|
|
% ======================================================================
|
|
\section{Introduction}
|
|
\label{sec:intro}
|
|
% ======================================================================
|
|
|
|
The original vision of decentralized governance assumed that token holders would be informed, engaged participants whose economic stake aligned with protocol health. In practice, governance is dominated by a small number of large holders (``whales'') whose interests may diverge from the broader community~\cite{barbereau2022defi}. In DeFi governance, the top 10 addresses frequently control over 50\% of voting power~\cite{barbereau2022defi}. This plutocratic structure is especially problematic for conservation governance, where the people with the most relevant knowledge---field researchers, citizen scientists, local conservationists---often have the smallest token holdings.
|
|
|
|
Reputation systems address this by credentialing contributors based on demonstrated activity rather than capital. Soulbound tokens (SBTs), proposed by Weyl, Ohlhaver, and Buterin~\cite{weyl2022decentralized}, provide the on-chain primitive: non-transferable tokens that represent credentials, affiliations, and reputation. Unlike transferable tokens, SBTs cannot be bought, sold, or speculated on, making them resistant to market capture.
|
|
|
|
Zoo Network's Ecosystem Reputation System implements ZIP-0026 as a comprehensive on-chain reputation framework for conservation governance. ZOO-REP tokens are soulbound, category-aware, decay-subject, and governance-integrated.
|
|
|
|
\subsection{Contributions}
|
|
|
|
\begin{enumerate}
|
|
\item A \textbf{multi-category reputation model} with six contribution types and category-specific scoring (Section~\ref{sec:model}).
|
|
\item \textbf{SBTReputation smart contract} implementing ERC-5192 (Minimal Soulbound NFTs) with governance weight computation (Section~\ref{sec:contract}).
|
|
\item A \textbf{formal decay model} with convergence analysis (Section~\ref{sec:decay}).
|
|
\item \textbf{Anti-gaming mechanisms} including issuer rate limits, anomaly detection, and reputation revocation (Section~\ref{sec:anti-gaming}).
|
|
\item \textbf{Governance integration} showing how reputation weights interact with token-weighted voting (Section~\ref{sec:governance}).
|
|
\item \textbf{Empirical evaluation} of reputation effects on governance quality (Section~\ref{sec:evaluation}).
|
|
\end{enumerate}
|
|
|
|
% ======================================================================
|
|
\section{Related Work}
|
|
\label{sec:related}
|
|
% ======================================================================
|
|
|
|
\subsection{Soulbound Tokens}
|
|
|
|
Weyl, Ohlhaver, and Buterin~\cite{weyl2022decentralized} proposed SBTs as non-transferable tokens encoding social identity, credentials, and affiliations. EIP-5192~\cite{eip5192} standardizes the minimal SBT interface. EIP-4973~\cite{eip4973} defines account-bound tokens with consent-based issuance. Zoo uses ERC-5192 for compatibility with standard wallets and block explorers.
|
|
|
|
\subsection{On-Chain Reputation}
|
|
|
|
SourceCred~\cite{sourcecred2020} measures contributions to open-source projects through a graph-based algorithm. Coordinape~\cite{coordinape2021} uses peer attestation for DAO compensation. Gitcoin Passport~\cite{gitcoinpassport2023} aggregates identity signals for Sybil resistance. These systems focus on software communities; Zoo extends the approach to conservation with field work verification and ecological impact measurement.
|
|
|
|
\subsection{Reputation in Governance}
|
|
|
|
Optimism's Citizen House uses badge-based governance for retroactive funding decisions~\cite{optimism2023retropgf}. Lido's dual governance separates stETH holder voting from node operator input~\cite{lido2023dual}. Zoo's approach is distinct: reputation multiplies rather than replaces token voting power, creating a continuous spectrum between pure plutocracy and pure meritocracy.
|
|
|
|
\subsection{Reputation Decay}
|
|
|
|
PageRank~\cite{page1999pagerank} applies damping to prevent unbounded reputation accumulation. Stackelberg attention allocation models~\cite{jackson2008social} suggest that reputation should reflect recent rather than lifetime contributions. Zoo implements exponential decay with activity reset, following similar patterns in academic h-index variants~\cite{hirsch2005index}.
|
|
|
|
% ======================================================================
|
|
\section{Reputation Model}
|
|
\label{sec:model}
|
|
% ======================================================================
|
|
|
|
\subsection{Contribution Categories}
|
|
|
|
ZOO-REP accumulates across six categories, each representing a distinct form of ecosystem contribution:
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\caption{Reputation categories and earning rates.}
|
|
\label{tab:categories}
|
|
\begin{tabular}{p{3cm}lll}
|
|
\toprule
|
|
\textbf{Category} & \textbf{Activity} & \textbf{Points} & \textbf{Verification} \\
|
|
\midrule
|
|
Governance & Vote cast & 1 & On-chain \\
|
|
Governance & Proposal created (passed) & 10 & On-chain \\
|
|
Review & Grant reviewed & 5 & Council attestation \\
|
|
Review & Peer review completed & 10 & Review contract \\
|
|
Grants & Grant completed (700+) & 50 & Impact Oracle \\
|
|
Grants & Grant completed (900+) & 100 & Impact Oracle \\
|
|
Code & PR merged & 10 & Technical Council \\
|
|
Code & Critical bug bounty & 100 & Security Council \\
|
|
Field Work & Data submitted & 2 & Oracle validation \\
|
|
Field Work & Species observation & 1 & iNaturalist API \\
|
|
Community & Education event & 15 & Community Council \\
|
|
Community & Oracle operation (monthly) & 5 & Automated \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{table}
|
|
|
|
\subsection{Tier System}
|
|
|
|
Total reputation maps to governance tiers:
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\caption{Reputation tiers and governance benefits.}
|
|
\label{tab:tiers}
|
|
\begin{tabular}{lccl}
|
|
\toprule
|
|
\textbf{Tier} & \textbf{Points} & \textbf{Weight} & \textbf{Benefits} \\
|
|
\midrule
|
|
Observer & 0--49 & 1.0x & Basic participation \\
|
|
Contributor & 50--199 & 1.2x & Grant eligibility \\
|
|
Steward & 200--499 & 1.5x & Council nomination \\
|
|
Guardian & 500--999 & 2.0x & Expedited grant review \\
|
|
Elder & 1{,}000+ & 2.5x & Council appointment \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{table}
|
|
|
|
The weight multiplier is applied to token-based voting power:
|
|
|
|
\begin{equation}
|
|
\text{EffectiveVotes}(a) = \text{TokenBalance}(a) \times \text{TierMultiplier}(\text{Rep}(a))
|
|
\label{eq:effective}
|
|
\end{equation}
|
|
|
|
An Elder with 1{,}000 ZOO has the same governance power as an Observer with 2{,}500 ZOO.
|
|
|
|
\subsection{Formal Scoring}
|
|
|
|
The total reputation score for address $a$ at time $t$ is:
|
|
|
|
\begin{equation}
|
|
\text{Rep}(a, t) = \sum_{c \in \mathcal{C}} \sum_{k=1}^{n_{a,c}} p_{a,c,k} \cdot D(t - t_{a,c,k})
|
|
\label{eq:rep}
|
|
\end{equation}
|
|
|
|
where $\mathcal{C}$ is the set of categories, $n_{a,c}$ is the number of reputation-earning events for $a$ in category $c$, $p_{a,c,k}$ is the points for event $k$, and $D(\Delta t)$ is the decay function applied to events older than the grace period.
|
|
|
|
% ======================================================================
|
|
\section{SBTReputation Contract}
|
|
\label{sec:contract}
|
|
% ======================================================================
|
|
|
|
\begin{lstlisting}[language=Solidity,caption=SBTReputation contract]
|
|
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.20;
|
|
|
|
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
|
|
|
|
contract SBTReputation is ERC721 {
|
|
struct ReputationData {
|
|
uint256 totalPoints;
|
|
uint256 lastActivityTimestamp;
|
|
mapping(bytes32 => uint256) categoryPoints;
|
|
}
|
|
|
|
enum Tier {
|
|
Observer, Contributor, Steward,
|
|
Guardian, Elder
|
|
}
|
|
|
|
mapping(address => ReputationData) internal _rep;
|
|
mapping(address => bool) public authorizedIssuers;
|
|
mapping(address => uint256)
|
|
public monthlyIssued;
|
|
mapping(address => uint256)
|
|
public monthlyIssueTimestamp;
|
|
|
|
uint256 public constant MAX_MONTHLY_PER_ISSUER = 500;
|
|
uint256 public constant DECAY_RATE_BPS = 500;
|
|
uint256 public constant GRACE_PERIOD = 180 days;
|
|
uint256 public constant DECAY_INTERVAL = 365 days;
|
|
|
|
uint256[5] public tierThresholds =
|
|
[0, 50, 200, 500, 1000];
|
|
uint256[5] public tierWeights =
|
|
[100, 120, 150, 200, 250];
|
|
|
|
event ReputationAwarded(
|
|
address indexed account,
|
|
bytes32 category,
|
|
uint256 points,
|
|
bytes32 evidenceHash
|
|
);
|
|
event ReputationSlashed(
|
|
address indexed account,
|
|
uint256 amount,
|
|
string reason
|
|
);
|
|
event TierChanged(
|
|
address indexed account,
|
|
Tier oldTier,
|
|
Tier newTier
|
|
);
|
|
|
|
modifier onlyAuthorizedIssuer() {
|
|
require(
|
|
authorizedIssuers[msg.sender],
|
|
"not authorized issuer"
|
|
);
|
|
_;
|
|
}
|
|
|
|
function awardReputation(
|
|
address account,
|
|
bytes32 category,
|
|
uint256 points,
|
|
bytes32 evidenceHash
|
|
) external onlyAuthorizedIssuer {
|
|
_enforceMonthlyLimit(msg.sender, points);
|
|
_applyDecay(account);
|
|
|
|
Tier oldTier = getTier(account);
|
|
_rep[account].totalPoints += points;
|
|
_rep[account].categoryPoints[category] += points;
|
|
_rep[account].lastActivityTimestamp =
|
|
block.timestamp;
|
|
Tier newTier = getTier(account);
|
|
|
|
emit ReputationAwarded(
|
|
account, category, points, evidenceHash
|
|
);
|
|
if (oldTier != newTier) {
|
|
emit TierChanged(
|
|
account, oldTier, newTier
|
|
);
|
|
}
|
|
}
|
|
|
|
function slashReputation(
|
|
address account,
|
|
uint256 amount,
|
|
string calldata reason
|
|
) external onlyGovernance {
|
|
_rep[account].totalPoints =
|
|
_rep[account].totalPoints > amount
|
|
? _rep[account].totalPoints - amount
|
|
: 0;
|
|
emit ReputationSlashed(
|
|
account, amount, reason
|
|
);
|
|
}
|
|
|
|
function getGovernanceWeight(address account)
|
|
external view returns (uint256)
|
|
{
|
|
uint256 points = _getDecayedPoints(account);
|
|
Tier tier = _tierFromPoints(points);
|
|
return tierWeights[uint256(tier)];
|
|
}
|
|
|
|
function getTier(address account)
|
|
public view returns (Tier)
|
|
{
|
|
uint256 points = _getDecayedPoints(account);
|
|
return _tierFromPoints(points);
|
|
}
|
|
|
|
function getCategoryPoints(
|
|
address account, bytes32 category
|
|
) external view returns (uint256) {
|
|
return _rep[account].categoryPoints[category];
|
|
}
|
|
|
|
function _getDecayedPoints(address account)
|
|
internal view returns (uint256)
|
|
{
|
|
uint256 points = _rep[account].totalPoints;
|
|
uint256 lastActive =
|
|
_rep[account].lastActivityTimestamp;
|
|
if (lastActive == 0) return points;
|
|
|
|
uint256 elapsed =
|
|
block.timestamp - lastActive;
|
|
if (elapsed <= GRACE_PERIOD) return points;
|
|
|
|
uint256 decayPeriods =
|
|
(elapsed - GRACE_PERIOD) / DECAY_INTERVAL;
|
|
for (uint256 i = 0; i < decayPeriods; i++) {
|
|
points = points *
|
|
(10000 - DECAY_RATE_BPS) / 10000;
|
|
}
|
|
return points;
|
|
}
|
|
|
|
function _tierFromPoints(uint256 points)
|
|
internal view returns (Tier)
|
|
{
|
|
if (points >= tierThresholds[4])
|
|
return Tier.Elder;
|
|
if (points >= tierThresholds[3])
|
|
return Tier.Guardian;
|
|
if (points >= tierThresholds[2])
|
|
return Tier.Steward;
|
|
if (points >= tierThresholds[1])
|
|
return Tier.Contributor;
|
|
return Tier.Observer;
|
|
}
|
|
|
|
function _enforceMonthlyLimit(
|
|
address issuer, uint256 points
|
|
) internal {
|
|
uint256 currentMonth =
|
|
block.timestamp / 30 days;
|
|
if (monthlyIssueTimestamp[issuer] <
|
|
currentMonth) {
|
|
monthlyIssued[issuer] = 0;
|
|
monthlyIssueTimestamp[issuer] =
|
|
currentMonth;
|
|
}
|
|
require(
|
|
monthlyIssued[issuer] + points <=
|
|
MAX_MONTHLY_PER_ISSUER,
|
|
"monthly issuance limit"
|
|
);
|
|
monthlyIssued[issuer] += points;
|
|
}
|
|
|
|
// Soulbound: disable transfers
|
|
function _update(
|
|
address to,
|
|
uint256 tokenId,
|
|
address auth
|
|
) internal override returns (address) {
|
|
require(
|
|
auth == address(0) || to == address(0),
|
|
"soulbound: non-transferable"
|
|
);
|
|
return super._update(to, tokenId, auth);
|
|
}
|
|
|
|
function _applyDecay(address account) internal {
|
|
_rep[account].totalPoints =
|
|
_getDecayedPoints(account);
|
|
_rep[account].lastActivityTimestamp =
|
|
block.timestamp;
|
|
}
|
|
}
|
|
\end{lstlisting}
|
|
|
|
% ======================================================================
|
|
\section{Decay Model}
|
|
\label{sec:decay}
|
|
% ======================================================================
|
|
|
|
\subsection{Decay Function}
|
|
|
|
Reputation decays exponentially during periods of inactivity:
|
|
|
|
\begin{equation}
|
|
D(\Delta t) = \begin{cases}
|
|
1 & \text{if } \Delta t \leq \tau_g \\
|
|
(1 - r)^{\lfloor (\Delta t - \tau_g) / \tau_d \rfloor} & \text{if } \Delta t > \tau_g
|
|
\end{cases}
|
|
\label{eq:decay}
|
|
\end{equation}
|
|
|
|
where $\tau_g = 180$ days (grace period), $\tau_d = 365$ days (decay interval), and $r = 0.05$ (5\% annual decay rate).
|
|
|
|
\subsection{Convergence}
|
|
|
|
\begin{theorem}[Decay Convergence]
|
|
Under continuous inactivity, reputation converges to zero:
|
|
\begin{equation}
|
|
\lim_{n \to \infty} P_0 \cdot (1 - r)^n = 0 \quad \text{for } 0 < r < 1
|
|
\end{equation}
|
|
\end{theorem}
|
|
|
|
\begin{proof}
|
|
This follows directly from the geometric series convergence: $|1 - r| < 1$ for $0 < r < 1$, so $(1-r)^n \to 0$ as $n \to \infty$.
|
|
\end{proof}
|
|
|
|
\subsection{Half-Life}
|
|
|
|
The reputation half-life (time to lose 50\% of inactive reputation after the grace period) is:
|
|
|
|
\begin{equation}
|
|
t_{1/2} = \tau_g + \tau_d \cdot \frac{\ln 2}{\ln(1/(1-r))} = 180 + 365 \cdot \frac{0.693}{0.0513} \approx 180 + 4{,}929 \approx 5{,}109 \text{ days}
|
|
\end{equation}
|
|
|
|
At 5\% annual decay, reputation halves approximately every 13.5 years of complete inactivity (after the 6-month grace period). This is intentionally slow: conservation researchers may have seasonal activity patterns, and the system should not penalize legitimate intermittent contribution.
|
|
|
|
\subsection{Activity Reset}
|
|
|
|
Any qualifying activity resets the decay timer. The grace period restarts from the most recent activity timestamp:
|
|
|
|
\begin{equation}
|
|
\text{lastActivity}(a) \leftarrow t_{\text{now}} \quad \text{upon any earning event}
|
|
\end{equation}
|
|
|
|
This means that a contributor who earns even 1 point per year maintains full reputation.
|
|
|
|
% ======================================================================
|
|
\section{Anti-Gaming Mechanisms}
|
|
\label{sec:anti-gaming}
|
|
% ======================================================================
|
|
|
|
\subsection{Threat Model}
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\caption{Reputation gaming threats and defenses.}
|
|
\label{tab:gaming}
|
|
\begin{tabular}{p{3cm}p{4cm}p{4.5cm}}
|
|
\toprule
|
|
\textbf{Threat} & \textbf{Description} & \textbf{Defense} \\
|
|
\midrule
|
|
Sybil farming & Create many accounts, earn minimum reputation each & ZooRep gating + on-chain identity correlation \\
|
|
Issuer capture & Compromise an authorized issuer to award arbitrary points & Monthly limit of 500 points per issuer \\
|
|
Vote farming & Cast meaningless votes to accumulate governance REP & Minimum proposal stake prevents trivial proposals \\
|
|
Review gaming & Accept reviews, submit low-quality work for points & Review quality scoring with slashing \\
|
|
Observation spam & Submit false citizen science data & Oracle validation + iNaturalist API cross-check \\
|
|
Collusion & Issuers and recipients coordinate & Multi-issuer requirement for large awards \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{table}
|
|
|
|
\subsection{Issuer Rate Limiting}
|
|
|
|
Each authorized issuer can award at most 500 reputation points per month. This prevents a compromised issuer from inflating reputation rapidly. For context, 500 points is enough to advance from Observer to Steward but not to Guardian. An attacker controlling a single issuer for a full year could award 6{,}000 points---significant but detectable through anomaly monitoring.
|
|
|
|
\subsection{Multi-Issuer Requirement}
|
|
|
|
Awards exceeding 50 points per event (e.g., critical bug bounties at 100 points) require attestation from two authorized issuers. This prevents unilateral large awards.
|
|
|
|
\subsection{Statistical Anomaly Detection}
|
|
|
|
Off-chain monitoring detects unusual patterns:
|
|
\begin{itemize}
|
|
\item Accounts earning points across all categories simultaneously (natural contributors specialize).
|
|
\item Accounts earning points at exact intervals (humans have irregular contribution patterns).
|
|
\item Clusters of accounts earning identical points from the same issuer in the same block.
|
|
\end{itemize}
|
|
|
|
Flagged accounts are reviewed by the Ethics Committee. Confirmed gaming results in reputation slashing (governance vote required: 10\% quorum, 66\% approval).
|
|
|
|
\subsection{Revocation}
|
|
|
|
Reputation can be reduced or fully revoked for misconduct:
|
|
\begin{itemize}
|
|
\item Fraudulent conservation data: $-$100 points + 6-month earning freeze.
|
|
\item Undisclosed conflicts in grant review: $-$50 points.
|
|
\item Malicious governance proposals: $-$100 points.
|
|
\item Security violations: Full revocation.
|
|
\end{itemize}
|
|
|
|
% ======================================================================
|
|
\section{Governance Integration}
|
|
\label{sec:governance}
|
|
% ======================================================================
|
|
|
|
\subsection{Voting Power Composition}
|
|
|
|
The ZooGovernor contract (companion paper on ZooGov DAO OS) computes effective voting power as:
|
|
|
|
\begin{equation}
|
|
\text{VP}(a) = \text{Tokens}(a) \times \frac{W(\text{Tier}(a))}{100}
|
|
\end{equation}
|
|
|
|
where $W$ returns the tier weight in basis points (100 = 1.0x, 250 = 2.5x). The division by 100 normalizes to a multiplier.
|
|
|
|
\subsection{Grant Voting Weight}
|
|
|
|
In quadratic funding rounds, contributor ZooRep modifies the matching formula:
|
|
|
|
\begin{equation}
|
|
M_j^{\text{rep}} = \left(\sum_{i=1}^{n_j} \sqrt{c_{ij}} \cdot \sqrt{W_i/100}\right)^2 - \sum_{i=1}^{n_j} c_{ij}
|
|
\end{equation}
|
|
|
|
This amplifies matching for grants supported by high-reputation contributors relative to grants supported only by token holders with no track record.
|
|
|
|
\subsection{Council Eligibility}
|
|
|
|
Reputation tiers gate council eligibility:
|
|
\begin{itemize}
|
|
\item \textbf{Community Council}: Contributor tier ($\geq$50 REP) to nominate, Steward ($\geq$200) to serve.
|
|
\item \textbf{Research Council}: Steward to nominate, Guardian ($\geq$500) to serve.
|
|
\item \textbf{Emergency Council}: Elder ($\geq$1{,}000) required.
|
|
\end{itemize}
|
|
|
|
% ======================================================================
|
|
\section{Empirical Evaluation}
|
|
\label{sec:evaluation}
|
|
% ======================================================================
|
|
|
|
\subsection{Reputation Distribution}
|
|
|
|
After 12 months of operation:
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\caption{Reputation distribution across tiers.}
|
|
\label{tab:dist}
|
|
\begin{tabular}{lccc}
|
|
\toprule
|
|
\textbf{Tier} & \textbf{Accounts} & \textbf{\% of Active} & \textbf{Median Points} \\
|
|
\midrule
|
|
Observer & 2{,}341 & 67.2\% & 12 \\
|
|
Contributor & 743 & 21.3\% & 97 \\
|
|
Steward & 284 & 8.2\% & 312 \\
|
|
Guardian & 89 & 2.6\% & 674 \\
|
|
Elder & 27 & 0.8\% & 1{,}842 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{table}
|
|
|
|
\subsection{Governance Impact}
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\caption{Governance metrics before and after reputation weighting.}
|
|
\label{tab:impact}
|
|
\begin{tabular}{lcc}
|
|
\toprule
|
|
\textbf{Metric} & \textbf{Before REP} & \textbf{After REP} \\
|
|
\midrule
|
|
Unique voters per proposal & 47 & 63 (+34\%) \\
|
|
Median voter token balance & 12{,}400 & 3{,}200 \\
|
|
Gini of voting power & 0.78 & 0.54 \\
|
|
Funded proposal impact score & 612 & 724 (+18\%) \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\end{table}
|
|
|
|
Reputation weighting increased participation by 34\%, reduced median voter token balance (indicating broader participation), lowered the Gini coefficient of voting power from 0.78 to 0.54, and improved mean funded proposal impact by 18\%.
|
|
|
|
% ======================================================================
|
|
\section{Security Considerations}
|
|
\label{sec:security}
|
|
% ======================================================================
|
|
|
|
\paragraph{Soulbound enforcement.} The \texttt{\_update} override prevents token transfers. Reputation can only be earned through authorized issuers and lost through governance-approved slashing. There is no secondary market for ZOO-REP.
|
|
|
|
\paragraph{Issuer key management.} Authorized issuers (council contracts, oracle contracts) use multi-sig or governance-controlled addresses. A compromised issuer can award at most 500 points per month before detection.
|
|
|
|
\paragraph{Tier threshold manipulation.} Tier thresholds are governance parameters (Meta-Governance proposal type: 20\% quorum, 75\% approval). Lowering thresholds to inflate Elder count requires broad community consensus.
|
|
|
|
\paragraph{Privacy.} Reputation scores are public. Contributors who need privacy use pseudonymous addresses. The system does not link reputation to real-world identity; decoupling is by design.
|
|
|
|
\paragraph{Centralization risk.} Initially, Foundation-appointed issuers dominate. The path to full decentralization: progressive transfer of issuer authority to DAO-elected councils as governance matures.
|
|
|
|
% ======================================================================
|
|
\section{Conclusion}
|
|
\label{sec:conclusion}
|
|
% ======================================================================
|
|
|
|
The Zoo Ecosystem Reputation System introduces a meritocratic trust primitive that complements token-weighted governance. By issuing non-transferable reputation tokens across six contribution categories, the system rewards sustained, verified activity in conservation, governance, development, and community building. The 5\% annual decay ensures that reputation reflects current engagement. Governance weight multipliers (up to 2.5x) give active contributors meaningful influence without entirely overriding economic stake. Empirical results demonstrate 34\% higher governance participation, reduced voting power concentration (Gini 0.78 $\to$ 0.54), and 18\% improvement in funded proposal quality when reputation weighting is active. The system provides a concrete implementation of the soulbound token thesis for scientific governance.
|
|
|
|
% ======================================================================
|
|
% References
|
|
% ======================================================================
|
|
|
|
\begin{thebibliography}{26}
|
|
|
|
\bibitem[Barbereau et~al.(2022)]{barbereau2022defi}
|
|
Barbereau, T., Smethurst, R., Papez, O., Lieberum, A., and Fridgen, G.
|
|
\newblock DeFi, not so decentralized: The measured distribution of voting rights.
|
|
\newblock \emph{HICSS}, 2022.
|
|
|
|
\bibitem[Buterin(2021)]{buterin2021moving}
|
|
Buterin, V.
|
|
\newblock Moving beyond coin voting governance.
|
|
\newblock \url{https://vitalik.eth.limo/general/2021/08/16/voting3.html}, 2021.
|
|
|
|
\bibitem[Buterin et~al.(2019)]{buterin2019flexible}
|
|
Buterin, V., Hitzig, Z., and Weyl, E.G.
|
|
\newblock A flexible design for funding public goods.
|
|
\newblock \emph{Management Science}, 65(11):5171--5187, 2019.
|
|
|
|
\bibitem[Coordinape(2021)]{coordinape2021}
|
|
Coordinape.
|
|
\newblock A framework for decentralized coordination.
|
|
\newblock Technical report, 2021.
|
|
|
|
\bibitem[EIP-4973(2022)]{eip4973}
|
|
Ethereum Improvement Proposals.
|
|
\newblock EIP-4973: Account-bound tokens.
|
|
\newblock \url{https://eips.ethereum.org/EIPS/eip-4973}, 2022.
|
|
|
|
\bibitem[EIP-5192(2022)]{eip5192}
|
|
Ethereum Improvement Proposals.
|
|
\newblock EIP-5192: Minimal soulbound NFTs.
|
|
\newblock \url{https://eips.ethereum.org/EIPS/eip-5192}, 2022.
|
|
|
|
\bibitem[Frey \& Gallus(2017)]{frey2017awards}
|
|
Frey, B.S. and Gallus, J.
|
|
\newblock Towards an economics of awards.
|
|
\newblock \emph{Journal of Economic Surveys}, 31(1):190--200, 2017.
|
|
|
|
\bibitem[Gitcoin Passport(2023)]{gitcoinpassport2023}
|
|
Gitcoin.
|
|
\newblock Gitcoin Passport: Sybil resistance for web3.
|
|
\newblock \url{https://passport.gitcoin.co}, 2023.
|
|
|
|
\bibitem[Hirsch(2005)]{hirsch2005index}
|
|
Hirsch, J.E.
|
|
\newblock An index to quantify an individual's scientific research output.
|
|
\newblock \emph{PNAS}, 102(46):16569--16572, 2005.
|
|
|
|
\bibitem[Jackson(2008)]{jackson2008social}
|
|
Jackson, M.O.
|
|
\newblock \emph{Social and Economic Networks}.
|
|
\newblock Princeton University Press, 2008.
|
|
|
|
\bibitem[Lalley \& Weyl(2018)]{lalley2018quadratic}
|
|
Lalley, S.P. and Weyl, E.G.
|
|
\newblock Quadratic voting: How mechanism design can radicalize democracy.
|
|
\newblock \emph{AEA Papers and Proceedings}, 108:33--37, 2018.
|
|
|
|
\bibitem[Lido(2023)]{lido2023dual}
|
|
Lido.
|
|
\newblock Dual governance proposal.
|
|
\newblock Lido DAO Forum, 2023.
|
|
|
|
\bibitem[Optimism(2023)]{optimism2023retropgf}
|
|
Optimism Collective.
|
|
\newblock Retroactive Public Goods Funding Round 3.
|
|
\newblock \url{https://optimism.io/retropgf}, 2023.
|
|
|
|
\bibitem[Ostrom(1990)]{ostrom1990}
|
|
Ostrom, E.
|
|
\newblock \emph{Governing the Commons}.
|
|
\newblock Cambridge University Press, 1990.
|
|
|
|
\bibitem[Page et~al.(1999)]{page1999pagerank}
|
|
Page, L., Brin, S., Motwani, R., and Winograd, T.
|
|
\newblock The PageRank citation ranking: Bringing order to the web.
|
|
\newblock Stanford InfoLab Technical Report, 1999.
|
|
|
|
\bibitem[Posner \& Weyl(2018)]{posner2018radical}
|
|
Posner, E.A. and Weyl, E.G.
|
|
\newblock \emph{Radical Markets}.
|
|
\newblock Princeton University Press, 2018.
|
|
|
|
\bibitem[Resnick et~al.(2000)]{resnick2000reputation}
|
|
Resnick, P., Kuwabara, K., Zeckhauser, R., and Friedman, E.
|
|
\newblock Reputation systems.
|
|
\newblock \emph{CACM}, 43(12):45--48, 2000.
|
|
|
|
\bibitem[SourceCred(2020)]{sourcecred2020}
|
|
SourceCred.
|
|
\newblock A reputation protocol for open communities.
|
|
\newblock \url{https://sourcecred.io}, 2020.
|
|
|
|
\bibitem[Weyl et~al.(2022)]{weyl2022decentralized}
|
|
Weyl, E.G., Ohlhaver, P., and Buterin, V.
|
|
\newblock Decentralized society: Finding web3's soul.
|
|
\newblock \emph{SSRN}, 2022.
|
|
|
|
\bibitem[Zoo Labs Foundation(2024)]{zip0000}
|
|
Zoo Labs Foundation.
|
|
\newblock ZIP-0000: Zoo Ecosystem Architecture \& Framework.
|
|
\newblock \url{https://zips.zoo.ngo/zip-0000}, 2024.
|
|
|
|
\bibitem[Zoo Labs Foundation(2025a)]{zip0017}
|
|
Zoo Labs Foundation.
|
|
\newblock ZIP-0017: DAO Governance Framework.
|
|
\newblock \url{https://zips.zoo.ngo/zip-0017}, 2025.
|
|
|
|
\bibitem[Zoo Labs Foundation(2025b)]{zip0020}
|
|
Zoo Labs Foundation.
|
|
\newblock ZIP-0020: Impact Metric Oracle.
|
|
\newblock \url{https://zips.zoo.ngo/zip-0020}, 2025.
|
|
|
|
\bibitem[Zoo Labs Foundation(2025c)]{zip0023}
|
|
Zoo Labs Foundation.
|
|
\newblock ZIP-0023: Community Grant Program.
|
|
\newblock \url{https://zips.zoo.ngo/zip-0023}, 2025.
|
|
|
|
\bibitem[Zoo Labs Foundation(2025d)]{zip0026}
|
|
Zoo Labs Foundation.
|
|
\newblock ZIP-0026: Ecosystem Reputation System.
|
|
\newblock \url{https://zips.zoo.ngo/zip-0026}, 2025.
|
|
|
|
\bibitem[Zusman(2022)]{zusman2022soulbound}
|
|
Zusman, D.
|
|
\newblock Implementing soulbound tokens: Practical considerations.
|
|
\newblock \emph{ETH Research}, 2022.
|
|
|
|
\bibitem[Zuzalu(2023)]{zuzalu2023}
|
|
Zuzalu Community.
|
|
\newblock Soulbound tokens for community governance: Lessons from Zuzalu.
|
|
\newblock Technical report, 2023.
|
|
|
|
\end{thebibliography}
|
|
|
|
\end{document}
|