#idl #binary #macro-helpers #section #stored #manage #helper

solana-include-idl

A collection of macro and helpers to manage IDL stored on the program binary

1 unstable release

0.1.0 Nov 1, 2024

#33 in #stored

49 downloads per month
Used in solana-include-idl-cli

Apache-2.0

10KB
127 lines

solana-include-idl

A collection of macro and helpers to manage IDLs stored on the program binary.

IDL files describe the structure and API of a Solana program, facilitating easier integration and interaction with various client applications. This crate automates the task of publishing the IDL file by storing it as a separate ELF section within the program binary.

Usage

The crate provides a macro that includes the type and contents of the IDL file in separate ELF sections on the program binary.

  • .idl.type contains the type of the IDL file.
  • .idl.data contains the IDL file itself.

The macro takes two arguments:

  • type: The type of the IDL file. This should be one of the variants of the IdlType enum (e.g., IdlType::Anchor or IdlType::Codama).
  • file: The path to the IDL file.
use include_idl::{include_idl, parse::IdlType};

include_idl!(IdlType::Codama, concat!(env!("OUT_DIR"), "/codama.idl.zip"));

In general, the macro is used in combination with a build.rs build script to compress the IDL file, reducing the space required on the program binary.

To specify a build script, add a build = "build.rs" entry to your Cargo.toml file under the [package] section. Below is a build.rs example file that compresses an existing IDL file.

use std::env;
use std::path::PathBuf;
use include_idl::compress_idl;

fn main() {
    // Get the IDL path.
    let idl_path = PathBuf::from("../api").join("idl.json");
    // Compress the IDL file to a zip file.
    let out_dir = env::var("OUT_DIR").unwrap();
    let dest_path = PathBuf::from(out_dir).join("codama.idl.zip");

    compress_idl(&idl_path, &dest_path);
}

Generating an IDL

If you are using Anchor, this step is alredy done for your. If you are writing a native Solana program or using a framework that does not export and IDL, you can use Codama.

Dependencies

~0–590KB
~12K SLoC