NARUDocsv0.1
PlannedAnything without a badge works today. Only what does not yet is marked.

Docs

The budget goes in first, the rules are hashed on-chain, and the contract pays out once a result is verified.

v0.1 · 2026-08-27

Overview

A settlement layer that only releases what has been verified#

The advertiser deposits the budget into the contract before the campaign starts. The rules that decide payout are hashed on-chain at the same moment and cannot be changed afterwards. When a result is verified, the contract executes the payout; there is no separate approval step for the advertiser.

Escrow
The full budget moves into the contract the moment a campaign opens
Fixed rules
Payout criteria are hashed at creation time
Automatic payout
Once the condition is met, funds leave without human approval
Gas
Creators never send a transaction
Refund
The advertiser can only reclaim after the deadline plus the claim grace period
This runs on GIWA Sepolia today. It is a testnet, and the token is a test ERC-20. Mainnet is not deployed yet.
Overview

Why performance-based deals never took hold#

Performance-based deals never took hold in influencer marketing because of enforcement, not measurement. The conditions were measurable; what was missing was a way to force payment to follow them.

01
Nothing enforces the deal
No guarantee the money arrives, and none that the post goes up
Where NARU cuts the loop — the deposit is the enforcement
02
Performance deals are unusable
With no way to bind a condition, the only choice left is pay-first or pay-later
03
Price is set by follower count
With results unpriceable, the visible number becomes the price
04
Follower counts get inflated
Once money attaches to a number, whoever manufactures the number wins
And back to the start. Inflated numbers make results untrustworthy, and untrusted results mean nobody pays up front.
Each box feeds the next. Fixing any one of them alone does not stop the loop.
LinkWhat actually happens
Advertiser → creatorPay up front and the post may never go up. So they insist on paying later
Creator → advertiserThe work ships, then payment is refused because “it isn't our tone”
Across bordersA contract exists but suing is impractical. Recovery costs more than the deal

A contract only starts working after a dispute has happened, so it does not address any of the three. NARU deposits the funds in advance and pays out with no separate approval once the condition is met.

Overview

From deposit to payout#

What actually happens over one campaign. Every step leaves a record on-chain.

  1. 01
    Deposit
    The advertiser opens a campaign and moves the full budget into the contract. Without the deposit the campaign does not open.
  2. 02
    Publish
    Title, rules and payout terms go on-chain as a signed record (an attestation) from the advertiser's own wallet, so readers can verify them without trusting our server.
  3. 03
    Join
    A creator is checked against the eligibility rules and joins. Those rules were fixed at deposit time and cannot change.
  4. 04
    Review
    The draft is checked against the rules before it goes up. A draft that passes is not reversed after publication.
  5. 05
    Observe
    The server reads the published post itself and re-runs the same rules that are pinned on-chain.
  6. 06
    Payout
    The oracle posts the verdict on-chain and the contract computes and sends the amount. The creator pays no gas.

Whose turn it is

01
Deposit
02
Publish
03
Join
04
Review
05
Observe
06
Payout
Advertiser
Creator
Oracle
On-chain
Acts in this stepInvolved
Four parties split the same six steps. There is no cell where the creator sends a transaction.
Protocol

How the payout amount is computed#

The contract has no idea what an app install or 500 reposts means. Whether the condition was met is decided outside; the contract only turns that result into an amount.

amount = min(verified units, remaining cap) × unit price

That is why a new campaign type does not require redeploying the contract. Register an attestation schema and it works.

Order of checks on payout

  1. 01Campaign validity — not cancelled, within deadline plus grace, term exists
  2. 02Verification path
  3. 03Eligibility — only when the campaign has joining rules
  4. 04Frozen or not
  5. 05Clamp units — up to the per-creator remaining cap
  6. 06Compute the amount
  7. 07Clamp budget — up to the term's remaining budget
  8. 08Write state — units claimed, spent, attestation marked used
  9. 09Transfer

Step 2 — the verification path forks

Payout request
If a verifier is named
That verifier decides
Handed off to whatever path the item names, such as a direct on-chain read
If none is named
The attestation is checked
The default path. The contract clears nine checks before it lets anything through
From here the two paths are identical — eligibility, frozen state, unit clamp, amount, budget clamp, state write, transfer.
Of the nine checks, this is the only one that forks.

Steps 5 and 7 — it is clamped twice

Check 5 — clamp the units
Verified units
Cap left for this creator
min
Units paid
Verify more than the cap and only what is left goes through
Check 7 — clamp the amount
Units paid × unit price
Budget left on the term
min
Amount transferred
Once the budget runs dry, less goes out than the formula computed
The one-line formula hides the second clamp. After the multiplication it is cut again by the term's budget.
Step 8 (state) runs before step 9 (transfer). That ordering blocks reentrancy, and a guard is applied on top.
Protocol

Creating a campaign#

What an advertiser decides when creating a campaign, and which of those cannot change afterwards. The last step takes two signatures; the deposit lands and the payout criteria are fixed at that moment.

Seven steps

  1. 01
    Goal
    Pick what you want out of the campaign first. That choice pre-fills the payout items, unit prices and verification paths in the later steps.
  2. 02
    Campaign details
    Name, product, run dates, number of seats. The name and description go on-chain so creators can verify them.
  3. 03
    Targeting
    Open to everyone, or gated on eligibility rules. This is the only step where those rules can be set.
  4. 04
    Settlement token
    Which token pays out. For tokens whose price moves, the amount is locked at the moment of deposit.
  5. 05
    Payout items
    What you are buying and at what price. The sum of the item budgets is the amount you deposit.
  6. 06
    Brief
    Required lines, banned phrasing, tone, retention obligations. Both the draft review and the payout verdict run against this text.
  7. 07
    Review and deposit
    Two signatures — a token approval and the campaign creation. After the second, the full budget sits in the contract.

Fixed at the moment of deposit

The path for an advertiser to rewrite terms after the fact is structurally closed. The originals live off-chain and only the hash goes on-chain, so either party can take the original, recompute the hash and compare.

ValueFixed atChangeable after
Payout rulesWhen the campaign opensNo
Eligibility rulesWhen the campaign opensNo — there is no setter at all
BudgetWhen the campaign opensIncrease only
Per-item draft criteriaWhen the item is addedNo

The claim grace period

The deadline passing does not let the advertiser reclaim immediately. With a 30-day attribution window, results near the deadline are verified late. Without a grace period the advertiser could sweep the unspent budget right after the deadline, leavinga creator who delivered but was not paid. The grace period is therefore set longer than the attribution window (30 days or more recommended).

Campaign running
start → deadline
Results count
Payout
Advertiser refund
Claim grace
deadline → grace ends
Results count
Payout
Advertiser refund
Closed
after the grace period
Results count
Payout
Advertiser refund
A conversion just before the deadline is judged this far out. The grace period is set longer than that.
Payouts keep running past the deadline. What the deadline stops is counting new results; refunds open later still.
Protocol

Verification paths and the trust model#

Bringing an off-chain fact on-chain means somebody has to look and assert it. So the question is not whether trust can be removed but how far it can be reduced per item. NARU is designed so the verification path is swappable per payout item.

Guaranteed by the contract

  • A campaign cannot open without the deposit
  • Rules cannot change after creation
  • The advertiser cannot reclaim before the grace period ends
  • The same verdict cannot be spent twice

The verification path is swappable per item

Each payout item names a verifier. If none is named, the default path is used. Swapping the verifier does not require redeploying the contract — it is one field on the item.

Payout item
One priced unit — an app install, trading volume, a post
Verifier
Oracle verdictAvailable
One oracle's verdict has to be trusted — the default path today
One party
M-of-N signaturesPlanned
M of N parties would have to collude to flip a verdict
Several
Zero-knowledge proofPlanned
Proves the condition was met without revealing the source
A proof
Direct on-chain readPlanned
The contract reads the chain itself — nothing is left to trust
None
One socket per payout item. Trust shrinks going down the list.
Starting with Web3 KOLs helps here. The results they produce — wallets created, deposits, trading volume — are mostly already on-chain. Attaching the direct on-chain read means the oracle is no longer trusted for those items at all. What is left for the oracle is web data (commerce orders, app installs), and that path moves to M-of-N.

How a verdict on the default path can be checked

Rules hash
Proves the rules were not changed after the fact
Source hash
Pins the source used for the verdict, so a third party can re-fetch it and compare
Source kind
Records whether it came from an official API or was scraped
Revocation
A verdict can be revoked if fraud surfaces later, and the revocation is itself on the record

What still needs trust

Oracle
For items on the default path, it judges that a condition was met. NARU operates it today. The four devices above let a verdict be reproduced and checked, but they do not make the verdict for you.
In the implementation this role is called the attestor. It issues each verdict as an EAS attestation, and the contract runs nine checks on that attestation before paying.
Protocol ownerPlanned
Upgrade rights are effectively withdrawal rights. A multisig and timelock are required before mainnet.
Reference

Contracts and network#

Source is verified for all of them. You can read them on the explorer.

Network
GIWA Sepolia
Chain ID
91342
RPC
https://sepolia-rpc.giwa.io
Explorer
https://sepolia-explorer.giwa.io
CampaignEscrow
Holds the budget and executes payouts
0xD8D6…6251Explorer ↗
Test token
Testnet ERC-20
0xdB2d…9F3fExplorer ↗
EAS
Attestation registry (chain-native deployment)
0x4200…0021Explorer ↗
Reference

Verifiable items#

The payout items a campaign can use, and where NARU reads each result from. Items with no verification path yet are marked as planned.

ItemUnitVerified fromSupport
Content post
Flat fee once it goes up per the brief
postthe post itselfAvailable
Purchase
Paid per order that came through the discount code
orderShopify order dataPlanned
Post kept up
Balance paid if it stays up for the set period
postPeriodic check of the public URLPlanned
App install
Paid per confirmed install
installApp attributionPlanned
New wallets
Paid per wallet created that is still around after a set period
walletOn-chainPlanned
Deposits brought in
Based on deposits from your referral
$KOn-chainPlanned
Trading volume
Cumulative volume from users you brought
$KOn-chainPlanned
Visitors
Sessions that arrived through the link
K sessionsNARU link serverPlanned
Follower growth
Paid per follower gained and kept during the campaign
followerX profile · period comparisonPlanned
Reach and saves
Post reach and save counts
K reachX post metricsPlanned