Documentation
Pyris Pact: Programmable B2B Payments
A platform for businesses that pay freelancers, vendors, or agencies automatically, on conditions both sides agreed to, settled on Arc Chain.
01 · Overview: Programmable B2B Payments
Pyris Pact is programmable payment infrastructure built for business entities: agencies, software houses, B2B marketplaces, and international contractors.
In a conventional cross-border engagement, money is held back by two opposing risks:
- Client / agency: reluctant to wire a large deposit to an unproven vendor or freelancer, because they might be ghosted.
- Freelancer / vendor: reluctant to hand over final code or assets before funds are guaranteed, because the invoice might never be paid.
Pyris Pact removes both with smart contract escrow on Arc Chain: the funds sit safely on the blockchain and are only disbursed once the deliverable is approved.
Real-World Example: Agency & Freelancer
A typical engagement:
An agency hires a freelancer to build a landing page and a smart contract for $5,000 USDC:
- Lock the funds: the agency creates a Pact in the dashboard and deposits $5,000 USDC into the escrow contract on Arc Chain.
- Work begins: the freelancer can verify onchain that the full $5,000 USDC is locked in the contract and cannot be withdrawn unilaterally.
- Submit the deliverable: the freelancer finishes the work and records proof of delivery (a GitHub PR or Figma link) in the contract.
- Approve and release: the agency reviews the work, is satisfied, and clicks “Release Funds”.
- Instant settlement: $5,000 USDC lands in the freelancer’s wallet in under a second with a 0% platform fee, saving roughly $1,000 compared with Upwork or a conventional escrow service.
Smart Contract Escrow Architecture
Escrow is managed entirely by PyrisPact.sol. No third party and no platform operator can take or redirect funds while they are locked.
// Create and fund a new milestone escrow
function createPact(
address vendor,
address arbiter, // optional; address(0) for mutual settlement only
uint256 amount,
uint256 deadline,
string calldata title,
string calldata description
) external payable returns (uint256 pactId);When the client calls it, the USDC is pulled from the client’s wallet and locked in the contract with status FUNDED (0).
Conditional Release upon Approval
The contract enforces the principle of payment after approval:
- Contractor submits proof: via
submitWork(pactId, note), moving the status toSUBMITTED (1). - Client approves: only the client’s wallet (
pact.client) may callreleaseFunds(pactId). - Automatic disbursement: the contract atomically transfers 100% of the USDC to the contractor and sets the status to
RELEASED (2).
Invoice & Milestone Payment Tracking
Pyris Pact doubles as a permanent onchain payment tracker. Every Pact has an identifier (pactId), a creation timestamp, a deadline, the deliverable note, and a verifiable status. Every state change is an event on Arc, so both parties can audit the full history through the block explorer.
Why Arc Chain & Native USDC Gas
Arc Chain (Circle’s EVM Layer-1) is the natural home for B2B payments because it uses USDC as the native gas currency.
On most blockchains a business must first buy a volatile token such as ETH just to pay for gas. On Arc Chain:
- The client holds USDC and pays a fraction of a cent in USDC for gas.
- The contractor receives clean USDC with no price exposure.
- Company bookkeeping stays simple: everything is denominated in US dollars.
Timeout Refunds & Contractor Guarantees
What happens when one side stops responding?
- Client protection (timeout refund): if the deadline passes and the contractor has not submitted a deliverable, the client may call
refund(pactId)to reclaim 100% of the USDC. - Voluntary cancellation: the contractor may trigger a refund at any time to return the funds to the client, for example when the scope changes.
- Disputes: if the deliverable does not match the scope, either party can set the status to
DISPUTED (4). The escrow is frozen and can only be settled by a split both parties agree on (proposeResolution), or by the ruling of an arbiter if one was named when the Pact was created. - Late submissions are rejected: the contractor cannot call
submitWorkafter the deadline, so the client’s refund right cannot be pre-empted. The client can grant more time withextendDeadline. - Payouts cannot be blocked: if a recipient wallet rejects the transfer, the amount is credited to
pendingWithdrawalsand can be claimed at any time withwithdraw().
Using the Dashboard
Open the Pact Dashboard to create a new escrow, track incoming and outgoing milestones, and approve payouts directly from your wallet.