From 683ee73789d68d77e9496980d4f60e871a21ae3f Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 15:14:11 +0200 Subject: [PATCH 01/17] feat: pinocchio ephemeral permission --- .../.env.example | 2 + .../.gitignore | 13 + .../.yarnrc.yml | 1 + .../Cargo.toml | 18 + .../LICENSE | 21 + .../README.md | 59 + .../package.json | 35 + .../src/entrypoint.rs | 174 + .../src/lib.rs | 12 + .../src/processor.rs | 327 ++ .../src/state.rs | 47 + .../tests/pinocchio-secret-counter.test.ts | 544 ++++ .../tsconfig.json | 15 + .../yarn.lock | 2894 +++++++++++++++++ private-payments | 1 - yarn.lock | 4 - 16 files changed, 4162 insertions(+), 5 deletions(-) create mode 100644 pinocchio-ephemeral-permission-counter/.env.example create mode 100644 pinocchio-ephemeral-permission-counter/.gitignore create mode 100644 pinocchio-ephemeral-permission-counter/.yarnrc.yml create mode 100644 pinocchio-ephemeral-permission-counter/Cargo.toml create mode 100644 pinocchio-ephemeral-permission-counter/LICENSE create mode 100644 pinocchio-ephemeral-permission-counter/README.md create mode 100644 pinocchio-ephemeral-permission-counter/package.json create mode 100644 pinocchio-ephemeral-permission-counter/src/entrypoint.rs create mode 100644 pinocchio-ephemeral-permission-counter/src/lib.rs create mode 100644 pinocchio-ephemeral-permission-counter/src/processor.rs create mode 100644 pinocchio-ephemeral-permission-counter/src/state.rs create mode 100644 pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts create mode 100644 pinocchio-ephemeral-permission-counter/tsconfig.json create mode 100644 pinocchio-ephemeral-permission-counter/yarn.lock delete mode 160000 private-payments delete mode 100644 yarn.lock diff --git a/pinocchio-ephemeral-permission-counter/.env.example b/pinocchio-ephemeral-permission-counter/.env.example new file mode 100644 index 0000000..71ade90 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/.env.example @@ -0,0 +1,2 @@ +# Private Key (optional - will be generated if not provided) +# PRIVATE_KEY=[...] diff --git a/pinocchio-ephemeral-permission-counter/.gitignore b/pinocchio-ephemeral-permission-counter/.gitignore new file mode 100644 index 0000000..c97775d --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/.gitignore @@ -0,0 +1,13 @@ +/target +**/*.rs.bk +.DS_Store +Cargo.lock +.env +node_modules/ +dist/ +build/ +*.log +.vscode +.idea +.pnp.cjs +.pnp.loader.mjs \ No newline at end of file diff --git a/pinocchio-ephemeral-permission-counter/.yarnrc.yml b/pinocchio-ephemeral-permission-counter/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/pinocchio-ephemeral-permission-counter/Cargo.toml b/pinocchio-ephemeral-permission-counter/Cargo.toml new file mode 100644 index 0000000..510aea7 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "pinocchio-ephemeral-permission-counter" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] + +[features] +logging = [] + +[dependencies] +pinocchio = { version = "0.10.1", features = ["cpi", "copy"] } +pinocchio-log = { version = "0.5.1" } +pinocchio-system = { version = "0.5" } +solana-address = { version = "2.6", features = ["syscalls"] } +# ephemeral-rollups-pinocchio = { git = "https://github.com/magicblock-labs/ephemeral-rollups-sdk.git", rev = "a8ecea450d3bbe5bac119a3f4c55cd9f96b4837b" } +ephemeral-rollups-pinocchio = { path = "../../ephemeral-rollups-sdk/rust/pinocchio" } diff --git a/pinocchio-ephemeral-permission-counter/LICENSE b/pinocchio-ephemeral-permission-counter/LICENSE new file mode 100644 index 0000000..34e1951 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 MagicBlock Labs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pinocchio-ephemeral-permission-counter/README.md b/pinocchio-ephemeral-permission-counter/README.md new file mode 100644 index 0000000..90f864f --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/README.md @@ -0,0 +1,59 @@ +# ➕ Pinocchio Counter + +Simple counter program using Pinocchio and Ephemeral Rollups. + +This is a port of the Rust Counter program to use Pinocchio instead of Borsh for serialization, eliminating the need for Vec types. + +## Software Packages + +| Software | Version | Installation Guide | +| -------- | ------- | ------------------- | +| **Solana** | 2.3.13 | [Install Solana](https://docs.anza.xyz/cli/install) | +| **Rust** | 1.85.0 | [Install Rust](https://www.rust-lang.org/tools/install) | +| **Node** | 24.10.0 | [Install Node](https://nodejs.org/en/download/current) | + +## Build + +```bash +cargo build-sbf +``` + +## Test + +```bash +cargo test-sbf --features logging +``` + +## Key Differences from Rust Counter + +- **No Borsh**: Uses manual serialization with `to_le_bytes()` and `from_le_bytes()` for simplicity +- **No Vec**: All types use fixed-size arrays or primitives +- **Pinocchio Framework**: Leverages Pinocchio's lightweight instruction handling +- **Direct State Management**: Simple `Counter` struct with manual serialization + +## Instructions + +### 0: InitializeCounter +Initialize a counter PDA to 0. Payload: `bump` (u8). + +### 1: IncreaseCounter +Increase the counter by a specified amount. Payload: `bump` (u8) + `increase_by` (u64). + +### 2: Delegate +Delegate the counter account to the Ephemeral Rollups delegation program. Payload: `bump` (u8). + +### 3: CommitAndUndelegate +Commit changes and undelegate the counter account. + +### 4: Commit +Commit changes to the base layer. + +### 5: IncrementAndCommit +Increment counter and commit in one instruction. Payload: `bump` (u8) + `increase_by` (u64). + +### 6: IncrementAndUndelegate +Increment counter and undelegate in one instruction. Payload: `bump` (u8) + `increase_by` (u64). + +## Account Structure + +- **Counter**: 8 bytes (u64 count value) diff --git a/pinocchio-ephemeral-permission-counter/package.json b/pinocchio-ephemeral-permission-counter/package.json new file mode 100644 index 0000000..85cd429 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/package.json @@ -0,0 +1,35 @@ +{ + "name": "pinocchio-ephemeral-permission-counter", + "version": "0.1.0", + "description": "Tests for pinocchio-ephemeral-permission-counter program", + "main": "index.js", + "scripts": { + "test": "vitest run tests/", + "test:watch": "vitest watch tests/", + "build": "cargo build-sbf", + "check": "cargo check" + }, + "keywords": [ + "solana", + "pinocchio", + "ephemeral", + "permission", + "counter", + "program" + ], + "author": "", + "license": "Apache-2.0", + "devDependencies": { + "@magicblock-labs/ephemeral-rollups-sdk": "^0.11.1", + "@solana-program/system": "^0.10.0", + "@solana/kit": "^5.4.0", + "@solana/web3.js": "^1.93.0", + "@types/node": "^20.0.0", + "borsh": "^0.7.0", + "dotenv": "^16.0.0", + "ts-node": "^10.9.0", + "tweetnacl": "^1.0.3", + "typescript": "^5.0.0", + "vitest": "^0.34.0" + } +} \ No newline at end of file diff --git a/pinocchio-ephemeral-permission-counter/src/entrypoint.rs b/pinocchio-ephemeral-permission-counter/src/entrypoint.rs new file mode 100644 index 0000000..2a7bc80 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/src/entrypoint.rs @@ -0,0 +1,174 @@ +use crate::processor::{ + process_close_permission, process_commit_and_undelegate, process_create_permission, + process_delegate, process_increase_counter, process_initialize_counter, + process_undelegation_callback, process_update_permission, +}; +use core::{mem::MaybeUninit, slice::from_raw_parts}; +use pinocchio::{ + entrypoint::deserialize, error::ProgramError, no_allocator, nostd_panic_handler, AccountView, + Address, ProgramResult, MAX_TX_ACCOUNTS, SUCCESS, +}; + +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +enum InstructionDiscriminator { + InitializeCounter, + IncreaseCounter, + Delegate, + CommitAndUndelegate, + CreatePermission, + UpdatePermission, + ClosePermission, + UndelegationCallback, +} + +impl InstructionDiscriminator { + const INITIALIZE_COUNTER: [u8; 8] = [0, 0, 0, 0, 0, 0, 0, 0]; + const INCREASE_COUNTER: [u8; 8] = [1, 0, 0, 0, 0, 0, 0, 0]; + const DELEGATE: [u8; 8] = [2, 0, 0, 0, 0, 0, 0, 0]; + const COMMIT_AND_UNDELEGATE: [u8; 8] = [3, 0, 0, 0, 0, 0, 0, 0]; + const CREATE_PERMISSION: [u8; 8] = [4, 0, 0, 0, 0, 0, 0, 0]; + const UPDATE_PERMISSION: [u8; 8] = [5, 0, 0, 0, 0, 0, 0, 0]; + const CLOSE_PERMISSION: [u8; 8] = [6, 0, 0, 0, 0, 0, 0, 0]; + // Undelegation callback called by the delegation program + const UNDELEGATION_CALLBACK: [u8; 8] = [196, 28, 41, 206, 48, 37, 51, 167]; + + fn from_bytes(bytes: [u8; 8]) -> Result { + match bytes { + Self::INITIALIZE_COUNTER => Ok(Self::InitializeCounter), + Self::INCREASE_COUNTER => Ok(Self::IncreaseCounter), + Self::DELEGATE => Ok(Self::Delegate), + Self::COMMIT_AND_UNDELEGATE => Ok(Self::CommitAndUndelegate), + Self::CREATE_PERMISSION => Ok(Self::CreatePermission), + Self::UPDATE_PERMISSION => Ok(Self::UpdatePermission), + Self::CLOSE_PERMISSION => Ok(Self::ClosePermission), + Self::UNDELEGATION_CALLBACK => Ok(Self::UndelegationCallback), + _ => Err(ProgramError::InvalidInstructionData), + } + } +} + +// Do not allocate memory. +no_allocator!(); +// Use the no_std panic handler. +nostd_panic_handler!(); + +#[no_mangle] +#[allow(clippy::arithmetic_side_effects)] +pub unsafe extern "C" fn entrypoint(input: *mut u8) -> u64 { + const UNINIT: MaybeUninit = MaybeUninit::::uninit(); + let mut accounts = [UNINIT; { MAX_TX_ACCOUNTS }]; + + let (program_id, count, instruction_data) = + deserialize::(input, &mut accounts); + + match process_instruction( + program_id, + from_raw_parts(accounts.as_ptr() as _, count), + instruction_data, + ) { + Ok(()) => SUCCESS, + Err(error) => error.into(), + } +} + +/// Log an error. +#[cold] +fn log_error(_error: &ProgramError) { + #[cfg(feature = "logging")] + pinocchio_log::log!("Program error"); +} + +/// Process an instruction. +#[inline(always)] +pub fn process_instruction( + program_id: &Address, + accounts: &[AccountView], + instruction_data: &[u8], +) -> ProgramResult { + let result = inner_process_instruction(program_id, accounts, instruction_data); + result.inspect_err(log_error) +} + +/// Process an instruction. +#[inline(always)] +pub(crate) fn inner_process_instruction( + _program_id: &Address, + accounts: &[AccountView], + instruction_data: &[u8], +) -> ProgramResult { + if instruction_data.len() < 8 { + return Err(ProgramError::InvalidInstructionData); + } + + let discriminator: [u8; 8] = instruction_data[..8] + .try_into() + .map_err(|_| ProgramError::InvalidInstructionData)?; + let discriminator = InstructionDiscriminator::from_bytes(discriminator)?; + let payload = &instruction_data[8..]; + + #[cfg(feature = "logging")] + log_instruction(discriminator); + + match discriminator { + InstructionDiscriminator::InitializeCounter => { + let id = Address::new_from_array( + payload[..32] + .try_into() + .map_err(|_| ProgramError::InvalidInstructionData)?, + ); + process_initialize_counter(accounts, &id) + } + InstructionDiscriminator::IncreaseCounter => { + let increase_by = read_u64(payload)?; + process_increase_counter(accounts, increase_by) + } + InstructionDiscriminator::Delegate => process_delegate(accounts), + InstructionDiscriminator::CommitAndUndelegate => process_commit_and_undelegate(accounts), + InstructionDiscriminator::CreatePermission => process_create_permission(accounts), + InstructionDiscriminator::UpdatePermission => process_update_permission(accounts), + InstructionDiscriminator::ClosePermission => process_close_permission(accounts), + InstructionDiscriminator::UndelegationCallback => { + process_undelegation_callback(accounts, payload) + } + } +} + +fn read_u64(input: &[u8]) -> Result { + if input.len() < 8 { + return Err(ProgramError::InvalidInstructionData); + } + let mut bytes = [0u8; 8]; + bytes.copy_from_slice(&input[..8]); + Ok(u64::from_le_bytes(bytes)) +} + +#[allow(unused_variables)] +#[cfg(feature = "logging")] +fn log_instruction(discriminator: InstructionDiscriminator) { + match discriminator { + InstructionDiscriminator::InitializeCounter => { + pinocchio_log::log!("InitializeCounter"); + } + InstructionDiscriminator::IncreaseCounter => { + pinocchio_log::log!("IncreaseCounter"); + } + InstructionDiscriminator::Delegate => { + pinocchio_log::log!("Delegate"); + } + InstructionDiscriminator::CommitAndUndelegate => { + pinocchio_log::log!("CommitAndUndelegate"); + } + InstructionDiscriminator::CreatePermission => { + pinocchio_log::log!("CreatePermission"); + } + InstructionDiscriminator::UpdatePermission => { + pinocchio_log::log!("UpdatePermission"); + } + InstructionDiscriminator::ClosePermission => { + pinocchio_log::log!("ClosePermission"); + } + InstructionDiscriminator::UndelegationCallback => { + pinocchio_log::log!("UndelegationCallback"); + } + } +} diff --git a/pinocchio-ephemeral-permission-counter/src/lib.rs b/pinocchio-ephemeral-permission-counter/src/lib.rs new file mode 100644 index 0000000..efc8502 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/src/lib.rs @@ -0,0 +1,12 @@ +#![no_std] +#![allow(unexpected_cfgs)] + +mod entrypoint; +mod processor; +mod state; + +use solana_address::declare_id; + +pub use crate::entrypoint::process_instruction; + +declare_id!("AAWCg4eJHpdmUtM8Wz6Thm8FDi6C3vnMksf1pt2vfxhf"); diff --git a/pinocchio-ephemeral-permission-counter/src/processor.rs b/pinocchio-ephemeral-permission-counter/src/processor.rs new file mode 100644 index 0000000..91be32e --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/src/processor.rs @@ -0,0 +1,327 @@ +use crate::state::Counter; +use ephemeral_rollups_pinocchio::acl::{ + data_buffer_size, CloseEphemeralPermission, CreateEphemeralPermission, EphemeralMembersArgs, + Member, MemberFlags, UpdateEphemeralPermission, MAX_MEMBER_SIZE, +}; +use ephemeral_rollups_pinocchio::instruction::delegate_account; +use ephemeral_rollups_pinocchio::instruction::{commit_and_undelegate_accounts, undelegate}; +use ephemeral_rollups_pinocchio::types::DelegateConfig; +use pinocchio::sysvars::rent::Rent; +use pinocchio::sysvars::Sysvar; +use pinocchio::{ + account::AccountView, + cpi::{Seed, Signer}, + error::ProgramError, + Address, ProgramResult, +}; +use pinocchio_log::log; +use pinocchio_system::instructions::CreateAccount; + +/// Create and initialize the counter PDA for the initializer. +pub fn process_initialize_counter(accounts: &[AccountView], id: &Address) -> ProgramResult { + let [payer_info, counter_info, _system_program] = accounts else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + + let (counter_pda, bump) = Counter::find_pda(id); + if &counter_pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + + if counter_info.lamports() != 0 && counter_info.owned_by(&crate::ID) { + // Idempotent + return Ok(()); + } + + // Counter signer seeds + let bump_seed = [bump]; + let seeds_array: [Seed; 3] = [ + Seed::from(b"counter"), + Seed::from(id.as_ref()), + Seed::from(&bump_seed), + ]; + + // Signer with bump + let signer = Signer::from(&seeds_array); + + // Create counter account if it doesn't exist. + log!("Creating counter ..."); + let rent_exempt_lamports = Rent::get()?.try_minimum_balance(Counter::SIZE)?; + // TODO: Use method from SDK + let ephemeral_rent = (35 + 2 * MAX_MEMBER_SIZE as u64 + 60) * 32; + log!("Rent exempt lamports: {}", rent_exempt_lamports); + CreateAccount { + from: payer_info, + to: counter_info, + lamports: rent_exempt_lamports + ephemeral_rent, + space: Counter::SIZE as u64, + owner: &crate::ID, + } + .invoke_signed(&[signer.clone()])?; + log!("Counter created successfully"); + + // Initialize counter to 0. + let mut data = counter_info.try_borrow_mut()?; + let counter_data = Counter::load_mut(&mut data)?; + counter_data.bump = bump; + counter_data.count = 0; + counter_data.id = *id; + + Ok(()) +} + +/// Increase the counter PDA by the requested amount. +pub fn process_increase_counter(accounts: &[AccountView], increase_by: u64) -> ProgramResult { + let [counter_info] = accounts else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + + let mut data = counter_info.try_borrow_mut()?; + let counter_data = Counter::load_mut(&mut data)?; + let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; + + if &counter_pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + + log!( + "Increasing counter by {} from {} to {}", + increase_by, + counter_data.count, + counter_data.count + increase_by + ); + counter_data.count = counter_data + .count + .checked_add(increase_by) + .ok_or(ProgramError::ArithmeticOverflow)?; + + Ok(()) +} + +/// Delegate the counter PDA to the delegation program. +pub fn process_delegate(accounts: &[AccountView]) -> ProgramResult { + let [payer_info, counter_info, owner_program, delegation_buffer, delegation_record, delegation_metadata, _delegation_program, system_program, rest @ ..] = + accounts + else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + let validator = rest.first().map(|account| *account.address()); + + let (bump, id, counter_pda) = { + let data = counter_info.try_borrow()?; + let counter_data = Counter::load(&data)?; + let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; + (counter_data.bump, counter_data.id, counter_pda) + }; + + let seed_1 = b"counter"; + let seed_2 = id.as_ref(); + let seeds: &[&[u8]] = &[seed_1, seed_2]; + + let delegate_config = DelegateConfig { + validator, + ..Default::default() + }; + + if &counter_pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + + delegate_account( + &[ + payer_info, + counter_info, + owner_program, + delegation_buffer, + delegation_record, + delegation_metadata, + system_program, + ], + seeds, + bump, + delegate_config, + )?; + + Ok(()) +} + +/// Commit the counter PDA state and undelegate it. +pub fn process_commit_and_undelegate(accounts: &[AccountView]) -> ProgramResult { + let [payer_info, counter_info, magic_program, magic_context] = accounts else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + + if !payer_info.is_signer() { + return Err(ProgramError::MissingRequiredSignature); + } + + { + let data = counter_info.try_borrow()?; + let counter_data = Counter::load(&data)?; + let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; + + if &counter_pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + } + + commit_and_undelegate_accounts( + payer_info, + &[counter_info.clone()], + magic_context, + magic_program, + None, + None, + )?; + + Ok(()) +} + +/// Create a new permission for the counter PDA. +pub fn process_create_permission(accounts: &[AccountView]) -> ProgramResult { + let [authority_info, counter_info, permission_program, permission_info, magic_program, vault_info] = + accounts + else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + + let (bump, id, counter_pda) = { + let data = counter_info.try_borrow()?; + let counter_data = Counter::load(&data)?; + let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; + (counter_data.bump, counter_data.id, counter_pda) + }; + + if &counter_pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + + let bump_seed = [bump]; + let seeds = [ + Seed::from(b"counter"), + Seed::from(id.as_ref()), + Seed::from(&bump_seed), + ]; + let signer = Signer::from(&seeds); + + CreateEphemeralPermission { + payer: counter_info, + permissioned_account: counter_info, + permission: permission_info, + permission_program: permission_program, + magic_program: magic_program, + vault: vault_info, + args: EphemeralMembersArgs { + members: &[Member { + flags: MemberFlags::from_acl_flag_byte( + MemberFlags::AUTHORITY | MemberFlags::TX_LOGS, + ), + pubkey: *authority_info.address(), + }], + is_private: true, + }, + } + .invoke_signed::<{ data_buffer_size(1) }>(&[signer])?; + + Ok(()) +} + +/// Update the permission for the counter PDA. +pub fn process_update_permission(accounts: &[AccountView]) -> ProgramResult { + let [payer_info, counter_info, permission_program, permission, magic_program, vault_info] = + accounts + else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + + let (bump, id, counter_pda) = { + let data = counter_info.try_borrow()?; + let counter_data = Counter::load(&data)?; + let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; + (counter_data.bump, counter_data.id, counter_pda) + }; + + if &counter_pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + + let bump_seed = [bump]; + let seeds = [ + Seed::from(b"counter"), + Seed::from(id.as_ref()), + Seed::from(&bump_seed), + ]; + let signer = Signer::from(&seeds); + + UpdateEphemeralPermission { + authority: payer_info, + authority_is_signer: true, + payer: counter_info, + permissioned_account: counter_info, + permission: permission, + permission_program: permission_program, + magic_program: magic_program, + vault: vault_info, + args: EphemeralMembersArgs { + members: &[Member { + flags: MemberFlags::default(), + pubkey: *payer_info.address(), + }], + is_private: true, + }, + } + .invoke_signed::<{ data_buffer_size(1) }>(&[signer])?; + + Ok(()) +} + +/// Close the permission for the counter PDA. +pub fn process_close_permission(accounts: &[AccountView]) -> ProgramResult { + let [payer_info, counter_info, permission_program, permission, magic_program, vault_info] = + accounts + else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + + let (bump, id, counter_pda) = { + let data = counter_info.try_borrow()?; + let counter_data = Counter::load(&data)?; + let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; + (counter_data.bump, counter_data.id, counter_pda) + }; + + if &counter_pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + + let bump_seed = [bump]; + let seeds = [ + Seed::from(b"counter"), + Seed::from(id.as_ref()), + Seed::from(&bump_seed), + ]; + let signer = Signer::from(&seeds); + + CloseEphemeralPermission { + authority: payer_info, + authority_is_signer: true, + payer: counter_info, + permissioned_account: counter_info, + permission: permission, + permission_program: permission_program, + magic_program: magic_program, + vault: vault_info, + } + .invoke_signed(&[signer])?; + + Ok(()) +} + +/// Handle the callback emitted by the delegation program on undelegation. +pub fn process_undelegation_callback(accounts: &[AccountView], ix_data: &[u8]) -> ProgramResult { + let [counter_info, buffer_acc, payer_info, _system_program, ..] = accounts else { + return Err(ProgramError::NotEnoughAccountKeys); + }; + undelegate(counter_info, &crate::ID, buffer_acc, payer_info, ix_data)?; + Ok(()) +} diff --git a/pinocchio-ephemeral-permission-counter/src/state.rs b/pinocchio-ephemeral-permission-counter/src/state.rs new file mode 100644 index 0000000..83b2f0a --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/src/state.rs @@ -0,0 +1,47 @@ +use pinocchio::{error::ProgramError, Address}; + +// State structure for the counter +#[repr(C)] +pub struct Counter { + pub id: Address, + pub count: u64, + pub bump: u8, + pub _pad: [u8; 7], +} + +impl Counter { + pub const SIZE: usize = 32 + 8 + 8; + + pub fn load(data: &[u8]) -> Result<&Self, ProgramError> { + if data.len() < Self::SIZE { + return Err(ProgramError::InvalidAccountData); + } + let ptr = data.as_ptr() as *const Self; + if !(ptr as usize).is_multiple_of(core::mem::align_of::()) { + return Err(ProgramError::InvalidAccountData); + } + // Safety: caller ensures the account data is valid for Counter. + Ok(unsafe { &*ptr }) + } + + pub fn load_mut(data: &mut [u8]) -> Result<&mut Self, ProgramError> { + if data.len() < Self::SIZE { + return Err(ProgramError::InvalidAccountData); + } + let ptr = data.as_mut_ptr() as *mut Self; + if !(ptr as usize).is_multiple_of(core::mem::align_of::()) { + return Err(ProgramError::InvalidAccountData); + } + // Safety: caller ensures the account data is valid for Counter. + Ok(unsafe { &mut *ptr }) + } + + pub fn find_pda(id: &Address) -> (Address, u8) { + Address::find_program_address(&[b"counter", id.as_ref()], &crate::ID) + } + + pub fn derive_pda(id: &Address, bump: &[u8]) -> Result { + Address::create_program_address(&[b"counter", id.as_ref(), bump], &crate::ID) + .map_err(|_| ProgramError::InvalidSeeds) + } +} diff --git a/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts b/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts new file mode 100644 index 0000000..c31ef89 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts @@ -0,0 +1,544 @@ +import { + Keypair, + PublicKey, + SystemProgram, + Transaction, + TransactionInstruction, + Connection, + sendAndConfirmTransaction, +} from "@solana/web3.js"; +import * as fs from "fs"; +import { + DELEGATION_PROGRAM_ID, + delegationRecordPdaFromDelegatedAccount, + delegationMetadataPdaFromDelegatedAccount, + delegateBufferPdaFromDelegatedAccountAndOwnerProgram, + MAGIC_CONTEXT_ID, + MAGIC_PROGRAM_ID, + PERMISSION_PROGRAM_ID, + getAuthToken, + GetCommitmentSignature, +} from "@magicblock-labs/ephemeral-rollups-sdk"; +import * as nacl from "tweetnacl"; +import path from "path"; + +import { describe, it, expect, beforeAll } from "vitest"; + +import dotenv from "dotenv"; +import { homedir } from "os"; +dotenv.config(); + +const VAULT = new PublicKey("MagicVau1t999999999999999999999999999999999"); +const PROGRAM_ID = new PublicKey( + "AAWCg4eJHpdmUtM8Wz6Thm8FDi6C3vnMksf1pt2vfxhf", +); + +describe("pinocchio-ephemeral-secret-counter", async () => { + // Open user keypair from private key or default location + const KEYPAIR = + process.env.PRIVATE_KEY || + fs.readFileSync(path.join(homedir(), "/.config/solana/id.json"), "utf8"); + const userKeypair = Keypair.fromSecretKey( + Uint8Array.from(JSON.parse(KEYPAIR)), + ); + + // Set up PER connection + const teeUrl = + process.env.EPHEMERAL_PROVIDER_ENDPOINT || + "https://devnet-tee.magicblock.app"; + const teeWsUrl = + process.env.EPHEMERAL_WS_ENDPOINT || "wss://devnet-tee.magicblock.app"; + const authToken = teeUrl.includes("tee") + ? ( + await getAuthToken( + teeUrl, + userKeypair.publicKey, + (message: Uint8Array) => + Promise.resolve(nacl.sign.detached(message, userKeypair.secretKey)), + ) + ).token + : ""; + const teeUserUrl = authToken ? `${teeUrl}?token=${authToken}` : teeUrl; + const teeUserWsUrl = authToken ? `${teeWsUrl}?token=${authToken}` : teeWsUrl; + console.log( + "User Explorer URL:", + `https://explore.solana.com/?cluster=custom&customUrl=${teeUserUrl}`, + ); + + // Set up a connection to blockchain cluster + const connectionBaseLayer = new Connection( + process.env.PROVIDER_ENDPOINT || "https://api.devnet.solana.com", + { wsEndpoint: process.env.WS_ENDPOINT || "wss://api.devnet.solana.com" }, + ); + const connectionEphemeralRollup = new Connection( + process.env.EPHEMERAL_PROVIDER_ENDPOINT || teeUserUrl, + { wsEndpoint: process.env.EPHEMERAL_WS_ENDPOINT || teeUserWsUrl }, + ); + console.log("Base Layer Connection: ", connectionBaseLayer.rpcEndpoint); + console.log( + "Ephemeral Rollup Connection: ", + connectionEphemeralRollup.rpcEndpoint, + ); + + const id = Keypair.generate().publicKey; + let validator: PublicKey = new PublicKey( + "MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo", + ); + const unauthorizedKeypair = Keypair.generate(); + const unauthorizedAuthToken = teeUrl.includes("tee") + ? await getAuthToken( + teeUrl, + unauthorizedKeypair.publicKey, + (message: Uint8Array) => + Promise.resolve( + nacl.sign.detached(message, unauthorizedKeypair.secretKey), + ), + ) + : ""; + const unauthorizedConnection = teeUrl.includes("tee") + ? new Connection( + `${process.env.EPHEMERAL_PROVIDER_ENDPOINT || teeUrl}?token=${unauthorizedAuthToken.token}`, + { + wsEndpoint: `${process.env.EPHEMERAL_WS_ENDPOINT || teeWsUrl}?token=${unauthorizedAuthToken.token}`, + }, + ) + : new Connection(process.env.EPHEMERAL_PROVIDER_ENDPOINT || teeUrl, { + wsEndpoint: process.env.EPHEMERAL_WS_ENDPOINT || teeWsUrl, + }); + console.log("Unauthorized Connection: ", unauthorizedConnection.rpcEndpoint); + + // Get pda of counter_account + const [counterPda, bump] = PublicKey.findProgramAddressSync( + [Buffer.from("counter"), id.toBuffer()], + PROGRAM_ID, + ); + console.log("Program ID: ", PROGRAM_ID.toString()); + console.log("Counter PDA: ", counterPda.toString()); + console.log("Bump: ", bump); + + // Get permission PDA + const [permissionPda] = PublicKey.findProgramAddressSync( + [Buffer.from("permission:"), counterPda.toBuffer()], + PERMISSION_PROGRAM_ID, + ); + console.log("Permission PDA: ", permissionPda.toString()); + + beforeAll(async () => { + const response = await fetch(teeUrl, { + method: "POST", + body: JSON.stringify({ + method: "getIdentity", + jsonrpc: "2.0", + id: "123456789", + }), + }); + const data: any = await response.json(); + console.log("Validator: ", data.result.identity); + validator = new PublicKey(data.result.identity); + }); + + it("Initialize counter on Solana", async () => { + const ixData = Buffer.concat([ + Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), + id.toBuffer(), + ]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + { + pubkey: userKeypair.publicKey, + isSigner: true, + isWritable: true, + }, + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + ], + }), + ); + + const txHash = await sendAndConfirmTransaction( + connectionBaseLayer, + tx, + [userKeypair], + { + commitment: "confirmed", + }, + ); + console.log(`(Base Layer) Initialize txHash: ${txHash}`); + expect(txHash).toBeDefined(); + + let counter = await connectionBaseLayer.getAccountInfo(counterPda, { + commitment: "confirmed", + }); + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([0, 0, 0, 0, 0, 0, 0, 0]), + ); + }); + + it("Increase counter on Solana", async () => { + const ixData = Buffer.concat([ + Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), + Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), + ]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + ], + }), + ); + + const txHash = await sendAndConfirmTransaction( + connectionBaseLayer, + tx, + [userKeypair], + { + commitment: "confirmed", + }, + ); + console.log(`(Base Layer) Increment txHash: ${txHash}`); + expect(txHash).toBeDefined(); + + let counter = await connectionBaseLayer.getAccountInfo(counterPda, { + commitment: "confirmed", + }); + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), + ); + }); + + it("Delegate counter to ER", async function () { + const ixData = Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + // Initializer + { + pubkey: userKeypair.publicKey, + isSigner: true, + isWritable: true, + }, + // Counter Account + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + // Owner Program + { + pubkey: PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + // Delegation Buffer + { + pubkey: delegateBufferPdaFromDelegatedAccountAndOwnerProgram( + counterPda, + PROGRAM_ID, + ), + isSigner: false, + isWritable: true, + }, + // Delegation Record + { + pubkey: delegationRecordPdaFromDelegatedAccount(counterPda), + isSigner: false, + isWritable: true, + }, + // Delegation Metadata + { + pubkey: delegationMetadataPdaFromDelegatedAccount(counterPda), + isSigner: false, + isWritable: true, + }, + // Delegation Program + { + pubkey: DELEGATION_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + // System Program + { + pubkey: SystemProgram.programId, + isSigner: false, + isWritable: false, + }, + // PER Validator + { + pubkey: validator, + isSigner: false, + isWritable: false, + }, + ], + }), + ); + + const txHash = await sendAndConfirmTransaction( + connectionBaseLayer, + tx, + [userKeypair], + { + commitment: "confirmed", + }, + ); + console.log(`(Base Layer) Delegate txHash: ${txHash}`); + expect(txHash).toBeDefined(); + }); + + it("Increase counter on ER", async () => { + const ixData = Buffer.concat([ + Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), + Buffer.from([1, 0, 0, 0, 0, 0, 0, 0]), + ]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + ], + }), + ); + + const txHash = await sendAndConfirmTransaction( + connectionEphemeralRollup, + tx, + [userKeypair], + { + commitment: "confirmed", + }, + ); + console.log(`(ER) Increment txHash: ${txHash}`); + expect(txHash).toBeDefined(); + + // Check readability + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + + counter = await unauthorizedConnection.getAccountInfo(counterPda); + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + }); + + it("Create permission on ER", async () => { + const ixData = Buffer.from([4, 0, 0, 0, 0, 0, 0, 0]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + { + pubkey: userKeypair.publicKey, + isSigner: true, + isWritable: true, + }, + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: PERMISSION_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: permissionPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: MAGIC_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: VAULT, + isSigner: false, + isWritable: true, + }, + ], + }), + ); + + const txHash = await sendAndConfirmTransaction( + connectionEphemeralRollup, + tx, + [userKeypair], + { + commitment: "confirmed", + skipPreflight: true, + }, + ); + console.log(`(ER) Create permission txHash: ${txHash}`); + expect(txHash).toBeDefined(); + + // Check readability + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + + counter = await unauthorizedConnection.getAccountInfo(counterPda); + if (teeUrl.includes("tee")) { + expect(counter).toBeNull(); + } else { + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + } + + // Check permission + let permission = + await connectionEphemeralRollup.getAccountInfo(permissionPda); + expect(permission).toBeDefined(); + expect(permission?.data.subarray(36, 68)).toEqual(PROGRAM_ID.toBuffer()); + expect(permission?.data.subarray(69, 101)).toEqual( + userKeypair.publicKey.toBuffer(), + ); + }); + + it("Close permission on ER", async () => { + const ixData = Buffer.from([6, 0, 0, 0, 0, 0, 0, 0]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + { + pubkey: userKeypair.publicKey, + isSigner: true, + isWritable: true, + }, + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: PERMISSION_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: permissionPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: MAGIC_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: VAULT, + isSigner: false, + isWritable: true, + }, + ], + }), + ); + + const txHash = await connectionEphemeralRollup.sendTransaction( + tx, + [userKeypair], + { skipPreflight: true }, + ); + console.log(`(ER) Close permission txHash: ${txHash}`); + const result = await connectionEphemeralRollup.confirmTransaction(txHash); + expect(result.value?.err).toBeNull(); + expect(txHash).toBeDefined(); + + // Check readability + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + + counter = await unauthorizedConnection.getAccountInfo(counterPda); + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + }); + + it.skip("Commit and undelegate counter on ER to Solana", async function () { + const ixData = Buffer.from([3, 0, 0, 0, 0, 0, 0, 0]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + { + pubkey: userKeypair.publicKey, + isSigner: true, + isWritable: true, + }, + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: MAGIC_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: MAGIC_CONTEXT_ID, + isSigner: false, + isWritable: true, + }, + ], + }), + ); + const txHash = await sendAndConfirmTransaction( + connectionEphemeralRollup, + tx, + [userKeypair], + { + commitment: "confirmed", + }, + ); + console.log(`(ER) Undelegate txHash: ${txHash}`); + expect(txHash).toBeDefined(); + + await GetCommitmentSignature(txHash, connectionEphemeralRollup); + + // Check readability + let counter = await connectionBaseLayer.getAccountInfo(counterPda); + expect(counter?.owner.equals(PROGRAM_ID)).toBe(true); + }); +}); diff --git a/pinocchio-ephemeral-permission-counter/tsconfig.json b/pinocchio-ephemeral-permission-counter/tsconfig.json new file mode 100644 index 0000000..4271710 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": ["ES2020"], + "types": ["node", "vitest"], + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true + }, + "include": ["tests/**/*.ts"] +} diff --git a/pinocchio-ephemeral-permission-counter/yarn.lock b/pinocchio-ephemeral-permission-counter/yarn.lock new file mode 100644 index 0000000..c2b2523 --- /dev/null +++ b/pinocchio-ephemeral-permission-counter/yarn.lock @@ -0,0 +1,2894 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@babel/runtime@npm:^7.25.0": + version: 7.29.2 + resolution: "@babel/runtime@npm:7.29.2" + checksum: 10c0/30b80a0140d16467792e1bbeb06f655b0dab70407da38dfac7fedae9c859f9ae9d846ef14ad77bd3814c064295fe9b1bc551f1541ea14646ae9f22b71a8bc17a + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": "npm:0.3.9" + checksum: 10c0/05c5368c13b662ee4c122c7bfbe5dc0b613416672a829f3e78bc49a357a197e0218d6e74e7c66cfcd04e15a179acab080bd3c69658c9fbefd0e1ccd950a07fc6 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.0.3" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + checksum: 10c0/fa425b606d7c7ee5bfa6a31a7b050dd5814b4082f318e0e4190f991902181b4330f43f4805db1dd4f2433fd0ed9cc7a7b9c2683f1deeab1df1b0a98b1e24055b + languageName: node + linkType: hard + +"@magicblock-labs/ephemeral-rollups-sdk@npm:^0.11.1": + version: 0.11.2 + resolution: "@magicblock-labs/ephemeral-rollups-sdk@npm:0.11.2" + dependencies: + "@noble/curves": "npm:^1.4.2" + "@noble/hashes": "npm:^1.4.0" + "@phala/dcap-qvl": "npm:^0.3.9" + "@solana/web3.js": "npm:^1.98.0" + bs58: "npm:^6.0.0" + rpc-websockets: "npm:^9.0.4" + tweetnacl: "npm:^1.0.3" + typescript: "npm:^5.3.0" + checksum: 10c0/8ac06dd13c94e0208899b2e7bcc600874c85bbdb666fc946fcdee84d0010a7f88145f72300a29d4d710d208da9395e964ae718587851dd504efc573f45a1dcf4 + languageName: node + linkType: hard + +"@noble/curves@npm:^1.4.2": + version: 1.9.7 + resolution: "@noble/curves@npm:1.9.7" + dependencies: + "@noble/hashes": "npm:1.8.0" + checksum: 10c0/150014751ebe8ca06a8654ca2525108452ea9ee0be23430332769f06808cddabfe84f248b6dbf836916bc869c27c2092957eec62c7506d68a1ed0a624017c2a3 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.4.0": + version: 1.8.0 + resolution: "@noble/hashes@npm:1.8.0" + checksum: 10c0/06a0b52c81a6fa7f04d67762e08b2c476a00285858150caeaaff4037356dd5e119f45b2a530f638b77a5eeca013168ec1b655db41bae3236cb2e9d511484fc77 + languageName: node + linkType: hard + +"@peculiar/asn1-schema@npm:^2.3.13, @peculiar/asn1-schema@npm:^2.7.0": + version: 2.7.0 + resolution: "@peculiar/asn1-schema@npm:2.7.0" + dependencies: + "@peculiar/utils": "npm:^2.0.2" + asn1js: "npm:^3.0.6" + tslib: "npm:^2.8.1" + checksum: 10c0/6d799b62e8e9d7eed63a3044201ced4efef923011216c17da017a568bdb3c0f56abcea24d41df24916d1731e4a6920f8d84176f3e044f44f6541c83ae31fe670 + languageName: node + linkType: hard + +"@peculiar/asn1-x509@npm:^2.3.13": + version: 2.7.0 + resolution: "@peculiar/asn1-x509@npm:2.7.0" + dependencies: + "@peculiar/asn1-schema": "npm:^2.7.0" + "@peculiar/utils": "npm:^2.0.2" + asn1js: "npm:^3.0.6" + tslib: "npm:^2.8.1" + checksum: 10c0/095d1b5fd0dfb9ba9cffe5ce9fad31173f5184896d7d51270bc174745c5c6720f37ec83c8ac7b1b6db7100a94c550045d9ad37ce8f162d19cc93ebce6620f625 + languageName: node + linkType: hard + +"@peculiar/utils@npm:^2.0.2": + version: 2.0.3 + resolution: "@peculiar/utils@npm:2.0.3" + dependencies: + tslib: "npm:^2.8.1" + checksum: 10c0/e111a51c83334d6ff3c96b993ed0d718210620f3ad176853a4bf229f1cf4cd14e9388075318351b188862d34d2192d80f206f6bea53aa1459df3ec638cbcdbd5 + languageName: node + linkType: hard + +"@phala/dcap-qvl@npm:^0.3.9": + version: 0.3.9 + resolution: "@phala/dcap-qvl@npm:0.3.9" + dependencies: + "@peculiar/asn1-schema": "npm:^2.3.13" + "@peculiar/asn1-x509": "npm:^2.3.13" + asn1.js: "npm:^5.4.1" + bn.js: "npm:^5.2.2" + buffer: "npm:^6.0.3" + elliptic: "npm:^6.6.1" + hash.js: "npm:^1.1.7" + node-fetch: "npm:^2.7.0" + bin: + test_case: test_case.js + checksum: 10c0/149609ae68876c2253730aa93cc721160086594eda5c7963cc729b97952203f8a87fa080b31db8e50fdea0a3ec9f3a1f658159de6bc3ebfb46757e7e2252f0ac + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-android-arm64@npm:4.60.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-darwin-arm64@npm:4.60.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-darwin-x64@npm:4.60.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.3" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-freebsd-x64@npm:4.60.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.3" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.3" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.3" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.3" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.3" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.3" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.3" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.3" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.3" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.3" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.3" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.3" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-openbsd-x64@npm:4.60.3" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.10 + resolution: "@sinclair/typebox@npm:0.27.10" + checksum: 10c0/ca42a02817656dbdae464ed4bb8aca6ad4718d7618e270760fea84a834ad0ecc1a22eba51421f09e5047174571131356ff3b5d80d609ced775d631df7b404b0d + languageName: node + linkType: hard + +"@solana-program/system@npm:^0.10.0": + version: 0.10.0 + resolution: "@solana-program/system@npm:0.10.0" + peerDependencies: + "@solana/kit": ^5.0 + checksum: 10c0/4cc3164d49fe7b10e9c0c89493f738e2d4294e2eae40fafee56b01dfb50b939c88f82eb06d5393333743b0edee961b03e947afcc20e6965252576900266ec52e + languageName: node + linkType: hard + +"@solana/accounts@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/accounts@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/9851005767107f198a7d4dbd5498b271236d83527b25fc05d7beb5b347ac072fb51119b9863d2033e89bb9ee06e78289a1a71b0147d19a444c28ba36f19f970b + languageName: node + linkType: hard + +"@solana/addresses@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/addresses@npm:5.5.1" + dependencies: + "@solana/assertions": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4908e3019c930c2c4a13528eae7a5bfac25400b4173144180a68bcbac43d1b90b0771bf952711503814440547ed45d32c3b450bac0aff19974035111e0f79865 + languageName: node + linkType: hard + +"@solana/assertions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/assertions@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d1a8fbfdd8e551d84b7624d645fcae66a26d9022828795f10b252f45fb84299088cec75e8f156895bb930c977db1bcbdda8ceb011f373fb288f0adb5ea4ecd31 + languageName: node + linkType: hard + +"@solana/buffer-layout@npm:^4.0.1": + version: 4.0.1 + resolution: "@solana/buffer-layout@npm:4.0.1" + dependencies: + buffer: "npm:~6.0.3" + checksum: 10c0/6535f3908cf6dfc405b665795f0c2eaa0482a8c6b1811403945cf7b450e7eb7b40acce3e8af046f2fcc3eea1a15e61d48c418315d813bee4b720d56b00053305 + languageName: node + linkType: hard + +"@solana/codecs-core@npm:2.3.0": + version: 2.3.0 + resolution: "@solana/codecs-core@npm:2.3.0" + dependencies: + "@solana/errors": "npm:2.3.0" + peerDependencies: + typescript: ">=5.3.3" + checksum: 10c0/efef080b94fe572bcfeac9f1c0b222700203bd2b45c9590e77445b35335d0ed2582d1cc4e533003d2090c385c06eb93dfa05388f9766182aa60ce85eacfd8042 + languageName: node + linkType: hard + +"@solana/codecs-core@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-core@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/a66cd3e3c9a0fcf369be5c3369463db03f4b1e1aa0d322d6cb8440613dcc83608dd52501ff2ee3c56daed2b1f2b07751cfa1fe1aeb584a306a9e14175b0ca994 + languageName: node + linkType: hard + +"@solana/codecs-data-structures@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-data-structures@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/db88246a2fc3d4c3c7d69d5e9ce7fab815be4e10e0b1519ed00454c7ac2189fc3dd2d2ae0cb05a77d560ccdc615652122cfada59e34285ce08545474542e4874 + languageName: node + linkType: hard + +"@solana/codecs-numbers@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-numbers@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1802ec289a912b086c031c8da7f856ffb2c5a581b2fef9de5bd0ea23e192ca472cc01f1a46747e0f9c1505c826f404bf2862d7403175688136b87056d22fc441 + languageName: node + linkType: hard + +"@solana/codecs-numbers@npm:^2.1.0": + version: 2.3.0 + resolution: "@solana/codecs-numbers@npm:2.3.0" + dependencies: + "@solana/codecs-core": "npm:2.3.0" + "@solana/errors": "npm:2.3.0" + peerDependencies: + typescript: ">=5.3.3" + checksum: 10c0/0780d60771e451cfe22ea614315fed2f37507aa62f83cddb900186f88d4d4532eea298d74796d1dbc8c34321a570b5d9ada25e8f4a5aeadd57aa4e688b4465f5 + languageName: node + linkType: hard + +"@solana/codecs-strings@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs-strings@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: ^5.0.0 + peerDependenciesMeta: + fastestsmallesttextencoderdecoder: + optional: true + typescript: + optional: true + checksum: 10c0/16cf7f6edee96a11862bf41cc31e0162848ecd5ba67826eee3e5fe9f10007631db5f34f794fcf44bb075cbcaf43843e34632659105f75a02c7ff3d703ee49325 + languageName: node + linkType: hard + +"@solana/codecs@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/codecs@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/options": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/bf576cb014f342edddb4b77f83a111ceecfc5709ecaa6225c71cbb40b3d31aba26f3c3f5787684d472b1ed0c705df10be517fdbab659cf43cd7a6e21bea9a9c1 + languageName: node + linkType: hard + +"@solana/errors@npm:2.3.0": + version: 2.3.0 + resolution: "@solana/errors@npm:2.3.0" + dependencies: + chalk: "npm:^5.4.1" + commander: "npm:^14.0.0" + peerDependencies: + typescript: ">=5.3.3" + bin: + errors: bin/cli.mjs + checksum: 10c0/55bef8828b4a6bb5222d3dbfe27162684906ba90753126b9cfd1e8e39c6c29209c0f4f331cfb1d3d1cf43fd456022af92337b4234a145d8de292588197c12c71 + languageName: node + linkType: hard + +"@solana/errors@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/errors@npm:5.5.1" + dependencies: + chalk: "npm:5.6.2" + commander: "npm:14.0.2" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + bin: + errors: bin/cli.mjs + checksum: 10c0/cafa60aa4ca91c78b0d85e5d296c9080fc537b0c62ba1bc3d3d00eaad96d2894178849be478e653cf963a2d18d71b54e0f58f319a7d77f6dbfdd5845af4c6a08 + languageName: node + linkType: hard + +"@solana/fast-stable-stringify@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/fast-stable-stringify@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/b116c515e71cdace7a2e45c001de486c528e178f6170dc6faaea33a3a076a5ddd7806302584e480ef0dbf9f84c9a808cbc99a068c48b0e777bc5b5e178291ed9 + languageName: node + linkType: hard + +"@solana/functional@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/functional@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/17f60572407006b8913529019d928b0b43b6c24798fd743673a7878e8b8db25ebe27b7eb9ef0e28cc24773d34acbb1d5fe617f9096d527efc62c9e6719f7ada2 + languageName: node + linkType: hard + +"@solana/instruction-plans@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/instruction-plans@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/9f1cde9b925f1ecc01f3ceb6b87ba6154befb991ad58b176f58f2f210d75968d2dc26adada623d54eb5039a4116c5f8bf48e5153b813720dfc91301c2e37eb42 + languageName: node + linkType: hard + +"@solana/instructions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/instructions@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/72b3d599e8016ec6fdb34b3cdbc9cca76a8153e911fd18bee3ea9af8caf19591615425eb3c24aa04ee5da16f87fc568a17574532859b7a50c829c49397458dc4 + languageName: node + linkType: hard + +"@solana/keys@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/keys@npm:5.5.1" + dependencies: + "@solana/assertions": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1b76a7c5b15a331ebc51c003f2f2e248c91a0f3c09659de855b05757c203c7a0e165c18c3a1b3636fd919859eb58b3e51afac234aa186e01305d4c5a38a3255d + languageName: node + linkType: hard + +"@solana/kit@npm:^5.4.0": + version: 5.5.1 + resolution: "@solana/kit@npm:5.5.1" + dependencies: + "@solana/accounts": "npm:5.5.1" + "@solana/addresses": "npm:5.5.1" + "@solana/codecs": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/instruction-plans": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/offchain-messages": "npm:5.5.1" + "@solana/plugin-core": "npm:5.5.1" + "@solana/programs": "npm:5.5.1" + "@solana/rpc": "npm:5.5.1" + "@solana/rpc-api": "npm:5.5.1" + "@solana/rpc-parsed-types": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-subscriptions": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/signers": "npm:5.5.1" + "@solana/sysvars": "npm:5.5.1" + "@solana/transaction-confirmation": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/391fd781c28c2550dae77395b0bc4e37799da13695be03c5c57e82c31b4556c29b8ac4853087908549415c419ed758c34c1ac9cdae37c4e0d28b4c9be6867b81 + languageName: node + linkType: hard + +"@solana/nominal-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/nominal-types@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/aa0f5b850c6e74d6f883d9a2513f561112d531cda750ba75efbc84a524ffc69e014740f5fac308b42499b5ea4fcaa5d34fe3acd334ef65dffe22ba822c476fbc + languageName: node + linkType: hard + +"@solana/offchain-messages@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/offchain-messages@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/93ba0fec4a3387e4809d8ebbdeb71901d69821cdd4b3645ee054197f9d564227cb76d66b509b98f1902fe522575662824ea58e583665c624dfb05e9a0d52b6dc + languageName: node + linkType: hard + +"@solana/options@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/options@npm:5.5.1" + dependencies: + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d4ab205e1286ba02a2ad97d8a3ad22e57798ce8f0fd77f3734f2c4a923c9fc7f0f949d5ceeb8b33eaf5484460c49ed0d9138f3eff5a571e754488f8aa4819269 + languageName: node + linkType: hard + +"@solana/plugin-core@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/plugin-core@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/6d981acfde238517692126f66594598b203eec84753677851f0dc038d01a8c55603aff1319513ba5306a29bf6b0018a1ad2d3b9de49d984acc0ecf76abfffbaa + languageName: node + linkType: hard + +"@solana/programs@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/programs@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4d31ca06655366d368a853772559d5853494e82c559a02b8f6c4f90d390fb196df50b2d0d0540c2f7bbb7cc0abb3ac2e5694c2148a2bcc034a33dd64b7a105f4 + languageName: node + linkType: hard + +"@solana/promises@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/promises@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/d9818a5d38b85a17f74782457d8953c95835cc1190a63ff6749610e5f6272ee50d08f5720a84f9a5885e0faa94390210b86d927cf81c95f63707a122dfae100d + languageName: node + linkType: hard + +"@solana/rpc-api@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-api@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/rpc-parsed-types": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/7ac47bc771d825c251f18d92e0eaef8a1f90542e5313249f88970aff666e8aa4ba446d9efc0ded2188d60c41512c09aa285bf1847bd0c439e1a4ddcb20748fc4 + languageName: node + linkType: hard + +"@solana/rpc-parsed-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-parsed-types@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/b042b4d252e7b31a2e2cdc957711f0ecc438d1667da7414c0da25218fb439b1de2de0c1845a2ca776cddd8e399ba886a43a1f72a50e1ae0790ea6a500c90cfdb + languageName: node + linkType: hard + +"@solana/rpc-spec-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-spec-types@npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/19b4c0e3de748db5520ab4f21a97e7ddf8e5f7a722bf635eb62aacd72ee334b2b8ab8f9343bf660055ad61f4ff71cc402e52dd41b3742944e71f54e67bf82f5a + languageName: node + linkType: hard + +"@solana/rpc-spec@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-spec@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/634d5cd3ea7789ff20ca82782ce2fde6bb96c09fcd49dc9d113ade98a4516d2d080f771f3247454e9d4478933a3c1f1380a8409817c12cd40ef6e3579faa1d0d + languageName: node + linkType: hard + +"@solana/rpc-subscriptions-api@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions-api@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/rpc-subscriptions-spec": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/3ad059f20c361d5ced84f1d584ff5513d78559497c7cf8855703a7c1437dcb3024fc1dfe9d1be65e8241a4d1a4d0c272ed2ddca7e1aca3086f204546836503f9 + languageName: node + linkType: hard + +"@solana/rpc-subscriptions-channel-websocket@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions-channel-websocket@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/rpc-subscriptions-spec": "npm:5.5.1" + "@solana/subscribable": "npm:5.5.1" + ws: "npm:^8.19.0" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/37619caefa2f36fdbbbdab0478965a0bc14f72254caa511ecc067700d9c23f4ac221a61079974b8f6286aa2b71bb4ae5fa106297e7044ef0ed7ceb2d816c74a2 + languageName: node + linkType: hard + +"@solana/rpc-subscriptions-spec@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions-spec@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/subscribable": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/9b9e3a81977ee4deac918226a6f6d41fb524563a027d09da4439e18d3c99dd79b2af5a022a16ac97744f8e93ec9dd409714d5c371a313cb811c22194b94f28cc + languageName: node + linkType: hard + +"@solana/rpc-subscriptions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-subscriptions@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/fast-stable-stringify": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-subscriptions-api": "npm:5.5.1" + "@solana/rpc-subscriptions-channel-websocket": "npm:5.5.1" + "@solana/rpc-subscriptions-spec": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/subscribable": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4dda3a418bae0eff6f7da59cc21840e45bd80f3e5fee9edd32ad66b4d128490838017e2ade245fbcd8f4f765bb67350bace41fc56e00a82b739be6d24fd00bbd + languageName: node + linkType: hard + +"@solana/rpc-transformers@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-transformers@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/3500e42b486627be8e39838f02f2f28c759b0183c1bc34e28d2f2289e9ae2e58d5d0825973da601f9f29b1ab366b0017b49df5329c1dcc9932724b9bfdfafafd + languageName: node + linkType: hard + +"@solana/rpc-transport-http@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-transport-http@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + undici-types: "npm:^7.19.2" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/4300e1a334e2ea8deb66542dabff835ae3dbccbaba0011c1cb027f55219cb3144c7fcd5220da06565ef5fa87a25e73a43497caeb7100ff9f1a947792b2325489 + languageName: node + linkType: hard + +"@solana/rpc-types@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc-types@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/84fcad12f65c88bfbbe0689d1fb6715e37c41454b85f50ae0963f2626c45a26155f2395b03ab48f261966f1a5c02b1c96ad42ba0b1ca80c5fe22f08757401b1b + languageName: node + linkType: hard + +"@solana/rpc@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/rpc@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + "@solana/fast-stable-stringify": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/rpc-api": "npm:5.5.1" + "@solana/rpc-spec": "npm:5.5.1" + "@solana/rpc-spec-types": "npm:5.5.1" + "@solana/rpc-transformers": "npm:5.5.1" + "@solana/rpc-transport-http": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/c469655555013f5dcfa67ef3285c9abe48929a34bdc8a3c7c21823f86f58f07f91980ee59d48190bcda5b427399a81cb180ae0ca2542e9dd47e39407f62c7458 + languageName: node + linkType: hard + +"@solana/signers@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/signers@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/offchain-messages": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/53957109e4a99122b1225b04d477760e0c557fa9c66095e334de543e78f79c4b35b280dde942a0d7725dc3e61ee63c41d52b7fe5ddfc28967c3db009856573aa + languageName: node + linkType: hard + +"@solana/subscribable@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/subscribable@npm:5.5.1" + dependencies: + "@solana/errors": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/ff9f4af066488448276a439a9299f481cd70c1866b4ab4cce7c3486d6c950bab092f4f678b8b79b45681942c99090cd624b3eaa2a6c2820079d44c2502e7c77b + languageName: node + linkType: hard + +"@solana/sysvars@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/sysvars@npm:5.5.1" + dependencies: + "@solana/accounts": "npm:5.5.1" + "@solana/codecs": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/773e4ae956ed29999a5e0c76e44c3b390330325b03827a5a5092292678e3d1d46c2958911faf8b94b350bf42db02874b8942bd7679fc63519a259520c269883a + languageName: node + linkType: hard + +"@solana/transaction-confirmation@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/transaction-confirmation@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/promises": "npm:5.5.1" + "@solana/rpc": "npm:5.5.1" + "@solana/rpc-subscriptions": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + "@solana/transactions": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/01b96aa0518417bf257f8691e02aba5ce8a7144c64d1b96b0b17045bfe34dfa00b2035e6a930f3e36bb689dd2f00c56fc6b8a521711b2fcd262dcdabd3187966 + languageName: node + linkType: hard + +"@solana/transaction-messages@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/transaction-messages@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/711503174284bf449b5ffbf32ae149a82a097781f0eac1cc777d941b3cc3b9de19a6daa9993c77650e001d8f8e9e2f749bd232a4da6e09fa9c856a03a6ec1cc8 + languageName: node + linkType: hard + +"@solana/transactions@npm:5.5.1": + version: 5.5.1 + resolution: "@solana/transactions@npm:5.5.1" + dependencies: + "@solana/addresses": "npm:5.5.1" + "@solana/codecs-core": "npm:5.5.1" + "@solana/codecs-data-structures": "npm:5.5.1" + "@solana/codecs-numbers": "npm:5.5.1" + "@solana/codecs-strings": "npm:5.5.1" + "@solana/errors": "npm:5.5.1" + "@solana/functional": "npm:5.5.1" + "@solana/instructions": "npm:5.5.1" + "@solana/keys": "npm:5.5.1" + "@solana/nominal-types": "npm:5.5.1" + "@solana/rpc-types": "npm:5.5.1" + "@solana/transaction-messages": "npm:5.5.1" + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1dc87a6599ee60e6026b7de917b1e85a2bc2ec2e13732f872453bed597c86002c8b50ae3a4f2ea5725c969fbebe7f4987c5a2f17b02722a40f0b34191f1c7cf2 + languageName: node + linkType: hard + +"@solana/web3.js@npm:^1.93.0, @solana/web3.js@npm:^1.98.0": + version: 1.98.4 + resolution: "@solana/web3.js@npm:1.98.4" + dependencies: + "@babel/runtime": "npm:^7.25.0" + "@noble/curves": "npm:^1.4.2" + "@noble/hashes": "npm:^1.4.0" + "@solana/buffer-layout": "npm:^4.0.1" + "@solana/codecs-numbers": "npm:^2.1.0" + agentkeepalive: "npm:^4.5.0" + bn.js: "npm:^5.2.1" + borsh: "npm:^0.7.0" + bs58: "npm:^4.0.1" + buffer: "npm:6.0.3" + fast-stable-stringify: "npm:^1.0.0" + jayson: "npm:^4.1.1" + node-fetch: "npm:^2.7.0" + rpc-websockets: "npm:^9.0.2" + superstruct: "npm:^2.0.2" + checksum: 10c0/73bf7b6b5b65c7f264587182bbfd65327775b4f3e4831750de6356f58858e57d49213098eec671650940bb7a9bbaa1f352e0710c4075f126d903d72ddddcbdbc + languageName: node + linkType: hard + +"@swc/helpers@npm:^0.5.11": + version: 0.5.21 + resolution: "@swc/helpers@npm:0.5.21" + dependencies: + tslib: "npm:^2.8.0" + checksum: 10c0/692018ec8a9f7ea5ea3fe576fea5af1a782c8bc1752fcb60f949b482fb2521609d1d3710908aebae67086f152e57d231d59b08f4653fd20a2e3e0fa4a34e6322 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.12 + resolution: "@tsconfig/node10@npm:1.0.12" + checksum: 10c0/7bbbd7408cfaced86387a9b1b71cebc91c6fd701a120369735734da8eab1a4773fc079abd9f40c9e0b049e12586c8ac0e13f0da596bfd455b9b4c3faa813ebc5 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb + languageName: node + linkType: hard + +"@types/chai-subset@npm:^1.3.3": + version: 1.3.6 + resolution: "@types/chai-subset@npm:1.3.6" + peerDependencies: + "@types/chai": <5.2.0 + checksum: 10c0/d8e2362ff7e96b742e00326e656a91fffd6dc1260fd081c30bd607f908eb4d6777cec1e535bae905a8741b8287acded8955c0fe84ee3b6874d38502c029d35c4 + languageName: node + linkType: hard + +"@types/chai@npm:^4.3.5": + version: 4.3.20 + resolution: "@types/chai@npm:4.3.20" + checksum: 10c0/4601189d611752e65018f1ecadac82e94eed29f348e1d5430e5681a60b01e1ecf855d9bcc74ae43b07394751f184f6970fac2b5561fc57a1f36e93a0f5ffb6e8 + languageName: node + linkType: hard + +"@types/connect@npm:^3.4.33": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c + languageName: node + linkType: hard + +"@types/estree@npm:1.0.8": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 25.6.0 + resolution: "@types/node@npm:25.6.0" + dependencies: + undici-types: "npm:~7.19.0" + checksum: 10c0/d2d2015630ff098a201407f55f5077a20270ae4f465c739b40865cd9933b91b9c5d2b85568eadaf3db0801b91e267333ca7eb39f007428b173d1cdab4b339ac5 + languageName: node + linkType: hard + +"@types/node@npm:^12.12.54": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: 10c0/3b190bb0410047d489c49bbaab592d2e6630de6a50f00ba3d7d513d59401d279972a8f5a598b5bb8ddc1702f8a2f4ec57a65d93852f9c329639738e7053637d1 + languageName: node + linkType: hard + +"@types/node@npm:^20.0.0": + version: 20.19.39 + resolution: "@types/node@npm:20.19.39" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/1d16da7b5f47a7415b827fcf3b94d279febf4c14671afec74a03e47856b5270023d9beb1b9aeab4d3b622fd97d61a60206cfc2cca588663181331bc592468289 + languageName: node + linkType: hard + +"@types/uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "@types/uuid@npm:10.0.0" + checksum: 10c0/9a1404bf287164481cb9b97f6bb638f78f955be57c40c6513b7655160beb29df6f84c915aaf4089a1559c216557dc4d2f79b48d978742d3ae10b937420ddac60 + languageName: node + linkType: hard + +"@types/ws@npm:^7.4.4": + version: 7.4.7 + resolution: "@types/ws@npm:7.4.7" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/f1f53febd8623a85cef2652949acd19d83967e350ea15a851593e3033501750a1e04f418552e487db90a3d48611a1cff3ffcf139b94190c10f2fd1e1dc95ff10 + languageName: node + linkType: hard + +"@types/ws@npm:^8.2.2": + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/61aff1129143fcc4312f083bc9e9e168aa3026b7dd6e70796276dcfb2c8211c4292603f9c4864fae702f2ed86e4abd4d38aa421831c2fd7f856c931a481afbab + languageName: node + linkType: hard + +"@vitest/expect@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/expect@npm:0.34.6" + dependencies: + "@vitest/spy": "npm:0.34.6" + "@vitest/utils": "npm:0.34.6" + chai: "npm:^4.3.10" + checksum: 10c0/d68abc53d673c2c98cad84da4fa73bd407d59a1098ca528c6925c202321d4eeecde5eaf512980614a755200ae1aa6b648d44da09b78ce4cc95aa78eff8ee558a + languageName: node + linkType: hard + +"@vitest/runner@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/runner@npm:0.34.6" + dependencies: + "@vitest/utils": "npm:0.34.6" + p-limit: "npm:^4.0.0" + pathe: "npm:^1.1.1" + checksum: 10c0/d00d8c399513693eb6c82fd08b0e32fcf486bede5b88805e8dea90e156d502418477788b501b1c078abd38f0147e99a187061b2da81819e8d5c162a63edf5b40 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/snapshot@npm:0.34.6" + dependencies: + magic-string: "npm:^0.30.1" + pathe: "npm:^1.1.1" + pretty-format: "npm:^29.5.0" + checksum: 10c0/08dbfb3cb6d202116e981abf421096eae920d65bca867c38651b02d2623e25a18e2ead6e5de13a49ebe9f2f9d007b2f692714aa6a5c9f18c3ff17b9f8726dbab + languageName: node + linkType: hard + +"@vitest/spy@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/spy@npm:0.34.6" + dependencies: + tinyspy: "npm:^2.1.1" + checksum: 10c0/ea36d31c521f4c458f7e439ceeb0d1e5c2e9298aaafad7c9bc5ebe75f36c9b871c1f3a6dcb5bfd6c4e83b34979d511f9a7830fa8720b7e1faa18ef121845e9d5 + languageName: node + linkType: hard + +"@vitest/utils@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/utils@npm:0.34.6" + dependencies: + diff-sequences: "npm:^29.4.3" + loupe: "npm:^2.3.6" + pretty-format: "npm:^29.5.0" + checksum: 10c0/6f32f086b8bf0e8125a11b26cad4ce77ad90943590b55cd1ebb1424412d1feb6d404ee4ded523c346a8f222c265251652b4888f2ede769e3d7fce6fb1ee0a620 + languageName: node + linkType: hard + +"abbrev@npm:^4.0.0": + version: 4.0.0 + resolution: "abbrev@npm:4.0.0" + checksum: 10c0/b4cc16935235e80702fc90192e349e32f8ef0ed151ef506aa78c81a7c455ec18375c4125414b99f84b2e055199d66383e787675f0bcd87da7a4dbd59f9eac1d5 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": + version: 8.3.5 + resolution: "acorn-walk@npm:8.3.5" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/e31bf5b5423ed1349437029d66d708b9fbd1b77a644b031501e2c753b028d13b56348210ed901d5b1d0d86eb3381c0a0fc0d0998511a9d546d1194936266a332 + languageName: node + linkType: hard + +"acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.16.0, acorn@npm:^8.4.1, acorn@npm:^8.9.0": + version: 8.16.0 + resolution: "acorn@npm:8.16.0" + bin: + acorn: bin/acorn + checksum: 10c0/c9c52697227661b68d0debaf972222d4f622aa06b185824164e153438afa7b08273432ca43ea792cadb24dada1d46f6f6bb1ef8de9956979288cc1b96bf9914e + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.5.0": + version: 4.6.0 + resolution: "agentkeepalive@npm:4.6.0" + dependencies: + humanize-ms: "npm:^1.2.1" + checksum: 10c0/235c182432f75046835b05f239708107138a40103deee23b6a08caee5136873709155753b394ec212e49e60e94a378189562cb01347765515cff61b692c69187 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 10c0/070ff801a9d236a6caa647507bdcc7034530604844d64408149a26b9e87c2f97650055c0f049abd1efc024b334635c01f29e0b632b371ac3f26130f4cf65997a + languageName: node + linkType: hard + +"asn1.js@npm:^5.4.1": + version: 5.4.1 + resolution: "asn1.js@npm:5.4.1" + dependencies: + bn.js: "npm:^4.0.0" + inherits: "npm:^2.0.1" + minimalistic-assert: "npm:^1.0.0" + safer-buffer: "npm:^2.1.0" + checksum: 10c0/b577232fa6069cc52bb128e564002c62b2b1fe47f7137bdcd709c0b8495aa79cee0f8cc458a831b2d8675900eea0d05781b006be5e1aa4f0ae3577a73ec20324 + languageName: node + linkType: hard + +"asn1js@npm:^3.0.6": + version: 3.0.10 + resolution: "asn1js@npm:3.0.10" + dependencies: + pvtsutils: "npm:^1.3.6" + pvutils: "npm:^1.1.5" + tslib: "npm:^2.8.1" + checksum: 10c0/04056106522e4d0db4eb992299bb76d73438bfd59ffd975ac9c1f15d14e7326161dad383c54a5ccfa203b73ae7b7bf4668f42c2fed01e1f4bf79a58de71e4dc6 + languageName: node + linkType: hard + +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: 10c0/25456b2aa333250f01143968e02e4884a34588a8538fbbf65c91a637f1dbfb8069249133cd2f4e530f10f624d206a664e7df30207830b659e9f5298b00a4099b + languageName: node + linkType: hard + +"base-x@npm:^3.0.2": + version: 3.0.11 + resolution: "base-x@npm:3.0.11" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c5b8cd9cef285973b0460934be4fc890eedfd22a8aca527fac3527f041c5d1c912f7b9a6816f19e43e69dc7c29a5deabfa326bd3d6a57ee46af0ad46e3991d5 + languageName: node + linkType: hard + +"base-x@npm:^5.0.0": + version: 5.0.1 + resolution: "base-x@npm:5.0.1" + checksum: 10c0/4ab6b02262b4fd499b147656f63ce7328bd5f895450401ce58a2f9e87828aea507cf0c320a6d8725389f86e8a48397562661c0bca28ef3276a22821b30f7a713 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.11.9": + version: 4.12.3 + resolution: "bn.js@npm:4.12.3" + checksum: 10c0/53b6a4db8a583abd2522eacd480fece26fe6c4d8d35d03e5e11e15cb0873a3044eb4e3d1f9fef56f47eb008219e99ba5b620c26f57db49a687c6ab2cf848d50b + languageName: node + linkType: hard + +"bn.js@npm:^5.2.0, bn.js@npm:^5.2.1, bn.js@npm:^5.2.2": + version: 5.2.3 + resolution: "bn.js@npm:5.2.3" + checksum: 10c0/eef19cb9cf5e91e91e3e0f036b799ce6c72f79463c3934d62991c3dcdb58f6c94dc3d806495d9b0bf31cd121870ed79bb2115cea71b56c03e794fb71485031fa + languageName: node + linkType: hard + +"borsh@npm:^0.7.0": + version: 0.7.0 + resolution: "borsh@npm:0.7.0" + dependencies: + bn.js: "npm:^5.2.0" + bs58: "npm:^4.0.0" + text-encoding-utf-8: "npm:^1.0.2" + checksum: 10c0/513b3e51823d2bf5be77cec27742419d2b0427504825dd7ceb00dedb820f246a4762f04b83d5e3aa39c8e075b3cbaeb7ca3c90bd1cbeecccb4a510575be8c581 + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + +"bs58@npm:^4.0.0, bs58@npm:^4.0.1": + version: 4.0.1 + resolution: "bs58@npm:4.0.1" + dependencies: + base-x: "npm:^3.0.2" + checksum: 10c0/613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 + languageName: node + linkType: hard + +"bs58@npm:^6.0.0": + version: 6.0.0 + resolution: "bs58@npm:6.0.0" + dependencies: + base-x: "npm:^5.0.0" + checksum: 10c0/61910839746625ee4f69369f80e2634e2123726caaa1da6b3bcefcf7efcd9bdca86603360fed9664ffdabe0038c51e542c02581c72ca8d44f60329fe1a6bc8f4 + languageName: node + linkType: hard + +"buffer@npm:6.0.3, buffer@npm:^6.0.3, buffer@npm:~6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + +"bufferutil@npm:^4.0.1": + version: 4.1.0 + resolution: "bufferutil@npm:4.1.0" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10c0/12d63bbc80a3b6525bc62a28387fca0a5aed09e41b74375c500e60721b6a1ab2960b82e48f1773eddea2b14e490f129214b8b57bd6e1a5078b6235857d658508 + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"chai@npm:^4.3.10": + version: 4.5.0 + resolution: "chai@npm:4.5.0" + dependencies: + assertion-error: "npm:^1.1.0" + check-error: "npm:^1.0.3" + deep-eql: "npm:^4.1.3" + get-func-name: "npm:^2.0.2" + loupe: "npm:^2.3.6" + pathval: "npm:^1.1.1" + type-detect: "npm:^4.1.0" + checksum: 10c0/b8cb596bd1aece1aec659e41a6e479290c7d9bee5b3ad63d2898ad230064e5b47889a3bc367b20100a0853b62e026e2dc514acf25a3c9385f936aa3614d4ab4d + languageName: node + linkType: hard + +"chalk@npm:5.6.2, chalk@npm:^5.4.1": + version: 5.6.2 + resolution: "chalk@npm:5.6.2" + checksum: 10c0/99a4b0f0e7991796b1e7e3f52dceb9137cae2a9dfc8fc0784a550dc4c558e15ab32ed70b14b21b52beb2679b4892b41a0aa44249bcb996f01e125d58477c6976 + languageName: node + linkType: hard + +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: "npm:^2.0.2" + checksum: 10c0/94aa37a7315c0e8a83d0112b5bfb5a8624f7f0f81057c73e4707729cdd8077166c6aefb3d8e2b92c63ee130d4a2ff94bad46d547e12f3238cc1d78342a973841 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"commander@npm:14.0.2": + version: 14.0.2 + resolution: "commander@npm:14.0.2" + checksum: 10c0/245abd1349dbad5414cb6517b7b5c584895c02c4f7836ff5395f301192b8566f9796c82d7bd6c92d07eba8775fe4df86602fca5d86d8d10bcc2aded1e21c2aeb + languageName: node + linkType: hard + +"commander@npm:^14.0.0": + version: 14.0.3 + resolution: "commander@npm:14.0.3" + checksum: 10c0/755652564bbf56ff2ff083313912b326450d3f8d8c85f4b71416539c9a05c3c67dbd206821ca72635bf6b160e2afdefcb458e86b317827d5cb333b69ce7f1a24 + languageName: node + linkType: hard + +"commander@npm:^2.20.3": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418 + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: 10c0/157cbc59b2430ae9a90034a5f3a1b398b6738bf510f713edc4d4e45e169bc514d3d99dd34d8d01ca7ae7830b5b8b537e46ae8f3c8f932371b0875c0151d7ec91 + languageName: node + linkType: hard + +"debug@npm:^4.3.4": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + +"deep-eql@npm:^4.1.3": + version: 4.1.4 + resolution: "deep-eql@npm:4.1.4" + dependencies: + type-detect: "npm:^4.0.0" + checksum: 10c0/264e0613493b43552fc908f4ff87b8b445c0e6e075656649600e1b8a17a57ee03e960156fce7177646e4d2ddaf8e5ee616d76bd79929ff593e5c79e4e5e6c517 + languageName: node + linkType: hard + +"delay@npm:^5.0.0": + version: 5.0.0 + resolution: "delay@npm:5.0.0" + checksum: 10c0/01cdc4cd0cd35fb622518a3df848e67e09763a38e7cdada2232b6fda9ddda72eddcf74f0e24211200fbe718434f2335f2a2633875a6c96037fefa6de42896ad7 + languageName: node + linkType: hard + +"diff-sequences@npm:^29.4.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.4 + resolution: "diff@npm:4.0.4" + checksum: 10c0/855fb70b093d1d9643ddc12ea76dca90dc9d9cdd7f82c08ee8b9325c0dc5748faf3c82e2047ced5dcaa8b26e58f7903900be2628d0380a222c02d79d8de385df + languageName: node + linkType: hard + +"dotenv@npm:^16.0.0": + version: 16.6.1 + resolution: "dotenv@npm:16.6.1" + checksum: 10c0/15ce56608326ea0d1d9414a5c8ee6dcf0fffc79d2c16422b4ac2268e7e2d76ff5a572d37ffe747c377de12005f14b3cc22361e79fc7f1061cce81f77d2c973dc + languageName: node + linkType: hard + +"elliptic@npm:^6.6.1": + version: 6.6.1 + resolution: "elliptic@npm:6.6.1" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/8b24ef782eec8b472053793ea1e91ae6bee41afffdfcb78a81c0a53b191e715cbe1292aa07165958a9bbe675bd0955142560b1a007ffce7d6c765bcaf951a867 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"es6-promise@npm:^4.0.3": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 10c0/2373d9c5e9a93bdd9f9ed32ff5cb6dd3dd785368d1c21e9bbbfd07d16345b3774ae260f2bd24c8f836a6903f432b4151e7816a7fa8891ccb4e1a55a028ec42c3 + languageName: node + linkType: hard + +"es6-promisify@npm:^5.0.0": + version: 5.0.0 + resolution: "es6-promisify@npm:5.0.0" + dependencies: + es6-promise: "npm:^4.0.3" + checksum: 10c0/23284c6a733cbf7842ec98f41eac742c9f288a78753c4fe46652bae826446ced7615b9e8a5c5f121a08812b1cd478ea58630f3e1c3d70835bd5dcd69c7cd75c9 + languageName: node + linkType: hard + +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.4 + resolution: "eventemitter3@npm:5.0.4" + checksum: 10c0/575b8cac8d709e1473da46f8f15ef311b57ff7609445a7c71af5cd42598583eee6f098fa7a593e30f27e94b8865642baa0689e8fa97c016f742abdb3b1bf6d9a + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.3 + resolution: "exponential-backoff@npm:3.1.3" + checksum: 10c0/77e3ae682b7b1f4972f563c6dbcd2b0d54ac679e62d5d32f3e5085feba20483cf28bd505543f520e287a56d4d55a28d7874299941faf637e779a1aa5994d1267 + languageName: node + linkType: hard + +"eyes@npm:^0.1.8": + version: 0.1.8 + resolution: "eyes@npm:0.1.8" + checksum: 10c0/4c79a9cbf45746d8c9f48cc957e35ad8ea336add1c7b8d5a0e002efc791a7a62b27b2188184ef1a1eea7bc3cd06b161791421e0e6c5fe78309705a162c53eea8 + languageName: node + linkType: hard + +"fast-stable-stringify@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-stable-stringify@npm:1.0.0" + checksum: 10c0/1d773440c7a9615950577665074746c2e92edafceefa789616ecb6166229e0ccc6dae206ca9b9f7da0d274ba5779162aab2d07940a0f6e52a41a4e555392eb3b + languageName: node + linkType: hard + +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/e345083c4306b3aed6cb8ec551e26c36bab5c511e99ea4576a16750ddc8d3240e63826cc624f5ae17ad4dc82e68a253213b60d556c11bfad064b7607847ed07f + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 10c0/89830fd07623fa73429a711b9daecdb304386d237c71268007f788f113505ef1d4cc2d0b9680e072c5082490aec9df5d7758bf5ac6f1c37062855e8e3dc0b9df + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: "npm:^2.0.0" + checksum: 10c0/f34a2c20161d02303c2807badec2f3b49cbfbbb409abd4f95a07377ae01cfe6b59e3d15ac609cffcd8f2521f0eb37b7e1091acf65da99aa2a4f1ad63c21e7e7a + languageName: node + linkType: hard + +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"isexe@npm:^4.0.0": + version: 4.0.0 + resolution: "isexe@npm:4.0.0" + checksum: 10c0/5884815115bceac452877659a9c7726382531592f43dc29e5d48b7c4100661aed54018cb90bd36cb2eaeba521092570769167acbb95c18d39afdccbcca06c5ce + languageName: node + linkType: hard + +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: 10c0/7cb90dc2f0eb409825558982fb15d7c1d757a88595efbab879592f9d2b63820d6bbfb5571ab8abe36c715946e165a413a99f6aafd9f40ab1f514d73487bc9996 + languageName: node + linkType: hard + +"jayson@npm:^4.1.1": + version: 4.3.0 + resolution: "jayson@npm:4.3.0" + dependencies: + "@types/connect": "npm:^3.4.33" + "@types/node": "npm:^12.12.54" + "@types/ws": "npm:^7.4.4" + commander: "npm:^2.20.3" + delay: "npm:^5.0.0" + es6-promisify: "npm:^5.0.0" + eyes: "npm:^0.1.8" + isomorphic-ws: "npm:^4.0.1" + json-stringify-safe: "npm:^5.0.1" + stream-json: "npm:^1.9.1" + uuid: "npm:^8.3.2" + ws: "npm:^7.5.10" + bin: + jayson: bin/jayson.js + checksum: 10c0/d3d1ee1bd9d8b57eb6c13da83965e6052b030b24ee9ee6b8763ea33e986d7f161428bda8a3f5e4b30e0194867fe48ef0652db521363ccc6227b89d7998f0dbda + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"local-pkg@npm:^0.4.3": + version: 0.4.3 + resolution: "local-pkg@npm:0.4.3" + checksum: 10c0/361c77d7873a629f09c9e86128926227171ee0fe3435d282fb80303ff255bb4d3c053b555d47e953b4f41d2561f2a7bc0e53e9ca5c9bc9607226a77c91ea4994 + languageName: node + linkType: hard + +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" + dependencies: + get-func-name: "npm:^2.0.1" + checksum: 10c0/71a781c8fc21527b99ed1062043f1f2bb30bdaf54fa4cf92463427e1718bc6567af2988300bc243c1f276e4f0876f29e3cbf7b58106fdc186915687456ce5bf4 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.1": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.5" + checksum: 10c0/299378e38f9a270069fc62358522ddfb44e94244baa0d6a8980ab2a9b2490a1d03b236b447eee309e17eb3bddfa482c61259d47960eb018a904f0ded52780c4a + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 10c0/539da88daca16533211ea5a9ee98dc62ff5742f531f54640dd34429e621955e91cc280a91a776026264b7f9f6735947629f920944e9c1558369e8bf22eb33fbb + languageName: node + linkType: hard + +"minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/5aad75ab0090b8266069c9aabe582c021ae53eb33c6c691054a13a45db3b4f91a7fb1bd79151e6b4e9e9a86727b522527c0a06ec7d45206b745d54cd3097bcec + languageName: node + linkType: hard + +"mlly@npm:^1.4.0, mlly@npm:^1.7.4": + version: 1.8.2 + resolution: "mlly@npm:1.8.2" + dependencies: + acorn: "npm:^8.16.0" + pathe: "npm:^2.0.3" + pkg-types: "npm:^1.3.1" + ufo: "npm:^1.6.3" + checksum: 10c0/aa826683a6daddf2aef65f9c8142e362731cf8e415a5591faf92fd51040a76697e45ab6dbb7a3b38be74e0f8c464825a7eabe827750455c7472421953f5da733 + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.11": + version: 3.3.12 + resolution: "nanoid@npm:3.3.12" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/ba142b7b39e11e80c16dd74b0365d407880c87c1cf7e1480956981ae940ee36060fa5b6f092cd1e315184dd19244c657bd017d03327bd3c62247d691c5e8edfb + languageName: node + linkType: hard + +"node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/b55786b6028208e6fbe594ccccc213cab67a72899c9234eb59dba51062a299ea853210fcf526998eaa2867b0963ad72338824450905679ff0fa304b8c5093ae8 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 12.3.0 + resolution: "node-gyp@npm:12.3.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + nopt: "npm:^9.0.0" + proc-log: "npm:^6.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.5.4" + tinyglobby: "npm:^0.2.12" + undici: "npm:^6.25.0" + which: "npm:^6.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/9d9032b405cbe42f72a105259d9eb679376470c102df4a2dbaa51e07d59bf741dcffb85897087ea9d8318b9cabb824a8978af51508ae142f0239ae1e6a3c2329 + languageName: node + linkType: hard + +"nopt@npm:^9.0.0": + version: 9.0.0 + resolution: "nopt@npm:9.0.0" + dependencies: + abbrev: "npm:^4.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/1822eb6f9b020ef6f7a7516d7b64a8036e09666ea55ac40416c36e4b2b343122c3cff0e2f085675f53de1d2db99a2a89a60ccea1d120bcd6a5347bf6ceb4a7fd + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"pathe@npm:^1.1.1": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 + languageName: node + linkType: hard + +"pathe@npm:^2.0.1, pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 10c0/f63e1bc1b33593cdf094ed6ff5c49c1c0dc5dc20a646ca9725cc7fe7cd9995002d51d5685b9b2ec6814342935748b711bafa840f84c0bb04e38ff40a335c94dc + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^4.0.4": + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 + languageName: node + linkType: hard + +"pinocchio-ephemeral-permission-counter@workspace:.": + version: 0.0.0-use.local + resolution: "pinocchio-ephemeral-permission-counter@workspace:." + dependencies: + "@magicblock-labs/ephemeral-rollups-sdk": "npm:^0.11.1" + "@solana-program/system": "npm:^0.10.0" + "@solana/kit": "npm:^5.4.0" + "@solana/web3.js": "npm:^1.93.0" + "@types/node": "npm:^20.0.0" + borsh: "npm:^0.7.0" + dotenv: "npm:^16.0.0" + ts-node: "npm:^10.9.0" + tweetnacl: "npm:^1.0.3" + typescript: "npm:^5.0.0" + vitest: "npm:^0.34.0" + languageName: unknown + linkType: soft + +"pkg-types@npm:^1.3.1": + version: 1.3.1 + resolution: "pkg-types@npm:1.3.1" + dependencies: + confbox: "npm:^0.1.8" + mlly: "npm:^1.7.4" + pathe: "npm:^2.0.1" + checksum: 10c0/19e6cb8b66dcc66c89f2344aecfa47f2431c988cfa3366bdfdcfb1dd6695f87dcce37fbd90fe9d1605e2f4440b77f391e83c23255347c35cf84e7fd774d7fcea + languageName: node + linkType: hard + +"postcss@npm:^8.4.43": + version: 8.5.14 + resolution: "postcss@npm:8.5.14" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/48138207cf5ef5581be1bfe2cb65ccfe0ac75e43888ba045afc8ed6043d7b56aeb3b9a9fe5b353ff554be943cd0cc15d826ccb991525159175971e5ee8ab0237 + languageName: node + linkType: hard + +"pretty-format@npm:^29.5.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + +"proc-log@npm:^6.0.0": + version: 6.1.0 + resolution: "proc-log@npm:6.1.0" + checksum: 10c0/4f178d4062733ead9d71a9b1ab24ebcecdfe2250916a5b1555f04fe2eda972a0ec76fbaa8df1ad9c02707add6749219d118a4fc46dc56bdfe4dde4b47d80bb82 + languageName: node + linkType: hard + +"pvtsutils@npm:^1.3.6": + version: 1.3.6 + resolution: "pvtsutils@npm:1.3.6" + dependencies: + tslib: "npm:^2.8.1" + checksum: 10c0/b1b42646370505ccae536dcffa662303b2c553995211330c8e39dec9ab8c197585d7751c2c5b9ab2f186feda0219d9bb23c34ee1e565573be96450f79d89a13c + languageName: node + linkType: hard + +"pvutils@npm:^1.1.5": + version: 1.1.5 + resolution: "pvutils@npm:1.1.5" + checksum: 10c0/e968b07b78a58fec9377fe7aa6342c8cfa21c8fb4afc4e51e1489bd42bec6dc71b8a52541d0aede0aea17adec7ca3f89f29f56efdc31d0083cc02e9bb5721bcf + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 + languageName: node + linkType: hard + +"rollup@npm:^4.20.0": + version: 4.60.3 + resolution: "rollup@npm:4.60.3" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.60.3" + "@rollup/rollup-android-arm64": "npm:4.60.3" + "@rollup/rollup-darwin-arm64": "npm:4.60.3" + "@rollup/rollup-darwin-x64": "npm:4.60.3" + "@rollup/rollup-freebsd-arm64": "npm:4.60.3" + "@rollup/rollup-freebsd-x64": "npm:4.60.3" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.3" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.3" + "@rollup/rollup-linux-arm64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-arm64-musl": "npm:4.60.3" + "@rollup/rollup-linux-loong64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-loong64-musl": "npm:4.60.3" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-ppc64-musl": "npm:4.60.3" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-riscv64-musl": "npm:4.60.3" + "@rollup/rollup-linux-s390x-gnu": "npm:4.60.3" + "@rollup/rollup-linux-x64-gnu": "npm:4.60.3" + "@rollup/rollup-linux-x64-musl": "npm:4.60.3" + "@rollup/rollup-openbsd-x64": "npm:4.60.3" + "@rollup/rollup-openharmony-arm64": "npm:4.60.3" + "@rollup/rollup-win32-arm64-msvc": "npm:4.60.3" + "@rollup/rollup-win32-ia32-msvc": "npm:4.60.3" + "@rollup/rollup-win32-x64-gnu": "npm:4.60.3" + "@rollup/rollup-win32-x64-msvc": "npm:4.60.3" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/72c9c768f3fabeaeff228b6364e6600c169d6c231a4324c47c34880fd8961aebacd974cf905ecc2db75e56c6491bdd676409a06aecf589791bf419cd41d06e76 + languageName: node + linkType: hard + +"rpc-websockets@npm:^9.0.2, rpc-websockets@npm:^9.0.4": + version: 9.3.8 + resolution: "rpc-websockets@npm:9.3.8" + dependencies: + "@swc/helpers": "npm:^0.5.11" + "@types/uuid": "npm:^10.0.0" + "@types/ws": "npm:^8.2.2" + buffer: "npm:^6.0.3" + bufferutil: "npm:^4.0.1" + eventemitter3: "npm:^5.0.1" + utf-8-validate: "npm:^6.0.0" + uuid: "npm:^11.0.0" + ws: "npm:^8.5.0" + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/4a0601c497762f7fffe685bdb4595e60e31e363b5988a01a4370b867f3d23a6fdd240f22f5f25125e7bfa70d94e81b98537d8824b0d43c171f363ed5555d4cae + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:^2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.3.3": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f + languageName: node + linkType: hard + +"stream-chain@npm:^2.2.5": + version: 2.2.5 + resolution: "stream-chain@npm:2.2.5" + checksum: 10c0/c512f50190d7c92d688fa64e7af540c51b661f9c2b775fc72bca38ea9bca515c64c22c2197b1be463741daacbaaa2dde8a8ea24ebda46f08391224f15249121a + languageName: node + linkType: hard + +"stream-json@npm:^1.9.1": + version: 1.9.1 + resolution: "stream-json@npm:1.9.1" + dependencies: + stream-chain: "npm:^2.2.5" + checksum: 10c0/0521e5cb3fb6b0e2561d715975e891bd81fa77d0239c8d0b1756846392bc3c7cdd7f1ddb0fe7ed77e6fdef58daab9e665d3b39f7d677bd0859e65a2bff59b92c + languageName: node + linkType: hard + +"strip-literal@npm:^1.0.1": + version: 1.3.0 + resolution: "strip-literal@npm:1.3.0" + dependencies: + acorn: "npm:^8.10.0" + checksum: 10c0/3c0c9ee41eb346e827eede61ef288457f53df30e3e6ff8b94fa81b636933b0c13ca4ea5c97d00a10d72d04be326da99ac819f8769f0c6407ba8177c98344a916 + languageName: node + linkType: hard + +"superstruct@npm:^2.0.2": + version: 2.0.2 + resolution: "superstruct@npm:2.0.2" + checksum: 10c0/c6853db5240b4920f47b3c864dd1e23ede6819ea399ad29a65387d746374f6958c5f1c5b7e5bb152d9db117a74973e5005056d9bb83c24e26f18ec6bfae4a718 + languageName: node + linkType: hard + +"tar@npm:^7.5.4": + version: 7.5.13 + resolution: "tar@npm:7.5.13" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.1.0" + yallist: "npm:^5.0.0" + checksum: 10c0/5c65b8084799bde7a791593a1c1a45d3d6ee98182e3700b24c247b7b8f8654df4191642abbdb07ff25043d45dcff35620827c3997b88ae6c12040f64bed5076b + languageName: node + linkType: hard + +"text-encoding-utf-8@npm:^1.0.2": + version: 1.0.2 + resolution: "text-encoding-utf-8@npm:1.0.2" + checksum: 10c0/87a64b394c850e8387c2ca7fc6929a26ce97fb598f1c55cd0fdaec4b8e2c3ed6770f65b2f3309c9175ef64ac5e403c8e48b53ceeb86d2897940c5e19cc00bb99 + languageName: node + linkType: hard + +"tinybench@npm:^2.5.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12": + version: 0.2.16 + resolution: "tinyglobby@npm:0.2.16" + dependencies: + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.4" + checksum: 10c0/f2e09fd93dd95c41e522113b686ff6f7c13020962f8698a864a257f3d7737599afc47722b7ab726e12f8a813f779906187911ff8ee6701ede65072671a7e934b + languageName: node + linkType: hard + +"tinypool@npm:^0.7.0": + version: 0.7.0 + resolution: "tinypool@npm:0.7.0" + checksum: 10c0/ecb35d9f74e72722c059acb1947ffc3c2caccb45266b89b72f74be2d28f0784d948b50bd9c6c68fa4159afd423ac5f5a07271a5f516d18a565dd06af0a37bc44 + languageName: node + linkType: hard + +"tinyspy@npm:^2.1.1": + version: 2.2.1 + resolution: "tinyspy@npm:2.2.1" + checksum: 10c0/0b4cfd07c09871e12c592dfa7b91528124dc49a4766a0b23350638c62e6a483d5a2a667de7e6282246c0d4f09996482ddaacbd01f0c05b7ed7e0f79d32409bdc + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"ts-node@npm:^10.9.0": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 10c0/5f29938489f96982a25ba650b64218e83a3357d76f7bede80195c65ab44ad279c8357264639b7abdd5d7e75fc269a83daa0e9c62fd8637a3def67254ecc9ddc2 + languageName: node + linkType: hard + +"tslib@npm:^2.8.0, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tweetnacl@npm:^1.0.3": + version: 1.0.3 + resolution: "tweetnacl@npm:1.0.3" + checksum: 10c0/069d9df51e8ad4a89fbe6f9806c68e06c65be3c7d42f0701cc43dba5f0d6064686b238bbff206c5addef8854e3ce00c643bff59432ea2f2c639feab0ee1a93f9 + languageName: node + linkType: hard + +"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": + version: 4.1.0 + resolution: "type-detect@npm:4.1.0" + checksum: 10c0/df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a + languageName: node + linkType: hard + +"typescript@npm:^5.0.0, typescript@npm:^5.3.0": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.0.0#optional!builtin, typescript@patch:typescript@npm%3A^5.3.0#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=cef18b" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6f7e53bf0d9702350deeb6f35e08b69cbc8b958c33e0ec77bdc0ad6a6c8e280f3959dcbfde6f5b0848bece57810696489deaaa53d75de3578ff255d168c1efbd + languageName: node + linkType: hard + +"ufo@npm:^1.6.3": + version: 1.6.4 + resolution: "ufo@npm:1.6.4" + checksum: 10c0/3a2b29e7e3d772fbf6893d7d23bf442981457adb2fe122828abdbda89bedcb81aafd0dcc080e41b45f9a877db00cb42cbfee9639753a19d9b9bd39b5627039cf + languageName: node + linkType: hard + +"undici-types@npm:^7.19.2": + version: 7.25.0 + resolution: "undici-types@npm:7.25.0" + checksum: 10c0/b30edc6d3a0aa0f1f4e0f4f56dc08b81ffbecc27e3b142b1363555104b076f9eebaa61dfd835d91a8341ad6c5e6f789ed2161f75b80855378828cd93ad7c9d26 + languageName: node + linkType: hard + +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + +"undici-types@npm:~7.19.0": + version: 7.19.2 + resolution: "undici-types@npm:7.19.2" + checksum: 10c0/7159f10546f9f6c47d36776bb1bbf8671e87c1e587a6fee84ae1f111ae8de4f914efa8ca0dfcd224f4f4a9dfc3f6028f627ccb5ddaccf82d7fd54671b89fac3e + languageName: node + linkType: hard + +"undici@npm:^6.25.0": + version: 6.25.0 + resolution: "undici@npm:6.25.0" + checksum: 10c0/2597cc6689bdb02c210c557b1f85febbfda65becae6e6fc1061508e2f33734d25207f81cd8af56ada9956329eb3a7bd7431e87dcfeceba20ee87059b57dcf985 + languageName: node + linkType: hard + +"utf-8-validate@npm:^6.0.0": + version: 6.0.6 + resolution: "utf-8-validate@npm:6.0.6" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10c0/88c3581c43b9f824f0939b0da0ecf0cf092ff944ace7be517a5459bc18fe1884fc4acda3502ed369b4ce44baf40590a8f1e820c43a425df0758f2ba76b055f77 + languageName: node + linkType: hard + +"uuid@npm:^11.0.0": + version: 11.1.1 + resolution: "uuid@npm:11.1.1" + bin: + uuid: dist/esm/bin/uuid + checksum: 10c0/9e3af58eba872ece5a5e76f4773a94fc78a0ef2c2444c38dbe6b42f41dadf76c01850fd783604f27986f6195e6286aef064d45987d401b2a33127b98ddf7c0c5 + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 10c0/bdc36fb8095d3b41df197f5fb6f11e3a26adf4059df3213e3baa93810d8f0cc76f9a74aaefc18b73e91fe7e19154ed6f134eda6fded2e0f1c8d2272ed2d2d391 + languageName: node + linkType: hard + +"vite-node@npm:0.34.6": + version: 0.34.6 + resolution: "vite-node@npm:0.34.6" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.4" + mlly: "npm:^1.4.0" + pathe: "npm:^1.1.1" + picocolors: "npm:^1.0.0" + vite: "npm:^3.0.0 || ^4.0.0 || ^5.0.0-0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/0e804eab1ae5f0d98014f0a933ec08bfc287228283c3c4792f5f8b8fec6657896e513498e8436449e3116839a5592f9b497cf0b982b8da1152d7d419ccc306f1 + languageName: node + linkType: hard + +"vite@npm:^3.0.0 || ^4.0.0 || ^5.0.0-0, vite@npm:^3.1.0 || ^4.0.0 || ^5.0.0-0": + version: 5.4.21 + resolution: "vite@npm:5.4.21" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/468336a1409f728b464160cbf02672e72271fb688d0e605e776b74a89d27e1029509eef3a3a6c755928d8011e474dbf234824d054d07960be5f23cd176bc72de + languageName: node + linkType: hard + +"vitest@npm:^0.34.0": + version: 0.34.6 + resolution: "vitest@npm:0.34.6" + dependencies: + "@types/chai": "npm:^4.3.5" + "@types/chai-subset": "npm:^1.3.3" + "@types/node": "npm:*" + "@vitest/expect": "npm:0.34.6" + "@vitest/runner": "npm:0.34.6" + "@vitest/snapshot": "npm:0.34.6" + "@vitest/spy": "npm:0.34.6" + "@vitest/utils": "npm:0.34.6" + acorn: "npm:^8.9.0" + acorn-walk: "npm:^8.2.0" + cac: "npm:^6.7.14" + chai: "npm:^4.3.10" + debug: "npm:^4.3.4" + local-pkg: "npm:^0.4.3" + magic-string: "npm:^0.30.1" + pathe: "npm:^1.1.1" + picocolors: "npm:^1.0.0" + std-env: "npm:^3.3.3" + strip-literal: "npm:^1.0.1" + tinybench: "npm:^2.5.0" + tinypool: "npm:^0.7.0" + vite: "npm:^3.1.0 || ^4.0.0 || ^5.0.0-0" + vite-node: "npm:0.34.6" + why-is-node-running: "npm:^2.2.2" + peerDependencies: + "@edge-runtime/vm": "*" + "@vitest/browser": "*" + "@vitest/ui": "*" + happy-dom: "*" + jsdom: "*" + playwright: "*" + safaridriver: "*" + webdriverio: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/7b5e87875991a66fe5cca62477f21447d7cdf4d101ac381ca02a16f4223b1ae5d0bc17ce42616d6dc74742757730ed511ada05aaa7090b6075e304c883cf0bc3 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which@npm:^6.0.0": + version: 6.0.1 + resolution: "which@npm:6.0.1" + dependencies: + isexe: "npm:^4.0.0" + bin: + node-which: bin/which.js + checksum: 10c0/7e710e54ea36d2d6183bee2f9caa27a3b47b9baf8dee55a199b736fcf85eab3b9df7556fca3d02b50af7f3dfba5ea3a45644189836df06267df457e354da66d5 + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.2.2": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + +"ws@npm:^7.5.10": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"ws@npm:^8.19.0, ws@npm:^8.5.0": + version: 8.20.0 + resolution: "ws@npm:8.20.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/956ac5f11738c914089b65878b9223692ace77337ba55379ae68e1ecbeae9b47a0c6eb9403688f609999a58c80d83d99865fe0029b229d308b08c1ef93d4ea14 + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.2.2 + resolution: "yocto-queue@npm:1.2.2" + checksum: 10c0/36d4793e9cf7060f9da543baf67c55e354f4862c8d3d34de1a1b1d7c382d44171315cc54abf84d8900b8113d742b830108a1434f4898fb244f9b7e8426d4b8f5 + languageName: node + linkType: hard diff --git a/private-payments b/private-payments deleted file mode 160000 index 1454573..0000000 --- a/private-payments +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 14545736ef8adca15072d802e16c1176452cbd56 diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index fb57ccd..0000000 --- a/yarn.lock +++ /dev/null @@ -1,4 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - From 128a8e63c754b122138f572240cb933df4979352 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:22:45 +0200 Subject: [PATCH 02/17] fix: import --- pinocchio-ephemeral-permission-counter/Cargo.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/Cargo.toml b/pinocchio-ephemeral-permission-counter/Cargo.toml index 510aea7..a826db2 100644 --- a/pinocchio-ephemeral-permission-counter/Cargo.toml +++ b/pinocchio-ephemeral-permission-counter/Cargo.toml @@ -14,5 +14,4 @@ pinocchio = { version = "0.10.1", features = ["cpi", "copy"] } pinocchio-log = { version = "0.5.1" } pinocchio-system = { version = "0.5" } solana-address = { version = "2.6", features = ["syscalls"] } -# ephemeral-rollups-pinocchio = { git = "https://github.com/magicblock-labs/ephemeral-rollups-sdk.git", rev = "a8ecea450d3bbe5bac119a3f4c55cd9f96b4837b" } -ephemeral-rollups-pinocchio = { path = "../../ephemeral-rollups-sdk/rust/pinocchio" } +ephemeral-rollups-pinocchio = { git = "https://github.com/magicblock-labs/ephemeral-rollups-sdk.git", rev = "a8ecea450d3bbe5bac119a3f4c55cd9f96b4837b" } From d0b4b082a0346bb8fbe317a3179ecac89aed3166 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:23:30 +0200 Subject: [PATCH 03/17] fix: license --- pinocchio-ephemeral-permission-counter/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pinocchio-ephemeral-permission-counter/package.json b/pinocchio-ephemeral-permission-counter/package.json index 85cd429..f9e745a 100644 --- a/pinocchio-ephemeral-permission-counter/package.json +++ b/pinocchio-ephemeral-permission-counter/package.json @@ -18,7 +18,7 @@ "program" ], "author": "", - "license": "Apache-2.0", + "license": "MIT", "devDependencies": { "@magicblock-labs/ephemeral-rollups-sdk": "^0.11.1", "@solana-program/system": "^0.10.0", From ad2bf5c431cb370cdc3037ae148d79f99c605813 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:24:56 +0200 Subject: [PATCH 04/17] feat: update vitest --- .../package.json | 4 +- .../yarn.lock | 785 +++++++++--------- 2 files changed, 382 insertions(+), 407 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/package.json b/pinocchio-ephemeral-permission-counter/package.json index f9e745a..5678818 100644 --- a/pinocchio-ephemeral-permission-counter/package.json +++ b/pinocchio-ephemeral-permission-counter/package.json @@ -30,6 +30,6 @@ "ts-node": "^10.9.0", "tweetnacl": "^1.0.3", "typescript": "^5.0.0", - "vitest": "^0.34.0" + "vitest": "^3.0.0" } -} \ No newline at end of file +} diff --git a/pinocchio-ephemeral-permission-counter/yarn.lock b/pinocchio-ephemeral-permission-counter/yarn.lock index c2b2523..0e5aef4 100644 --- a/pinocchio-ephemeral-permission-counter/yarn.lock +++ b/pinocchio-ephemeral-permission-counter/yarn.lock @@ -21,163 +21,184 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/aix-ppc64@npm:0.21.5" +"@esbuild/aix-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/aix-ppc64@npm:0.27.7" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm64@npm:0.21.5" +"@esbuild/android-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm64@npm:0.27.7" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-arm@npm:0.21.5" +"@esbuild/android-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-arm@npm:0.27.7" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/android-x64@npm:0.21.5" +"@esbuild/android-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/android-x64@npm:0.27.7" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-arm64@npm:0.21.5" +"@esbuild/darwin-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-arm64@npm:0.27.7" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/darwin-x64@npm:0.21.5" +"@esbuild/darwin-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/darwin-x64@npm:0.27.7" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-arm64@npm:0.21.5" +"@esbuild/freebsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-arm64@npm:0.27.7" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/freebsd-x64@npm:0.21.5" +"@esbuild/freebsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/freebsd-x64@npm:0.27.7" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm64@npm:0.21.5" +"@esbuild/linux-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm64@npm:0.27.7" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-arm@npm:0.21.5" +"@esbuild/linux-arm@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-arm@npm:0.27.7" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ia32@npm:0.21.5" +"@esbuild/linux-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ia32@npm:0.27.7" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-loong64@npm:0.21.5" +"@esbuild/linux-loong64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-loong64@npm:0.27.7" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-mips64el@npm:0.21.5" +"@esbuild/linux-mips64el@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-mips64el@npm:0.27.7" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-ppc64@npm:0.21.5" +"@esbuild/linux-ppc64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-ppc64@npm:0.27.7" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-riscv64@npm:0.21.5" +"@esbuild/linux-riscv64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-riscv64@npm:0.27.7" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-s390x@npm:0.21.5" +"@esbuild/linux-s390x@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-s390x@npm:0.27.7" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/linux-x64@npm:0.21.5" +"@esbuild/linux-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/linux-x64@npm:0.27.7" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/netbsd-x64@npm:0.21.5" +"@esbuild/netbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-arm64@npm:0.27.7" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/netbsd-x64@npm:0.27.7" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/openbsd-x64@npm:0.21.5" +"@esbuild/openbsd-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-arm64@npm:0.27.7" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openbsd-x64@npm:0.27.7" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/sunos-x64@npm:0.21.5" +"@esbuild/openharmony-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/openharmony-arm64@npm:0.27.7" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/sunos-x64@npm:0.27.7" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-arm64@npm:0.21.5" +"@esbuild/win32-arm64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-arm64@npm:0.27.7" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-ia32@npm:0.21.5" +"@esbuild/win32-ia32@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-ia32@npm:0.27.7" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.21.5": - version: 0.21.5 - resolution: "@esbuild/win32-x64@npm:0.21.5" +"@esbuild/win32-x64@npm:0.27.7": + version: 0.27.7 + resolution: "@esbuild/win32-x64@npm:0.27.7" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -191,15 +212,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": "npm:^0.27.8" - checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be - languageName: node - linkType: hard - "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" @@ -481,13 +493,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.10 - resolution: "@sinclair/typebox@npm:0.27.10" - checksum: 10c0/ca42a02817656dbdae464ed4bb8aca6ad4718d7618e270760fea84a834ad0ecc1a22eba51421f09e5047174571131356ff3b5d80d609ced775d631df7b404b0d - languageName: node - linkType: hard - "@solana-program/system@npm:^0.10.0": version: 0.10.0 resolution: "@solana-program/system@npm:0.10.0" @@ -1295,19 +1300,13 @@ __metadata: languageName: node linkType: hard -"@types/chai-subset@npm:^1.3.3": - version: 1.3.6 - resolution: "@types/chai-subset@npm:1.3.6" - peerDependencies: - "@types/chai": <5.2.0 - checksum: 10c0/d8e2362ff7e96b742e00326e656a91fffd6dc1260fd081c30bd607f908eb4d6777cec1e535bae905a8741b8287acded8955c0fe84ee3b6874d38502c029d35c4 - languageName: node - linkType: hard - -"@types/chai@npm:^4.3.5": - version: 4.3.20 - resolution: "@types/chai@npm:4.3.20" - checksum: 10c0/4601189d611752e65018f1ecadac82e94eed29f348e1d5430e5681a60b01e1ecf855d9bcc74ae43b07394751f184f6970fac2b5561fc57a1f36e93a0f5ffb6e8 +"@types/chai@npm:^5.2.2": + version: 5.2.3 + resolution: "@types/chai@npm:5.2.3" + dependencies: + "@types/deep-eql": "npm:*" + assertion-error: "npm:^2.0.1" + checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f languageName: node linkType: hard @@ -1320,7 +1319,14 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.8": +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 @@ -1377,56 +1383,86 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:0.34.6": - version: 0.34.6 - resolution: "@vitest/expect@npm:0.34.6" +"@vitest/expect@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/expect@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/7586104e3fd31dbe1e6ecaafb9a70131e4197dce2940f727b6a84131eee3decac7b10f9c7c72fa5edbdb68b6f854353bd4c0fa84779e274207fb7379563b10db + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" + dependencies: + "@vitest/spy": "npm:3.2.4" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.17" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f7a4aea19bbbf8f15905847ee9143b6298b2c110f8b64789224cb0ffdc2e96f9802876aa2ca83f1ec1b6e1ff45e822abb34f0054c24d57b29ab18add06536ccd + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": + version: 3.2.4 + resolution: "@vitest/pretty-format@npm:3.2.4" dependencies: - "@vitest/spy": "npm:0.34.6" - "@vitest/utils": "npm:0.34.6" - chai: "npm:^4.3.10" - checksum: 10c0/d68abc53d673c2c98cad84da4fa73bd407d59a1098ca528c6925c202321d4eeecde5eaf512980614a755200ae1aa6b648d44da09b78ce4cc95aa78eff8ee558a + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/5ad7d4278e067390d7d633e307fee8103958806a419ca380aec0e33fae71b44a64415f7a9b4bc11635d3c13d4a9186111c581d3cef9c65cc317e68f077456887 languageName: node linkType: hard -"@vitest/runner@npm:0.34.6": - version: 0.34.6 - resolution: "@vitest/runner@npm:0.34.6" +"@vitest/runner@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/runner@npm:3.2.4" dependencies: - "@vitest/utils": "npm:0.34.6" - p-limit: "npm:^4.0.0" - pathe: "npm:^1.1.1" - checksum: 10c0/d00d8c399513693eb6c82fd08b0e32fcf486bede5b88805e8dea90e156d502418477788b501b1c078abd38f0147e99a187061b2da81819e8d5c162a63edf5b40 + "@vitest/utils": "npm:3.2.4" + pathe: "npm:^2.0.3" + strip-literal: "npm:^3.0.0" + checksum: 10c0/e8be51666c72b3668ae3ea348b0196656a4a5adb836cb5e270720885d9517421815b0d6c98bfdf1795ed02b994b7bfb2b21566ee356a40021f5bf4f6ed4e418a languageName: node linkType: hard -"@vitest/snapshot@npm:0.34.6": - version: 0.34.6 - resolution: "@vitest/snapshot@npm:0.34.6" +"@vitest/snapshot@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/snapshot@npm:3.2.4" dependencies: - magic-string: "npm:^0.30.1" - pathe: "npm:^1.1.1" - pretty-format: "npm:^29.5.0" - checksum: 10c0/08dbfb3cb6d202116e981abf421096eae920d65bca867c38651b02d2623e25a18e2ead6e5de13a49ebe9f2f9d007b2f692714aa6a5c9f18c3ff17b9f8726dbab + "@vitest/pretty-format": "npm:3.2.4" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + checksum: 10c0/f8301a3d7d1559fd3d59ed51176dd52e1ed5c2d23aa6d8d6aa18787ef46e295056bc726a021698d8454c16ed825ecba163362f42fa90258bb4a98cfd2c9424fc languageName: node linkType: hard -"@vitest/spy@npm:0.34.6": - version: 0.34.6 - resolution: "@vitest/spy@npm:0.34.6" +"@vitest/spy@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/spy@npm:3.2.4" dependencies: - tinyspy: "npm:^2.1.1" - checksum: 10c0/ea36d31c521f4c458f7e439ceeb0d1e5c2e9298aaafad7c9bc5ebe75f36c9b871c1f3a6dcb5bfd6c4e83b34979d511f9a7830fa8720b7e1faa18ef121845e9d5 + tinyspy: "npm:^4.0.3" + checksum: 10c0/6ebf0b4697dc238476d6b6a60c76ba9eb1dd8167a307e30f08f64149612fd50227682b876420e4c2e09a76334e73f72e3ebf0e350714dc22474258292e202024 languageName: node linkType: hard -"@vitest/utils@npm:0.34.6": - version: 0.34.6 - resolution: "@vitest/utils@npm:0.34.6" +"@vitest/utils@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/utils@npm:3.2.4" dependencies: - diff-sequences: "npm:^29.4.3" - loupe: "npm:^2.3.6" - pretty-format: "npm:^29.5.0" - checksum: 10c0/6f32f086b8bf0e8125a11b26cad4ce77ad90943590b55cd1ebb1424412d1feb6d404ee4ded523c346a8f222c265251652b4888f2ede769e3d7fce6fb1ee0a620 + "@vitest/pretty-format": "npm:3.2.4" + loupe: "npm:^3.1.4" + tinyrainbow: "npm:^2.0.0" + checksum: 10c0/024a9b8c8bcc12cf40183c246c244b52ecff861c6deb3477cbf487ac8781ad44c68a9c5fd69f8c1361878e55b97c10d99d511f2597f1f7244b5e5101d028ba64 languageName: node linkType: hard @@ -1437,7 +1473,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": +"acorn-walk@npm:^8.1.1": version: 8.3.5 resolution: "acorn-walk@npm:8.3.5" dependencies: @@ -1446,7 +1482,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.10.0, acorn@npm:^8.11.0, acorn@npm:^8.16.0, acorn@npm:^8.4.1, acorn@npm:^8.9.0": +"acorn@npm:^8.11.0, acorn@npm:^8.4.1": version: 8.16.0 resolution: "acorn@npm:8.16.0" bin: @@ -1464,13 +1500,6 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^5.0.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df - languageName: node - linkType: hard - "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -1501,10 +1530,10 @@ __metadata: languageName: node linkType: hard -"assertion-error@npm:^1.1.0": - version: 1.1.0 - resolution: "assertion-error@npm:1.1.0" - checksum: 10c0/25456b2aa333250f01143968e02e4884a34588a8538fbbf65c91a637f1dbfb8069249133cd2f4e530f10f624d206a664e7df30207830b659e9f5298b00a4099b +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 languageName: node linkType: hard @@ -1608,18 +1637,16 @@ __metadata: languageName: node linkType: hard -"chai@npm:^4.3.10": - version: 4.5.0 - resolution: "chai@npm:4.5.0" +"chai@npm:^5.2.0": + version: 5.3.3 + resolution: "chai@npm:5.3.3" dependencies: - assertion-error: "npm:^1.1.0" - check-error: "npm:^1.0.3" - deep-eql: "npm:^4.1.3" - get-func-name: "npm:^2.0.2" - loupe: "npm:^2.3.6" - pathval: "npm:^1.1.1" - type-detect: "npm:^4.1.0" - checksum: 10c0/b8cb596bd1aece1aec659e41a6e479290c7d9bee5b3ad63d2898ad230064e5b47889a3bc367b20100a0853b62e026e2dc514acf25a3c9385f936aa3614d4ab4d + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/b360fd4d38861622e5010c2f709736988b05c7f31042305fa3f4e9911f6adb80ccfb4e302068bf8ed10e835c2e2520cba0f5edc13d878b886987e5aa62483f53 languageName: node linkType: hard @@ -1630,12 +1657,10 @@ __metadata: languageName: node linkType: hard -"check-error@npm:^1.0.3": - version: 1.0.3 - resolution: "check-error@npm:1.0.3" - dependencies: - get-func-name: "npm:^2.0.2" - checksum: 10c0/94aa37a7315c0e8a83d0112b5bfb5a8624f7f0f81057c73e4707729cdd8077166c6aefb3d8e2b92c63ee130d4a2ff94bad46d547e12f3238cc1d78342a973841 +"check-error@npm:^2.1.1": + version: 2.1.3 + resolution: "check-error@npm:2.1.3" + checksum: 10c0/878e99038fb6476316b74668cd6a498c7e66df3efe48158fa40db80a06ba4258742ac3ee2229c4a2a98c5e73f5dff84eb3e50ceb6b65bbd8f831eafc8338607d languageName: node linkType: hard @@ -1667,13 +1692,6 @@ __metadata: languageName: node linkType: hard -"confbox@npm:^0.1.8": - version: 0.1.8 - resolution: "confbox@npm:0.1.8" - checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418 - languageName: node - linkType: hard - "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -1681,7 +1699,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.4": +"debug@npm:^4.4.1": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -1693,12 +1711,10 @@ __metadata: languageName: node linkType: hard -"deep-eql@npm:^4.1.3": - version: 4.1.4 - resolution: "deep-eql@npm:4.1.4" - dependencies: - type-detect: "npm:^4.0.0" - checksum: 10c0/264e0613493b43552fc908f4ff87b8b445c0e6e075656649600e1b8a17a57ee03e960156fce7177646e4d2ddaf8e5ee616d76bd79929ff593e5c79e4e5e6c517 +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 languageName: node linkType: hard @@ -1709,13 +1725,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.4.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 - languageName: node - linkType: hard - "diff@npm:^4.0.1": version: 4.0.4 resolution: "diff@npm:4.0.4" @@ -1752,6 +1761,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + "es6-promise@npm:^4.0.3": version: 4.2.8 resolution: "es6-promise@npm:4.2.8" @@ -1768,33 +1784,36 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.21.3": - version: 0.21.5 - resolution: "esbuild@npm:0.21.5" - dependencies: - "@esbuild/aix-ppc64": "npm:0.21.5" - "@esbuild/android-arm": "npm:0.21.5" - "@esbuild/android-arm64": "npm:0.21.5" - "@esbuild/android-x64": "npm:0.21.5" - "@esbuild/darwin-arm64": "npm:0.21.5" - "@esbuild/darwin-x64": "npm:0.21.5" - "@esbuild/freebsd-arm64": "npm:0.21.5" - "@esbuild/freebsd-x64": "npm:0.21.5" - "@esbuild/linux-arm": "npm:0.21.5" - "@esbuild/linux-arm64": "npm:0.21.5" - "@esbuild/linux-ia32": "npm:0.21.5" - "@esbuild/linux-loong64": "npm:0.21.5" - "@esbuild/linux-mips64el": "npm:0.21.5" - "@esbuild/linux-ppc64": "npm:0.21.5" - "@esbuild/linux-riscv64": "npm:0.21.5" - "@esbuild/linux-s390x": "npm:0.21.5" - "@esbuild/linux-x64": "npm:0.21.5" - "@esbuild/netbsd-x64": "npm:0.21.5" - "@esbuild/openbsd-x64": "npm:0.21.5" - "@esbuild/sunos-x64": "npm:0.21.5" - "@esbuild/win32-arm64": "npm:0.21.5" - "@esbuild/win32-ia32": "npm:0.21.5" - "@esbuild/win32-x64": "npm:0.21.5" +"esbuild@npm:^0.27.0": + version: 0.27.7 + resolution: "esbuild@npm:0.27.7" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.7" + "@esbuild/android-arm": "npm:0.27.7" + "@esbuild/android-arm64": "npm:0.27.7" + "@esbuild/android-x64": "npm:0.27.7" + "@esbuild/darwin-arm64": "npm:0.27.7" + "@esbuild/darwin-x64": "npm:0.27.7" + "@esbuild/freebsd-arm64": "npm:0.27.7" + "@esbuild/freebsd-x64": "npm:0.27.7" + "@esbuild/linux-arm": "npm:0.27.7" + "@esbuild/linux-arm64": "npm:0.27.7" + "@esbuild/linux-ia32": "npm:0.27.7" + "@esbuild/linux-loong64": "npm:0.27.7" + "@esbuild/linux-mips64el": "npm:0.27.7" + "@esbuild/linux-ppc64": "npm:0.27.7" + "@esbuild/linux-riscv64": "npm:0.27.7" + "@esbuild/linux-s390x": "npm:0.27.7" + "@esbuild/linux-x64": "npm:0.27.7" + "@esbuild/netbsd-arm64": "npm:0.27.7" + "@esbuild/netbsd-x64": "npm:0.27.7" + "@esbuild/openbsd-arm64": "npm:0.27.7" + "@esbuild/openbsd-x64": "npm:0.27.7" + "@esbuild/openharmony-arm64": "npm:0.27.7" + "@esbuild/sunos-x64": "npm:0.27.7" + "@esbuild/win32-arm64": "npm:0.27.7" + "@esbuild/win32-ia32": "npm:0.27.7" + "@esbuild/win32-x64": "npm:0.27.7" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -1830,10 +1849,16 @@ __metadata: optional: true "@esbuild/linux-x64": optional: true + "@esbuild/netbsd-arm64": + optional: true "@esbuild/netbsd-x64": optional: true + "@esbuild/openbsd-arm64": + optional: true "@esbuild/openbsd-x64": optional: true + "@esbuild/openharmony-arm64": + optional: true "@esbuild/sunos-x64": optional: true "@esbuild/win32-arm64": @@ -1844,7 +1869,16 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + checksum: 10c0/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d languageName: node linkType: hard @@ -1855,6 +1889,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.1": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.3 resolution: "exponential-backoff@npm:3.1.3" @@ -1907,13 +1948,6 @@ __metadata: languageName: node linkType: hard -"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": - version: 2.0.2 - resolution: "get-func-name@npm:2.0.2" - checksum: 10c0/89830fd07623fa73429a711b9daecdb304386d237c71268007f788f113505ef1d4cc2d0b9680e072c5082490aec9df5d7758bf5ac6f1c37062855e8e3dc0b9df - languageName: node - linkType: hard - "graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -2003,6 +2037,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e + languageName: node + linkType: hard + "json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -2010,23 +2051,14 @@ __metadata: languageName: node linkType: hard -"local-pkg@npm:^0.4.3": - version: 0.4.3 - resolution: "local-pkg@npm:0.4.3" - checksum: 10c0/361c77d7873a629f09c9e86128926227171ee0fe3435d282fb80303ff255bb4d3c053b555d47e953b4f41d2561f2a7bc0e53e9ca5c9bc9607226a77c91ea4994 - languageName: node - linkType: hard - -"loupe@npm:^2.3.6": - version: 2.3.7 - resolution: "loupe@npm:2.3.7" - dependencies: - get-func-name: "npm:^2.0.1" - checksum: 10c0/71a781c8fc21527b99ed1062043f1f2bb30bdaf54fa4cf92463427e1718bc6567af2988300bc243c1f276e4f0876f29e3cbf7b58106fdc186915687456ce5bf4 +"loupe@npm:^3.1.0, loupe@npm:^3.1.4": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 10c0/910c872cba291309664c2d094368d31a68907b6f5913e989d301b5c25f30e97d76d77f23ab3bf3b46d0f601ff0b6af8810c10c31b91d2c6b2f132809ca2cc705 languageName: node linkType: hard -"magic-string@npm:^0.30.1": +"magic-string@npm:^0.30.17": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -2072,18 +2104,6 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^1.4.0, mlly@npm:^1.7.4": - version: 1.8.2 - resolution: "mlly@npm:1.8.2" - dependencies: - acorn: "npm:^8.16.0" - pathe: "npm:^2.0.3" - pkg-types: "npm:^1.3.1" - ufo: "npm:^1.6.3" - checksum: 10c0/aa826683a6daddf2aef65f9c8142e362731cf8e415a5591faf92fd51040a76697e45ab6dbb7a3b38be74e0f8c464825a7eabe827750455c7472421953f5da733 - languageName: node - linkType: hard - "ms@npm:^2.0.0, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -2156,44 +2176,28 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^4.0.0": - version: 4.0.0 - resolution: "p-limit@npm:4.0.0" - dependencies: - yocto-queue: "npm:^1.0.0" - checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad - languageName: node - linkType: hard - -"pathe@npm:^1.1.1": - version: 1.1.2 - resolution: "pathe@npm:1.1.2" - checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 - languageName: node - linkType: hard - -"pathe@npm:^2.0.1, pathe@npm:^2.0.3": +"pathe@npm:^2.0.3": version: 2.0.3 resolution: "pathe@npm:2.0.3" checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 languageName: node linkType: hard -"pathval@npm:^1.1.1": - version: 1.1.1 - resolution: "pathval@npm:1.1.1" - checksum: 10c0/f63e1bc1b33593cdf094ed6ff5c49c1c0dc5dc20a646ca9725cc7fe7cd9995002d51d5685b9b2ec6814342935748b711bafa840f84c0bb04e38ff40a335c94dc +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581 languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": +"picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 languageName: node linkType: hard -"picomatch@npm:^4.0.4": +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": version: 4.0.4 resolution: "picomatch@npm:4.0.4" checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 @@ -2214,22 +2218,11 @@ __metadata: ts-node: "npm:^10.9.0" tweetnacl: "npm:^1.0.3" typescript: "npm:^5.0.0" - vitest: "npm:^0.34.0" + vitest: "npm:^3.0.0" languageName: unknown linkType: soft -"pkg-types@npm:^1.3.1": - version: 1.3.1 - resolution: "pkg-types@npm:1.3.1" - dependencies: - confbox: "npm:^0.1.8" - mlly: "npm:^1.7.4" - pathe: "npm:^2.0.1" - checksum: 10c0/19e6cb8b66dcc66c89f2344aecfa47f2431c988cfa3366bdfdcfb1dd6695f87dcce37fbd90fe9d1605e2f4440b77f391e83c23255347c35cf84e7fd774d7fcea - languageName: node - linkType: hard - -"postcss@npm:^8.4.43": +"postcss@npm:^8.5.6": version: 8.5.14 resolution: "postcss@npm:8.5.14" dependencies: @@ -2240,17 +2233,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.5.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": "npm:^29.6.3" - ansi-styles: "npm:^5.0.0" - react-is: "npm:^18.0.0" - checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f - languageName: node - linkType: hard - "proc-log@npm:^6.0.0": version: 6.1.0 resolution: "proc-log@npm:6.1.0" @@ -2274,14 +2256,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 - languageName: node - linkType: hard - -"rollup@npm:^4.20.0": +"rollup@npm:^4.43.0": version: 4.60.3 resolution: "rollup@npm:4.60.3" dependencies: @@ -2437,7 +2412,7 @@ __metadata: languageName: node linkType: hard -"std-env@npm:^3.3.3": +"std-env@npm:^3.9.0": version: 3.10.0 resolution: "std-env@npm:3.10.0" checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f @@ -2460,12 +2435,12 @@ __metadata: languageName: node linkType: hard -"strip-literal@npm:^1.0.1": - version: 1.3.0 - resolution: "strip-literal@npm:1.3.0" +"strip-literal@npm:^3.0.0": + version: 3.1.0 + resolution: "strip-literal@npm:3.1.0" dependencies: - acorn: "npm:^8.10.0" - checksum: 10c0/3c0c9ee41eb346e827eede61ef288457f53df30e3e6ff8b94fa81b636933b0c13ca4ea5c97d00a10d72d04be326da99ac819f8769f0c6407ba8177c98344a916 + js-tokens: "npm:^9.0.1" + checksum: 10c0/50918f669915d9ad0fe4b7599902b735f853f2201c97791ead00104a654259c0c61bc2bc8fa3db05109339b61f4cf09e47b94ecc874ffbd0e013965223893af8 languageName: node linkType: hard @@ -2496,14 +2471,21 @@ __metadata: languageName: node linkType: hard -"tinybench@npm:^2.5.0": +"tinybench@npm:^2.9.0": version: 2.9.0 resolution: "tinybench@npm:2.9.0" checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c languageName: node linkType: hard -"tinyglobby@npm:^0.2.12": +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15": version: 0.2.16 resolution: "tinyglobby@npm:0.2.16" dependencies: @@ -2513,17 +2495,24 @@ __metadata: languageName: node linkType: hard -"tinypool@npm:^0.7.0": - version: 0.7.0 - resolution: "tinypool@npm:0.7.0" - checksum: 10c0/ecb35d9f74e72722c059acb1947ffc3c2caccb45266b89b72f74be2d28f0784d948b50bd9c6c68fa4159afd423ac5f5a07271a5f516d18a565dd06af0a37bc44 +"tinypool@npm:^1.1.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b languageName: node linkType: hard -"tinyspy@npm:^2.1.1": - version: 2.2.1 - resolution: "tinyspy@npm:2.2.1" - checksum: 10c0/0b4cfd07c09871e12c592dfa7b91528124dc49a4766a0b23350638c62e6a483d5a2a667de7e6282246c0d4f09996482ddaacbd01f0c05b7ed7e0f79d32409bdc +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f + languageName: node + linkType: hard + +"tinyspy@npm:^4.0.3": + version: 4.0.4 + resolution: "tinyspy@npm:4.0.4" + checksum: 10c0/a8020fc17799251e06a8398dcc352601d2770aa91c556b9531ecd7a12581161fd1c14e81cbdaff0c1306c93bfdde8ff6d1c1a3f9bbe6d91604f0fd4e01e2f1eb languageName: node linkType: hard @@ -2586,13 +2575,6 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": - version: 4.1.0 - resolution: "type-detect@npm:4.1.0" - checksum: 10c0/df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a - languageName: node - linkType: hard - "typescript@npm:^5.0.0, typescript@npm:^5.3.0": version: 5.9.3 resolution: "typescript@npm:5.9.3" @@ -2605,18 +2587,11 @@ __metadata: "typescript@patch:typescript@npm%3A^5.0.0#optional!builtin, typescript@patch:typescript@npm%3A^5.3.0#optional!builtin": version: 5.9.3 - resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=cef18b" + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/6f7e53bf0d9702350deeb6f35e08b69cbc8b958c33e0ec77bdc0ad6a6c8e280f3959dcbfde6f5b0848bece57810696489deaaa53d75de3578ff255d168c1efbd - languageName: node - linkType: hard - -"ufo@npm:^1.6.3": - version: 1.6.4 - resolution: "ufo@npm:1.6.4" - checksum: 10c0/3a2b29e7e3d772fbf6893d7d23bf442981457adb2fe122828abdbda89bedcb81aafd0dcc080e41b45f9a877db00cb42cbfee9639753a19d9b9bd39b5627039cf + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 languageName: node linkType: hard @@ -2683,45 +2658,52 @@ __metadata: languageName: node linkType: hard -"vite-node@npm:0.34.6": - version: 0.34.6 - resolution: "vite-node@npm:0.34.6" +"vite-node@npm:3.2.4": + version: 3.2.4 + resolution: "vite-node@npm:3.2.4" dependencies: cac: "npm:^6.7.14" - debug: "npm:^4.3.4" - mlly: "npm:^1.4.0" - pathe: "npm:^1.1.1" - picocolors: "npm:^1.0.0" - vite: "npm:^3.0.0 || ^4.0.0 || ^5.0.0-0" + debug: "npm:^4.4.1" + es-module-lexer: "npm:^1.7.0" + pathe: "npm:^2.0.3" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" bin: vite-node: vite-node.mjs - checksum: 10c0/0e804eab1ae5f0d98014f0a933ec08bfc287228283c3c4792f5f8b8fec6657896e513498e8436449e3116839a5592f9b497cf0b982b8da1152d7d419ccc306f1 + checksum: 10c0/6ceca67c002f8ef6397d58b9539f80f2b5d79e103a18367288b3f00a8ab55affa3d711d86d9112fce5a7fa658a212a087a005a045eb8f4758947dd99af2a6c6b languageName: node linkType: hard -"vite@npm:^3.0.0 || ^4.0.0 || ^5.0.0-0, vite@npm:^3.1.0 || ^4.0.0 || ^5.0.0-0": - version: 5.4.21 - resolution: "vite@npm:5.4.21" +"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0": + version: 7.3.2 + resolution: "vite@npm:7.3.2" dependencies: - esbuild: "npm:^0.21.3" + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.43" - rollup: "npm:^4.20.0" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" peerDependencies: - "@types/node": ^18.0.0 || >=20.0.0 - less: "*" + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 dependenciesMeta: fsevents: optional: true peerDependenciesMeta: "@types/node": optional: true + jiti: + optional: true less: optional: true lightningcss: @@ -2736,52 +2718,58 @@ __metadata: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true bin: vite: bin/vite.js - checksum: 10c0/468336a1409f728b464160cbf02672e72271fb688d0e605e776b74a89d27e1029509eef3a3a6c755928d8011e474dbf234824d054d07960be5f23cd176bc72de - languageName: node - linkType: hard - -"vitest@npm:^0.34.0": - version: 0.34.6 - resolution: "vitest@npm:0.34.6" - dependencies: - "@types/chai": "npm:^4.3.5" - "@types/chai-subset": "npm:^1.3.3" - "@types/node": "npm:*" - "@vitest/expect": "npm:0.34.6" - "@vitest/runner": "npm:0.34.6" - "@vitest/snapshot": "npm:0.34.6" - "@vitest/spy": "npm:0.34.6" - "@vitest/utils": "npm:0.34.6" - acorn: "npm:^8.9.0" - acorn-walk: "npm:^8.2.0" - cac: "npm:^6.7.14" - chai: "npm:^4.3.10" - debug: "npm:^4.3.4" - local-pkg: "npm:^0.4.3" - magic-string: "npm:^0.30.1" - pathe: "npm:^1.1.1" - picocolors: "npm:^1.0.0" - std-env: "npm:^3.3.3" - strip-literal: "npm:^1.0.1" - tinybench: "npm:^2.5.0" - tinypool: "npm:^0.7.0" - vite: "npm:^3.1.0 || ^4.0.0 || ^5.0.0-0" - vite-node: "npm:0.34.6" - why-is-node-running: "npm:^2.2.2" + checksum: 10c0/74be36907e208916f18bfec81c8eba18b869f0a170f1ece0a4dcb14874d0f0e7c022fb6c2ad896e3ee6c973fe88f53ac23b4078879ada340d8b263260868b8d4 + languageName: node + linkType: hard + +"vitest@npm:^3.0.0": + version: 3.2.4 + resolution: "vitest@npm:3.2.4" + dependencies: + "@types/chai": "npm:^5.2.2" + "@vitest/expect": "npm:3.2.4" + "@vitest/mocker": "npm:3.2.4" + "@vitest/pretty-format": "npm:^3.2.4" + "@vitest/runner": "npm:3.2.4" + "@vitest/snapshot": "npm:3.2.4" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" + chai: "npm:^5.2.0" + debug: "npm:^4.4.1" + expect-type: "npm:^1.2.1" + magic-string: "npm:^0.30.17" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.2" + std-env: "npm:^3.9.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.14" + tinypool: "npm:^1.1.1" + tinyrainbow: "npm:^2.0.0" + vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" + vite-node: "npm:3.2.4" + why-is-node-running: "npm:^2.3.0" peerDependencies: "@edge-runtime/vm": "*" - "@vitest/browser": "*" - "@vitest/ui": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.2.4 + "@vitest/ui": 3.2.4 happy-dom: "*" jsdom: "*" - playwright: "*" - safaridriver: "*" - webdriverio: "*" peerDependenciesMeta: "@edge-runtime/vm": optional: true + "@types/debug": + optional: true + "@types/node": + optional: true "@vitest/browser": optional: true "@vitest/ui": @@ -2790,15 +2778,9 @@ __metadata: optional: true jsdom: optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true bin: vitest: vitest.mjs - checksum: 10c0/7b5e87875991a66fe5cca62477f21447d7cdf4d101ac381ca02a16f4223b1ae5d0bc17ce42616d6dc74742757730ed511ada05aaa7090b6075e304c883cf0bc3 + checksum: 10c0/5bf53ede3ae6a0e08956d72dab279ae90503f6b5a05298a6a5e6ef47d2fd1ab386aaf48fafa61ed07a0ebfe9e371772f1ccbe5c258dd765206a8218bf2eb79eb languageName: node linkType: hard @@ -2830,7 +2812,7 @@ __metadata: languageName: node linkType: hard -"why-is-node-running@npm:^2.2.2": +"why-is-node-running@npm:^2.3.0": version: 2.3.0 resolution: "why-is-node-running@npm:2.3.0" dependencies: @@ -2885,10 +2867,3 @@ __metadata: checksum: 10c0/0732468dd7622ed8a274f640f191f3eaf1f39d5349a1b72836df484998d7d9807fbea094e2f5486d6b0cd2414aad5775972df0e68f8604db89a239f0f4bf7443 languageName: node linkType: hard - -"yocto-queue@npm:^1.0.0": - version: 1.2.2 - resolution: "yocto-queue@npm:1.2.2" - checksum: 10c0/36d4793e9cf7060f9da543baf67c55e354f4862c8d3d34de1a1b1d7c382d44171315cc54abf84d8900b8113d742b830108a1434f4898fb244f9b7e8426d4b8f5 - languageName: node - linkType: hard From 39ea3574f35e0d9b3b26d2a445efd62f2f0efa04 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:29:28 +0200 Subject: [PATCH 05/17] feat: undelegate --- .../tests/pinocchio-secret-counter.test.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts b/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts index c31ef89..53e78a5 100644 --- a/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts +++ b/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts @@ -494,7 +494,7 @@ describe("pinocchio-ephemeral-secret-counter", async () => { ); }); - it.skip("Commit and undelegate counter on ER to Solana", async function () { + it("Commit and undelegate counter on ER to Solana", async function () { const ixData = Buffer.from([3, 0, 0, 0, 0, 0, 0, 0]); const tx = new Transaction().add( new TransactionInstruction({ @@ -535,10 +535,20 @@ describe("pinocchio-ephemeral-secret-counter", async () => { console.log(`(ER) Undelegate txHash: ${txHash}`); expect(txHash).toBeDefined(); - await GetCommitmentSignature(txHash, connectionEphemeralRollup); + const commitHash = await GetCommitmentSignature( + txHash, + connectionEphemeralRollup, + ); + console.log(`(ER) Commit txHash: ${commitHash}`); + expect(commitHash).toBeDefined(); - // Check readability - let counter = await connectionBaseLayer.getAccountInfo(counterPda); + const result = await connectionBaseLayer.confirmTransaction(commitHash); + console.log(`(Base Layer) Commit result: ${result}`); + expect(result.value?.err).toBeNull(); + + let counter = await connectionBaseLayer.getAccountInfo(counterPda, { + commitment: "confirmed", + }); expect(counter?.owner.equals(PROGRAM_ID)).toBe(true); }); }); From d3f952fbc7998da81644d84d6b14892c07574563 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:34:45 +0200 Subject: [PATCH 06/17] feat: update permission --- .../src/processor.rs | 7 +- .../tests/pinocchio-secret-counter.test.ts | 82 +++++++++++++++++++ 2 files changed, 84 insertions(+), 5 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/src/processor.rs b/pinocchio-ephemeral-permission-counter/src/processor.rs index 91be32e..7ff8cb2 100644 --- a/pinocchio-ephemeral-permission-counter/src/processor.rs +++ b/pinocchio-ephemeral-permission-counter/src/processor.rs @@ -263,14 +263,11 @@ pub fn process_update_permission(accounts: &[AccountView]) -> ProgramResult { magic_program: magic_program, vault: vault_info, args: EphemeralMembersArgs { - members: &[Member { - flags: MemberFlags::default(), - pubkey: *payer_info.address(), - }], + members: &[], is_private: true, }, } - .invoke_signed::<{ data_buffer_size(1) }>(&[signer])?; + .invoke_signed::<{ data_buffer_size(0) }>(&[signer])?; Ok(()) } diff --git a/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts b/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts index 53e78a5..ed21131 100644 --- a/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts +++ b/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts @@ -429,6 +429,88 @@ describe("pinocchio-ephemeral-secret-counter", async () => { ); }); + it("Update permission on ER", async () => { + const ixData = Buffer.from([5, 0, 0, 0, 0, 0, 0, 0]); + const tx = new Transaction().add( + new TransactionInstruction({ + programId: PROGRAM_ID, + data: ixData, + keys: [ + { + pubkey: userKeypair.publicKey, + isSigner: true, + isWritable: true, + }, + { + pubkey: counterPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: PERMISSION_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: permissionPda, + isSigner: false, + isWritable: true, + }, + { + pubkey: MAGIC_PROGRAM_ID, + isSigner: false, + isWritable: false, + }, + { + pubkey: VAULT, + isSigner: false, + isWritable: true, + }, + ], + }), + ); + + const txHash = await sendAndConfirmTransaction( + connectionEphemeralRollup, + tx, + [userKeypair], + { + commitment: "confirmed", + skipPreflight: true, + }, + ); + console.log(`(ER) Create permission txHash: ${txHash}`); + expect(txHash).toBeDefined(); + + // Check readability + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + if (teeUrl.includes("tee")) { + expect(counter).toBeNull(); + } else { + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + } + + counter = await unauthorizedConnection.getAccountInfo(counterPda); + if (teeUrl.includes("tee")) { + expect(counter).toBeNull(); + } else { + expect(counter).toBeDefined(); + expect(counter?.data.subarray(32, 40)).toEqual( + Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), + ); + } + + // Check permission + let permission = + await connectionEphemeralRollup.getAccountInfo(permissionPda); + expect(permission).toBeDefined(); + expect(permission?.data.subarray(36, 68)).toEqual(PROGRAM_ID.toBuffer()); + expect(permission?.data.length).toEqual(68); + }); + it("Close permission on ER", async () => { const ixData = Buffer.from([6, 0, 0, 0, 0, 0, 0, 0]); const tx = new Transaction().add( From a59a4cebf4360cd3d8ca2d182ec9feaee891898a Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:37:26 +0200 Subject: [PATCH 07/17] docs: update readme --- .../README.md | 99 +++++++++++++------ 1 file changed, 68 insertions(+), 31 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/README.md b/pinocchio-ephemeral-permission-counter/README.md index 90f864f..e85469f 100644 --- a/pinocchio-ephemeral-permission-counter/README.md +++ b/pinocchio-ephemeral-permission-counter/README.md @@ -1,59 +1,96 @@ -# ➕ Pinocchio Counter +# Pinocchio Ephemeral Permission Counter -Simple counter program using Pinocchio and Ephemeral Rollups. +A minimal Solana counter program built with [Pinocchio](https://github.com/anza-xyz/pinocchio) and MagicBlock Ephemeral Rollups. The example shows how to initialize a counter PDA, delegate it to an Ephemeral Rollup, protect it with ephemeral permissions, and commit the final state back to the base layer. -This is a port of the Rust Counter program to use Pinocchio instead of Borsh for serialization, eliminating the need for Vec types. +The program is `no_std`, does not use Borsh, and keeps account data in a fixed-size `Counter` struct. -## Software Packages +## Requirements | Software | Version | Installation Guide | -| -------- | ------- | ------------------- | -| **Solana** | 2.3.13 | [Install Solana](https://docs.anza.xyz/cli/install) | -| **Rust** | 1.85.0 | [Install Rust](https://www.rust-lang.org/tools/install) | -| **Node** | 24.10.0 | [Install Node](https://nodejs.org/en/download/current) | +| -------- | ------- | ------------------ | +| Solana CLI | 2.3.13 | [Install Solana](https://docs.anza.xyz/cli/install) | +| Rust | 1.85.0 | [Install Rust](https://www.rust-lang.org/tools/install) | +| Node.js | 24.10.0 | [Install Node](https://nodejs.org/en/download/current) | +| Yarn | 4.x | [Install Yarn](https://yarnpkg.com/getting-started/install) | + +## Setup + +Install the TypeScript test dependencies: + +```bash +yarn install +``` + +The tests read `PRIVATE_KEY` from the environment, or fall back to `~/.config/solana/id.json`. + +```bash +cp .env.example .env +``` + +Optional RPC overrides: + +- `PROVIDER_ENDPOINT` +- `WS_ENDPOINT` +- `EPHEMERAL_PROVIDER_ENDPOINT` +- `EPHEMERAL_WS_ENDPOINT` ## Build +```bash +yarn build +``` + +This runs: + ```bash cargo build-sbf ``` ## Test +Run the Vitest integration flow: + ```bash -cargo test-sbf --features logging +yarn test ``` -## Key Differences from Rust Counter +The test initializes the counter on Solana devnet, delegates it to the Ephemeral Rollup, increments it on both layers, creates/updates/closes a permission account, and commits the delegated state back to Solana. -- **No Borsh**: Uses manual serialization with `to_le_bytes()` and `from_le_bytes()` for simplicity -- **No Vec**: All types use fixed-size arrays or primitives -- **Pinocchio Framework**: Leverages Pinocchio's lightweight instruction handling -- **Direct State Management**: Simple `Counter` struct with manual serialization +## Program Model -## Instructions +The counter PDA is derived with: -### 0: InitializeCounter -Initialize a counter PDA to 0. Payload: `bump` (u8). +```text +["counter", id] +``` -### 1: IncreaseCounter -Increase the counter by a specified amount. Payload: `bump` (u8) + `increase_by` (u64). +where `id` is a 32-byte client-provided public key. The account stores: -### 2: Delegate -Delegate the counter account to the Ephemeral Rollups delegation program. Payload: `bump` (u8). +| Field | Size | Description | +| ----- | ---- | ----------- | +| `id` | 32 bytes | Identifier used in the PDA seeds | +| `count` | 8 bytes | Little-endian `u64` counter value | +| `bump` | 1 byte | PDA bump | +| `_pad` | 7 bytes | Alignment padding | -### 3: CommitAndUndelegate -Commit changes and undelegate the counter account. +Total size: 48 bytes. -### 4: Commit -Commit changes to the base layer. +## Instructions -### 5: IncrementAndCommit -Increment counter and commit in one instruction. Payload: `bump` (u8) + `increase_by` (u64). +Each instruction starts with an 8-byte little-endian discriminator. -### 6: IncrementAndUndelegate -Increment counter and undelegate in one instruction. Payload: `bump` (u8) + `increase_by` (u64). +| Discriminator | Instruction | Payload | Description | +| ------------- | ----------- | ------- | ----------- | +| `0` | `InitializeCounter` | `id` (`[u8; 32]`) | Creates the counter PDA and initializes `count` to `0`. | +| `1` | `IncreaseCounter` | `increase_by` (`u64`) | Adds `increase_by` to the counter with overflow checking. | +| `2` | `Delegate` | None | Delegates the counter PDA to the Ephemeral Rollups delegation program. | +| `3` | `CommitAndUndelegate` | None | Commits the counter state and undelegates it back to the base layer. | +| `4` | `CreatePermission` | None | Creates a private ephemeral permission for the counter. | +| `5` | `UpdatePermission` | None | Updates the counter permission membership. | +| `6` | `ClosePermission` | None | Closes the counter permission account. | -## Account Structure +The delegation program also invokes the undelegation callback discriminator: -- **Counter**: 8 bytes (u64 count value) +```text +[196, 28, 41, 206, 48, 37, 51, 167] +``` From f4441d18c41b938aee88abf709755718fa3e7c8e Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:37:39 +0200 Subject: [PATCH 08/17] feat: safer ix data reads --- pinocchio-ephemeral-permission-counter/src/entrypoint.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/src/entrypoint.rs b/pinocchio-ephemeral-permission-counter/src/entrypoint.rs index 2a7bc80..611fdcf 100644 --- a/pinocchio-ephemeral-permission-counter/src/entrypoint.rs +++ b/pinocchio-ephemeral-permission-counter/src/entrypoint.rs @@ -104,7 +104,9 @@ pub(crate) fn inner_process_instruction( .try_into() .map_err(|_| ProgramError::InvalidInstructionData)?; let discriminator = InstructionDiscriminator::from_bytes(discriminator)?; - let payload = &instruction_data[8..]; + let payload = instruction_data + .get(8..) + .ok_or(ProgramError::InvalidInstructionData)?; #[cfg(feature = "logging")] log_instruction(discriminator); @@ -112,7 +114,9 @@ pub(crate) fn inner_process_instruction( match discriminator { InstructionDiscriminator::InitializeCounter => { let id = Address::new_from_array( - payload[..32] + payload + .get(..32) + .ok_or(ProgramError::InvalidInstructionData)? .try_into() .map_err(|_| ProgramError::InvalidInstructionData)?, ); From a19528284838896d76df2581f3528136d37ea75d Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:41:19 +0200 Subject: [PATCH 09/17] feat: rent for --- pinocchio-ephemeral-permission-counter/src/processor.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/src/processor.rs b/pinocchio-ephemeral-permission-counter/src/processor.rs index 7ff8cb2..6a41299 100644 --- a/pinocchio-ephemeral-permission-counter/src/processor.rs +++ b/pinocchio-ephemeral-permission-counter/src/processor.rs @@ -17,6 +17,11 @@ use pinocchio::{ use pinocchio_log::log; use pinocchio_system::instructions::CreateAccount; +// TODO: Use method from SDK +fn rent_for(size: u64) -> u64 { + (size + 60) * 32 +} + /// Create and initialize the counter PDA for the initializer. pub fn process_initialize_counter(accounts: &[AccountView], id: &Address) -> ProgramResult { let [payer_info, counter_info, _system_program] = accounts else { @@ -47,8 +52,8 @@ pub fn process_initialize_counter(accounts: &[AccountView], id: &Address) -> Pro // Create counter account if it doesn't exist. log!("Creating counter ..."); let rent_exempt_lamports = Rent::get()?.try_minimum_balance(Counter::SIZE)?; - // TODO: Use method from SDK - let ephemeral_rent = (35 + 2 * MAX_MEMBER_SIZE as u64 + 60) * 32; + // Header size + 2 members + let ephemeral_rent = rent_for(35 + 2 * MAX_MEMBER_SIZE as u64); log!("Rent exempt lamports: {}", rent_exempt_lamports); CreateAccount { from: payer_info, From dc4bb71fa143d4d21fb3c19182892ec2bd914053 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:42:37 +0200 Subject: [PATCH 10/17] feat: remove log --- pinocchio-ephemeral-permission-counter/src/processor.rs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/src/processor.rs b/pinocchio-ephemeral-permission-counter/src/processor.rs index 6a41299..34c1a2e 100644 --- a/pinocchio-ephemeral-permission-counter/src/processor.rs +++ b/pinocchio-ephemeral-permission-counter/src/processor.rs @@ -89,12 +89,6 @@ pub fn process_increase_counter(accounts: &[AccountView], increase_by: u64) -> P return Err(ProgramError::InvalidSeeds); } - log!( - "Increasing counter by {} from {} to {}", - increase_by, - counter_data.count, - counter_data.count + increase_by - ); counter_data.count = counter_data .count .checked_add(increase_by) From 4d4e5381f0150a2d88dcd61d99c52bebe39b7132 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:48:00 +0200 Subject: [PATCH 11/17] feat: check ownership --- .../src/processor.rs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pinocchio-ephemeral-permission-counter/src/processor.rs b/pinocchio-ephemeral-permission-counter/src/processor.rs index 34c1a2e..c7521ad 100644 --- a/pinocchio-ephemeral-permission-counter/src/processor.rs +++ b/pinocchio-ephemeral-permission-counter/src/processor.rs @@ -81,6 +81,10 @@ pub fn process_increase_counter(accounts: &[AccountView], increase_by: u64) -> P return Err(ProgramError::NotEnoughAccountKeys); }; + if !counter_info.owned_by(&crate::ID) { + return Err(ProgramError::IllegalOwner); + } + let mut data = counter_info.try_borrow_mut()?; let counter_data = Counter::load_mut(&mut data)?; let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; @@ -106,6 +110,10 @@ pub fn process_delegate(accounts: &[AccountView]) -> ProgramResult { }; let validator = rest.first().map(|account| *account.address()); + if !counter_info.owned_by(&crate::ID) { + return Err(ProgramError::IllegalOwner); + } + let (bump, id, counter_pda) = { let data = counter_info.try_borrow()?; let counter_data = Counter::load(&data)?; @@ -154,6 +162,10 @@ pub fn process_commit_and_undelegate(accounts: &[AccountView]) -> ProgramResult return Err(ProgramError::MissingRequiredSignature); } + if !counter_info.owned_by(&crate::ID) { + return Err(ProgramError::IllegalOwner); + } + { let data = counter_info.try_borrow()?; let counter_data = Counter::load(&data)?; @@ -184,6 +196,10 @@ pub fn process_create_permission(accounts: &[AccountView]) -> ProgramResult { return Err(ProgramError::NotEnoughAccountKeys); }; + if !counter_info.owned_by(&crate::ID) { + return Err(ProgramError::IllegalOwner); + } + let (bump, id, counter_pda) = { let data = counter_info.try_borrow()?; let counter_data = Counter::load(&data)?; @@ -233,6 +249,10 @@ pub fn process_update_permission(accounts: &[AccountView]) -> ProgramResult { return Err(ProgramError::NotEnoughAccountKeys); }; + if !counter_info.owned_by(&crate::ID) { + return Err(ProgramError::IllegalOwner); + } + let (bump, id, counter_pda) = { let data = counter_info.try_borrow()?; let counter_data = Counter::load(&data)?; @@ -279,6 +299,10 @@ pub fn process_close_permission(accounts: &[AccountView]) -> ProgramResult { return Err(ProgramError::NotEnoughAccountKeys); }; + if !counter_info.owned_by(&crate::ID) { + return Err(ProgramError::IllegalOwner); + } + let (bump, id, counter_pda) = { let data = counter_info.try_borrow()?; let counter_data = Counter::load(&data)?; From c94d255e6427659b2929e0b5bfd968c11ac11559 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:53:34 +0200 Subject: [PATCH 12/17] feat: reuse check --- .../src/processor.rs | 89 +++++-------------- 1 file changed, 20 insertions(+), 69 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/src/processor.rs b/pinocchio-ephemeral-permission-counter/src/processor.rs index c7521ad..070587e 100644 --- a/pinocchio-ephemeral-permission-counter/src/processor.rs +++ b/pinocchio-ephemeral-permission-counter/src/processor.rs @@ -110,16 +110,7 @@ pub fn process_delegate(accounts: &[AccountView]) -> ProgramResult { }; let validator = rest.first().map(|account| *account.address()); - if !counter_info.owned_by(&crate::ID) { - return Err(ProgramError::IllegalOwner); - } - - let (bump, id, counter_pda) = { - let data = counter_info.try_borrow()?; - let counter_data = Counter::load(&data)?; - let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; - (counter_data.bump, counter_data.id, counter_pda) - }; + let (bump, id) = load_and_verify_counter(counter_info)?; let seed_1 = b"counter"; let seed_2 = id.as_ref(); @@ -130,10 +121,6 @@ pub fn process_delegate(accounts: &[AccountView]) -> ProgramResult { ..Default::default() }; - if &counter_pda != counter_info.address() { - return Err(ProgramError::InvalidSeeds); - } - delegate_account( &[ payer_info, @@ -162,19 +149,7 @@ pub fn process_commit_and_undelegate(accounts: &[AccountView]) -> ProgramResult return Err(ProgramError::MissingRequiredSignature); } - if !counter_info.owned_by(&crate::ID) { - return Err(ProgramError::IllegalOwner); - } - - { - let data = counter_info.try_borrow()?; - let counter_data = Counter::load(&data)?; - let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; - - if &counter_pda != counter_info.address() { - return Err(ProgramError::InvalidSeeds); - } - } + load_and_verify_counter(counter_info)?; commit_and_undelegate_accounts( payer_info, @@ -196,20 +171,7 @@ pub fn process_create_permission(accounts: &[AccountView]) -> ProgramResult { return Err(ProgramError::NotEnoughAccountKeys); }; - if !counter_info.owned_by(&crate::ID) { - return Err(ProgramError::IllegalOwner); - } - - let (bump, id, counter_pda) = { - let data = counter_info.try_borrow()?; - let counter_data = Counter::load(&data)?; - let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; - (counter_data.bump, counter_data.id, counter_pda) - }; - - if &counter_pda != counter_info.address() { - return Err(ProgramError::InvalidSeeds); - } + let (bump, id) = load_and_verify_counter(counter_info)?; let bump_seed = [bump]; let seeds = [ @@ -249,20 +211,7 @@ pub fn process_update_permission(accounts: &[AccountView]) -> ProgramResult { return Err(ProgramError::NotEnoughAccountKeys); }; - if !counter_info.owned_by(&crate::ID) { - return Err(ProgramError::IllegalOwner); - } - - let (bump, id, counter_pda) = { - let data = counter_info.try_borrow()?; - let counter_data = Counter::load(&data)?; - let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; - (counter_data.bump, counter_data.id, counter_pda) - }; - - if &counter_pda != counter_info.address() { - return Err(ProgramError::InvalidSeeds); - } + let (bump, id) = load_and_verify_counter(counter_info)?; let bump_seed = [bump]; let seeds = [ @@ -299,20 +248,7 @@ pub fn process_close_permission(accounts: &[AccountView]) -> ProgramResult { return Err(ProgramError::NotEnoughAccountKeys); }; - if !counter_info.owned_by(&crate::ID) { - return Err(ProgramError::IllegalOwner); - } - - let (bump, id, counter_pda) = { - let data = counter_info.try_borrow()?; - let counter_data = Counter::load(&data)?; - let counter_pda = Counter::derive_pda(&counter_data.id, &[counter_data.bump])?; - (counter_data.bump, counter_data.id, counter_pda) - }; - - if &counter_pda != counter_info.address() { - return Err(ProgramError::InvalidSeeds); - } + let (bump, id) = load_and_verify_counter(counter_info)?; let bump_seed = [bump]; let seeds = [ @@ -345,3 +281,18 @@ pub fn process_undelegation_callback(accounts: &[AccountView], ix_data: &[u8]) - undelegate(counter_info, &crate::ID, buffer_acc, payer_info, ix_data)?; Ok(()) } + +/// Borrow `counter_info`, validate it is the PDA derived from its own state, +/// and return (bump, id). +fn load_and_verify_counter(counter_info: &AccountView) -> Result<(u8, Address), ProgramError> { + if !counter_info.owned_by(&crate::ID) { + return Err(ProgramError::IllegalOwner); + } + let data = counter_info.try_borrow()?; + let counter = Counter::load(&data)?; + let pda = Counter::derive_pda(&counter.id, &[counter.bump])?; + if &pda != counter_info.address() { + return Err(ProgramError::InvalidSeeds); + } + Ok((counter.bump, counter.id)) +} From 587bb779e486e0202ea1b236117473f9e58707dc Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 16:56:11 +0200 Subject: [PATCH 13/17] style: lint --- .../src/processor.rs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/src/processor.rs b/pinocchio-ephemeral-permission-counter/src/processor.rs index 070587e..cdc3809 100644 --- a/pinocchio-ephemeral-permission-counter/src/processor.rs +++ b/pinocchio-ephemeral-permission-counter/src/processor.rs @@ -62,7 +62,7 @@ pub fn process_initialize_counter(accounts: &[AccountView], id: &Address) -> Pro space: Counter::SIZE as u64, owner: &crate::ID, } - .invoke_signed(&[signer.clone()])?; + .invoke_signed(core::slice::from_ref(&signer))?; log!("Counter created successfully"); // Initialize counter to 0. @@ -153,7 +153,7 @@ pub fn process_commit_and_undelegate(accounts: &[AccountView]) -> ProgramResult commit_and_undelegate_accounts( payer_info, - &[counter_info.clone()], + core::slice::from_ref(counter_info), magic_context, magic_program, None, @@ -185,8 +185,8 @@ pub fn process_create_permission(accounts: &[AccountView]) -> ProgramResult { payer: counter_info, permissioned_account: counter_info, permission: permission_info, - permission_program: permission_program, - magic_program: magic_program, + permission_program, + magic_program, vault: vault_info, args: EphemeralMembersArgs { members: &[Member { @@ -226,9 +226,9 @@ pub fn process_update_permission(accounts: &[AccountView]) -> ProgramResult { authority_is_signer: true, payer: counter_info, permissioned_account: counter_info, - permission: permission, - permission_program: permission_program, - magic_program: magic_program, + permission, + permission_program, + magic_program, vault: vault_info, args: EphemeralMembersArgs { members: &[], @@ -263,9 +263,9 @@ pub fn process_close_permission(accounts: &[AccountView]) -> ProgramResult { authority_is_signer: true, payer: counter_info, permissioned_account: counter_info, - permission: permission, - permission_program: permission_program, - magic_program: magic_program, + permission, + permission_program, + magic_program, vault: vault_info, } .invoke_signed(&[signer])?; From 4c1a2af1c06792a6c71d6ae1f156e388b0338bd5 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 17:01:11 +0200 Subject: [PATCH 14/17] docs: safety --- pinocchio-ephemeral-permission-counter/src/state.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/src/state.rs b/pinocchio-ephemeral-permission-counter/src/state.rs index 83b2f0a..f4236ea 100644 --- a/pinocchio-ephemeral-permission-counter/src/state.rs +++ b/pinocchio-ephemeral-permission-counter/src/state.rs @@ -10,7 +10,7 @@ pub struct Counter { } impl Counter { - pub const SIZE: usize = 32 + 8 + 8; + pub const SIZE: usize = core::mem::size_of::(); pub fn load(data: &[u8]) -> Result<&Self, ProgramError> { if data.len() < Self::SIZE { @@ -20,7 +20,7 @@ impl Counter { if !(ptr as usize).is_multiple_of(core::mem::align_of::()) { return Err(ProgramError::InvalidAccountData); } - // Safety: caller ensures the account data is valid for Counter. + // SAFETY: ensured there are enough bytes in the data buffer for Counter. Ok(unsafe { &*ptr }) } @@ -32,7 +32,7 @@ impl Counter { if !(ptr as usize).is_multiple_of(core::mem::align_of::()) { return Err(ProgramError::InvalidAccountData); } - // Safety: caller ensures the account data is valid for Counter. + // SAFETY: ensured there are enough bytes in the data buffer for Counter. Ok(unsafe { &mut *ptr }) } From 7e0257e3175075d5abc4c6bd924273e412440394 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 17:03:03 +0200 Subject: [PATCH 15/17] chore: align names --- .../README.md | 42 +++++++++---------- ...chio-ephemeral-permission-counter.test.ts} | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) rename pinocchio-ephemeral-permission-counter/tests/{pinocchio-secret-counter.test.ts => pinocchio-ephemeral-permission-counter.test.ts} (99%) diff --git a/pinocchio-ephemeral-permission-counter/README.md b/pinocchio-ephemeral-permission-counter/README.md index e85469f..cf8e25a 100644 --- a/pinocchio-ephemeral-permission-counter/README.md +++ b/pinocchio-ephemeral-permission-counter/README.md @@ -6,12 +6,12 @@ The program is `no_std`, does not use Borsh, and keeps account data in a fixed-s ## Requirements -| Software | Version | Installation Guide | -| -------- | ------- | ------------------ | -| Solana CLI | 2.3.13 | [Install Solana](https://docs.anza.xyz/cli/install) | -| Rust | 1.85.0 | [Install Rust](https://www.rust-lang.org/tools/install) | -| Node.js | 24.10.0 | [Install Node](https://nodejs.org/en/download/current) | -| Yarn | 4.x | [Install Yarn](https://yarnpkg.com/getting-started/install) | +| Software | Version | Installation Guide | +| ---------- | ------- | ----------------------------------------------------------- | +| Solana CLI | 2.3.13 | [Install Solana](https://docs.anza.xyz/cli/install) | +| Rust | 1.87.0 | [Install Rust](https://www.rust-lang.org/tools/install) | +| Node.js | 24.10.0 | [Install Node](https://nodejs.org/en/download/current) | +| Yarn | 4.x | [Install Yarn](https://yarnpkg.com/getting-started/install) | ## Setup @@ -66,12 +66,12 @@ The counter PDA is derived with: where `id` is a 32-byte client-provided public key. The account stores: -| Field | Size | Description | -| ----- | ---- | ----------- | -| `id` | 32 bytes | Identifier used in the PDA seeds | -| `count` | 8 bytes | Little-endian `u64` counter value | -| `bump` | 1 byte | PDA bump | -| `_pad` | 7 bytes | Alignment padding | +| Field | Size | Description | +| ------- | -------- | --------------------------------- | +| `id` | 32 bytes | Identifier used in the PDA seeds | +| `count` | 8 bytes | Little-endian `u64` counter value | +| `bump` | 1 byte | PDA bump | +| `_pad` | 7 bytes | Alignment padding | Total size: 48 bytes. @@ -79,15 +79,15 @@ Total size: 48 bytes. Each instruction starts with an 8-byte little-endian discriminator. -| Discriminator | Instruction | Payload | Description | -| ------------- | ----------- | ------- | ----------- | -| `0` | `InitializeCounter` | `id` (`[u8; 32]`) | Creates the counter PDA and initializes `count` to `0`. | -| `1` | `IncreaseCounter` | `increase_by` (`u64`) | Adds `increase_by` to the counter with overflow checking. | -| `2` | `Delegate` | None | Delegates the counter PDA to the Ephemeral Rollups delegation program. | -| `3` | `CommitAndUndelegate` | None | Commits the counter state and undelegates it back to the base layer. | -| `4` | `CreatePermission` | None | Creates a private ephemeral permission for the counter. | -| `5` | `UpdatePermission` | None | Updates the counter permission membership. | -| `6` | `ClosePermission` | None | Closes the counter permission account. | +| Discriminator | Instruction | Payload | Description | +| ------------- | --------------------- | --------------------- | ---------------------------------------------------------------------- | +| `0` | `InitializeCounter` | `id` (`[u8; 32]`) | Creates the counter PDA and initializes `count` to `0`. | +| `1` | `IncreaseCounter` | `increase_by` (`u64`) | Adds `increase_by` to the counter with overflow checking. | +| `2` | `Delegate` | None | Delegates the counter PDA to the Ephemeral Rollups delegation program. | +| `3` | `CommitAndUndelegate` | None | Commits the counter state and undelegates it back to the base layer. | +| `4` | `CreatePermission` | None | Creates a private ephemeral permission for the counter. | +| `5` | `UpdatePermission` | None | Updates the counter permission membership. | +| `6` | `ClosePermission` | None | Closes the counter permission account. | The delegation program also invokes the undelegation callback discriminator: diff --git a/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts b/pinocchio-ephemeral-permission-counter/tests/pinocchio-ephemeral-permission-counter.test.ts similarity index 99% rename from pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts rename to pinocchio-ephemeral-permission-counter/tests/pinocchio-ephemeral-permission-counter.test.ts index ed21131..949e384 100644 --- a/pinocchio-ephemeral-permission-counter/tests/pinocchio-secret-counter.test.ts +++ b/pinocchio-ephemeral-permission-counter/tests/pinocchio-ephemeral-permission-counter.test.ts @@ -33,7 +33,7 @@ const PROGRAM_ID = new PublicKey( "AAWCg4eJHpdmUtM8Wz6Thm8FDi6C3vnMksf1pt2vfxhf", ); -describe("pinocchio-ephemeral-secret-counter", async () => { +describe("pinocchio-ephemeral-permission-counter", async () => { // Open user keypair from private key or default location const KEYPAIR = process.env.PRIVATE_KEY || From eb891bf462bc54048d07be75c70dd79341e7931b Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 17:05:14 +0200 Subject: [PATCH 16/17] feat: confirmed get info --- ...cchio-ephemeral-permission-counter.test.ts | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/pinocchio-ephemeral-permission-counter/tests/pinocchio-ephemeral-permission-counter.test.ts b/pinocchio-ephemeral-permission-counter/tests/pinocchio-ephemeral-permission-counter.test.ts index 949e384..f78c70f 100644 --- a/pinocchio-ephemeral-permission-counter/tests/pinocchio-ephemeral-permission-counter.test.ts +++ b/pinocchio-ephemeral-permission-counter/tests/pinocchio-ephemeral-permission-counter.test.ts @@ -336,13 +336,17 @@ describe("pinocchio-ephemeral-permission-counter", async () => { expect(txHash).toBeDefined(); // Check readability - let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda, { + commitment: "confirmed", + }); expect(counter).toBeDefined(); expect(counter?.data.subarray(32, 40)).toEqual( Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), ); - counter = await unauthorizedConnection.getAccountInfo(counterPda); + counter = await unauthorizedConnection.getAccountInfo(counterPda, { + commitment: "confirmed", + }); expect(counter).toBeDefined(); expect(counter?.data.subarray(32, 40)).toEqual( Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), @@ -403,13 +407,17 @@ describe("pinocchio-ephemeral-permission-counter", async () => { expect(txHash).toBeDefined(); // Check readability - let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda, { + commitment: "confirmed", + }); expect(counter).toBeDefined(); expect(counter?.data.subarray(32, 40)).toEqual( Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), ); - counter = await unauthorizedConnection.getAccountInfo(counterPda); + counter = await unauthorizedConnection.getAccountInfo(counterPda, { + commitment: "confirmed", + }); if (teeUrl.includes("tee")) { expect(counter).toBeNull(); } else { @@ -420,8 +428,12 @@ describe("pinocchio-ephemeral-permission-counter", async () => { } // Check permission - let permission = - await connectionEphemeralRollup.getAccountInfo(permissionPda); + let permission = await connectionEphemeralRollup.getAccountInfo( + permissionPda, + { + commitment: "confirmed", + }, + ); expect(permission).toBeDefined(); expect(permission?.data.subarray(36, 68)).toEqual(PROGRAM_ID.toBuffer()); expect(permission?.data.subarray(69, 101)).toEqual( @@ -483,7 +495,9 @@ describe("pinocchio-ephemeral-permission-counter", async () => { expect(txHash).toBeDefined(); // Check readability - let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda, { + commitment: "confirmed", + }); if (teeUrl.includes("tee")) { expect(counter).toBeNull(); } else { @@ -493,7 +507,9 @@ describe("pinocchio-ephemeral-permission-counter", async () => { ); } - counter = await unauthorizedConnection.getAccountInfo(counterPda); + counter = await unauthorizedConnection.getAccountInfo(counterPda, { + commitment: "confirmed", + }); if (teeUrl.includes("tee")) { expect(counter).toBeNull(); } else { @@ -504,8 +520,12 @@ describe("pinocchio-ephemeral-permission-counter", async () => { } // Check permission - let permission = - await connectionEphemeralRollup.getAccountInfo(permissionPda); + let permission = await connectionEphemeralRollup.getAccountInfo( + permissionPda, + { + commitment: "confirmed", + }, + ); expect(permission).toBeDefined(); expect(permission?.data.subarray(36, 68)).toEqual(PROGRAM_ID.toBuffer()); expect(permission?.data.length).toEqual(68); @@ -559,17 +579,21 @@ describe("pinocchio-ephemeral-permission-counter", async () => { ); console.log(`(ER) Close permission txHash: ${txHash}`); const result = await connectionEphemeralRollup.confirmTransaction(txHash); - expect(result.value?.err).toBeNull(); + expect(result.value.err).toBeNull(); expect(txHash).toBeDefined(); // Check readability - let counter = await connectionEphemeralRollup.getAccountInfo(counterPda); + let counter = await connectionEphemeralRollup.getAccountInfo(counterPda, { + commitment: "confirmed", + }); expect(counter).toBeDefined(); expect(counter?.data.subarray(32, 40)).toEqual( Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), ); - counter = await unauthorizedConnection.getAccountInfo(counterPda); + counter = await unauthorizedConnection.getAccountInfo(counterPda, { + commitment: "confirmed", + }); expect(counter).toBeDefined(); expect(counter?.data.subarray(32, 40)).toEqual( Buffer.from([2, 0, 0, 0, 0, 0, 0, 0]), @@ -626,7 +650,7 @@ describe("pinocchio-ephemeral-permission-counter", async () => { const result = await connectionBaseLayer.confirmTransaction(commitHash); console.log(`(Base Layer) Commit result: ${result}`); - expect(result.value?.err).toBeNull(); + expect(result.value.err).toBeNull(); let counter = await connectionBaseLayer.getAccountInfo(counterPda, { commitment: "confirmed", From 6d6caf058e52251933c19e71eef31aeadbbf2d61 Mon Sep 17 00:00:00 2001 From: Dodecahedr0x Date: Wed, 6 May 2026 17:09:22 +0200 Subject: [PATCH 17/17] feat: update rust --- .github/workflows/test-examples.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-examples.yml b/.github/workflows/test-examples.yml index 560393b..f6f8319 100644 --- a/.github/workflows/test-examples.yml +++ b/.github/workflows/test-examples.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: '20' + node-version: "20" - name: Enable Corepack run: corepack enable @@ -25,7 +25,7 @@ jobs: - name: Setup Rust uses: actions-rs/toolchain@v1 with: - toolchain: "1.85.0" + toolchain: stable override: true - name: Install Solana