From d9951cb00a836e53e671574e7fff6860c9037239 Mon Sep 17 00:00:00 2001 From: acheron Date: Mon, 21 Oct 2024 13:27:32 +0200 Subject: [PATCH 1/2] cli: Add support for fetching legacy IDLs --- cli/src/lib.rs | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 3ae985ed3a..a2677457e7 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -2089,7 +2089,7 @@ fn verify( // Verify IDL (only if it's not a buffer account). let local_idl = generate_idl(&cfg, true, false, &cargo_args)?; if bin_ver.state != BinVerificationState::Buffer { - let deployed_idl = fetch_idl(cfg_override, program_id)?; + let deployed_idl = fetch_idl(cfg_override, program_id).map(serde_json::from_value)??; if local_idl != deployed_idl { println!("Error: IDLs don't match"); std::process::exit(1); @@ -2315,15 +2315,16 @@ fn idl(cfg_override: &ConfigOverride, subcmd: IdlCommand) -> Result<()> { } /// Fetch an IDL for the given program id. -fn fetch_idl(cfg_override: &ConfigOverride, idl_addr: Pubkey) -> Result { +/// +/// Intentionally returns [`serde_json::Value`] rather than [`Idl`] to also support legacy IDLs. +fn fetch_idl(cfg_override: &ConfigOverride, idl_addr: Pubkey) -> Result { let url = match Config::discover(cfg_override)? { Some(cfg) => cluster_url(&cfg, &cfg.test_validator), None => { // If the command is not run inside a workspace, // cluster_url will be used from default solana config // provider.cluster option can be used to override this - - if let Some(cluster) = cfg_override.cluster.clone() { + if let Some(cluster) = cfg_override.cluster.as_ref() { cluster.url().to_string() } else { config::get_solana_cfg_url()? @@ -2803,12 +2804,13 @@ fn generate_idl( } fn idl_fetch(cfg_override: &ConfigOverride, address: Pubkey, out: Option) -> Result<()> { - let idl = fetch_idl(cfg_override, address)?; - let out = match out { - None => OutFile::Stdout, - Some(out) => OutFile::File(PathBuf::from(out)), + let idl = fetch_idl(cfg_override, address).map(|idl| serde_json::to_string_pretty(&idl))??; + match out { + Some(out) => fs::write(out, idl)?, + _ => println!("{idl}"), }; - write_idl(&idl, out) + + Ok(()) } fn idl_convert(path: String, out: Option, program_id: Option) -> Result<()> { From 092ba142fbf05f0711d68e1ac5c4b4e3fe6b6da2 Mon Sep 17 00:00:00 2001 From: acheron Date: Tue, 22 Oct 2024 01:16:09 +0200 Subject: [PATCH 2/2] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79153c6702..03f673bbce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,6 +55,7 @@ The minor version will be incremented upon a breaking change and the patch versi - cli: Add short alias for the `idl build` command ([#3283](https://github.com/coral-xyz/anchor/pull/3283)). - cli: Add `--program-id` option to `idl convert` command ([#3309](https://github.com/coral-xyz/anchor/pull/3309)). - lang: Generate documentation of constants in `declare_program!` ([#3311](https://github.com/coral-xyz/anchor/pull/3311)). +- cli: Add support for fetching legacy IDLs ([#3324](https://github.com/coral-xyz/anchor/pull/3324)). ### Fixes