Otsukai's own endpoints take payments now: a stock quote for $0.01, a holdings read for $0.02.
Protocol
Contracts and security
Three contracts on chain 4663, Solidity 0.8.28, OpenZeppelin 5.4, with no admin over accounts and no upgrade path.
Contracts
| Contract | Role | Address |
|---|
| OtsukaiFactory | Creates accounts (ERC-1167 clones). Sets the fee vault once. No other power. | 0x4ae34E501263f36A63A5396CE985707C7518d33C |
| OtsukaiAccount | One per user. Holds USDG, keys, payees; runs pay(). | clones of the factory's implementation |
| OtsukaiStake | Stake OTSU, earn USDG and ETH. Deployed after the token. | |
Refusals
pay() reverts with a named error, so the reason is readable in any explorer:
| Error | Meaning |
|---|
AccountPaused | The owner paused the account. |
AgentInactive | The signer is not an active key (revoked, never added, or a forged signature). |
AgentExpired | The key is past its expiry. |
PayeeNotAllowed | The payee is not on the allow-list. |
OverPerCallCap | The amount is above the key's cap. |
OverDailyLimit | The key would pass its daily limit. |
NonceUsed | The payment was already settled (replay). |
PaymentExpired | The payment's validBefore has passed. |
What you trust
- The contract code. It is short and covered by unit, fuzz and mainnet-fork tests, including every refusal above.
- USDG. Paxos can freeze any address, including an account or the vault.
- Your agent's machine, up to the limits you set.
You do not trust Otsukai with your funds: the factory owner cannot touch an account, and the facilitator can only submit payments your key signed.
External addresses