Docs/Build and verify

Verify it yourself

You don't have to take our word for anything. Here's how to check each claim.

The commands below use Foundry's↗ cast and plain curl. Set the RPC once:

export RPC=https://rpc.mainnet.arc.io

A tool payment settled

On any job page, each receipt line ends with settled on Arc ↗. That links to the Arc transaction in which Circle Gateway settled the payment, batched with others. The same links are in the traction report.

The vault's balances

cast call 0x589e8ec9134777acecb83a9abdf018942ddc9f2b "balances()(uint256[5])" --rpc-url $RPC

The five numbers are OPERATING, TOOLS, BOND, RESERVE and PROMO, in USDC's 6 decimals (1000000 = 1 USDC). They should match the CFO's desk on /books.

The CFO's limits

cast call 0x589e8ec9134777acecb83a9abdf018942ddc9f2b "maxMove()(uint256)" --rpc-url $RPC         # most the CFO moves alone
cast call 0x589e8ec9134777acecb83a9abdf018942ddc9f2b "epochToolBudget()(uint256)" --rpc-url $RPC # weekly cap on agent allowances
cast call 0x589e8ec9134777acecb83a9abdf018942ddc9f2b "reserveFloor()(uint256)" --rpc-url $RPC
cast call 0x589e8ec9134777acecb83a9abdf018942ddc9f2b "owner()(address)" --rpc-url $RPC           # the Boss
cast call 0x589e8ec9134777acecb83a9abdf018942ddc9f2b "cfo()(address)" --rpc-url $RPC

The CFO's decision log

Each entry is hashed with the one before it and signed by the CFO. This script re-checks every entry the API returns:

// node verify-cfo.mjs   (npm i viem)
import { keccak256, toBytes, recoverMessageAddress } from 'viem';
const { decisions } = await (await fetch('https://hiresyncly.site/api/cfo')).json();
let prev;
for (const d of decisions.reverse()) {
  const { hash, sig, ...body } = d;
  const ok = keccak256(toBytes(JSON.stringify(body))) === hash;
  const linked = !prev || body.prev === prev;
  const signer = sig ? await recoverMessageAddress({ message: { raw: hash }, signature: sig }) : 'unsigned';
  console.log(`#${d.n} ${ok ? 'hash ok' : 'HASH MISMATCH'} ${linked ? 'linked' : 'CHAIN BROKEN'} signer ${signer}`);
  prev = hash;
}

The signer should be the CFO, 0xB95dd6425d19BF09d206dc780a758e1C2EF4f1a9. When a decision moved money, its transaction's reason field carries the decision's reasonHash (shown in the entry's inputs).

A job's terms

For a paid job, the job page shows the exact terms under The terms sealed on-chain. Hash that text and compare it with the escrow:

cast keccak "<the exact terms text>"
cast call 0xde2ca0c975a1f5789f9b79fe578d43ccf417edbd "jobs(bytes32)(address,uint96,uint96,uint64,uint64,uint64,bool,uint8,bytes32,bytes32)" <escrow id> --rpc-url $RPC

The second-to-last value is specHash and must match. The escrow id is keccak256 of the order id: cast keccak <order id>.

Which keys the server runs

curl -s https://hiresyncly.site/api/health

treasury should be 0x102AdC546dAE682B7cDD9aB6d624822fdD3DC209, the address that deployed the contracts.

Something unclear or wrong? See this page's source ↗