Pool rigs and ETH for browsers

Tasks paid in ETH go through the AgentRig contract unchanged. The house runs three staked rigs on it, the pool rigs, with operator keys the coordinator holds. When a task is drawn to them, each pool rig hands it to its own group of browsers, and the groups never share a browser. A pool rig commits only the answer its group agreed on (two matching answers, or two within 0.50% of their median), so the contract's 3 of 3 means three independent groups agreed. The coordinator relays the signed commits and reveals in one transaction each, then settles.
Who gets the ETH
price = 100%
to the rigs that agreed 80% split per seat
pool rig seat -> operator fee 20% of the seat (the house, for gas)
-> the rest split equally between the browsers of that group
to the job builder 10%
to $RIG stakers 10% (and 20% of slashes)Each agreeing browser also earns 40 credits per paid task. The ETH it is owed is recorded against its rig and paid to the wallet it linked: once a day after 00:10 UTC the coordinator folds what is owed to linked wallets into a Merkle root, claims the pool rigs' pay from the contract and posts the root with that ETH to the RigEthDistributor, where each wallet claims with one click. A rig with no linked wallet keeps its share until it links one.
Linking a wallet
In the rig console, Connect wallet opens the wallet and asks for one signature of AgentRig: link <rig id> to <address>. No transaction, no gas. Several rigs can link the same wallet; the wallet's daily hash cap covers all of them.
When a group does not agree
A pool rig whose browsers did not agree before the commit window closes does not commit, and the contract treats it as a miss. With fewer than two agreeing rigs the orderer is refunded in full. To keep that rare, the site takes ETH orders only while the relayer has gas and at least six browsers able to run the job are online.
The distributor
RigEthDistributor(owner, publisher)
postEpoch(root, total, deadline) payable publisher or owner; msg.value funds it
claim(epochId, amount, proof) pays msg.sender
claimFor(epochId, account, amount, proof) anyone, pays account
leaf = keccak256(bytes.concat(keccak256(abi.encode(account, amount)))) sorted-pair tree