Contracts
Mainnet addresses, the rewards vault interface, settlement rules, and verification commands.
Auteur uses one reward vault contract in addition to the existing $AUTEUR ERC-20 token.
Mainnet deployments
| Contract | Address |
|---|---|
| $AUTEUR token | 0x90d54D77453286d30db891d729A0E18ba7081b07 |
AuteurRewardsVault | 0x665c9e6e9Cd2aB5c63C2c24BA511907D2449277F |
Deployment parameters for the vault:
| Property | Value |
|---|---|
| Network | Ethereum Mainnet |
| Token | 0x90d54D77453286d30db891d729A0E18ba7081b07 |
| Genesis timestamp | 1786302898 |
| Genesis UTC | 2026-08-09 19:14:58 UTC |
| Epoch duration | 172800 seconds |
| Token unit | 10^18 |
| Maximum settlement batch | 250 recipients |
What is onchain
The vault stores:
- the $AUTEUR amount claimable by each Ethereum address;
- the total outstanding claim liability;
- the amount credited in each epoch;
- whether an epoch has been finalized;
- processed batch identifiers;
- default and overridden epoch ceilings;
- settlement pause state.
What stays offchain
The contract does not store:
- Farcaster FIDs;
- cast hashes;
- recasts;
- moderation decisions;
- author/curator role labels;
- discovery evidence;
- per-cast reward calculations.
Before broadcasting, the backend aggregates the deterministic ledger by Ethereum recipient address. The vault only receives addresses and final amounts.
Public read methods
token() returns (address)
genesisStart() returns (uint64)
currentEpoch() returns (uint256)
epochCeiling(uint256 epochId) returns (uint256)
epochCredited(uint256 epochId) returns (uint256)
epochFinalized(uint256 epochId) returns (bool)
claimable(address account) returns (uint256)
totalOutstanding() returns (uint256)
availableSurplus() returns (uint256)
settlementsPaused() returns (bool)
admin() returns (address)
pendingAdmin() returns (address)User method
claim() returns (uint256 amount)claim() transfers the caller's entire accumulated claimable amount. It first clears the liability in contract state, then transfers $AUTEUR to the caller.
Funding and settlement methods
fund(uint256 amount)
creditRewards(
uint256 epochId,
bytes32 batchId,
address[] recipients,
uint256[] amounts
)
finalizeEpoch(uint256 epochId)Anyone can fund the vault after approving $AUTEUR. Only the current admin can credit rewards or finalize an epoch.
Reward credits are rejected when:
- the epoch has not ended;
- the epoch is already finalized;
- the batch ID was already processed;
- the batch exceeds 250 recipients;
- the credit would exceed the epoch ceiling;
- the vault lacks enough tokens to cover total outstanding claims;
- settlement is paused.
Admin controls
setEpochCeiling(uint256 epochId, uint256 ceiling)
setSettlementsPaused(bool paused)
withdrawSurplus(address recipient, uint256 amount)
transferAdmin(address newAdmin)
acceptAdmin()Admin transfer is a two-step process. The vault is not an upgradeable proxy.
withdrawSurplus can move only tokens above totalOutstanding. Tokens backing already credited user claims cannot be withdrawn through that method.
Verify contract state
With Foundry installed, anyone can read the deployed state through an Ethereum RPC:
export ETHEREUM_RPC_URL="https://your-ethereum-rpc.example"
export AUTEUR_TOKEN="0x90d54D77453286d30db891d729A0E18ba7081b07"
export AUTEUR_VAULT="0x665c9e6e9Cd2aB5c63C2c24BA511907D2449277F"
cast call "$AUTEUR_VAULT" "token()(address)" \
--rpc-url "$ETHEREUM_RPC_URL"
cast call "$AUTEUR_VAULT" "genesisStart()(uint64)" \
--rpc-url "$ETHEREUM_RPC_URL"
cast call "$AUTEUR_VAULT" "currentEpoch()(uint256)" \
--rpc-url "$ETHEREUM_RPC_URL"
cast call "$AUTEUR_VAULT" "totalOutstanding()(uint256)" \
--rpc-url "$ETHEREUM_RPC_URL"
cast call "$AUTEUR_VAULT" "availableSurplus()(uint256)" \
--rpc-url "$ETHEREUM_RPC_URL"
cast call "$AUTEUR_TOKEN" "balanceOf(address)(uint256)" "$AUTEUR_VAULT" \
--rpc-url "$ETHEREUM_RPC_URL"To inspect one recipient:
cast call "$AUTEUR_VAULT" "claimable(address)(uint256)" 0xRECIPIENT \
--rpc-url "$ETHEREUM_RPC_URL"