├── add.txt ├── Palm-presale-project(contract) ├── palm-presale │ ├── src │ │ ├── errors │ │ │ ├── mod.rs │ │ │ └── errors.rs │ │ ├── constants │ │ │ ├── mod.rs │ │ │ └── constants.rs │ │ ├── state │ │ │ ├── mod.rs │ │ │ ├── user_info.rs │ │ │ └── presale_info.rs │ │ ├── instructions │ │ │ ├── mod.rs │ │ │ ├── start_presale.rs │ │ │ ├── update_presale.rs │ │ │ ├── create_presale.rs │ │ │ ├── withdraw_sol.rs │ │ │ ├── withdraw_token.rs │ │ │ ├── claim_token.rs │ │ │ ├── deposit_token.rs │ │ │ └── buy_token.rs │ │ └── lib.rs │ ├── Xargo.toml │ └── Cargo.toml ├── programs │ └── palm-presale │ │ ├── src │ │ ├── errors │ │ │ ├── mod.rs │ │ │ └── errors.rs │ │ ├── constants │ │ │ ├── mod.rs │ │ │ └── constants.rs │ │ ├── state │ │ │ ├── mod.rs │ │ │ ├── user_info.rs │ │ │ └── presale_info.rs │ │ ├── instructions │ │ │ ├── mod.rs │ │ │ ├── start_presale.rs │ │ │ ├── update_presale.rs │ │ │ ├── create_presale.rs │ │ │ ├── withdraw_sol.rs │ │ │ ├── withdraw_token.rs │ │ │ ├── claim_token.rs │ │ │ ├── deposit_token.rs │ │ │ └── buy_token.rs │ │ └── lib.rs │ │ ├── Xargo.toml │ │ └── Cargo.toml ├── .gitignore ├── .prettierignore ├── id.json ├── tests │ ├── wallets │ │ └── admin.json │ └── palm-presale.ts ├── Cargo.toml ├── Anchor.toml ├── tsconfig.json ├── migrations │ └── deploy.ts ├── package.json ├── yarn.lock └── Cargo.lock └── README.md /add.txt: -------------------------------------------------------------------------------- 1 | This is the palm-presale project 2 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/errors/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod errors; 2 | 3 | pub use errors::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/constants/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod constants; 2 | 3 | pub use constants::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/errors/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod errors; 2 | 3 | pub use errors::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/constants/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod constants; 2 | 3 | pub use constants::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | **/*.rs.bk 6 | node_modules 7 | test-ledger 8 | .yarn 9 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/.prettierignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | node_modules 6 | dist 7 | build 8 | test-ledger 9 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/state/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod presale_info; 2 | pub mod user_info; 3 | 4 | pub use presale_info::*; 5 | pub use user_info::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/state/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod presale_info; 2 | pub mod user_info; 3 | 4 | pub use presale_info::*; 5 | pub use user_info::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/id.json: -------------------------------------------------------------------------------- 1 | [237,95,71,244,171,12,184,149,110,52,18,72,49,72,254,249,210,89,135,240,185,187,160,201,160,43,87,124,174,197,81,163,247,62,122,212,87,226,168,106,253,12,235,216,166,42,225,1,83,111,154,192,197,17,82,39,236,66,75,247,69,9,191,114] -------------------------------------------------------------------------------- /Palm-presale-project(contract)/tests/wallets/admin.json: -------------------------------------------------------------------------------- 1 | [80,218,89,7,162,16,84,193,18,182,193,200,82,105,95,105,167,246,255,183,146,194,218,227,177,137,157,123,83,118,6,216,33,132,234,96,10,108,77,150,132,43,244,63,99,54,60,99,125,40,89,118,148,24,44,117,13,74,98,30,177,28,228,241] -------------------------------------------------------------------------------- /Palm-presale-project(contract)/Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "programs/*" 4 | ] 5 | 6 | [profile.release] 7 | overflow-checks = true 8 | lto = "fat" 9 | codegen-units = 1 10 | [profile.release.build-override] 11 | opt-level = 3 12 | incremental = false 13 | codegen-units = 1 14 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/constants/constants.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[constant] 4 | pub const PRESALE_SEED: &[u8] = b"PRESALE_SEED"; 5 | pub const USER_SEED: &[u8] = b"USER_SEED"; 6 | pub const PRESALE_VAULT: &[u8] = b"PRESALE_VAULT"; 7 | pub const RENT_MINIMUM: u64 = 1_000_000; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/constants/constants.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[constant] 4 | pub const PRESALE_SEED: &[u8] = b"PRESALE_SEED"; 5 | pub const USER_SEED: &[u8] = b"USER_SEED"; 6 | pub const PRESALE_VAULT: &[u8] = b"PRESALE_VAULT"; 7 | pub const RENT_MINIMUM: u64 = 1_000_000; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/Anchor.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | 3 | [features] 4 | seeds = false 5 | skip-lint = false 6 | 7 | [programs.devnet] 8 | palm_presale = "H6qBMcWs42iZu99FPT2vwhKu1AsdRQzL5JwUs3QvQhGy" 9 | 10 | [registry] 11 | url = "https://api.apr.dev" 12 | 13 | [provider] 14 | cluster = "devnet" 15 | wallet = "./id.json" 16 | 17 | [scripts] 18 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 19 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "types": ["mocha", "chai"], 4 | "typeRoots": ["./node_modules/@types"], 5 | "lib": ["es2015"], 6 | "module": "commonjs", 7 | "target": "es6", 8 | "esModuleInterop": true, 9 | "resolveJsonModule": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/state/user_info.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | #[derive(Default)] 5 | pub struct UserInfo { 6 | // Buy quote amount 7 | pub buy_quote_amount: u64, 8 | // Buy token amount 9 | pub buy_token_amount: u64, 10 | // Buy time 11 | pub buy_time: u64, 12 | // claim amount 13 | // pub claim_amount: u64, 14 | // claim time 15 | pub claim_time: u64, 16 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/state/user_info.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | #[derive(Default)] 5 | pub struct UserInfo { 6 | // Buy quote amount 7 | pub buy_quote_amount: u64, 8 | // Buy token amount 9 | pub buy_token_amount: u64, 10 | // Buy time 11 | pub buy_time: u64, 12 | // claim amount 13 | // pub claim_amount: u64, 14 | // claim time 15 | pub claim_time: u64, 16 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/migrations/deploy.ts: -------------------------------------------------------------------------------- 1 | // Migrations are an early feature. Currently, they're nothing more than this 2 | // single deploy script that's invoked from the CLI, injecting a provider 3 | // configured from the workspace's Anchor.toml. 4 | 5 | const anchor = require("@coral-xyz/anchor"); 6 | 7 | module.exports = async function (provider) { 8 | // Configure client to use the provider. 9 | anchor.setProvider(provider); 10 | 11 | // Add your deploy script here. 12 | }; 13 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod create_presale; 2 | pub mod update_presale; 3 | pub mod deposit_token; 4 | pub mod start_presale; 5 | pub mod buy_token; 6 | pub mod claim_token; 7 | pub mod withdraw_sol; 8 | pub mod withdraw_token; 9 | 10 | pub use create_presale::*; 11 | pub use update_presale::*; 12 | pub use deposit_token::*; 13 | pub use start_presale::*; 14 | pub use buy_token::*; 15 | pub use claim_token::*; 16 | pub use withdraw_sol::*; 17 | pub use withdraw_token::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod create_presale; 2 | pub mod update_presale; 3 | pub mod deposit_token; 4 | pub mod start_presale; 5 | pub mod buy_token; 6 | pub mod claim_token; 7 | pub mod withdraw_sol; 8 | pub mod withdraw_token; 9 | 10 | pub use create_presale::*; 11 | pub use update_presale::*; 12 | pub use deposit_token::*; 13 | pub use start_presale::*; 14 | pub use buy_token::*; 15 | pub use claim_token::*; 16 | pub use withdraw_sol::*; 17 | pub use withdraw_token::*; -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "palm-presale" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "palm_presale" 10 | 11 | [features] 12 | no-entrypoint = [] 13 | no-idl = [] 14 | no-log-ix-name = [] 15 | cpi = ["no-entrypoint"] 16 | default = [] 17 | 18 | [dependencies] 19 | solana-program = "<1.17.0" 20 | anchor-lang = {version = "0.29.0", features = ["init-if-needed"]} 21 | anchor-spl = "0.29.0" 22 | toml_datetime = "=0.6.1" 23 | ahash = "=0.8.6" 24 | mpl-token-metadata = { version="1.2.5", features = [ "no-entrypoint" ] } 25 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "palm-presale" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "palm_presale" 10 | 11 | [features] 12 | no-entrypoint = [] 13 | no-idl = [] 14 | no-log-ix-name = [] 15 | cpi = ["no-entrypoint"] 16 | default = [] 17 | 18 | [dependencies] 19 | solana-program = "<1.17.0" 20 | anchor-lang = {version = "0.29.0", features = ["init-if-needed"]} 21 | anchor-spl = "0.29.0" 22 | toml_datetime = "=0.6.1" 23 | ahash = "=0.8.6" 24 | mpl-token-metadata = { version="1.2.5", features = [ "no-entrypoint" ] } 25 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/errors/errors.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[error_code] 4 | pub enum PresaleError { 5 | #[msg("You are not authorized to perform this action.")] 6 | Unauthorized, 7 | #[msg("Not allowed")] 8 | NotAllowed, 9 | #[msg("Math operation overflow")] 10 | MathOverflow, 11 | #[msg("Already marked")] 12 | AlreadyMarked, 13 | #[msg("Presale not started yet")] 14 | PresaleNotStarted, 15 | #[msg("Presale already ended")] 16 | PresaleEnded, 17 | #[msg("Token amount mismatch")] 18 | TokenAmountMismatch, 19 | #[msg("Insufficient Tokens")] 20 | InsufficientFund, 21 | #[msg("Presale not ended yet")] 22 | PresaleNotEnded, 23 | #[msg("Presale already ended")] 24 | HardCapped 25 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/errors/errors.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[error_code] 4 | pub enum PresaleError { 5 | #[msg("You are not authorized to perform this action.")] 6 | Unauthorized, 7 | #[msg("Not allowed")] 8 | NotAllowed, 9 | #[msg("Math operation overflow")] 10 | MathOverflow, 11 | #[msg("Already marked")] 12 | AlreadyMarked, 13 | #[msg("Presale not started yet")] 14 | PresaleNotStarted, 15 | #[msg("Presale already ended")] 16 | PresaleEnded, 17 | #[msg("Token amount mismatch")] 18 | TokenAmountMismatch, 19 | #[msg("Insufficient Tokens")] 20 | InsufficientFund, 21 | #[msg("Presale not ended yet")] 22 | PresaleNotEnded, 23 | #[msg("Presale already ended")] 24 | HardCapped 25 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", 4 | "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" 5 | }, 6 | "dependencies": { 7 | "@coral-xyz/anchor": "^0.29.0", 8 | "@solana/spl-token": "^0.4.6", 9 | "@solana/web3.js": "^1.91.8", 10 | "base58": "^2.0.1", 11 | "bn.js": "^5.2.1", 12 | "yarn": "^1.22.22" 13 | }, 14 | "devDependencies": { 15 | "@types/bn.js": "^5.1.0", 16 | "@types/chai": "^4.3.0", 17 | "@types/mocha": "^9.0.0", 18 | "chai": "^4.3.4", 19 | "mocha": "^9.0.3", 20 | "prettier": "^2.6.2", 21 | "ts-mocha": "^10.0.0", 22 | "typescript": "^4.3.5" 23 | }, 24 | "license": "MIT" 25 | } 26 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/start_presale.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::state::PresaleInfo; 4 | use crate::constants::PRESALE_SEED; 5 | 6 | // Edit the details for presale 7 | pub fn start_presale( 8 | ctx: Context, 9 | start_time: u64, 10 | end_time: u64 11 | ) -> Result<()> { 12 | 13 | let presale = &mut ctx.accounts.presale_info; 14 | 15 | // Set the presale details 16 | presale.is_live = true; 17 | presale.start_time = start_time; 18 | presale.end_time = end_time; 19 | 20 | msg!("Presale has started for token: {} at the time: {}", presale.token_mint_address, start_time); 21 | Ok(()) 22 | } 23 | 24 | #[derive(Accounts)] 25 | pub struct StartPresale<'info> { 26 | #[account( 27 | mut, 28 | seeds = [PRESALE_SEED], 29 | bump 30 | )] 31 | pub presale_info: Box>, 32 | 33 | #[account(mut)] 34 | pub authority: Signer<'info>, 35 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/start_presale.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::state::PresaleInfo; 4 | use crate::constants::PRESALE_SEED; 5 | 6 | // Edit the details for presale 7 | pub fn start_presale( 8 | ctx: Context, 9 | start_time: u64, 10 | end_time: u64 11 | ) -> Result<()> { 12 | 13 | let presale = &mut ctx.accounts.presale_info; 14 | 15 | // Set the presale details 16 | presale.is_live = true; 17 | presale.start_time = start_time; 18 | presale.end_time = end_time; 19 | 20 | msg!("Presale has started for token: {} at the time: {}", presale.token_mint_address, start_time); 21 | Ok(()) 22 | } 23 | 24 | #[derive(Accounts)] 25 | pub struct StartPresale<'info> { 26 | #[account( 27 | mut, 28 | seeds = [PRESALE_SEED], 29 | bump 30 | )] 31 | pub presale_info: Box>, 32 | 33 | #[account(mut)] 34 | pub authority: Signer<'info>, 35 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/state/presale_info.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | #[derive(Default)] 5 | pub struct PresaleInfo { 6 | // Mint address of the presale token 7 | pub token_mint_address: Pubkey, 8 | // Softcap 9 | pub softcap_amount: u64, 10 | // Hardcap 11 | pub hardcap_amount: u64, 12 | // Total amount of presale tokens available in the presale 13 | pub deposit_token_amount: u64, 14 | // Total amount of presale tokens sold during the presale 15 | pub sold_token_amount: u64, 16 | // Start time of presale 17 | pub start_time: u64, 18 | // End time of presale 19 | pub end_time: u64, 20 | // Maximum amount of presale tokens an address can purchase 21 | pub max_token_amount_per_address: u64, 22 | // Quote token per presale token 23 | pub price_per_token: u64, 24 | // Presale is buyable 25 | pub is_live: bool, 26 | // Authority of the presale 27 | pub authority: Pubkey, 28 | // Status of softcapped 29 | pub is_soft_capped: bool, 30 | // Status of hardcapped 31 | pub is_hard_capped: bool, 32 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/state/presale_info.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | #[derive(Default)] 5 | pub struct PresaleInfo { 6 | // Mint address of the presale token 7 | pub token_mint_address: Pubkey, 8 | // Softcap 9 | pub softcap_amount: u64, 10 | // Hardcap 11 | pub hardcap_amount: u64, 12 | // Total amount of presale tokens available in the presale 13 | pub deposit_token_amount: u64, 14 | // Total amount of presale tokens sold during the presale 15 | pub sold_token_amount: u64, 16 | // Start time of presale 17 | pub start_time: u64, 18 | // End time of presale 19 | pub end_time: u64, 20 | // Maximum amount of presale tokens an address can purchase 21 | pub max_token_amount_per_address: u64, 22 | // Quote token per presale token 23 | pub price_per_token: u64, 24 | // Presale is buyable 25 | pub is_live: bool, 26 | // Authority of the presale 27 | pub authority: Pubkey, 28 | // Status of softcapped 29 | pub is_soft_capped: bool, 30 | // Status of hardcapped 31 | pub is_hard_capped: bool, 32 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/update_presale.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::state::PresaleInfo; 4 | use crate::constants::PRESALE_SEED; 5 | 6 | // Edit the details for a presale 7 | pub fn update_presale( 8 | ctx: Context, 9 | max_token_amount_per_address: u64, 10 | price_per_token: u64, 11 | softcap_amount: u64, 12 | hardcap_amount: u64, 13 | start_time: u64, 14 | end_time: u64, 15 | ) -> Result<()> { 16 | 17 | let presale_info = &mut ctx.accounts.presale_info; 18 | presale_info.max_token_amount_per_address = max_token_amount_per_address; 19 | presale_info.price_per_token = price_per_token; 20 | presale_info.softcap_amount = softcap_amount; 21 | presale_info.hardcap_amount = hardcap_amount; 22 | presale_info.start_time = start_time; 23 | presale_info.end_time = end_time; 24 | 25 | Ok(()) 26 | } 27 | 28 | #[derive(Accounts)] 29 | pub struct UpdatePresale<'info> { 30 | // presale_detils account 31 | #[account( 32 | mut, 33 | seeds = [PRESALE_SEED], 34 | bump 35 | )] 36 | pub presale_info: Box>, 37 | 38 | // Set the authority to the transaction signer 39 | #[account( 40 | mut, 41 | constraint = authority.key() == presale_info.authority 42 | )] 43 | pub authority: Signer<'info>, 44 | 45 | // Must be included when initializing an account 46 | pub system_program: Program<'info, System>, 47 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/update_presale.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::state::PresaleInfo; 4 | use crate::constants::PRESALE_SEED; 5 | 6 | // Edit the details for a presale 7 | pub fn update_presale( 8 | ctx: Context, 9 | max_token_amount_per_address: u64, 10 | price_per_token: u64, 11 | softcap_amount: u64, 12 | hardcap_amount: u64, 13 | start_time: u64, 14 | end_time: u64, 15 | ) -> Result<()> { 16 | 17 | let presale_info = &mut ctx.accounts.presale_info; 18 | presale_info.max_token_amount_per_address = max_token_amount_per_address; 19 | presale_info.price_per_token = price_per_token; 20 | presale_info.softcap_amount = softcap_amount; 21 | presale_info.hardcap_amount = hardcap_amount; 22 | presale_info.start_time = start_time; 23 | presale_info.end_time = end_time; 24 | 25 | Ok(()) 26 | } 27 | 28 | #[derive(Accounts)] 29 | pub struct UpdatePresale<'info> { 30 | // presale_detils account 31 | #[account( 32 | mut, 33 | seeds = [PRESALE_SEED], 34 | bump 35 | )] 36 | pub presale_info: Box>, 37 | 38 | // Set the authority to the transaction signer 39 | #[account( 40 | mut, 41 | constraint = authority.key() == presale_info.authority 42 | )] 43 | pub authority: Signer<'info>, 44 | 45 | // Must be included when initializing an account 46 | pub system_program: Program<'info, System>, 47 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/create_presale.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::state::PresaleInfo; 4 | use crate::constants::PRESALE_SEED; 5 | 6 | // Edit the details for a presale 7 | pub fn create_presale( 8 | ctx: Context, 9 | token_mint_address: Pubkey, 10 | softcap_amount: u64, 11 | hardcap_amount: u64, 12 | max_token_amount_per_address: u64, 13 | price_per_token: u64, 14 | start_time: u64, 15 | end_time: u64, 16 | ) -> Result<()> { 17 | 18 | let presale_info = &mut ctx.accounts.presale_info; 19 | let authority = &ctx.accounts.authority; 20 | 21 | presale_info.token_mint_address = token_mint_address; 22 | presale_info.softcap_amount = softcap_amount; 23 | presale_info.hardcap_amount = hardcap_amount; 24 | presale_info.deposit_token_amount = 0; 25 | presale_info.sold_token_amount = 0; 26 | presale_info.start_time = start_time; 27 | presale_info.end_time = end_time; 28 | presale_info.max_token_amount_per_address = max_token_amount_per_address; 29 | presale_info.price_per_token = price_per_token; 30 | presale_info.is_live = false; 31 | presale_info.authority = authority.key(); 32 | presale_info.is_soft_capped = false; 33 | presale_info.is_hard_capped = false; 34 | 35 | msg!( 36 | "Presale has created for token: {}", 37 | presale_info.token_mint_address 38 | ); 39 | 40 | Ok(()) 41 | } 42 | 43 | #[derive(Accounts)] 44 | pub struct CreatePresale<'info> { 45 | #[account( 46 | init, 47 | seeds = [PRESALE_SEED], 48 | bump, 49 | payer = authority, 50 | space = 8 + std::mem::size_of::(), 51 | )] 52 | pub presale_info: Box>, 53 | 54 | #[account(mut)] 55 | pub authority: Signer<'info>, 56 | 57 | pub system_program: Program<'info, System>, 58 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/create_presale.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::state::PresaleInfo; 4 | use crate::constants::PRESALE_SEED; 5 | 6 | // Edit the details for a presale 7 | pub fn create_presale( 8 | ctx: Context, 9 | token_mint_address: Pubkey, 10 | softcap_amount: u64, 11 | hardcap_amount: u64, 12 | max_token_amount_per_address: u64, 13 | price_per_token: u64, 14 | start_time: u64, 15 | end_time: u64, 16 | ) -> Result<()> { 17 | 18 | let presale_info = &mut ctx.accounts.presale_info; 19 | let authority = &ctx.accounts.authority; 20 | 21 | presale_info.token_mint_address = token_mint_address; 22 | presale_info.softcap_amount = softcap_amount; 23 | presale_info.hardcap_amount = hardcap_amount; 24 | presale_info.deposit_token_amount = 0; 25 | presale_info.sold_token_amount = 0; 26 | presale_info.start_time = start_time; 27 | presale_info.end_time = end_time; 28 | presale_info.max_token_amount_per_address = max_token_amount_per_address; 29 | presale_info.price_per_token = price_per_token; 30 | presale_info.is_live = false; 31 | presale_info.authority = authority.key(); 32 | presale_info.is_soft_capped = false; 33 | presale_info.is_hard_capped = false; 34 | 35 | msg!( 36 | "Presale has created for token: {}", 37 | presale_info.token_mint_address 38 | ); 39 | 40 | Ok(()) 41 | } 42 | 43 | #[derive(Accounts)] 44 | pub struct CreatePresale<'info> { 45 | #[account( 46 | init, 47 | seeds = [PRESALE_SEED], 48 | bump, 49 | payer = authority, 50 | space = 8 + std::mem::size_of::(), 51 | )] 52 | pub presale_info: Box>, 53 | 54 | #[account(mut)] 55 | pub authority: Signer<'info>, 56 | 57 | pub system_program: Program<'info, System>, 58 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solana Presale Smart Contract 2 | 3 | Smart contract designed for facilitating the sale of SPL tokens with additional features, including a presale mechanism and allocation tickets. The contract is built using the Anchor framework. 4 | 5 | ## Contact 6 | telegram: @shinnyleo0912 7 | 8 | You can contact me here if you have any problems with this repo then we can decide comfortable contact way. 9 | 10 | ## Key Features 11 | 12 | - **Token Sale:** The contract enables the sale of SPL tokens, allowing users to purchase tokens directly from the vending machine. 13 | 14 | - **Presale Mechanism:** A configurable presale phase is implemented, allowing for exclusive token access for a specified duration before the public sale. 15 | 16 | - **Allocation Tickets:** Users can acquire allocation tickets during the presale, providing them with reserved spots for purchasing SPL tokens. 17 | 18 | - **Flexible Configuration:** The contract offers flexibility in configuring various parameters, such as presale and public sale start/end times, token prices, and ticket allocation limits. 19 | 20 | ## Prerequisites 21 | 22 | Before you begin, make sure you have the following tools installed: 23 | 24 | - [Rust](https://www.rust-lang.org/tools/install) 25 | - [Cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html) 26 | - [Anchor CLI](https://project-serum.github.io/anchor/getting-started/installation.html) 27 | - [Node.js](https://nodejs.org/en/download/) 28 | - [Yarn](https://yarnpkg.com/getting-started/install) 29 | 30 | ## Getting Started 31 | 32 | 1. **Installation:** Clone the repository and install dependencies. 33 | 34 | ```bash 35 | git clone https://github.com/web3batman/Solana-Presale-Smart-Contract 36 | cd Solana-Presale-Smart-Contract 37 | yarn 38 | ``` 39 | 40 | 2. **Build the Smart Contract:** 41 | 42 | ```bash 43 | anchor build 44 | ``` 45 | 46 | 3. **Run Tests:** 47 | 48 | ```bash 49 | anchor test 50 | ``` 51 | 52 | 4. **Deploy:** 53 | 54 | Switch to your desired network and deploy 55 | ```bash 56 | anchor deploy 57 | ``` 58 | 59 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/withdraw_sol.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::{prelude::*, system_program}; 2 | 3 | use crate::constants::{PRESALE_SEED, PRESALE_VAULT}; 4 | use crate::state::PresaleInfo; 5 | 6 | pub fn withdraw_sol(ctx: Context, amount: u64, bump: u8) -> Result<()> { 7 | msg!("Vault: {:?} Send Amount {:?}", ctx.accounts.presale_vault.to_account_info().lamports(), amount); 8 | system_program::transfer( 9 | CpiContext::new_with_signer( 10 | ctx.accounts.system_program.to_account_info(), 11 | system_program::Transfer { 12 | from: ctx.accounts.presale_vault.to_account_info(), 13 | to: ctx.accounts.admin.to_account_info(), 14 | }, 15 | &[&[PRESALE_VAULT, /*ctx.accounts.presale_info.key().as_ref(),*/ &[bump]][..]], 16 | ), 17 | amount, 18 | )?; 19 | 20 | Ok(()) 21 | } 22 | 23 | // pub fn withdraw_sol<'info>( 24 | // // source: AccountInfo<'info>, 25 | // // destination: AccountInfo<'info>, 26 | // // system_program: AccountInfo<'info>, 27 | // ctx: Context, 28 | // signers: &[&[&[u8]]; 1], 29 | // amount: u64, 30 | // ) -> ProgramResult { 31 | // let ix = solana_program::system_instruction::transfer(ctx.accounts.presale_vault.to_account_info().key, ctx.accoutnx.admin.to_account_info().key, amount); 32 | // invoke_signed(&ix, &[ctx.accounts.presale_vault.to_account_info().key, ctx.accoutnx.admin.to_account_info().key, system_program], signers) 33 | // } 34 | 35 | #[derive(Accounts)] 36 | pub struct WithdrawSol<'info> { 37 | #[account( 38 | seeds = [PRESALE_SEED], 39 | bump 40 | )] 41 | pub presale_info: Box>, 42 | 43 | /// CHECK: 44 | #[account( 45 | mut, 46 | seeds = [PRESALE_VAULT, /* presale_info.key().as_ref() */], 47 | bump 48 | )] 49 | pub presale_vault: AccountInfo<'info>, 50 | 51 | #[account( 52 | mut, 53 | constraint = admin.key() == presale_info.authority 54 | )] 55 | pub admin: Signer<'info>, 56 | 57 | pub system_program: Program<'info, System>, 58 | } 59 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/withdraw_sol.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::{prelude::*, system_program}; 2 | 3 | use crate::constants::{PRESALE_SEED, PRESALE_VAULT}; 4 | use crate::state::PresaleInfo; 5 | 6 | pub fn withdraw_sol(ctx: Context, amount: u64, bump: u8) -> Result<()> { 7 | msg!("Vault: {:?} Send Amount {:?}", ctx.accounts.presale_vault.to_account_info().lamports(), amount); 8 | system_program::transfer( 9 | CpiContext::new_with_signer( 10 | ctx.accounts.system_program.to_account_info(), 11 | system_program::Transfer { 12 | from: ctx.accounts.presale_vault.to_account_info(), 13 | to: ctx.accounts.admin.to_account_info(), 14 | }, 15 | &[&[PRESALE_VAULT, /*ctx.accounts.presale_info.key().as_ref(),*/ &[bump]][..]], 16 | ), 17 | amount, 18 | )?; 19 | 20 | Ok(()) 21 | } 22 | 23 | // pub fn withdraw_sol<'info>( 24 | // // source: AccountInfo<'info>, 25 | // // destination: AccountInfo<'info>, 26 | // // system_program: AccountInfo<'info>, 27 | // ctx: Context, 28 | // signers: &[&[&[u8]]; 1], 29 | // amount: u64, 30 | // ) -> ProgramResult { 31 | // let ix = solana_program::system_instruction::transfer(ctx.accounts.presale_vault.to_account_info().key, ctx.accoutnx.admin.to_account_info().key, amount); 32 | // invoke_signed(&ix, &[ctx.accounts.presale_vault.to_account_info().key, ctx.accoutnx.admin.to_account_info().key, system_program], signers) 33 | // } 34 | 35 | #[derive(Accounts)] 36 | pub struct WithdrawSol<'info> { 37 | #[account( 38 | seeds = [PRESALE_SEED], 39 | bump 40 | )] 41 | pub presale_info: Box>, 42 | 43 | /// CHECK: 44 | #[account( 45 | mut, 46 | seeds = [PRESALE_VAULT, /* presale_info.key().as_ref() */], 47 | bump 48 | )] 49 | pub presale_vault: AccountInfo<'info>, 50 | 51 | #[account( 52 | mut, 53 | constraint = admin.key() == presale_info.authority 54 | )] 55 | pub admin: Signer<'info>, 56 | 57 | pub system_program: Program<'info, System>, 58 | } 59 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/withdraw_token.rs: -------------------------------------------------------------------------------- 1 | use { 2 | anchor_lang::prelude::*, 3 | anchor_spl::{ 4 | token, 5 | associated_token, 6 | }, 7 | }; 8 | 9 | use crate::state::PresaleInfo; 10 | use crate::constants::PRESALE_SEED; 11 | use crate::errors::PresaleError; 12 | 13 | pub fn withdraw_token( 14 | ctx: Context, 15 | amount: u64, 16 | bump: u8 17 | ) -> Result<()> { 18 | let presale_info = &mut ctx.accounts.presale_info; 19 | 20 | if presale_info.deposit_token_amount < amount { 21 | return Err(PresaleError::InsufficientFund.into()); 22 | } 23 | 24 | presale_info.deposit_token_amount = presale_info.deposit_token_amount - amount; 25 | 26 | msg!("Transferring presale tokens to buyer {}...", &ctx.accounts.admin_authority.key()); 27 | msg!("Mint: {}", &ctx.accounts.mint_account.to_account_info().key()); 28 | msg!("From Token Address: {}", &ctx.accounts.presale_associated_token_account.key()); 29 | msg!("To Token Address: {}", &ctx.accounts.admin_associated_token_account.key()); 30 | token::transfer( 31 | CpiContext::new_with_signer( 32 | ctx.accounts.token_program.to_account_info(), 33 | token::Transfer { 34 | from: ctx.accounts.presale_associated_token_account.to_account_info(), 35 | to: ctx.accounts.admin_associated_token_account.to_account_info(), 36 | authority: ctx.accounts.presale_info.to_account_info(), 37 | }, 38 | &[&[PRESALE_SEED, &[bump]][..]], 39 | ), 40 | amount, 41 | )?; 42 | 43 | msg!("Withdrew presale tokens successfully."); 44 | 45 | Ok(()) 46 | } 47 | 48 | #[derive(Accounts)] 49 | #[instruction( 50 | bump: u8 51 | )] 52 | pub struct WithdrawToken<'info> { 53 | // Presale token accounts 54 | #[account(mut)] 55 | pub mint_account: Box>, 56 | 57 | #[account( 58 | mut, 59 | associated_token::mint = presale_token_mint_account, 60 | associated_token::authority = admin_authority, 61 | )] 62 | pub admin_associated_token_account: Account<'info, token::TokenAccount>, 63 | 64 | #[account( 65 | mut, 66 | associated_token::mint = presale_token_mint_account, 67 | associated_token::authority = presale_info, 68 | )] 69 | pub presale_associated_token_account: Box>, 70 | 71 | #[account(mut)] 72 | pub presale_token_mint_account: Account<'info, token::Mint>, 73 | 74 | #[account( 75 | mut, 76 | seeds = [PRESALE_SEED], 77 | bump 78 | )] 79 | pub presale_info: Box>, 80 | 81 | // pub presale_authority: SystemAccount<'info>, 82 | 83 | // #[account( 84 | // mut, 85 | // constraint = admin_authority.key() == presale_info.authority.key() 86 | // )] 87 | pub admin_authority: Signer<'info>, 88 | 89 | pub rent: Sysvar<'info, Rent>, 90 | pub system_program: Program<'info, System>, 91 | pub token_program: Program<'info, token::Token>, 92 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 93 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/withdraw_token.rs: -------------------------------------------------------------------------------- 1 | use { 2 | anchor_lang::prelude::*, 3 | anchor_spl::{ 4 | token, 5 | associated_token, 6 | }, 7 | }; 8 | 9 | use crate::state::PresaleInfo; 10 | use crate::constants::PRESALE_SEED; 11 | use crate::errors::PresaleError; 12 | 13 | pub fn withdraw_token( 14 | ctx: Context, 15 | amount: u64, 16 | bump: u8 17 | ) -> Result<()> { 18 | let presale_info = &mut ctx.accounts.presale_info; 19 | 20 | if presale_info.deposit_token_amount < amount { 21 | return Err(PresaleError::InsufficientFund.into()); 22 | } 23 | 24 | presale_info.deposit_token_amount = presale_info.deposit_token_amount - amount; 25 | 26 | msg!("Transferring presale tokens to buyer {}...", &ctx.accounts.admin_authority.key()); 27 | msg!("Mint: {}", &ctx.accounts.mint_account.to_account_info().key()); 28 | msg!("From Token Address: {}", &ctx.accounts.presale_associated_token_account.key()); 29 | msg!("To Token Address: {}", &ctx.accounts.admin_associated_token_account.key()); 30 | token::transfer( 31 | CpiContext::new_with_signer( 32 | ctx.accounts.token_program.to_account_info(), 33 | token::Transfer { 34 | from: ctx.accounts.presale_associated_token_account.to_account_info(), 35 | to: ctx.accounts.admin_associated_token_account.to_account_info(), 36 | authority: ctx.accounts.presale_info.to_account_info(), 37 | }, 38 | &[&[PRESALE_SEED, &[bump]][..]], 39 | ), 40 | amount, 41 | )?; 42 | 43 | msg!("Withdrew presale tokens successfully."); 44 | 45 | Ok(()) 46 | } 47 | 48 | #[derive(Accounts)] 49 | #[instruction( 50 | bump: u8 51 | )] 52 | pub struct WithdrawToken<'info> { 53 | // Presale token accounts 54 | #[account(mut)] 55 | pub mint_account: Box>, 56 | 57 | #[account( 58 | mut, 59 | associated_token::mint = presale_token_mint_account, 60 | associated_token::authority = admin_authority, 61 | )] 62 | pub admin_associated_token_account: Account<'info, token::TokenAccount>, 63 | 64 | #[account( 65 | mut, 66 | associated_token::mint = presale_token_mint_account, 67 | associated_token::authority = presale_info, 68 | )] 69 | pub presale_associated_token_account: Box>, 70 | 71 | #[account(mut)] 72 | pub presale_token_mint_account: Account<'info, token::Mint>, 73 | 74 | #[account( 75 | mut, 76 | seeds = [PRESALE_SEED], 77 | bump 78 | )] 79 | pub presale_info: Box>, 80 | 81 | // pub presale_authority: SystemAccount<'info>, 82 | 83 | // #[account( 84 | // mut, 85 | // constraint = admin_authority.key() == presale_info.authority.key() 86 | // )] 87 | pub admin_authority: Signer<'info>, 88 | 89 | pub rent: Sysvar<'info, Rent>, 90 | pub system_program: Program<'info, System>, 91 | pub token_program: Program<'info, token::Token>, 92 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 93 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | pub mod constants; 4 | pub mod errors; 5 | pub mod instructions; 6 | pub mod state; 7 | 8 | use instructions::*; 9 | 10 | declare_id!("H6qBMcWs42iZu99FPT2vwhKu1AsdRQzL5JwUs3QvQhGy"); 11 | 12 | #[program] 13 | pub mod palm_presale { 14 | use super::*; 15 | 16 | pub fn create_presale( 17 | ctx: Context, 18 | token_mint_address: Pubkey, 19 | // quote_token_mint_address: Pubkey, 20 | softcap_amount: u64, 21 | hardcap_amount: u64, 22 | max_token_amount_per_address: u64, 23 | price_per_token: u64, 24 | start_time: u64, 25 | end_time: u64, 26 | // identifier: u8 27 | ) -> Result<()> { 28 | return create_presale::create_presale( 29 | ctx, 30 | token_mint_address, 31 | // quote_token_mint_address, 32 | softcap_amount, 33 | hardcap_amount, 34 | max_token_amount_per_address, 35 | price_per_token, 36 | start_time, 37 | end_time, 38 | // identifier, 39 | ); 40 | } 41 | 42 | pub fn update_presale( 43 | ctx: Context, 44 | max_token_amount_per_address: u64, 45 | price_per_token: u64, 46 | softcap_amount: u64, 47 | hardcap_amount: u64, 48 | start_time: u64, 49 | end_time: u64, 50 | ) -> Result<()> { 51 | return update_presale::update_presale ( 52 | ctx, 53 | max_token_amount_per_address, 54 | price_per_token, 55 | softcap_amount, 56 | hardcap_amount, 57 | start_time, 58 | end_time, 59 | ); 60 | } 61 | 62 | pub fn deposit_token( 63 | ctx: Context, 64 | amount: u64, 65 | // identifier: u8, 66 | ) -> Result<()> { 67 | return deposit_token::deposit_token ( 68 | ctx, 69 | amount, 70 | // identifier 71 | ); 72 | } 73 | 74 | pub fn start_presale( 75 | ctx: Context, 76 | start_time: u64, 77 | end_time: u64 78 | ) -> Result<()> { 79 | return start_presale::start_presale ( 80 | ctx, 81 | start_time, 82 | end_time 83 | ); 84 | } 85 | 86 | pub fn buy_token( 87 | ctx: Context, 88 | token_amount: u64, 89 | quote_amount: u64, 90 | ) -> Result<()> { 91 | return buy_token::buy_token ( 92 | ctx, 93 | token_amount, 94 | quote_amount, 95 | ); 96 | } 97 | 98 | pub fn claim_token( 99 | ctx: Context, 100 | bump: u8 101 | ) -> Result<()> { 102 | return claim_token::claim_token ( 103 | ctx, bump 104 | ); 105 | } 106 | 107 | pub fn withdraw_sol( 108 | ctx: Context, 109 | amount: u64, 110 | bump: u8 111 | ) -> Result<()> { 112 | return withdraw_sol::withdraw_sol ( 113 | ctx, 114 | amount, 115 | bump 116 | ); 117 | } 118 | 119 | pub fn withdraw_token( 120 | ctx: Context, 121 | amount: u64, 122 | bump: u8 123 | ) -> Result<()> { 124 | return withdraw_token::withdraw_token ( 125 | ctx, amount, bump 126 | ); 127 | } 128 | } 129 | 130 | #[derive(Accounts)] 131 | pub struct Initialize {} 132 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | pub mod constants; 4 | pub mod errors; 5 | pub mod instructions; 6 | pub mod state; 7 | 8 | use instructions::*; 9 | 10 | declare_id!("H6qBMcWs42iZu99FPT2vwhKu1AsdRQzL5JwUs3QvQhGy"); 11 | 12 | #[program] 13 | pub mod palm_presale { 14 | use super::*; 15 | 16 | pub fn create_presale( 17 | ctx: Context, 18 | token_mint_address: Pubkey, 19 | // quote_token_mint_address: Pubkey, 20 | softcap_amount: u64, 21 | hardcap_amount: u64, 22 | max_token_amount_per_address: u64, 23 | price_per_token: u64, 24 | start_time: u64, 25 | end_time: u64, 26 | // identifier: u8 27 | ) -> Result<()> { 28 | return create_presale::create_presale( 29 | ctx, 30 | token_mint_address, 31 | // quote_token_mint_address, 32 | softcap_amount, 33 | hardcap_amount, 34 | max_token_amount_per_address, 35 | price_per_token, 36 | start_time, 37 | end_time, 38 | // identifier, 39 | ); 40 | } 41 | 42 | pub fn update_presale( 43 | ctx: Context, 44 | max_token_amount_per_address: u64, 45 | price_per_token: u64, 46 | softcap_amount: u64, 47 | hardcap_amount: u64, 48 | start_time: u64, 49 | end_time: u64, 50 | ) -> Result<()> { 51 | return update_presale::update_presale ( 52 | ctx, 53 | max_token_amount_per_address, 54 | price_per_token, 55 | softcap_amount, 56 | hardcap_amount, 57 | start_time, 58 | end_time, 59 | ); 60 | } 61 | 62 | pub fn deposit_token( 63 | ctx: Context, 64 | amount: u64, 65 | // identifier: u8, 66 | ) -> Result<()> { 67 | return deposit_token::deposit_token ( 68 | ctx, 69 | amount, 70 | // identifier 71 | ); 72 | } 73 | 74 | pub fn start_presale( 75 | ctx: Context, 76 | start_time: u64, 77 | end_time: u64 78 | ) -> Result<()> { 79 | return start_presale::start_presale ( 80 | ctx, 81 | start_time, 82 | end_time 83 | ); 84 | } 85 | 86 | pub fn buy_token( 87 | ctx: Context, 88 | token_amount: u64, 89 | quote_amount: u64, 90 | ) -> Result<()> { 91 | return buy_token::buy_token ( 92 | ctx, 93 | token_amount, 94 | quote_amount, 95 | ); 96 | } 97 | 98 | pub fn claim_token( 99 | ctx: Context, 100 | bump: u8 101 | ) -> Result<()> { 102 | return claim_token::claim_token ( 103 | ctx, bump 104 | ); 105 | } 106 | 107 | pub fn withdraw_sol( 108 | ctx: Context, 109 | amount: u64, 110 | bump: u8 111 | ) -> Result<()> { 112 | return withdraw_sol::withdraw_sol ( 113 | ctx, 114 | amount, 115 | bump 116 | ); 117 | } 118 | 119 | pub fn withdraw_token( 120 | ctx: Context, 121 | amount: u64, 122 | bump: u8 123 | ) -> Result<()> { 124 | return withdraw_token::withdraw_token ( 125 | ctx, amount, bump 126 | ); 127 | } 128 | } 129 | 130 | #[derive(Accounts)] 131 | pub struct Initialize {} 132 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/claim_token.rs: -------------------------------------------------------------------------------- 1 | use { 2 | anchor_lang::prelude::*, 3 | anchor_spl::{ 4 | token, 5 | associated_token, 6 | }, 7 | }; 8 | 9 | use crate::errors::PresaleError; 10 | use crate::state::{PresaleInfo, UserInfo}; 11 | use crate::constants::{PRESALE_SEED, USER_SEED}; 12 | 13 | pub fn claim_token( 14 | ctx: Context, 15 | bump: u8 16 | ) -> Result<()> { 17 | 18 | let presale_info = &mut ctx.accounts.presale_info; 19 | 20 | let cur_timestamp = u64::try_from(Clock::get()?.unix_timestamp).unwrap(); 21 | 22 | // get time and compare with start and end time 23 | if presale_info.end_time > cur_timestamp * 1000 { 24 | msg!("current time: {}", cur_timestamp); 25 | msg!("presale end time: {}", presale_info.end_time); 26 | msg!("Presale not ended yet."); 27 | return Err(PresaleError::PresaleNotEnded.into()); 28 | } 29 | 30 | let user_info = &mut ctx.accounts.user_info; 31 | let claim_amount = user_info.buy_token_amount; 32 | 33 | msg!("Transferring presale tokens to buyer {}...", &ctx.accounts.buyer.key()); 34 | msg!("Mint: {}", &ctx.accounts.presale_token_mint_account.to_account_info().key()); 35 | msg!("From Token Address: {}", &ctx.accounts.presale_presale_token_associated_token_account.key()); 36 | msg!("To Token Address: {}", &ctx.accounts.buyer_presale_token_associated_token_account.key()); 37 | token::transfer( 38 | CpiContext::new_with_signer( 39 | ctx.accounts.token_program.to_account_info(), 40 | token::Transfer { 41 | from: ctx.accounts.presale_presale_token_associated_token_account.to_account_info(), 42 | to: ctx.accounts.buyer_presale_token_associated_token_account.to_account_info(), 43 | authority: ctx.accounts.presale_info.to_account_info(), 44 | }, 45 | &[&[PRESALE_SEED, &[bump]][..]], 46 | ), 47 | claim_amount, 48 | )?; 49 | 50 | user_info.buy_token_amount = 0; 51 | user_info.claim_time = cur_timestamp; 52 | msg!("All claimed presale tokens transferred successfully."); 53 | 54 | Ok(()) 55 | } 56 | 57 | #[derive(Accounts)] 58 | pub struct ClaimToken<'info> { 59 | // Presale token accounts 60 | #[account(mut)] 61 | pub presale_token_mint_account: Box>, 62 | 63 | #[account( 64 | init_if_needed, 65 | payer = buyer, 66 | associated_token::mint = presale_token_mint_account, 67 | associated_token::authority = buyer, 68 | )] 69 | pub buyer_presale_token_associated_token_account: Box>, 70 | 71 | #[account( 72 | mut, 73 | associated_token::mint = presale_token_mint_account, 74 | associated_token::authority = presale_info, 75 | )] 76 | pub presale_presale_token_associated_token_account: Box>, 77 | 78 | #[account( 79 | mut, 80 | seeds = [USER_SEED], 81 | bump 82 | )] 83 | pub user_info: Box>, 84 | 85 | #[account( 86 | mut, 87 | seeds = [PRESALE_SEED], 88 | bump 89 | )] 90 | pub presale_info: Box>, 91 | 92 | pub presale_authority: SystemAccount<'info>, 93 | 94 | #[account(mut)] 95 | pub buyer: Signer<'info>, 96 | 97 | pub rent: Sysvar<'info, Rent>, 98 | pub system_program: Program<'info, System>, 99 | pub token_program: Program<'info, token::Token>, 100 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 101 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/claim_token.rs: -------------------------------------------------------------------------------- 1 | use { 2 | anchor_lang::prelude::*, 3 | anchor_spl::{ 4 | token, 5 | associated_token, 6 | }, 7 | }; 8 | 9 | use crate::errors::PresaleError; 10 | use crate::state::{PresaleInfo, UserInfo}; 11 | use crate::constants::{PRESALE_SEED, USER_SEED}; 12 | 13 | pub fn claim_token( 14 | ctx: Context, 15 | bump: u8 16 | ) -> Result<()> { 17 | 18 | let presale_info = &mut ctx.accounts.presale_info; 19 | 20 | let cur_timestamp = u64::try_from(Clock::get()?.unix_timestamp).unwrap(); 21 | 22 | // get time and compare with start and end time 23 | if presale_info.end_time > cur_timestamp * 1000 { 24 | msg!("current time: {}", cur_timestamp); 25 | msg!("presale end time: {}", presale_info.end_time); 26 | msg!("Presale not ended yet."); 27 | return Err(PresaleError::PresaleNotEnded.into()); 28 | } 29 | 30 | let user_info = &mut ctx.accounts.user_info; 31 | let claim_amount = user_info.buy_token_amount; 32 | 33 | msg!("Transferring presale tokens to buyer {}...", &ctx.accounts.buyer.key()); 34 | msg!("Mint: {}", &ctx.accounts.presale_token_mint_account.to_account_info().key()); 35 | msg!("From Token Address: {}", &ctx.accounts.presale_presale_token_associated_token_account.key()); 36 | msg!("To Token Address: {}", &ctx.accounts.buyer_presale_token_associated_token_account.key()); 37 | token::transfer( 38 | CpiContext::new_with_signer( 39 | ctx.accounts.token_program.to_account_info(), 40 | token::Transfer { 41 | from: ctx.accounts.presale_presale_token_associated_token_account.to_account_info(), 42 | to: ctx.accounts.buyer_presale_token_associated_token_account.to_account_info(), 43 | authority: ctx.accounts.presale_info.to_account_info(), 44 | }, 45 | &[&[PRESALE_SEED, &[bump]][..]], 46 | ), 47 | claim_amount, 48 | )?; 49 | 50 | user_info.buy_token_amount = 0; 51 | user_info.claim_time = cur_timestamp; 52 | msg!("All claimed presale tokens transferred successfully."); 53 | 54 | Ok(()) 55 | } 56 | 57 | #[derive(Accounts)] 58 | pub struct ClaimToken<'info> { 59 | // Presale token accounts 60 | #[account(mut)] 61 | pub presale_token_mint_account: Box>, 62 | 63 | #[account( 64 | init_if_needed, 65 | payer = buyer, 66 | associated_token::mint = presale_token_mint_account, 67 | associated_token::authority = buyer, 68 | )] 69 | pub buyer_presale_token_associated_token_account: Box>, 70 | 71 | #[account( 72 | mut, 73 | associated_token::mint = presale_token_mint_account, 74 | associated_token::authority = presale_info, 75 | )] 76 | pub presale_presale_token_associated_token_account: Box>, 77 | 78 | #[account( 79 | mut, 80 | seeds = [USER_SEED], 81 | bump 82 | )] 83 | pub user_info: Box>, 84 | 85 | #[account( 86 | mut, 87 | seeds = [PRESALE_SEED], 88 | bump 89 | )] 90 | pub presale_info: Box>, 91 | 92 | pub presale_authority: SystemAccount<'info>, 93 | 94 | #[account(mut)] 95 | pub buyer: Signer<'info>, 96 | 97 | pub rent: Sysvar<'info, Rent>, 98 | pub system_program: Program<'info, System>, 99 | pub token_program: Program<'info, token::Token>, 100 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 101 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/deposit_token.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::system_program; 2 | // use solana_program::program::invoke; 3 | 4 | use { 5 | anchor_lang::prelude::*, 6 | anchor_spl::{associated_token, token}, 7 | }; 8 | 9 | // use solana_program::rent::Rent; 10 | 11 | use crate::constants::{PRESALE_SEED, PRESALE_VAULT, RENT_MINIMUM}; 12 | use crate::state::PresaleInfo; 13 | 14 | pub fn deposit_token(ctx: Context, amount: u64) -> Result<()> { 15 | let presale_info = &mut ctx.accounts.presale_info; 16 | 17 | // transfer token to the presaleAta 18 | msg!( 19 | "Mint: {}", 20 | &ctx.accounts.mint_account.to_account_info().key() 21 | ); 22 | msg!( 23 | "From Token Address: {}", 24 | &ctx.accounts.from_associated_token_account.key() 25 | ); 26 | msg!( 27 | "To Token Address: {}", 28 | &ctx.accounts.to_associated_token_account.key() 29 | ); 30 | token::transfer( 31 | CpiContext::new( 32 | ctx.accounts.token_program.to_account_info(), 33 | token::Transfer { 34 | from: ctx.accounts.from_associated_token_account.to_account_info(), 35 | to: ctx.accounts.to_associated_token_account.to_account_info(), 36 | authority: ctx.accounts.from_authority.to_account_info(), 37 | }, 38 | ), 39 | amount, 40 | )?; 41 | 42 | // transfer Sol to the presaleVault 43 | msg!( 44 | "From Wallet Address: {}", 45 | &ctx.accounts.from_associated_token_account.key() 46 | ); 47 | msg!( 48 | "To Wallet Address: {}", 49 | &ctx.accounts.to_associated_token_account.key() 50 | ); 51 | system_program::transfer( 52 | CpiContext::new( 53 | ctx.accounts.system_program.to_account_info(), 54 | system_program::Transfer { 55 | from: ctx.accounts.admin.to_account_info(), 56 | to: ctx.accounts.presale_vault.to_account_info(), 57 | }, 58 | ), 59 | RENT_MINIMUM, 60 | )?; 61 | 62 | presale_info.deposit_token_amount = presale_info.deposit_token_amount + amount; 63 | 64 | msg!("Tokens deposited successfully."); 65 | 66 | Ok(()) 67 | } 68 | 69 | #[derive(Accounts)] 70 | pub struct DepositToken<'info> { 71 | #[account(mut)] 72 | pub mint_account: Account<'info, token::Mint>, 73 | 74 | #[account( 75 | mut, 76 | associated_token::mint = mint_account, 77 | associated_token::authority = from_authority, 78 | )] 79 | pub from_associated_token_account: Account<'info, token::TokenAccount>, 80 | 81 | #[account(constraint = admin.key() == from_authority.key())] 82 | pub from_authority: Signer<'info>, 83 | 84 | #[account( 85 | init, 86 | payer = admin, 87 | associated_token::mint = mint_account, 88 | associated_token::authority = presale_info, 89 | )] 90 | pub to_associated_token_account: Account<'info, token::TokenAccount>, 91 | 92 | /// CHECK: This is not dangerous 93 | #[account( 94 | mut, 95 | // init, 96 | // payer = payer, 97 | seeds = [PRESALE_VAULT], 98 | bump, 99 | // space = 0 100 | )] 101 | pub presale_vault: AccountInfo<'info>, 102 | 103 | #[account( 104 | mut, 105 | seeds = [PRESALE_SEED], 106 | bump 107 | )] 108 | pub presale_info: Box>, 109 | 110 | // #[account(mut)] 111 | // pub payer: AccountInfo<'info>, 112 | 113 | /// CHECK: 114 | #[account(mut)] 115 | pub admin: AccountInfo<'info>, 116 | 117 | pub rent: Sysvar<'info, Rent>, 118 | pub system_program: Program<'info, System>, 119 | pub token_program: Program<'info, token::Token>, 120 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 121 | } 122 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/deposit_token.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::system_program; 2 | // use solana_program::program::invoke; 3 | 4 | use { 5 | anchor_lang::prelude::*, 6 | anchor_spl::{associated_token, token}, 7 | }; 8 | 9 | // use solana_program::rent::Rent; 10 | 11 | use crate::constants::{PRESALE_SEED, PRESALE_VAULT, RENT_MINIMUM}; 12 | use crate::state::PresaleInfo; 13 | 14 | pub fn deposit_token(ctx: Context, amount: u64) -> Result<()> { 15 | let presale_info = &mut ctx.accounts.presale_info; 16 | 17 | // transfer token to the presaleAta 18 | msg!( 19 | "Mint: {}", 20 | &ctx.accounts.mint_account.to_account_info().key() 21 | ); 22 | msg!( 23 | "From Token Address: {}", 24 | &ctx.accounts.from_associated_token_account.key() 25 | ); 26 | msg!( 27 | "To Token Address: {}", 28 | &ctx.accounts.to_associated_token_account.key() 29 | ); 30 | token::transfer( 31 | CpiContext::new( 32 | ctx.accounts.token_program.to_account_info(), 33 | token::Transfer { 34 | from: ctx.accounts.from_associated_token_account.to_account_info(), 35 | to: ctx.accounts.to_associated_token_account.to_account_info(), 36 | authority: ctx.accounts.from_authority.to_account_info(), 37 | }, 38 | ), 39 | amount, 40 | )?; 41 | 42 | // transfer Sol to the presaleVault 43 | msg!( 44 | "From Wallet Address: {}", 45 | &ctx.accounts.from_associated_token_account.key() 46 | ); 47 | msg!( 48 | "To Wallet Address: {}", 49 | &ctx.accounts.to_associated_token_account.key() 50 | ); 51 | system_program::transfer( 52 | CpiContext::new( 53 | ctx.accounts.system_program.to_account_info(), 54 | system_program::Transfer { 55 | from: ctx.accounts.admin.to_account_info(), 56 | to: ctx.accounts.presale_vault.to_account_info(), 57 | }, 58 | ), 59 | RENT_MINIMUM, 60 | )?; 61 | 62 | presale_info.deposit_token_amount = presale_info.deposit_token_amount + amount; 63 | 64 | msg!("Tokens deposited successfully."); 65 | 66 | Ok(()) 67 | } 68 | 69 | #[derive(Accounts)] 70 | pub struct DepositToken<'info> { 71 | #[account(mut)] 72 | pub mint_account: Account<'info, token::Mint>, 73 | 74 | #[account( 75 | mut, 76 | associated_token::mint = mint_account, 77 | associated_token::authority = from_authority, 78 | )] 79 | pub from_associated_token_account: Account<'info, token::TokenAccount>, 80 | 81 | #[account(constraint = admin.key() == from_authority.key())] 82 | pub from_authority: Signer<'info>, 83 | 84 | #[account( 85 | init, 86 | payer = admin, 87 | associated_token::mint = mint_account, 88 | associated_token::authority = presale_info, 89 | )] 90 | pub to_associated_token_account: Account<'info, token::TokenAccount>, 91 | 92 | /// CHECK: This is not dangerous 93 | #[account( 94 | mut, 95 | // init, 96 | // payer = payer, 97 | seeds = [PRESALE_VAULT], 98 | bump, 99 | // space = 0 100 | )] 101 | pub presale_vault: AccountInfo<'info>, 102 | 103 | #[account( 104 | mut, 105 | seeds = [PRESALE_SEED], 106 | bump 107 | )] 108 | pub presale_info: Box>, 109 | 110 | // #[account(mut)] 111 | // pub payer: AccountInfo<'info>, 112 | 113 | /// CHECK: 114 | #[account(mut)] 115 | pub admin: AccountInfo<'info>, 116 | 117 | pub rent: Sysvar<'info, Rent>, 118 | pub system_program: Program<'info, System>, 119 | pub token_program: Program<'info, token::Token>, 120 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 121 | } 122 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/palm-presale/src/instructions/buy_token.rs: -------------------------------------------------------------------------------- 1 | use { 2 | anchor_lang::{prelude::*, system_program}, 3 | anchor_spl::{ 4 | token, 5 | associated_token, 6 | }, 7 | }; 8 | 9 | use solana_program::clock::Clock; 10 | 11 | use crate::constants::PRESALE_VAULT; 12 | use crate::state::PresaleInfo; 13 | use crate::state::UserInfo; 14 | use crate::constants::{PRESALE_SEED, USER_SEED}; 15 | use crate::errors::PresaleError; 16 | 17 | pub fn buy_token( 18 | ctx: Context, 19 | quote_amount: u64, 20 | token_amount: u64, 21 | ) -> Result<()> { 22 | 23 | let presale_info = &mut ctx.accounts.presale_info; 24 | let user_info = &mut ctx.accounts.user_info; 25 | let presale_vault = &mut ctx.accounts.presale_vault; 26 | let cur_timestamp = u64::try_from(Clock::get()?.unix_timestamp).unwrap(); 27 | 28 | // get time and compare with start and end time 29 | if presale_info.start_time > cur_timestamp * 1000 { 30 | msg!("current time: {}", cur_timestamp); 31 | msg!("start time: {}", presale_info.start_time); 32 | return Err(PresaleError::PresaleNotStarted.into()); 33 | } 34 | 35 | if presale_info.end_time < cur_timestamp * 1000 { 36 | msg!("start time: {}", presale_info.start_time); 37 | msg!("end time: {}", presale_info.end_time); 38 | msg!("current time: {}", cur_timestamp); 39 | return Err(PresaleError::PresaleEnded.into()); 40 | } 41 | 42 | // compare the rest with the token_amount 43 | if token_amount > presale_info.deposit_token_amount - presale_info.sold_token_amount { 44 | msg!("token amount: {}", token_amount); 45 | msg!("rest token amount in presale: {}", presale_info.deposit_token_amount - presale_info.sold_token_amount); 46 | return Err(PresaleError::InsufficientFund.into()) 47 | } 48 | 49 | // limit the token_amount per address 50 | if presale_info.max_token_amount_per_address < (user_info.buy_token_amount + token_amount) { 51 | msg!("max token amount per address: {}", presale_info.max_token_amount_per_address); 52 | msg!("token amount to buy: {}", user_info.buy_token_amount + token_amount); 53 | return Err(PresaleError::InsufficientFund.into()) 54 | } 55 | 56 | // limit the presale to hardcap 57 | if presale_info.is_hard_capped == true { 58 | return Err(PresaleError::HardCapped.into()) 59 | } 60 | 61 | // send SOL to contract and update the user info 62 | user_info.buy_time = cur_timestamp; 63 | user_info.buy_quote_amount = user_info.buy_quote_amount + quote_amount; 64 | user_info.buy_token_amount = user_info.buy_token_amount + token_amount; 65 | 66 | presale_info.sold_token_amount = presale_info.sold_token_amount + token_amount; 67 | 68 | system_program::transfer( 69 | CpiContext::new( 70 | ctx.accounts.system_program.to_account_info(), 71 | system_program::Transfer { 72 | from: ctx.accounts.buyer.to_account_info(), 73 | to: presale_vault.to_account_info(), 74 | } 75 | ), 76 | quote_amount 77 | )?; 78 | 79 | msg!("Presale tokens transferred successfully."); 80 | 81 | // show softcap status 82 | if presale_vault.get_lamports() > presale_info.softcap_amount { 83 | presale_info.is_soft_capped = true; 84 | msg!("Presale is softcapped"); 85 | } 86 | 87 | // show hardcap status 88 | if presale_vault.get_lamports() > presale_info.hardcap_amount { 89 | presale_info.is_hard_capped = true; 90 | msg!("Presale is hardcapped"); 91 | } 92 | 93 | Ok(()) 94 | } 95 | 96 | #[derive(Accounts)] 97 | pub struct BuyToken<'info> { 98 | #[account( 99 | mut, 100 | seeds = [PRESALE_SEED], 101 | bump 102 | )] 103 | pub presale_info: Box>, 104 | 105 | /// CHECK: This is not dangerous 106 | pub presale_authority: AccountInfo<'info>, 107 | 108 | #[account( 109 | init_if_needed, 110 | payer = buyer, 111 | space = 8 + std::mem::size_of::(), 112 | seeds = [USER_SEED], 113 | bump 114 | )] 115 | pub user_info: Box>, 116 | 117 | /// CHECK: This is not dangerous 118 | #[account( 119 | mut, 120 | seeds = [PRESALE_VAULT], 121 | bump 122 | )] 123 | pub presale_vault: AccountInfo<'info>, 124 | 125 | #[account(mut)] 126 | pub buyer: Signer<'info>, 127 | 128 | pub rent: Sysvar<'info, Rent>, 129 | pub system_program: Program<'info, System>, 130 | pub token_program: Program<'info, token::Token>, 131 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 132 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/programs/palm-presale/src/instructions/buy_token.rs: -------------------------------------------------------------------------------- 1 | use { 2 | anchor_lang::{prelude::*, system_program}, 3 | anchor_spl::{ 4 | token, 5 | associated_token, 6 | }, 7 | }; 8 | 9 | use solana_program::clock::Clock; 10 | 11 | use crate::constants::PRESALE_VAULT; 12 | use crate::state::PresaleInfo; 13 | use crate::state::UserInfo; 14 | use crate::constants::{PRESALE_SEED, USER_SEED}; 15 | use crate::errors::PresaleError; 16 | 17 | pub fn buy_token( 18 | ctx: Context, 19 | quote_amount: u64, 20 | token_amount: u64, 21 | ) -> Result<()> { 22 | 23 | let presale_info = &mut ctx.accounts.presale_info; 24 | let user_info = &mut ctx.accounts.user_info; 25 | let presale_vault = &mut ctx.accounts.presale_vault; 26 | let cur_timestamp = u64::try_from(Clock::get()?.unix_timestamp).unwrap(); 27 | 28 | // get time and compare with start and end time 29 | if presale_info.start_time > cur_timestamp * 1000 { 30 | msg!("current time: {}", cur_timestamp); 31 | msg!("start time: {}", presale_info.start_time); 32 | return Err(PresaleError::PresaleNotStarted.into()); 33 | } 34 | 35 | if presale_info.end_time < cur_timestamp * 1000 { 36 | msg!("start time: {}", presale_info.start_time); 37 | msg!("end time: {}", presale_info.end_time); 38 | msg!("current time: {}", cur_timestamp); 39 | return Err(PresaleError::PresaleEnded.into()); 40 | } 41 | 42 | // compare the rest with the token_amount 43 | if token_amount > presale_info.deposit_token_amount - presale_info.sold_token_amount { 44 | msg!("token amount: {}", token_amount); 45 | msg!("rest token amount in presale: {}", presale_info.deposit_token_amount - presale_info.sold_token_amount); 46 | return Err(PresaleError::InsufficientFund.into()) 47 | } 48 | 49 | // limit the token_amount per address 50 | if presale_info.max_token_amount_per_address < (user_info.buy_token_amount + token_amount) { 51 | msg!("max token amount per address: {}", presale_info.max_token_amount_per_address); 52 | msg!("token amount to buy: {}", user_info.buy_token_amount + token_amount); 53 | return Err(PresaleError::InsufficientFund.into()) 54 | } 55 | 56 | // limit the presale to hardcap 57 | if presale_info.is_hard_capped == true { 58 | return Err(PresaleError::HardCapped.into()) 59 | } 60 | 61 | // send SOL to contract and update the user info 62 | user_info.buy_time = cur_timestamp; 63 | user_info.buy_quote_amount = user_info.buy_quote_amount + quote_amount; 64 | user_info.buy_token_amount = user_info.buy_token_amount + token_amount; 65 | 66 | presale_info.sold_token_amount = presale_info.sold_token_amount + token_amount; 67 | 68 | system_program::transfer( 69 | CpiContext::new( 70 | ctx.accounts.system_program.to_account_info(), 71 | system_program::Transfer { 72 | from: ctx.accounts.buyer.to_account_info(), 73 | to: presale_vault.to_account_info(), 74 | } 75 | ), 76 | quote_amount 77 | )?; 78 | 79 | msg!("Presale tokens transferred successfully."); 80 | 81 | // show softcap status 82 | if presale_vault.get_lamports() > presale_info.softcap_amount { 83 | presale_info.is_soft_capped = true; 84 | msg!("Presale is softcapped"); 85 | } 86 | 87 | // show hardcap status 88 | if presale_vault.get_lamports() > presale_info.hardcap_amount { 89 | presale_info.is_hard_capped = true; 90 | msg!("Presale is hardcapped"); 91 | } 92 | 93 | Ok(()) 94 | } 95 | 96 | #[derive(Accounts)] 97 | pub struct BuyToken<'info> { 98 | #[account( 99 | mut, 100 | seeds = [PRESALE_SEED], 101 | bump 102 | )] 103 | pub presale_info: Box>, 104 | 105 | /// CHECK: This is not dangerous 106 | pub presale_authority: AccountInfo<'info>, 107 | 108 | #[account( 109 | init_if_needed, 110 | payer = buyer, 111 | space = 8 + std::mem::size_of::(), 112 | seeds = [USER_SEED], 113 | bump 114 | )] 115 | pub user_info: Box>, 116 | 117 | /// CHECK: This is not dangerous 118 | #[account( 119 | mut, 120 | seeds = [PRESALE_VAULT], 121 | bump 122 | )] 123 | pub presale_vault: AccountInfo<'info>, 124 | 125 | #[account(mut)] 126 | pub buyer: Signer<'info>, 127 | 128 | pub rent: Sysvar<'info, Rent>, 129 | pub system_program: Program<'info, System>, 130 | pub token_program: Program<'info, token::Token>, 131 | pub associated_token_program: Program<'info, associated_token::AssociatedToken>, 132 | } -------------------------------------------------------------------------------- /Palm-presale-project(contract)/tests/palm-presale.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@coral-xyz/anchor"; 2 | import { Program, web3 } from "@coral-xyz/anchor"; 3 | import { PalmPresale } from "../target/types/palm_presale"; 4 | import { 5 | PublicKey, 6 | Connection, 7 | Keypair, 8 | LAMPORTS_PER_SOL, 9 | sendAndConfirmTransaction, 10 | SystemProgram, 11 | SYSVAR_RENT_PUBKEY, 12 | } from "@solana/web3.js"; 13 | // import { ASSOCIATED_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token"; 14 | import { BN } from "bn.js"; 15 | import { 16 | TOKEN_PROGRAM_ID, 17 | createMint, 18 | getAssociatedTokenAddress, 19 | getOrCreateAssociatedTokenAccount, 20 | mintTo, 21 | } from "@solana/spl-token"; 22 | import { ASSOCIATED_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token"; 23 | 24 | // import Uint8 array from admin.json 25 | import adminSecretArray from "./wallets/admin.json"; 26 | 27 | // setting the sleeping time function 28 | export function sleep(ms: number) { 29 | return new Promise(resolve => setTimeout(resolve, ms)); 30 | } 31 | 32 | describe("palm-presale", () => { 33 | 34 | // Configure the client to use the devnet cluster. 35 | anchor.setProvider(anchor.AnchorProvider.env()); 36 | const connection = new Connection("https://denny-wuerxw-fast-devnet.helius-rpc.com/", "confirmed"); 37 | const program = anchor.workspace.PalmPresale as Program; 38 | const PROGRAM_ID = program.programId; 39 | 40 | // Configure the constants 41 | const PRESALE_SEED = "PRESALE_SEED"; 42 | const USER_SEED = "USER_SEED"; 43 | const PRESALE_VAULT = "PRESALE_VAULT"; 44 | 45 | // set admin 46 | console.log(adminSecretArray); 47 | const admin = Keypair.fromSecretKey(Uint8Array.from(adminSecretArray)); 48 | console.log("adminSecretArray displayed.\n"); 49 | const adminPubkey = admin.publicKey; 50 | 51 | // set token buyer 52 | const buyerWallet = anchor.AnchorProvider.env().wallet; 53 | const buyer = anchor.AnchorProvider.env().wallet as anchor.Wallet; 54 | const buyerPubkey = buyerWallet.publicKey; 55 | 56 | // set tokenMint 57 | let mint: PublicKey; 58 | let adminAta: PublicKey; 59 | const tokenDecimal = 9; 60 | const amount = new BN(1000000000).mul(new BN(10 ** tokenDecimal)); 61 | 62 | // presale setting 63 | const softCapAmount = new BN(300000); 64 | const hardCapAmount = new BN(500000); 65 | const maxTokenAmountPerAddress = new BN(1000); 66 | const pricePerToken = new BN(100); 67 | // const startTime = new BN(1717497786561); 68 | let startTime = new BN(Date.now()); 69 | const presaleDuration = new BN(5000); 70 | let endTime = startTime.add(presaleDuration); 71 | 72 | // deposit setting 73 | const presaleAmount = new BN(300000000).mul(new BN(10 ** tokenDecimal)); 74 | 75 | // buyToken setting 76 | const quoteSolAmount = new BN(10000); 77 | 78 | // withdraw sol setting 79 | const withdrawSolAmount = new BN(1); 80 | 81 | // withdraw token setting 82 | const withdrawTokenAmount = new BN(1); 83 | 84 | // address of userinfo PDA 85 | const getUserInfoPDA = async () => { 86 | return ( 87 | await PublicKey.findProgramAddressSync( 88 | [Buffer.from(USER_SEED)], 89 | PROGRAM_ID 90 | ) 91 | )[0]; 92 | }; 93 | 94 | // address of presaleinfo PDA 95 | const getPresalePDA = async () => { 96 | return ( 97 | await PublicKey.findProgramAddressSync( 98 | [Buffer.from(PRESALE_SEED)], 99 | PROGRAM_ID 100 | ) 101 | ); 102 | }; 103 | 104 | // address of presalevault PDA 105 | const getVaultPDA = async () => { 106 | return ( 107 | await PublicKey.findProgramAddressSync( 108 | [Buffer.from(PRESALE_VAULT)], 109 | PROGRAM_ID 110 | ) 111 | ); 112 | }; 113 | 114 | // it("Airdrop to user wallet", async () => { 115 | // console.log("Created admin, address is ", admin.publicKey.toBase58()); 116 | // console.log( 117 | // `Requesting airdrop for admin ${admin.publicKey.toBase58()}` 118 | // ); 119 | // // 1 - Request Airdrop 120 | // const signature = await connection.requestAirdrop(admin.publicKey, 10 ** 9); 121 | // // 2 - Fetch the latest blockhash 122 | // const { blockhash, lastValidBlockHeight } = 123 | // await connection.getLatestBlockhash(); 124 | // // 3 - Confirm transaction success 125 | // await connection.confirmTransaction( 126 | // { 127 | // blockhash, 128 | // lastValidBlockHeight, 129 | // signature, 130 | // }, 131 | // "finalized" 132 | // ); 133 | // console.log( 134 | // "user balance : ", 135 | // (await connection.getBalance(admin.publicKey)) / 10 ** 9, 136 | // "SOL" 137 | // ); 138 | // }); 139 | 140 | it("Mint token to admin wallet", async () => { 141 | console.log("Trying to create and mint token to admin's wallet."); 142 | console.log("Here, contract uses this token as LP token"); 143 | console.log( 144 | (await connection.getBalance(adminPubkey)) / LAMPORTS_PER_SOL 145 | ); 146 | 147 | // create mint 148 | try { 149 | mint = await createMint( 150 | connection, 151 | admin, 152 | adminPubkey, 153 | adminPubkey, 154 | tokenDecimal 155 | ); 156 | 157 | console.log("token mint address: " + mint.toBase58()); 158 | adminAta = ( 159 | await getOrCreateAssociatedTokenAccount( 160 | connection, 161 | admin, 162 | mint, 163 | adminPubkey 164 | ) 165 | ).address; 166 | console.log("Admin associated token account address: " + adminAta.toBase58()); 167 | 168 | // minting specific number of new tokens to the adminAta we just created 169 | await mintTo( 170 | connection, 171 | admin, 172 | mint, 173 | adminAta, 174 | adminPubkey, 175 | BigInt(amount.toString()) 176 | ); 177 | 178 | // balance of token in adminAta 179 | const tokenBalance = await connection.getTokenAccountBalance(adminAta); 180 | 181 | console.log("tokenBalance in adminAta: ", tokenBalance.value.uiAmount); 182 | console.log("-----token successfully minted!!!-----"); 183 | } catch (error) { 184 | console.log("-----Token creation error----- \n", error); 185 | } 186 | }); 187 | 188 | // it("Presale account is initialized!", async () => { 189 | 190 | // // fetching accounts for transaction 191 | // const [presalePDA] = await getPresalePDA(); 192 | // console.log(`Presale address: ${presalePDA} is created.`); 193 | // console.log("Balance of admin wallet: ", await connection.getBalance(adminPubkey)); 194 | 195 | // console.log(`--------${program.programId}-------`); 196 | 197 | 198 | // // preparing transaction 199 | // const tx = await program.methods 200 | // .createPresale( 201 | // mint, 202 | // softCapAmount, 203 | // hardCapAmount, 204 | // maxTokenAmountPerAddress, 205 | // pricePerToken, 206 | // startTime, 207 | // endTime 208 | // ) 209 | // .accounts({ 210 | // presaleInfo: presalePDA, 211 | // authority: adminPubkey, 212 | // systemProgram: web3.SystemProgram.programId, 213 | // }) 214 | // .signers([admin]) 215 | // .transaction(); 216 | 217 | // tx.feePayer = admin.publicKey; 218 | // tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 219 | 220 | // console.log("transaction", tx); 221 | 222 | // // transcation confirmation stage 223 | // console.log(await connection.simulateTransaction(tx)) 224 | // const signature = await sendAndConfirmTransaction(connection, tx, [admin]); 225 | // console.log( 226 | // `Transaction succcess: \n https://solscan.io/tx/${signature}?cluster=devnet` 227 | // ); 228 | 229 | // // test result check 230 | // const presaleState = await program.account.presaleInfo.fetch(presalePDA); 231 | // console.log("presale state: ", presaleState); 232 | // // console.log("presale hard cap: ", presaleState.hardcapAmount.toString()); 233 | // }); 234 | 235 | // it("Presale is updated!", async () => { 236 | 237 | // // fetching accounts for transaction 238 | // const [presalePDA] = await getPresalePDA(); 239 | 240 | // // preparing transaction 241 | // const tx = await program.methods 242 | // .updatePresale( 243 | // maxTokenAmountPerAddress, 244 | // pricePerToken, 245 | // softCapAmount, 246 | // hardCapAmount, 247 | // startTime, 248 | // endTime 249 | // ) 250 | // .accounts({ 251 | // presaleInfo: presalePDA, 252 | // authority: adminPubkey, 253 | // systemProgram: web3.SystemProgram.programId, 254 | // }) 255 | // .signers([admin]) 256 | // .transaction(); 257 | 258 | // tx.feePayer = admin.publicKey; 259 | // tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 260 | 261 | // console.log(await connection.simulateTransaction(tx)) 262 | 263 | // const signature = await sendAndConfirmTransaction(connection, tx, [admin]); 264 | // console.log( 265 | // `Transaction succcess: \n https://solscan.io/tx/${signature}?cluster=devnet` 266 | // ); 267 | 268 | // // test result check 269 | // const presaleState = await program.account.presaleInfo.fetch(presalePDA); 270 | // console.log("presale state: ", presaleState); 271 | // console.log("presale soft cap: ", presaleState.softcapAmount.toString()); 272 | // }); 273 | 274 | it("Token is deposited!", async () => { 275 | 276 | // fetching accounts for transaction 277 | const [presalePDA] = await getPresalePDA(); 278 | const [presaleVault] = await getVaultPDA(); 279 | 280 | // get associatedTokenAddress 281 | const toAssociatedTokenAccount = await getAssociatedTokenAddress( 282 | mint, 283 | presalePDA, 284 | true 285 | ); 286 | 287 | // preparing transaction 288 | const tx = await program.methods 289 | .depositToken(presaleAmount) 290 | .accounts({ 291 | mintAccount: mint, 292 | fromAssociatedTokenAccount: adminAta, 293 | fromAuthority: adminPubkey, 294 | toAssociatedTokenAccount: toAssociatedTokenAccount, 295 | presaleVault: presaleVault, 296 | presaleInfo: presalePDA, 297 | admin: adminPubkey, 298 | rent: anchor.web3.SYSVAR_RENT_PUBKEY, 299 | systemProgram: SystemProgram.programId, 300 | tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID, 301 | associatedTokenProgram: ASSOCIATED_PROGRAM_ID, 302 | }) 303 | .signers([admin]) 304 | .transaction(); 305 | 306 | tx.feePayer = admin.publicKey; 307 | tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 308 | 309 | console.log(await connection.simulateTransaction(tx)) 310 | 311 | const signature = await sendAndConfirmTransaction(connection, tx, [admin]); 312 | console.log( 313 | `Transaction succcess: \n https://solscan.io/tx/${signature}?cluster=devnet` 314 | ); 315 | console.log("Token mint address: ", mint.toBase58()); 316 | console.log( 317 | "Token balance of presaleAta: ", 318 | await connection.getTokenAccountBalance(toAssociatedTokenAccount) 319 | ); 320 | console.log( 321 | "Sol balance of presale vault: ", 322 | await connection.getBalance(presaleVault) 323 | ); 324 | }); 325 | 326 | it("Presale start!", async () => { 327 | // fetching accounts for transaction 328 | const [presalePDA] = await getPresalePDA(); 329 | 330 | startTime = new BN(Date.now()); 331 | endTime = startTime.add(presaleDuration); 332 | 333 | // preparing transaction 334 | const tx = await program.methods 335 | .startPresale(startTime, endTime) 336 | .accounts({ 337 | presaleInfo: presalePDA, 338 | authority: adminPubkey, 339 | }) 340 | .signers([admin]) 341 | .transaction(); 342 | 343 | tx.feePayer = admin.publicKey; 344 | tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 345 | 346 | const signature = await sendAndConfirmTransaction(connection, tx, [admin]); 347 | 348 | console.log( 349 | `Transaction success: \n https://solscan.io/tx/${signature}?cluster=devnet` 350 | ); 351 | console.log("Start time: ", new Date(parseInt(startTime.toString())), "----", startTime.toNumber()); 352 | console.log("End time: ", new Date(parseInt(endTime.toString())), "----", endTime.toNumber()); 353 | }); 354 | 355 | // it("Buy token!", async () => { 356 | 357 | // await sleep(1000); 358 | 359 | // const [presalePDA] = await getPresalePDA(); 360 | // const [presaleVault] = await getVaultPDA(); 361 | // const tokenAmount = quoteSolAmount.div(pricePerToken); 362 | 363 | // // get userInfo Address 364 | // const userInfo = await getUserInfoPDA(); 365 | 366 | // // preparing transaction 367 | // const tx = await program.methods 368 | // .buyToken(quoteSolAmount, tokenAmount) 369 | // .accounts({ 370 | // presaleInfo: presalePDA, 371 | // presaleAuthority: adminPubkey, 372 | // userInfo: userInfo, 373 | // presaleVault: presaleVault, 374 | // buyer: buyerPubkey, 375 | // rent: anchor.web3.SYSVAR_RENT_PUBKEY, 376 | // systemProgram: SystemProgram.programId, 377 | // tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID, 378 | // associatedTokenProgram: ASSOCIATED_PROGRAM_ID, 379 | // }) 380 | // .signers([buyer.payer]) 381 | // .transaction(); 382 | 383 | // tx.feePayer = buyerPubkey; 384 | // tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 385 | 386 | // console.log(await connection.simulateTransaction(tx)) 387 | 388 | // const signature = await sendAndConfirmTransaction(connection, tx, [ 389 | // buyer.payer, 390 | // ]); 391 | 392 | // const userState = await program.account.userInfo.fetch(userInfo); 393 | // const vaultBalance = await connection.getBalance(presaleVault); 394 | 395 | // console.log( 396 | // `Transaction success: \n https://solscan.io/tx/${signature}?cluster=devnet` 397 | // ); 398 | // console.log("Presale Vault balance: ", vaultBalance, " address : ", presaleVault); 399 | // console.log("User state: ", userState); 400 | // }); 401 | 402 | it("Claim token!", async () => { 403 | console.log("waiting for some seconds for presale to end") 404 | await sleep(6000) // wait for 50 seconds 405 | const [presalePDA, bump] = await getPresalePDA(); 406 | 407 | // get associatedTokenAddress 408 | const presalePresaleTokenAssociatedTokenAccount = await getAssociatedTokenAddress( 409 | mint, 410 | presalePDA, 411 | true 412 | ); 413 | console.log("presale ATA: ", presalePresaleTokenAssociatedTokenAccount); 414 | console.log("token balance: ", await connection.getTokenAccountBalance(presalePresaleTokenAssociatedTokenAccount)); 415 | 416 | const buyerPresaleTokenAssociatedTokenAccount = await getAssociatedTokenAddress( 417 | mint, 418 | buyerPubkey, 419 | true 420 | ) 421 | console.log("buyer ATA: ", presalePresaleTokenAssociatedTokenAccount); 422 | console.log("token balance: ", await connection.getTokenAccountBalance(presalePresaleTokenAssociatedTokenAccount)); 423 | 424 | const userInfo = await getUserInfoPDA(); 425 | const [presaleInfo] = await getPresalePDA(); 426 | 427 | const tx = await program.methods 428 | .claimToken(bump) 429 | .accounts({ 430 | presaleTokenMintAccount: mint, 431 | buyerPresaleTokenAssociatedTokenAccount: buyerPresaleTokenAssociatedTokenAccount, 432 | presalePresaleTokenAssociatedTokenAccount: presalePresaleTokenAssociatedTokenAccount, 433 | userInfo: userInfo, 434 | presaleInfo: presaleInfo, 435 | presaleAuthority: adminPubkey, 436 | buyer: buyerPubkey, 437 | rent: anchor.web3.SYSVAR_RENT_PUBKEY, 438 | systemProgram: web3.SystemProgram.programId, 439 | }) 440 | .signers([buyer.payer]) 441 | .transaction(); 442 | 443 | tx.feePayer = buyerPubkey; 444 | tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 445 | 446 | console.log(await connection.simulateTransaction(tx)) 447 | 448 | const signature = await sendAndConfirmTransaction(connection, tx, [buyer.payer as Keypair]); 449 | 450 | const presaleTokenBalance = await connection.getTokenAccountBalance(presalePresaleTokenAssociatedTokenAccount); 451 | const buyerTokenBalance = await connection.getTokenAccountBalance(buyerPresaleTokenAssociatedTokenAccount); 452 | 453 | console.log(`Transaction success: \n https://solscan.io/tx/${signature}?cluster=devnet`); 454 | 455 | console.log("The balance of the token of the presale: ", presaleTokenBalance); 456 | console.log("The balance of the token of the user: ", buyerTokenBalance); 457 | }) 458 | 459 | it("Withdraw token!", async () => { 460 | 461 | const [presalePDA, bump] = await getPresalePDA(); 462 | 463 | const presaleAssociatedTokenAccount = await getAssociatedTokenAddress( 464 | mint, 465 | presalePDA, 466 | true 467 | ); 468 | 469 | const tx = await program.methods 470 | .withdrawToken(withdrawTokenAmount, bump) 471 | .accounts({ 472 | mintAccount: mint, 473 | adminAssociatedTokenAccount: adminAta, 474 | presaleAssociatedTokenAccount: presaleAssociatedTokenAccount, 475 | presaleTokenMintAccount: mint, 476 | presaleInfo: presalePDA, 477 | // presaleAuthority: adminPubkey, 478 | adminAuthority: adminPubkey, 479 | rent: SYSVAR_RENT_PUBKEY, 480 | systemProgram: web3.SystemProgram.programId, 481 | tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID, 482 | associatedTokenProgram: ASSOCIATED_PROGRAM_ID, 483 | }) 484 | .signers([admin]) 485 | .transaction(); 486 | 487 | tx.feePayer = adminPubkey; 488 | tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 489 | 490 | const signature = await sendAndConfirmTransaction(connection, tx, [admin as Keypair]); 491 | 492 | const presaleTokenBalance = await connection.getTokenAccountBalance(presaleAssociatedTokenAccount); 493 | const adminTokenBalance = await connection.getTokenAccountBalance(adminAta); 494 | 495 | console.log("The token balance of the presale vault: ", presaleTokenBalance); 496 | console.log("The token balance of the admin: ", adminTokenBalance); 497 | }) 498 | 499 | it("Withdraw sol!", async () => { 500 | const [presalePDA] = await getPresalePDA(); 501 | const [presaleVault, bump] = await getVaultPDA(); 502 | 503 | const tx = await program.methods 504 | .withdrawSol(withdrawSolAmount, bump) 505 | .accounts({ 506 | presaleInfo: presalePDA, 507 | presaleVault: presaleVault, 508 | admin: adminPubkey, 509 | systemProgram: web3.SystemProgram.programId, 510 | }) 511 | .signers([admin]) 512 | .transaction(); 513 | 514 | tx.feePayer = admin.publicKey; 515 | tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash; 516 | 517 | console.log(await connection.simulateTransaction(tx)); 518 | 519 | // console.log(JSON.stringify(tx)); 520 | const signature = await sendAndConfirmTransaction(connection, tx, [admin]); 521 | 522 | console.log(`Transaction success: \n https://solscan.io/tx/${signature}?cluster=devnet`); 523 | 524 | const vaultBalance = await connection.getBalance(presaleVault); 525 | const adminBalance = await connection.getBalance(admin.publicKey); 526 | 527 | console.log("The balance of the presale vault: ", vaultBalance); 528 | console.log("The balance of the admin: ", adminBalance); 529 | }) 530 | }); 531 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.24.5": 6 | version "7.24.6" 7 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz" 8 | integrity sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw== 9 | dependencies: 10 | regenerator-runtime "^0.14.0" 11 | 12 | "@coral-xyz/anchor@^0.29.0": 13 | version "0.29.0" 14 | resolved "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.29.0.tgz" 15 | integrity sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA== 16 | dependencies: 17 | "@coral-xyz/borsh" "^0.29.0" 18 | "@noble/hashes" "^1.3.1" 19 | "@solana/web3.js" "^1.68.0" 20 | bn.js "^5.1.2" 21 | bs58 "^4.0.1" 22 | buffer-layout "^1.2.2" 23 | camelcase "^6.3.0" 24 | cross-fetch "^3.1.5" 25 | crypto-hash "^1.3.0" 26 | eventemitter3 "^4.0.7" 27 | pako "^2.0.3" 28 | snake-case "^3.0.4" 29 | superstruct "^0.15.4" 30 | toml "^3.0.0" 31 | 32 | "@coral-xyz/borsh@^0.29.0": 33 | version "0.29.0" 34 | resolved "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.29.0.tgz" 35 | integrity sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ== 36 | dependencies: 37 | bn.js "^5.1.2" 38 | buffer-layout "^1.2.0" 39 | 40 | "@noble/curves@^1.4.0": 41 | version "1.4.0" 42 | resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.0.tgz" 43 | integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== 44 | dependencies: 45 | "@noble/hashes" "1.4.0" 46 | 47 | "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0", "@noble/hashes@1.4.0": 48 | version "1.4.0" 49 | resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" 50 | integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== 51 | 52 | "@solana/buffer-layout-utils@^0.2.0": 53 | version "0.2.0" 54 | resolved "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz" 55 | integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== 56 | dependencies: 57 | "@solana/buffer-layout" "^4.0.0" 58 | "@solana/web3.js" "^1.32.0" 59 | bigint-buffer "^1.1.5" 60 | bignumber.js "^9.0.1" 61 | 62 | "@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@^4.0.1": 63 | version "4.0.1" 64 | resolved "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz" 65 | integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== 66 | dependencies: 67 | buffer "~6.0.3" 68 | 69 | "@solana/codecs-core@2.0.0-preview.2": 70 | version "2.0.0-preview.2" 71 | resolved "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.0.0-preview.2.tgz" 72 | integrity sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg== 73 | dependencies: 74 | "@solana/errors" "2.0.0-preview.2" 75 | 76 | "@solana/codecs-data-structures@2.0.0-preview.2": 77 | version "2.0.0-preview.2" 78 | resolved "https://registry.npmjs.org/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz" 79 | integrity sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg== 80 | dependencies: 81 | "@solana/codecs-core" "2.0.0-preview.2" 82 | "@solana/codecs-numbers" "2.0.0-preview.2" 83 | "@solana/errors" "2.0.0-preview.2" 84 | 85 | "@solana/codecs-numbers@2.0.0-preview.2": 86 | version "2.0.0-preview.2" 87 | resolved "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz" 88 | integrity sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw== 89 | dependencies: 90 | "@solana/codecs-core" "2.0.0-preview.2" 91 | "@solana/errors" "2.0.0-preview.2" 92 | 93 | "@solana/codecs-strings@2.0.0-preview.2": 94 | version "2.0.0-preview.2" 95 | resolved "https://registry.npmjs.org/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz" 96 | integrity sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g== 97 | dependencies: 98 | "@solana/codecs-core" "2.0.0-preview.2" 99 | "@solana/codecs-numbers" "2.0.0-preview.2" 100 | "@solana/errors" "2.0.0-preview.2" 101 | 102 | "@solana/codecs@2.0.0-preview.2": 103 | version "2.0.0-preview.2" 104 | resolved "https://registry.npmjs.org/@solana/codecs/-/codecs-2.0.0-preview.2.tgz" 105 | integrity sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA== 106 | dependencies: 107 | "@solana/codecs-core" "2.0.0-preview.2" 108 | "@solana/codecs-data-structures" "2.0.0-preview.2" 109 | "@solana/codecs-numbers" "2.0.0-preview.2" 110 | "@solana/codecs-strings" "2.0.0-preview.2" 111 | "@solana/options" "2.0.0-preview.2" 112 | 113 | "@solana/errors@2.0.0-preview.2": 114 | version "2.0.0-preview.2" 115 | resolved "https://registry.npmjs.org/@solana/errors/-/errors-2.0.0-preview.2.tgz" 116 | integrity sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA== 117 | dependencies: 118 | chalk "^5.3.0" 119 | commander "^12.0.0" 120 | 121 | "@solana/options@2.0.0-preview.2": 122 | version "2.0.0-preview.2" 123 | resolved "https://registry.npmjs.org/@solana/options/-/options-2.0.0-preview.2.tgz" 124 | integrity sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w== 125 | dependencies: 126 | "@solana/codecs-core" "2.0.0-preview.2" 127 | "@solana/codecs-numbers" "2.0.0-preview.2" 128 | 129 | "@solana/spl-token-group@^0.0.4": 130 | version "0.0.4" 131 | resolved "https://registry.npmjs.org/@solana/spl-token-group/-/spl-token-group-0.0.4.tgz" 132 | integrity sha512-7+80nrEMdUKlK37V6kOe024+T7J4nNss0F8LQ9OOPYdWCCfJmsGUzVx2W3oeizZR4IHM6N4yC9v1Xqwc3BTPWw== 133 | dependencies: 134 | "@solana/codecs" "2.0.0-preview.2" 135 | "@solana/spl-type-length-value" "0.1.0" 136 | 137 | "@solana/spl-token-metadata@^0.1.4": 138 | version "0.1.4" 139 | resolved "https://registry.npmjs.org/@solana/spl-token-metadata/-/spl-token-metadata-0.1.4.tgz" 140 | integrity sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ== 141 | dependencies: 142 | "@solana/codecs" "2.0.0-preview.2" 143 | "@solana/spl-type-length-value" "0.1.0" 144 | 145 | "@solana/spl-token@^0.4.6": 146 | version "0.4.6" 147 | resolved "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.4.6.tgz" 148 | integrity sha512-1nCnUqfHVtdguFciVWaY/RKcQz1IF4b31jnKgAmjU9QVN1q7dRUkTEWJZgTYIEtsULjVnC9jRqlhgGN39WbKKA== 149 | dependencies: 150 | "@solana/buffer-layout" "^4.0.0" 151 | "@solana/buffer-layout-utils" "^0.2.0" 152 | "@solana/spl-token-group" "^0.0.4" 153 | "@solana/spl-token-metadata" "^0.1.4" 154 | buffer "^6.0.3" 155 | 156 | "@solana/spl-type-length-value@0.1.0": 157 | version "0.1.0" 158 | resolved "https://registry.npmjs.org/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz" 159 | integrity sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA== 160 | dependencies: 161 | buffer "^6.0.3" 162 | 163 | "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.91.6", "@solana/web3.js@^1.91.8": 164 | version "1.91.8" 165 | resolved "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.91.8.tgz" 166 | integrity sha512-USa6OS1jbh8zOapRJ/CBZImZ8Xb7AJjROZl5adql9TpOoBN9BUzyyouS5oPuZHft7S7eB8uJPuXWYjMi6BHgOw== 167 | dependencies: 168 | "@babel/runtime" "^7.24.5" 169 | "@noble/curves" "^1.4.0" 170 | "@noble/hashes" "^1.4.0" 171 | "@solana/buffer-layout" "^4.0.1" 172 | agentkeepalive "^4.5.0" 173 | bigint-buffer "^1.1.5" 174 | bn.js "^5.2.1" 175 | borsh "^0.7.0" 176 | bs58 "^4.0.1" 177 | buffer "6.0.3" 178 | fast-stable-stringify "^1.0.0" 179 | jayson "^4.1.0" 180 | node-fetch "^2.7.0" 181 | rpc-websockets "^7.11.0" 182 | superstruct "^0.14.2" 183 | 184 | "@types/bn.js@^5.1.0": 185 | version "5.1.5" 186 | resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz" 187 | integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== 188 | dependencies: 189 | "@types/node" "*" 190 | 191 | "@types/chai@^4.3.0": 192 | version "4.3.16" 193 | resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz" 194 | integrity sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ== 195 | 196 | "@types/connect@^3.4.33": 197 | version "3.4.38" 198 | resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" 199 | integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== 200 | dependencies: 201 | "@types/node" "*" 202 | 203 | "@types/json5@^0.0.29": 204 | version "0.0.29" 205 | resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 206 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 207 | 208 | "@types/mocha@^9.0.0": 209 | version "9.1.1" 210 | resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" 211 | integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== 212 | 213 | "@types/node@*": 214 | version "20.12.13" 215 | resolved "https://registry.npmjs.org/@types/node/-/node-20.12.13.tgz" 216 | integrity sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA== 217 | dependencies: 218 | undici-types "~5.26.4" 219 | 220 | "@types/node@^12.12.54": 221 | version "12.20.55" 222 | resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" 223 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 224 | 225 | "@types/ws@^7.4.4": 226 | version "7.4.7" 227 | resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" 228 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 229 | dependencies: 230 | "@types/node" "*" 231 | 232 | "@ungap/promise-all-settled@1.1.2": 233 | version "1.1.2" 234 | resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" 235 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 236 | 237 | agentkeepalive@^4.5.0: 238 | version "4.5.0" 239 | resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" 240 | integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== 241 | dependencies: 242 | humanize-ms "^1.2.1" 243 | 244 | ansi-colors@4.1.1: 245 | version "4.1.1" 246 | resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" 247 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 248 | 249 | ansi-regex@^5.0.1: 250 | version "5.0.1" 251 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 252 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 253 | 254 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 255 | version "4.3.0" 256 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 257 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 258 | dependencies: 259 | color-convert "^2.0.1" 260 | 261 | anymatch@~3.1.2: 262 | version "3.1.3" 263 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" 264 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 265 | dependencies: 266 | normalize-path "^3.0.0" 267 | picomatch "^2.0.4" 268 | 269 | argparse@^2.0.1: 270 | version "2.0.1" 271 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 272 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 273 | 274 | arrify@^1.0.0: 275 | version "1.0.1" 276 | resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" 277 | integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== 278 | 279 | assertion-error@^1.1.0: 280 | version "1.1.0" 281 | resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" 282 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 283 | 284 | balanced-match@^1.0.0: 285 | version "1.0.2" 286 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 287 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 288 | 289 | base-x@^3.0.2: 290 | version "3.0.9" 291 | resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" 292 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 293 | dependencies: 294 | safe-buffer "^5.0.1" 295 | 296 | base58@^2.0.1: 297 | version "2.0.1" 298 | resolved "https://registry.npmjs.org/base58/-/base58-2.0.1.tgz" 299 | integrity sha512-qK6gt2fMSxN2xGOi+btI5oAnXL+vEq0AsHWHhf5jfm2hE6MwmW+2414qF96utV3Xfg3En8hEA9Q4lif4lbXcgw== 300 | 301 | base64-js@^1.3.1: 302 | version "1.5.1" 303 | resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 304 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 305 | 306 | bigint-buffer@^1.1.5: 307 | version "1.1.5" 308 | resolved "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" 309 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 310 | dependencies: 311 | bindings "^1.3.0" 312 | 313 | bignumber.js@^9.0.1: 314 | version "9.1.2" 315 | resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" 316 | integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== 317 | 318 | binary-extensions@^2.0.0: 319 | version "2.3.0" 320 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" 321 | integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== 322 | 323 | bindings@^1.3.0: 324 | version "1.5.0" 325 | resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" 326 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 327 | dependencies: 328 | file-uri-to-path "1.0.0" 329 | 330 | bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: 331 | version "5.2.1" 332 | resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" 333 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 334 | 335 | borsh@^0.7.0: 336 | version "0.7.0" 337 | resolved "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" 338 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 339 | dependencies: 340 | bn.js "^5.2.0" 341 | bs58 "^4.0.0" 342 | text-encoding-utf-8 "^1.0.2" 343 | 344 | brace-expansion@^1.1.7: 345 | version "1.1.11" 346 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 347 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 348 | dependencies: 349 | balanced-match "^1.0.0" 350 | concat-map "0.0.1" 351 | 352 | braces@~3.0.2: 353 | version "3.0.3" 354 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" 355 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 356 | dependencies: 357 | fill-range "^7.1.1" 358 | 359 | browser-stdout@1.3.1: 360 | version "1.3.1" 361 | resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" 362 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 363 | 364 | bs58@^4.0.0, bs58@^4.0.1: 365 | version "4.0.1" 366 | resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" 367 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 368 | dependencies: 369 | base-x "^3.0.2" 370 | 371 | buffer-from@^1.0.0, buffer-from@^1.1.0: 372 | version "1.1.2" 373 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" 374 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 375 | 376 | buffer-layout@^1.2.0, buffer-layout@^1.2.2: 377 | version "1.2.2" 378 | resolved "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz" 379 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 380 | 381 | buffer@^6.0.3, buffer@~6.0.3, buffer@6.0.3: 382 | version "6.0.3" 383 | resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" 384 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 385 | dependencies: 386 | base64-js "^1.3.1" 387 | ieee754 "^1.2.1" 388 | 389 | bufferutil@^4.0.1: 390 | version "4.0.8" 391 | resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz" 392 | integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== 393 | dependencies: 394 | node-gyp-build "^4.3.0" 395 | 396 | camelcase@^6.0.0, camelcase@^6.3.0: 397 | version "6.3.0" 398 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" 399 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 400 | 401 | chai@^4.3.4: 402 | version "4.4.1" 403 | resolved "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz" 404 | integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== 405 | dependencies: 406 | assertion-error "^1.1.0" 407 | check-error "^1.0.3" 408 | deep-eql "^4.1.3" 409 | get-func-name "^2.0.2" 410 | loupe "^2.3.6" 411 | pathval "^1.1.1" 412 | type-detect "^4.0.8" 413 | 414 | chalk@^4.1.0: 415 | version "4.1.2" 416 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 417 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 418 | dependencies: 419 | ansi-styles "^4.1.0" 420 | supports-color "^7.1.0" 421 | 422 | chalk@^5.3.0: 423 | version "5.3.0" 424 | resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" 425 | integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== 426 | 427 | check-error@^1.0.3: 428 | version "1.0.3" 429 | resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz" 430 | integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== 431 | dependencies: 432 | get-func-name "^2.0.2" 433 | 434 | chokidar@3.5.3: 435 | version "3.5.3" 436 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 437 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 438 | dependencies: 439 | anymatch "~3.1.2" 440 | braces "~3.0.2" 441 | glob-parent "~5.1.2" 442 | is-binary-path "~2.1.0" 443 | is-glob "~4.0.1" 444 | normalize-path "~3.0.0" 445 | readdirp "~3.6.0" 446 | optionalDependencies: 447 | fsevents "~2.3.2" 448 | 449 | cliui@^7.0.2: 450 | version "7.0.4" 451 | resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" 452 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 453 | dependencies: 454 | string-width "^4.2.0" 455 | strip-ansi "^6.0.0" 456 | wrap-ansi "^7.0.0" 457 | 458 | color-convert@^2.0.1: 459 | version "2.0.1" 460 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 461 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 462 | dependencies: 463 | color-name "~1.1.4" 464 | 465 | color-name@~1.1.4: 466 | version "1.1.4" 467 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 468 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 469 | 470 | commander@^12.0.0: 471 | version "12.1.0" 472 | resolved "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz" 473 | integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== 474 | 475 | commander@^2.20.3: 476 | version "2.20.3" 477 | resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" 478 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 479 | 480 | concat-map@0.0.1: 481 | version "0.0.1" 482 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 483 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 484 | 485 | cross-fetch@^3.1.5: 486 | version "3.1.8" 487 | resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz" 488 | integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== 489 | dependencies: 490 | node-fetch "^2.6.12" 491 | 492 | crypto-hash@^1.3.0: 493 | version "1.3.0" 494 | resolved "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz" 495 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 496 | 497 | debug@4.3.3: 498 | version "4.3.3" 499 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" 500 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 501 | dependencies: 502 | ms "2.1.2" 503 | 504 | decamelize@^4.0.0: 505 | version "4.0.0" 506 | resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" 507 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 508 | 509 | deep-eql@^4.1.3: 510 | version "4.1.3" 511 | resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" 512 | integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== 513 | dependencies: 514 | type-detect "^4.0.0" 515 | 516 | delay@^5.0.0: 517 | version "5.0.0" 518 | resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" 519 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 520 | 521 | diff@^3.1.0: 522 | version "3.5.0" 523 | resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" 524 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 525 | 526 | diff@5.0.0: 527 | version "5.0.0" 528 | resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" 529 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 530 | 531 | dot-case@^3.0.4: 532 | version "3.0.4" 533 | resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" 534 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 535 | dependencies: 536 | no-case "^3.0.4" 537 | tslib "^2.0.3" 538 | 539 | emoji-regex@^8.0.0: 540 | version "8.0.0" 541 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 542 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 543 | 544 | es6-promise@^4.0.3: 545 | version "4.2.8" 546 | resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" 547 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 548 | 549 | es6-promisify@^5.0.0: 550 | version "5.0.0" 551 | resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" 552 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 553 | dependencies: 554 | es6-promise "^4.0.3" 555 | 556 | escalade@^3.1.1: 557 | version "3.1.2" 558 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" 559 | integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== 560 | 561 | escape-string-regexp@4.0.0: 562 | version "4.0.0" 563 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 564 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 565 | 566 | eventemitter3@^4.0.7: 567 | version "4.0.7" 568 | resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" 569 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 570 | 571 | eyes@^0.1.8: 572 | version "0.1.8" 573 | resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" 574 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 575 | 576 | fast-stable-stringify@^1.0.0: 577 | version "1.0.0" 578 | resolved "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" 579 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 580 | 581 | fastestsmallesttextencoderdecoder@^1.0.22: 582 | version "1.0.22" 583 | resolved "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz" 584 | integrity sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw== 585 | 586 | file-uri-to-path@1.0.0: 587 | version "1.0.0" 588 | resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" 589 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 590 | 591 | fill-range@^7.1.1: 592 | version "7.1.1" 593 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" 594 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 595 | dependencies: 596 | to-regex-range "^5.0.1" 597 | 598 | find-up@5.0.0: 599 | version "5.0.0" 600 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 601 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 602 | dependencies: 603 | locate-path "^6.0.0" 604 | path-exists "^4.0.0" 605 | 606 | flat@^5.0.2: 607 | version "5.0.2" 608 | resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" 609 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 610 | 611 | fs.realpath@^1.0.0: 612 | version "1.0.0" 613 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 614 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 615 | 616 | get-caller-file@^2.0.5: 617 | version "2.0.5" 618 | resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 619 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 620 | 621 | get-func-name@^2.0.1, get-func-name@^2.0.2: 622 | version "2.0.2" 623 | resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" 624 | integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== 625 | 626 | glob-parent@~5.1.2: 627 | version "5.1.2" 628 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 629 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 630 | dependencies: 631 | is-glob "^4.0.1" 632 | 633 | glob@7.2.0: 634 | version "7.2.0" 635 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" 636 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 637 | dependencies: 638 | fs.realpath "^1.0.0" 639 | inflight "^1.0.4" 640 | inherits "2" 641 | minimatch "^3.0.4" 642 | once "^1.3.0" 643 | path-is-absolute "^1.0.0" 644 | 645 | growl@1.10.5: 646 | version "1.10.5" 647 | resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" 648 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 649 | 650 | has-flag@^4.0.0: 651 | version "4.0.0" 652 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 653 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 654 | 655 | he@1.2.0: 656 | version "1.2.0" 657 | resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" 658 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 659 | 660 | humanize-ms@^1.2.1: 661 | version "1.2.1" 662 | resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" 663 | integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== 664 | dependencies: 665 | ms "^2.0.0" 666 | 667 | ieee754@^1.2.1: 668 | version "1.2.1" 669 | resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 670 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 671 | 672 | inflight@^1.0.4: 673 | version "1.0.6" 674 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 675 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 676 | dependencies: 677 | once "^1.3.0" 678 | wrappy "1" 679 | 680 | inherits@2: 681 | version "2.0.4" 682 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 683 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 684 | 685 | is-binary-path@~2.1.0: 686 | version "2.1.0" 687 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 688 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 689 | dependencies: 690 | binary-extensions "^2.0.0" 691 | 692 | is-extglob@^2.1.1: 693 | version "2.1.1" 694 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 695 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 696 | 697 | is-fullwidth-code-point@^3.0.0: 698 | version "3.0.0" 699 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 700 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 701 | 702 | is-glob@^4.0.1, is-glob@~4.0.1: 703 | version "4.0.3" 704 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 705 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 706 | dependencies: 707 | is-extglob "^2.1.1" 708 | 709 | is-number@^7.0.0: 710 | version "7.0.0" 711 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 712 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 713 | 714 | is-plain-obj@^2.1.0: 715 | version "2.1.0" 716 | resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" 717 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 718 | 719 | is-unicode-supported@^0.1.0: 720 | version "0.1.0" 721 | resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" 722 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 723 | 724 | isexe@^2.0.0: 725 | version "2.0.0" 726 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 727 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 728 | 729 | isomorphic-ws@^4.0.1: 730 | version "4.0.1" 731 | resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" 732 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 733 | 734 | jayson@^4.1.0: 735 | version "4.1.0" 736 | resolved "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz" 737 | integrity sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A== 738 | dependencies: 739 | "@types/connect" "^3.4.33" 740 | "@types/node" "^12.12.54" 741 | "@types/ws" "^7.4.4" 742 | commander "^2.20.3" 743 | delay "^5.0.0" 744 | es6-promisify "^5.0.0" 745 | eyes "^0.1.8" 746 | isomorphic-ws "^4.0.1" 747 | json-stringify-safe "^5.0.1" 748 | JSONStream "^1.3.5" 749 | uuid "^8.3.2" 750 | ws "^7.4.5" 751 | 752 | js-yaml@4.1.0: 753 | version "4.1.0" 754 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 755 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 756 | dependencies: 757 | argparse "^2.0.1" 758 | 759 | json-stringify-safe@^5.0.1: 760 | version "5.0.1" 761 | resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" 762 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 763 | 764 | json5@^1.0.2: 765 | version "1.0.2" 766 | resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" 767 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== 768 | dependencies: 769 | minimist "^1.2.0" 770 | 771 | jsonparse@^1.2.0: 772 | version "1.3.1" 773 | resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" 774 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 775 | 776 | JSONStream@^1.3.5: 777 | version "1.3.5" 778 | resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" 779 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 780 | dependencies: 781 | jsonparse "^1.2.0" 782 | through ">=2.2.7 <3" 783 | 784 | locate-path@^6.0.0: 785 | version "6.0.0" 786 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 787 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 788 | dependencies: 789 | p-locate "^5.0.0" 790 | 791 | log-symbols@4.1.0: 792 | version "4.1.0" 793 | resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" 794 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 795 | dependencies: 796 | chalk "^4.1.0" 797 | is-unicode-supported "^0.1.0" 798 | 799 | loupe@^2.3.6: 800 | version "2.3.7" 801 | resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz" 802 | integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== 803 | dependencies: 804 | get-func-name "^2.0.1" 805 | 806 | lower-case@^2.0.2: 807 | version "2.0.2" 808 | resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" 809 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 810 | dependencies: 811 | tslib "^2.0.3" 812 | 813 | make-error@^1.1.1: 814 | version "1.3.6" 815 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" 816 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 817 | 818 | minimatch@^3.0.4: 819 | version "3.1.2" 820 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 821 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 822 | dependencies: 823 | brace-expansion "^1.1.7" 824 | 825 | minimatch@4.2.1: 826 | version "4.2.1" 827 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" 828 | integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== 829 | dependencies: 830 | brace-expansion "^1.1.7" 831 | 832 | minimist@^1.2.0, minimist@^1.2.6: 833 | version "1.2.8" 834 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 835 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 836 | 837 | mkdirp@^0.5.1: 838 | version "0.5.6" 839 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" 840 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 841 | dependencies: 842 | minimist "^1.2.6" 843 | 844 | "mocha@^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X", mocha@^9.0.3: 845 | version "9.2.2" 846 | resolved "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" 847 | integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== 848 | dependencies: 849 | "@ungap/promise-all-settled" "1.1.2" 850 | ansi-colors "4.1.1" 851 | browser-stdout "1.3.1" 852 | chokidar "3.5.3" 853 | debug "4.3.3" 854 | diff "5.0.0" 855 | escape-string-regexp "4.0.0" 856 | find-up "5.0.0" 857 | glob "7.2.0" 858 | growl "1.10.5" 859 | he "1.2.0" 860 | js-yaml "4.1.0" 861 | log-symbols "4.1.0" 862 | minimatch "4.2.1" 863 | ms "2.1.3" 864 | nanoid "3.3.1" 865 | serialize-javascript "6.0.0" 866 | strip-json-comments "3.1.1" 867 | supports-color "8.1.1" 868 | which "2.0.2" 869 | workerpool "6.2.0" 870 | yargs "16.2.0" 871 | yargs-parser "20.2.4" 872 | yargs-unparser "2.0.0" 873 | 874 | ms@^2.0.0, ms@2.1.3: 875 | version "2.1.3" 876 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 877 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 878 | 879 | ms@2.1.2: 880 | version "2.1.2" 881 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 882 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 883 | 884 | nanoid@3.3.1: 885 | version "3.3.1" 886 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" 887 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 888 | 889 | no-case@^3.0.4: 890 | version "3.0.4" 891 | resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" 892 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 893 | dependencies: 894 | lower-case "^2.0.2" 895 | tslib "^2.0.3" 896 | 897 | node-fetch@^2.6.12, node-fetch@^2.7.0: 898 | version "2.7.0" 899 | resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" 900 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== 901 | dependencies: 902 | whatwg-url "^5.0.0" 903 | 904 | node-gyp-build@^4.3.0: 905 | version "4.8.1" 906 | resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz" 907 | integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== 908 | 909 | normalize-path@^3.0.0, normalize-path@~3.0.0: 910 | version "3.0.0" 911 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 912 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 913 | 914 | once@^1.3.0: 915 | version "1.4.0" 916 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 917 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 918 | dependencies: 919 | wrappy "1" 920 | 921 | p-limit@^3.0.2: 922 | version "3.1.0" 923 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 924 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 925 | dependencies: 926 | yocto-queue "^0.1.0" 927 | 928 | p-locate@^5.0.0: 929 | version "5.0.0" 930 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 931 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 932 | dependencies: 933 | p-limit "^3.0.2" 934 | 935 | pako@^2.0.3: 936 | version "2.1.0" 937 | resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" 938 | integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== 939 | 940 | path-exists@^4.0.0: 941 | version "4.0.0" 942 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 943 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 944 | 945 | path-is-absolute@^1.0.0: 946 | version "1.0.1" 947 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 948 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 949 | 950 | pathval@^1.1.1: 951 | version "1.1.1" 952 | resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" 953 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 954 | 955 | picomatch@^2.0.4, picomatch@^2.2.1: 956 | version "2.3.1" 957 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 958 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 959 | 960 | prettier@^2.6.2: 961 | version "2.8.8" 962 | resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" 963 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 964 | 965 | randombytes@^2.1.0: 966 | version "2.1.0" 967 | resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" 968 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 969 | dependencies: 970 | safe-buffer "^5.1.0" 971 | 972 | readdirp@~3.6.0: 973 | version "3.6.0" 974 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 975 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 976 | dependencies: 977 | picomatch "^2.2.1" 978 | 979 | regenerator-runtime@^0.14.0: 980 | version "0.14.1" 981 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" 982 | integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== 983 | 984 | require-directory@^2.1.1: 985 | version "2.1.1" 986 | resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 987 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 988 | 989 | rpc-websockets@^7.11.0: 990 | version "7.11.0" 991 | resolved "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.11.0.tgz" 992 | integrity sha512-IkLYjayPv6Io8C/TdCL5gwgzd1hFz2vmBZrjMw/SPEXo51ETOhnzgS4Qy5GWi2JQN7HKHa66J3+2mv0fgNh/7w== 993 | dependencies: 994 | eventemitter3 "^4.0.7" 995 | uuid "^8.3.2" 996 | ws "^8.5.0" 997 | optionalDependencies: 998 | bufferutil "^4.0.1" 999 | utf-8-validate "^5.0.2" 1000 | 1001 | safe-buffer@^5.0.1, safe-buffer@^5.1.0: 1002 | version "5.2.1" 1003 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 1004 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1005 | 1006 | serialize-javascript@6.0.0: 1007 | version "6.0.0" 1008 | resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" 1009 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1010 | dependencies: 1011 | randombytes "^2.1.0" 1012 | 1013 | snake-case@^3.0.4: 1014 | version "3.0.4" 1015 | resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" 1016 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 1017 | dependencies: 1018 | dot-case "^3.0.4" 1019 | tslib "^2.0.3" 1020 | 1021 | source-map-support@^0.5.6: 1022 | version "0.5.21" 1023 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" 1024 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1025 | dependencies: 1026 | buffer-from "^1.0.0" 1027 | source-map "^0.6.0" 1028 | 1029 | source-map@^0.6.0: 1030 | version "0.6.1" 1031 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 1032 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1033 | 1034 | string-width@^4.1.0, string-width@^4.2.0: 1035 | version "4.2.3" 1036 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1037 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1038 | dependencies: 1039 | emoji-regex "^8.0.0" 1040 | is-fullwidth-code-point "^3.0.0" 1041 | strip-ansi "^6.0.1" 1042 | 1043 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1044 | version "6.0.1" 1045 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1046 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1047 | dependencies: 1048 | ansi-regex "^5.0.1" 1049 | 1050 | strip-bom@^3.0.0: 1051 | version "3.0.0" 1052 | resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 1053 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1054 | 1055 | strip-json-comments@3.1.1: 1056 | version "3.1.1" 1057 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1058 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1059 | 1060 | superstruct@^0.14.2: 1061 | version "0.14.2" 1062 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" 1063 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 1064 | 1065 | superstruct@^0.15.4: 1066 | version "0.15.5" 1067 | resolved "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz" 1068 | integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== 1069 | 1070 | supports-color@^7.1.0: 1071 | version "7.2.0" 1072 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1073 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1074 | dependencies: 1075 | has-flag "^4.0.0" 1076 | 1077 | supports-color@8.1.1: 1078 | version "8.1.1" 1079 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" 1080 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1081 | dependencies: 1082 | has-flag "^4.0.0" 1083 | 1084 | text-encoding-utf-8@^1.0.2: 1085 | version "1.0.2" 1086 | resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" 1087 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1088 | 1089 | "through@>=2.2.7 <3": 1090 | version "2.3.8" 1091 | resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1092 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1093 | 1094 | to-regex-range@^5.0.1: 1095 | version "5.0.1" 1096 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1097 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1098 | dependencies: 1099 | is-number "^7.0.0" 1100 | 1101 | toml@^3.0.0: 1102 | version "3.0.0" 1103 | resolved "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" 1104 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 1105 | 1106 | tr46@~0.0.3: 1107 | version "0.0.3" 1108 | resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" 1109 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1110 | 1111 | ts-mocha@^10.0.0: 1112 | version "10.0.0" 1113 | resolved "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz" 1114 | integrity sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw== 1115 | dependencies: 1116 | ts-node "7.0.1" 1117 | optionalDependencies: 1118 | tsconfig-paths "^3.5.0" 1119 | 1120 | ts-node@7.0.1: 1121 | version "7.0.1" 1122 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz" 1123 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1124 | dependencies: 1125 | arrify "^1.0.0" 1126 | buffer-from "^1.1.0" 1127 | diff "^3.1.0" 1128 | make-error "^1.1.1" 1129 | minimist "^1.2.0" 1130 | mkdirp "^0.5.1" 1131 | source-map-support "^0.5.6" 1132 | yn "^2.0.0" 1133 | 1134 | tsconfig-paths@^3.5.0: 1135 | version "3.15.0" 1136 | resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" 1137 | integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== 1138 | dependencies: 1139 | "@types/json5" "^0.0.29" 1140 | json5 "^1.0.2" 1141 | minimist "^1.2.6" 1142 | strip-bom "^3.0.0" 1143 | 1144 | tslib@^2.0.3: 1145 | version "2.6.2" 1146 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" 1147 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== 1148 | 1149 | type-detect@^4.0.0, type-detect@^4.0.8: 1150 | version "4.0.8" 1151 | resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" 1152 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1153 | 1154 | typescript@^4.3.5: 1155 | version "4.9.5" 1156 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" 1157 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 1158 | 1159 | undici-types@~5.26.4: 1160 | version "5.26.5" 1161 | resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" 1162 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1163 | 1164 | utf-8-validate@^5.0.2, utf-8-validate@>=5.0.2: 1165 | version "5.0.10" 1166 | resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" 1167 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== 1168 | dependencies: 1169 | node-gyp-build "^4.3.0" 1170 | 1171 | uuid@^8.3.2: 1172 | version "8.3.2" 1173 | resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" 1174 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1175 | 1176 | webidl-conversions@^3.0.0: 1177 | version "3.0.1" 1178 | resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" 1179 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1180 | 1181 | whatwg-url@^5.0.0: 1182 | version "5.0.0" 1183 | resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" 1184 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1185 | dependencies: 1186 | tr46 "~0.0.3" 1187 | webidl-conversions "^3.0.0" 1188 | 1189 | which@2.0.2: 1190 | version "2.0.2" 1191 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1192 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1193 | dependencies: 1194 | isexe "^2.0.0" 1195 | 1196 | workerpool@6.2.0: 1197 | version "6.2.0" 1198 | resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" 1199 | integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== 1200 | 1201 | wrap-ansi@^7.0.0: 1202 | version "7.0.0" 1203 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1204 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1205 | dependencies: 1206 | ansi-styles "^4.0.0" 1207 | string-width "^4.1.0" 1208 | strip-ansi "^6.0.0" 1209 | 1210 | wrappy@1: 1211 | version "1.0.2" 1212 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1213 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1214 | 1215 | ws@*, ws@^7.4.5: 1216 | version "7.5.9" 1217 | resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" 1218 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 1219 | 1220 | ws@^8.5.0: 1221 | version "8.17.0" 1222 | resolved "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz" 1223 | integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow== 1224 | 1225 | y18n@^5.0.5: 1226 | version "5.0.8" 1227 | resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1228 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1229 | 1230 | yargs-parser@^20.2.2, yargs-parser@20.2.4: 1231 | version "20.2.4" 1232 | resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" 1233 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1234 | 1235 | yargs-unparser@2.0.0: 1236 | version "2.0.0" 1237 | resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" 1238 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1239 | dependencies: 1240 | camelcase "^6.0.0" 1241 | decamelize "^4.0.0" 1242 | flat "^5.0.2" 1243 | is-plain-obj "^2.1.0" 1244 | 1245 | yargs@16.2.0: 1246 | version "16.2.0" 1247 | resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" 1248 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1249 | dependencies: 1250 | cliui "^7.0.2" 1251 | escalade "^3.1.1" 1252 | get-caller-file "^2.0.5" 1253 | require-directory "^2.1.1" 1254 | string-width "^4.2.0" 1255 | y18n "^5.0.5" 1256 | yargs-parser "^20.2.2" 1257 | 1258 | yarn@^1.22.22: 1259 | version "1.22.22" 1260 | resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz" 1261 | integrity sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg== 1262 | 1263 | yn@^2.0.0: 1264 | version "2.0.0" 1265 | resolved "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz" 1266 | integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== 1267 | 1268 | yocto-queue@^0.1.0: 1269 | version "0.1.0" 1270 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1271 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1272 | -------------------------------------------------------------------------------- /Palm-presale-project(contract)/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "aead" 7 | version = "0.4.3" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" 10 | dependencies = [ 11 | "generic-array", 12 | ] 13 | 14 | [[package]] 15 | name = "aes" 16 | version = "0.7.5" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" 19 | dependencies = [ 20 | "cfg-if", 21 | "cipher", 22 | "cpufeatures", 23 | "opaque-debug", 24 | ] 25 | 26 | [[package]] 27 | name = "aes-gcm-siv" 28 | version = "0.10.3" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "589c637f0e68c877bbd59a4599bbe849cac8e5f3e4b5a3ebae8f528cd218dcdc" 31 | dependencies = [ 32 | "aead", 33 | "aes", 34 | "cipher", 35 | "ctr", 36 | "polyval", 37 | "subtle", 38 | "zeroize", 39 | ] 40 | 41 | [[package]] 42 | name = "ahash" 43 | version = "0.7.8" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" 46 | dependencies = [ 47 | "getrandom 0.2.15", 48 | "once_cell", 49 | "version_check", 50 | ] 51 | 52 | [[package]] 53 | name = "ahash" 54 | version = "0.8.6" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" 57 | dependencies = [ 58 | "cfg-if", 59 | "getrandom 0.2.15", 60 | "once_cell", 61 | "version_check", 62 | "zerocopy", 63 | ] 64 | 65 | [[package]] 66 | name = "aho-corasick" 67 | version = "1.1.3" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 70 | dependencies = [ 71 | "memchr", 72 | ] 73 | 74 | [[package]] 75 | name = "anchor-attribute-access-control" 76 | version = "0.29.0" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | checksum = "e5f619f1d04f53621925ba8a2e633ba5a6081f2ae14758cbb67f38fd823e0a3e" 79 | dependencies = [ 80 | "anchor-syn", 81 | "proc-macro2", 82 | "quote", 83 | "syn 1.0.109", 84 | ] 85 | 86 | [[package]] 87 | name = "anchor-attribute-account" 88 | version = "0.29.0" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "e7f2a3e1df4685f18d12a943a9f2a7456305401af21a07c9fe076ef9ecd6e400" 91 | dependencies = [ 92 | "anchor-syn", 93 | "bs58 0.5.1", 94 | "proc-macro2", 95 | "quote", 96 | "syn 1.0.109", 97 | ] 98 | 99 | [[package]] 100 | name = "anchor-attribute-constant" 101 | version = "0.29.0" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "9423945cb55627f0b30903288e78baf6f62c6c8ab28fb344b6b25f1ffee3dca7" 104 | dependencies = [ 105 | "anchor-syn", 106 | "quote", 107 | "syn 1.0.109", 108 | ] 109 | 110 | [[package]] 111 | name = "anchor-attribute-error" 112 | version = "0.29.0" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | checksum = "93ed12720033cc3c3bf3cfa293349c2275cd5ab99936e33dd4bf283aaad3e241" 115 | dependencies = [ 116 | "anchor-syn", 117 | "quote", 118 | "syn 1.0.109", 119 | ] 120 | 121 | [[package]] 122 | name = "anchor-attribute-event" 123 | version = "0.29.0" 124 | source = "registry+https://github.com/rust-lang/crates.io-index" 125 | checksum = "eef4dc0371eba2d8c8b54794b0b0eb786a234a559b77593d6f80825b6d2c77a2" 126 | dependencies = [ 127 | "anchor-syn", 128 | "proc-macro2", 129 | "quote", 130 | "syn 1.0.109", 131 | ] 132 | 133 | [[package]] 134 | name = "anchor-attribute-program" 135 | version = "0.29.0" 136 | source = "registry+https://github.com/rust-lang/crates.io-index" 137 | checksum = "b18c4f191331e078d4a6a080954d1576241c29c56638783322a18d308ab27e4f" 138 | dependencies = [ 139 | "anchor-syn", 140 | "quote", 141 | "syn 1.0.109", 142 | ] 143 | 144 | [[package]] 145 | name = "anchor-derive-accounts" 146 | version = "0.29.0" 147 | source = "registry+https://github.com/rust-lang/crates.io-index" 148 | checksum = "5de10d6e9620d3bcea56c56151cad83c5992f50d5960b3a9bebc4a50390ddc3c" 149 | dependencies = [ 150 | "anchor-syn", 151 | "quote", 152 | "syn 1.0.109", 153 | ] 154 | 155 | [[package]] 156 | name = "anchor-derive-serde" 157 | version = "0.29.0" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "f4e2e5be518ec6053d90a2a7f26843dbee607583c779e6c8395951b9739bdfbe" 160 | dependencies = [ 161 | "anchor-syn", 162 | "borsh-derive-internal 0.10.3", 163 | "proc-macro2", 164 | "quote", 165 | "syn 1.0.109", 166 | ] 167 | 168 | [[package]] 169 | name = "anchor-derive-space" 170 | version = "0.29.0" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "1ecc31d19fa54840e74b7a979d44bcea49d70459de846088a1d71e87ba53c419" 173 | dependencies = [ 174 | "proc-macro2", 175 | "quote", 176 | "syn 1.0.109", 177 | ] 178 | 179 | [[package]] 180 | name = "anchor-lang" 181 | version = "0.29.0" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "35da4785497388af0553586d55ebdc08054a8b1724720ef2749d313494f2b8ad" 184 | dependencies = [ 185 | "anchor-attribute-access-control", 186 | "anchor-attribute-account", 187 | "anchor-attribute-constant", 188 | "anchor-attribute-error", 189 | "anchor-attribute-event", 190 | "anchor-attribute-program", 191 | "anchor-derive-accounts", 192 | "anchor-derive-serde", 193 | "anchor-derive-space", 194 | "arrayref", 195 | "base64 0.13.1", 196 | "bincode", 197 | "borsh 0.10.3", 198 | "bytemuck", 199 | "getrandom 0.2.15", 200 | "solana-program", 201 | "thiserror", 202 | ] 203 | 204 | [[package]] 205 | name = "anchor-spl" 206 | version = "0.29.0" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "6c4fd6e43b2ca6220d2ef1641539e678bfc31b6cc393cf892b373b5997b6a39a" 209 | dependencies = [ 210 | "anchor-lang", 211 | "solana-program", 212 | "spl-associated-token-account", 213 | "spl-token", 214 | "spl-token-2022 0.9.0", 215 | ] 216 | 217 | [[package]] 218 | name = "anchor-syn" 219 | version = "0.29.0" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "d9101b84702fed2ea57bd22992f75065da5648017135b844283a2f6d74f27825" 222 | dependencies = [ 223 | "anyhow", 224 | "bs58 0.5.1", 225 | "heck", 226 | "proc-macro2", 227 | "quote", 228 | "serde", 229 | "serde_json", 230 | "sha2 0.10.8", 231 | "syn 1.0.109", 232 | "thiserror", 233 | ] 234 | 235 | [[package]] 236 | name = "anyhow" 237 | version = "1.0.86" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" 240 | 241 | [[package]] 242 | name = "ark-bn254" 243 | version = "0.4.0" 244 | source = "registry+https://github.com/rust-lang/crates.io-index" 245 | checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" 246 | dependencies = [ 247 | "ark-ec", 248 | "ark-ff", 249 | "ark-std", 250 | ] 251 | 252 | [[package]] 253 | name = "ark-ec" 254 | version = "0.4.2" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" 257 | dependencies = [ 258 | "ark-ff", 259 | "ark-poly", 260 | "ark-serialize", 261 | "ark-std", 262 | "derivative", 263 | "hashbrown 0.13.2", 264 | "itertools", 265 | "num-traits", 266 | "zeroize", 267 | ] 268 | 269 | [[package]] 270 | name = "ark-ff" 271 | version = "0.4.2" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" 274 | dependencies = [ 275 | "ark-ff-asm", 276 | "ark-ff-macros", 277 | "ark-serialize", 278 | "ark-std", 279 | "derivative", 280 | "digest 0.10.7", 281 | "itertools", 282 | "num-bigint", 283 | "num-traits", 284 | "paste", 285 | "rustc_version", 286 | "zeroize", 287 | ] 288 | 289 | [[package]] 290 | name = "ark-ff-asm" 291 | version = "0.4.2" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" 294 | dependencies = [ 295 | "quote", 296 | "syn 1.0.109", 297 | ] 298 | 299 | [[package]] 300 | name = "ark-ff-macros" 301 | version = "0.4.2" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" 304 | dependencies = [ 305 | "num-bigint", 306 | "num-traits", 307 | "proc-macro2", 308 | "quote", 309 | "syn 1.0.109", 310 | ] 311 | 312 | [[package]] 313 | name = "ark-poly" 314 | version = "0.4.2" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" 317 | dependencies = [ 318 | "ark-ff", 319 | "ark-serialize", 320 | "ark-std", 321 | "derivative", 322 | "hashbrown 0.13.2", 323 | ] 324 | 325 | [[package]] 326 | name = "ark-serialize" 327 | version = "0.4.2" 328 | source = "registry+https://github.com/rust-lang/crates.io-index" 329 | checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" 330 | dependencies = [ 331 | "ark-serialize-derive", 332 | "ark-std", 333 | "digest 0.10.7", 334 | "num-bigint", 335 | ] 336 | 337 | [[package]] 338 | name = "ark-serialize-derive" 339 | version = "0.4.2" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" 342 | dependencies = [ 343 | "proc-macro2", 344 | "quote", 345 | "syn 1.0.109", 346 | ] 347 | 348 | [[package]] 349 | name = "ark-std" 350 | version = "0.4.0" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" 353 | dependencies = [ 354 | "num-traits", 355 | "rand 0.8.5", 356 | ] 357 | 358 | [[package]] 359 | name = "array-bytes" 360 | version = "1.4.1" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "9ad284aeb45c13f2fb4f084de4a420ebf447423bdf9386c0540ce33cb3ef4b8c" 363 | 364 | [[package]] 365 | name = "arrayref" 366 | version = "0.3.7" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" 369 | 370 | [[package]] 371 | name = "arrayvec" 372 | version = "0.7.4" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" 375 | 376 | [[package]] 377 | name = "assert_matches" 378 | version = "1.5.0" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" 381 | 382 | [[package]] 383 | name = "atty" 384 | version = "0.2.14" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 387 | dependencies = [ 388 | "hermit-abi", 389 | "libc", 390 | "winapi", 391 | ] 392 | 393 | [[package]] 394 | name = "autocfg" 395 | version = "1.3.0" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 398 | 399 | [[package]] 400 | name = "base64" 401 | version = "0.12.3" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 404 | 405 | [[package]] 406 | name = "base64" 407 | version = "0.13.1" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 410 | 411 | [[package]] 412 | name = "base64" 413 | version = "0.21.7" 414 | source = "registry+https://github.com/rust-lang/crates.io-index" 415 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 416 | 417 | [[package]] 418 | name = "bincode" 419 | version = "1.3.3" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 422 | dependencies = [ 423 | "serde", 424 | ] 425 | 426 | [[package]] 427 | name = "bitflags" 428 | version = "1.3.2" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 431 | 432 | [[package]] 433 | name = "bitflags" 434 | version = "2.5.0" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 437 | 438 | [[package]] 439 | name = "bitmaps" 440 | version = "2.1.0" 441 | source = "registry+https://github.com/rust-lang/crates.io-index" 442 | checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" 443 | dependencies = [ 444 | "typenum", 445 | ] 446 | 447 | [[package]] 448 | name = "blake3" 449 | version = "1.5.1" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" 452 | dependencies = [ 453 | "arrayref", 454 | "arrayvec", 455 | "cc", 456 | "cfg-if", 457 | "constant_time_eq", 458 | "digest 0.10.7", 459 | ] 460 | 461 | [[package]] 462 | name = "block-buffer" 463 | version = "0.9.0" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 466 | dependencies = [ 467 | "block-padding", 468 | "generic-array", 469 | ] 470 | 471 | [[package]] 472 | name = "block-buffer" 473 | version = "0.10.4" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 476 | dependencies = [ 477 | "generic-array", 478 | ] 479 | 480 | [[package]] 481 | name = "block-padding" 482 | version = "0.2.1" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 485 | 486 | [[package]] 487 | name = "borsh" 488 | version = "0.9.3" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" 491 | dependencies = [ 492 | "borsh-derive 0.9.3", 493 | "hashbrown 0.11.2", 494 | ] 495 | 496 | [[package]] 497 | name = "borsh" 498 | version = "0.10.3" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" 501 | dependencies = [ 502 | "borsh-derive 0.10.3", 503 | "hashbrown 0.13.2", 504 | ] 505 | 506 | [[package]] 507 | name = "borsh-derive" 508 | version = "0.9.3" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" 511 | dependencies = [ 512 | "borsh-derive-internal 0.9.3", 513 | "borsh-schema-derive-internal 0.9.3", 514 | "proc-macro-crate 0.1.5", 515 | "proc-macro2", 516 | "syn 1.0.109", 517 | ] 518 | 519 | [[package]] 520 | name = "borsh-derive" 521 | version = "0.10.3" 522 | source = "registry+https://github.com/rust-lang/crates.io-index" 523 | checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" 524 | dependencies = [ 525 | "borsh-derive-internal 0.10.3", 526 | "borsh-schema-derive-internal 0.10.3", 527 | "proc-macro-crate 0.1.5", 528 | "proc-macro2", 529 | "syn 1.0.109", 530 | ] 531 | 532 | [[package]] 533 | name = "borsh-derive-internal" 534 | version = "0.9.3" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" 537 | dependencies = [ 538 | "proc-macro2", 539 | "quote", 540 | "syn 1.0.109", 541 | ] 542 | 543 | [[package]] 544 | name = "borsh-derive-internal" 545 | version = "0.10.3" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" 548 | dependencies = [ 549 | "proc-macro2", 550 | "quote", 551 | "syn 1.0.109", 552 | ] 553 | 554 | [[package]] 555 | name = "borsh-schema-derive-internal" 556 | version = "0.9.3" 557 | source = "registry+https://github.com/rust-lang/crates.io-index" 558 | checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" 559 | dependencies = [ 560 | "proc-macro2", 561 | "quote", 562 | "syn 1.0.109", 563 | ] 564 | 565 | [[package]] 566 | name = "borsh-schema-derive-internal" 567 | version = "0.10.3" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" 570 | dependencies = [ 571 | "proc-macro2", 572 | "quote", 573 | "syn 1.0.109", 574 | ] 575 | 576 | [[package]] 577 | name = "bs58" 578 | version = "0.4.0" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 581 | 582 | [[package]] 583 | name = "bs58" 584 | version = "0.5.1" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" 587 | dependencies = [ 588 | "tinyvec", 589 | ] 590 | 591 | [[package]] 592 | name = "bumpalo" 593 | version = "3.16.0" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 596 | 597 | [[package]] 598 | name = "bv" 599 | version = "0.11.1" 600 | source = "registry+https://github.com/rust-lang/crates.io-index" 601 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 602 | dependencies = [ 603 | "feature-probe", 604 | "serde", 605 | ] 606 | 607 | [[package]] 608 | name = "bytemuck" 609 | version = "1.16.0" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" 612 | dependencies = [ 613 | "bytemuck_derive", 614 | ] 615 | 616 | [[package]] 617 | name = "bytemuck_derive" 618 | version = "1.7.0" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" 621 | dependencies = [ 622 | "proc-macro2", 623 | "quote", 624 | "syn 2.0.66", 625 | ] 626 | 627 | [[package]] 628 | name = "byteorder" 629 | version = "1.5.0" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 632 | 633 | [[package]] 634 | name = "cc" 635 | version = "1.0.98" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" 638 | dependencies = [ 639 | "jobserver", 640 | "libc", 641 | "once_cell", 642 | ] 643 | 644 | [[package]] 645 | name = "cfg-if" 646 | version = "1.0.0" 647 | source = "registry+https://github.com/rust-lang/crates.io-index" 648 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 649 | 650 | [[package]] 651 | name = "chrono" 652 | version = "0.4.38" 653 | source = "registry+https://github.com/rust-lang/crates.io-index" 654 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 655 | dependencies = [ 656 | "num-traits", 657 | ] 658 | 659 | [[package]] 660 | name = "cipher" 661 | version = "0.3.0" 662 | source = "registry+https://github.com/rust-lang/crates.io-index" 663 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 664 | dependencies = [ 665 | "generic-array", 666 | ] 667 | 668 | [[package]] 669 | name = "console_error_panic_hook" 670 | version = "0.1.7" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 673 | dependencies = [ 674 | "cfg-if", 675 | "wasm-bindgen", 676 | ] 677 | 678 | [[package]] 679 | name = "console_log" 680 | version = "0.2.2" 681 | source = "registry+https://github.com/rust-lang/crates.io-index" 682 | checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" 683 | dependencies = [ 684 | "log", 685 | "web-sys", 686 | ] 687 | 688 | [[package]] 689 | name = "constant_time_eq" 690 | version = "0.3.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" 693 | 694 | [[package]] 695 | name = "cpufeatures" 696 | version = "0.2.12" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 699 | dependencies = [ 700 | "libc", 701 | ] 702 | 703 | [[package]] 704 | name = "crossbeam-deque" 705 | version = "0.8.5" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 708 | dependencies = [ 709 | "crossbeam-epoch", 710 | "crossbeam-utils", 711 | ] 712 | 713 | [[package]] 714 | name = "crossbeam-epoch" 715 | version = "0.9.18" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 718 | dependencies = [ 719 | "crossbeam-utils", 720 | ] 721 | 722 | [[package]] 723 | name = "crossbeam-utils" 724 | version = "0.8.20" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 727 | 728 | [[package]] 729 | name = "crunchy" 730 | version = "0.2.2" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 733 | 734 | [[package]] 735 | name = "crypto-common" 736 | version = "0.1.6" 737 | source = "registry+https://github.com/rust-lang/crates.io-index" 738 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 739 | dependencies = [ 740 | "generic-array", 741 | "typenum", 742 | ] 743 | 744 | [[package]] 745 | name = "crypto-mac" 746 | version = "0.8.0" 747 | source = "registry+https://github.com/rust-lang/crates.io-index" 748 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 749 | dependencies = [ 750 | "generic-array", 751 | "subtle", 752 | ] 753 | 754 | [[package]] 755 | name = "ctr" 756 | version = "0.8.0" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" 759 | dependencies = [ 760 | "cipher", 761 | ] 762 | 763 | [[package]] 764 | name = "curve25519-dalek" 765 | version = "3.2.1" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 768 | dependencies = [ 769 | "byteorder", 770 | "digest 0.9.0", 771 | "rand_core 0.5.1", 772 | "serde", 773 | "subtle", 774 | "zeroize", 775 | ] 776 | 777 | [[package]] 778 | name = "darling" 779 | version = "0.20.9" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" 782 | dependencies = [ 783 | "darling_core", 784 | "darling_macro", 785 | ] 786 | 787 | [[package]] 788 | name = "darling_core" 789 | version = "0.20.9" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" 792 | dependencies = [ 793 | "fnv", 794 | "ident_case", 795 | "proc-macro2", 796 | "quote", 797 | "strsim", 798 | "syn 2.0.66", 799 | ] 800 | 801 | [[package]] 802 | name = "darling_macro" 803 | version = "0.20.9" 804 | source = "registry+https://github.com/rust-lang/crates.io-index" 805 | checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" 806 | dependencies = [ 807 | "darling_core", 808 | "quote", 809 | "syn 2.0.66", 810 | ] 811 | 812 | [[package]] 813 | name = "derivation-path" 814 | version = "0.2.0" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" 817 | 818 | [[package]] 819 | name = "derivative" 820 | version = "2.2.0" 821 | source = "registry+https://github.com/rust-lang/crates.io-index" 822 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 823 | dependencies = [ 824 | "proc-macro2", 825 | "quote", 826 | "syn 1.0.109", 827 | ] 828 | 829 | [[package]] 830 | name = "digest" 831 | version = "0.9.0" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 834 | dependencies = [ 835 | "generic-array", 836 | ] 837 | 838 | [[package]] 839 | name = "digest" 840 | version = "0.10.7" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 843 | dependencies = [ 844 | "block-buffer 0.10.4", 845 | "crypto-common", 846 | "subtle", 847 | ] 848 | 849 | [[package]] 850 | name = "ed25519" 851 | version = "1.5.3" 852 | source = "registry+https://github.com/rust-lang/crates.io-index" 853 | checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" 854 | dependencies = [ 855 | "signature", 856 | ] 857 | 858 | [[package]] 859 | name = "ed25519-dalek" 860 | version = "1.0.1" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" 863 | dependencies = [ 864 | "curve25519-dalek", 865 | "ed25519", 866 | "rand 0.7.3", 867 | "serde", 868 | "sha2 0.9.9", 869 | "zeroize", 870 | ] 871 | 872 | [[package]] 873 | name = "ed25519-dalek-bip32" 874 | version = "0.2.0" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" 877 | dependencies = [ 878 | "derivation-path", 879 | "ed25519-dalek", 880 | "hmac 0.12.1", 881 | "sha2 0.10.8", 882 | ] 883 | 884 | [[package]] 885 | name = "either" 886 | version = "1.12.0" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" 889 | 890 | [[package]] 891 | name = "env_logger" 892 | version = "0.9.3" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" 895 | dependencies = [ 896 | "atty", 897 | "humantime", 898 | "log", 899 | "regex", 900 | "termcolor", 901 | ] 902 | 903 | [[package]] 904 | name = "feature-probe" 905 | version = "0.1.1" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 908 | 909 | [[package]] 910 | name = "fnv" 911 | version = "1.0.7" 912 | source = "registry+https://github.com/rust-lang/crates.io-index" 913 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 914 | 915 | [[package]] 916 | name = "generic-array" 917 | version = "0.14.7" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 920 | dependencies = [ 921 | "serde", 922 | "typenum", 923 | "version_check", 924 | ] 925 | 926 | [[package]] 927 | name = "getrandom" 928 | version = "0.1.16" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 931 | dependencies = [ 932 | "cfg-if", 933 | "js-sys", 934 | "libc", 935 | "wasi 0.9.0+wasi-snapshot-preview1", 936 | "wasm-bindgen", 937 | ] 938 | 939 | [[package]] 940 | name = "getrandom" 941 | version = "0.2.15" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 944 | dependencies = [ 945 | "cfg-if", 946 | "js-sys", 947 | "libc", 948 | "wasi 0.11.0+wasi-snapshot-preview1", 949 | "wasm-bindgen", 950 | ] 951 | 952 | [[package]] 953 | name = "hashbrown" 954 | version = "0.11.2" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 957 | dependencies = [ 958 | "ahash 0.7.8", 959 | ] 960 | 961 | [[package]] 962 | name = "hashbrown" 963 | version = "0.12.3" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 966 | 967 | [[package]] 968 | name = "hashbrown" 969 | version = "0.13.2" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" 972 | dependencies = [ 973 | "ahash 0.8.6", 974 | ] 975 | 976 | [[package]] 977 | name = "heck" 978 | version = "0.3.3" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 981 | dependencies = [ 982 | "unicode-segmentation", 983 | ] 984 | 985 | [[package]] 986 | name = "hermit-abi" 987 | version = "0.1.19" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 990 | dependencies = [ 991 | "libc", 992 | ] 993 | 994 | [[package]] 995 | name = "hmac" 996 | version = "0.8.1" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 999 | dependencies = [ 1000 | "crypto-mac", 1001 | "digest 0.9.0", 1002 | ] 1003 | 1004 | [[package]] 1005 | name = "hmac" 1006 | version = "0.12.1" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1009 | dependencies = [ 1010 | "digest 0.10.7", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "hmac-drbg" 1015 | version = "0.3.0" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 1018 | dependencies = [ 1019 | "digest 0.9.0", 1020 | "generic-array", 1021 | "hmac 0.8.1", 1022 | ] 1023 | 1024 | [[package]] 1025 | name = "humantime" 1026 | version = "2.1.0" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1029 | 1030 | [[package]] 1031 | name = "ident_case" 1032 | version = "1.0.1" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1035 | 1036 | [[package]] 1037 | name = "im" 1038 | version = "15.1.0" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" 1041 | dependencies = [ 1042 | "bitmaps", 1043 | "rand_core 0.6.4", 1044 | "rand_xoshiro", 1045 | "rayon", 1046 | "serde", 1047 | "sized-chunks", 1048 | "typenum", 1049 | "version_check", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "indexmap" 1054 | version = "1.9.3" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1057 | dependencies = [ 1058 | "autocfg", 1059 | "hashbrown 0.12.3", 1060 | ] 1061 | 1062 | [[package]] 1063 | name = "itertools" 1064 | version = "0.10.5" 1065 | source = "registry+https://github.com/rust-lang/crates.io-index" 1066 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 1067 | dependencies = [ 1068 | "either", 1069 | ] 1070 | 1071 | [[package]] 1072 | name = "itoa" 1073 | version = "1.0.11" 1074 | source = "registry+https://github.com/rust-lang/crates.io-index" 1075 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 1076 | 1077 | [[package]] 1078 | name = "jobserver" 1079 | version = "0.1.31" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" 1082 | dependencies = [ 1083 | "libc", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "js-sys" 1088 | version = "0.3.69" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 1091 | dependencies = [ 1092 | "wasm-bindgen", 1093 | ] 1094 | 1095 | [[package]] 1096 | name = "keccak" 1097 | version = "0.1.5" 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" 1099 | checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" 1100 | dependencies = [ 1101 | "cpufeatures", 1102 | ] 1103 | 1104 | [[package]] 1105 | name = "lazy_static" 1106 | version = "1.4.0" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1109 | 1110 | [[package]] 1111 | name = "libc" 1112 | version = "0.2.155" 1113 | source = "registry+https://github.com/rust-lang/crates.io-index" 1114 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 1115 | 1116 | [[package]] 1117 | name = "libsecp256k1" 1118 | version = "0.6.0" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 1121 | dependencies = [ 1122 | "arrayref", 1123 | "base64 0.12.3", 1124 | "digest 0.9.0", 1125 | "hmac-drbg", 1126 | "libsecp256k1-core", 1127 | "libsecp256k1-gen-ecmult", 1128 | "libsecp256k1-gen-genmult", 1129 | "rand 0.7.3", 1130 | "serde", 1131 | "sha2 0.9.9", 1132 | "typenum", 1133 | ] 1134 | 1135 | [[package]] 1136 | name = "libsecp256k1-core" 1137 | version = "0.2.2" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 1140 | dependencies = [ 1141 | "crunchy", 1142 | "digest 0.9.0", 1143 | "subtle", 1144 | ] 1145 | 1146 | [[package]] 1147 | name = "libsecp256k1-gen-ecmult" 1148 | version = "0.2.1" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 1151 | dependencies = [ 1152 | "libsecp256k1-core", 1153 | ] 1154 | 1155 | [[package]] 1156 | name = "libsecp256k1-gen-genmult" 1157 | version = "0.2.1" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 1160 | dependencies = [ 1161 | "libsecp256k1-core", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "lock_api" 1166 | version = "0.4.12" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1169 | dependencies = [ 1170 | "autocfg", 1171 | "scopeguard", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "log" 1176 | version = "0.4.21" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 1179 | 1180 | [[package]] 1181 | name = "memchr" 1182 | version = "2.7.2" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" 1185 | 1186 | [[package]] 1187 | name = "memmap2" 1188 | version = "0.5.10" 1189 | source = "registry+https://github.com/rust-lang/crates.io-index" 1190 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" 1191 | dependencies = [ 1192 | "libc", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "memoffset" 1197 | version = "0.9.1" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" 1200 | dependencies = [ 1201 | "autocfg", 1202 | ] 1203 | 1204 | [[package]] 1205 | name = "merlin" 1206 | version = "3.0.0" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" 1209 | dependencies = [ 1210 | "byteorder", 1211 | "keccak", 1212 | "rand_core 0.6.4", 1213 | "zeroize", 1214 | ] 1215 | 1216 | [[package]] 1217 | name = "mpl-token-auth-rules" 1218 | version = "1.4.3-beta.1" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "81a34d740606a10a9dac7507d0c9025d72e0ce311c68ae85b6634982cf69a9c6" 1221 | dependencies = [ 1222 | "borsh 0.9.3", 1223 | "bytemuck", 1224 | "mpl-token-metadata-context-derive 0.2.1", 1225 | "num-derive 0.3.3", 1226 | "num-traits", 1227 | "rmp-serde", 1228 | "serde", 1229 | "shank", 1230 | "solana-program", 1231 | "solana-zk-token-sdk", 1232 | "thiserror", 1233 | ] 1234 | 1235 | [[package]] 1236 | name = "mpl-token-metadata" 1237 | version = "1.13.2" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "654976568c99887549e1291e7b7e55ae31a70732e56ebb25cb1cdfc08c018333" 1240 | dependencies = [ 1241 | "arrayref", 1242 | "borsh 0.9.3", 1243 | "mpl-token-auth-rules", 1244 | "mpl-token-metadata-context-derive 0.3.0", 1245 | "mpl-utils", 1246 | "num-derive 0.3.3", 1247 | "num-traits", 1248 | "shank", 1249 | "solana-program", 1250 | "spl-associated-token-account", 1251 | "spl-token", 1252 | "thiserror", 1253 | ] 1254 | 1255 | [[package]] 1256 | name = "mpl-token-metadata-context-derive" 1257 | version = "0.2.1" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "12989bc45715b0ee91944855130131479f9c772e198a910c3eb0ea327d5bffc3" 1260 | dependencies = [ 1261 | "quote", 1262 | "syn 1.0.109", 1263 | ] 1264 | 1265 | [[package]] 1266 | name = "mpl-token-metadata-context-derive" 1267 | version = "0.3.0" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "b5a739019e11d93661a64ef5fe108ab17c79b35961e944442ff6efdd460ad01a" 1270 | dependencies = [ 1271 | "quote", 1272 | "syn 1.0.109", 1273 | ] 1274 | 1275 | [[package]] 1276 | name = "mpl-utils" 1277 | version = "0.3.5" 1278 | source = "registry+https://github.com/rust-lang/crates.io-index" 1279 | checksum = "8ee1b830bfd014504a11b2234e2e7d6af535adda601f224cd519b923f593c91b" 1280 | dependencies = [ 1281 | "arrayref", 1282 | "solana-program", 1283 | "spl-token-2022 0.8.0", 1284 | ] 1285 | 1286 | [[package]] 1287 | name = "num-bigint" 1288 | version = "0.4.5" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" 1291 | dependencies = [ 1292 | "num-integer", 1293 | "num-traits", 1294 | ] 1295 | 1296 | [[package]] 1297 | name = "num-derive" 1298 | version = "0.3.3" 1299 | source = "registry+https://github.com/rust-lang/crates.io-index" 1300 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 1301 | dependencies = [ 1302 | "proc-macro2", 1303 | "quote", 1304 | "syn 1.0.109", 1305 | ] 1306 | 1307 | [[package]] 1308 | name = "num-derive" 1309 | version = "0.4.2" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 1312 | dependencies = [ 1313 | "proc-macro2", 1314 | "quote", 1315 | "syn 2.0.66", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "num-integer" 1320 | version = "0.1.46" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1323 | dependencies = [ 1324 | "num-traits", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "num-traits" 1329 | version = "0.2.19" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1332 | dependencies = [ 1333 | "autocfg", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "num_enum" 1338 | version = "0.6.1" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" 1341 | dependencies = [ 1342 | "num_enum_derive 0.6.1", 1343 | ] 1344 | 1345 | [[package]] 1346 | name = "num_enum" 1347 | version = "0.7.2" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" 1350 | dependencies = [ 1351 | "num_enum_derive 0.7.2", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "num_enum_derive" 1356 | version = "0.6.1" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" 1359 | dependencies = [ 1360 | "proc-macro-crate 1.3.1", 1361 | "proc-macro2", 1362 | "quote", 1363 | "syn 2.0.66", 1364 | ] 1365 | 1366 | [[package]] 1367 | name = "num_enum_derive" 1368 | version = "0.7.2" 1369 | source = "registry+https://github.com/rust-lang/crates.io-index" 1370 | checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" 1371 | dependencies = [ 1372 | "proc-macro-crate 1.3.1", 1373 | "proc-macro2", 1374 | "quote", 1375 | "syn 2.0.66", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "once_cell" 1380 | version = "1.19.0" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 1383 | 1384 | [[package]] 1385 | name = "opaque-debug" 1386 | version = "0.3.1" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 1389 | 1390 | [[package]] 1391 | name = "palm-presale" 1392 | version = "0.1.0" 1393 | dependencies = [ 1394 | "ahash 0.8.6", 1395 | "anchor-lang", 1396 | "anchor-spl", 1397 | "mpl-token-metadata", 1398 | "solana-program", 1399 | "toml_datetime", 1400 | ] 1401 | 1402 | [[package]] 1403 | name = "parking_lot" 1404 | version = "0.12.3" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1407 | dependencies = [ 1408 | "lock_api", 1409 | "parking_lot_core", 1410 | ] 1411 | 1412 | [[package]] 1413 | name = "parking_lot_core" 1414 | version = "0.9.10" 1415 | source = "registry+https://github.com/rust-lang/crates.io-index" 1416 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1417 | dependencies = [ 1418 | "cfg-if", 1419 | "libc", 1420 | "redox_syscall", 1421 | "smallvec", 1422 | "windows-targets", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "paste" 1427 | version = "1.0.15" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1430 | 1431 | [[package]] 1432 | name = "pbkdf2" 1433 | version = "0.4.0" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" 1436 | dependencies = [ 1437 | "crypto-mac", 1438 | ] 1439 | 1440 | [[package]] 1441 | name = "pbkdf2" 1442 | version = "0.11.0" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" 1445 | dependencies = [ 1446 | "digest 0.10.7", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "percent-encoding" 1451 | version = "2.3.1" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1454 | 1455 | [[package]] 1456 | name = "polyval" 1457 | version = "0.5.3" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" 1460 | dependencies = [ 1461 | "cfg-if", 1462 | "cpufeatures", 1463 | "opaque-debug", 1464 | "universal-hash", 1465 | ] 1466 | 1467 | [[package]] 1468 | name = "ppv-lite86" 1469 | version = "0.2.17" 1470 | source = "registry+https://github.com/rust-lang/crates.io-index" 1471 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1472 | 1473 | [[package]] 1474 | name = "proc-macro-crate" 1475 | version = "0.1.5" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 1478 | dependencies = [ 1479 | "toml", 1480 | ] 1481 | 1482 | [[package]] 1483 | name = "proc-macro-crate" 1484 | version = "1.3.1" 1485 | source = "registry+https://github.com/rust-lang/crates.io-index" 1486 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 1487 | dependencies = [ 1488 | "once_cell", 1489 | "toml_edit", 1490 | ] 1491 | 1492 | [[package]] 1493 | name = "proc-macro2" 1494 | version = "1.0.84" 1495 | source = "registry+https://github.com/rust-lang/crates.io-index" 1496 | checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" 1497 | dependencies = [ 1498 | "unicode-ident", 1499 | ] 1500 | 1501 | [[package]] 1502 | name = "qstring" 1503 | version = "0.7.2" 1504 | source = "registry+https://github.com/rust-lang/crates.io-index" 1505 | checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" 1506 | dependencies = [ 1507 | "percent-encoding", 1508 | ] 1509 | 1510 | [[package]] 1511 | name = "quote" 1512 | version = "1.0.36" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 1515 | dependencies = [ 1516 | "proc-macro2", 1517 | ] 1518 | 1519 | [[package]] 1520 | name = "rand" 1521 | version = "0.7.3" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1524 | dependencies = [ 1525 | "getrandom 0.1.16", 1526 | "libc", 1527 | "rand_chacha 0.2.2", 1528 | "rand_core 0.5.1", 1529 | "rand_hc", 1530 | ] 1531 | 1532 | [[package]] 1533 | name = "rand" 1534 | version = "0.8.5" 1535 | source = "registry+https://github.com/rust-lang/crates.io-index" 1536 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1537 | dependencies = [ 1538 | "rand_chacha 0.3.1", 1539 | "rand_core 0.6.4", 1540 | ] 1541 | 1542 | [[package]] 1543 | name = "rand_chacha" 1544 | version = "0.2.2" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 1547 | dependencies = [ 1548 | "ppv-lite86", 1549 | "rand_core 0.5.1", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "rand_chacha" 1554 | version = "0.3.1" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1557 | dependencies = [ 1558 | "ppv-lite86", 1559 | "rand_core 0.6.4", 1560 | ] 1561 | 1562 | [[package]] 1563 | name = "rand_core" 1564 | version = "0.5.1" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1567 | dependencies = [ 1568 | "getrandom 0.1.16", 1569 | ] 1570 | 1571 | [[package]] 1572 | name = "rand_core" 1573 | version = "0.6.4" 1574 | source = "registry+https://github.com/rust-lang/crates.io-index" 1575 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1576 | dependencies = [ 1577 | "getrandom 0.2.15", 1578 | ] 1579 | 1580 | [[package]] 1581 | name = "rand_hc" 1582 | version = "0.2.0" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1585 | dependencies = [ 1586 | "rand_core 0.5.1", 1587 | ] 1588 | 1589 | [[package]] 1590 | name = "rand_xoshiro" 1591 | version = "0.6.0" 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" 1593 | checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" 1594 | dependencies = [ 1595 | "rand_core 0.6.4", 1596 | ] 1597 | 1598 | [[package]] 1599 | name = "rayon" 1600 | version = "1.10.0" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1603 | dependencies = [ 1604 | "either", 1605 | "rayon-core", 1606 | ] 1607 | 1608 | [[package]] 1609 | name = "rayon-core" 1610 | version = "1.12.1" 1611 | source = "registry+https://github.com/rust-lang/crates.io-index" 1612 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1613 | dependencies = [ 1614 | "crossbeam-deque", 1615 | "crossbeam-utils", 1616 | ] 1617 | 1618 | [[package]] 1619 | name = "redox_syscall" 1620 | version = "0.5.1" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" 1623 | dependencies = [ 1624 | "bitflags 2.5.0", 1625 | ] 1626 | 1627 | [[package]] 1628 | name = "regex" 1629 | version = "1.10.4" 1630 | source = "registry+https://github.com/rust-lang/crates.io-index" 1631 | checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" 1632 | dependencies = [ 1633 | "aho-corasick", 1634 | "memchr", 1635 | "regex-automata", 1636 | "regex-syntax", 1637 | ] 1638 | 1639 | [[package]] 1640 | name = "regex-automata" 1641 | version = "0.4.6" 1642 | source = "registry+https://github.com/rust-lang/crates.io-index" 1643 | checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" 1644 | dependencies = [ 1645 | "aho-corasick", 1646 | "memchr", 1647 | "regex-syntax", 1648 | ] 1649 | 1650 | [[package]] 1651 | name = "regex-syntax" 1652 | version = "0.8.3" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" 1655 | 1656 | [[package]] 1657 | name = "rmp" 1658 | version = "0.8.14" 1659 | source = "registry+https://github.com/rust-lang/crates.io-index" 1660 | checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" 1661 | dependencies = [ 1662 | "byteorder", 1663 | "num-traits", 1664 | "paste", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "rmp-serde" 1669 | version = "1.3.0" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" 1672 | dependencies = [ 1673 | "byteorder", 1674 | "rmp", 1675 | "serde", 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "rustc-hash" 1680 | version = "1.1.0" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1683 | 1684 | [[package]] 1685 | name = "rustc_version" 1686 | version = "0.4.0" 1687 | source = "registry+https://github.com/rust-lang/crates.io-index" 1688 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1689 | dependencies = [ 1690 | "semver", 1691 | ] 1692 | 1693 | [[package]] 1694 | name = "rustversion" 1695 | version = "1.0.17" 1696 | source = "registry+https://github.com/rust-lang/crates.io-index" 1697 | checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" 1698 | 1699 | [[package]] 1700 | name = "ryu" 1701 | version = "1.0.18" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1704 | 1705 | [[package]] 1706 | name = "scopeguard" 1707 | version = "1.2.0" 1708 | source = "registry+https://github.com/rust-lang/crates.io-index" 1709 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1710 | 1711 | [[package]] 1712 | name = "semver" 1713 | version = "1.0.23" 1714 | source = "registry+https://github.com/rust-lang/crates.io-index" 1715 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 1716 | 1717 | [[package]] 1718 | name = "serde" 1719 | version = "1.0.203" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" 1722 | dependencies = [ 1723 | "serde_derive", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "serde_bytes" 1728 | version = "0.11.14" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" 1731 | dependencies = [ 1732 | "serde", 1733 | ] 1734 | 1735 | [[package]] 1736 | name = "serde_derive" 1737 | version = "1.0.203" 1738 | source = "registry+https://github.com/rust-lang/crates.io-index" 1739 | checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" 1740 | dependencies = [ 1741 | "proc-macro2", 1742 | "quote", 1743 | "syn 2.0.66", 1744 | ] 1745 | 1746 | [[package]] 1747 | name = "serde_json" 1748 | version = "1.0.117" 1749 | source = "registry+https://github.com/rust-lang/crates.io-index" 1750 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 1751 | dependencies = [ 1752 | "itoa", 1753 | "ryu", 1754 | "serde", 1755 | ] 1756 | 1757 | [[package]] 1758 | name = "serde_with" 1759 | version = "2.3.3" 1760 | source = "registry+https://github.com/rust-lang/crates.io-index" 1761 | checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" 1762 | dependencies = [ 1763 | "serde", 1764 | "serde_with_macros", 1765 | ] 1766 | 1767 | [[package]] 1768 | name = "serde_with_macros" 1769 | version = "2.3.3" 1770 | source = "registry+https://github.com/rust-lang/crates.io-index" 1771 | checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" 1772 | dependencies = [ 1773 | "darling", 1774 | "proc-macro2", 1775 | "quote", 1776 | "syn 2.0.66", 1777 | ] 1778 | 1779 | [[package]] 1780 | name = "sha2" 1781 | version = "0.9.9" 1782 | source = "registry+https://github.com/rust-lang/crates.io-index" 1783 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1784 | dependencies = [ 1785 | "block-buffer 0.9.0", 1786 | "cfg-if", 1787 | "cpufeatures", 1788 | "digest 0.9.0", 1789 | "opaque-debug", 1790 | ] 1791 | 1792 | [[package]] 1793 | name = "sha2" 1794 | version = "0.10.8" 1795 | source = "registry+https://github.com/rust-lang/crates.io-index" 1796 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1797 | dependencies = [ 1798 | "cfg-if", 1799 | "cpufeatures", 1800 | "digest 0.10.7", 1801 | ] 1802 | 1803 | [[package]] 1804 | name = "sha3" 1805 | version = "0.9.1" 1806 | source = "registry+https://github.com/rust-lang/crates.io-index" 1807 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 1808 | dependencies = [ 1809 | "block-buffer 0.9.0", 1810 | "digest 0.9.0", 1811 | "keccak", 1812 | "opaque-debug", 1813 | ] 1814 | 1815 | [[package]] 1816 | name = "sha3" 1817 | version = "0.10.8" 1818 | source = "registry+https://github.com/rust-lang/crates.io-index" 1819 | checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" 1820 | dependencies = [ 1821 | "digest 0.10.7", 1822 | "keccak", 1823 | ] 1824 | 1825 | [[package]] 1826 | name = "shank" 1827 | version = "0.0.11" 1828 | source = "registry+https://github.com/rust-lang/crates.io-index" 1829 | checksum = "b63e565b5e95ad88ab38f312e89444c749360641c509ef2de0093b49f55974a5" 1830 | dependencies = [ 1831 | "shank_macro", 1832 | ] 1833 | 1834 | [[package]] 1835 | name = "shank_macro" 1836 | version = "0.0.11" 1837 | source = "registry+https://github.com/rust-lang/crates.io-index" 1838 | checksum = "63927d22a1e8b74bda98cc6e151fcdf178b7abb0dc6c4f81e0bbf5ffe2fc4ec8" 1839 | dependencies = [ 1840 | "proc-macro2", 1841 | "quote", 1842 | "shank_macro_impl", 1843 | "syn 1.0.109", 1844 | ] 1845 | 1846 | [[package]] 1847 | name = "shank_macro_impl" 1848 | version = "0.0.11" 1849 | source = "registry+https://github.com/rust-lang/crates.io-index" 1850 | checksum = "40ce03403df682f80f4dc1efafa87a4d0cb89b03726d0565e6364bdca5b9a441" 1851 | dependencies = [ 1852 | "anyhow", 1853 | "proc-macro2", 1854 | "quote", 1855 | "serde", 1856 | "syn 1.0.109", 1857 | ] 1858 | 1859 | [[package]] 1860 | name = "signature" 1861 | version = "1.6.4" 1862 | source = "registry+https://github.com/rust-lang/crates.io-index" 1863 | checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" 1864 | 1865 | [[package]] 1866 | name = "sized-chunks" 1867 | version = "0.6.5" 1868 | source = "registry+https://github.com/rust-lang/crates.io-index" 1869 | checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" 1870 | dependencies = [ 1871 | "bitmaps", 1872 | "typenum", 1873 | ] 1874 | 1875 | [[package]] 1876 | name = "smallvec" 1877 | version = "1.13.2" 1878 | source = "registry+https://github.com/rust-lang/crates.io-index" 1879 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1880 | 1881 | [[package]] 1882 | name = "solana-frozen-abi" 1883 | version = "1.16.25" 1884 | source = "registry+https://github.com/rust-lang/crates.io-index" 1885 | checksum = "a7077f6495ccc313dff49c3e3f3ed03e49058258bae7fee77ac29ba0a474ba82" 1886 | dependencies = [ 1887 | "ahash 0.8.6", 1888 | "blake3", 1889 | "block-buffer 0.10.4", 1890 | "bs58 0.4.0", 1891 | "bv", 1892 | "byteorder", 1893 | "cc", 1894 | "either", 1895 | "generic-array", 1896 | "getrandom 0.1.16", 1897 | "im", 1898 | "lazy_static", 1899 | "log", 1900 | "memmap2", 1901 | "once_cell", 1902 | "rand_core 0.6.4", 1903 | "rustc_version", 1904 | "serde", 1905 | "serde_bytes", 1906 | "serde_derive", 1907 | "serde_json", 1908 | "sha2 0.10.8", 1909 | "solana-frozen-abi-macro", 1910 | "subtle", 1911 | "thiserror", 1912 | ] 1913 | 1914 | [[package]] 1915 | name = "solana-frozen-abi-macro" 1916 | version = "1.16.25" 1917 | source = "registry+https://github.com/rust-lang/crates.io-index" 1918 | checksum = "f516f992211a2ab70de5c367190575c97e02d156f9f1d8b76886d673f30e88a2" 1919 | dependencies = [ 1920 | "proc-macro2", 1921 | "quote", 1922 | "rustc_version", 1923 | "syn 2.0.66", 1924 | ] 1925 | 1926 | [[package]] 1927 | name = "solana-logger" 1928 | version = "1.16.25" 1929 | source = "registry+https://github.com/rust-lang/crates.io-index" 1930 | checksum = "7b64def674bfaa4a3f8be7ba19c03c9caec4ec028ba62b9a427ec1bf608a2486" 1931 | dependencies = [ 1932 | "env_logger", 1933 | "lazy_static", 1934 | "log", 1935 | ] 1936 | 1937 | [[package]] 1938 | name = "solana-program" 1939 | version = "1.16.25" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "3e92350aa5b42564681655331e7e0b9d5c99a442de317ceeb4741efbbe9a6c05" 1942 | dependencies = [ 1943 | "ark-bn254", 1944 | "ark-ec", 1945 | "ark-ff", 1946 | "ark-serialize", 1947 | "array-bytes", 1948 | "base64 0.21.7", 1949 | "bincode", 1950 | "bitflags 1.3.2", 1951 | "blake3", 1952 | "borsh 0.10.3", 1953 | "borsh 0.9.3", 1954 | "bs58 0.4.0", 1955 | "bv", 1956 | "bytemuck", 1957 | "cc", 1958 | "console_error_panic_hook", 1959 | "console_log", 1960 | "curve25519-dalek", 1961 | "getrandom 0.2.15", 1962 | "itertools", 1963 | "js-sys", 1964 | "lazy_static", 1965 | "libc", 1966 | "libsecp256k1", 1967 | "log", 1968 | "memoffset", 1969 | "num-bigint", 1970 | "num-derive 0.3.3", 1971 | "num-traits", 1972 | "parking_lot", 1973 | "rand 0.7.3", 1974 | "rand_chacha 0.2.2", 1975 | "rustc_version", 1976 | "rustversion", 1977 | "serde", 1978 | "serde_bytes", 1979 | "serde_derive", 1980 | "serde_json", 1981 | "sha2 0.10.8", 1982 | "sha3 0.10.8", 1983 | "solana-frozen-abi", 1984 | "solana-frozen-abi-macro", 1985 | "solana-sdk-macro", 1986 | "thiserror", 1987 | "tiny-bip39", 1988 | "wasm-bindgen", 1989 | "zeroize", 1990 | ] 1991 | 1992 | [[package]] 1993 | name = "solana-sdk" 1994 | version = "1.16.25" 1995 | source = "registry+https://github.com/rust-lang/crates.io-index" 1996 | checksum = "2087e15c92d4d6b3f085dc12fbe9614141c811f90a54cc418240ac30b608133f" 1997 | dependencies = [ 1998 | "assert_matches", 1999 | "base64 0.21.7", 2000 | "bincode", 2001 | "bitflags 1.3.2", 2002 | "borsh 0.10.3", 2003 | "bs58 0.4.0", 2004 | "bytemuck", 2005 | "byteorder", 2006 | "chrono", 2007 | "derivation-path", 2008 | "digest 0.10.7", 2009 | "ed25519-dalek", 2010 | "ed25519-dalek-bip32", 2011 | "generic-array", 2012 | "hmac 0.12.1", 2013 | "itertools", 2014 | "js-sys", 2015 | "lazy_static", 2016 | "libsecp256k1", 2017 | "log", 2018 | "memmap2", 2019 | "num-derive 0.3.3", 2020 | "num-traits", 2021 | "num_enum 0.6.1", 2022 | "pbkdf2 0.11.0", 2023 | "qstring", 2024 | "rand 0.7.3", 2025 | "rand_chacha 0.2.2", 2026 | "rustc_version", 2027 | "rustversion", 2028 | "serde", 2029 | "serde_bytes", 2030 | "serde_derive", 2031 | "serde_json", 2032 | "serde_with", 2033 | "sha2 0.10.8", 2034 | "sha3 0.10.8", 2035 | "solana-frozen-abi", 2036 | "solana-frozen-abi-macro", 2037 | "solana-logger", 2038 | "solana-program", 2039 | "solana-sdk-macro", 2040 | "thiserror", 2041 | "uriparse", 2042 | "wasm-bindgen", 2043 | ] 2044 | 2045 | [[package]] 2046 | name = "solana-sdk-macro" 2047 | version = "1.16.25" 2048 | source = "registry+https://github.com/rust-lang/crates.io-index" 2049 | checksum = "2e0e0e7ee984b0f9179a1d4f4e9e67ce675de2324b5a98b61d2bdb61be3c19bb" 2050 | dependencies = [ 2051 | "bs58 0.4.0", 2052 | "proc-macro2", 2053 | "quote", 2054 | "rustversion", 2055 | "syn 2.0.66", 2056 | ] 2057 | 2058 | [[package]] 2059 | name = "solana-zk-token-sdk" 2060 | version = "1.16.25" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "1457c85ab70a518438b9ac2b0c56037b9f6693060dfb617bbb93c7116e4f0c22" 2063 | dependencies = [ 2064 | "aes-gcm-siv", 2065 | "base64 0.21.7", 2066 | "bincode", 2067 | "bytemuck", 2068 | "byteorder", 2069 | "curve25519-dalek", 2070 | "getrandom 0.1.16", 2071 | "itertools", 2072 | "lazy_static", 2073 | "merlin", 2074 | "num-derive 0.3.3", 2075 | "num-traits", 2076 | "rand 0.7.3", 2077 | "serde", 2078 | "serde_json", 2079 | "sha3 0.9.1", 2080 | "solana-program", 2081 | "solana-sdk", 2082 | "subtle", 2083 | "thiserror", 2084 | "zeroize", 2085 | ] 2086 | 2087 | [[package]] 2088 | name = "spl-associated-token-account" 2089 | version = "2.2.0" 2090 | source = "registry+https://github.com/rust-lang/crates.io-index" 2091 | checksum = "385e31c29981488f2820b2022d8e731aae3b02e6e18e2fd854e4c9a94dc44fc3" 2092 | dependencies = [ 2093 | "assert_matches", 2094 | "borsh 0.10.3", 2095 | "num-derive 0.4.2", 2096 | "num-traits", 2097 | "solana-program", 2098 | "spl-token", 2099 | "spl-token-2022 0.9.0", 2100 | "thiserror", 2101 | ] 2102 | 2103 | [[package]] 2104 | name = "spl-discriminator" 2105 | version = "0.1.0" 2106 | source = "registry+https://github.com/rust-lang/crates.io-index" 2107 | checksum = "cce5d563b58ef1bb2cdbbfe0dfb9ffdc24903b10ae6a4df2d8f425ece375033f" 2108 | dependencies = [ 2109 | "bytemuck", 2110 | "solana-program", 2111 | "spl-discriminator-derive", 2112 | ] 2113 | 2114 | [[package]] 2115 | name = "spl-discriminator-derive" 2116 | version = "0.1.2" 2117 | source = "registry+https://github.com/rust-lang/crates.io-index" 2118 | checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" 2119 | dependencies = [ 2120 | "quote", 2121 | "spl-discriminator-syn", 2122 | "syn 2.0.66", 2123 | ] 2124 | 2125 | [[package]] 2126 | name = "spl-discriminator-syn" 2127 | version = "0.1.2" 2128 | source = "registry+https://github.com/rust-lang/crates.io-index" 2129 | checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63" 2130 | dependencies = [ 2131 | "proc-macro2", 2132 | "quote", 2133 | "sha2 0.10.8", 2134 | "syn 2.0.66", 2135 | "thiserror", 2136 | ] 2137 | 2138 | [[package]] 2139 | name = "spl-memo" 2140 | version = "4.0.0" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "f0f180b03318c3dbab3ef4e1e4d46d5211ae3c780940dd0a28695aba4b59a75a" 2143 | dependencies = [ 2144 | "solana-program", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "spl-pod" 2149 | version = "0.1.0" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "2881dddfca792737c0706fa0175345ab282b1b0879c7d877bad129645737c079" 2152 | dependencies = [ 2153 | "borsh 0.10.3", 2154 | "bytemuck", 2155 | "solana-program", 2156 | "solana-zk-token-sdk", 2157 | "spl-program-error", 2158 | ] 2159 | 2160 | [[package]] 2161 | name = "spl-program-error" 2162 | version = "0.3.0" 2163 | source = "registry+https://github.com/rust-lang/crates.io-index" 2164 | checksum = "249e0318493b6bcf27ae9902600566c689b7dfba9f1bdff5893e92253374e78c" 2165 | dependencies = [ 2166 | "num-derive 0.4.2", 2167 | "num-traits", 2168 | "solana-program", 2169 | "spl-program-error-derive", 2170 | "thiserror", 2171 | ] 2172 | 2173 | [[package]] 2174 | name = "spl-program-error-derive" 2175 | version = "0.3.2" 2176 | source = "registry+https://github.com/rust-lang/crates.io-index" 2177 | checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474" 2178 | dependencies = [ 2179 | "proc-macro2", 2180 | "quote", 2181 | "sha2 0.10.8", 2182 | "syn 2.0.66", 2183 | ] 2184 | 2185 | [[package]] 2186 | name = "spl-tlv-account-resolution" 2187 | version = "0.3.0" 2188 | source = "registry+https://github.com/rust-lang/crates.io-index" 2189 | checksum = "7960b1e1a41e4238807fca0865e72a341b668137a3f2ddcd770d04fd1b374c96" 2190 | dependencies = [ 2191 | "bytemuck", 2192 | "solana-program", 2193 | "spl-discriminator", 2194 | "spl-pod", 2195 | "spl-program-error", 2196 | "spl-type-length-value", 2197 | ] 2198 | 2199 | [[package]] 2200 | name = "spl-tlv-account-resolution" 2201 | version = "0.4.0" 2202 | source = "registry+https://github.com/rust-lang/crates.io-index" 2203 | checksum = "062e148d3eab7b165582757453632ffeef490c02c86a48bfdb4988f63eefb3b9" 2204 | dependencies = [ 2205 | "bytemuck", 2206 | "solana-program", 2207 | "spl-discriminator", 2208 | "spl-pod", 2209 | "spl-program-error", 2210 | "spl-type-length-value", 2211 | ] 2212 | 2213 | [[package]] 2214 | name = "spl-token" 2215 | version = "4.0.0" 2216 | source = "registry+https://github.com/rust-lang/crates.io-index" 2217 | checksum = "08459ba1b8f7c1020b4582c4edf0f5c7511a5e099a7a97570c9698d4f2337060" 2218 | dependencies = [ 2219 | "arrayref", 2220 | "bytemuck", 2221 | "num-derive 0.3.3", 2222 | "num-traits", 2223 | "num_enum 0.6.1", 2224 | "solana-program", 2225 | "thiserror", 2226 | ] 2227 | 2228 | [[package]] 2229 | name = "spl-token-2022" 2230 | version = "0.8.0" 2231 | source = "registry+https://github.com/rust-lang/crates.io-index" 2232 | checksum = "84fc0c7a763c3f53fa12581d07ed324548a771bb648a1217e4f330b1d0a59331" 2233 | dependencies = [ 2234 | "arrayref", 2235 | "bytemuck", 2236 | "num-derive 0.4.2", 2237 | "num-traits", 2238 | "num_enum 0.7.2", 2239 | "solana-program", 2240 | "solana-zk-token-sdk", 2241 | "spl-memo", 2242 | "spl-pod", 2243 | "spl-token", 2244 | "spl-token-metadata-interface", 2245 | "spl-transfer-hook-interface 0.2.0", 2246 | "spl-type-length-value", 2247 | "thiserror", 2248 | ] 2249 | 2250 | [[package]] 2251 | name = "spl-token-2022" 2252 | version = "0.9.0" 2253 | source = "registry+https://github.com/rust-lang/crates.io-index" 2254 | checksum = "e4abf34a65ba420584a0c35f3903f8d727d1f13ababbdc3f714c6b065a686e86" 2255 | dependencies = [ 2256 | "arrayref", 2257 | "bytemuck", 2258 | "num-derive 0.4.2", 2259 | "num-traits", 2260 | "num_enum 0.7.2", 2261 | "solana-program", 2262 | "solana-zk-token-sdk", 2263 | "spl-memo", 2264 | "spl-pod", 2265 | "spl-token", 2266 | "spl-token-metadata-interface", 2267 | "spl-transfer-hook-interface 0.3.0", 2268 | "spl-type-length-value", 2269 | "thiserror", 2270 | ] 2271 | 2272 | [[package]] 2273 | name = "spl-token-metadata-interface" 2274 | version = "0.2.0" 2275 | source = "registry+https://github.com/rust-lang/crates.io-index" 2276 | checksum = "4c16ce3ba6979645fb7627aa1e435576172dd63088dc7848cb09aa331fa1fe4f" 2277 | dependencies = [ 2278 | "borsh 0.10.3", 2279 | "solana-program", 2280 | "spl-discriminator", 2281 | "spl-pod", 2282 | "spl-program-error", 2283 | "spl-type-length-value", 2284 | ] 2285 | 2286 | [[package]] 2287 | name = "spl-transfer-hook-interface" 2288 | version = "0.2.0" 2289 | source = "registry+https://github.com/rust-lang/crates.io-index" 2290 | checksum = "f7489940049417ae5ce909314bead0670e2a5ea5c82d43ab96dc15c8fcbbccba" 2291 | dependencies = [ 2292 | "arrayref", 2293 | "bytemuck", 2294 | "solana-program", 2295 | "spl-discriminator", 2296 | "spl-pod", 2297 | "spl-program-error", 2298 | "spl-tlv-account-resolution 0.3.0", 2299 | "spl-type-length-value", 2300 | ] 2301 | 2302 | [[package]] 2303 | name = "spl-transfer-hook-interface" 2304 | version = "0.3.0" 2305 | source = "registry+https://github.com/rust-lang/crates.io-index" 2306 | checksum = "051d31803f873cabe71aec3c1b849f35248beae5d19a347d93a5c9cccc5d5a9b" 2307 | dependencies = [ 2308 | "arrayref", 2309 | "bytemuck", 2310 | "solana-program", 2311 | "spl-discriminator", 2312 | "spl-pod", 2313 | "spl-program-error", 2314 | "spl-tlv-account-resolution 0.4.0", 2315 | "spl-type-length-value", 2316 | ] 2317 | 2318 | [[package]] 2319 | name = "spl-type-length-value" 2320 | version = "0.3.0" 2321 | source = "registry+https://github.com/rust-lang/crates.io-index" 2322 | checksum = "a468e6f6371f9c69aae760186ea9f1a01c2908351b06a5e0026d21cfc4d7ecac" 2323 | dependencies = [ 2324 | "bytemuck", 2325 | "solana-program", 2326 | "spl-discriminator", 2327 | "spl-pod", 2328 | "spl-program-error", 2329 | ] 2330 | 2331 | [[package]] 2332 | name = "strsim" 2333 | version = "0.11.1" 2334 | source = "registry+https://github.com/rust-lang/crates.io-index" 2335 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2336 | 2337 | [[package]] 2338 | name = "subtle" 2339 | version = "2.4.1" 2340 | source = "registry+https://github.com/rust-lang/crates.io-index" 2341 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 2342 | 2343 | [[package]] 2344 | name = "syn" 2345 | version = "1.0.109" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2348 | dependencies = [ 2349 | "proc-macro2", 2350 | "quote", 2351 | "unicode-ident", 2352 | ] 2353 | 2354 | [[package]] 2355 | name = "syn" 2356 | version = "2.0.66" 2357 | source = "registry+https://github.com/rust-lang/crates.io-index" 2358 | checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" 2359 | dependencies = [ 2360 | "proc-macro2", 2361 | "quote", 2362 | "unicode-ident", 2363 | ] 2364 | 2365 | [[package]] 2366 | name = "termcolor" 2367 | version = "1.4.1" 2368 | source = "registry+https://github.com/rust-lang/crates.io-index" 2369 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2370 | dependencies = [ 2371 | "winapi-util", 2372 | ] 2373 | 2374 | [[package]] 2375 | name = "thiserror" 2376 | version = "1.0.61" 2377 | source = "registry+https://github.com/rust-lang/crates.io-index" 2378 | checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" 2379 | dependencies = [ 2380 | "thiserror-impl", 2381 | ] 2382 | 2383 | [[package]] 2384 | name = "thiserror-impl" 2385 | version = "1.0.61" 2386 | source = "registry+https://github.com/rust-lang/crates.io-index" 2387 | checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" 2388 | dependencies = [ 2389 | "proc-macro2", 2390 | "quote", 2391 | "syn 2.0.66", 2392 | ] 2393 | 2394 | [[package]] 2395 | name = "tiny-bip39" 2396 | version = "0.8.2" 2397 | source = "registry+https://github.com/rust-lang/crates.io-index" 2398 | checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" 2399 | dependencies = [ 2400 | "anyhow", 2401 | "hmac 0.8.1", 2402 | "once_cell", 2403 | "pbkdf2 0.4.0", 2404 | "rand 0.7.3", 2405 | "rustc-hash", 2406 | "sha2 0.9.9", 2407 | "thiserror", 2408 | "unicode-normalization", 2409 | "wasm-bindgen", 2410 | "zeroize", 2411 | ] 2412 | 2413 | [[package]] 2414 | name = "tinyvec" 2415 | version = "1.6.0" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2418 | dependencies = [ 2419 | "tinyvec_macros", 2420 | ] 2421 | 2422 | [[package]] 2423 | name = "tinyvec_macros" 2424 | version = "0.1.1" 2425 | source = "registry+https://github.com/rust-lang/crates.io-index" 2426 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2427 | 2428 | [[package]] 2429 | name = "toml" 2430 | version = "0.5.11" 2431 | source = "registry+https://github.com/rust-lang/crates.io-index" 2432 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 2433 | dependencies = [ 2434 | "serde", 2435 | ] 2436 | 2437 | [[package]] 2438 | name = "toml_datetime" 2439 | version = "0.6.1" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" 2442 | 2443 | [[package]] 2444 | name = "toml_edit" 2445 | version = "0.19.8" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13" 2448 | dependencies = [ 2449 | "indexmap", 2450 | "toml_datetime", 2451 | "winnow", 2452 | ] 2453 | 2454 | [[package]] 2455 | name = "typenum" 2456 | version = "1.17.0" 2457 | source = "registry+https://github.com/rust-lang/crates.io-index" 2458 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2459 | 2460 | [[package]] 2461 | name = "unicode-ident" 2462 | version = "1.0.12" 2463 | source = "registry+https://github.com/rust-lang/crates.io-index" 2464 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 2465 | 2466 | [[package]] 2467 | name = "unicode-normalization" 2468 | version = "0.1.23" 2469 | source = "registry+https://github.com/rust-lang/crates.io-index" 2470 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 2471 | dependencies = [ 2472 | "tinyvec", 2473 | ] 2474 | 2475 | [[package]] 2476 | name = "unicode-segmentation" 2477 | version = "1.11.0" 2478 | source = "registry+https://github.com/rust-lang/crates.io-index" 2479 | checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" 2480 | 2481 | [[package]] 2482 | name = "universal-hash" 2483 | version = "0.4.1" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" 2486 | dependencies = [ 2487 | "generic-array", 2488 | "subtle", 2489 | ] 2490 | 2491 | [[package]] 2492 | name = "uriparse" 2493 | version = "0.6.4" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" 2496 | dependencies = [ 2497 | "fnv", 2498 | "lazy_static", 2499 | ] 2500 | 2501 | [[package]] 2502 | name = "version_check" 2503 | version = "0.9.4" 2504 | source = "registry+https://github.com/rust-lang/crates.io-index" 2505 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2506 | 2507 | [[package]] 2508 | name = "wasi" 2509 | version = "0.9.0+wasi-snapshot-preview1" 2510 | source = "registry+https://github.com/rust-lang/crates.io-index" 2511 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 2512 | 2513 | [[package]] 2514 | name = "wasi" 2515 | version = "0.11.0+wasi-snapshot-preview1" 2516 | source = "registry+https://github.com/rust-lang/crates.io-index" 2517 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2518 | 2519 | [[package]] 2520 | name = "wasm-bindgen" 2521 | version = "0.2.92" 2522 | source = "registry+https://github.com/rust-lang/crates.io-index" 2523 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 2524 | dependencies = [ 2525 | "cfg-if", 2526 | "wasm-bindgen-macro", 2527 | ] 2528 | 2529 | [[package]] 2530 | name = "wasm-bindgen-backend" 2531 | version = "0.2.92" 2532 | source = "registry+https://github.com/rust-lang/crates.io-index" 2533 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 2534 | dependencies = [ 2535 | "bumpalo", 2536 | "log", 2537 | "once_cell", 2538 | "proc-macro2", 2539 | "quote", 2540 | "syn 2.0.66", 2541 | "wasm-bindgen-shared", 2542 | ] 2543 | 2544 | [[package]] 2545 | name = "wasm-bindgen-macro" 2546 | version = "0.2.92" 2547 | source = "registry+https://github.com/rust-lang/crates.io-index" 2548 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 2549 | dependencies = [ 2550 | "quote", 2551 | "wasm-bindgen-macro-support", 2552 | ] 2553 | 2554 | [[package]] 2555 | name = "wasm-bindgen-macro-support" 2556 | version = "0.2.92" 2557 | source = "registry+https://github.com/rust-lang/crates.io-index" 2558 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 2559 | dependencies = [ 2560 | "proc-macro2", 2561 | "quote", 2562 | "syn 2.0.66", 2563 | "wasm-bindgen-backend", 2564 | "wasm-bindgen-shared", 2565 | ] 2566 | 2567 | [[package]] 2568 | name = "wasm-bindgen-shared" 2569 | version = "0.2.92" 2570 | source = "registry+https://github.com/rust-lang/crates.io-index" 2571 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 2572 | 2573 | [[package]] 2574 | name = "web-sys" 2575 | version = "0.3.69" 2576 | source = "registry+https://github.com/rust-lang/crates.io-index" 2577 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 2578 | dependencies = [ 2579 | "js-sys", 2580 | "wasm-bindgen", 2581 | ] 2582 | 2583 | [[package]] 2584 | name = "winapi" 2585 | version = "0.3.9" 2586 | source = "registry+https://github.com/rust-lang/crates.io-index" 2587 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2588 | dependencies = [ 2589 | "winapi-i686-pc-windows-gnu", 2590 | "winapi-x86_64-pc-windows-gnu", 2591 | ] 2592 | 2593 | [[package]] 2594 | name = "winapi-i686-pc-windows-gnu" 2595 | version = "0.4.0" 2596 | source = "registry+https://github.com/rust-lang/crates.io-index" 2597 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2598 | 2599 | [[package]] 2600 | name = "winapi-util" 2601 | version = "0.1.8" 2602 | source = "registry+https://github.com/rust-lang/crates.io-index" 2603 | checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" 2604 | dependencies = [ 2605 | "windows-sys", 2606 | ] 2607 | 2608 | [[package]] 2609 | name = "winapi-x86_64-pc-windows-gnu" 2610 | version = "0.4.0" 2611 | source = "registry+https://github.com/rust-lang/crates.io-index" 2612 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2613 | 2614 | [[package]] 2615 | name = "windows-sys" 2616 | version = "0.52.0" 2617 | source = "registry+https://github.com/rust-lang/crates.io-index" 2618 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2619 | dependencies = [ 2620 | "windows-targets", 2621 | ] 2622 | 2623 | [[package]] 2624 | name = "windows-targets" 2625 | version = "0.52.5" 2626 | source = "registry+https://github.com/rust-lang/crates.io-index" 2627 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 2628 | dependencies = [ 2629 | "windows_aarch64_gnullvm", 2630 | "windows_aarch64_msvc", 2631 | "windows_i686_gnu", 2632 | "windows_i686_gnullvm", 2633 | "windows_i686_msvc", 2634 | "windows_x86_64_gnu", 2635 | "windows_x86_64_gnullvm", 2636 | "windows_x86_64_msvc", 2637 | ] 2638 | 2639 | [[package]] 2640 | name = "windows_aarch64_gnullvm" 2641 | version = "0.52.5" 2642 | source = "registry+https://github.com/rust-lang/crates.io-index" 2643 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 2644 | 2645 | [[package]] 2646 | name = "windows_aarch64_msvc" 2647 | version = "0.52.5" 2648 | source = "registry+https://github.com/rust-lang/crates.io-index" 2649 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 2650 | 2651 | [[package]] 2652 | name = "windows_i686_gnu" 2653 | version = "0.52.5" 2654 | source = "registry+https://github.com/rust-lang/crates.io-index" 2655 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 2656 | 2657 | [[package]] 2658 | name = "windows_i686_gnullvm" 2659 | version = "0.52.5" 2660 | source = "registry+https://github.com/rust-lang/crates.io-index" 2661 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 2662 | 2663 | [[package]] 2664 | name = "windows_i686_msvc" 2665 | version = "0.52.5" 2666 | source = "registry+https://github.com/rust-lang/crates.io-index" 2667 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 2668 | 2669 | [[package]] 2670 | name = "windows_x86_64_gnu" 2671 | version = "0.52.5" 2672 | source = "registry+https://github.com/rust-lang/crates.io-index" 2673 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 2674 | 2675 | [[package]] 2676 | name = "windows_x86_64_gnullvm" 2677 | version = "0.52.5" 2678 | source = "registry+https://github.com/rust-lang/crates.io-index" 2679 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 2680 | 2681 | [[package]] 2682 | name = "windows_x86_64_msvc" 2683 | version = "0.52.5" 2684 | source = "registry+https://github.com/rust-lang/crates.io-index" 2685 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 2686 | 2687 | [[package]] 2688 | name = "winnow" 2689 | version = "0.4.11" 2690 | source = "registry+https://github.com/rust-lang/crates.io-index" 2691 | checksum = "656953b22bcbfb1ec8179d60734981d1904494ecc91f8a3f0ee5c7389bb8eb4b" 2692 | dependencies = [ 2693 | "memchr", 2694 | ] 2695 | 2696 | [[package]] 2697 | name = "zerocopy" 2698 | version = "0.7.34" 2699 | source = "registry+https://github.com/rust-lang/crates.io-index" 2700 | checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" 2701 | dependencies = [ 2702 | "zerocopy-derive", 2703 | ] 2704 | 2705 | [[package]] 2706 | name = "zerocopy-derive" 2707 | version = "0.7.34" 2708 | source = "registry+https://github.com/rust-lang/crates.io-index" 2709 | checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" 2710 | dependencies = [ 2711 | "proc-macro2", 2712 | "quote", 2713 | "syn 2.0.66", 2714 | ] 2715 | 2716 | [[package]] 2717 | name = "zeroize" 2718 | version = "1.3.0" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 2721 | dependencies = [ 2722 | "zeroize_derive", 2723 | ] 2724 | 2725 | [[package]] 2726 | name = "zeroize_derive" 2727 | version = "1.4.2" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" 2730 | dependencies = [ 2731 | "proc-macro2", 2732 | "quote", 2733 | "syn 2.0.66", 2734 | ] 2735 | --------------------------------------------------------------------------------