Skip to content

Commit ea676dc

Browse files
committed
refactor: heap implemetation
1 parent be050ad commit ea676dc

9 files changed

Lines changed: 133 additions & 144 deletions

e-token-api/src/state/transfer_queue.rs

Lines changed: 107 additions & 118 deletions
Large diffs are not rendered by default.

e-token/src/processor/allocate_transfer_queue.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
use ephemeral_spl_api::state::transfer_queue::{item_len, queue_views_checked, TransferQueue};
1+
use ephemeral_spl_api::state::transfer_queue::{queue_views_checked, TransferQueue, ITEM_LEN};
22
use ephemeral_spl_api::{require, require_eq_keys, require_n_accounts_with_ignored};
33
use pinocchio::sysvars::rent::Rent;
44
use pinocchio::sysvars::Sysvar;
55
use pinocchio::{error::ProgramError, AccountView, ProgramResult};
66

7-
pub const MAX_ITEMS_PER_REALLOC: usize = 10_240 / item_len();
7+
pub const MAX_ITEMS_PER_REALLOC: usize = 10_240 / ITEM_LEN;
88

99
///
1010
/// Executes on:
@@ -42,11 +42,11 @@ pub fn process_allocate_transfer_queue(
4242
);
4343

4444
let rent = Rent::get()?;
45-
let cost_per_item = rent.try_minimum_balance(item_len())? - rent.try_minimum_balance(0)?;
45+
let cost_per_item = rent.try_minimum_balance(ITEM_LEN)? - rent.try_minimum_balance(0)?;
4646
let remaining_capacity =
4747
queue_info.lamports() - rent.try_minimum_balance(queue_info.data_len())?;
4848
let current_items = remaining_capacity / cost_per_item;
49-
current_items.min(MAX_ITEMS_PER_REALLOC as u64) as usize * item_len()
49+
current_items.min(MAX_ITEMS_PER_REALLOC as u64) as usize * ITEM_LEN
5050
};
5151

5252
queue_info.resize(queue_info.data_len() + realloc_size)?;

e-token/src/processor/initialize_transfer_queue.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use ephemeral_rollups_pinocchio::acl::{
66
use ephemeral_spl_api::consts::TRANSFER_QUEUE_INITIAL_BUFFER_LAMPORTS;
77
use ephemeral_spl_api::require_n_accounts;
88
use ephemeral_spl_api::state::transfer_queue::{
9-
capacity_from_data_len, header_len, init_queue, item_len, queue_views_mut_checked,
10-
TransferQueue,
9+
capacity_from_data_len, init_queue, queue_views_mut_checked, TransferQueue, HEADER_LEN,
10+
ITEM_LEN,
1111
};
1212
use ephemeral_spl_api::{require, require_eq_keys};
1313
use pinocchio::cpi::Signer;
@@ -19,7 +19,7 @@ use pinocchio_system::instructions::{CreateAccount, Transfer};
1919
pub const DEFAULT_TRANSFER_QUEUE_ITEMS: u32 = 100;
2020
/// Default queue size in bytes. (HEADER_LEN + ITEM_LEN * DEFAULT_TRANSFER_QUEUE_ITEMS)
2121
pub const DEFAULT_TRANSFER_QUEUE_SIZE_BYTES: u64 =
22-
(header_len() + item_len() * DEFAULT_TRANSFER_QUEUE_ITEMS as usize) as u64;
22+
(HEADER_LEN + ITEM_LEN * DEFAULT_TRANSFER_QUEUE_ITEMS as usize) as u64;
2323

2424
///
2525
/// Executes on:
@@ -54,7 +54,7 @@ pub fn process_initialize_transfer_queue(
5454
let args = InitializeTransferQueueArgs::try_view_from(instruction_data)?;
5555

5656
let (requested_items, queue_size) = if let Some(items) = args.requested_items() {
57-
(items, header_len() + item_len() * items as usize)
57+
(items, HEADER_LEN + ITEM_LEN * items as usize)
5858
} else {
5959
(
6060
DEFAULT_TRANSFER_QUEUE_ITEMS,

e-token/tests/allocate_transfer_queue.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use ephemeral_rollups_pinocchio::acl::{
22
permission_pda_from_permissioned_account, PERMISSION_PROGRAM_ID,
33
};
44
use ephemeral_spl_api::state::transfer_queue::{
5-
header_len, item_len, queue_views_checked, TransferQueue, TRANSFER_QUEUE_VERSION,
5+
queue_views_checked, TransferQueue, HEADER_LEN, ITEM_LEN, TRANSFER_QUEUE_VERSION,
66
};
77
use ephemeral_spl_api::{instruction, ID as PROGRAM};
88
use ephemeral_token_program::InitializeTransferQueueArgs;
@@ -127,7 +127,7 @@ async fn allocate_transfer_queue_succeeds_and_is_idempotent() {
127127
.await
128128
.unwrap()
129129
.expect("queue account must exist");
130-
let final_capacity = (final_data_len - header_len()) / item_len();
130+
let final_capacity = (final_data_len - HEADER_LEN) / ITEM_LEN;
131131
assert!(final_capacity >= N_ITEMS);
132132

133133
let (header, items) = queue_views_checked(&queue_account.data).unwrap();

e-token/tests/delegate_transfer_queue.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use ephemeral_rollups_pinocchio::pda::{
88
};
99
use ephemeral_spl_api::instruction;
1010
use ephemeral_spl_api::state::transfer_queue::{
11-
header_len, TransferQueue, TransferQueueHeader, TRANSFER_QUEUE_VERSION,
11+
TransferQueue, TransferQueueHeader, HEADER_LEN, TRANSFER_QUEUE_VERSION,
1212
};
1313
use ephemeral_spl_api::ID as PROGRAM;
1414
use ephemeral_token_program::InitializeTransferQueueArgs;
@@ -25,7 +25,7 @@ mod utils;
2525
pub const VALIDATOR: Pubkey = Pubkey::new_from_array([77; 32]);
2626

2727
fn read_header_unaligned(data: &[u8]) -> TransferQueueHeader {
28-
assert!(data.len() >= header_len());
28+
assert!(data.len() >= HEADER_LEN);
2929
unsafe { core::ptr::read_unaligned(data.as_ptr() as *const TransferQueueHeader) }
3030
}
3131

e-token/tests/deposit_and_delegate_shuttle_ephemeral_ata_with_merge_and_private_transfer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use ephemeral_spl_api::consts::{
1313
use ephemeral_spl_api::instruction;
1414
use ephemeral_spl_api::state::ephemeral_ata::EphemeralAta;
1515
use ephemeral_spl_api::state::shuttle_ephemeral_ata::ShuttleMetadata;
16-
use ephemeral_spl_api::state::transfer_queue::{header_len, TransferQueue, TransferQueueHeader};
16+
use ephemeral_spl_api::state::transfer_queue::{TransferQueue, TransferQueueHeader, HEADER_LEN};
1717
use ephemeral_spl_api::state::{load, Initializable};
1818
use ephemeral_spl_api::ID as PROGRAM;
1919
use ephemeral_token_program::{
@@ -45,7 +45,7 @@ const BASIS_POINTS_DENOMINATOR: u64 = 10_000;
4545
const TRANSFER_CHECKED_DISCRIMINATOR: u8 = 12;
4646

4747
fn read_header_unaligned(data: &[u8]) -> TransferQueueHeader {
48-
assert!(data.len() >= header_len());
48+
assert!(data.len() >= HEADER_LEN);
4949
unsafe { core::ptr::read_unaligned(data.as_ptr() as *const TransferQueueHeader) }
5050
}
5151

e-token/tests/deposit_and_queue_transfer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use ephemeral_rollups_pinocchio::spl::EphemeralAta;
66
use ephemeral_spl_api::instruction;
77
use ephemeral_spl_api::state::shuttle_ephemeral_ata::ShuttleMetadata;
88
use ephemeral_spl_api::state::transfer_queue::{
9-
header_len, item_len, queue_views_checked, QueuedTransfer, TransferQueue, TransferQueueHeader,
9+
queue_views_checked, QueuedTransfer, TransferQueue, TransferQueueHeader, HEADER_LEN, ITEM_LEN,
1010
};
1111
use ephemeral_spl_api::ID as PROGRAM;
1212
use ephemeral_token_program::{DepositAndQueueTransferArgs, InitializeTransferQueueArgs};
@@ -41,13 +41,13 @@ struct Fixture {
4141
}
4242

4343
fn read_header_unaligned(data: &[u8]) -> TransferQueueHeader {
44-
assert!(data.len() >= header_len());
44+
assert!(data.len() >= HEADER_LEN);
4545
unsafe { core::ptr::read_unaligned(data.as_ptr() as *const TransferQueueHeader) }
4646
}
4747

4848
fn read_item_unaligned(data: &[u8], index: usize) -> QueuedTransfer {
49-
let offset = header_len() + (index * item_len());
50-
assert!(data.len() >= offset + item_len());
49+
let offset = HEADER_LEN + (index * ITEM_LEN);
50+
assert!(data.len() >= offset + ITEM_LEN);
5151
unsafe { core::ptr::read_unaligned(data[offset..].as_ptr() as *const QueuedTransfer) }
5252
}
5353

e-token/tests/initialize_transfer_queue.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use ephemeral_rollups_pinocchio::acl::permission_pda_from_permissioned_account;
22
use ephemeral_spl_api::state::transfer_queue::{
3-
capacity_from_data_len, header_len, item_len, TransferQueue, TransferQueueHeader,
3+
capacity_from_data_len, TransferQueue, TransferQueueHeader, HEADER_LEN, ITEM_LEN,
44
TRANSFER_QUEUE_VERSION,
55
};
66
use ephemeral_spl_api::ID as PROGRAM;
@@ -16,7 +16,7 @@ mod common;
1616
mod utils;
1717

1818
fn read_header_unaligned(data: &[u8]) -> TransferQueueHeader {
19-
assert!(data.len() >= header_len());
19+
assert!(data.len() >= HEADER_LEN);
2020
unsafe { core::ptr::read_unaligned(data.as_ptr() as *const TransferQueueHeader) }
2121
}
2222

@@ -86,7 +86,7 @@ async fn initialize_transfer_queue_default_size() {
8686
assert_eq!(queue_account.owner, PROGRAM);
8787
assert_eq!(
8888
queue_account.data.len(),
89-
header_len() + item_len() * DEFAULT_TRANSFER_QUEUE_ITEMS
89+
HEADER_LEN + ITEM_LEN * DEFAULT_TRANSFER_QUEUE_ITEMS
9090
);
9191
assert_eq!(
9292
capacity_from_data_len(queue_account.data.len()),
@@ -201,7 +201,7 @@ async fn initialize_transfer_queue_custom_size_is_idempotent() {
201201

202202
assert_eq!(
203203
queue_account.data.len(),
204-
header_len() + item_len() * items as usize
204+
HEADER_LEN + ITEM_LEN * items as usize
205205
);
206206
assert!(capacity_from_data_len(queue_account.data.len()) >= 1);
207207

e-token/tests/transfer_queue_automation.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use ephemeral_rollups_pinocchio::{
99
spl::EphemeralAta,
1010
};
1111
use ephemeral_spl_api::state::transfer_queue::{
12-
header_len, item_len, QueuedTransfer, TransferQueueHeader, QUEUE_SEED,
12+
QueuedTransfer, TransferQueueHeader, HEADER_LEN, ITEM_LEN, QUEUE_SEED,
1313
};
1414
use ephemeral_spl_api::ID as PROGRAM;
1515
use ephemeral_spl_api::{instruction, state::transfer_queue::TransferQueue};
@@ -268,13 +268,13 @@ fn add_noop_program_mock(pt: &mut ProgramTest, program_id: Pubkey) {
268268
}
269269

270270
fn read_header_unaligned(data: &[u8]) -> TransferQueueHeader {
271-
assert!(data.len() >= header_len());
271+
assert!(data.len() >= HEADER_LEN);
272272
unsafe { core::ptr::read_unaligned(data.as_ptr() as *const TransferQueueHeader) }
273273
}
274274

275275
fn read_item_unaligned(data: &[u8], index: usize) -> QueuedTransfer {
276-
let offset = header_len() + (index * item_len());
277-
assert!(data.len() >= offset + item_len());
276+
let offset = HEADER_LEN + (index * ITEM_LEN);
277+
assert!(data.len() >= offset + ITEM_LEN);
278278
unsafe { core::ptr::read_unaligned(data[offset..].as_ptr() as *const QueuedTransfer) }
279279
}
280280

0 commit comments

Comments
 (0)