#bitcoin #true #app-contract

charms-sdk

Charms SDK: the only dependency needed to build ZK apps on Bitcoin

17 releases (4 breaking)

new 0.5.2 Mar 27, 2025
0.5.1 Mar 25, 2025
0.4.1 Feb 24, 2025
0.3.4 Feb 20, 2025
0.1.10 Dec 31, 2024

#124 in Magic Beans

Download history 95/week @ 2024-12-11 46/week @ 2024-12-18 739/week @ 2024-12-25 211/week @ 2025-01-01 4/week @ 2025-01-08 323/week @ 2025-01-15 29/week @ 2025-01-22 4/week @ 2025-01-29 373/week @ 2025-02-05 9/week @ 2025-02-12 271/week @ 2025-02-19 61/week @ 2025-02-26 1/week @ 2025-03-05 12/week @ 2025-03-19

105 downloads per month

MIT license

6KB

This is the only crate you need to get started coding a Charms app.

Usage

Run this command to create a new Charms app:

charms app new my-app

It will create a new directory called my-app with a basic Charms app template.

It'll have this in Cargo.toml:

[dependencies]
charms-sdk = { version = "0.3.0" }

This is how the entire src/main.rs looks like:

#![no_main]
charms_sdk::main!(my_app::app_contract);

The most important function in the app is app_contract in src/lib.rs:

use charms_sdk::data::{
    check, App, Data, Transaction, NFT, TOKEN,
};

pub fn app_contract(app: &App, tx: &Transaction, x: &Data, w: &Data) -> bool {
    match app.tag {
        NFT => {
            check!(nft_contract_satisfied(app, tx, x, w))
        }
        TOKEN => {
            check!(token_contract_satisfied(app, tx, x, w))
        }
        _ => todo!(),
    }
    true
}

Dependencies

~6.5MB
~125K SLoC