From 87463ded2614cf4f2890a431d094de6bff5b56db Mon Sep 17 00:00:00 2001 From: Umar Sheik Date: Wed, 3 Jun 2026 21:15:07 +0530 Subject: [PATCH] fix: passing cargo-build-sbf-args from pda --- api/src/db/models/params.rs | 3 + api/src/db/verification.rs | 1 + .../onchain/program_metadata_retriever.rs | 71 +++++++++++++++++++ api/src/services/verification.rs | 3 + 4 files changed, 78 insertions(+) diff --git a/api/src/db/models/params.rs b/api/src/db/models/params.rs index 0e46f1ae..77b04d2f 100644 --- a/api/src/db/models/params.rs +++ b/api/src/db/models/params.rs @@ -20,6 +20,8 @@ pub struct SolanaProgramBuildParams { pub mount_path: Option, /// Additional cargo build arguments pub cargo_args: Option>, + /// Passed to `solana-verify` as `--cargo-build-sbf-args=...` + pub cargo_build_sbf_args: Option, /// Architecture target pub arch: Option, /// Optional webhook URL to POST verification result/error when job completes @@ -48,6 +50,7 @@ impl From for SolanaProgramBuildParams { base_image: otter.get_base_image(), mount_path: otter.get_mount_path(), cargo_args: otter.get_cargo_args(), + cargo_build_sbf_args: otter.get_cargo_build_sbf_args(), arch: otter.get_arch(), webhook_url: None, } diff --git a/api/src/db/verification.rs b/api/src/db/verification.rs index 106dad9d..70ecda04 100644 --- a/api/src/db/verification.rs +++ b/api/src/db/verification.rs @@ -615,6 +615,7 @@ impl DbClient { mount_path: build_params.mount_path, bpf_flag: Some(build_params.bpf_flag), cargo_args: build_params.cargo_args, + cargo_build_sbf_args: None, arch: build_params.arch, webhook_url: None, }; diff --git a/api/src/services/onchain/program_metadata_retriever.rs b/api/src/services/onchain/program_metadata_retriever.rs index 6ce53705..32bf3833 100644 --- a/api/src/services/onchain/program_metadata_retriever.rs +++ b/api/src/services/onchain/program_metadata_retriever.rs @@ -76,6 +76,32 @@ impl OtterBuildParams { .position(|arg| arg == "--arch") .map(|index| self.args[index + 1].clone()) } + + /// `solana-verify --cargo-build-sbf-args` value + pub fn get_cargo_build_sbf_args(&self) -> Option { + const PREFIX: &str = "--cargo-build-sbf-args"; + for (i, arg) in self.args.iter().enumerate() { + if arg == PREFIX { + return self.args.get(i + 1).map(|v| strip_surrounding_quotes(v)); + } + if let Some(value) = arg + .strip_prefix(PREFIX) + .and_then(|rest| rest.strip_prefix('=')) + { + return Some(strip_surrounding_quotes(value)); + } + } + None + } +} + +fn strip_surrounding_quotes(value: &str) -> String { + let trimmed = value.trim(); + if trimmed.len() >= 2 && trimmed.starts_with('"') && trimmed.ends_with('"') { + trimmed[1..trimmed.len() - 1].to_string() + } else { + trimmed.to_string() + } } /// Retrieves Otter Verify PDA for a program and signer @@ -263,6 +289,51 @@ mod tests { assert!(build_params.bpf_flag.unwrap()); } + #[test] + fn get_cargo_build_sbf_args_from_token_pda_args() { + let otter = OtterBuildParams { + address: Pubkey::default(), + signer: Pubkey::default(), + version: String::new(), + git_url: String::new(), + commit: String::new(), + args: vec![ + "--library-name".to_string(), + "pinocchio_token_program".to_string(), + "--base-image".to_string(), + "solanafoundation/solana-verifiable-build:3.1.9".to_string(), + "--cargo-build-sbf-args=\"--tools-version v1.54\"".to_string(), + ], + deployed_slot: 0, + bump: 0, + }; + assert_eq!( + otter.get_cargo_build_sbf_args().as_deref(), + Some("--tools-version v1.54") + ); + } + + #[test] + fn get_cargo_build_sbf_args_two_token_form() { + let otter = OtterBuildParams { + address: Pubkey::default(), + signer: Pubkey::default(), + version: String::new(), + git_url: String::new(), + commit: String::new(), + args: vec![ + "--cargo-build-sbf-args".to_string(), + "\"--tools-version v1.54\"".to_string(), + ], + deployed_slot: 0, + bump: 0, + }; + assert_eq!( + otter.get_cargo_build_sbf_args().as_deref(), + Some("--tools-version v1.54") + ); + } + #[tokio::test] async fn test_program_buffer_missing() { let program_id = "2gFsaXeN9jngaKbQvZsLwxqfUrT2n4WRMraMpeL8NwZM"; diff --git a/api/src/services/verification.rs b/api/src/services/verification.rs index 6430d259..91368dfa 100644 --- a/api/src/services/verification.rs +++ b/api/src/services/verification.rs @@ -193,6 +193,9 @@ pub fn build_verify_command(payload: &SolanaProgramBuildParams) -> Result