company · guarded payouts · GuardedTreasury
Guarded Payouts
A treasury agent that cannot pay a tainted address. Every payout is screened by CompliR; the contract enforces the verdict.
Run agent now
Dev convenience: triggers one tick of POST /api/internal/treasury with your CRON_SECRET. Pending invoices are screened and settled.
| Status | Payee | Amount | Paid / held | Tier | Reason | Decision | Tx | When |
|---|---|---|---|---|---|---|---|---|
Loading… · refreshes every 15s · agent runs every 60s (worker/treasury.ts or cron → /api/internal/treasury)
Why the hold cannot be bypassed
The agent only proposes a payment. GuardedTreasury.release(payee, amount) asks the on-chain AttestationRegistry whether the payee's current CompliR tier is at most MEDIUM and still valid, and reverts otherwise. A HIGH-tier address has no valid attestation at or below that tier, so even a buggy, compromised or over-eager agent - or the treasury owner calling the contract by hand - cannot move the USDC. The decision is enforced by the contract, not by the agent's judgement.
// contracts/src/examples/GuardedTreasuryV2.sol
function releaseWithProof(address payee, uint256 amount, bytes32 decisionHash) external onlyOwner {
require(compliR.isAllowed(payee, maxTier), "CompliR: payee tier too high"); // ← the tier gate
require(registry.recordOf(payee).decisionHash == decisionHash, "CompliR: decisionHash mismatch"); // ← the proof
token.safeTransfer(payee, amount);
emit ReleasedWithProof(payee, amount, decisionHash, tier);
}Proof of screening: every payment names the exact verdict it was approved under - the decisionHash chip on a PAID row is the keccak256 of that verdict's signed decision JSON, and the contract only pays if the registry on Arc holds that same hash for the payee, so theReleasedWithProof event binds the USDC transfer to one replayable screening.
Off-chain, a MEDIUM payee is not paid in one shot: the agent proposes a schedule - one third now, one third once the counterparty answers the Enhanced Due Diligence request and still re-screens at most MEDIUM, the rest after seven quiet days; a HIGH re-grade cancels what is left. Every decision (including holds and cancelled tranches) is appended to the hash-chained decision ledger with the signed verdict.