Add Codama IDL to program binary (#105)

* Add Codama IDL

* Add IDL to program binary

* Update dependency

* Use published crate

---------

Co-authored-by: Hardhat Chad <155858888+HardhatChad@users.noreply.github.com>
This commit is contained in:
Fernando Otero
2024-11-01 22:00:49 +00:00
committed by GitHub
parent 0e1460e2a4
commit 07d8b4cedd
5 changed files with 1800 additions and 0 deletions

View File

@@ -9,6 +9,7 @@ documentation.workspace = true
repository.workspace = true
readme.workspace = true
keywords.workspace = true
build = "build.rs"
[lib]
crate-type = ["cdylib", "lib"]
@@ -19,6 +20,7 @@ default = []
[dependencies]
drillx.workspace = true
solana-include-idl = "0.1"
mpl-token-metadata.workspace = true
ore-api.workspace = true
ore-boost-api.workspace = true
@@ -29,3 +31,6 @@ steel.workspace = true
[dev-dependencies]
rand = "0.8.5"
[build-dependencies]
solana-include-idl = { version = "0.1", features = ["shrink"] }

18
program/build.rs Normal file
View File

@@ -0,0 +1,18 @@
use std::env;
use std::path::PathBuf;
use solana_include_idl::compress_idl;
/// Build script to compress the IDL file to a zip file when building the program.
///
/// The compressed IDL is then included in a separate ELF section on the program binary
/// when the program is built.
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);
}

View File

@@ -19,8 +19,11 @@ use update::*;
use upgrade::*;
use ore_api::instruction::*;
use solana_include_idl::{include_idl, parse::IdlType};
use steel::*;
// Include the compressed IDL in an ELF section on the program binary.
include_idl!(IdlType::Codama, concat!(env!("OUT_DIR"), "/codama.idl.zip"));
#[allow(deprecated)]
pub fn process_instruction(
program_id: &Pubkey,