Implemented contract models
Cardinal currently has two separate ERC-20 escrow implementations:
Milestone schedules, per-escrow custom policies, appeals, a production arbitrator network, and DAO governance are product roadmap layers and are not described here as live contract functionality.
Protected settlement flow
Participants and authority
Escrow lifecycle
Released and Refunded escrows cannot be processed again.
Create and fund escrow
createEscrow. The contract requires:
- A non-zero seller address
- A non-zero ERC-20 token address
- An amount greater than zero
- An acceptance deadline later than the current block timestamp
- Sufficient token balance and allowance
Created status.
Seller acceptance
acceptanceDeadline.
Acceptance changes the status to Accepted and stamps a releaseDeadline using the contract’s current release-window configuration. The release window is bounded on-chain between one hour and 30 days.
An escrow already accepted keeps its recorded release deadline if the global release-window setting later changes.
Buyer release
Accepted escrow. The buyer may release before or after the recorded deadline, provided the escrow has not moved into dispute or another terminal state.
On release:
Refund before acceptance
Created. The full locked amount returns to the buyer and no settlement fee is charged.
Once the seller accepts, the buyer must use release or dispute rather than the pre-acceptance refund path.
Seller claim after timeout
- The escrow remains
Accepted - The release deadline has passed
- Neither party moved it into dispute
Raise a dispute
Accepted escrow on or before the release deadline. The status becomes Disputed, preventing buyer release and timed seller claim.
Dispute creation moves no funds and remains callable while the contract is paused. This preserves the parties’ ability to stop settlement during the release window.
Resolve a dispute
Disputed escrow.
The current contract uses one resolver address. A production deployment should point that authority to an approved multisignature or controlled resolver system rather than an undocumented personal key.
Read escrow details
Use this contract response as the source of truth for UI state and available actions.
Fees
Multisig Escrow
The separate Multisig Escrow contract supports higher-value ERC-20 settlement requiring a configurable threshold of authorised approvers.
An approver cannot approve the same escrow twice. The contract prevents reducing the approver set below the active threshold.
The current Multisig Escrow uses a global authorised approver set and global release threshold. Do not describe it as a buyer-selected panel, milestone engine, or per-escrow approval policy.
Contract events
Applications can index events for history and notifications, but should confirm the current state through the contract before offering an action.
Application safeguards
- Run the Protection API before token approval and escrow funding.
- Bind the verdict to the exact buyer, seller, network, token, amount, deadline, and contract.
- Never continue from
BLOCK. - Require explicit acknowledgement for
REVIEW. - Verify network, proxy address, implementation address, token address, and ABI for the selected environment.
- Display the active fee and every deadline before wallet confirmation.
- Use on-chain timestamps rather than only local countdowns.
- Read contract state before release, refund, claim, dispute, or resolution.
- Prevent duplicate wallet submissions.
- Keep API credentials and administrative keys out of frontend code.
- Wait for confirmed transactions before displaying a terminal status.
Current production boundary
Before unrestricted mainnet use, Cardinal must complete and publish the intended deployment configuration, verified proxy and implementation addresses, ABI, supported tokens, fee policy, role owners, dispute operating policy, monitoring and incident procedures, and external security review status.Protection API
Run the required risk decision before escrow funding.
SafeSend
Review the delayed cancellable transfer flow.

