Skip to content

DaviRain-Su/solana-sdk-zig

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

solana-sdk-zig

A pure Zig port of the Solana SDK core types and common SPL program interfaces. It mirrors the Rust solana-sdk APIs (no syscalls) so the same types can be used by on-chain programs and off-chain clients.

Features

  • Core types: PublicKey/PDA helpers, Hash, Signature, Keypair
  • Instructions & errors: Instruction, AccountMeta, ProgramError, InstructionError, TransactionError
  • Serialization: bincode, borsh, short vector encoding, C-compatible COption
  • SOL helpers: lamport/SOL conversions, durable nonce types, sysvar IDs
  • SPL programs: Token, Memo, and Stake program types and instruction builders
  • Pure Zig: no Solana runtime syscalls; works anywhere Zig runs

Requirements

  • Zig 0.15.2 or newer (matches build.zig.zon). CI pins the solana-zig bootstrap release v1.52.0 (bundled Zig 0.15.2); you can fetch the same toolchain locally via ./install-solana-zig.sh.

Getting started

  1. Add the package to your project (for example with zig fetch --save <git-url> or a local .path entry in build.zig.zon).
  2. Wire the module in build.zig:
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});

const sdk_dep = b.dependency("solana_sdk", .{ .target = target, .optimize = optimize });
const sdk = sdk_dep.module("solana_sdk");

const exe = b.addExecutable(.{ /* ... */ });
exe.root_module.addImport("solana_sdk", sdk);

Usage example

const std = @import("std");
const sdk = @import("solana_sdk");

pub fn main() !void {
    var kp = sdk.Keypair.generate();
    const message = "hello, solana";

    const sig = try kp.sign(message);
    try sig.verify(message, kp.pubkey().asBytes());

    var pk_buf: [sdk.PublicKey.max_base58_len]u8 = undefined;
    var sig_buf: [sdk.signature.MAX_BASE58_LEN]u8 = undefined;

    const pk_b58 = kp.pubkey().toBase58(&pk_buf);
    const sig_b58 = sig.toBase58(&sig_buf);

    std.debug.print("pubkey: {s}\nsignature: {s}\n", .{ pk_b58, sig_b58 });
}

Running tests

zig build test

Project layout

  • src/root.zig – main entry point re-exporting all modules
  • src/public_key.zig, src/signature.zig, src/keypair.zig – core crypto types
  • src/instruction.zig – instruction and account metadata
  • src/error.zig, src/instruction_error.zig, src/transaction_error.zig – error types
  • src/bincode.zig, src/borsh.zig, src/short_vec.zig, src/c_option.zig – serialization helpers
  • src/native_token.zig, src/nonce.zig, src/sysvar_id.zig – SOL utilities and sysvars
  • src/spl/ – SPL Token, Memo, and Stake program types and instruction builders

Status

Early-stage SDK surface for Solana in Zig. Interfaces follow the upstream Rust SDK where practical; expect additions and minor breaking changes while the API settles.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published