Skip to content

Commit d25b6cb

Browse files
committed
feat(wasm-solana): add Native StakingType and make StakePoolConfig fields optional
Add Native variant to StakingType enum so WASM can handle native staking intents that pass stakingType: "NATIVE". Make StakePoolConfig fields (reserveStake, managerFeeAccount, poolMint) optional since not all staking contexts provide every field. BTC-3025
1 parent 5c07df0 commit d25b6cb

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

packages/wasm-solana/src/intent/build.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,8 @@ fn build_jito_stake(
300300
.map_err(|_| WasmSolanaError::new("Invalid withdrawAuthority"))?;
301301
let reserve_stake: Pubkey = config
302302
.reserve_stake
303+
.as_ref()
304+
.ok_or_else(|| WasmSolanaError::new("Missing reserveStake"))?
303305
.parse()
304306
.map_err(|_| WasmSolanaError::new("Invalid reserveStake"))?;
305307
let destination_pool_account: Pubkey = config
@@ -310,6 +312,8 @@ fn build_jito_stake(
310312
.map_err(|_| WasmSolanaError::new("Invalid destinationPoolAccount"))?;
311313
let manager_fee_account: Pubkey = config
312314
.manager_fee_account
315+
.as_ref()
316+
.ok_or_else(|| WasmSolanaError::new("Missing managerFeeAccount"))?
313317
.parse()
314318
.map_err(|_| WasmSolanaError::new("Invalid managerFeeAccount"))?;
315319
let referral_pool_account: Pubkey = config
@@ -323,8 +327,10 @@ fn build_jito_stake(
323327
.map_err(|_| WasmSolanaError::new("Invalid referralPoolAccount"))?;
324328
let pool_mint: Pubkey = config
325329
.pool_mint
330+
.as_ref()
331+
.ok_or_else(|| WasmSolanaError::new("Missing poolMint"))?
326332
.parse()
327-
.map_err(|_| WasmSolanaError::new(&format!("Invalid poolMint: {}", config.pool_mint)))?;
333+
.map_err(|_| WasmSolanaError::new("Invalid poolMint"))?;
328334

329335
// Build instruction data
330336
let instruction_data = StakePoolInstruction::DepositSol(amount);
@@ -541,10 +547,14 @@ fn build_jito_unstake(
541547
.map_err(|_| WasmSolanaError::new("Invalid sourcePoolAccount"))?;
542548
let manager_fee_account: Pubkey = config
543549
.manager_fee_account
550+
.as_ref()
551+
.ok_or_else(|| WasmSolanaError::new("Missing managerFeeAccount"))?
544552
.parse()
545553
.map_err(|_| WasmSolanaError::new("Invalid managerFeeAccount"))?;
546554
let pool_mint: Pubkey = config
547555
.pool_mint
556+
.as_ref()
557+
.ok_or_else(|| WasmSolanaError::new("Missing poolMint"))?
548558
.parse()
549559
.map_err(|_| WasmSolanaError::new("Invalid poolMint"))?;
550560

packages/wasm-solana/src/intent/types.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ pub enum IntentType {
2626
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
2727
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
2828
pub enum StakingType {
29+
Native,
2930
Jito,
3031
Marinade,
3132
}
@@ -189,13 +190,16 @@ pub struct StakePoolConfig {
189190
pub stake_pool_address: Option<String>,
190191
#[serde(default)]
191192
pub withdraw_authority: Option<String>,
192-
pub reserve_stake: String,
193+
#[serde(default)]
194+
pub reserve_stake: Option<String>,
193195
#[serde(default)]
194196
pub destination_pool_account: Option<String>,
195-
pub manager_fee_account: String,
197+
#[serde(default)]
198+
pub manager_fee_account: Option<String>,
196199
#[serde(default)]
197200
pub referral_pool_account: Option<String>,
198-
pub pool_mint: String,
201+
#[serde(default)]
202+
pub pool_mint: Option<String>,
199203
#[serde(default)]
200204
pub validator_list: Option<String>,
201205
#[serde(default)]

0 commit comments

Comments
 (0)