Skip to content

bitrouter/swig-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bitrouter-swig-sdk

A standalone Rust SDK for the Swig wallet protocol on Solana.

Why this SDK?

The original Swig SDK has not been updated with newer dependency versions, which may conflict with modern Solana projects.

bitrouter-swig-sdk is a from-scratch reimplementation that provides the same Swig wallet functionality with up-to-date dependencies (Solana SDK v3–v4), so you can integrate Swig wallets without version conflicts.

Pure Rust, no system dependencies, no openssl-sys.

Installation

Add the crate to your project with Cargo:

cargo add bitrouter-swig-sdk

Or add it directly to your Cargo.toml:

[dependencies]
bitrouter-swig-sdk = "0.1"

Feature flags

Feature Default Description
rpc Enables solana-transaction and solana-keypair for building and signing transactions
token Enables SPL Token and Associated Token Account support
alloy Enables Ethereum-compatible signing via Alloy (secp256k1)
openssl-vendored Vendor OpenSSL for secp256r1 support (useful in CI/Docker)

Usage

The SDK covers the full Swig wallet lifecycle:

  1. Wallet creationinstruction::create::create_v1
  2. Authority management — add, update, remove authorities with granular permissions
  3. Session keys — slot-based expiring session keys for delegated signing
  4. Delegated executionsign_v2 to execute arbitrary instructions through the wallet
  5. Sub-accounts — create, sign, withdraw, and toggle sub-accounts
  6. Asset transfers — transfer assets out of the wallet
  7. Close wallet — reclaim rent

Quick start

use bitrouter_swig_sdk::auth::ed25519::Ed25519ClientRole;
use bitrouter_swig_sdk::auth::ClientRole;
use bitrouter_swig_sdk::instruction;
use bitrouter_swig_sdk::types::{AuthorityConfig, AuthorityType, Permission};
use bitrouter_swig_sdk::{pda, PROGRAM_ID};

// Derive the Swig PDA
let swig_id: [u8; 32] = rand::random();
let (swig_pk, bump) = pda::swig_account(&swig_id);
let (wallet_addr, wallet_bump) = pda::swig_wallet_address(&swig_pk);

// Create a wallet with full permissions
let ix = instruction::create::create_v1(
    swig_pk,
    payer_pk,
    wallet_addr,
    swig_id,
    bump,
    wallet_bump,
    AuthorityType::Ed25519,
    &authority_pk.to_bytes(),
    &[Permission::All],
);

// Build a role handle for subsequent operations
let role = Ed25519ClientRole::new(authority_pk);

// Add a delegated authority with specific permissions
let new_auth = AuthorityConfig {
    authority_type: AuthorityType::Ed25519,
    authority_bytes: delegate_pk.to_bytes().to_vec(),
};
let ixs = role.add_authority(
    swig_pk,
    authority_pk,
    0,                          // signing role id
    new_auth,
    vec![
        Permission::Sol { amount: 5_000_000 },
        Permission::Token { mint: token_mint, amount: 10_000_000 },
    ],
    None,
).expect("add_authority");

// Execute an instruction through the wallet via SignV2
let inner_ix = sol_transfer_ix(wallet_addr, destination, lamports);
let ixs = role
    .sign_v2(swig_pk, wallet_addr, 0, vec![inner_ix], None, &[])
    .expect("sign_v2");

Full example

The examples/round_trip.rs example exercises every major SDK feature on-chain using a single Ed25519 keypair. It covers:

  • Wallet creation
  • Adding delegated authorities with rich permission sets
  • Updating authority permissions (AddActions, RemoveActionsByType, RemoveActionsByIndex, ReplaceAll)
  • Creating session keys with slot-based expiry
  • Delegated SOL transfers via SignV2
  • Sub-account lifecycle (create, sign, withdraw, toggle)
  • Removing authorities
  • Transferring assets
  • Fee-payer separation (payer ≠ authority)

Run it against devnet:

SWIG_PRIVATE_KEY=<base58-64-byte-keypair> cargo run --example round_trip

# With airdrop enabled:
AIRDROP=true SWIG_PRIVATE_KEY=<base58-keypair> cargo run --example round_trip

# Custom RPC:
SOLANA_RPC_URL=https://api.devnet.solana.com SWIG_PRIVATE_KEY=<base58-keypair> cargo run --example round_trip

License

Apache-2.0

About

Standalone client SDK for Solana Swig embedded wallet, with up-to-date dependencies

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages