OverviewArchitectureTiersActionsSecurity← AppGitHub
PROJECT DOCUMENTATION · RST PROTOCOL

What is the RST
Protocol?

A fully on-chain reputation system that assigns every Ethereum wallet a permanent, non-transferable identity token — one that evolves as the wallet behaves. No servers. No databases. No IPFS. Just Solidity, storage, and truth.

OverviewArchitectureTiersSecurity
SCROLL TO READ

On-chain identity is broken.

Every Ethereum wallet looks the same to a smart contract. A DeFi power user who has voted in dozens of governance proposals, repaid multiple loans, and held through three market cycles is indistinguishable — at the protocol level — from a wallet created five minutes ago with a single ETH transfer.

This creates a fundamental problem for any protocol that wants to reward trust, extend credit, or weight governance influence. Without persistent, verifiable on-chain identity, every system defaults to treating wallets as anonymous and equal — which they are not.

"The RST Protocol solves this. Not with a centralised score, not with a KYC provider, not with a social graph — but with raw on-chain behaviour, permanently recorded and cryptographically verified."

When a wallet interacts with the RST Protocol, every action they take — every vote cast, every loan repaid, every airdrop held — is permanently written to the blockchain and translated into a numeric reputation score between 0 and 1000.

The result is a composable reputation layer that any DeFi protocol can read from. Lending protocols can offer larger undercollateralised loans to Platinum wallets. DAOs can weight Platinum votes three times higher than Unranked wallets. All of this happens transparently, on-chain, without a single database or API call.

Four steps. One identity.

01
STEP 01

You connect your wallet

Nothing is minted immediately. Your wallet exists in an Unranked state — a score of zero, no token. The protocol is aware of you, but your on-chain story has not yet begun.

02
STEP 02

You take your first action

The moment you cast a vote, repay a loan, or perform any tracked action through the ReputationVault, two things happen at once: your score is updated, and if you do not already have a Soulbound Token, one is issued to your wallet automatically.

03
STEP 03

Your score accumulates

Every subsequent action modifies your score upward or downward. The scoring is bounded between 0 and 1000. Your score reflects a lifetime of on-chain behaviour, not just your most recent transaction.

04
STEP 04

Your medal upgrades automatically

As your score crosses tier thresholds — 100 for Bronze, 300 for Silver, 600 for Gold, 850 for Platinum — the artwork displayed by your Soulbound Token changes on the fly. No re-minting. No gas cost.

Separation of concerns, taken seriously.

The RST Protocol is composed of three independent smart contracts, each with a single, clearly defined responsibility. This separation is not just a design preference — it is a security requirement.

The token — which holds the permanent record of who owns which Soulbound Token — is completely immutable. The engine — which calculates scores, resolves tiers, and decides when to issue tokens — is upgradeable via the UUPS proxy pattern. Scoring logic is not ground truth. It is policy, and policy must be allowed to evolve.

SYSTEM LAYERS · TOP TO BOTTOM
USER / DAPPWagmi v2 · Viem · RainbowKit
REPUTATION VAULTcastVote() · takeLoan() · claimAirdrop() · mintNFT()
REPUTATION ENGINEScore calculation · Tier resolution · SBT auto-issuance
REPUTATION TOKENERC-5484 Soulbound · On-chain SVG · Immutable ownership

Three contracts. One identity.

01
🛡️

ReputationToken

ERC-5484 · Immutable
The soul of the system

ReputationToken is where permanent records live. Every wallet's Soulbound Token ownership is stored here, and this contract will never change. It enforces the ERC-5484 standard — which means it fires the correct Issued event with burn authorisation details when a token is created, registers its own interface ID so other contracts can detect it, and absolutely refuses to allow any token transfer between wallets. The transfer lock is enforced at the lowest possible level inside OpenZeppelin's ERC-721 base, meaning no present or future code path can bypass it.

The token contract can only be controlled by the engine address, which is set exactly once after deployment and can never be changed again. This engine lock means even if the owner's private key were compromised, the token records themselves are fully protected.

View on Etherscan · 0x9c77Ce31...F70F46
02
⚙️

ReputationEngine

UUPS · Upgradeable Proxy
The brain of the system

ReputationEngine is where intelligence lives. It receives action signals from authorised callers — primarily the ReputationVault — and updates scores accordingly. The engine uses a pure math library called ReputationMath to calculate score changes. Every score delta is routed through an Action enum rather than raw signed integers, which prevents callers from injecting arbitrary score changes. The engine is deployed behind a UUPS proxy, meaning its logic can be upgraded while the proxy address remains unchanged.

The engine is responsible for one automatic behaviour that happens on every first action: if the acting wallet does not yet have a Soulbound Token, it calls the token contract to issue one. This removes any separate minting step for the user.

View on Etherscan · 0x4eFC1adc...FaBD8
03
🔒

ReputationVault

Action Gateway
The gateway of the system

ReputationVault is the user-facing entry point. It simulates the kinds of actions that real DeFi protocols would perform — DAO governance, lending, airdrop mechanics, NFT minting — and records each one to the engine. Cooldowns are enforced per action type: voting and NFT minting have 12-hour cooldowns, proposal submission has a 24-hour cooldown, loan and airdrop actions are gated by natural state rather than time.

The airdrop mechanic is particularly deliberate: claiming an airdrop starts a timer, and settling it before 30 days have passed penalises the wallet with −20 points. Settling after 30 days rewards it with +15.

View on Etherscan · 0xd53320CD...D98b6

Five levels of trust.

Your score places you in exactly one tier at any given time. Tiers determine two concrete privileges: how much your vote counts in governance, and how large an undercollateralised loan you can access.

Unranked
Score 0 – 99

Grey hexagon with a question mark — your journey begins here.

Voting
0.5×
Loan Cap
None
Bronze
Score 100 – 299

Copper circle bearing a six-point star — early trust established.

Voting
Loan Cap
20%
Silver
Score 300 – 599

Silver circle with a five-point star — a recognised participant.

Voting
1.5×
Loan Cap
40%
Gold
Score 600 – 849

Gold circle crowned with gemstones — a protocol veteran.

Voting
Loan Cap
60%
Platinum
Score 850 – 1000

Platinum ring with a cut diamond — the pinnacle of on-chain identity.

Voting
Loan Cap
80%

What you do. What it costs. What it earns.

Every action maps to a signed score delta. Positive actions build your reputation. Negative actions erode it. There is no undo, no appeal, and no reset.

DAO Vote+10

Participating in governance signals long-term alignment with a protocol.

DAO Proposal+25

Submitting a proposal requires effort, research, and genuine skin in the game.

Loan Repaid+30

Repaying debt on-chain is the strongest signal of financial trustworthiness.

Airdrop Held 30d+15

Holding an airdrop for 30 days demonstrates patience and project belief.

NFT Minted+5

NFT minting shows active community participation and cultural engagement.

Loan Defaulted−50

Defaulting on a loan is the most severe trust violation in DeFi.

Airdrop Dumped−20

Selling an airdrop immediately signals opportunism over genuine participation.

Art that lives on the blockchain.

Every tier has a distinct medal design, generated entirely in Solidity as raw SVG markup. There is no external storage, no IPFS gateway, no image host. The SVG is constructed character by character inside the contract and returned as a Base64-encoded data URI directly from the tokenURI function.

The Unranked medal is a grey hexagon bearing a question mark — deliberately austere. The Bronze medal is a copper circle with a six-point star. Silver brings a five-point star and a cooler metallic palette. Gold introduces a crown with five coloured gemstones. Platinum is the most elaborate — a layered diamond facet with sparkle accents and multiple concentric rings.

"The most elegant detail: the medal is dynamic. The contract reads your current score from the engine every time tokenURI is called and renders the appropriate tier's artwork. As you climb from Bronze to Gold, your medal upgrades on every refresh — with no re-mint, no transaction, no gas."

This design means the Soulbound Token is genuinely living artwork. It is a visual representation of your on-chain reputation that updates in real time. Any wallet, marketplace, or dashboard that supports ERC-721 tokenURI rendering will display your current tier automatically.

Why it was built this way.

01

Immutability where it matters

The token contract — which holds every wallet's SBT ownership record — is deliberately non-upgradeable. SBT ownership is the ground truth of on-chain identity. If the token contract were upgradeable, a compromised owner could silently reassign tokens or remove the transfer lock, destroying the soulbound guarantee entirely. Permanence is not a limitation here — it is the feature.

02

Upgradeability where logic lives

The scoring engine that calculates reputation is built on the UUPS proxy pattern. This separates two distinct concerns: ownership (immutable) and intelligence (upgradeable). As new action types emerge, as tier thresholds need recalibration, or as the protocol evolves, the engine can be upgraded without touching the token layer. Your wallet's SBT address and token ID never change.

03

No IPFS, no servers, no dependencies

Every medal — from the grey hexagon of an Unranked wallet to the platinum diamond of a Platinum holder — is generated entirely in Solidity as an on-chain SVG. The metadata lives in the blockchain itself. No external storage, no IPFS gateway that can go offline, no company server that can be shut down. Your token's artwork exists as long as Ethereum exists.

04

Dynamic art, static ownership

When you call tokenURI() for a given token, the contract reads the wallet's current score from the engine and generates the appropriate medal on the fly. This means your medal upgrades automatically as your reputation improves — Bronze becomes Silver becomes Gold — without any re-minting, gas cost, or user action. The art reflects truth in real time.

05

One token per wallet, forever

The system enforces strict uniqueness. Every wallet can hold exactly one Soulbound Token. Once issued, it cannot be transferred to another address — ever. It is not listed on marketplaces. It is not sold. It is not gifted. The wallet that earned it is the only wallet that will ever hold it. If the token is burned, a new one can be re-issued to the same wallet on their next action.

06

Behaviour is penalised, not just rewarded

Most reputation systems only track positive signals. This protocol tracks both. Defaulting on a loan costs 50 points — the single largest single-action penalty in the system. Dumping an airdrop costs 20. These are not trivial deductions. A wallet that defaults erases months of careful governance participation in a single transaction. Reputation is fragile by design.

Designed to be attacked. Built to hold.

Every state-changing function in the system follows the Checks-Effects-Interactions pattern without exception. This means all validation happens first, all storage writes happen second, and any external calls happen last.

Reentrancy guards are applied to every state-changing function in both the Engine and the Vault. The Vault is not upgradeable and has no delegate calls, eliminating a large class of proxy-related vulnerabilities. The Engine's UUPS upgrade mechanism is gated behind the owner address.

Score arithmetic is handled by a pure library with no state and no external calls. The Action enum gates all score mutations — it is impossible for any caller to supply an arbitrary integer delta. Score bounds are enforced at both the entry and exit of every calculation.

Security invariants at a glance

One SBT per wallet, ever
Enforced by a wallet-to-tokenId mapping. Any attempt to issue a second token to the same address reverts.
Transfer always reverts
The _update() hook — the lowest-level transfer primitive in OpenZeppelin ERC-721 v5 — is overridden to block any from-non-zero to-non-zero transition.
Engine address is write-once
setEngine() can only be called once. A second call reverts with EngineAlreadySet. Once set, the engine address is permanent.
Score always in [0, 1000]
The ReputationMath library clamps every result before returning it. No arithmetic operation can produce an out-of-bounds score.
All mutations follow CEI
Checks, Effects, Interactions — in that order, without exception, across all contracts.
SBT auto-issued last in CEI
The token.issue() call happens after all storage writes in recordAction(), so any theoretical reentrancy into the engine sees a fully committed post-action state.
⚠ DISCLAIMER

These contracts implement production-grade security patterns and have been thoroughly self-audited by the author. They have not undergone a formal external security audit. Do not deploy to mainnet with real funds without engaging a professional smart contract auditing firm.

Live on Ethereum Sepolia Testnet.

All contracts are verified and publicly readable on Etherscan. Interact with the proxy address for the Engine — never the implementation directly.

🛡️
ReputationToken
0x9c77Ce31a110e360d62e4eF8B1F4cf8576F70F46
ERC-5484 · ImmutableEtherscan ↗
⚙️
ReputationEngine (Proxy)
0x4eFC1adc7Dd594C4bB04865B6dCc5101392FaBD8
Use this addressEtherscan ↗
📄
ReputationEngine (Implementation)
0xC81532619d5fB4728932A43A77Bfea04c3df5957
Do not call directlyEtherscan ↗
🔒
ReputationVault
0xd53320CDEF6f3DfA54436D2806e765d6d6bD98b6
Action GatewayEtherscan ↗

Ready to build your
on-chain identity?

Connect your wallet, take your first action, and receive your Soulbound Token — automatically issued, permanently yours.

Launch App →Source Code

SEPOLIA TESTNET · ERC-5484 SOULBOUND · BUILT BY NEXTECH ARCHITECT