solana-include-idl

Crates.iosolana-include-idl
lib.rssolana-include-idl
version0.1.0
sourcesrc
created_at2024-11-01 19:25:44.841525
updated_at2024-11-01 19:25:44.841525
descriptionA collection of macro and helpers to manage IDL stored on the program binary
homepage
repository
max_upload_size
id1432194
size9,908
(solana-foundation-tech)

documentation

README

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.

Commit count: 0

cargo fmt