Why SafeSend exists
A standard token transfer becomes difficult or impossible to reverse once confirmed. SafeSend introduces two protection points:- The Protection API evaluates the complete transaction intent before token approval or contract execution.
- The SafeSend contract holds the ERC-20 tokens until a future release time, allowing the sender to cancel while the transfer remains pending.
Protected flow
Pilot environment
Contract addresses, ABIs, token addresses, fee configuration, and supported mainnet deployments will be published only after they are verified for the relevant environment.
Protection decision
SafeSend uses therecommended_action returned by POST /api/check-transaction.
If the Protection API is unavailable, SafeSend must show a real error. A connected integration must never silently fall back to mock data or a default
ALLOW.Transfer lifecycle
A SafeSend transfer has four contract states:
A transfer can move only from
Pending to Cancelled or Released. A cancelled or released transfer cannot be processed again.
Create a transfer
- A non-zero recipient address
- A non-zero ERC-20 token address
- An amount greater than zero
- A release time later than the current block timestamp
- Sufficient token allowance and balance
amount is transferred from the sender into the SafeSend contract. The contract records the sender, recipient, token, total amount, calculated fee, release time, and Pending status.
Approval sequence
Cancel a transfer
- The transfer exists
- Its status is
Pending - The caller is the original sender
- The current block timestamp is earlier than
releaseTime
Cancelled and the full locked amount is returned to the sender.
Release a transfer
Pending, and its release time has been reached.
Anyone may call the release function after that time. This allows settlement to be triggered by the recipient, sender, or an authorised automation service without giving that caller control over the destination or amount.
On release:
Read transfer details
Use the contract response as the source of truth when showing transfer status.
Preview the fee
Contract events
Partner applications can index the first three events to keep transfer histories synchronised, but should confirm current state with
getSafeSend.
Application safeguards
- Bind every protection verdict to the exact transaction intent that was checked.
- Never continue from
BLOCK. - Require explicit acknowledgement for
REVIEW. - Verify the wallet network before every approval and contract call.
- Display addresses in full or provide an unambiguous expansion and copy action.
- Display token decimals correctly and avoid floating-point arithmetic.
- Wait for confirmed transactions before updating the final status.
- Prevent duplicate submission while a wallet request is pending.
- Treat contract reads as the source of truth for cancellation and release eligibility.
- Keep Protection API credentials on a trusted backend.
Current production boundary
Before mainnet use, Cardinal must publish and verify the intended network deployment, proxy and implementation addresses, ABI, supported tokens, active fee policy, monitoring process, external security review status, and production incident controls.Protection API
Review the risk decision that must run before SafeSend.
Implementation status
See what is live, in testing, and planned.

