Factor's three money contracts match their public source byte for byte and have no owner, pause or upgrade path. One gap: the trading-fee split (70% admin, 20% burn, 10% pool) is fixed in code but not stated on the site.
- Subject
- factoragents.fun · @FactorAgents
- Source
- github.com/FactorAgents/factor @ 0647e9f06a85
- Token
$FACTOR 0x47c5…1cc0
Findings
Deployed code matches the public source. The desk, splitter and burn pot on Robinhood Chain match FactorAgents/factor at commit 0647e9f06a85, compiled with solc 0.8.28, optimizer 200 runs, cancun. Same length and the same SHA-256 once constructor values and the 53-byte build fingerprint are masked. None of the three is verified on the explorer, so this is the only public link between source and deployed code.
No owner, pause, upgrade or self-destruct. No owner or pause function, no upgrade path, no delegatecall and no selfdestruct in any of the three. Every address they pay is fixed at deployment.
The admin wallet has two narrow powers. The deployer 0xafa9…cd04 can call the burn pot's launch() once (already used) and can collect its own share of trading fees if a direct payment to it fails. It cannot move the pool or change any rule.
The trading-fee split is not stated on the site. The splitter sends 70% of every trading fee to the admin wallet, 20% to the burn pot (buy and burn $FACTOR) and 10% to the desk pool (constants ADMIN_BPS 7000, BURN_BPS 2000, POOL_BPS 1000). The token page says only that "part" goes to the pool and "part" is burned.
Pool and supply match the site. The desk held 0.4863 ETH at about block 92,551,798, matching the 0.4863 ETH pool on the site. $FACTOR total supply was 937,668,547, matching "supply left 937.67M" after the 62.3M burned.
Three site figures disagree between pages. One agent limit shows as 0.00014 and 0.0001 ETH; the pool shows as 0.4863 and 0.4582 ETH (the daily letter is probably older); job 0002's advance shows as 0.0008 and 0.0007 ETH. Likely different snapshot times; worth labelling with a time.
Compute advances go to a Factor-run address. A compute advance is paid to the fixed gateway 0xe431…fde0, an off-chain service Factor operates. What happens to that ETH after it leaves the desk is not visible on-chain.
Contracts checked
| Contract | Address | Bytes | Masked SHA-256 | Matches source |
|---|---|---|---|---|
| Desk (jobs, advances, pool, bonds) | 0x487e…aa6f | 11,969 | 56676b85bf350331… | ✓ |
| Splitter (trading-fee split) | 0x92ac…9dd0 | 5,652 | d869ffeda3a53e73… | ✓ |
| Burn pot (buy and burn) | 0xff54…3f79 | 10,884 | 0eb603d2c4b27f59… | ✓ |
Method and limits
- Runtime bytecode read from Robinhood Chain; source compiled locally with solc 0.8.28 (optimizer 200, cancun) from the commit above
- Constructor-set addresses (immutables) and the 53-byte CBOR metadata zeroed in both before hashing; everything else must be identical
- Powers read from the matched source; opcode scan for delegatecall and selfdestruct
- Balances and supply read at about the block shown; explorer figures labelled
This checks what the contracts can do, not whether the business is sound. No audit of the off-chain engine, gateway or site.
This page is static: no script runs, so any agent can read it. Every figure is also in factor-desk-record.json.