v0.5.2-pre.006-fix-010
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: ks-pipeline-demo-scenarios/src/spl/token/execution.rs
|
||||
// version: 16
|
||||
// version: 17
|
||||
|
||||
//! Devnet classic SPL Token execution with stateful and canonical post-validation.
|
||||
|
||||
@@ -105,7 +105,6 @@ pub struct DevnetSplTokenExecutionSummary {
|
||||
}
|
||||
|
||||
struct PreparedTokenExecution {
|
||||
wallet: ks_wallet::TemporaryWallet,
|
||||
unsigned: ks_lib::ExSolanaUnsignedTransaction,
|
||||
evidence: ks_lib::ExSolanaSimulationEvidence,
|
||||
summary: crate::DevnetSplTokenExecutionSummary,
|
||||
@@ -127,11 +126,15 @@ where
|
||||
"simulate_devnet_spl_token requires submit=false",
|
||||
));
|
||||
}
|
||||
let prepared =
|
||||
match prepare_execution(http_pool, profile, workspace_root, request, observer).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let temporary = match crate::load_profile_temporary_wallet(profile, workspace_root).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let wallet = crate::DevnetExecutionWallet::Temporary(temporary);
|
||||
let prepared = match prepare_execution(http_pool, profile, &wallet, request, observer).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
return std::result::Result::Ok(prepared.summary);
|
||||
}
|
||||
|
||||
@@ -154,11 +157,47 @@ where
|
||||
+ Sync,
|
||||
O: crate::SolanaExecutionObserver,
|
||||
{
|
||||
let prepared =
|
||||
match prepare_execution(http_pool, profile, workspace_root, request, observer).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let temporary = match crate::load_profile_temporary_wallet(profile, workspace_root).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let wallet = crate::DevnetExecutionWallet::Temporary(temporary);
|
||||
return execute_devnet_spl_token_with_wallet(
|
||||
http_pool,
|
||||
store,
|
||||
profile,
|
||||
&wallet,
|
||||
request,
|
||||
decoders,
|
||||
materializers,
|
||||
observer,
|
||||
)
|
||||
.await;
|
||||
}
|
||||
|
||||
/// Executes this Devnet operation with an explicitly resolved wallet capability.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub async fn execute_devnet_spl_token_with_wallet<S, O>(
|
||||
http_pool: &ks_onchain_transport::HttpEndpointPool,
|
||||
store: &S,
|
||||
profile: &ks_config::ProfileConfig,
|
||||
wallet: &crate::DevnetExecutionWallet,
|
||||
request: &crate::DevnetSplTokenExecutionRequest,
|
||||
decoders: &[std::sync::Arc<dyn ks_lib::DcApiInstructionDecoder>],
|
||||
materializers: &[std::sync::Arc<dyn ks_lib::MtApiEventMaterializer>],
|
||||
observer: &O,
|
||||
) -> ks_core::Result<crate::DevnetSplTokenExecutionSummary>
|
||||
where
|
||||
S: ks_store::RawTransactionStore
|
||||
+ ks_store::CoreExtractionStore
|
||||
+ ks_store::DecodePipelineStore
|
||||
+ Sync,
|
||||
O: crate::SolanaExecutionObserver,
|
||||
{
|
||||
let prepared = match prepare_execution(http_pool, profile, wallet, request, observer).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
if !request.submit {
|
||||
return std::result::Result::Ok(prepared.summary);
|
||||
}
|
||||
@@ -188,7 +227,7 @@ where
|
||||
}
|
||||
let signed = match prepared
|
||||
.unsigned
|
||||
.sign_after_simulation(&prepared.evidence, &[prepared.wallet.as_signer()])
|
||||
.sign_after_simulation(&prepared.evidence, &[wallet.as_signer()])
|
||||
{
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
@@ -428,7 +467,7 @@ where
|
||||
async fn prepare_execution<O>(
|
||||
http_pool: &ks_onchain_transport::HttpEndpointPool,
|
||||
profile: &ks_config::ProfileConfig,
|
||||
workspace_root: &std::path::Path,
|
||||
wallet: &crate::DevnetExecutionWallet,
|
||||
request: &crate::DevnetSplTokenExecutionRequest,
|
||||
observer: &O,
|
||||
) -> ks_core::Result<PreparedTokenExecution>
|
||||
@@ -479,11 +518,7 @@ where
|
||||
failed_readiness_message(&readiness),
|
||||
));
|
||||
}
|
||||
let wallet = match crate::load_profile_temporary_wallet(profile, workspace_root).await {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let wallet_summary = wallet.summary();
|
||||
let wallet_summary = wallet.identity();
|
||||
let fee_payer = ks_lib::MdPubkey(wallet_summary.public_key.clone());
|
||||
let balance = match http_pool
|
||||
.get_balance_for_role(
|
||||
@@ -620,7 +655,7 @@ where
|
||||
materializations: std::vec::Vec::new(),
|
||||
post_execution: std::option::Option::None,
|
||||
};
|
||||
return std::result::Result::Ok(PreparedTokenExecution { wallet, unsigned, evidence, summary });
|
||||
return std::result::Result::Ok(PreparedTokenExecution { unsigned, evidence, summary });
|
||||
}
|
||||
|
||||
fn validate_profile(
|
||||
@@ -632,9 +667,11 @@ fn validate_profile(
|
||||
"SPL Token Devnet orchestration requires a Devnet wallet profile",
|
||||
));
|
||||
}
|
||||
if !profile.wallet.temporary_wallet_enabled || !profile.wallet.temporary_wallet_persist {
|
||||
if profile.wallet.wallet_alias.is_none()
|
||||
&& (!profile.wallet.temporary_wallet_enabled || !profile.wallet.temporary_wallet_persist)
|
||||
{
|
||||
return std::result::Result::Err(ks_core::Error::config(
|
||||
"SPL Token Devnet orchestration requires an enabled persistent temporary wallet",
|
||||
"SPL Token Devnet orchestration requires an enabled persistent temporary wallet when no native wallet alias is selected",
|
||||
));
|
||||
}
|
||||
if !profile.execution.require_simulation {
|
||||
@@ -1093,7 +1130,7 @@ mod tests {
|
||||
};
|
||||
let mut profile = example_devnet_profile();
|
||||
if let std::result::Result::Ok(directory) = std::env::var("KS_DEVNET_WALLET_DIR") {
|
||||
profile.wallet.wallet_dir = directory;
|
||||
profile.wallet.temporary_wallet_dir = directory;
|
||||
}
|
||||
let pool = match ks_onchain_transport::HttpEndpointPool::from_profile(&profile) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -1263,7 +1300,7 @@ mod tests {
|
||||
};
|
||||
let mut profile = example_devnet_profile();
|
||||
if let std::result::Result::Ok(directory) = std::env::var("KS_DEVNET_WALLET_DIR") {
|
||||
profile.wallet.wallet_dir = directory;
|
||||
profile.wallet.temporary_wallet_dir = directory;
|
||||
}
|
||||
let pool = match ks_onchain_transport::HttpEndpointPool::from_profile(&profile) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
|
||||
Reference in New Issue
Block a user