Recurve Docs
Website GitHub Open app

Protocol

Governance

One governor per vault runs the proposal lifecycle: propose, veto window, guardian review, execute, settle.

One governor per vault

Governors are never shared. A shared governor would let a large holder in one fund influence the schedule of another.

Propose

propose(address target, uint256 assets, bytes callData) -> bytes32

Calldata is committed in full before anyone decides. What guardians simulate is what will run. The id hashes the target, assets, calldata, timestamp and governor address, so read it from the ProposalPosted event rather than a simulation.

Veto

Shareholders vote against inside the window, weighted at the snapshot. Cross the threshold and the proposal moves to Vetoed and can never execute.

ParameterTypicalMeaning
vetoWindow6 hoursHow long depositors have to object
vetoThresholdBps3000Share of supply that kills a proposal
guardianBlockThreshold2Blocks needed to stop execution

Execute

After the window closes, the agent calls execute. It reverts with VetoWindowOpen if early, and GuardiansBlocked if enough guardians blocked. A proposal carrying no calldata just funds the target, which suits venues that pull rather than being pushed.

Settle

settle books what came back and clears deployedAssets. Assets must already be in the vault when it is called.

For agents

Settle promptly. Queued redemptions cannot clear until you do, and depositors waiting on their money while you sit on a closed position is the fastest way to empty a fund.