NonCustodialEscrow

Whitepaper · ProofRail by Talley IT LLC

A buyer-controlled, non-custodial payment escrow. Every claim in this document maps to a receipt you can verify yourself — a line of code, a passing test, or an on-chain transaction. Don't trust us. Check it.

⚠️ Testnet demo. This runs on Base Sepolia, a public test network — a working proof-of-concept, not a production system. No real money has moved through it. Mainnet use requires a professional security audit and a money-transmission review first; neither is a smart-contract question.

What it is

A smart-contract escrow for ETH or any ERC-20. A buyer locks funds earmarked for a seller, with a refund window:

There is no operator, no admin, no pause, no upgrade. No key held by anyone — including the deployer — can move a user's money. The buyer, and only the buyer, controls their deposit.

Guarantees — and the receipt for each

The claimHow the code enforces itReceipt
Non-custodial — only the buyer can move their fundsrelease / refund require msg.sender == payer; no operator role existstest_onlyPayer_can_release
Buyer controls releaserelease(id) is payer-onlytest_release_splits_99_02_08
1% fee, split 0.2 / 0.8, exact to the weitoRecipient + feePersonal + feeReinvest == amount, alwaystest_release_splits_99_02_08 + on-chain release tx
Funds always recoverable — even if the seller's address rejects paymentBuyer can refund after the window, unconditionallytest_revertingRecipient_fundsStillRecoverable
Reentrancy-safeEIP-1153 transient guard + checks-effects-interactionstest_reentrancy_cannotDoubleWithdraw
A hostile fee wallet can't freeze the escrowFees accrue (pull-payment), withdrawn separately — a reverting fee wallet only blocks itselftest_revertingFeeWallet_no_longer_bricks
No value leaks on tiny amountsFee rounds down; split still conserves exactlytest_dustDeposit_conserves_noRevert
It works on-chainDeployed and exercised on Base Sepoliadeploy / deposit / release txs below

9 tests, all passing. Run them yourself: forge test.

What this does NOT claim

An honest document names its own edges. This escrow is deliberately simple, and here is what it does not yet do:

Verify it yourself

This is the entire point. Nothing here asks for your trust — it offers you proof.

  1. Read the contract: src/NonCustodialEscrow.sol (~180 lines).
  2. Run the tests: forge test -vv → 9 passing, including the adversarial attacks.
  3. Inspect it on-chain: the transactions below, on Base Sepolia Basescan.

Receipts

On-chain — Base Sepolia (initial deploy):

Verified split (release tx, read back from chain):

seller 0.004950 ETH (99%)personal 0.000010 (0.2%)reinvest 0.000040 (0.8%)escrow drained