fix(idl): align LEZ account metadata

Mark unconditional signer, init, and mutable accounts in guest entrypoints.

Regenerate IDL artifacts for token, ATA, stablecoin, TWAP oracle, and AMM.
This commit is contained in:
Ricardo Guilherme Schmidt
2026-06-28 15:08:49 +02:00
committed by r4bbit
parent e4447617f6
commit 66afb1850e
10 changed files with 220 additions and 125 deletions
+56 -56
View File
@@ -7,9 +7,9 @@
"accounts": [
{
"name": "config",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
}
],
"args": [
@@ -32,14 +32,14 @@
"accounts": [
{
"name": "config",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "authority",
"writable": false,
"signer": false,
"signer": true,
"init": false
}
],
@@ -87,9 +87,9 @@
},
{
"name": "price_observations",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "clock",
@@ -122,9 +122,9 @@
},
{
"name": "oracle_price_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "clock",
@@ -151,57 +151,57 @@
},
{
"name": "pool",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "vault_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "pool_definition_lp",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "lp_lock_holding",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "user_holding_a",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "user_holding_b",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "user_holding_lp",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "clock",
@@ -240,49 +240,49 @@
},
{
"name": "pool",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "pool_definition_lp",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_a",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "user_holding_b",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "user_holding_lp",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -323,49 +323,49 @@
},
{
"name": "pool",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "pool_definition_lp",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_lp",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -406,37 +406,37 @@
},
{
"name": "pool",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -477,37 +477,37 @@
},
{
"name": "pool",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_a",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_b",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -548,7 +548,7 @@
},
{
"name": "pool",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -566,7 +566,7 @@
},
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
+8 -8
View File
@@ -7,7 +7,7 @@
"accounts": [
{
"name": "owner",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -19,7 +19,7 @@
},
{
"name": "ata_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
}
@@ -37,18 +37,18 @@
{
"name": "owner",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
"name": "sender_ata",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "recipient",
"writable": false,
"writable": true,
"signer": false,
"init": false
}
@@ -70,18 +70,18 @@
{
"name": "owner",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
"name": "holder_ata",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "token_definition",
"writable": false,
"writable": true,
"signer": false,
"init": false
}
+16 -16
View File
@@ -8,25 +8,25 @@
{
"name": "owner",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
"name": "position",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "vault",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "user_holding",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
@@ -49,24 +49,24 @@
{
"name": "owner",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
"name": "position",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "vault",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "destination",
"writable": false,
"writable": true,
"signer": false,
"init": false
}
@@ -84,25 +84,25 @@
{
"name": "owner",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
"name": "position",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "stablecoin_definition",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_stablecoin_holding",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
}
],
+32 -32
View File
@@ -7,13 +7,13 @@
"accounts": [
{
"name": "sender",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "recipient",
"writable": false,
"writable": true,
"signer": false,
"init": false
}
@@ -30,15 +30,15 @@
"accounts": [
{
"name": "definition_target_account",
"writable": false,
"signer": false,
"init": false
"writable": true,
"signer": true,
"init": true
},
{
"name": "holding_target_account",
"writable": false,
"signer": false,
"init": false
"writable": true,
"signer": true,
"init": true
}
],
"args": [
@@ -57,21 +57,21 @@
"accounts": [
{
"name": "definition_target_account",
"writable": false,
"signer": false,
"init": false
"writable": true,
"signer": true,
"init": true
},
{
"name": "holding_target_account",
"writable": false,
"signer": false,
"init": false
"writable": true,
"signer": true,
"init": true
},
{
"name": "metadata_target_account",
"writable": false,
"signer": false,
"init": false
"writable": true,
"signer": true,
"init": true
}
],
"args": [
@@ -100,9 +100,9 @@
},
{
"name": "account_to_initialize",
"writable": false,
"signer": false,
"init": false
"writable": true,
"signer": true,
"init": true
}
],
"args": []
@@ -112,14 +112,14 @@
"accounts": [
{
"name": "definition_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "user_holding_account",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
}
],
@@ -135,13 +135,13 @@
"accounts": [
{
"name": "definition_account",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "user_holding_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
}
@@ -158,15 +158,15 @@
"accounts": [
{
"name": "master_account",
"writable": false,
"signer": false,
"writable": true,
"signer": true,
"init": false
},
{
"name": "printed_account",
"writable": false,
"signer": false,
"init": false
"writable": true,
"signer": true,
"init": true
}
],
"args": []
+13 -13
View File
@@ -7,14 +7,14 @@
"accounts": [
{
"name": "price_observations",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "price_source",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
@@ -40,14 +40,14 @@
"accounts": [
{
"name": "oracle_price_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "price_source",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
@@ -81,14 +81,14 @@
"accounts": [
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
"init": true
},
{
"name": "price_source",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
@@ -116,7 +116,7 @@
},
{
"name": "oracle_price_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -149,7 +149,7 @@
"accounts": [
{
"name": "price_observations",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
@@ -182,14 +182,14 @@
"accounts": [
{
"name": "current_tick_account",
"writable": false,
"writable": true,
"signer": false,
"init": false
},
{
"name": "price_source",
"writable": false,
"signer": false,
"signer": true,
"init": false
},
{
+51
View File
@@ -1,4 +1,8 @@
#![cfg_attr(not(test), no_main)]
#![allow(
clippy::cloned_ref_to_slice_refs,
reason = "SPEL macro emits cloned validation slices for one-account instructions"
)]
use std::num::NonZeroU128;
@@ -27,6 +31,7 @@ mod amm {
#[instruction]
pub fn initialize(
ctx: ProgramContext,
#[account(init)]
config: AccountWithMetadata,
token_program_id: ProgramId,
twap_oracle_program_id: ProgramId,
@@ -50,7 +55,9 @@ mod amm {
#[instruction]
pub fn update_config(
ctx: ProgramContext,
#[account(mut)]
config: AccountWithMetadata,
#[account(signer)]
authority: AccountWithMetadata,
token_program_id: Option<ProgramId>,
twap_oracle_program_id: Option<ProgramId>,
@@ -83,6 +90,7 @@ mod amm {
config: AccountWithMetadata,
pool: AccountWithMetadata,
current_tick_account: AccountWithMetadata,
#[account(init)]
price_observations: AccountWithMetadata,
clock: AccountWithMetadata,
window_duration: u64,
@@ -114,6 +122,7 @@ mod amm {
ctx: ProgramContext,
config: AccountWithMetadata,
pool: AccountWithMetadata,
#[account(init)]
oracle_price_account: AccountWithMetadata,
clock: AccountWithMetadata,
window_duration: u64,
@@ -140,14 +149,23 @@ mod amm {
pub fn new_definition(
ctx: ProgramContext,
config: AccountWithMetadata,
#[account(init)]
pool: AccountWithMetadata,
#[account(mut)]
vault_a: AccountWithMetadata,
#[account(mut)]
vault_b: AccountWithMetadata,
#[account(init)]
pool_definition_lp: AccountWithMetadata,
#[account(init)]
lp_lock_holding: AccountWithMetadata,
#[account(mut, signer)]
user_holding_a: AccountWithMetadata,
#[account(mut, signer)]
user_holding_b: AccountWithMetadata,
#[account(mut)]
user_holding_lp: AccountWithMetadata,
#[account(init)]
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
token_a_amount: u128,
@@ -185,13 +203,21 @@ mod amm {
pub fn add_liquidity(
ctx: ProgramContext,
config: AccountWithMetadata,
#[account(mut)]
pool: AccountWithMetadata,
#[account(mut)]
vault_a: AccountWithMetadata,
#[account(mut)]
vault_b: AccountWithMetadata,
#[account(mut)]
pool_definition_lp: AccountWithMetadata,
#[account(mut, signer)]
user_holding_a: AccountWithMetadata,
#[account(mut, signer)]
user_holding_b: AccountWithMetadata,
#[account(mut)]
user_holding_lp: AccountWithMetadata,
#[account(mut)]
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
min_amount_liquidity: u128,
@@ -228,13 +254,21 @@ mod amm {
pub fn remove_liquidity(
ctx: ProgramContext,
config: AccountWithMetadata,
#[account(mut)]
pool: AccountWithMetadata,
#[account(mut)]
vault_a: AccountWithMetadata,
#[account(mut)]
vault_b: AccountWithMetadata,
#[account(mut)]
pool_definition_lp: AccountWithMetadata,
#[account(mut)]
user_holding_a: AccountWithMetadata,
#[account(mut)]
user_holding_b: AccountWithMetadata,
#[account(mut, signer)]
user_holding_lp: AccountWithMetadata,
#[account(mut)]
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
remove_liquidity_amount: u128,
@@ -272,11 +306,17 @@ mod amm {
pub fn swap_exact_input(
ctx: ProgramContext,
config: AccountWithMetadata,
#[account(mut)]
pool: AccountWithMetadata,
#[account(mut)]
vault_a: AccountWithMetadata,
#[account(mut)]
vault_b: AccountWithMetadata,
#[account(mut)]
user_holding_a: AccountWithMetadata,
#[account(mut)]
user_holding_b: AccountWithMetadata,
#[account(mut)]
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
swap_amount_in: u128,
@@ -311,11 +351,17 @@ mod amm {
pub fn swap_exact_output(
ctx: ProgramContext,
config: AccountWithMetadata,
#[account(mut)]
pool: AccountWithMetadata,
#[account(mut)]
vault_a: AccountWithMetadata,
#[account(mut)]
vault_b: AccountWithMetadata,
#[account(mut)]
user_holding_a: AccountWithMetadata,
#[account(mut)]
user_holding_b: AccountWithMetadata,
#[account(mut)]
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
exact_amount_out: u128,
@@ -346,9 +392,14 @@ mod amm {
pub fn sync_reserves(
ctx: ProgramContext,
config: AccountWithMetadata,
#[account(mut)]
pool: AccountWithMetadata,
// vault_a / vault_b are only read to compute balances in
// amm_program::sync::sync_reserves (their post-states are unchanged
// clones), so they are not writable — no `mut` metadata.
vault_a: AccountWithMetadata,
vault_b: AccountWithMetadata,
#[account(mut)]
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
) -> SpelResult {
@@ -22,8 +22,10 @@ mod ata {
#[instruction]
pub fn create(
ctx: ProgramContext,
#[account(mut)]
owner: AccountWithMetadata,
token_definition: AccountWithMetadata,
#[account(mut)]
ata_account: AccountWithMetadata,
token_program_id: ProgramId,
) -> SpelResult {
@@ -45,8 +47,11 @@ mod ata {
#[instruction]
pub fn transfer(
ctx: ProgramContext,
#[account(signer)]
owner: AccountWithMetadata,
#[account(mut)]
sender_ata: AccountWithMetadata,
#[account(mut)]
recipient: AccountWithMetadata,
token_program_id: ProgramId,
amount: u128,
@@ -69,8 +74,11 @@ mod ata {
#[instruction]
pub fn burn(
ctx: ProgramContext,
#[account(signer)]
owner: AccountWithMetadata,
#[account(mut)]
holder_ata: AccountWithMetadata,
#[account(mut)]
token_definition: AccountWithMetadata,
token_program_id: ProgramId,
amount: u128,
@@ -20,9 +20,13 @@ mod stablecoin {
#[instruction]
pub fn open_position(
ctx: ProgramContext,
#[account(signer)]
owner: AccountWithMetadata,
#[account(init)]
position: AccountWithMetadata,
#[account(init)]
vault: AccountWithMetadata,
#[account(mut, signer)]
user_holding: AccountWithMetadata,
token_definition: AccountWithMetadata,
collateral_amount: u128,
@@ -53,9 +57,13 @@ mod stablecoin {
#[instruction]
pub fn withdraw_collateral(
ctx: ProgramContext,
#[account(signer)]
owner: AccountWithMetadata,
#[account(mut)]
position: AccountWithMetadata,
#[account(mut)]
vault: AccountWithMetadata,
#[account(mut)]
destination: AccountWithMetadata,
amount: u128,
) -> SpelResult {
@@ -83,9 +91,13 @@ mod stablecoin {
#[instruction]
pub fn repay_debt(
ctx: ProgramContext,
#[account(signer)]
owner: AccountWithMetadata,
#[account(mut)]
position: AccountWithMetadata,
#[account(mut)]
stablecoin_definition: AccountWithMetadata,
#[account(mut, signer)]
user_stablecoin_holding: AccountWithMetadata,
amount: u128,
) -> SpelResult {
@@ -19,7 +19,9 @@ mod token {
/// Fresh public recipients must be explicitly authorized in the same transaction.
#[instruction]
pub fn transfer(
#[account(mut, signer)]
sender: AccountWithMetadata,
#[account(mut)]
recipient: AccountWithMetadata,
amount_to_transfer: u128,
) -> SpelResult {
@@ -34,7 +36,9 @@ mod token {
/// Definition and holding targets must be uninitialized and authorized.
#[instruction]
pub fn new_fungible_definition(
#[account(init, signer)]
definition_target_account: AccountWithMetadata,
#[account(init, signer)]
holding_target_account: AccountWithMetadata,
name: String,
total_supply: u128,
@@ -58,8 +62,11 @@ mod token {
)]
#[instruction]
pub fn new_definition_with_metadata(
#[account(init, signer)]
definition_target_account: AccountWithMetadata,
#[account(init, signer)]
holding_target_account: AccountWithMetadata,
#[account(init, signer)]
metadata_target_account: AccountWithMetadata,
new_definition: token_core::NewTokenDefinition,
metadata: Box<token_core::NewTokenMetadata>,
@@ -82,6 +89,7 @@ mod token {
pub fn initialize_account(
ctx: ProgramContext,
definition_account: AccountWithMetadata,
#[account(init, signer)]
account_to_initialize: AccountWithMetadata,
) -> SpelResult {
Ok(spel_framework::SpelOutput::execute(
@@ -97,7 +105,9 @@ mod token {
/// Burn tokens from the holder's account.
#[instruction]
pub fn burn(
#[account(mut)]
definition_account: AccountWithMetadata,
#[account(mut, signer)]
user_holding_account: AccountWithMetadata,
amount_to_burn: u128,
) -> SpelResult {
@@ -113,7 +123,9 @@ mod token {
#[instruction]
pub fn mint(
ctx: ProgramContext,
#[account(mut, signer)]
definition_account: AccountWithMetadata,
#[account(mut)]
user_holding_account: AccountWithMetadata,
amount_to_mint: u128,
) -> SpelResult {
@@ -129,7 +141,9 @@ mod token {
/// The printed copy target must be uninitialized and authorized.
#[instruction]
pub fn print_nft(
#[account(mut, signer)]
master_account: AccountWithMetadata,
#[account(init, signer)]
printed_account: AccountWithMetadata,
) -> SpelResult {
Ok(spel_framework::SpelOutput::execute(token_program::print_nft::print_nft(
@@ -22,7 +22,9 @@ mod twap_oracle {
#[instruction]
pub fn create_price_observations(
ctx: ProgramContext,
#[account(init)]
price_observations: AccountWithMetadata,
#[account(signer)]
price_source: AccountWithMetadata,
clock: AccountWithMetadata,
initial_tick: i32,
@@ -56,7 +58,9 @@ mod twap_oracle {
#[instruction]
pub fn create_oracle_price_account(
ctx: ProgramContext,
#[account(init)]
oracle_price_account: AccountWithMetadata,
#[account(signer)]
price_source: AccountWithMetadata,
clock: AccountWithMetadata,
base_asset: AccountId,
@@ -89,7 +93,9 @@ mod twap_oracle {
#[instruction]
pub fn create_current_tick_account(
ctx: ProgramContext,
#[account(init)]
current_tick_account: AccountWithMetadata,
#[account(signer)]
price_source: AccountWithMetadata,
clock: AccountWithMetadata,
initial_price: u128,
@@ -118,6 +124,7 @@ mod twap_oracle {
pub fn publish_price(
ctx: ProgramContext,
price_observations: AccountWithMetadata,
#[account(mut)]
oracle_price_account: AccountWithMetadata,
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
@@ -145,6 +152,7 @@ mod twap_oracle {
#[instruction]
pub fn record_tick(
ctx: ProgramContext,
#[account(mut)]
price_observations: AccountWithMetadata,
current_tick_account: AccountWithMetadata,
clock: AccountWithMetadata,
@@ -173,7 +181,9 @@ mod twap_oracle {
#[instruction]
pub fn update_current_tick(
ctx: ProgramContext,
#[account(mut)]
current_tick_account: AccountWithMetadata,
#[account(signer)]
price_source: AccountWithMetadata,
clock: AccountWithMetadata,
price: u128,