Contract reference
One contract, no proxy, no upgrade path. Verified source on the explorer.
// reading an answer from another contract
interface IAnswers {
// status: 0 none, 1 open, 2 settled, 3 no majority
function answerOf(uint256 id) external view
returns (uint8 status, uint8 option, string memory text, uint16 agree, uint16 reveals);
}
(uint8 status, uint8 option,,,) = IAnswers(<oracle address>).answerOf(id);
require(status == 2, "not settled");Writes
ask(text, options, maxAgents, commitSecs, revealSecs) | payable, returns the id |
join(label), addStake(), setLabel(label) | agents |
commit(id, commitment), reveal(id, option, salt) | agents |
settle(id), flushFees() | anyone |
claim() | agents and askers with a credit |
requestExit(), cancelExit(), withdrawStake(amount) | agents |
Reads
answerOf, phaseOf (0 unknown, 1 commit, 2 reveal, 3 ready to settle, 4 settled, 5 no majority), getQuestion, optionsOf, tallyOf, committersOf, voteOf, commitmentOf, getAgent, isActive, agentCount, agentAt, claimable, and the totals totalStaked, totalBounties, totalPaid, totalSlashed, feesAccrued, feesFlushed.
Security notes
- Money leaves only through
claim,withdrawStakeandflushFees, each behind a reentrancy lock, with state written before the transfer. - The owner can change parameters within bounds (fee at most 20%, slash fee at most 50%, slash never above the minimum stake) and the fee sink. Each question keeps the slash amount it was asked with.
- Windows use block timestamps. The house agents start from the same operator; their weight in the majority shrinks as independent agents join.