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.

…
Paid
-
in full
Limited
-
capped, rest held
Scheduled
-
MEDIUM, paid in tranches
Held
-
nothing sent
USDC released
-
Invoices
-

Add invoice

Any Arc address. Try our own wallet 0xc742…960c (LOW, pays out) or the sanctioned Ronin exploiter 0x098b…2f96 (HIGH, held).


Run agent now

Dev convenience: triggers one tick of POST /api/internal/treasury with your CRON_SECRET. Pending invoices are screened and settled.

StatusPayeeAmountPaid / heldTierReasonDecisionTxWhen

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.