Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/kani.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ jobs:
- order-book
- lending
- betting-market
- vault-strategy
- token-fundraiser
- managed-fund
- fundraiser
- prop-amm
- options
steps:
Expand Down Expand Up @@ -103,8 +103,8 @@ jobs:
- order-book
- lending
- betting-market
- vault-strategy
- token-fundraiser
- managed-fund
- fundraiser
- prop-amm
- options
steps:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/typescript.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ jobs:
# the program's IDL would have gone unnoticed. `verify` runs the client's
# instruction encoding, account decoding and PDA derivation against the
# committed IDL, offline, with no validator.
vault-strategy-app:
name: Vault strategy app
managed-fund-app:
name: Managed fund app
runs-on: ubuntu-latest
defaults:
run:
working-directory: finance/vault-strategy/anchor/app
working-directory: finance/managed-fund/anchor/app
steps:
- uses: actions/checkout@v5
- uses: pnpm/action-setup@v4
Expand Down
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,51 @@ All notable changes to this repository are documented here.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [2026-09-28] - Token Fundraiser is renamed Fundraiser

Contributors to the fundraiser receive no token, only a refund if the target is
missed, so "Token Fundraiser" described something the program does not do.

### Changed

- `finance/token-fundraiser` is now `finance/fundraiser`, in Anchor v2, Anchor
v1 and Quasar, with its Kani proofs. The Quasar crate is `quasar-fundraiser`
and the proofs crate `fundraiser-kani-proofs`; the Anchor programs were
already named `fundraiser`. Accounts, instruction handlers and behavior are
unchanged.
- `README.md`, `llms.txt` and the example's READMEs say it was formerly Token
Fundraiser, and `finance/token-fundraiser/README.md` points old links to the
new location.

## [2026-09-28] - Vault Strategy is renamed Managed Fund

The example called Vault Strategy is a manager-run fund: investors deposit for
shares priced at net asset value, and a manager allocates the pool across a
basket of approved assets. Finance calls that a managed fund, the onchain
equivalent of a mutual fund. It is not an index fund, whose weights follow an
outside index with no manager choosing them. "Vault" also meant two things in
the example: the whole product, and the single-asset token accounts it owns.
Now it means only the token accounts.

### Changed

- `finance/vault-strategy` is now `finance/managed-fund`, in Anchor v2, Anchor
v1 and Quasar, with its Kani proofs and web app. The program crate is
`managed-fund` (library `managed_fund`; Quasar `quasar-managed-fund`), the
`Strategy` account is `Fund`, `initialize_strategy` is `initialize_fund`, the
`StrategyNotFullyAllocated` error is `FundNotFullyAllocated`, and the error
enum `VaultError` is `FundError`. The fund PDA's seed is `"fund"` instead of
`"strategy"`, so fund addresses change, and `initialize_fund` and `Fund`
have new Anchor discriminators. The program IDs and the programs' behavior
are unchanged, and every test passes under its new name.
- The web app's IDL, client and environment variables follow the rename
(`VITE_STRATEGY_INDEX` is `VITE_FUND_INDEX`, `VITE_VAULT_PROGRAM_ID` is
`VITE_FUND_PROGRAM_ID`).
- `README.md` and `llms.txt` list the example as Managed Fund and say it was
formerly Vault Strategy, and each of its READMEs says so too, so a search for
either name finds it. `finance/vault-strategy/README.md` stays behind as a
pointer to the new location for anyone following an old link.

## [2026-09-25] - Anchor v1 is the current stable Anchor

The README described Anchor v2 as Anchor's current major version and Anchor v1
Expand Down
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,10 @@ members = [
"finance/order-book/anchor/programs/order-book",
"finance/perpetual-futures/anchor/programs/perpetual-futures",
"finance/prop-amm/anchor/programs/prop-amm",
"finance/token-fundraiser/anchor/programs/fundraiser",
"finance/fundraiser/anchor/programs/fundraiser",
"finance/token-swap/anchor/programs/token-swap",
"finance/vault-strategy/anchor/programs/vault-strategy",
"finance/vault-strategy/anchor/programs/mock-swap-router",
"finance/managed-fund/anchor/programs/managed-fund",
"finance/managed-fund/anchor/programs/mock-swap-router",

# tokens
"tokens/token-extensions/mint-close-authority/native/program",
Expand Down
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,13 @@ A **proprietary AMM**: a market-making firm funds a venue with its own capital a

[⚓ Anchor v1](./finance/prop-amm/anchor-v1) [⚓ Anchor v2](./finance/prop-amm/anchor) [💫 Quasar](./finance/prop-amm/quasar)

### Vault Strategy
### Managed Fund

A managed investment fund onchain, like an ETF or mutual fund. Investors deposit USDC for shares, a manager allocates the pool across a basket of assets (here, stocks like TSLAx and NVDAx), and each share's value tracks the fund's net asset value. The manager earns a management fee, and investors redeem a proportional slice of the underlying assets.
*Formerly **Vault Strategy**. Some platforms call this product a vault or a vault strategy; the example was renamed to use the finance term.*

[⚓ Anchor v1](./finance/vault-strategy/anchor-v1) [⚓ Anchor v2](./finance/vault-strategy/anchor) [💫 Quasar](./finance/vault-strategy/quasar)
A managed investment fund onchain, the equivalent of a mutual fund. Investors deposit USDC for shares, a manager allocates the pool across a basket of assets (here, stocks like TSLAx and NVDAx), and each share's value tracks the fund's net asset value. The manager earns a management fee, and investors redeem a proportional slice of the underlying assets.

[⚓ Anchor v1](./finance/managed-fund/anchor-v1) [⚓ Anchor v2](./finance/managed-fund/anchor) [💫 Quasar](./finance/managed-fund/quasar)

### Betting Market

Expand All @@ -95,11 +97,13 @@ A perpetual futures exchange: a venue for making leveraged bets on an asset's pr

[⚓ Anchor v1](./finance/perpetual-futures/anchor-v1) [⚓ Anchor v2](./finance/perpetual-futures/anchor) [💫 Quasar](./finance/perpetual-futures/quasar)

### Token Fundraiser
### Fundraiser

*Formerly **Token Fundraiser**. Contributors receive no token, only a refund if the target is missed, so the example was renamed.*

Onchain crowdfunding, like Kickstarter or GoFundMe. A creator sets a target amount in a chosen token, and contributors deposit into the fundraiser's account until the goal is reached.

[⚓ Anchor v1](./finance/token-fundraiser/anchor-v1) [⚓ Anchor v2](./finance/token-fundraiser/anchor) [💫 Quasar](./finance/token-fundraiser/quasar)
[⚓ Anchor v1](./finance/fundraiser/anchor-v1) [⚓ Anchor v2](./finance/fundraiser/anchor) [💫 Quasar](./finance/fundraiser/quasar)

## Single concept examples

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 2026-09-28

- **Renamed from Token Fundraiser to Fundraiser.** The example moved from `finance/token-fundraiser` to `finance/fundraiser`: contributors receive no token, only a refund if the target is missed, so "Token" described something the program does not do. The program, its accounts, its instruction handlers and its tests are unchanged.

## 2026-09-23

### Added
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Solana Token Fundraiser (Anchor)
# Solana Fundraiser (Anchor)

> [!NOTE]
> This is the **Anchor v1** copy of this example, on Anchor 1.2.0, the current
Expand All @@ -8,6 +8,8 @@

Onchain crowdfunding on Solana: a program that collects tokens toward a target amount, like Kickstarter without a payment processor. A **maker** creates a fundraiser [account](https://solana.com/docs/terminology#account), specifies the [mint](https://solana.com/docs/terminology#token-mint) they want to receive, the target amount, and a duration in days. **Contributors** contribute while the window is open. If the target is reached, the maker claims the funds and each contributor closes their own record to take back its rent; if it is not reached by the deadline, contributors can refund, and once refunds are complete the maker can retire the fundraiser and open a new one.

This example was called **Token Fundraiser** (`finance/token-fundraiser`) until it was renamed: contributors receive no token, only a refund if the target is missed.

## Architecture

The fundraiser state account:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 2026-09-28

- **Renamed from Token Fundraiser to Fundraiser.** The example moved from `finance/token-fundraiser` to `finance/fundraiser`: contributors receive no token, only a refund if the target is missed, so "Token" described something the program does not do. The program, its accounts, its instruction handlers and its tests are unchanged.

## 2026-09-14

### Added
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Solana Token Fundraiser (Anchor)
# Solana Fundraiser (Anchor)

> [!NOTE]
> This is the **Anchor v2** copy of this example. Every `anchor` command on this page
Expand All @@ -8,6 +8,8 @@

Onchain crowdfunding on Solana: a program that collects tokens toward a target amount, like Kickstarter without a payment processor. A **maker** creates a fundraiser [account](https://solana.com/docs/terminology#account), specifies the [mint](https://solana.com/docs/terminology#token-mint) they want to receive, the target amount, and a duration in days. **Contributors** contribute while the window is open. If the target is reached, the maker claims the funds and each contributor closes their own record to take back its rent; if it is not reached by the deadline, contributors can refund, and once refunds are complete the maker can retire the fundraiser and open a new one.

This example was called **Token Fundraiser** (`finance/token-fundraiser`) until it was renamed: contributors receive no token, only a refund if the target is missed.

## Architecture

The fundraiser state account:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[workspace]

[package]
name = "vault-strategy-kani-proofs"
name = "fundraiser-kani-proofs"
version = "0.1.0"
edition = "2021"
publish = false
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Token-fundraiser: Kani proofs
# Fundraiser: Kani proofs

Formal-verification harnesses for the token-fundraiser program, in the spirit of
Formal-verification harnesses for the fundraiser program, in the spirit of
[`aeyakovenko/percolator`](https://github.com/aeyakovenko/percolator), which
uses the [Kani](https://github.com/model-checking/kani) model checker to prove
the mathematical correctness of a DeFi engine.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//! Kani proof harnesses for the token-fundraiser program (`finance/token-fundraiser`).
//! Kani proof harnesses for the fundraiser program (`finance/fundraiser`).
//!
//! Inspired by aeyakovenko/percolator, which uses the Kani model checker to
//! prove the mathematical correctness of a DeFi engine's pure numeric core.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## [2026-09-28]

### Changed

- Renamed from Token Fundraiser to Fundraiser. The example moved from
`finance/token-fundraiser` to `finance/fundraiser`, and the crate is now
`quasar-fundraiser`. The program's behavior is unchanged.

## [2026-09-14]

### Added
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "quasar-token-fundraiser"
name = "quasar-fundraiser"
version = "0.1.0"
edition = "2021"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
name = "quasar-vault-strategy"
name = "quasar-fundraiser"

[testing]
command = { program = "cargo", args = ["test"] }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# Solana Token Fundraiser (Quasar)
# Solana Fundraiser (Quasar)

Onchain crowdfunding on Solana toward a target amount in a chosen token, written with [Quasar](https://quasar-lang.com/docs). A **maker** opens a fundraiser with a target amount and a deadline; **contributors** deposit tokens into a program-controlled vault. If the target is met the maker withdraws everything; if the deadline passes without the target being met, each contributor reclaims exactly what they put in.

This example was called **Token Fundraiser** (`finance/token-fundraiser`) until it was renamed: contributors receive no token, only a refund if the target is missed.

See also: the [repository catalog](../../../README.md) and the [Anchor variant](../anchor/) of the same program.

## Major concepts
Expand All @@ -23,7 +25,7 @@ Errors are defined in `src/error.rs` as a `#[error_code]` enum starting at code

## Setup

From `finance/token-fundraiser/quasar/`:
From `finance/fundraiser/quasar/`:

```bash
quasar build
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ declare_id!("Eoiuq1dXvHxh6dLx3wh9gj8kSAUpga11krTrbfF5XYsC");
/// SPL token. Contributors deposit tokens into a vault. If the target is met,
/// the maker withdraws everything. If not, contributors can reclaim their funds.
#[program]
mod quasar_token_fundraiser {
mod quasar_fundraiser {
use super::*;

/// Create a new fundraiser with a target amount and duration.
Expand Down
Loading
Loading