0.5.1-pre.002

This commit is contained in:
2026-08-09 19:34:08 +02:00
parent 816eee59a9
commit 6a680767ae
767 changed files with 12257 additions and 12195 deletions

View File

@@ -0,0 +1,63 @@
// file: ks-lib/tests/external_solana_program_metadata_executor_api.rs
// version: 2
//! Downstream-style compilation contract for the Solana Program Metadata executor.
#[test]
fn external_consumers_build_solana_program_metadata_plans_only_through_crate_root_exports() {
let authority = ks_lib::MdPubkey(ks_program_ids::SYSTEM_PROGRAM_ID.to_string());
let account = ks_lib::MdPubkey(ks_program_ids::VOTE_PROGRAM_ID.to_string());
let policy = ks_lib::ExApiExecutionPolicy {
cost_limit: ks_lib::ExApiExecutionCostLimit {
max_spend_lamports: std::option::Option::Some(0),
max_fee_lamports: std::option::Option::Some(20_000),
max_compute_unit_price_micro_lamports: std::option::Option::None,
},
authorized_signers: std::vec![authority.clone()],
post_execution_validation: ks_lib::ExApiPostExecutionValidationPolicy {
canonical_insert_required: true,
core_extraction_required: true,
decode_replay_required: true,
materialization_required: true,
},
..ks_lib::ExApiExecutionPolicy::default()
};
let intent = ks_lib::ExMetadataSpmExecutionIntent {
intent_id: "external-spm-extend".to_string(),
fee_payer: authority.clone(),
policy,
allow_destructive_operation: false,
operation: ks_lib::ExMetadataSpmOperation::Extend {
account,
authority,
length: 64,
program_context: std::option::Option::None,
},
};
let executor = ks_lib::ExMetadataSolanaProgramMetadataExecutor;
let program_id = ks_lib::MdProgramId(
ks_program_ids::METADATA_SOLANA_PROGRAM_METADATA_PROGRAM_ID.to_string(),
);
let capability = ks_lib::ExApiTypedInstructionExecutor::capability(
&executor,
&program_id,
ks_lib::EX_METADATA_SPM_EXTEND_OPERATION,
);
assert!(capability.is_supported());
let plan = ks_lib::ExApiTypedInstructionExecutor::build_prepared_plan(&executor, &intent);
assert!(plan.is_ok());
let plan = match plan {
std::result::Result::Ok(value) => value,
std::result::Result::Err(_) => return,
};
assert_eq!(plan.operation_code, ks_lib::EX_METADATA_SPM_EXTEND_OPERATION);
assert_eq!(plan.instructions.len(), 1);
assert_eq!(plan.instructions[0].data, std::vec![8, 64, 0]);
assert_eq!(plan.instructions[0].accounts.len(), 4);
let evaluation = ks_lib::ExSafetyChecker.evaluate_prepared_plan(&plan);
assert!(evaluation.is_ok());
assert_eq!(
evaluation.as_ref().map(|value| return value.decision),
std::result::Result::Ok(ks_lib::ExSafetyDecision::Allow)
);
}