A declarative execution layer for financial coordination on Ethereum.
Most DeFi vulnerabilities don’t originate in financial logic. They originate in the arbitrary computation surrounding it. When you implement a declarative pattern in a Turing-complete environment, you inherit the entire attack surface of that environment without needing any of its power.
Reentrancy exploits, integer overflows, unbounded loop attacks — these aren’t failures of financial intent. They’re failures that emerge at the gap between financial intent and general-purpose execution.
FVL draws a formal line.
If a financial system’s state transitions are fully deterministic and expressible over known primitives — it belongs on FVL. If it requires arbitrary computation whose values cannot be known before execution — it belongs on Ethereum.
This is the declarative/imperative boundary applied to financial systems. FVL doesn’t try to replace Ethereum. It defines the subset of financial coordination that should never have required Turing completeness.
system: "CommunityStaking"
pool:
collect:
from:
type: token_holders
address: "0xYourToken"
what:
type: erc20
address: "0xStakingToken"
min:
type: value
amount: "100"
cap:
type: value
amount: "1000000"
rules:
conditions:
- if:
type: time_gt
timestamp: "1735689600"
then:
type: enable
permission: withdraw
distribute:
formula:
type: proportional
to:
type: contributors
triggers: continuous
time:
locks:
type: duration
seconds: "2592000"
vesting:
type: linear
duration: "7776000"
rights:
contributors: [stake, unstake]
admin: [pause, update_params]
oracles: []This is the system — not a configuration file passed to a smart contract. FVL parses, validates, and executes it directly. No Solidity. No implementation layer. No surface area between intent and execution.
anyone— open to alltoken_holders(address)— ERC20 gatednft_holders(address)— NFT gatedwhitelist([addresses])— explicit allow listmin_balance(amount, token)— minimum holdings
eth— native Ethereumerc20(address)— fungible tokenserc721(address)— NFTserc1155(address, id)— semi-fungiblesmultiple([...])— multi-asset systems
balance > Xtime > timestampprice(feed) < thresholdholders >= Ntotal_value == cap
enable(permission)/disable(permission)liquidate(target)mint(amount, to)/burn(amount, from)transfer(amount, from, to)
proportional— by stake sizeequal— even splitweighted(metric)— custom weightingtiered(thresholds)— bracket-basedquadratic— quadratic funding
linear(duration)— vesting over timecliff(duration)— unlock after periodgraded(schedule)— milestone-based
┌─────────────────────────────────────────┐
│ User Templates (YAML) │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ FVL Parser & Validator │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ Runtime Engine (Rust) │
│ (Deterministic state transitions) │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ Block Production │
│ (Sequencer, append-only log) │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ Ethereum Settlement Layer │
└─────────────────────────────────────────┘
Deterministic execution — same transactions, same order, identical state. Always.
Constrained language — no loops, recursion, or unbounded computation. Attack surface minimized by construction, not by auditing.
Composable systems — systems reference other systems. Primitives are audited once, reused without re-auditing.
Ethereum settlement — state roots anchored on L1. Inherits Ethereum security at the settlement layer.
Prerequisites: Rust 1.75+, Foundry
git clone https://github.com/fvl-lang/fvl.git
cd fvl
cargo build --release
cargo test# Terminal 1
anvil
# Terminal 2
bash contracts/deploy.sh
# Terminal 3
cargo run --bin fvl> config set-sender 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
> deploy tests/fixtures/simple_swap.yaml
> mint 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 10000 ETH
> transfer 0xf39Fd6... 0xabcdef... 500 ETH
> state
> blocksThe most useful contributions at this stage are boundary challenges — financial systems that appear declarative but cannot be expressed with current primitives. These either surface missing primitives or sharpen the boundary definition.
- Design partners — protocols willing to attempt real system deployment and report where primitives break down
- Template creators — verified templates for common patterns
- Contributors — primitives, tooling, documentation
Primitive additions are held to a high standard. Every addition expands the attack surface.
See CONTRIBUTING for guidelines.
GPL-3.0. LICENSE
Built on Ethereum Foundation, Optimism rollup architecture, and Foundry tooling.