Skip to main content

Stake to Take Protocol

Stake to Take is the stake-backed dispute-protection path for payment methods with a nonzero risk window. It is currently active for Venmo and PayPal. The system locks canonical USDC at a 1:1 ratio against the gross on-chain intent amount, then keeps the settled amount locked through the payment method's dispute window.

This page describes the protocol path. For the buyer flow, see the Stake to Take guide.

Architecture

OrchestratorV3
-> IntentLifecycleHookV1
-> WhitelistPolicy (trusted takers can bypass stake)
-> DisputeProtectionPolicy (admission and dispute lifecycle)
-> StakeVault (USDC custody and lock accounting)
-> DisputeVerifier (signed dispute evidence)
-> DisputeNullifierRegistry (dispute replay protection)

OrchestratorV3 snapshots the active lifecycle hook onto each intent. The production IntentLifecycleHookV1 combines whitelist admission with stake-backed admission and forwards cancellation and settlement callbacks to the DisputeProtectionPolicy.

StakeVault holds the collateral, while DisputeProtectionPolicy controls locks and dispute outcomes. Stake does not earn protocol yield.

Production addresses

The active deployment is on Base mainnet (chain ID 8453). These addresses were verified at Base block 50,560,704 and match @zkp2p/contracts-v2@0.4.1-rc.9.

ComponentAddressRole
USDC0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913Stake token and supported protected-intent token
OrchestratorV30x014025fDE093f8701d86e9f38e2C3a9b779cb5c7Intent lifecycle and lifecycle-hook callbacks
IntentLifecycleHookV10x5Dd6C675a7406fE8C9f0D93394a36fd6e8c50031Combines whitelist and stake-backed admission
WhitelistPolicy0x389Cd9bA91FfFcd83d267B241E975541892759CeDeposit- and payment-method-scoped trusted-taker policy
StakeVault0x47c26258222e2f96424bD2B21bf173f0DA5034C7USDC custody, delegation, locks, and claimable balances
DisputeProtectionPolicy0xbF4B769dB70DBEc89b6b2c44988304a7aD2de4FcAdmission, risk windows, settlement, release, and dispute resolution
DisputeVerifier0x30d4947f005653637005eed991005119D9eB2f34Validates signed evidence against the original payment
DisputeNullifierRegistry0xA845615b5203F7a21321DdF5e3a1ca024D93a443Prevents reuse of a payment-method-scoped dispute ID

See V3 Deployments for the complete production registry. Integrations should resolve addresses from the contracts package or the SDK instead of copying constants from this page.

Admission logic

The lifecycle hook evaluates the deposit's whitelist first, then the payment-method-specific dispute-protection route.

ConditionResult
Taker is allowed by an enabled whitelistAdmit without a stake lock
Taker is not whitelisted; protection is enabled and the risk window is nonzeroLock the full intent amount from the effective stake owner
Whitelist is enabled and no stake-backed route is availableReject the intent
Whitelist is disabled and no stake-backed route is availableAdmit without a stake lock

Dispute protection defaults on for methods with a nonzero risk window, with a per-(deposit, paymentMethod) opt-out. Admission also requires canonical Base USDC, unpaused admissions, and enough free stake. Any failure reverts the complete signal transaction.

Current risk windows

Payment methodbytes32 identifierWindow
Venmo0x90262a3db0edd0be2369c6b28f9e8511ec0bac7136cefbada0880602f87e72681,209,600 seconds (14 days)
Cash App0x10940ee67cfb3c6c064569ec92c0ee934cd7afa18dd2ca2d6a2254fcb009c17d0 seconds (non-chargebackable)
PayPal0x3ccc3d4d5e769b1f82dc4988485551dc0cd3c7a3926d7d8a4dde91507199490f1,209,600 seconds (14 days)

Methods with a zero window do not use stake-backed admission. Risk windows are governance-controlled, so integrations should read getRiskWindow(paymentMethod) on-chain. These values were read at Base block 50,562,572.

Lock lifecycle

Intent transitionStake transition
SignaledLock the full gross intent.amount with no time-based maturity
Cancelled/prunedUnlock the complete pending lock immediately
SettledResize the lock to releaseAmount before fees and set releaseEligibleAt
Matured releaseAny account may execute the release after releaseEligibleAt, returning free stake
Upheld disputeResolve the lock into an immediately claimable USDC balance for the depositor

The passage of the risk window makes a settled lock eligible for release; it does not release the lock by itself. Until a permissionless release transaction executes, valid dispute evidence can still resolve the lock.

Shared stake

Another account can back a taker after both accounts opt in. Delegation does not transfer ownership or withdrawal rights, and each lock snapshots its stake owner when the intent opens.

Dispute resolution

DisputeVerifier validates signed evidence, and DisputeNullifierRegistry prevents reuse. An upheld dispute resolves the settled lock into a claimable StakeVault balance for the depositor.

SDK integration

Use @zkp2p/sdk for deployment-aware stake, risk-window, protection, and readiness reads. See the SDK client reference for stake writes, keeper releases, indexed state, and readiness states.