├── programs └── nft-lend-borrow │ ├── Xargo.toml │ ├── src │ ├── states │ │ ├── mod.rs │ │ ├── vault.rs │ │ ├── collection_pool.rs │ │ ├── offer.rs │ │ └── active_loan.rs │ ├── errors.rs │ ├── instructions │ │ ├── mod.rs │ │ ├── create_pool.rs │ │ ├── withdraw_offer.rs │ │ ├── offer_loan.rs │ │ ├── liquidate.rs │ │ ├── repay.rs │ │ └── borrow.rs │ └── lib.rs │ └── Cargo.toml ├── .gitignore ├── .prettierignore ├── Cargo.toml ├── tsconfig.json ├── Anchor.toml ├── migrations └── deploy.ts ├── package.json ├── readme.md ├── tests └── nft-lend-borrow.ts ├── yarn.lock └── Cargo.lock /programs/nft-lend-borrow/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | **/*.rs.bk 6 | node_modules 7 | test-ledger 8 | .yarn 9 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | node_modules 6 | dist 7 | build 8 | test-ledger 9 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/states/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod active_loan; 2 | pub mod collection_pool; 3 | pub mod offer; 4 | pub mod vault; 5 | 6 | pub use active_loan::*; 7 | pub use collection_pool::*; 8 | pub use offer::*; 9 | pub use vault::*; 10 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/states/vault.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | pub struct Vault { 5 | /// The offer this vault is linked to 6 | pub offer: Pubkey, 7 | 8 | /// Bump 9 | pub bump: u8, 10 | } 11 | 12 | impl Vault { 13 | pub const LEN: usize = 8 + 32 + 1; 14 | } 15 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/errors.rs: -------------------------------------------------------------------------------- 1 | pub use anchor_lang::prelude::*; 2 | 3 | #[error_code] 4 | pub enum ErrorCodes { 5 | #[msg("Loan Already Taken")] 6 | LoanAlreadyTaken, 7 | #[msg("Loan Already Repaid")] 8 | LoanAlreadyRepaid, 9 | #[msg("Cannot Liquidate Loan Yet")] 10 | CannotLiquidateYet, 11 | } 12 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/instructions/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod borrow; 2 | pub mod create_pool; 3 | pub mod liquidate; 4 | pub mod offer_loan; 5 | pub mod repay; 6 | pub mod withdraw_offer; 7 | 8 | pub use borrow::*; 9 | pub use create_pool::*; 10 | pub use liquidate::*; 11 | pub use offer_loan::*; 12 | pub use repay::*; 13 | pub use withdraw_offer::*; 14 | -------------------------------------------------------------------------------- /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 | } 10 | } 11 | -------------------------------------------------------------------------------- /Anchor.toml: -------------------------------------------------------------------------------- 1 | [features] 2 | seeds = false 3 | skip-lint = false 4 | 5 | [programs.devnet] 6 | nft_lend_borrow = "" 7 | 8 | [registry] 9 | url = "https://api.apr.dev" 10 | 11 | [provider] 12 | cluster = "Localnet" 13 | wallet = "~/.config/solana/id.json" 14 | 15 | [scripts] 16 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 17 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "nft-lend-borrow" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "nft_lend_borrow" 10 | 11 | [features] 12 | no-entrypoint = [] 13 | no-idl = [] 14 | no-log-ix-name = [] 15 | cpi = ["no-entrypoint"] 16 | default = [] 17 | 18 | [dependencies] 19 | anchor-lang = "0.28.0" 20 | anchor-spl = "0.28.0" 21 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/states/collection_pool.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | pub struct CollectionPool { 5 | /// NFT Collection ID 6 | pub collection_id: Pubkey, 7 | 8 | /// Pool Owner 9 | pub pool_owner: Pubkey, 10 | 11 | /// Loan Duration 12 | pub duration: i64, 13 | 14 | /// Total Loans 15 | pub total_offers: u64, 16 | 17 | /// Bump 18 | pub bump: u8, 19 | } 20 | 21 | impl CollectionPool { 22 | pub const LEN: usize = 8 + 32 + 32 + 8 + 8 + 1; 23 | } 24 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/states/offer.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | pub struct Offer { 5 | /// Collection 6 | pub collection: Pubkey, 7 | 8 | /// Offer Amount 9 | pub offer_lamport_amount: u64, 10 | 11 | /// Repay Amount 12 | pub repay_lamport_amount: u64, 13 | 14 | /// Lender 15 | pub lender: Pubkey, 16 | 17 | /// Loan Taken 18 | pub is_loan_taken: bool, 19 | 20 | /// Borrower 21 | pub borrower: Pubkey, 22 | 23 | /// Bump 24 | pub bump: u8, 25 | } 26 | 27 | impl Offer { 28 | pub const LEN: usize = 8 + 32 + 8 + 8 + 32 + 1 + 32 + 1; 29 | } 30 | -------------------------------------------------------------------------------- /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.28.0", 8 | "@solana/spl-token": "^0.3.8", 9 | "@solana/web3.js": "^1.77.3" 10 | }, 11 | "devDependencies": { 12 | "@types/bn.js": "^5.1.0", 13 | "@types/chai": "^4.3.0", 14 | "@types/mocha": "^9.0.0", 15 | "chai": "^4.3.4", 16 | "mocha": "^9.0.3", 17 | "prettier": "^2.6.2", 18 | "ts-mocha": "^10.0.0", 19 | "typescript": "^4.3.5" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/states/active_loan.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | pub struct ActiveLoan { 5 | /// Collection 6 | pub collection: Pubkey, 7 | 8 | /// Offer Account 9 | pub offer_account: Pubkey, 10 | 11 | /// Lender 12 | pub lender: Pubkey, 13 | 14 | /// Borrower 15 | pub borrower: Pubkey, 16 | 17 | /// NFT Mint 18 | pub mint: Pubkey, 19 | 20 | /// Loan Taken Timestamp 21 | pub loan_ts: i64, 22 | 23 | /// Repayment Timestamp 24 | pub repay_ts: i64, 25 | 26 | /// Repaid 27 | pub is_repaid: bool, 28 | 29 | /// Liquidated 30 | pub is_liquidated: bool, 31 | 32 | /// Bump 33 | pub bump: u8, 34 | } 35 | 36 | impl ActiveLoan { 37 | pub const LEN: usize = 8 + 32 + 32 + 32 + 32 + 32 + 8 + 8 + 1 + 1 + 1; 38 | } 39 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/instructions/create_pool.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::states::CollectionPool; 4 | 5 | #[derive(Accounts)] 6 | #[instruction(collection_id: Pubkey)] 7 | pub struct CreatePool<'info> { 8 | #[account( 9 | init, 10 | seeds=[b"collection-pool", collection_id.key().as_ref()], 11 | bump, 12 | payer=authority, 13 | space=CollectionPool::LEN 14 | )] 15 | pub collection_pool: Box>, 16 | 17 | #[account(mut)] 18 | pub authority: Signer<'info>, 19 | 20 | pub system_program: Program<'info, System>, 21 | } 22 | 23 | pub fn handler(ctx: Context, collection_id: Pubkey, duration: i64) -> Result<()> { 24 | let collection = &mut ctx.accounts.collection_pool; 25 | 26 | collection.collection_id = collection_id; 27 | collection.pool_owner = ctx.accounts.authority.key(); 28 | collection.duration = duration; 29 | collection.total_offers = 0; 30 | collection.bump = *ctx.bumps.get("collection_pool").unwrap(); 31 | 32 | Ok(()) 33 | } 34 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod errors; 2 | pub mod instructions; 3 | pub mod states; 4 | 5 | pub use errors::ErrorCodes; 6 | pub use instructions::*; 7 | pub use states::*; 8 | 9 | declare_id!(""); 10 | 11 | #[program] 12 | pub mod nft_lend_borrow { 13 | use super::*; 14 | 15 | pub fn create_pool( 16 | ctx: Context, 17 | collection_id: Pubkey, 18 | duration: i64, 19 | ) -> Result<()> { 20 | instructions::create_pool::handler(ctx, collection_id, duration) 21 | } 22 | 23 | pub fn offer_loan(ctx: Context, offer_amount: u64) -> Result<()> { 24 | instructions::offer_loan::handler(ctx, offer_amount) 25 | } 26 | 27 | pub fn withdraw_offer( 28 | ctx: Context, 29 | minimum_balance_for_rent_exemption: u64, 30 | ) -> Result<()> { 31 | instructions::withdraw_offer::handler( 32 | ctx, 33 | minimum_balance_for_rent_exemption, 34 | ) 35 | } 36 | 37 | pub fn borrow(ctx: Context, minimum_balance_for_rent_exemption: u64) -> Result<()> { 38 | instructions::borrow::handler(ctx, minimum_balance_for_rent_exemption) 39 | } 40 | 41 | pub fn repay(ctx: Context) -> Result<()> { 42 | instructions::repay::handler(ctx) 43 | } 44 | 45 | pub fn liquidate(ctx: Context) -> Result<()> { 46 | instructions::liquidate::handler(ctx) 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/instructions/withdraw_offer.rs: -------------------------------------------------------------------------------- 1 | pub use anchor_lang::prelude::*; 2 | 3 | use crate::states::{CollectionPool, Offer, Vault}; 4 | 5 | use crate::errors::ErrorCodes; 6 | 7 | #[derive(Accounts)] 8 | pub struct WithdrawOffer<'info> { 9 | #[account( 10 | mut, 11 | close = lender, 12 | )] 13 | pub offer_loan: Box>, 14 | 15 | #[account( 16 | mut, 17 | close = lender 18 | )] 19 | pub vault_account: Account<'info, Vault>, 20 | 21 | #[account( 22 | mut 23 | )] 24 | pub collection_pool: Box>, 25 | 26 | #[account(mut)] 27 | pub lender: Signer<'info>, 28 | 29 | pub system_program: Program<'info, System>, 30 | } 31 | 32 | pub fn handler( 33 | ctx: Context, 34 | minimum_balance_for_rent_exemption: u64, 35 | ) -> Result<()> { 36 | let collection = &mut ctx.accounts.collection_pool; 37 | 38 | if ctx.accounts.offer_loan.is_loan_taken == true { 39 | return Err(ErrorCodes::LoanAlreadyTaken.into()); 40 | } 41 | 42 | collection.total_offers -= 1; 43 | 44 | let vault_lamports_initial: u64 = ctx.accounts.vault_account.to_account_info().lamports(); 45 | 46 | let transfer_amount = vault_lamports_initial 47 | .checked_sub(minimum_balance_for_rent_exemption) 48 | .unwrap(); 49 | 50 | **ctx.accounts.vault_account.to_account_info().try_borrow_mut_lamports()? -= transfer_amount; 51 | 52 | let mut lamports_ref = ctx.accounts.lender.try_borrow_mut_lamports()?; 53 | **lamports_ref += transfer_amount; 54 | 55 | Ok(()) 56 | } 57 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/instructions/offer_loan.rs: -------------------------------------------------------------------------------- 1 | pub use anchor_lang::prelude::*; 2 | 3 | use anchor_lang::system_program; 4 | 5 | pub use crate::states::{CollectionPool, Offer, Vault}; 6 | 7 | #[derive(Accounts)] 8 | pub struct OfferLoan<'info> { 9 | #[account( 10 | init, 11 | seeds=[ 12 | b"offer", 13 | collection_pool.key().as_ref(), 14 | lender.key().as_ref(), 15 | collection_pool.total_offers.to_string().as_bytes(), 16 | ], 17 | bump, 18 | payer=lender, 19 | space=Offer::LEN 20 | )] 21 | pub offer_loan: Box>, 22 | 23 | #[account( 24 | init, 25 | seeds=[ 26 | b"vault", 27 | collection_pool.key().as_ref(), 28 | lender.key().as_ref(), 29 | collection_pool.total_offers.to_string().as_bytes(), 30 | ], 31 | bump, 32 | payer = lender, 33 | space = Vault::LEN 34 | )] 35 | pub vault_account: Account<'info, Vault>, 36 | 37 | #[account(mut)] 38 | pub collection_pool: Box>, 39 | 40 | #[account(mut)] 41 | pub lender: Signer<'info>, 42 | 43 | pub system_program: Program<'info, System>, 44 | } 45 | 46 | impl<'info> OfferLoan<'info> { 47 | fn transfer_to_vault_context( 48 | &self, 49 | ) -> CpiContext<'_, '_, '_, 'info, system_program::Transfer<'info>> { 50 | let cpi_accounts = system_program::Transfer { 51 | from: self.lender.to_account_info().clone(), 52 | to: self.vault_account.to_account_info().clone(), 53 | }; 54 | 55 | CpiContext::new(self.system_program.to_account_info(), cpi_accounts) 56 | } 57 | } 58 | 59 | pub fn handler(ctx: Context, offer_amount: u64) -> Result<()> { 60 | let offer_account = &mut ctx.accounts.offer_loan; 61 | let collection = &mut ctx.accounts.collection_pool; 62 | let vault = &mut ctx.accounts.vault_account; 63 | 64 | offer_account.collection = collection.key(); 65 | offer_account.offer_lamport_amount = offer_amount; 66 | offer_account.repay_lamport_amount = offer_amount + offer_amount * 10 / 100; 67 | offer_account.lender = ctx.accounts.lender.key(); 68 | offer_account.bump = *ctx.bumps.get("offer_loan").unwrap(); 69 | 70 | collection.total_offers += 1; 71 | 72 | vault.offer = offer_account.key(); 73 | vault.bump = *ctx.bumps.get("vault_account").unwrap(); 74 | 75 | system_program::transfer(ctx.accounts.transfer_to_vault_context(), offer_amount)?; 76 | 77 | Ok(()) 78 | } 79 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Build A Lending & Borrowing Platform 2 | 3 | Based on the [Build A Lending & Borrowing Platform](https://calyptus.co/courses/9-build-a-lending-borrowing-platform/) module, this walkthrough takes you through the process of creating a platform where users can lend SOL in exchange for NFTs from a specific collection, all facilitated through a secure vault system using [Anchor](https://www.anchor-lang.com/). 4 | 5 | ## Table of Contents 6 | - [Getting Started](#getting-started) 7 | - [Contributing](#contributing) 8 | - [Questions](#questions) 9 | - [License](#license) 10 | 11 | ## Getting Started 12 | 13 | To use this fork, you need to have [yarn](https://yarnpkg.com/getting-started/install), [Anchor](https://www.anchor-lang.com/docs/installation) and the [Solana cli suite](https://solana.com/developers/guides/getstarted/setup-local-development) installed on your machine. 14 | 15 | It is highly recommended that you start this project from scratch, following along with the tutorial. 16 | 17 | To use the fork, follow the steps outlined below: 18 | 19 | 1. Clone your forked repo. 20 | 21 | ```bash 22 | git clone https://github.com//Sharky-Fi-clone-using-Escrow 23 | ``` 24 | 25 | 2. Change directory into the root of your cloned repo and install missing node packages 26 | 27 | ```bash 28 | yarn install 29 | ``` 30 | 31 | **NOTE:** You must use yarn to install the dependencies. If you use a different package manager, you will run into issues minting the NFT. 32 | 33 | 3. Build your anchor project. 34 | 35 | ```bash 36 | anchor build 37 | ``` 38 | 39 | 4. List the project deployment keys and copy the address to a clipboard 40 | 41 | ```bash 42 | anchor keys list 43 | ``` 44 | 45 | 5. Update your [`Anchor.toml`](Anchor.toml) file, by using the address generated in the previous step. 46 | 47 | ```toml 48 | [programs.devnet] 49 | nft_lend_borrow = "" 50 | ``` 51 | 52 | 6. Update your [`lib.rs`](programs/nft-lend-borrow/src/lib.rs) file by adding the the address generated in step 4 to the `declare_id!()` macro 53 | 54 | ```rust 55 | // snip 56 | 57 | pub use errors::ErrorCodes; 58 | pub use instructions::*; 59 | pub use states::*; 60 | 61 | declare_id!(""); 62 | 63 | #[program] 64 | pub mod nft_lend_borrow { 65 | // snip 66 | ``` 67 | 68 | ## Contributing 69 | 70 | Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. 71 | 72 | ## Questions 73 | 74 | Did you encounter a challenge following the tutorial or running the fork? 75 | Head over to our [learning support](https://discord.com/channels/1130457754826461216/1132978998155165806) channel on our [Discord](https://discord.gg/38KftAhW) or alternatively, raise a ticket. 76 | 77 | We are always happy to lend a helping hand 78 | 79 | ## License 80 | 81 | All files within this repository are licensed under the MIT License unless explicitly stated otherwise. 82 | 83 | 100% Open Source software. 84 | 85 | © 2023 [Calyptus] - See [LICENSE](https://opensource.org/license/mit/) for details. 86 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/instructions/liquidate.rs: -------------------------------------------------------------------------------- 1 | pub use anchor_lang::prelude::*; 2 | use anchor_spl::token::{self, Mint, Token, TokenAccount, Transfer}; 3 | 4 | use crate::errors::ErrorCodes; 5 | pub use crate::states::{ActiveLoan, CollectionPool, Offer}; 6 | 7 | #[derive(Accounts)] 8 | pub struct Liquidate<'info> { 9 | #[account( 10 | mut, 11 | seeds=[b"active-loan", offer.key().as_ref()], 12 | bump=active_loan.bump 13 | )] 14 | pub active_loan: Box>, 15 | 16 | #[account(mut)] 17 | pub offer: Box>, 18 | 19 | #[account(mut)] 20 | pub collection_pool: Box>, 21 | 22 | #[account(mut)] 23 | pub asset_mint: Account<'info, Mint>, 24 | 25 | #[account( 26 | mut, 27 | constraint = vault_asset_account.mint == asset_mint.key(), 28 | constraint = vault_asset_account.owner == vault_authority.key() 29 | )] 30 | pub vault_asset_account: Account<'info, TokenAccount>, 31 | 32 | #[account( 33 | mut, 34 | constraint = lender_asset_account.mint == asset_mint.key(), 35 | constraint = lender_asset_account.owner == lender.key() 36 | )] 37 | pub lender_asset_account: Account<'info, TokenAccount>, 38 | 39 | #[account(mut)] 40 | pub lender: Signer<'info>, 41 | 42 | /// CHECK: This is not dangerous 43 | pub vault_authority: AccountInfo<'info>, 44 | 45 | pub token_program: Program<'info, Token>, 46 | 47 | pub clock: Sysvar<'info, Clock>, 48 | } 49 | 50 | #[access_control(repayment_time_over(&ctx.accounts.active_loan, &ctx.accounts.clock))] 51 | pub fn handler(ctx: Context) -> Result<()> { 52 | let active_loan = &mut ctx.accounts.active_loan; 53 | let collection = &mut ctx.accounts.collection_pool; 54 | 55 | if active_loan.is_repaid { 56 | return Err(ErrorCodes::LoanAlreadyRepaid.into()); 57 | } 58 | 59 | active_loan.is_liquidated = true; 60 | 61 | let (_vault_authority, vault_auth_bump) = 62 | Pubkey::find_program_address(&[collection.key().as_ref()], ctx.program_id); 63 | 64 | let col_seeds = collection.key(); 65 | 66 | let authority_seeds = &[col_seeds.as_ref(), &[vault_auth_bump]]; 67 | 68 | let signer = &[&authority_seeds[..]]; 69 | 70 | let cpi_accounts = Transfer { 71 | from: ctx.accounts.vault_asset_account.to_account_info().clone(), 72 | to: ctx.accounts.lender_asset_account.to_account_info().clone(), 73 | authority: ctx.accounts.vault_authority.clone(), 74 | }; 75 | 76 | let cpi_ctx = CpiContext::new_with_signer( 77 | ctx.accounts.token_program.to_account_info().clone(), 78 | cpi_accounts, 79 | signer, 80 | ); 81 | 82 | token::transfer(cpi_ctx, 1)?; 83 | 84 | Ok(()) 85 | } 86 | 87 | // Access Control Modifier 88 | fn repayment_time_over<'info>( 89 | active_loan: &Account<'info, ActiveLoan>, 90 | clock: &Sysvar<'info, Clock>, 91 | ) -> Result<()> { 92 | if !(active_loan.repay_ts < clock.unix_timestamp) { 93 | return Err(ErrorCodes::CannotLiquidateYet.into()); 94 | } 95 | 96 | Ok(()) 97 | } 98 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/instructions/repay.rs: -------------------------------------------------------------------------------- 1 | pub use anchor_lang::prelude::*; 2 | use anchor_lang::system_program; 3 | use anchor_spl::token::{self, Mint, Token, TokenAccount, Transfer}; 4 | 5 | pub use crate::states::{ActiveLoan, CollectionPool, Offer, Vault}; 6 | 7 | #[derive(Accounts)] 8 | pub struct Repay<'info> { 9 | #[account(mut)] 10 | pub active_loan: Box>, 11 | 12 | #[account(mut)] 13 | pub offer: Box>, 14 | 15 | #[account(mut)] 16 | pub collection_pool: Box>, 17 | 18 | /// CHECK: This is not dangerous 19 | #[account( 20 | mut, 21 | constraint = lender.key() == offer.lender.key() 22 | )] 23 | pub lender: AccountInfo<'info>, 24 | 25 | #[account(mut)] 26 | pub asset_mint: Account<'info, Mint>, 27 | 28 | #[account( 29 | mut, 30 | constraint = borrower_asset_account.mint == asset_mint.key(), 31 | constraint = borrower_asset_account.owner == borrower.key() 32 | )] 33 | pub borrower_asset_account: Account<'info, TokenAccount>, 34 | 35 | #[account( 36 | mut, 37 | constraint = vault_asset_account.mint == asset_mint.key(), 38 | constraint = vault_asset_account.owner == vault_authority.key() 39 | )] 40 | pub vault_asset_account: Account<'info, TokenAccount>, 41 | 42 | #[account(mut)] 43 | pub vault_account: Account<'info, Vault>, 44 | 45 | /// CHECK: This is not dangerous 46 | pub vault_authority: AccountInfo<'info>, 47 | 48 | #[account(mut)] 49 | pub borrower: Signer<'info>, 50 | 51 | pub token_program: Program<'info, Token>, 52 | 53 | pub system_program: Program<'info, System>, 54 | } 55 | 56 | impl<'info> Repay<'info> { 57 | fn transfer_to_lender_context( 58 | &self, 59 | ) -> CpiContext<'_, '_, '_, 'info, system_program::Transfer<'info>> { 60 | let cpi_accounts = system_program::Transfer { 61 | from: self.borrower.to_account_info().clone(), 62 | to: self.lender.clone(), 63 | }; 64 | 65 | CpiContext::new(self.system_program.to_account_info().clone(), cpi_accounts) 66 | } 67 | } 68 | 69 | pub fn handler(ctx: Context) -> Result<()> { 70 | let active_loan = &mut ctx.accounts.active_loan; 71 | let collection = &mut ctx.accounts.collection_pool; 72 | let offer = &mut ctx.accounts.offer; 73 | 74 | active_loan.is_repaid = true; 75 | 76 | let (_vault_authority, vault_auth_bump) = 77 | Pubkey::find_program_address(&[collection.key().as_ref()], ctx.program_id); 78 | 79 | let col_seeds = collection.key(); 80 | 81 | let authority_seeds = &[col_seeds.as_ref(), &[vault_auth_bump]]; 82 | 83 | let signer = &[&authority_seeds[..]]; 84 | 85 | let repay_amount = offer.repay_lamport_amount; 86 | 87 | let cpi_accounts = Transfer { 88 | from: ctx.accounts.vault_asset_account.to_account_info().clone(), 89 | to: ctx 90 | .accounts 91 | .borrower_asset_account 92 | .to_account_info() 93 | .clone(), 94 | authority: ctx.accounts.vault_authority.clone(), 95 | }; 96 | 97 | let cpi_ctx = CpiContext::new_with_signer( 98 | ctx.accounts.token_program.to_account_info().clone(), 99 | cpi_accounts, 100 | signer, 101 | ); 102 | 103 | token::transfer(cpi_ctx, 1)?; 104 | 105 | system_program::transfer(ctx.accounts.transfer_to_lender_context(), repay_amount)?; 106 | 107 | Ok(()) 108 | } 109 | -------------------------------------------------------------------------------- /programs/nft-lend-borrow/src/instructions/borrow.rs: -------------------------------------------------------------------------------- 1 | pub use anchor_lang::prelude::*; 2 | 3 | use anchor_spl::token::{self, Mint, Token, TokenAccount, Transfer}; 4 | 5 | use crate::states::{ActiveLoan, CollectionPool, Offer, Vault}; 6 | 7 | use crate::errors::ErrorCodes; 8 | 9 | #[derive(Accounts)] 10 | pub struct Borrow<'info> { 11 | #[account( 12 | init, 13 | seeds = [b"active-loan", offer_loan.key().as_ref()], 14 | bump, 15 | payer = borrower, 16 | space = ActiveLoan::LEN 17 | )] 18 | pub active_loan: Box>, 19 | 20 | #[account(mut)] 21 | pub offer_loan: Box>, 22 | 23 | #[account(mut)] 24 | pub vault_account: Account<'info, Vault>, 25 | 26 | #[account( 27 | init, 28 | seeds = [ 29 | b"vault-asset-account", 30 | offer_loan.key().as_ref(), 31 | ], 32 | bump, 33 | payer = borrower, 34 | token::mint = asset_mint, 35 | token::authority = vault_authority 36 | )] 37 | pub vault_asset_account: Account<'info, TokenAccount>, 38 | 39 | /// CHECK: This is not dangerous 40 | #[account(mut)] 41 | pub vault_authority: AccountInfo<'info>, 42 | 43 | #[account(mut)] 44 | pub collection_pool: Box>, 45 | 46 | #[account(mut)] 47 | pub borrower: Signer<'info>, 48 | 49 | #[account( 50 | mut, 51 | constraint = borrower_asset_account.owner == *borrower.key, 52 | constraint = borrower_asset_account.mint == *asset_mint.to_account_info().key 53 | )] 54 | pub borrower_asset_account: Account<'info, TokenAccount>, 55 | 56 | #[account(mut)] 57 | pub asset_mint: Account<'info, Mint>, 58 | 59 | pub token_program: Program<'info, Token>, 60 | 61 | pub system_program: Program<'info, System>, 62 | 63 | pub clock: Sysvar<'info, Clock>, 64 | } 65 | 66 | impl<'info> Borrow<'info> { 67 | fn transfer_to_vault_context(&self) -> CpiContext<'_, '_, '_, 'info, Transfer<'info>> { 68 | let cpi_accounts = Transfer { 69 | from: self.borrower_asset_account.to_account_info().clone(), 70 | to: self.vault_asset_account.to_account_info().clone(), 71 | authority: self.borrower.to_account_info().clone(), 72 | }; 73 | 74 | CpiContext::new(self.token_program.to_account_info(), cpi_accounts) 75 | } 76 | } 77 | 78 | pub fn handler(ctx: Context, minimum_balance_for_rent_exemption: u64) -> Result<()> { 79 | let active_loan = &mut ctx.accounts.active_loan; 80 | let offer = &mut ctx.accounts.offer_loan; 81 | let collection = &mut ctx.accounts.collection_pool; 82 | 83 | if offer.is_loan_taken == true { 84 | return Err(ErrorCodes::LoanAlreadyTaken.into()); 85 | } 86 | 87 | active_loan.collection = collection.key(); 88 | active_loan.offer_account = offer.key(); 89 | active_loan.lender = offer.lender.key(); 90 | active_loan.borrower = ctx.accounts.borrower.key(); 91 | active_loan.mint = ctx.accounts.asset_mint.key(); 92 | active_loan.loan_ts = ctx.accounts.clock.unix_timestamp; 93 | active_loan.repay_ts = ctx.accounts.clock.unix_timestamp + collection.duration; 94 | active_loan.is_repaid = false; 95 | active_loan.is_liquidated = false; 96 | active_loan.bump = *ctx.bumps.get("active_loan").unwrap(); 97 | 98 | offer.borrower = ctx.accounts.borrower.key(); 99 | offer.is_loan_taken = true; 100 | 101 | token::transfer(ctx.accounts.transfer_to_vault_context(), 1)?; 102 | 103 | let vault_lamports_initial: u64 = ctx.accounts.vault_account.to_account_info().lamports(); 104 | 105 | let transfer_amount = vault_lamports_initial 106 | .checked_sub(minimum_balance_for_rent_exemption) 107 | .unwrap(); 108 | 109 | **ctx 110 | .accounts 111 | .vault_account 112 | .to_account_info() 113 | .try_borrow_mut_lamports()? -= transfer_amount; 114 | **ctx.accounts.borrower.try_borrow_mut_lamports()? += transfer_amount; 115 | 116 | Ok(()) 117 | } 118 | -------------------------------------------------------------------------------- /tests/nft-lend-borrow.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@coral-xyz/anchor"; 2 | import { Program } from "@coral-xyz/anchor"; 3 | import { 4 | LAMPORTS_PER_SOL, 5 | PublicKey, 6 | SystemProgram, 7 | Transaction, 8 | } from "@solana/web3.js"; 9 | import { 10 | TOKEN_PROGRAM_ID, 11 | createAccount, 12 | createMint, 13 | getAccount, 14 | mintTo, 15 | } from "@solana/spl-token"; 16 | import { NftLendBorrow } from "../target/types/nft_lend_borrow"; 17 | import { assert } from "chai"; 18 | 19 | describe("nft-lend-borrow", () => { 20 | // Configure the client to use the local cluster. 21 | const provider = anchor.AnchorProvider.env(); 22 | anchor.setProvider(provider); 23 | 24 | const program = anchor.workspace.NftLendBorrow as Program; 25 | 26 | let assetMint: PublicKey; 27 | 28 | let lenderAssetAccount: PublicKey; 29 | let borrowerAssetAccount: PublicKey; 30 | let vaultAssetAccount: PublicKey; 31 | 32 | let payer = anchor.web3.Keypair.generate(); 33 | let mintAuthority = anchor.web3.Keypair.generate(); 34 | let assetPoolAuthority = anchor.web3.Keypair.generate(); 35 | 36 | let lender = anchor.web3.Keypair.generate(); 37 | let borrower = anchor.web3.Keypair.generate(); 38 | 39 | let lenderInitialBalance = 10000000000; 40 | let borrowerInitialBalance = 5000000000; 41 | 42 | let collectionPoolPDA: PublicKey; 43 | let offerPDA: PublicKey; 44 | let activeLoanPDA: PublicKey; 45 | let vaultPDA: PublicKey; 46 | let vaultAuthorityPDA: PublicKey; 47 | 48 | let collectionId = new PublicKey( 49 | "J1S9H3QjnRtBbbuD4HjPV6RpRhwuk4zKbxsnCHuTgh9w" 50 | ); 51 | 52 | it("Can initialize the state of the world", async () => { 53 | const transferSig = await provider.connection.requestAirdrop( 54 | payer.publicKey, 55 | 20000000000 56 | ); 57 | 58 | const latestBlockHash = await provider.connection.getLatestBlockhash(); 59 | 60 | await provider.connection.confirmTransaction({ 61 | blockhash: latestBlockHash.blockhash, 62 | lastValidBlockHeight: latestBlockHash.lastValidBlockHeight, 63 | signature: transferSig, 64 | }); 65 | 66 | const tx = new Transaction(); 67 | 68 | tx.add( 69 | SystemProgram.transfer({ 70 | fromPubkey: payer.publicKey, 71 | toPubkey: mintAuthority.publicKey, 72 | lamports: 1000000000, 73 | }), 74 | SystemProgram.transfer({ 75 | fromPubkey: payer.publicKey, 76 | toPubkey: assetPoolAuthority.publicKey, 77 | lamports: 1000000000, 78 | }), 79 | SystemProgram.transfer({ 80 | fromPubkey: payer.publicKey, 81 | toPubkey: lender.publicKey, 82 | lamports: lenderInitialBalance, 83 | }), 84 | SystemProgram.transfer({ 85 | fromPubkey: payer.publicKey, 86 | toPubkey: borrower.publicKey, 87 | lamports: borrowerInitialBalance, 88 | }) 89 | ); 90 | 91 | await provider.sendAndConfirm(tx, [payer]); 92 | 93 | assetMint = await createMint( 94 | provider.connection, 95 | payer, 96 | mintAuthority.publicKey, 97 | undefined, 98 | 0, 99 | undefined, 100 | undefined, 101 | TOKEN_PROGRAM_ID 102 | ); 103 | 104 | lenderAssetAccount = await createAccount( 105 | provider.connection, 106 | payer, 107 | assetMint, 108 | lender.publicKey, 109 | undefined, 110 | undefined, 111 | TOKEN_PROGRAM_ID 112 | ); 113 | 114 | borrowerAssetAccount = await createAccount( 115 | provider.connection, 116 | payer, 117 | assetMint, 118 | borrower.publicKey, 119 | undefined, 120 | undefined, 121 | TOKEN_PROGRAM_ID 122 | ); 123 | 124 | await mintTo( 125 | provider.connection, 126 | payer, 127 | assetMint, 128 | borrowerAssetAccount, 129 | mintAuthority, 130 | 1 131 | ); 132 | 133 | let [collectionPoolAddress, _collectionBump] = 134 | anchor.web3.PublicKey.findProgramAddressSync( 135 | [ 136 | anchor.utils.bytes.utf8.encode("collection-pool"), 137 | collectionId.toBuffer(), 138 | ], 139 | program.programId 140 | ); 141 | 142 | collectionPoolPDA = collectionPoolAddress; 143 | 144 | const borrowerAssetTokenAccount = await getAccount( 145 | provider.connection, 146 | borrowerAssetAccount 147 | ); 148 | 149 | assert.strictEqual(borrowerAssetTokenAccount.amount.toString(), "1"); 150 | }); 151 | 152 | let loanDuration = 10; 153 | 154 | it("Can create pool", async () => { 155 | await program.methods 156 | .createPool(collectionId, new anchor.BN(loanDuration)) 157 | .accounts({ 158 | collectionPool: collectionPoolPDA, 159 | authority: assetPoolAuthority.publicKey, 160 | systemProgram: anchor.web3.SystemProgram.programId, 161 | }) 162 | .signers([assetPoolAuthority]) 163 | .rpc(); 164 | 165 | const createdPool = await program.account.collectionPool.fetch( 166 | collectionPoolPDA 167 | ); 168 | 169 | assert.strictEqual( 170 | createdPool.collectionId.toBase58(), 171 | collectionId.toBase58() 172 | ); 173 | assert.strictEqual(createdPool.duration.toNumber(), loanDuration); 174 | assert.strictEqual( 175 | createdPool.poolOwner.toBase58(), 176 | assetPoolAuthority.publicKey.toBase58() 177 | ); 178 | }); 179 | 180 | let totalOffers = 0; 181 | let offerAmount = new anchor.BN(2 * LAMPORTS_PER_SOL); 182 | 183 | it("Can offer loan", async () => { 184 | let [offer, _offerBump] = anchor.web3.PublicKey.findProgramAddressSync( 185 | [ 186 | anchor.utils.bytes.utf8.encode("offer"), 187 | collectionPoolPDA.toBuffer(), 188 | lender.publicKey.toBuffer(), 189 | Buffer.from(totalOffers.toString()), 190 | ], 191 | program.programId 192 | ); 193 | offerPDA = offer; 194 | 195 | let [vault, _vaultBump] = anchor.web3.PublicKey.findProgramAddressSync( 196 | [ 197 | anchor.utils.bytes.utf8.encode("vault"), 198 | collectionPoolPDA.toBuffer(), 199 | lender.publicKey.toBuffer(), 200 | Buffer.from(totalOffers.toString()), 201 | ], 202 | program.programId 203 | ); 204 | vaultPDA = vault; 205 | 206 | await program.methods 207 | .offerLoan(offerAmount) 208 | .accounts({ 209 | offerLoan: offerPDA, 210 | vaultAccount: vaultPDA, 211 | collectionPool: collectionPoolPDA, 212 | lender: lender.publicKey, 213 | systemProgram: anchor.web3.SystemProgram.programId, 214 | }) 215 | .signers([lender]) 216 | .rpc(); 217 | 218 | const vaultAccount = await provider.connection.getAccountInfo(vaultPDA); 219 | const lenderAccount = await provider.connection.getAccountInfo( 220 | lender.publicKey 221 | ); 222 | 223 | assert.isAbove(vaultAccount.lamports, offerAmount.toNumber()); 224 | assert.isBelow( 225 | lenderAccount.lamports, 226 | lenderInitialBalance - offerAmount.toNumber() 227 | ); 228 | 229 | const createdOffer = await program.account.offer.fetch(offerPDA); 230 | 231 | assert.strictEqual( 232 | createdOffer.collection.toBase58(), 233 | collectionPoolPDA.toBase58() 234 | ); 235 | assert.strictEqual( 236 | createdOffer.offerLamportAmount.toNumber(), 237 | offerAmount.toNumber() 238 | ); 239 | assert.strictEqual( 240 | createdOffer.repayLamportAmount.toNumber(), 241 | offerAmount.toNumber() + (10 / 100) * offerAmount.toNumber() 242 | ); 243 | assert.strictEqual( 244 | createdOffer.lender.toBase58(), 245 | lender.publicKey.toBase58() 246 | ); 247 | assert.strictEqual(createdOffer.isLoanTaken, false); 248 | }); 249 | 250 | let loanStartTS: number; 251 | let loanRepayTS: number; 252 | 253 | it("Can borrow loan", async () => { 254 | let [activeloan, _activeLoanBump] = 255 | anchor.web3.PublicKey.findProgramAddressSync( 256 | [ 257 | anchor.utils.bytes.utf8.encode("active-loan"), 258 | offerPDA.toBuffer(), 259 | ], 260 | program.programId 261 | ); 262 | 263 | activeLoanPDA = activeloan; 264 | 265 | let [vaultAsset, _vaultAssetBump] = 266 | anchor.web3.PublicKey.findProgramAddressSync( 267 | [ 268 | anchor.utils.bytes.utf8.encode("vault-asset-account"), 269 | offerPDA.toBuffer(), 270 | ], 271 | program.programId 272 | ); 273 | 274 | vaultAssetAccount = vaultAsset; 275 | 276 | let [vaultAuth, _vaultAuthBump] = 277 | anchor.web3.PublicKey.findProgramAddressSync( 278 | [collectionPoolPDA.toBuffer()], 279 | program.programId 280 | ); 281 | 282 | vaultAuthorityPDA = vaultAuth; 283 | 284 | const minimumBalanceForRentExemption = 285 | await provider.connection.getMinimumBalanceForRentExemption(41); 286 | 287 | await program.methods 288 | .borrow(new anchor.BN(minimumBalanceForRentExemption)) 289 | .accounts({ 290 | activeLoan: activeLoanPDA, 291 | offerLoan: offerPDA, 292 | vaultAccount: vaultPDA, 293 | vaultAssetAccount: vaultAssetAccount, 294 | vaultAuthority: vaultAuthorityPDA, 295 | collectionPool: collectionPoolPDA, 296 | borrower: borrower.publicKey, 297 | borrowerAssetAccount: borrowerAssetAccount, 298 | assetMint: assetMint, 299 | tokenProgram: TOKEN_PROGRAM_ID, 300 | systemProgram: anchor.web3.SystemProgram.programId, 301 | clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, 302 | }) 303 | .signers([borrower]) 304 | .rpc(); 305 | 306 | const activeLoan = await program.account.activeLoan.fetch( 307 | activeLoanPDA 308 | ); 309 | 310 | assert.strictEqual( 311 | activeLoan.borrower.toBase58(), 312 | borrower.publicKey.toBase58() 313 | ); 314 | assert.strictEqual( 315 | activeLoan.collection.toBase58(), 316 | collectionPoolPDA.toBase58() 317 | ); 318 | assert.strictEqual( 319 | activeLoan.lender.toBase58(), 320 | lender.publicKey.toBase58() 321 | ); 322 | assert.strictEqual(activeLoan.mint.toBase58(), assetMint.toBase58()); 323 | assert.strictEqual( 324 | activeLoan.offerAccount.toBase58(), 325 | offerPDA.toBase58() 326 | ); 327 | assert.strictEqual( 328 | activeLoan.repayTs.toNumber(), 329 | activeLoan.loanTs.toNumber() + loanDuration 330 | ); 331 | assert.strictEqual(activeLoan.isLiquidated, false); 332 | assert.strictEqual(activeLoan.isRepaid, false); 333 | 334 | const offerAccount = await program.account.offer.fetch(offerPDA); 335 | 336 | assert.strictEqual( 337 | offerAccount.borrower.toBase58(), 338 | borrower.publicKey.toBase58() 339 | ); 340 | assert.strictEqual(offerAccount.isLoanTaken, true); 341 | 342 | const vaultTokenAccount = await provider.connection.getAccountInfo( 343 | vaultPDA 344 | ); 345 | const borrowerAccount = await provider.connection.getAccountInfo( 346 | borrower.publicKey 347 | ); 348 | 349 | const minimumBalanceForRentExemptionForOfferAccount = 350 | await provider.connection.getMinimumBalanceForRentExemption(200); 351 | 352 | assert.strictEqual( 353 | vaultTokenAccount.lamports, 354 | minimumBalanceForRentExemption 355 | ); 356 | assert.isAbove( 357 | borrowerAccount.lamports, 358 | borrowerInitialBalance + 359 | offerAmount.toNumber() - 360 | (minimumBalanceForRentExemption + 361 | minimumBalanceForRentExemptionForOfferAccount * 2) 362 | ); 363 | 364 | const vaultAssetTokenAccount = await getAccount( 365 | provider.connection, 366 | vaultAsset 367 | ); 368 | const borrowerAssetTokenAccount = await getAccount( 369 | provider.connection, 370 | borrowerAssetAccount 371 | ); 372 | 373 | assert.strictEqual(vaultAssetTokenAccount.amount.toString(), "1"); 374 | assert.strictEqual(borrowerAssetTokenAccount.amount.toString(), "0"); 375 | }); 376 | 377 | it("Can repay loan", async () => { 378 | await program.methods 379 | .repay() 380 | .accounts({ 381 | activeLoan: activeLoanPDA, 382 | offer: offerPDA, 383 | collectionPool: collectionPoolPDA, 384 | lender: lender.publicKey, 385 | assetMint: assetMint, 386 | borrowerAssetAccount: borrowerAssetAccount, 387 | vaultAssetAccount: vaultAssetAccount, 388 | vaultAccount: vaultPDA, 389 | vaultAuthority: vaultAuthorityPDA, 390 | borrower: borrower.publicKey, 391 | tokenProgram: TOKEN_PROGRAM_ID, 392 | systemProgram: anchor.web3.SystemProgram.programId, 393 | }) 394 | .signers([borrower]) 395 | .rpc(); 396 | 397 | const activeLoanAccount = await program.account.activeLoan.fetch( 398 | activeLoanPDA 399 | ); 400 | 401 | assert.strictEqual(activeLoanAccount.isRepaid, true); 402 | 403 | const borrowerAccount = await provider.connection.getAccountInfo( 404 | borrower.publicKey 405 | ); 406 | const lenderAccount = await provider.connection.getAccountInfo( 407 | lender.publicKey 408 | ); 409 | 410 | assert.approximately( 411 | borrowerAccount.lamports, 412 | borrowerInitialBalance, 413 | 0.5 * LAMPORTS_PER_SOL 414 | ); 415 | assert.approximately( 416 | lenderAccount.lamports, 417 | lenderInitialBalance, 418 | 0.5 * LAMPORTS_PER_SOL 419 | ); 420 | 421 | const borrowerAssetTokenAccount = await getAccount( 422 | provider.connection, 423 | borrowerAssetAccount 424 | ); 425 | const vaultAssetTokenAccount = await getAccount( 426 | provider.connection, 427 | vaultAssetAccount 428 | ); 429 | 430 | assert.strictEqual(borrowerAssetTokenAccount.amount.toString(), "1"); 431 | assert.strictEqual(vaultAssetTokenAccount.amount.toString(), "0"); 432 | }); 433 | 434 | it("Can offer second loan", async () => { 435 | totalOffers += 1; 436 | let [offer, _offerBump] = anchor.web3.PublicKey.findProgramAddressSync( 437 | [ 438 | anchor.utils.bytes.utf8.encode("offer"), 439 | collectionPoolPDA.toBuffer(), 440 | lender.publicKey.toBuffer(), 441 | Buffer.from(totalOffers.toString()), 442 | ], 443 | program.programId 444 | ); 445 | offerPDA = offer; 446 | 447 | let [vault, _vaultBump] = anchor.web3.PublicKey.findProgramAddressSync( 448 | [ 449 | anchor.utils.bytes.utf8.encode("vault"), 450 | collectionPoolPDA.toBuffer(), 451 | lender.publicKey.toBuffer(), 452 | Buffer.from(totalOffers.toString()), 453 | ], 454 | program.programId 455 | ); 456 | vaultPDA = vault; 457 | 458 | await program.methods 459 | .offerLoan(offerAmount) 460 | .accounts({ 461 | offerLoan: offerPDA, 462 | vaultAccount: vaultPDA, 463 | collectionPool: collectionPoolPDA, 464 | lender: lender.publicKey, 465 | systemProgram: anchor.web3.SystemProgram.programId, 466 | }) 467 | .signers([lender]) 468 | .rpc(); 469 | 470 | const vaultAccount = await provider.connection.getAccountInfo(vaultPDA); 471 | const lenderAccount = await provider.connection.getAccountInfo( 472 | lender.publicKey 473 | ); 474 | 475 | assert.approximately( 476 | vaultAccount.lamports, 477 | offerAmount.toNumber(), 478 | 0.5 * LAMPORTS_PER_SOL 479 | ); 480 | assert.approximately( 481 | lenderAccount.lamports, 482 | lenderInitialBalance - offerAmount.toNumber(), 483 | 0.5 * LAMPORTS_PER_SOL 484 | ); 485 | 486 | const createdOffer = await program.account.offer.fetch(offerPDA); 487 | 488 | assert.strictEqual( 489 | createdOffer.collection.toBase58(), 490 | collectionPoolPDA.toBase58() 491 | ); 492 | assert.strictEqual( 493 | createdOffer.offerLamportAmount.toNumber(), 494 | offerAmount.toNumber() 495 | ); 496 | assert.strictEqual( 497 | createdOffer.repayLamportAmount.toNumber(), 498 | offerAmount.toNumber() + (10 / 100) * offerAmount.toNumber() 499 | ); 500 | assert.strictEqual( 501 | createdOffer.lender.toBase58(), 502 | lender.publicKey.toBase58() 503 | ); 504 | assert.strictEqual(createdOffer.isLoanTaken, false); 505 | }); 506 | 507 | it("Can borrow second time", async () => { 508 | let [activeloan, _activeLoanBump] = 509 | anchor.web3.PublicKey.findProgramAddressSync( 510 | [ 511 | anchor.utils.bytes.utf8.encode("active-loan"), 512 | offerPDA.toBuffer(), 513 | ], 514 | program.programId 515 | ); 516 | 517 | activeLoanPDA = activeloan; 518 | 519 | let [vaultAsset, _vaultAssetBump] = 520 | anchor.web3.PublicKey.findProgramAddressSync( 521 | [ 522 | anchor.utils.bytes.utf8.encode("vault-asset-account"), 523 | offerPDA.toBuffer(), 524 | ], 525 | program.programId 526 | ); 527 | 528 | vaultAssetAccount = vaultAsset; 529 | 530 | const minimumBalanceForRentExemption = 531 | await provider.connection.getMinimumBalanceForRentExemption(41); 532 | await program.methods 533 | .borrow(new anchor.BN(minimumBalanceForRentExemption)) 534 | .accounts({ 535 | activeLoan: activeLoanPDA, 536 | offerLoan: offerPDA, 537 | vaultAccount: vaultPDA, 538 | vaultAssetAccount: vaultAssetAccount, 539 | vaultAuthority: vaultAuthorityPDA, 540 | collectionPool: collectionPoolPDA, 541 | borrower: borrower.publicKey, 542 | borrowerAssetAccount: borrowerAssetAccount, 543 | assetMint: assetMint, 544 | tokenProgram: TOKEN_PROGRAM_ID, 545 | systemProgram: anchor.web3.SystemProgram.programId, 546 | clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, 547 | }) 548 | .signers([borrower]) 549 | .rpc(); 550 | 551 | const activeLoan = await program.account.activeLoan.fetch( 552 | activeLoanPDA 553 | ); 554 | 555 | assert.strictEqual( 556 | activeLoan.borrower.toBase58(), 557 | borrower.publicKey.toBase58() 558 | ); 559 | assert.strictEqual( 560 | activeLoan.collection.toBase58(), 561 | collectionPoolPDA.toBase58() 562 | ); 563 | assert.strictEqual( 564 | activeLoan.lender.toBase58(), 565 | lender.publicKey.toBase58() 566 | ); 567 | assert.strictEqual(activeLoan.mint.toBase58(), assetMint.toBase58()); 568 | assert.strictEqual( 569 | activeLoan.offerAccount.toBase58(), 570 | offerPDA.toBase58() 571 | ); 572 | assert.strictEqual( 573 | activeLoan.repayTs.toNumber(), 574 | activeLoan.loanTs.toNumber() + loanDuration 575 | ); 576 | assert.strictEqual(activeLoan.isLiquidated, false); 577 | assert.strictEqual(activeLoan.isRepaid, false); 578 | 579 | const offerAccount = await program.account.offer.fetch(offerPDA); 580 | 581 | assert.strictEqual( 582 | offerAccount.borrower.toBase58(), 583 | borrower.publicKey.toBase58() 584 | ); 585 | assert.strictEqual(offerAccount.isLoanTaken, true); 586 | 587 | loanStartTS = activeLoan.loanTs.toNumber(); 588 | loanRepayTS = activeLoan.repayTs.toNumber(); 589 | 590 | const vaultTokenAccount = await provider.connection.getAccountInfo( 591 | vaultPDA 592 | ); 593 | const borrowerAccount = await provider.connection.getAccountInfo( 594 | borrower.publicKey 595 | ); 596 | 597 | const minimumBalanceForRentExemptionForOfferAccount = 598 | await provider.connection.getMinimumBalanceForRentExemption(200); 599 | 600 | assert.strictEqual( 601 | vaultTokenAccount.lamports, 602 | minimumBalanceForRentExemption 603 | ); 604 | assert.approximately( 605 | borrowerAccount.lamports, 606 | borrowerInitialBalance + 607 | offerAmount.toNumber() - 608 | (minimumBalanceForRentExemption + 609 | minimumBalanceForRentExemptionForOfferAccount), 610 | 0.5 * LAMPORTS_PER_SOL 611 | ); 612 | 613 | const vaultAssetTokenAccount = await getAccount( 614 | provider.connection, 615 | vaultAssetAccount 616 | ); 617 | const borrowerAssetTokenAccount = await getAccount( 618 | provider.connection, 619 | borrowerAssetAccount 620 | ); 621 | 622 | assert.strictEqual(vaultAssetTokenAccount.amount.toString(), "1"); 623 | assert.strictEqual(borrowerAssetTokenAccount.amount.toString(), "0"); 624 | }); 625 | 626 | it("Can liquidate loan", async () => { 627 | if (Date.now() < loanRepayTS * 1000) { 628 | await sleep(loanRepayTS * 1000 - Date.now() + 3000); 629 | } 630 | 631 | await program.methods 632 | .liquidate() 633 | .accounts({ 634 | activeLoan: activeLoanPDA, 635 | offer: offerPDA, 636 | collectionPool: collectionPoolPDA, 637 | assetMint: assetMint, 638 | vaultAssetAccount: vaultAssetAccount, 639 | lenderAssetAccount: lenderAssetAccount, 640 | lender: lender.publicKey, 641 | vaultAuthority: vaultAuthorityPDA, 642 | tokenProgram: TOKEN_PROGRAM_ID, 643 | clock: anchor.web3.SYSVAR_CLOCK_PUBKEY, 644 | }) 645 | .signers([lender]) 646 | .rpc(); 647 | 648 | const activeLoan = await program.account.activeLoan.fetch( 649 | activeLoanPDA 650 | ); 651 | 652 | assert.strictEqual(activeLoan.isLiquidated, true); 653 | 654 | const lenderAssetTokenAccount = await getAccount( 655 | provider.connection, 656 | lenderAssetAccount 657 | ); 658 | const vaultAssetTokenAccount = await getAccount( 659 | provider.connection, 660 | vaultAssetAccount 661 | ); 662 | 663 | assert.strictEqual(lenderAssetTokenAccount.amount.toString(), "1"); 664 | assert.strictEqual(vaultAssetTokenAccount.amount.toString(), "0"); 665 | }); 666 | 667 | it("Can offer and withdraw loan", async () => { 668 | totalOffers += 1; 669 | let [offer, _offerBump] = anchor.web3.PublicKey.findProgramAddressSync( 670 | [ 671 | anchor.utils.bytes.utf8.encode("offer"), 672 | collectionPoolPDA.toBuffer(), 673 | lender.publicKey.toBuffer(), 674 | Buffer.from(totalOffers.toString()), 675 | ], 676 | program.programId 677 | ); 678 | offerPDA = offer; 679 | 680 | let [vault, _vaultBump] = anchor.web3.PublicKey.findProgramAddressSync( 681 | [ 682 | anchor.utils.bytes.utf8.encode("vault"), 683 | collectionPoolPDA.toBuffer(), 684 | lender.publicKey.toBuffer(), 685 | Buffer.from(totalOffers.toString()), 686 | ], 687 | program.programId 688 | ); 689 | vaultPDA = vault; 690 | 691 | await program.methods 692 | .offerLoan(offerAmount) 693 | .accounts({ 694 | offerLoan: offerPDA, 695 | vaultAccount: vaultPDA, 696 | collectionPool: collectionPoolPDA, 697 | lender: lender.publicKey, 698 | systemProgram: anchor.web3.SystemProgram.programId, 699 | }) 700 | .signers([lender]) 701 | .rpc(); 702 | 703 | const createdOffer = await program.account.offer.fetch(offerPDA); 704 | 705 | assert.strictEqual( 706 | createdOffer.collection.toBase58(), 707 | collectionPoolPDA.toBase58() 708 | ); 709 | assert.strictEqual( 710 | createdOffer.offerLamportAmount.toNumber(), 711 | offerAmount.toNumber() 712 | ); 713 | assert.strictEqual( 714 | createdOffer.repayLamportAmount.toNumber(), 715 | offerAmount.toNumber() + (10 / 100) * offerAmount.toNumber() 716 | ); 717 | assert.strictEqual( 718 | createdOffer.lender.toBase58(), 719 | lender.publicKey.toBase58() 720 | ); 721 | assert.strictEqual(createdOffer.isLoanTaken, false); 722 | 723 | const lenderAccountPreWithdraw = 724 | await provider.connection.getAccountInfo(lender.publicKey); 725 | 726 | assert.approximately( 727 | lenderAccountPreWithdraw.lamports, 728 | lenderInitialBalance - 2 * offerAmount.toNumber(), 729 | 0.5 * LAMPORTS_PER_SOL 730 | ); 731 | 732 | const minimumBalanceForRentExemption = 733 | await provider.connection.getMinimumBalanceForRentExemption(41); 734 | 735 | await program.methods 736 | .withdrawOffer( 737 | new anchor.BN(minimumBalanceForRentExemption), 738 | collectionId 739 | ) 740 | .accounts({ 741 | offerLoan: offerPDA, 742 | vaultAccount: vault, 743 | collectionPool: collectionPoolPDA, 744 | lender: lender.publicKey, 745 | systemProgram: anchor.web3.SystemProgram.programId, 746 | }) 747 | .signers([lender]) 748 | .rpc(); 749 | 750 | const lenderAccountPostWithdraw = 751 | await provider.connection.getAccountInfo(lender.publicKey); 752 | 753 | assert.approximately( 754 | lenderAccountPostWithdraw.lamports, 755 | lenderInitialBalance - offerAmount.toNumber(), 756 | 0.5 * LAMPORTS_PER_SOL 757 | ); 758 | }); 759 | }); 760 | 761 | function sleep(ms: number) { 762 | return new Promise((resolve) => setTimeout(resolve, ms)); 763 | } 764 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": 6 | "integrity" "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==" 7 | "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz" 8 | "version" "7.22.5" 9 | dependencies: 10 | "regenerator-runtime" "^0.13.11" 11 | 12 | "@coral-xyz/anchor@^0.28.0": 13 | "integrity" "sha512-kQ02Hv2ZqxtWP30WN1d4xxT4QqlOXYDxmEd3k/bbneqhV3X5QMO4LAtoUFs7otxyivOgoqam5Il5qx81FuI4vw==" 14 | "resolved" "https://registry.npmjs.org/@coral-xyz/anchor/-/anchor-0.28.0.tgz" 15 | "version" "0.28.0" 16 | dependencies: 17 | "@coral-xyz/borsh" "^0.28.0" 18 | "@solana/web3.js" "^1.68.0" 19 | "base64-js" "^1.5.1" 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 | "js-sha256" "^0.9.0" 28 | "pako" "^2.0.3" 29 | "snake-case" "^3.0.4" 30 | "superstruct" "^0.15.4" 31 | "toml" "^3.0.0" 32 | 33 | "@coral-xyz/borsh@^0.28.0": 34 | "integrity" "sha512-/u1VTzw7XooK7rqeD7JLUSwOyRSesPUk0U37BV9zK0axJc1q0nRbKFGFLYCQ16OtdOJTTwGfGp11Lx9B45bRCQ==" 35 | "resolved" "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.28.0.tgz" 36 | "version" "0.28.0" 37 | dependencies: 38 | "bn.js" "^5.1.2" 39 | "buffer-layout" "^1.2.0" 40 | 41 | "@noble/curves@^1.0.0": 42 | "integrity" "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==" 43 | "resolved" "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz" 44 | "version" "1.1.0" 45 | dependencies: 46 | "@noble/hashes" "1.3.1" 47 | 48 | "@noble/hashes@^1.3.0", "@noble/hashes@1.3.1": 49 | "integrity" "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==" 50 | "resolved" "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz" 51 | "version" "1.3.1" 52 | 53 | "@solana/buffer-layout-utils@^0.2.0": 54 | "integrity" "sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g==" 55 | "resolved" "https://registry.npmjs.org/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz" 56 | "version" "0.2.0" 57 | dependencies: 58 | "@solana/buffer-layout" "^4.0.0" 59 | "@solana/web3.js" "^1.32.0" 60 | "bigint-buffer" "^1.1.5" 61 | "bignumber.js" "^9.0.1" 62 | 63 | "@solana/buffer-layout@^4.0.0": 64 | "integrity" "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==" 65 | "resolved" "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz" 66 | "version" "4.0.1" 67 | dependencies: 68 | "buffer" "~6.0.3" 69 | 70 | "@solana/spl-token@^0.3.8": 71 | "integrity" "sha512-ogwGDcunP9Lkj+9CODOWMiVJEdRtqHAtX2rWF62KxnnSWtMZtV9rDhTrZFshiyJmxDnRL/1nKE1yJHg4jjs3gg==" 72 | "resolved" "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.3.8.tgz" 73 | "version" "0.3.8" 74 | dependencies: 75 | "@solana/buffer-layout" "^4.0.0" 76 | "@solana/buffer-layout-utils" "^0.2.0" 77 | "buffer" "^6.0.3" 78 | 79 | "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.47.4", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.77.3": 80 | "integrity" "sha512-PHaO0BdoiQRPpieC1p31wJsBaxwIOWLh8j2ocXNKX8boCQVldt26Jqm2tZE4KlrvnCIV78owPLv1pEUgqhxZ3w==" 81 | "resolved" "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.77.3.tgz" 82 | "version" "1.77.3" 83 | dependencies: 84 | "@babel/runtime" "^7.12.5" 85 | "@noble/curves" "^1.0.0" 86 | "@noble/hashes" "^1.3.0" 87 | "@solana/buffer-layout" "^4.0.0" 88 | "agentkeepalive" "^4.2.1" 89 | "bigint-buffer" "^1.1.5" 90 | "bn.js" "^5.0.0" 91 | "borsh" "^0.7.0" 92 | "bs58" "^4.0.1" 93 | "buffer" "6.0.3" 94 | "fast-stable-stringify" "^1.0.0" 95 | "jayson" "^4.1.0" 96 | "node-fetch" "^2.6.7" 97 | "rpc-websockets" "^7.5.1" 98 | "superstruct" "^0.14.2" 99 | 100 | "@types/bn.js@^5.1.0": 101 | "integrity" "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==" 102 | "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" 103 | "version" "5.1.1" 104 | dependencies: 105 | "@types/node" "*" 106 | 107 | "@types/chai@^4.3.0": 108 | "integrity" "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==" 109 | "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz" 110 | "version" "4.3.5" 111 | 112 | "@types/connect@^3.4.33": 113 | "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" 114 | "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" 115 | "version" "3.4.35" 116 | dependencies: 117 | "@types/node" "*" 118 | 119 | "@types/json5@^0.0.29": 120 | "integrity" "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" 121 | "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 122 | "version" "0.0.29" 123 | 124 | "@types/mocha@^9.0.0": 125 | "integrity" "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" 126 | "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" 127 | "version" "9.1.1" 128 | 129 | "@types/node@*": 130 | "integrity" "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==" 131 | "resolved" "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz" 132 | "version" "20.3.1" 133 | 134 | "@types/node@^12.12.54": 135 | "integrity" "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" 136 | "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" 137 | "version" "12.20.55" 138 | 139 | "@types/ws@^7.4.4": 140 | "integrity" "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==" 141 | "resolved" "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" 142 | "version" "7.4.7" 143 | dependencies: 144 | "@types/node" "*" 145 | 146 | "@ungap/promise-all-settled@1.1.2": 147 | "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" 148 | "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" 149 | "version" "1.1.2" 150 | 151 | "agentkeepalive@^4.2.1": 152 | "integrity" "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==" 153 | "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" 154 | "version" "4.3.0" 155 | dependencies: 156 | "debug" "^4.1.0" 157 | "depd" "^2.0.0" 158 | "humanize-ms" "^1.2.1" 159 | 160 | "ansi-colors@4.1.1": 161 | "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" 162 | "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" 163 | "version" "4.1.1" 164 | 165 | "ansi-regex@^5.0.1": 166 | "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 167 | "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 168 | "version" "5.0.1" 169 | 170 | "ansi-styles@^4.0.0", "ansi-styles@^4.1.0": 171 | "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" 172 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 173 | "version" "4.3.0" 174 | dependencies: 175 | "color-convert" "^2.0.1" 176 | 177 | "anymatch@~3.1.2": 178 | "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==" 179 | "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" 180 | "version" "3.1.3" 181 | dependencies: 182 | "normalize-path" "^3.0.0" 183 | "picomatch" "^2.0.4" 184 | 185 | "argparse@^2.0.1": 186 | "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 187 | "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 188 | "version" "2.0.1" 189 | 190 | "arrify@^1.0.0": 191 | "integrity" "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" 192 | "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" 193 | "version" "1.0.1" 194 | 195 | "assertion-error@^1.1.0": 196 | "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" 197 | "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" 198 | "version" "1.1.0" 199 | 200 | "balanced-match@^1.0.0": 201 | "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 202 | "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 203 | "version" "1.0.2" 204 | 205 | "base-x@^3.0.2": 206 | "integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" 207 | "resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" 208 | "version" "3.0.9" 209 | dependencies: 210 | "safe-buffer" "^5.0.1" 211 | 212 | "base64-js@^1.3.1", "base64-js@^1.5.1": 213 | "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 214 | "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 215 | "version" "1.5.1" 216 | 217 | "bigint-buffer@^1.1.5": 218 | "integrity" "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==" 219 | "resolved" "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz" 220 | "version" "1.1.5" 221 | dependencies: 222 | "bindings" "^1.3.0" 223 | 224 | "bignumber.js@^9.0.1": 225 | "integrity" "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" 226 | "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz" 227 | "version" "9.1.1" 228 | 229 | "binary-extensions@^2.0.0": 230 | "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 231 | "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" 232 | "version" "2.2.0" 233 | 234 | "bindings@^1.3.0": 235 | "integrity" "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==" 236 | "resolved" "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" 237 | "version" "1.5.0" 238 | dependencies: 239 | "file-uri-to-path" "1.0.0" 240 | 241 | "bn.js@^5.0.0", "bn.js@^5.1.2", "bn.js@^5.2.0": 242 | "integrity" "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" 243 | "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" 244 | "version" "5.2.1" 245 | 246 | "borsh@^0.7.0": 247 | "integrity" "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==" 248 | "resolved" "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz" 249 | "version" "0.7.0" 250 | dependencies: 251 | "bn.js" "^5.2.0" 252 | "bs58" "^4.0.0" 253 | "text-encoding-utf-8" "^1.0.2" 254 | 255 | "brace-expansion@^1.1.7": 256 | "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" 257 | "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 258 | "version" "1.1.11" 259 | dependencies: 260 | "balanced-match" "^1.0.0" 261 | "concat-map" "0.0.1" 262 | 263 | "braces@~3.0.2": 264 | "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" 265 | "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 266 | "version" "3.0.2" 267 | dependencies: 268 | "fill-range" "^7.0.1" 269 | 270 | "browser-stdout@1.3.1": 271 | "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" 272 | "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" 273 | "version" "1.3.1" 274 | 275 | "bs58@^4.0.0", "bs58@^4.0.1": 276 | "integrity" "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==" 277 | "resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" 278 | "version" "4.0.1" 279 | dependencies: 280 | "base-x" "^3.0.2" 281 | 282 | "buffer-from@^1.0.0", "buffer-from@^1.1.0": 283 | "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 284 | "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" 285 | "version" "1.1.2" 286 | 287 | "buffer-layout@^1.2.0", "buffer-layout@^1.2.2": 288 | "integrity" "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==" 289 | "resolved" "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz" 290 | "version" "1.2.2" 291 | 292 | "buffer@^6.0.3", "buffer@~6.0.3", "buffer@6.0.3": 293 | "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" 294 | "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" 295 | "version" "6.0.3" 296 | dependencies: 297 | "base64-js" "^1.3.1" 298 | "ieee754" "^1.2.1" 299 | 300 | "bufferutil@^4.0.1": 301 | "integrity" "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==" 302 | "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz" 303 | "version" "4.0.7" 304 | dependencies: 305 | "node-gyp-build" "^4.3.0" 306 | 307 | "camelcase@^6.0.0", "camelcase@^6.3.0": 308 | "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" 309 | "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" 310 | "version" "6.3.0" 311 | 312 | "chai@^4.3.4": 313 | "integrity" "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==" 314 | "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz" 315 | "version" "4.3.7" 316 | dependencies: 317 | "assertion-error" "^1.1.0" 318 | "check-error" "^1.0.2" 319 | "deep-eql" "^4.1.2" 320 | "get-func-name" "^2.0.0" 321 | "loupe" "^2.3.1" 322 | "pathval" "^1.1.1" 323 | "type-detect" "^4.0.5" 324 | 325 | "chalk@^4.1.0": 326 | "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" 327 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 328 | "version" "4.1.2" 329 | dependencies: 330 | "ansi-styles" "^4.1.0" 331 | "supports-color" "^7.1.0" 332 | 333 | "check-error@^1.0.2": 334 | "integrity" "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" 335 | "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" 336 | "version" "1.0.2" 337 | 338 | "chokidar@3.5.3": 339 | "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" 340 | "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 341 | "version" "3.5.3" 342 | dependencies: 343 | "anymatch" "~3.1.2" 344 | "braces" "~3.0.2" 345 | "glob-parent" "~5.1.2" 346 | "is-binary-path" "~2.1.0" 347 | "is-glob" "~4.0.1" 348 | "normalize-path" "~3.0.0" 349 | "readdirp" "~3.6.0" 350 | optionalDependencies: 351 | "fsevents" "~2.3.2" 352 | 353 | "cliui@^7.0.2": 354 | "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" 355 | "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" 356 | "version" "7.0.4" 357 | dependencies: 358 | "string-width" "^4.2.0" 359 | "strip-ansi" "^6.0.0" 360 | "wrap-ansi" "^7.0.0" 361 | 362 | "color-convert@^2.0.1": 363 | "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" 364 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 365 | "version" "2.0.1" 366 | dependencies: 367 | "color-name" "~1.1.4" 368 | 369 | "color-name@~1.1.4": 370 | "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 371 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 372 | "version" "1.1.4" 373 | 374 | "commander@^2.20.3": 375 | "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 376 | "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" 377 | "version" "2.20.3" 378 | 379 | "concat-map@0.0.1": 380 | "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 381 | "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 382 | "version" "0.0.1" 383 | 384 | "cross-fetch@^3.1.5": 385 | "integrity" "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==" 386 | "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz" 387 | "version" "3.1.6" 388 | dependencies: 389 | "node-fetch" "^2.6.11" 390 | 391 | "crypto-hash@^1.3.0": 392 | "integrity" "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==" 393 | "resolved" "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz" 394 | "version" "1.3.0" 395 | 396 | "debug@^4.1.0": 397 | "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" 398 | "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 399 | "version" "4.3.4" 400 | dependencies: 401 | "ms" "2.1.2" 402 | 403 | "debug@4.3.3": 404 | "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" 405 | "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" 406 | "version" "4.3.3" 407 | dependencies: 408 | "ms" "2.1.2" 409 | 410 | "decamelize@^4.0.0": 411 | "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" 412 | "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" 413 | "version" "4.0.0" 414 | 415 | "deep-eql@^4.1.2": 416 | "integrity" "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==" 417 | "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" 418 | "version" "4.1.3" 419 | dependencies: 420 | "type-detect" "^4.0.0" 421 | 422 | "delay@^5.0.0": 423 | "integrity" "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" 424 | "resolved" "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" 425 | "version" "5.0.0" 426 | 427 | "depd@^2.0.0": 428 | "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 429 | "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" 430 | "version" "2.0.0" 431 | 432 | "diff@^3.1.0": 433 | "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" 434 | "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" 435 | "version" "3.5.0" 436 | 437 | "diff@5.0.0": 438 | "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" 439 | "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" 440 | "version" "5.0.0" 441 | 442 | "dot-case@^3.0.4": 443 | "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==" 444 | "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" 445 | "version" "3.0.4" 446 | dependencies: 447 | "no-case" "^3.0.4" 448 | "tslib" "^2.0.3" 449 | 450 | "emoji-regex@^8.0.0": 451 | "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 452 | "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 453 | "version" "8.0.0" 454 | 455 | "es6-promise@^4.0.3": 456 | "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" 457 | "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" 458 | "version" "4.2.8" 459 | 460 | "es6-promisify@^5.0.0": 461 | "integrity" "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==" 462 | "resolved" "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" 463 | "version" "5.0.0" 464 | dependencies: 465 | "es6-promise" "^4.0.3" 466 | 467 | "escalade@^3.1.1": 468 | "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 469 | "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 470 | "version" "3.1.1" 471 | 472 | "escape-string-regexp@4.0.0": 473 | "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 474 | "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 475 | "version" "4.0.0" 476 | 477 | "eventemitter3@^4.0.7": 478 | "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" 479 | "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" 480 | "version" "4.0.7" 481 | 482 | "eyes@^0.1.8": 483 | "integrity" "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" 484 | "resolved" "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" 485 | "version" "0.1.8" 486 | 487 | "fast-stable-stringify@^1.0.0": 488 | "integrity" "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==" 489 | "resolved" "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz" 490 | "version" "1.0.0" 491 | 492 | "file-uri-to-path@1.0.0": 493 | "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 494 | "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" 495 | "version" "1.0.0" 496 | 497 | "fill-range@^7.0.1": 498 | "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" 499 | "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 500 | "version" "7.0.1" 501 | dependencies: 502 | "to-regex-range" "^5.0.1" 503 | 504 | "find-up@5.0.0": 505 | "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" 506 | "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 507 | "version" "5.0.0" 508 | dependencies: 509 | "locate-path" "^6.0.0" 510 | "path-exists" "^4.0.0" 511 | 512 | "flat@^5.0.2": 513 | "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" 514 | "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" 515 | "version" "5.0.2" 516 | 517 | "fs.realpath@^1.0.0": 518 | "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 519 | "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 520 | "version" "1.0.0" 521 | 522 | "fsevents@~2.3.2": 523 | "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==" 524 | "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" 525 | "version" "2.3.2" 526 | 527 | "get-caller-file@^2.0.5": 528 | "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 529 | "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 530 | "version" "2.0.5" 531 | 532 | "get-func-name@^2.0.0": 533 | "integrity" "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" 534 | "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" 535 | "version" "2.0.0" 536 | 537 | "glob-parent@~5.1.2": 538 | "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" 539 | "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 540 | "version" "5.1.2" 541 | dependencies: 542 | "is-glob" "^4.0.1" 543 | 544 | "glob@7.2.0": 545 | "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" 546 | "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" 547 | "version" "7.2.0" 548 | dependencies: 549 | "fs.realpath" "^1.0.0" 550 | "inflight" "^1.0.4" 551 | "inherits" "2" 552 | "minimatch" "^3.0.4" 553 | "once" "^1.3.0" 554 | "path-is-absolute" "^1.0.0" 555 | 556 | "growl@1.10.5": 557 | "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" 558 | "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" 559 | "version" "1.10.5" 560 | 561 | "has-flag@^4.0.0": 562 | "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 563 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 564 | "version" "4.0.0" 565 | 566 | "he@1.2.0": 567 | "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 568 | "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" 569 | "version" "1.2.0" 570 | 571 | "humanize-ms@^1.2.1": 572 | "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" 573 | "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" 574 | "version" "1.2.1" 575 | dependencies: 576 | "ms" "^2.0.0" 577 | 578 | "ieee754@^1.2.1": 579 | "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 580 | "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 581 | "version" "1.2.1" 582 | 583 | "inflight@^1.0.4": 584 | "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" 585 | "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 586 | "version" "1.0.6" 587 | dependencies: 588 | "once" "^1.3.0" 589 | "wrappy" "1" 590 | 591 | "inherits@2": 592 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 593 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 594 | "version" "2.0.4" 595 | 596 | "is-binary-path@~2.1.0": 597 | "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" 598 | "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 599 | "version" "2.1.0" 600 | dependencies: 601 | "binary-extensions" "^2.0.0" 602 | 603 | "is-extglob@^2.1.1": 604 | "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 605 | "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 606 | "version" "2.1.1" 607 | 608 | "is-fullwidth-code-point@^3.0.0": 609 | "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 610 | "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 611 | "version" "3.0.0" 612 | 613 | "is-glob@^4.0.1", "is-glob@~4.0.1": 614 | "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" 615 | "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 616 | "version" "4.0.3" 617 | dependencies: 618 | "is-extglob" "^2.1.1" 619 | 620 | "is-number@^7.0.0": 621 | "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 622 | "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 623 | "version" "7.0.0" 624 | 625 | "is-plain-obj@^2.1.0": 626 | "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" 627 | "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" 628 | "version" "2.1.0" 629 | 630 | "is-unicode-supported@^0.1.0": 631 | "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" 632 | "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" 633 | "version" "0.1.0" 634 | 635 | "isexe@^2.0.0": 636 | "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 637 | "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 638 | "version" "2.0.0" 639 | 640 | "isomorphic-ws@^4.0.1": 641 | "integrity" "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" 642 | "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" 643 | "version" "4.0.1" 644 | 645 | "jayson@^4.1.0": 646 | "integrity" "sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==" 647 | "resolved" "https://registry.npmjs.org/jayson/-/jayson-4.1.0.tgz" 648 | "version" "4.1.0" 649 | dependencies: 650 | "@types/connect" "^3.4.33" 651 | "@types/node" "^12.12.54" 652 | "@types/ws" "^7.4.4" 653 | "commander" "^2.20.3" 654 | "delay" "^5.0.0" 655 | "es6-promisify" "^5.0.0" 656 | "eyes" "^0.1.8" 657 | "isomorphic-ws" "^4.0.1" 658 | "json-stringify-safe" "^5.0.1" 659 | "JSONStream" "^1.3.5" 660 | "uuid" "^8.3.2" 661 | "ws" "^7.4.5" 662 | 663 | "js-sha256@^0.9.0": 664 | "integrity" "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" 665 | "resolved" "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" 666 | "version" "0.9.0" 667 | 668 | "js-yaml@4.1.0": 669 | "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" 670 | "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 671 | "version" "4.1.0" 672 | dependencies: 673 | "argparse" "^2.0.1" 674 | 675 | "json-stringify-safe@^5.0.1": 676 | "integrity" "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" 677 | "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" 678 | "version" "5.0.1" 679 | 680 | "json5@^1.0.2": 681 | "integrity" "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==" 682 | "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" 683 | "version" "1.0.2" 684 | dependencies: 685 | "minimist" "^1.2.0" 686 | 687 | "jsonparse@^1.2.0": 688 | "integrity" "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" 689 | "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" 690 | "version" "1.3.1" 691 | 692 | "JSONStream@^1.3.5": 693 | "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" 694 | "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" 695 | "version" "1.3.5" 696 | dependencies: 697 | "jsonparse" "^1.2.0" 698 | "through" ">=2.2.7 <3" 699 | 700 | "locate-path@^6.0.0": 701 | "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" 702 | "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 703 | "version" "6.0.0" 704 | dependencies: 705 | "p-locate" "^5.0.0" 706 | 707 | "log-symbols@4.1.0": 708 | "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" 709 | "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" 710 | "version" "4.1.0" 711 | dependencies: 712 | "chalk" "^4.1.0" 713 | "is-unicode-supported" "^0.1.0" 714 | 715 | "loupe@^2.3.1": 716 | "integrity" "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==" 717 | "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz" 718 | "version" "2.3.6" 719 | dependencies: 720 | "get-func-name" "^2.0.0" 721 | 722 | "lower-case@^2.0.2": 723 | "integrity" "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==" 724 | "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" 725 | "version" "2.0.2" 726 | dependencies: 727 | "tslib" "^2.0.3" 728 | 729 | "make-error@^1.1.1": 730 | "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 731 | "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" 732 | "version" "1.3.6" 733 | 734 | "minimatch@^3.0.4": 735 | "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" 736 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 737 | "version" "3.1.2" 738 | dependencies: 739 | "brace-expansion" "^1.1.7" 740 | 741 | "minimatch@4.2.1": 742 | "integrity" "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==" 743 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz" 744 | "version" "4.2.1" 745 | dependencies: 746 | "brace-expansion" "^1.1.7" 747 | 748 | "minimist@^1.2.0", "minimist@^1.2.6": 749 | "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" 750 | "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" 751 | "version" "1.2.8" 752 | 753 | "mkdirp@^0.5.1": 754 | "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" 755 | "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" 756 | "version" "0.5.6" 757 | dependencies: 758 | "minimist" "^1.2.6" 759 | 760 | "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": 761 | "integrity" "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==" 762 | "resolved" "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz" 763 | "version" "9.2.2" 764 | dependencies: 765 | "@ungap/promise-all-settled" "1.1.2" 766 | "ansi-colors" "4.1.1" 767 | "browser-stdout" "1.3.1" 768 | "chokidar" "3.5.3" 769 | "debug" "4.3.3" 770 | "diff" "5.0.0" 771 | "escape-string-regexp" "4.0.0" 772 | "find-up" "5.0.0" 773 | "glob" "7.2.0" 774 | "growl" "1.10.5" 775 | "he" "1.2.0" 776 | "js-yaml" "4.1.0" 777 | "log-symbols" "4.1.0" 778 | "minimatch" "4.2.1" 779 | "ms" "2.1.3" 780 | "nanoid" "3.3.1" 781 | "serialize-javascript" "6.0.0" 782 | "strip-json-comments" "3.1.1" 783 | "supports-color" "8.1.1" 784 | "which" "2.0.2" 785 | "workerpool" "6.2.0" 786 | "yargs" "16.2.0" 787 | "yargs-parser" "20.2.4" 788 | "yargs-unparser" "2.0.0" 789 | 790 | "ms@^2.0.0": 791 | "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 792 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 793 | "version" "2.1.3" 794 | 795 | "ms@2.1.2": 796 | "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 797 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 798 | "version" "2.1.2" 799 | 800 | "ms@2.1.3": 801 | "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 802 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 803 | "version" "2.1.3" 804 | 805 | "nanoid@3.3.1": 806 | "integrity" "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" 807 | "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz" 808 | "version" "3.3.1" 809 | 810 | "no-case@^3.0.4": 811 | "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==" 812 | "resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" 813 | "version" "3.0.4" 814 | dependencies: 815 | "lower-case" "^2.0.2" 816 | "tslib" "^2.0.3" 817 | 818 | "node-fetch@^2.6.11", "node-fetch@^2.6.7": 819 | "integrity" "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==" 820 | "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" 821 | "version" "2.6.11" 822 | dependencies: 823 | "whatwg-url" "^5.0.0" 824 | 825 | "node-gyp-build@^4.3.0": 826 | "integrity" "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==" 827 | "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" 828 | "version" "4.6.0" 829 | 830 | "normalize-path@^3.0.0", "normalize-path@~3.0.0": 831 | "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 832 | "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 833 | "version" "3.0.0" 834 | 835 | "once@^1.3.0": 836 | "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" 837 | "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 838 | "version" "1.4.0" 839 | dependencies: 840 | "wrappy" "1" 841 | 842 | "p-limit@^3.0.2": 843 | "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" 844 | "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 845 | "version" "3.1.0" 846 | dependencies: 847 | "yocto-queue" "^0.1.0" 848 | 849 | "p-locate@^5.0.0": 850 | "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" 851 | "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 852 | "version" "5.0.0" 853 | dependencies: 854 | "p-limit" "^3.0.2" 855 | 856 | "pako@^2.0.3": 857 | "integrity" "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" 858 | "resolved" "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" 859 | "version" "2.1.0" 860 | 861 | "path-exists@^4.0.0": 862 | "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 863 | "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 864 | "version" "4.0.0" 865 | 866 | "path-is-absolute@^1.0.0": 867 | "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" 868 | "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 869 | "version" "1.0.1" 870 | 871 | "pathval@^1.1.1": 872 | "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" 873 | "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" 874 | "version" "1.1.1" 875 | 876 | "picomatch@^2.0.4", "picomatch@^2.2.1": 877 | "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 878 | "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 879 | "version" "2.3.1" 880 | 881 | "prettier@^2.6.2": 882 | "integrity" "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==" 883 | "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" 884 | "version" "2.8.8" 885 | 886 | "randombytes@^2.1.0": 887 | "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" 888 | "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" 889 | "version" "2.1.0" 890 | dependencies: 891 | "safe-buffer" "^5.1.0" 892 | 893 | "readdirp@~3.6.0": 894 | "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" 895 | "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 896 | "version" "3.6.0" 897 | dependencies: 898 | "picomatch" "^2.2.1" 899 | 900 | "regenerator-runtime@^0.13.11": 901 | "integrity" "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" 902 | "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" 903 | "version" "0.13.11" 904 | 905 | "require-directory@^2.1.1": 906 | "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 907 | "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 908 | "version" "2.1.1" 909 | 910 | "rpc-websockets@^7.5.1": 911 | "integrity" "sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==" 912 | "resolved" "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.5.1.tgz" 913 | "version" "7.5.1" 914 | dependencies: 915 | "@babel/runtime" "^7.17.2" 916 | "eventemitter3" "^4.0.7" 917 | "uuid" "^8.3.2" 918 | "ws" "^8.5.0" 919 | optionalDependencies: 920 | "bufferutil" "^4.0.1" 921 | "utf-8-validate" "^5.0.2" 922 | 923 | "safe-buffer@^5.0.1", "safe-buffer@^5.1.0": 924 | "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 925 | "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 926 | "version" "5.2.1" 927 | 928 | "serialize-javascript@6.0.0": 929 | "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" 930 | "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" 931 | "version" "6.0.0" 932 | dependencies: 933 | "randombytes" "^2.1.0" 934 | 935 | "snake-case@^3.0.4": 936 | "integrity" "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==" 937 | "resolved" "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" 938 | "version" "3.0.4" 939 | dependencies: 940 | "dot-case" "^3.0.4" 941 | "tslib" "^2.0.3" 942 | 943 | "source-map-support@^0.5.6": 944 | "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" 945 | "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" 946 | "version" "0.5.21" 947 | dependencies: 948 | "buffer-from" "^1.0.0" 949 | "source-map" "^0.6.0" 950 | 951 | "source-map@^0.6.0": 952 | "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 953 | "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 954 | "version" "0.6.1" 955 | 956 | "string-width@^4.1.0", "string-width@^4.2.0": 957 | "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" 958 | "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 959 | "version" "4.2.3" 960 | dependencies: 961 | "emoji-regex" "^8.0.0" 962 | "is-fullwidth-code-point" "^3.0.0" 963 | "strip-ansi" "^6.0.1" 964 | 965 | "strip-ansi@^6.0.0", "strip-ansi@^6.0.1": 966 | "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" 967 | "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 968 | "version" "6.0.1" 969 | dependencies: 970 | "ansi-regex" "^5.0.1" 971 | 972 | "strip-bom@^3.0.0": 973 | "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" 974 | "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 975 | "version" "3.0.0" 976 | 977 | "strip-json-comments@3.1.1": 978 | "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 979 | "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 980 | "version" "3.1.1" 981 | 982 | "superstruct@^0.14.2": 983 | "integrity" "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" 984 | "resolved" "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" 985 | "version" "0.14.2" 986 | 987 | "superstruct@^0.15.4": 988 | "integrity" "sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==" 989 | "resolved" "https://registry.npmjs.org/superstruct/-/superstruct-0.15.5.tgz" 990 | "version" "0.15.5" 991 | 992 | "supports-color@^7.1.0": 993 | "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" 994 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 995 | "version" "7.2.0" 996 | dependencies: 997 | "has-flag" "^4.0.0" 998 | 999 | "supports-color@8.1.1": 1000 | "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" 1001 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" 1002 | "version" "8.1.1" 1003 | dependencies: 1004 | "has-flag" "^4.0.0" 1005 | 1006 | "text-encoding-utf-8@^1.0.2": 1007 | "integrity" "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" 1008 | "resolved" "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" 1009 | "version" "1.0.2" 1010 | 1011 | "through@>=2.2.7 <3": 1012 | "integrity" "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" 1013 | "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1014 | "version" "2.3.8" 1015 | 1016 | "to-regex-range@^5.0.1": 1017 | "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" 1018 | "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1019 | "version" "5.0.1" 1020 | dependencies: 1021 | "is-number" "^7.0.0" 1022 | 1023 | "toml@^3.0.0": 1024 | "integrity" "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" 1025 | "resolved" "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" 1026 | "version" "3.0.0" 1027 | 1028 | "tr46@~0.0.3": 1029 | "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1030 | "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" 1031 | "version" "0.0.3" 1032 | 1033 | "ts-mocha@^10.0.0": 1034 | "integrity" "sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw==" 1035 | "resolved" "https://registry.npmjs.org/ts-mocha/-/ts-mocha-10.0.0.tgz" 1036 | "version" "10.0.0" 1037 | dependencies: 1038 | "ts-node" "7.0.1" 1039 | optionalDependencies: 1040 | "tsconfig-paths" "^3.5.0" 1041 | 1042 | "ts-node@7.0.1": 1043 | "integrity" "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==" 1044 | "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz" 1045 | "version" "7.0.1" 1046 | dependencies: 1047 | "arrify" "^1.0.0" 1048 | "buffer-from" "^1.1.0" 1049 | "diff" "^3.1.0" 1050 | "make-error" "^1.1.1" 1051 | "minimist" "^1.2.0" 1052 | "mkdirp" "^0.5.1" 1053 | "source-map-support" "^0.5.6" 1054 | "yn" "^2.0.0" 1055 | 1056 | "tsconfig-paths@^3.5.0": 1057 | "integrity" "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==" 1058 | "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" 1059 | "version" "3.14.2" 1060 | dependencies: 1061 | "@types/json5" "^0.0.29" 1062 | "json5" "^1.0.2" 1063 | "minimist" "^1.2.6" 1064 | "strip-bom" "^3.0.0" 1065 | 1066 | "tslib@^2.0.3": 1067 | "integrity" "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" 1068 | "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz" 1069 | "version" "2.5.3" 1070 | 1071 | "type-detect@^4.0.0", "type-detect@^4.0.5": 1072 | "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" 1073 | "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" 1074 | "version" "4.0.8" 1075 | 1076 | "typescript@^4.3.5": 1077 | "integrity" "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" 1078 | "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" 1079 | "version" "4.9.5" 1080 | 1081 | "utf-8-validate@^5.0.2", "utf-8-validate@>=5.0.2": 1082 | "integrity" "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==" 1083 | "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz" 1084 | "version" "5.0.10" 1085 | dependencies: 1086 | "node-gyp-build" "^4.3.0" 1087 | 1088 | "uuid@^8.3.2": 1089 | "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 1090 | "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" 1091 | "version" "8.3.2" 1092 | 1093 | "webidl-conversions@^3.0.0": 1094 | "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1095 | "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" 1096 | "version" "3.0.1" 1097 | 1098 | "whatwg-url@^5.0.0": 1099 | "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" 1100 | "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" 1101 | "version" "5.0.0" 1102 | dependencies: 1103 | "tr46" "~0.0.3" 1104 | "webidl-conversions" "^3.0.0" 1105 | 1106 | "which@2.0.2": 1107 | "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" 1108 | "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1109 | "version" "2.0.2" 1110 | dependencies: 1111 | "isexe" "^2.0.0" 1112 | 1113 | "workerpool@6.2.0": 1114 | "integrity" "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" 1115 | "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" 1116 | "version" "6.2.0" 1117 | 1118 | "wrap-ansi@^7.0.0": 1119 | "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" 1120 | "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1121 | "version" "7.0.0" 1122 | dependencies: 1123 | "ansi-styles" "^4.0.0" 1124 | "string-width" "^4.1.0" 1125 | "strip-ansi" "^6.0.0" 1126 | 1127 | "wrappy@1": 1128 | "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1129 | "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1130 | "version" "1.0.2" 1131 | 1132 | "ws@*", "ws@^7.4.5": 1133 | "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" 1134 | "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" 1135 | "version" "7.5.9" 1136 | 1137 | "ws@^8.5.0": 1138 | "integrity" "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==" 1139 | "resolved" "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" 1140 | "version" "8.13.0" 1141 | 1142 | "y18n@^5.0.5": 1143 | "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 1144 | "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1145 | "version" "5.0.8" 1146 | 1147 | "yargs-parser@^20.2.2": 1148 | "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 1149 | "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" 1150 | "version" "20.2.9" 1151 | 1152 | "yargs-parser@20.2.4": 1153 | "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" 1154 | "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" 1155 | "version" "20.2.4" 1156 | 1157 | "yargs-unparser@2.0.0": 1158 | "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" 1159 | "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" 1160 | "version" "2.0.0" 1161 | dependencies: 1162 | "camelcase" "^6.0.0" 1163 | "decamelize" "^4.0.0" 1164 | "flat" "^5.0.2" 1165 | "is-plain-obj" "^2.1.0" 1166 | 1167 | "yargs@16.2.0": 1168 | "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" 1169 | "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" 1170 | "version" "16.2.0" 1171 | dependencies: 1172 | "cliui" "^7.0.2" 1173 | "escalade" "^3.1.1" 1174 | "get-caller-file" "^2.0.5" 1175 | "require-directory" "^2.1.1" 1176 | "string-width" "^4.2.0" 1177 | "y18n" "^5.0.5" 1178 | "yargs-parser" "^20.2.2" 1179 | 1180 | "yn@^2.0.0": 1181 | "integrity" "sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==" 1182 | "resolved" "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz" 1183 | "version" "2.0.0" 1184 | 1185 | "yocto-queue@^0.1.0": 1186 | "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" 1187 | "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1188 | "version" "0.1.0" 1189 | -------------------------------------------------------------------------------- /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.6" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 46 | dependencies = [ 47 | "getrandom 0.2.10", 48 | "once_cell", 49 | "version_check", 50 | ] 51 | 52 | [[package]] 53 | name = "ahash" 54 | version = "0.8.3" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" 57 | dependencies = [ 58 | "cfg-if", 59 | "getrandom 0.2.10", 60 | "once_cell", 61 | "version_check", 62 | ] 63 | 64 | [[package]] 65 | name = "aho-corasick" 66 | version = "1.0.2" 67 | source = "registry+https://github.com/rust-lang/crates.io-index" 68 | checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" 69 | dependencies = [ 70 | "memchr", 71 | ] 72 | 73 | [[package]] 74 | name = "anchor-attribute-access-control" 75 | version = "0.28.0" 76 | source = "registry+https://github.com/rust-lang/crates.io-index" 77 | checksum = "faa5be5b72abea167f87c868379ba3c2be356bfca9e6f474fd055fa0f7eeb4f2" 78 | dependencies = [ 79 | "anchor-syn", 80 | "anyhow", 81 | "proc-macro2", 82 | "quote", 83 | "regex", 84 | "syn 1.0.109", 85 | ] 86 | 87 | [[package]] 88 | name = "anchor-attribute-account" 89 | version = "0.28.0" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "f468970344c7c9f9d03b4da854fd7c54f21305059f53789d0045c1dd803f0018" 92 | dependencies = [ 93 | "anchor-syn", 94 | "anyhow", 95 | "bs58 0.5.0", 96 | "proc-macro2", 97 | "quote", 98 | "rustversion", 99 | "syn 1.0.109", 100 | ] 101 | 102 | [[package]] 103 | name = "anchor-attribute-constant" 104 | version = "0.28.0" 105 | source = "registry+https://github.com/rust-lang/crates.io-index" 106 | checksum = "59948e7f9ef8144c2aefb3f32a40c5fce2798baeec765ba038389e82301017ef" 107 | dependencies = [ 108 | "anchor-syn", 109 | "proc-macro2", 110 | "syn 1.0.109", 111 | ] 112 | 113 | [[package]] 114 | name = "anchor-attribute-error" 115 | version = "0.28.0" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "fc753c9d1c7981cb8948cf7e162fb0f64558999c0413058e2d43df1df5448086" 118 | dependencies = [ 119 | "anchor-syn", 120 | "proc-macro2", 121 | "quote", 122 | "syn 1.0.109", 123 | ] 124 | 125 | [[package]] 126 | name = "anchor-attribute-event" 127 | version = "0.28.0" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "f38b4e172ba1b52078f53fdc9f11e3dc0668ad27997838a0aad2d148afac8c97" 130 | dependencies = [ 131 | "anchor-syn", 132 | "anyhow", 133 | "proc-macro2", 134 | "quote", 135 | "syn 1.0.109", 136 | ] 137 | 138 | [[package]] 139 | name = "anchor-attribute-program" 140 | version = "0.28.0" 141 | source = "registry+https://github.com/rust-lang/crates.io-index" 142 | checksum = "4eebd21543606ab61e2d83d9da37d24d3886a49f390f9c43a1964735e8c0f0d5" 143 | dependencies = [ 144 | "anchor-syn", 145 | "anyhow", 146 | "proc-macro2", 147 | "quote", 148 | "syn 1.0.109", 149 | ] 150 | 151 | [[package]] 152 | name = "anchor-derive-accounts" 153 | version = "0.28.0" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "ec4720d899b3686396cced9508f23dab420f1308344456ec78ef76f98fda42af" 156 | dependencies = [ 157 | "anchor-syn", 158 | "anyhow", 159 | "proc-macro2", 160 | "quote", 161 | "syn 1.0.109", 162 | ] 163 | 164 | [[package]] 165 | name = "anchor-derive-space" 166 | version = "0.28.0" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "f495e85480bd96ddeb77b71d499247c7d4e8b501e75ecb234e9ef7ae7bd6552a" 169 | dependencies = [ 170 | "proc-macro2", 171 | "quote", 172 | "syn 1.0.109", 173 | ] 174 | 175 | [[package]] 176 | name = "anchor-lang" 177 | version = "0.28.0" 178 | source = "registry+https://github.com/rust-lang/crates.io-index" 179 | checksum = "0d2d4b20100f1310a774aba3471ef268e5c4ba4d5c28c0bbe663c2658acbc414" 180 | dependencies = [ 181 | "anchor-attribute-access-control", 182 | "anchor-attribute-account", 183 | "anchor-attribute-constant", 184 | "anchor-attribute-error", 185 | "anchor-attribute-event", 186 | "anchor-attribute-program", 187 | "anchor-derive-accounts", 188 | "anchor-derive-space", 189 | "arrayref", 190 | "base64 0.13.1", 191 | "bincode", 192 | "borsh 0.10.3", 193 | "bytemuck", 194 | "getrandom 0.2.10", 195 | "solana-program", 196 | "thiserror", 197 | ] 198 | 199 | [[package]] 200 | name = "anchor-spl" 201 | version = "0.28.0" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "78f860599da1c2354e7234c768783049eb42e2f54509ecfc942d2e0076a2da7b" 204 | dependencies = [ 205 | "anchor-lang", 206 | "solana-program", 207 | "spl-associated-token-account", 208 | "spl-token", 209 | "spl-token-2022", 210 | ] 211 | 212 | [[package]] 213 | name = "anchor-syn" 214 | version = "0.28.0" 215 | source = "registry+https://github.com/rust-lang/crates.io-index" 216 | checksum = "a125e4b0cc046cfec58f5aa25038e34cf440151d58f0db3afc55308251fe936d" 217 | dependencies = [ 218 | "anyhow", 219 | "bs58 0.5.0", 220 | "heck", 221 | "proc-macro2", 222 | "quote", 223 | "serde", 224 | "serde_json", 225 | "sha2 0.10.7", 226 | "syn 1.0.109", 227 | "thiserror", 228 | ] 229 | 230 | [[package]] 231 | name = "android-tzdata" 232 | version = "0.1.1" 233 | source = "registry+https://github.com/rust-lang/crates.io-index" 234 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 235 | 236 | [[package]] 237 | name = "anyhow" 238 | version = "1.0.71" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" 241 | 242 | [[package]] 243 | name = "ark-bn254" 244 | version = "0.4.0" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" 247 | dependencies = [ 248 | "ark-ec", 249 | "ark-ff", 250 | "ark-std", 251 | ] 252 | 253 | [[package]] 254 | name = "ark-ec" 255 | version = "0.4.2" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" 258 | dependencies = [ 259 | "ark-ff", 260 | "ark-poly", 261 | "ark-serialize", 262 | "ark-std", 263 | "derivative", 264 | "hashbrown 0.13.2", 265 | "itertools", 266 | "num-traits", 267 | "zeroize", 268 | ] 269 | 270 | [[package]] 271 | name = "ark-ff" 272 | version = "0.4.2" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" 275 | dependencies = [ 276 | "ark-ff-asm", 277 | "ark-ff-macros", 278 | "ark-serialize", 279 | "ark-std", 280 | "derivative", 281 | "digest 0.10.7", 282 | "itertools", 283 | "num-bigint", 284 | "num-traits", 285 | "paste", 286 | "rustc_version", 287 | "zeroize", 288 | ] 289 | 290 | [[package]] 291 | name = "ark-ff-asm" 292 | version = "0.4.2" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" 295 | dependencies = [ 296 | "quote", 297 | "syn 1.0.109", 298 | ] 299 | 300 | [[package]] 301 | name = "ark-ff-macros" 302 | version = "0.4.2" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" 305 | dependencies = [ 306 | "num-bigint", 307 | "num-traits", 308 | "proc-macro2", 309 | "quote", 310 | "syn 1.0.109", 311 | ] 312 | 313 | [[package]] 314 | name = "ark-poly" 315 | version = "0.4.2" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" 318 | dependencies = [ 319 | "ark-ff", 320 | "ark-serialize", 321 | "ark-std", 322 | "derivative", 323 | "hashbrown 0.13.2", 324 | ] 325 | 326 | [[package]] 327 | name = "ark-serialize" 328 | version = "0.4.2" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" 331 | dependencies = [ 332 | "ark-serialize-derive", 333 | "ark-std", 334 | "digest 0.10.7", 335 | "num-bigint", 336 | ] 337 | 338 | [[package]] 339 | name = "ark-serialize-derive" 340 | version = "0.4.2" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" 343 | dependencies = [ 344 | "proc-macro2", 345 | "quote", 346 | "syn 1.0.109", 347 | ] 348 | 349 | [[package]] 350 | name = "ark-std" 351 | version = "0.4.0" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" 354 | dependencies = [ 355 | "num-traits", 356 | "rand 0.8.5", 357 | ] 358 | 359 | [[package]] 360 | name = "array-bytes" 361 | version = "1.4.1" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "9ad284aeb45c13f2fb4f084de4a420ebf447423bdf9386c0540ce33cb3ef4b8c" 364 | 365 | [[package]] 366 | name = "arrayref" 367 | version = "0.3.7" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" 370 | 371 | [[package]] 372 | name = "arrayvec" 373 | version = "0.7.4" 374 | source = "registry+https://github.com/rust-lang/crates.io-index" 375 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" 376 | 377 | [[package]] 378 | name = "assert_matches" 379 | version = "1.5.0" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" 382 | 383 | [[package]] 384 | name = "atty" 385 | version = "0.2.14" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 388 | dependencies = [ 389 | "hermit-abi 0.1.19", 390 | "libc", 391 | "winapi", 392 | ] 393 | 394 | [[package]] 395 | name = "autocfg" 396 | version = "1.1.0" 397 | source = "registry+https://github.com/rust-lang/crates.io-index" 398 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 399 | 400 | [[package]] 401 | name = "base64" 402 | version = "0.12.3" 403 | source = "registry+https://github.com/rust-lang/crates.io-index" 404 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 405 | 406 | [[package]] 407 | name = "base64" 408 | version = "0.13.1" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 411 | 412 | [[package]] 413 | name = "base64" 414 | version = "0.21.2" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" 417 | 418 | [[package]] 419 | name = "bincode" 420 | version = "1.3.3" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 423 | dependencies = [ 424 | "serde", 425 | ] 426 | 427 | [[package]] 428 | name = "bitflags" 429 | version = "1.3.2" 430 | source = "registry+https://github.com/rust-lang/crates.io-index" 431 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 432 | 433 | [[package]] 434 | name = "bitmaps" 435 | version = "2.1.0" 436 | source = "registry+https://github.com/rust-lang/crates.io-index" 437 | checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" 438 | dependencies = [ 439 | "typenum", 440 | ] 441 | 442 | [[package]] 443 | name = "blake3" 444 | version = "1.4.0" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "729b71f35bd3fa1a4c86b85d32c8b9069ea7fe14f7a53cfabb65f62d4265b888" 447 | dependencies = [ 448 | "arrayref", 449 | "arrayvec", 450 | "cc", 451 | "cfg-if", 452 | "constant_time_eq", 453 | "digest 0.10.7", 454 | ] 455 | 456 | [[package]] 457 | name = "block-buffer" 458 | version = "0.9.0" 459 | source = "registry+https://github.com/rust-lang/crates.io-index" 460 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 461 | dependencies = [ 462 | "block-padding", 463 | "generic-array", 464 | ] 465 | 466 | [[package]] 467 | name = "block-buffer" 468 | version = "0.10.4" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 471 | dependencies = [ 472 | "generic-array", 473 | ] 474 | 475 | [[package]] 476 | name = "block-padding" 477 | version = "0.2.1" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 480 | 481 | [[package]] 482 | name = "borsh" 483 | version = "0.9.3" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" 486 | dependencies = [ 487 | "borsh-derive 0.9.3", 488 | "hashbrown 0.11.2", 489 | ] 490 | 491 | [[package]] 492 | name = "borsh" 493 | version = "0.10.3" 494 | source = "registry+https://github.com/rust-lang/crates.io-index" 495 | checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" 496 | dependencies = [ 497 | "borsh-derive 0.10.3", 498 | "hashbrown 0.13.2", 499 | ] 500 | 501 | [[package]] 502 | name = "borsh-derive" 503 | version = "0.9.3" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" 506 | dependencies = [ 507 | "borsh-derive-internal 0.9.3", 508 | "borsh-schema-derive-internal 0.9.3", 509 | "proc-macro-crate 0.1.5", 510 | "proc-macro2", 511 | "syn 1.0.109", 512 | ] 513 | 514 | [[package]] 515 | name = "borsh-derive" 516 | version = "0.10.3" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" 519 | dependencies = [ 520 | "borsh-derive-internal 0.10.3", 521 | "borsh-schema-derive-internal 0.10.3", 522 | "proc-macro-crate 0.1.5", 523 | "proc-macro2", 524 | "syn 1.0.109", 525 | ] 526 | 527 | [[package]] 528 | name = "borsh-derive-internal" 529 | version = "0.9.3" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" 532 | dependencies = [ 533 | "proc-macro2", 534 | "quote", 535 | "syn 1.0.109", 536 | ] 537 | 538 | [[package]] 539 | name = "borsh-derive-internal" 540 | version = "0.10.3" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" 543 | dependencies = [ 544 | "proc-macro2", 545 | "quote", 546 | "syn 1.0.109", 547 | ] 548 | 549 | [[package]] 550 | name = "borsh-schema-derive-internal" 551 | version = "0.9.3" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" 554 | dependencies = [ 555 | "proc-macro2", 556 | "quote", 557 | "syn 1.0.109", 558 | ] 559 | 560 | [[package]] 561 | name = "borsh-schema-derive-internal" 562 | version = "0.10.3" 563 | source = "registry+https://github.com/rust-lang/crates.io-index" 564 | checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" 565 | dependencies = [ 566 | "proc-macro2", 567 | "quote", 568 | "syn 1.0.109", 569 | ] 570 | 571 | [[package]] 572 | name = "bs58" 573 | version = "0.4.0" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 576 | 577 | [[package]] 578 | name = "bs58" 579 | version = "0.5.0" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" 582 | dependencies = [ 583 | "tinyvec", 584 | ] 585 | 586 | [[package]] 587 | name = "bumpalo" 588 | version = "3.13.0" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" 591 | 592 | [[package]] 593 | name = "bv" 594 | version = "0.11.1" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 597 | dependencies = [ 598 | "feature-probe", 599 | "serde", 600 | ] 601 | 602 | [[package]] 603 | name = "bytemuck" 604 | version = "1.13.1" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" 607 | dependencies = [ 608 | "bytemuck_derive", 609 | ] 610 | 611 | [[package]] 612 | name = "bytemuck_derive" 613 | version = "1.4.1" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" 616 | dependencies = [ 617 | "proc-macro2", 618 | "quote", 619 | "syn 2.0.20", 620 | ] 621 | 622 | [[package]] 623 | name = "byteorder" 624 | version = "1.4.3" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 627 | 628 | [[package]] 629 | name = "cc" 630 | version = "1.0.79" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" 633 | dependencies = [ 634 | "jobserver", 635 | ] 636 | 637 | [[package]] 638 | name = "cfg-if" 639 | version = "1.0.0" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 642 | 643 | [[package]] 644 | name = "chrono" 645 | version = "0.4.26" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" 648 | dependencies = [ 649 | "android-tzdata", 650 | "num-traits", 651 | ] 652 | 653 | [[package]] 654 | name = "cipher" 655 | version = "0.3.0" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 658 | dependencies = [ 659 | "generic-array", 660 | ] 661 | 662 | [[package]] 663 | name = "console_error_panic_hook" 664 | version = "0.1.7" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 667 | dependencies = [ 668 | "cfg-if", 669 | "wasm-bindgen", 670 | ] 671 | 672 | [[package]] 673 | name = "console_log" 674 | version = "0.2.2" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" 677 | dependencies = [ 678 | "log", 679 | "web-sys", 680 | ] 681 | 682 | [[package]] 683 | name = "constant_time_eq" 684 | version = "0.2.6" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6" 687 | 688 | [[package]] 689 | name = "cpufeatures" 690 | version = "0.2.8" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" 693 | dependencies = [ 694 | "libc", 695 | ] 696 | 697 | [[package]] 698 | name = "crossbeam-channel" 699 | version = "0.5.8" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" 702 | dependencies = [ 703 | "cfg-if", 704 | "crossbeam-utils", 705 | ] 706 | 707 | [[package]] 708 | name = "crossbeam-deque" 709 | version = "0.8.3" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" 712 | dependencies = [ 713 | "cfg-if", 714 | "crossbeam-epoch", 715 | "crossbeam-utils", 716 | ] 717 | 718 | [[package]] 719 | name = "crossbeam-epoch" 720 | version = "0.9.15" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" 723 | dependencies = [ 724 | "autocfg", 725 | "cfg-if", 726 | "crossbeam-utils", 727 | "memoffset", 728 | "scopeguard", 729 | ] 730 | 731 | [[package]] 732 | name = "crossbeam-utils" 733 | version = "0.8.16" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" 736 | dependencies = [ 737 | "cfg-if", 738 | ] 739 | 740 | [[package]] 741 | name = "crunchy" 742 | version = "0.2.2" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 745 | 746 | [[package]] 747 | name = "crypto-common" 748 | version = "0.1.6" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 751 | dependencies = [ 752 | "generic-array", 753 | "typenum", 754 | ] 755 | 756 | [[package]] 757 | name = "crypto-mac" 758 | version = "0.8.0" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 761 | dependencies = [ 762 | "generic-array", 763 | "subtle", 764 | ] 765 | 766 | [[package]] 767 | name = "ctr" 768 | version = "0.8.0" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" 771 | dependencies = [ 772 | "cipher", 773 | ] 774 | 775 | [[package]] 776 | name = "curve25519-dalek" 777 | version = "3.2.1" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 780 | dependencies = [ 781 | "byteorder", 782 | "digest 0.9.0", 783 | "rand_core 0.5.1", 784 | "serde", 785 | "subtle", 786 | "zeroize", 787 | ] 788 | 789 | [[package]] 790 | name = "darling" 791 | version = "0.20.1" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" 794 | dependencies = [ 795 | "darling_core", 796 | "darling_macro", 797 | ] 798 | 799 | [[package]] 800 | name = "darling_core" 801 | version = "0.20.1" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" 804 | dependencies = [ 805 | "fnv", 806 | "ident_case", 807 | "proc-macro2", 808 | "quote", 809 | "strsim", 810 | "syn 2.0.20", 811 | ] 812 | 813 | [[package]] 814 | name = "darling_macro" 815 | version = "0.20.1" 816 | source = "registry+https://github.com/rust-lang/crates.io-index" 817 | checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" 818 | dependencies = [ 819 | "darling_core", 820 | "quote", 821 | "syn 2.0.20", 822 | ] 823 | 824 | [[package]] 825 | name = "derivation-path" 826 | version = "0.2.0" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" 829 | 830 | [[package]] 831 | name = "derivative" 832 | version = "2.2.0" 833 | source = "registry+https://github.com/rust-lang/crates.io-index" 834 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 835 | dependencies = [ 836 | "proc-macro2", 837 | "quote", 838 | "syn 1.0.109", 839 | ] 840 | 841 | [[package]] 842 | name = "digest" 843 | version = "0.9.0" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 846 | dependencies = [ 847 | "generic-array", 848 | ] 849 | 850 | [[package]] 851 | name = "digest" 852 | version = "0.10.7" 853 | source = "registry+https://github.com/rust-lang/crates.io-index" 854 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 855 | dependencies = [ 856 | "block-buffer 0.10.4", 857 | "crypto-common", 858 | "subtle", 859 | ] 860 | 861 | [[package]] 862 | name = "ed25519" 863 | version = "1.5.3" 864 | source = "registry+https://github.com/rust-lang/crates.io-index" 865 | checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" 866 | dependencies = [ 867 | "signature", 868 | ] 869 | 870 | [[package]] 871 | name = "ed25519-dalek" 872 | version = "1.0.1" 873 | source = "registry+https://github.com/rust-lang/crates.io-index" 874 | checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" 875 | dependencies = [ 876 | "curve25519-dalek", 877 | "ed25519", 878 | "rand 0.7.3", 879 | "serde", 880 | "sha2 0.9.9", 881 | "zeroize", 882 | ] 883 | 884 | [[package]] 885 | name = "ed25519-dalek-bip32" 886 | version = "0.2.0" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" 889 | dependencies = [ 890 | "derivation-path", 891 | "ed25519-dalek", 892 | "hmac 0.12.1", 893 | "sha2 0.10.7", 894 | ] 895 | 896 | [[package]] 897 | name = "either" 898 | version = "1.8.1" 899 | source = "registry+https://github.com/rust-lang/crates.io-index" 900 | checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" 901 | 902 | [[package]] 903 | name = "env_logger" 904 | version = "0.9.3" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" 907 | dependencies = [ 908 | "atty", 909 | "humantime", 910 | "log", 911 | "regex", 912 | "termcolor", 913 | ] 914 | 915 | [[package]] 916 | name = "equivalent" 917 | version = "1.0.0" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" 920 | 921 | [[package]] 922 | name = "feature-probe" 923 | version = "0.1.1" 924 | source = "registry+https://github.com/rust-lang/crates.io-index" 925 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 926 | 927 | [[package]] 928 | name = "fnv" 929 | version = "1.0.7" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 932 | 933 | [[package]] 934 | name = "generic-array" 935 | version = "0.14.7" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 938 | dependencies = [ 939 | "serde", 940 | "typenum", 941 | "version_check", 942 | ] 943 | 944 | [[package]] 945 | name = "getrandom" 946 | version = "0.1.16" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 949 | dependencies = [ 950 | "cfg-if", 951 | "js-sys", 952 | "libc", 953 | "wasi 0.9.0+wasi-snapshot-preview1", 954 | "wasm-bindgen", 955 | ] 956 | 957 | [[package]] 958 | name = "getrandom" 959 | version = "0.2.10" 960 | source = "registry+https://github.com/rust-lang/crates.io-index" 961 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" 962 | dependencies = [ 963 | "cfg-if", 964 | "js-sys", 965 | "libc", 966 | "wasi 0.11.0+wasi-snapshot-preview1", 967 | "wasm-bindgen", 968 | ] 969 | 970 | [[package]] 971 | name = "hashbrown" 972 | version = "0.11.2" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 975 | dependencies = [ 976 | "ahash 0.7.6", 977 | ] 978 | 979 | [[package]] 980 | name = "hashbrown" 981 | version = "0.13.2" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" 984 | dependencies = [ 985 | "ahash 0.8.3", 986 | ] 987 | 988 | [[package]] 989 | name = "hashbrown" 990 | version = "0.14.0" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" 993 | 994 | [[package]] 995 | name = "heck" 996 | version = "0.3.3" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 999 | dependencies = [ 1000 | "unicode-segmentation", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "hermit-abi" 1005 | version = "0.1.19" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 1008 | dependencies = [ 1009 | "libc", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "hermit-abi" 1014 | version = "0.2.6" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" 1017 | dependencies = [ 1018 | "libc", 1019 | ] 1020 | 1021 | [[package]] 1022 | name = "hmac" 1023 | version = "0.8.1" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 1026 | dependencies = [ 1027 | "crypto-mac", 1028 | "digest 0.9.0", 1029 | ] 1030 | 1031 | [[package]] 1032 | name = "hmac" 1033 | version = "0.12.1" 1034 | source = "registry+https://github.com/rust-lang/crates.io-index" 1035 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1036 | dependencies = [ 1037 | "digest 0.10.7", 1038 | ] 1039 | 1040 | [[package]] 1041 | name = "hmac-drbg" 1042 | version = "0.3.0" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 1045 | dependencies = [ 1046 | "digest 0.9.0", 1047 | "generic-array", 1048 | "hmac 0.8.1", 1049 | ] 1050 | 1051 | [[package]] 1052 | name = "humantime" 1053 | version = "2.1.0" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1056 | 1057 | [[package]] 1058 | name = "ident_case" 1059 | version = "1.0.1" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1062 | 1063 | [[package]] 1064 | name = "im" 1065 | version = "15.1.0" 1066 | source = "registry+https://github.com/rust-lang/crates.io-index" 1067 | checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" 1068 | dependencies = [ 1069 | "bitmaps", 1070 | "rand_core 0.6.4", 1071 | "rand_xoshiro", 1072 | "rayon", 1073 | "serde", 1074 | "sized-chunks", 1075 | "typenum", 1076 | "version_check", 1077 | ] 1078 | 1079 | [[package]] 1080 | name = "indexmap" 1081 | version = "2.0.0" 1082 | source = "registry+https://github.com/rust-lang/crates.io-index" 1083 | checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" 1084 | dependencies = [ 1085 | "equivalent", 1086 | "hashbrown 0.14.0", 1087 | ] 1088 | 1089 | [[package]] 1090 | name = "itertools" 1091 | version = "0.10.5" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 1094 | dependencies = [ 1095 | "either", 1096 | ] 1097 | 1098 | [[package]] 1099 | name = "itoa" 1100 | version = "1.0.6" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" 1103 | 1104 | [[package]] 1105 | name = "jobserver" 1106 | version = "0.1.26" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" 1109 | dependencies = [ 1110 | "libc", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "js-sys" 1115 | version = "0.3.64" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" 1118 | dependencies = [ 1119 | "wasm-bindgen", 1120 | ] 1121 | 1122 | [[package]] 1123 | name = "keccak" 1124 | version = "0.1.4" 1125 | source = "registry+https://github.com/rust-lang/crates.io-index" 1126 | checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" 1127 | dependencies = [ 1128 | "cpufeatures", 1129 | ] 1130 | 1131 | [[package]] 1132 | name = "lazy_static" 1133 | version = "1.4.0" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1136 | 1137 | [[package]] 1138 | name = "libc" 1139 | version = "0.2.146" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" 1142 | 1143 | [[package]] 1144 | name = "libsecp256k1" 1145 | version = "0.6.0" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 1148 | dependencies = [ 1149 | "arrayref", 1150 | "base64 0.12.3", 1151 | "digest 0.9.0", 1152 | "hmac-drbg", 1153 | "libsecp256k1-core", 1154 | "libsecp256k1-gen-ecmult", 1155 | "libsecp256k1-gen-genmult", 1156 | "rand 0.7.3", 1157 | "serde", 1158 | "sha2 0.9.9", 1159 | "typenum", 1160 | ] 1161 | 1162 | [[package]] 1163 | name = "libsecp256k1-core" 1164 | version = "0.2.2" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 1167 | dependencies = [ 1168 | "crunchy", 1169 | "digest 0.9.0", 1170 | "subtle", 1171 | ] 1172 | 1173 | [[package]] 1174 | name = "libsecp256k1-gen-ecmult" 1175 | version = "0.2.1" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 1178 | dependencies = [ 1179 | "libsecp256k1-core", 1180 | ] 1181 | 1182 | [[package]] 1183 | name = "libsecp256k1-gen-genmult" 1184 | version = "0.2.1" 1185 | source = "registry+https://github.com/rust-lang/crates.io-index" 1186 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 1187 | dependencies = [ 1188 | "libsecp256k1-core", 1189 | ] 1190 | 1191 | [[package]] 1192 | name = "lock_api" 1193 | version = "0.4.10" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" 1196 | dependencies = [ 1197 | "autocfg", 1198 | "scopeguard", 1199 | ] 1200 | 1201 | [[package]] 1202 | name = "log" 1203 | version = "0.4.19" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" 1206 | 1207 | [[package]] 1208 | name = "memchr" 1209 | version = "2.5.0" 1210 | source = "registry+https://github.com/rust-lang/crates.io-index" 1211 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 1212 | 1213 | [[package]] 1214 | name = "memmap2" 1215 | version = "0.5.10" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" 1218 | dependencies = [ 1219 | "libc", 1220 | ] 1221 | 1222 | [[package]] 1223 | name = "memoffset" 1224 | version = "0.9.0" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" 1227 | dependencies = [ 1228 | "autocfg", 1229 | ] 1230 | 1231 | [[package]] 1232 | name = "merlin" 1233 | version = "3.0.0" 1234 | source = "registry+https://github.com/rust-lang/crates.io-index" 1235 | checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" 1236 | dependencies = [ 1237 | "byteorder", 1238 | "keccak", 1239 | "rand_core 0.6.4", 1240 | "zeroize", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "nft-lend-borrow" 1245 | version = "0.1.0" 1246 | dependencies = [ 1247 | "anchor-lang", 1248 | "anchor-spl", 1249 | ] 1250 | 1251 | [[package]] 1252 | name = "num-bigint" 1253 | version = "0.4.3" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 1256 | dependencies = [ 1257 | "autocfg", 1258 | "num-integer", 1259 | "num-traits", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "num-derive" 1264 | version = "0.3.3" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 1267 | dependencies = [ 1268 | "proc-macro2", 1269 | "quote", 1270 | "syn 1.0.109", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "num-integer" 1275 | version = "0.1.45" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1278 | dependencies = [ 1279 | "autocfg", 1280 | "num-traits", 1281 | ] 1282 | 1283 | [[package]] 1284 | name = "num-traits" 1285 | version = "0.2.15" 1286 | source = "registry+https://github.com/rust-lang/crates.io-index" 1287 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1288 | dependencies = [ 1289 | "autocfg", 1290 | ] 1291 | 1292 | [[package]] 1293 | name = "num_cpus" 1294 | version = "1.15.0" 1295 | source = "registry+https://github.com/rust-lang/crates.io-index" 1296 | checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" 1297 | dependencies = [ 1298 | "hermit-abi 0.2.6", 1299 | "libc", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "num_enum" 1304 | version = "0.5.11" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 1307 | dependencies = [ 1308 | "num_enum_derive 0.5.11", 1309 | ] 1310 | 1311 | [[package]] 1312 | name = "num_enum" 1313 | version = "0.6.1" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" 1316 | dependencies = [ 1317 | "num_enum_derive 0.6.1", 1318 | ] 1319 | 1320 | [[package]] 1321 | name = "num_enum_derive" 1322 | version = "0.5.11" 1323 | source = "registry+https://github.com/rust-lang/crates.io-index" 1324 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 1325 | dependencies = [ 1326 | "proc-macro-crate 1.3.1", 1327 | "proc-macro2", 1328 | "quote", 1329 | "syn 1.0.109", 1330 | ] 1331 | 1332 | [[package]] 1333 | name = "num_enum_derive" 1334 | version = "0.6.1" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" 1337 | dependencies = [ 1338 | "proc-macro-crate 1.3.1", 1339 | "proc-macro2", 1340 | "quote", 1341 | "syn 2.0.20", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "once_cell" 1346 | version = "1.18.0" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" 1349 | 1350 | [[package]] 1351 | name = "opaque-debug" 1352 | version = "0.3.0" 1353 | source = "registry+https://github.com/rust-lang/crates.io-index" 1354 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 1355 | 1356 | [[package]] 1357 | name = "parking_lot" 1358 | version = "0.12.1" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1361 | dependencies = [ 1362 | "lock_api", 1363 | "parking_lot_core", 1364 | ] 1365 | 1366 | [[package]] 1367 | name = "parking_lot_core" 1368 | version = "0.9.8" 1369 | source = "registry+https://github.com/rust-lang/crates.io-index" 1370 | checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" 1371 | dependencies = [ 1372 | "cfg-if", 1373 | "libc", 1374 | "redox_syscall", 1375 | "smallvec", 1376 | "windows-targets", 1377 | ] 1378 | 1379 | [[package]] 1380 | name = "paste" 1381 | version = "1.0.12" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" 1384 | 1385 | [[package]] 1386 | name = "pbkdf2" 1387 | version = "0.4.0" 1388 | source = "registry+https://github.com/rust-lang/crates.io-index" 1389 | checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" 1390 | dependencies = [ 1391 | "crypto-mac", 1392 | ] 1393 | 1394 | [[package]] 1395 | name = "pbkdf2" 1396 | version = "0.11.0" 1397 | source = "registry+https://github.com/rust-lang/crates.io-index" 1398 | checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" 1399 | dependencies = [ 1400 | "digest 0.10.7", 1401 | ] 1402 | 1403 | [[package]] 1404 | name = "percent-encoding" 1405 | version = "2.3.0" 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" 1407 | checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" 1408 | 1409 | [[package]] 1410 | name = "polyval" 1411 | version = "0.5.3" 1412 | source = "registry+https://github.com/rust-lang/crates.io-index" 1413 | checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" 1414 | dependencies = [ 1415 | "cfg-if", 1416 | "cpufeatures", 1417 | "opaque-debug", 1418 | "universal-hash", 1419 | ] 1420 | 1421 | [[package]] 1422 | name = "ppv-lite86" 1423 | version = "0.2.17" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1426 | 1427 | [[package]] 1428 | name = "proc-macro-crate" 1429 | version = "0.1.5" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 1432 | dependencies = [ 1433 | "toml", 1434 | ] 1435 | 1436 | [[package]] 1437 | name = "proc-macro-crate" 1438 | version = "1.3.1" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" 1441 | dependencies = [ 1442 | "once_cell", 1443 | "toml_edit", 1444 | ] 1445 | 1446 | [[package]] 1447 | name = "proc-macro2" 1448 | version = "1.0.60" 1449 | source = "registry+https://github.com/rust-lang/crates.io-index" 1450 | checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" 1451 | dependencies = [ 1452 | "unicode-ident", 1453 | ] 1454 | 1455 | [[package]] 1456 | name = "qstring" 1457 | version = "0.7.2" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" 1460 | dependencies = [ 1461 | "percent-encoding", 1462 | ] 1463 | 1464 | [[package]] 1465 | name = "quote" 1466 | version = "1.0.28" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" 1469 | dependencies = [ 1470 | "proc-macro2", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "rand" 1475 | version = "0.7.3" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1478 | dependencies = [ 1479 | "getrandom 0.1.16", 1480 | "libc", 1481 | "rand_chacha 0.2.2", 1482 | "rand_core 0.5.1", 1483 | "rand_hc", 1484 | ] 1485 | 1486 | [[package]] 1487 | name = "rand" 1488 | version = "0.8.5" 1489 | source = "registry+https://github.com/rust-lang/crates.io-index" 1490 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1491 | dependencies = [ 1492 | "rand_chacha 0.3.1", 1493 | "rand_core 0.6.4", 1494 | ] 1495 | 1496 | [[package]] 1497 | name = "rand_chacha" 1498 | version = "0.2.2" 1499 | source = "registry+https://github.com/rust-lang/crates.io-index" 1500 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 1501 | dependencies = [ 1502 | "ppv-lite86", 1503 | "rand_core 0.5.1", 1504 | ] 1505 | 1506 | [[package]] 1507 | name = "rand_chacha" 1508 | version = "0.3.1" 1509 | source = "registry+https://github.com/rust-lang/crates.io-index" 1510 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1511 | dependencies = [ 1512 | "ppv-lite86", 1513 | "rand_core 0.6.4", 1514 | ] 1515 | 1516 | [[package]] 1517 | name = "rand_core" 1518 | version = "0.5.1" 1519 | source = "registry+https://github.com/rust-lang/crates.io-index" 1520 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1521 | dependencies = [ 1522 | "getrandom 0.1.16", 1523 | ] 1524 | 1525 | [[package]] 1526 | name = "rand_core" 1527 | version = "0.6.4" 1528 | source = "registry+https://github.com/rust-lang/crates.io-index" 1529 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1530 | dependencies = [ 1531 | "getrandom 0.2.10", 1532 | ] 1533 | 1534 | [[package]] 1535 | name = "rand_hc" 1536 | version = "0.2.0" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1539 | dependencies = [ 1540 | "rand_core 0.5.1", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "rand_xoshiro" 1545 | version = "0.6.0" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" 1548 | dependencies = [ 1549 | "rand_core 0.6.4", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "rayon" 1554 | version = "1.7.0" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" 1557 | dependencies = [ 1558 | "either", 1559 | "rayon-core", 1560 | ] 1561 | 1562 | [[package]] 1563 | name = "rayon-core" 1564 | version = "1.11.0" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" 1567 | dependencies = [ 1568 | "crossbeam-channel", 1569 | "crossbeam-deque", 1570 | "crossbeam-utils", 1571 | "num_cpus", 1572 | ] 1573 | 1574 | [[package]] 1575 | name = "redox_syscall" 1576 | version = "0.3.5" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" 1579 | dependencies = [ 1580 | "bitflags", 1581 | ] 1582 | 1583 | [[package]] 1584 | name = "regex" 1585 | version = "1.8.4" 1586 | source = "registry+https://github.com/rust-lang/crates.io-index" 1587 | checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" 1588 | dependencies = [ 1589 | "aho-corasick", 1590 | "memchr", 1591 | "regex-syntax", 1592 | ] 1593 | 1594 | [[package]] 1595 | name = "regex-syntax" 1596 | version = "0.7.2" 1597 | source = "registry+https://github.com/rust-lang/crates.io-index" 1598 | checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" 1599 | 1600 | [[package]] 1601 | name = "rustc-hash" 1602 | version = "1.1.0" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1605 | 1606 | [[package]] 1607 | name = "rustc_version" 1608 | version = "0.4.0" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1611 | dependencies = [ 1612 | "semver", 1613 | ] 1614 | 1615 | [[package]] 1616 | name = "rustversion" 1617 | version = "1.0.12" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" 1620 | 1621 | [[package]] 1622 | name = "ryu" 1623 | version = "1.0.13" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" 1626 | 1627 | [[package]] 1628 | name = "scopeguard" 1629 | version = "1.1.0" 1630 | source = "registry+https://github.com/rust-lang/crates.io-index" 1631 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1632 | 1633 | [[package]] 1634 | name = "semver" 1635 | version = "1.0.17" 1636 | source = "registry+https://github.com/rust-lang/crates.io-index" 1637 | checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" 1638 | 1639 | [[package]] 1640 | name = "serde" 1641 | version = "1.0.164" 1642 | source = "registry+https://github.com/rust-lang/crates.io-index" 1643 | checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" 1644 | dependencies = [ 1645 | "serde_derive", 1646 | ] 1647 | 1648 | [[package]] 1649 | name = "serde_bytes" 1650 | version = "0.11.9" 1651 | source = "registry+https://github.com/rust-lang/crates.io-index" 1652 | checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" 1653 | dependencies = [ 1654 | "serde", 1655 | ] 1656 | 1657 | [[package]] 1658 | name = "serde_derive" 1659 | version = "1.0.164" 1660 | source = "registry+https://github.com/rust-lang/crates.io-index" 1661 | checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" 1662 | dependencies = [ 1663 | "proc-macro2", 1664 | "quote", 1665 | "syn 2.0.20", 1666 | ] 1667 | 1668 | [[package]] 1669 | name = "serde_json" 1670 | version = "1.0.99" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" 1673 | dependencies = [ 1674 | "itoa", 1675 | "ryu", 1676 | "serde", 1677 | ] 1678 | 1679 | [[package]] 1680 | name = "serde_with" 1681 | version = "2.3.3" 1682 | source = "registry+https://github.com/rust-lang/crates.io-index" 1683 | checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" 1684 | dependencies = [ 1685 | "serde", 1686 | "serde_with_macros", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "serde_with_macros" 1691 | version = "2.3.3" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" 1694 | dependencies = [ 1695 | "darling", 1696 | "proc-macro2", 1697 | "quote", 1698 | "syn 2.0.20", 1699 | ] 1700 | 1701 | [[package]] 1702 | name = "sha2" 1703 | version = "0.9.9" 1704 | source = "registry+https://github.com/rust-lang/crates.io-index" 1705 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1706 | dependencies = [ 1707 | "block-buffer 0.9.0", 1708 | "cfg-if", 1709 | "cpufeatures", 1710 | "digest 0.9.0", 1711 | "opaque-debug", 1712 | ] 1713 | 1714 | [[package]] 1715 | name = "sha2" 1716 | version = "0.10.7" 1717 | source = "registry+https://github.com/rust-lang/crates.io-index" 1718 | checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" 1719 | dependencies = [ 1720 | "cfg-if", 1721 | "cpufeatures", 1722 | "digest 0.10.7", 1723 | ] 1724 | 1725 | [[package]] 1726 | name = "sha3" 1727 | version = "0.9.1" 1728 | source = "registry+https://github.com/rust-lang/crates.io-index" 1729 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 1730 | dependencies = [ 1731 | "block-buffer 0.9.0", 1732 | "digest 0.9.0", 1733 | "keccak", 1734 | "opaque-debug", 1735 | ] 1736 | 1737 | [[package]] 1738 | name = "sha3" 1739 | version = "0.10.8" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" 1742 | dependencies = [ 1743 | "digest 0.10.7", 1744 | "keccak", 1745 | ] 1746 | 1747 | [[package]] 1748 | name = "signature" 1749 | version = "1.6.4" 1750 | source = "registry+https://github.com/rust-lang/crates.io-index" 1751 | checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" 1752 | 1753 | [[package]] 1754 | name = "sized-chunks" 1755 | version = "0.6.5" 1756 | source = "registry+https://github.com/rust-lang/crates.io-index" 1757 | checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" 1758 | dependencies = [ 1759 | "bitmaps", 1760 | "typenum", 1761 | ] 1762 | 1763 | [[package]] 1764 | name = "smallvec" 1765 | version = "1.10.0" 1766 | source = "registry+https://github.com/rust-lang/crates.io-index" 1767 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 1768 | 1769 | [[package]] 1770 | name = "solana-frozen-abi" 1771 | version = "1.16.1" 1772 | source = "registry+https://github.com/rust-lang/crates.io-index" 1773 | checksum = "eea8be57163366de9ffee3652cd42ea02fd5cca672408722f1426eb0d234a330" 1774 | dependencies = [ 1775 | "ahash 0.8.3", 1776 | "blake3", 1777 | "block-buffer 0.10.4", 1778 | "bs58 0.4.0", 1779 | "bv", 1780 | "byteorder", 1781 | "cc", 1782 | "either", 1783 | "generic-array", 1784 | "getrandom 0.1.16", 1785 | "im", 1786 | "lazy_static", 1787 | "log", 1788 | "memmap2", 1789 | "once_cell", 1790 | "rand_core 0.6.4", 1791 | "rustc_version", 1792 | "serde", 1793 | "serde_bytes", 1794 | "serde_derive", 1795 | "serde_json", 1796 | "sha2 0.10.7", 1797 | "solana-frozen-abi-macro", 1798 | "subtle", 1799 | "thiserror", 1800 | ] 1801 | 1802 | [[package]] 1803 | name = "solana-frozen-abi-macro" 1804 | version = "1.16.1" 1805 | source = "registry+https://github.com/rust-lang/crates.io-index" 1806 | checksum = "d4121f91307234cec8c8d8cd2d7ec171881c07db2222335e8c840d555ebe89cc" 1807 | dependencies = [ 1808 | "proc-macro2", 1809 | "quote", 1810 | "rustc_version", 1811 | "syn 2.0.20", 1812 | ] 1813 | 1814 | [[package]] 1815 | name = "solana-logger" 1816 | version = "1.16.1" 1817 | source = "registry+https://github.com/rust-lang/crates.io-index" 1818 | checksum = "f590904a129707c5bf6b9f2e198e49ce8984e802dad26babd2c406a4e898b0ce" 1819 | dependencies = [ 1820 | "env_logger", 1821 | "lazy_static", 1822 | "log", 1823 | ] 1824 | 1825 | [[package]] 1826 | name = "solana-program" 1827 | version = "1.16.1" 1828 | source = "registry+https://github.com/rust-lang/crates.io-index" 1829 | checksum = "19ac28d05adeff2212cdec76dfacc6eb631d69d065b1b83c063a1fab505d5e62" 1830 | dependencies = [ 1831 | "ark-bn254", 1832 | "ark-ec", 1833 | "ark-ff", 1834 | "ark-serialize", 1835 | "array-bytes", 1836 | "base64 0.21.2", 1837 | "bincode", 1838 | "bitflags", 1839 | "blake3", 1840 | "borsh 0.10.3", 1841 | "bs58 0.4.0", 1842 | "bv", 1843 | "bytemuck", 1844 | "cc", 1845 | "console_error_panic_hook", 1846 | "console_log", 1847 | "curve25519-dalek", 1848 | "getrandom 0.2.10", 1849 | "itertools", 1850 | "js-sys", 1851 | "lazy_static", 1852 | "libc", 1853 | "libsecp256k1", 1854 | "log", 1855 | "memoffset", 1856 | "num-bigint", 1857 | "num-derive", 1858 | "num-traits", 1859 | "parking_lot", 1860 | "rand 0.7.3", 1861 | "rand_chacha 0.2.2", 1862 | "rustc_version", 1863 | "rustversion", 1864 | "serde", 1865 | "serde_bytes", 1866 | "serde_derive", 1867 | "serde_json", 1868 | "sha2 0.10.7", 1869 | "sha3 0.10.8", 1870 | "solana-frozen-abi", 1871 | "solana-frozen-abi-macro", 1872 | "solana-sdk-macro", 1873 | "thiserror", 1874 | "tiny-bip39", 1875 | "wasm-bindgen", 1876 | "zeroize", 1877 | ] 1878 | 1879 | [[package]] 1880 | name = "solana-sdk" 1881 | version = "1.16.1" 1882 | source = "registry+https://github.com/rust-lang/crates.io-index" 1883 | checksum = "3aa2d54c0e9109d1bf9edafbd86d645217776df783814397f79c3929cf4316ba" 1884 | dependencies = [ 1885 | "assert_matches", 1886 | "base64 0.21.2", 1887 | "bincode", 1888 | "bitflags", 1889 | "borsh 0.10.3", 1890 | "bs58 0.4.0", 1891 | "bytemuck", 1892 | "byteorder", 1893 | "chrono", 1894 | "derivation-path", 1895 | "digest 0.10.7", 1896 | "ed25519-dalek", 1897 | "ed25519-dalek-bip32", 1898 | "generic-array", 1899 | "hmac 0.12.1", 1900 | "itertools", 1901 | "js-sys", 1902 | "lazy_static", 1903 | "libsecp256k1", 1904 | "log", 1905 | "memmap2", 1906 | "num-derive", 1907 | "num-traits", 1908 | "num_enum 0.6.1", 1909 | "pbkdf2 0.11.0", 1910 | "qstring", 1911 | "rand 0.7.3", 1912 | "rand_chacha 0.2.2", 1913 | "rustc_version", 1914 | "rustversion", 1915 | "serde", 1916 | "serde_bytes", 1917 | "serde_derive", 1918 | "serde_json", 1919 | "serde_with", 1920 | "sha2 0.10.7", 1921 | "sha3 0.10.8", 1922 | "solana-frozen-abi", 1923 | "solana-frozen-abi-macro", 1924 | "solana-logger", 1925 | "solana-program", 1926 | "solana-sdk-macro", 1927 | "thiserror", 1928 | "uriparse", 1929 | "wasm-bindgen", 1930 | ] 1931 | 1932 | [[package]] 1933 | name = "solana-sdk-macro" 1934 | version = "1.16.1" 1935 | source = "registry+https://github.com/rust-lang/crates.io-index" 1936 | checksum = "aa991e6d6ae7c57ef9fc56f964b22f3bae6ba6c144ccb07b0fe07e06a3efc47c" 1937 | dependencies = [ 1938 | "bs58 0.4.0", 1939 | "proc-macro2", 1940 | "quote", 1941 | "rustversion", 1942 | "syn 2.0.20", 1943 | ] 1944 | 1945 | [[package]] 1946 | name = "solana-zk-token-sdk" 1947 | version = "1.16.1" 1948 | source = "registry+https://github.com/rust-lang/crates.io-index" 1949 | checksum = "05aa69c3f19df466a68a26f009e9dc39de671bf022c66fbbfab2d1c021b62a97" 1950 | dependencies = [ 1951 | "aes-gcm-siv", 1952 | "arrayref", 1953 | "base64 0.21.2", 1954 | "bincode", 1955 | "bytemuck", 1956 | "byteorder", 1957 | "curve25519-dalek", 1958 | "getrandom 0.1.16", 1959 | "itertools", 1960 | "lazy_static", 1961 | "merlin", 1962 | "num-derive", 1963 | "num-traits", 1964 | "rand 0.7.3", 1965 | "serde", 1966 | "serde_json", 1967 | "sha3 0.9.1", 1968 | "solana-program", 1969 | "solana-sdk", 1970 | "subtle", 1971 | "thiserror", 1972 | "zeroize", 1973 | ] 1974 | 1975 | [[package]] 1976 | name = "spl-associated-token-account" 1977 | version = "1.1.3" 1978 | source = "registry+https://github.com/rust-lang/crates.io-index" 1979 | checksum = "978dba3bcbe88d0c2c58366c254d9ea41c5f73357e72fc0bdee4d6b5fc99c8f4" 1980 | dependencies = [ 1981 | "assert_matches", 1982 | "borsh 0.9.3", 1983 | "num-derive", 1984 | "num-traits", 1985 | "solana-program", 1986 | "spl-token", 1987 | "spl-token-2022", 1988 | "thiserror", 1989 | ] 1990 | 1991 | [[package]] 1992 | name = "spl-memo" 1993 | version = "3.0.1" 1994 | source = "registry+https://github.com/rust-lang/crates.io-index" 1995 | checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" 1996 | dependencies = [ 1997 | "solana-program", 1998 | ] 1999 | 2000 | [[package]] 2001 | name = "spl-token" 2002 | version = "3.5.0" 2003 | source = "registry+https://github.com/rust-lang/crates.io-index" 2004 | checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" 2005 | dependencies = [ 2006 | "arrayref", 2007 | "bytemuck", 2008 | "num-derive", 2009 | "num-traits", 2010 | "num_enum 0.5.11", 2011 | "solana-program", 2012 | "thiserror", 2013 | ] 2014 | 2015 | [[package]] 2016 | name = "spl-token-2022" 2017 | version = "0.6.1" 2018 | source = "registry+https://github.com/rust-lang/crates.io-index" 2019 | checksum = "0043b590232c400bad5ee9eb983ced003d15163c4c5d56b090ac6d9a57457b47" 2020 | dependencies = [ 2021 | "arrayref", 2022 | "bytemuck", 2023 | "num-derive", 2024 | "num-traits", 2025 | "num_enum 0.5.11", 2026 | "solana-program", 2027 | "solana-zk-token-sdk", 2028 | "spl-memo", 2029 | "spl-token", 2030 | "thiserror", 2031 | ] 2032 | 2033 | [[package]] 2034 | name = "strsim" 2035 | version = "0.10.0" 2036 | source = "registry+https://github.com/rust-lang/crates.io-index" 2037 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2038 | 2039 | [[package]] 2040 | name = "subtle" 2041 | version = "2.4.1" 2042 | source = "registry+https://github.com/rust-lang/crates.io-index" 2043 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 2044 | 2045 | [[package]] 2046 | name = "syn" 2047 | version = "1.0.109" 2048 | source = "registry+https://github.com/rust-lang/crates.io-index" 2049 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2050 | dependencies = [ 2051 | "proc-macro2", 2052 | "quote", 2053 | "unicode-ident", 2054 | ] 2055 | 2056 | [[package]] 2057 | name = "syn" 2058 | version = "2.0.20" 2059 | source = "registry+https://github.com/rust-lang/crates.io-index" 2060 | checksum = "fcb8d4cebc40aa517dfb69618fa647a346562e67228e2236ae0042ee6ac14775" 2061 | dependencies = [ 2062 | "proc-macro2", 2063 | "quote", 2064 | "unicode-ident", 2065 | ] 2066 | 2067 | [[package]] 2068 | name = "termcolor" 2069 | version = "1.2.0" 2070 | source = "registry+https://github.com/rust-lang/crates.io-index" 2071 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" 2072 | dependencies = [ 2073 | "winapi-util", 2074 | ] 2075 | 2076 | [[package]] 2077 | name = "thiserror" 2078 | version = "1.0.40" 2079 | source = "registry+https://github.com/rust-lang/crates.io-index" 2080 | checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" 2081 | dependencies = [ 2082 | "thiserror-impl", 2083 | ] 2084 | 2085 | [[package]] 2086 | name = "thiserror-impl" 2087 | version = "1.0.40" 2088 | source = "registry+https://github.com/rust-lang/crates.io-index" 2089 | checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" 2090 | dependencies = [ 2091 | "proc-macro2", 2092 | "quote", 2093 | "syn 2.0.20", 2094 | ] 2095 | 2096 | [[package]] 2097 | name = "tiny-bip39" 2098 | version = "0.8.2" 2099 | source = "registry+https://github.com/rust-lang/crates.io-index" 2100 | checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" 2101 | dependencies = [ 2102 | "anyhow", 2103 | "hmac 0.8.1", 2104 | "once_cell", 2105 | "pbkdf2 0.4.0", 2106 | "rand 0.7.3", 2107 | "rustc-hash", 2108 | "sha2 0.9.9", 2109 | "thiserror", 2110 | "unicode-normalization", 2111 | "wasm-bindgen", 2112 | "zeroize", 2113 | ] 2114 | 2115 | [[package]] 2116 | name = "tinyvec" 2117 | version = "1.6.0" 2118 | source = "registry+https://github.com/rust-lang/crates.io-index" 2119 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2120 | dependencies = [ 2121 | "tinyvec_macros", 2122 | ] 2123 | 2124 | [[package]] 2125 | name = "tinyvec_macros" 2126 | version = "0.1.1" 2127 | source = "registry+https://github.com/rust-lang/crates.io-index" 2128 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2129 | 2130 | [[package]] 2131 | name = "toml" 2132 | version = "0.5.11" 2133 | source = "registry+https://github.com/rust-lang/crates.io-index" 2134 | checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" 2135 | dependencies = [ 2136 | "serde", 2137 | ] 2138 | 2139 | [[package]] 2140 | name = "toml_datetime" 2141 | version = "0.6.3" 2142 | source = "registry+https://github.com/rust-lang/crates.io-index" 2143 | checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" 2144 | 2145 | [[package]] 2146 | name = "toml_edit" 2147 | version = "0.19.11" 2148 | source = "registry+https://github.com/rust-lang/crates.io-index" 2149 | checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7" 2150 | dependencies = [ 2151 | "indexmap", 2152 | "toml_datetime", 2153 | "winnow", 2154 | ] 2155 | 2156 | [[package]] 2157 | name = "typenum" 2158 | version = "1.16.0" 2159 | source = "registry+https://github.com/rust-lang/crates.io-index" 2160 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" 2161 | 2162 | [[package]] 2163 | name = "unicode-ident" 2164 | version = "1.0.9" 2165 | source = "registry+https://github.com/rust-lang/crates.io-index" 2166 | checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" 2167 | 2168 | [[package]] 2169 | name = "unicode-normalization" 2170 | version = "0.1.22" 2171 | source = "registry+https://github.com/rust-lang/crates.io-index" 2172 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 2173 | dependencies = [ 2174 | "tinyvec", 2175 | ] 2176 | 2177 | [[package]] 2178 | name = "unicode-segmentation" 2179 | version = "1.10.1" 2180 | source = "registry+https://github.com/rust-lang/crates.io-index" 2181 | checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" 2182 | 2183 | [[package]] 2184 | name = "universal-hash" 2185 | version = "0.4.1" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" 2188 | dependencies = [ 2189 | "generic-array", 2190 | "subtle", 2191 | ] 2192 | 2193 | [[package]] 2194 | name = "uriparse" 2195 | version = "0.6.4" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" 2198 | dependencies = [ 2199 | "fnv", 2200 | "lazy_static", 2201 | ] 2202 | 2203 | [[package]] 2204 | name = "version_check" 2205 | version = "0.9.4" 2206 | source = "registry+https://github.com/rust-lang/crates.io-index" 2207 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2208 | 2209 | [[package]] 2210 | name = "wasi" 2211 | version = "0.9.0+wasi-snapshot-preview1" 2212 | source = "registry+https://github.com/rust-lang/crates.io-index" 2213 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 2214 | 2215 | [[package]] 2216 | name = "wasi" 2217 | version = "0.11.0+wasi-snapshot-preview1" 2218 | source = "registry+https://github.com/rust-lang/crates.io-index" 2219 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2220 | 2221 | [[package]] 2222 | name = "wasm-bindgen" 2223 | version = "0.2.87" 2224 | source = "registry+https://github.com/rust-lang/crates.io-index" 2225 | checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" 2226 | dependencies = [ 2227 | "cfg-if", 2228 | "wasm-bindgen-macro", 2229 | ] 2230 | 2231 | [[package]] 2232 | name = "wasm-bindgen-backend" 2233 | version = "0.2.87" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" 2236 | dependencies = [ 2237 | "bumpalo", 2238 | "log", 2239 | "once_cell", 2240 | "proc-macro2", 2241 | "quote", 2242 | "syn 2.0.20", 2243 | "wasm-bindgen-shared", 2244 | ] 2245 | 2246 | [[package]] 2247 | name = "wasm-bindgen-macro" 2248 | version = "0.2.87" 2249 | source = "registry+https://github.com/rust-lang/crates.io-index" 2250 | checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" 2251 | dependencies = [ 2252 | "quote", 2253 | "wasm-bindgen-macro-support", 2254 | ] 2255 | 2256 | [[package]] 2257 | name = "wasm-bindgen-macro-support" 2258 | version = "0.2.87" 2259 | source = "registry+https://github.com/rust-lang/crates.io-index" 2260 | checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" 2261 | dependencies = [ 2262 | "proc-macro2", 2263 | "quote", 2264 | "syn 2.0.20", 2265 | "wasm-bindgen-backend", 2266 | "wasm-bindgen-shared", 2267 | ] 2268 | 2269 | [[package]] 2270 | name = "wasm-bindgen-shared" 2271 | version = "0.2.87" 2272 | source = "registry+https://github.com/rust-lang/crates.io-index" 2273 | checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" 2274 | 2275 | [[package]] 2276 | name = "web-sys" 2277 | version = "0.3.64" 2278 | source = "registry+https://github.com/rust-lang/crates.io-index" 2279 | checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" 2280 | dependencies = [ 2281 | "js-sys", 2282 | "wasm-bindgen", 2283 | ] 2284 | 2285 | [[package]] 2286 | name = "winapi" 2287 | version = "0.3.9" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2290 | dependencies = [ 2291 | "winapi-i686-pc-windows-gnu", 2292 | "winapi-x86_64-pc-windows-gnu", 2293 | ] 2294 | 2295 | [[package]] 2296 | name = "winapi-i686-pc-windows-gnu" 2297 | version = "0.4.0" 2298 | source = "registry+https://github.com/rust-lang/crates.io-index" 2299 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2300 | 2301 | [[package]] 2302 | name = "winapi-util" 2303 | version = "0.1.5" 2304 | source = "registry+https://github.com/rust-lang/crates.io-index" 2305 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 2306 | dependencies = [ 2307 | "winapi", 2308 | ] 2309 | 2310 | [[package]] 2311 | name = "winapi-x86_64-pc-windows-gnu" 2312 | version = "0.4.0" 2313 | source = "registry+https://github.com/rust-lang/crates.io-index" 2314 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2315 | 2316 | [[package]] 2317 | name = "windows-targets" 2318 | version = "0.48.0" 2319 | source = "registry+https://github.com/rust-lang/crates.io-index" 2320 | checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" 2321 | dependencies = [ 2322 | "windows_aarch64_gnullvm", 2323 | "windows_aarch64_msvc", 2324 | "windows_i686_gnu", 2325 | "windows_i686_msvc", 2326 | "windows_x86_64_gnu", 2327 | "windows_x86_64_gnullvm", 2328 | "windows_x86_64_msvc", 2329 | ] 2330 | 2331 | [[package]] 2332 | name = "windows_aarch64_gnullvm" 2333 | version = "0.48.0" 2334 | source = "registry+https://github.com/rust-lang/crates.io-index" 2335 | checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" 2336 | 2337 | [[package]] 2338 | name = "windows_aarch64_msvc" 2339 | version = "0.48.0" 2340 | source = "registry+https://github.com/rust-lang/crates.io-index" 2341 | checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" 2342 | 2343 | [[package]] 2344 | name = "windows_i686_gnu" 2345 | version = "0.48.0" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" 2348 | 2349 | [[package]] 2350 | name = "windows_i686_msvc" 2351 | version = "0.48.0" 2352 | source = "registry+https://github.com/rust-lang/crates.io-index" 2353 | checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" 2354 | 2355 | [[package]] 2356 | name = "windows_x86_64_gnu" 2357 | version = "0.48.0" 2358 | source = "registry+https://github.com/rust-lang/crates.io-index" 2359 | checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" 2360 | 2361 | [[package]] 2362 | name = "windows_x86_64_gnullvm" 2363 | version = "0.48.0" 2364 | source = "registry+https://github.com/rust-lang/crates.io-index" 2365 | checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" 2366 | 2367 | [[package]] 2368 | name = "windows_x86_64_msvc" 2369 | version = "0.48.0" 2370 | source = "registry+https://github.com/rust-lang/crates.io-index" 2371 | checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" 2372 | 2373 | [[package]] 2374 | name = "winnow" 2375 | version = "0.4.7" 2376 | source = "registry+https://github.com/rust-lang/crates.io-index" 2377 | checksum = "ca0ace3845f0d96209f0375e6d367e3eb87eb65d27d445bdc9f1843a26f39448" 2378 | dependencies = [ 2379 | "memchr", 2380 | ] 2381 | 2382 | [[package]] 2383 | name = "zeroize" 2384 | version = "1.3.0" 2385 | source = "registry+https://github.com/rust-lang/crates.io-index" 2386 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 2387 | dependencies = [ 2388 | "zeroize_derive", 2389 | ] 2390 | 2391 | [[package]] 2392 | name = "zeroize_derive" 2393 | version = "1.4.2" 2394 | source = "registry+https://github.com/rust-lang/crates.io-index" 2395 | checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" 2396 | dependencies = [ 2397 | "proc-macro2", 2398 | "quote", 2399 | "syn 2.0.20", 2400 | ] 2401 | --------------------------------------------------------------------------------