🌪️ Solana Sealevel Framework
🗒️ Note
- Typhoon is in active development, so all APIs are subject to change.
- This code is unaudited. Use at your own risk.
📦 Installation
To get started with Typhoon, you can use the CLI tool to scaffold and manage your projects.
CLI
Install the Typhoon CLI using Cargo:
cargo install --git https://github.com/exotic-markets-labs/typhoon typhoon-cli
Library
If you prefer to add Typhoon to an existing Rust project:
cargo add typhoon
🚀 Getting Started
Here’s a quick example to show how Typhoon simplifies Solana program development:
#![no_std]
use { bytemuck::{AnyBitPattern, NoUninit}, typhoon::prelude::*, };
program_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
nostdpanichandler!(); no_allocator!();
#[context] pub struct Init { pub payer: Mut<Signer>, #[constraint( init, payer = payer, )] pub counter: Mut<UncheckedSigner<Account<Counter>>>, pub system: Program<System>, }
#[context] pub struct CounterMut { pub counter: Mut<Account<Counter>>, }
#[context] pub struct Destination { pub destination: Mut<SystemAccount>, }
entrypoint!();
pub const ROUTER: EntryFn = basic_router! { 0 => initialize, 1 => increment, 2 => close, };
pub fn initialize(_: Init) -> ProgramResult { Ok(()) }
pub fn increment(ctx: CounterMut) -> ProgramResult { ctx.counter.mut_data()?.count += 1;
Ok(()) }
pub fn close( CounterMut { counter }: CounterMut, Destination { destination }: Destination, ) -> ProgramResult { counter.close(&destination)?;
Ok(()) }
#[derive(NoUninit, AnyBitPattern, AccountState, Copy, Clone)] #[repr(C)] pub struct Counter { pub count: u64, }
🛠️ CLI Usage
The Typhoon CLI helps you create and manage your projects.
New Project
typhoon new my-project --program counter
Add Program
typhoon add program token
Add Instruction
typhoon add handler --program counter increment
📦 Examples
Explore the examples directory for templates and use-case scenarios to kickstart your project.
📜 License
Typhoon is licensed under Apache 2.0.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Typhoon by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.