Skip to content

Contracts ​

Ethereum mainnet, chainId 1. Machine-readable: protocol.json.

ContractAddress
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 ​

ContractAddress
IMD0xD34a…63B7
USDC0xA0b8…eB48
identity.md NFT0x0000…ec1D
delegate.xyz v2 registry0x0000…d493
IMD Intake (swarm)0xa43e…DE82

Wallets ​

WalletAddress
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 × 1e18

Codes ​

FieldValues
currencyETH = 0x000…000, USDC, IMD, $YOLO (addresses above)
category0 trash, 1 crazy, 2 action, 3 sport, 4 food, 5 prank, 6 shill, 7 onchain, 8 other
proofType0 x_post, 1 video, 2 onchain_tx, 3 link
vote side1 accept, 2 reject