Contracts
Ethereum mainnet, chainId 1. Machine-readable: protocol.json.
| Contract | Address |
|---|---|
| TaskVault Holds every task's money; the only address users call and approve for tasks. Forwards submissions and disputes to the desks. | 0x88c3…2493 |
| CaseDesk Submissions and the state machine (called through TaskVault). | 0xE4d4…5b57 |
| DisputeDesk Disputes, NFT votes, appeals, settlements, claims (called through TaskVault). | 0x832b…5847 |
| ParamsRegistry Protocol parameters (minimums, bonds, windows, fee split). | 0x2557…6BE9 |
| YoloToken ($YOLO) The project token, 1,000,000,000 fixed supply. | 0x49E5…15dc |
| YoloLockHub Doer stake: a $YOLO lock for 1 to 52 weeks. | 0xfC8C…fb5F |
| YoloSweetener $YOLO bonus on any open task. | 0xA716…A957 |
| YoloPredict WILL DO / WON'T DO positions in $YOLO on a task's outcome. | 0x6732…d7f7 |
| DareTrophy ERC-721 trophy of an accepted submission, 7,777 YOLO burned per mint. | 0x0F92…2bCF |
| TrophyCatalog Trophy designs per category. | 0x1B07…32b9 |
| BuybackBurner Burner: $YOLO here goes to 0x…dEaD by anyone's burnYolo. | 0xbf68…9E0A |
| DevPrices USD prices of $YOLO, ETH and IMD used only for the stake bonus (USDC = $1). | 0xE1A0…4A26 |
| HiddenList The site's hide list. Holds no money. | 0xf88c…2Fe6 |
| ProtocolDirectory List of core versions. Holds no money. | 0x0fA6…fF2b |
| VotePower Who may vote with an NFT (owner or delegate.xyz v2 delegate). | 0xEac6…09b8 |
| TextRules Text, link and proof format checks. | 0xAdfe…3B7F |
| SwarmQuestionBuilder Builds the question body sent to the swarm. | 0x6b49…3881 |
| AttestationChecker Checks the swarm's EIP-712 attestation. | 0x88eB…CCf9 |
| UniswapV3SwapAdapter Pays IMD bonds from ETH or USDC through Uniswap v3. | 0xA919…236d |
| MerkleDistributor Part of the $YOLO launch. | 0xD877…8A5D |
| PoolInitializationGuard Hook of the YOLO/IMD Uniswap v4 pool. | 0x784F…6000 |
External
| Contract | Address |
|---|---|
| IMD | 0xD34a…63B7 |
| USDC | 0xA0b8…eB48 |
| identity.md NFT | 0x0000…ec1D |
| delegate.xyz v2 registry | 0x0000…d493 |
| IMD Intake (swarm) | 0xa43e…DE82 |
Wallets
| Wallet | Address |
|---|---|
| Treasury receives the fee share for the treasury and the first-hour tax | 0x3c58…E48C |
| Buyback wallet receives the burn share of fees paid in ETH, USDC and IMD | 0x027E…dF6E |
| Dev may cancel an open task (cancelTask); takes nothing | 0x8Ad1…A981 |
Write functions (TaskVault)
Call everything on TaskVault. Submission and dispute functions are forwarded to the desks with the original sender.
solidity
createTask(address currency, uint256 amount, uint64 deadline, string title,
(string task, string proof, string noIf) rules, uint8 category,
uint8 proofType, string cover, ImdPay payIn) payable → taskId
topUp(uint256 taskId, uint256 amount, ImdPay payIn) payable
withdrawContribution(uint256 taskId)
submit(uint256 taskId, string proofUri, (string screenshotUrl, string note) evidence,
uint256 minReward, uint256 maxBondRew, ImdPay payIn) payable → subId
claimVoidSubmission(uint256 subId)
dispute(uint256 subId, string reason, string disputerProofUri, ImdPay payIn) payable
vote(uint256 subId, uint8 side, address payTo, uint256[] tokenIds)
appeal(uint256 subId, uint256 maxImdIn, ImdPay payIn) payable
askAppealSwarm(uint256 subId, (string task, string proof, string noIf) rules)
callSwarm(uint256 subId, bool sidesDoer, uint256 maxImdIn, ImdPay payIn,
(string task, string proof, string noIf) rules) payable
claimDisputer(uint256 subId)
claimVoterReward(uint256 subId, address payTo)
claimVoterRewards(uint256[] subIds, address payTo)
poke(uint256 taskId) // plays the timers; anyone
withdraw(address token) // take credited money; ETH = address(0)
withdrawTo(address token, address to)ImdPay = (address tokenIn, uint256 amountIn, uint256 minImdOut, uint64 deadline, bytes route). amountIn = 0: IMD is pulled by transferFrom (approve first). Otherwise amountIn of ETH or USDC is swapped to IMD through Uniswap v3 with your minImdOut.
Read functions (TaskVault)
solidity
taskCount() → uint256
getTask(uint256 taskId) → Task
statusOf(uint256 taskId) → uint8 // 0 None, 1 Open, 2 Completed, …
potOf(uint256 taskId) → uint256
getContribution(uint256 taskId, address who)
quoteSubmission(uint256 taskId) → (uint256 imd, uint256 rew) // doer bond now
getSubmission(uint256 subId) → Submission
submissionCount() → uint256
stepDeadline(uint256 subId) → uint256
getDispute(uint256 subId) / getAppeal(uint256 subId) / getSettlement(uint256 subId)
tally(uint256 subId) / votesOf(uint256 subId, address payTo) / tokenVoted(uint256 subId, uint256 tokenId)Modules
text
YoloSweetener: sweeten(taskId, amount) · withdraw(taskId) · payout(taskId) · claimVoter(taskId, payTo)
YoloPredict: predict(taskId, willDo, amount) · settle(taskId) · claim(taskId) · resolution(taskId)
YoloLockHub: lock(add, weeks) · withdraw() · power(who) · powerAt(who, t)
DareTrophy: mint(subId, title) · price() · tokenURI(subId)
BuybackBurner: burnYolo() · forward(token) · balances()
HiddenList: vote(vault, kind, id, hide, tokenIds) · status(vault, kind, id)
ParamsRegistry: currentVersion() · core(version) · newTasksPaused()
DevPrices: priceOf(token) → USD × 1e18Codes
| Field | Values |
|---|---|
| currency | ETH = 0x000…000, USDC, IMD, $YOLO (addresses above) |
| category | 0 trash, 1 crazy, 2 action, 3 sport, 4 food, 5 prank, 6 shill, 7 onchain, 8 other |
| proofType | 0 x_post, 1 video, 2 onchain_tx, 3 link |
| vote side | 1 accept, 2 reject |