├── programs ├── registry │ ├── src │ │ ├── error.rs │ │ ├── constant.rs │ │ ├── state.rs │ │ ├── event.rs │ │ ├── account.rs │ │ ├── lib.rs │ │ └── context.rs │ ├── Xargo.toml │ └── Cargo.toml ├── core-ds │ ├── Xargo.toml │ ├── src │ │ ├── error.rs │ │ ├── constant.rs │ │ ├── state.rs │ │ ├── event.rs │ │ ├── account.rs │ │ ├── lib.rs │ │ └── context.rs │ └── Cargo.toml └── tsab │ ├── Xargo.toml │ ├── src │ ├── constant.rs │ ├── account.rs │ ├── component.rs │ ├── context.rs │ └── lib.rs │ └── Cargo.toml ├── .gitignore ├── .prettierignore ├── localhost_keypairs ├── registry-keypair.json └── core-ds-keypair.json ├── tsconfig.json ├── Cargo.toml ├── migrations └── deploy.ts ├── Anchor.toml ├── package.json ├── tests └── sol-arc.ts ├── README.md ├── yarn.lock └── Cargo.lock /programs/registry/src/error.rs: -------------------------------------------------------------------------------- 1 | //use anchor_lang::prelude::*; 2 | -------------------------------------------------------------------------------- /programs/registry/src/constant.rs: -------------------------------------------------------------------------------- 1 | pub const STRING_MAX_SIZE:u64 = 256; -------------------------------------------------------------------------------- /programs/registry/src/state.rs: -------------------------------------------------------------------------------- 1 | //use anchor_lang::prelude::*; 2 | 3 | -------------------------------------------------------------------------------- /programs/core-ds/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /programs/registry/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /programs/tsab/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 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | node_modules 6 | dist 7 | build 8 | test-ledger 9 | -------------------------------------------------------------------------------- /programs/tsab/src/constant.rs: -------------------------------------------------------------------------------- 1 | pub const METADATA_NAME_MAX_SIZE:u64 = 32; 2 | pub const METADATA_SYMBOL_MAX_SIZE:u64 = 32; 3 | pub const METADATA_URI_MAX_SIZE:u64 = 32; -------------------------------------------------------------------------------- /programs/core-ds/src/error.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[error_code] 4 | pub enum ComponentError { 5 | #[msg("Invalid Data Length!")] 6 | InvalidDataLengthError, 7 | } -------------------------------------------------------------------------------- /programs/core-ds/src/constant.rs: -------------------------------------------------------------------------------- 1 | pub const SERIALIZED_COMPONENT_EXTRA_SPACE:u64 = 44; 2 | pub const SEEDS_REGISTRYINSTANCE_PREFIX:&[u8;8] = b"registry"; 3 | pub const SEEDS_ENTITY_PREFIX:&[u8;6] = b"entity"; 4 | pub const SEEDS_ARCNFT_PREFIX:&[u8;6] = b"arcnft"; -------------------------------------------------------------------------------- /localhost_keypairs/registry-keypair.json: -------------------------------------------------------------------------------- 1 | [30,233,33,252,217,16,156,26,147,66,253,163,152,231,199,211,155,93,23,65,142,213,244,187,22,246,33,21,74,16,130,30,238,243,224,120,37,156,203,218,107,88,79,83,253,79,196,67,239,4,72,34,64,173,70,126,60,139,220,102,193,122,116,230] -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /localhost_keypairs/core-ds-keypair.json: -------------------------------------------------------------------------------- 1 | [191,191,98,90,146,71,210,191,88,167,125,72,238,135,159,213,226,229,168,102,31,223,36,125,124,199,169,226,228,105,24,80,228,69,155,115,117,200,43,78,179,61,142,33,123,115,157,175,166,37,166,75,106,121,45,21,96,80,58,205,176,217,255,117] -------------------------------------------------------------------------------- /programs/tsab/src/account.rs: -------------------------------------------------------------------------------- 1 | use std::collections::BTreeMap; 2 | use anchor_lang::prelude::*; 3 | use core_ds::account::MaxSize; 4 | 5 | #[account] 6 | pub struct TSABConfig { 7 | pub authority: Pubkey, 8 | // Sha256(component_name) -> Component Pubkey 9 | pub components: BTreeMap<[u8;32], Pubkey> 10 | } 11 | 12 | impl MaxSize for TSABConfig { 13 | fn get_max_size() -> u64 { 14 | return 32+4; 15 | } 16 | } -------------------------------------------------------------------------------- /programs/core-ds/src/state.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::account::MaxSize; 4 | 5 | #[cfg_attr(feature = "sdk", derive(serde::Serialize, serde::Deserialize))] 6 | #[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] 7 | pub struct SerializedComponent{ 8 | pub max_size: u64, 9 | pub data: Vec, 10 | } 11 | 12 | impl MaxSize for SerializedComponent { 13 | fn get_max_size() -> u64 { 14 | return 8+4; 15 | } 16 | } -------------------------------------------------------------------------------- /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("@project-serum/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/registry/src/event.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[event] 4 | pub struct NewRegistryInstance { 5 | pub registry_instance: Pubkey, 6 | pub instance_authority: Pubkey 7 | } 8 | 9 | #[event] 10 | pub struct NewComponentRegistered { 11 | pub component: Pubkey, 12 | pub schema: String 13 | } 14 | 15 | #[event] 16 | pub struct NewSystemRegistration { 17 | pub registry_instance: Pubkey, 18 | pub action_bundle: Pubkey, 19 | pub action_bundle_registration: Pubkey 20 | } -------------------------------------------------------------------------------- /programs/registry/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "registry" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "registry" 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.26.0" 20 | anchor-spl = "0.26.0" 21 | core_ds = { path="../core-ds", features=["cpi"] } 22 | solana-program = "=1.14.11" 23 | -------------------------------------------------------------------------------- /Anchor.toml: -------------------------------------------------------------------------------- 1 | [features] 2 | seeds = false 3 | skip-lint = false 4 | [programs.localnet] 5 | core_ds = "GN5Ww5qa8ej4evFCJxMhV6AFEPKhD1Drdu8qYYptVgDJ" 6 | registry = "H5mieGWWK6qukHoNzbR6ysLxReeQC4JHZcNM6JkPQnm3" 7 | tsab = "Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS" 8 | 9 | 10 | [registry] 11 | url = "https://api.apr.dev" 12 | 13 | [provider] 14 | cluster = "localnet" 15 | wallet = "/Users/spacemandev/.config/solana/id.json" 16 | 17 | [scripts] 18 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 19 | -------------------------------------------------------------------------------- /programs/core-ds/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "core_ds" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "core_ds" 10 | 11 | [features] 12 | no-entrypoint = [] 13 | no-idl = [] 14 | no-log-ix-name = [] 15 | cpi = ["no-entrypoint"] 16 | default = [] 17 | sdk = ["dep:serde"] 18 | 19 | [dependencies] 20 | anchor-lang = "0.26.0" 21 | anchor-spl = "0.26.0" 22 | serde = { version = "1.0.147", optional=true } 23 | solana-program = "=1.14.11" -------------------------------------------------------------------------------- /programs/tsab/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "tsab" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "tsab" 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.26.0" 20 | anchor-spl = "0.26.0" 21 | registry = { path="../registry", features=["cpi"]} 22 | core_ds = { path="../core-ds", features=["cpi"]} 23 | solana-program = "=1.14.11" -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", 4 | "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" 5 | }, 6 | "dependencies": { 7 | "@project-serum/anchor": "^0.25.0" 8 | }, 9 | "devDependencies": { 10 | "chai": "^4.3.4", 11 | "mocha": "^9.0.3", 12 | "ts-mocha": "^10.0.0", 13 | "@types/bn.js": "^5.1.0", 14 | "@types/chai": "^4.3.0", 15 | "@types/mocha": "^9.0.0", 16 | "typescript": "^4.3.5", 17 | "prettier": "^2.6.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /tests/sol-arc.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { Program } from "@project-serum/anchor"; 3 | import { SolArc } from "../target/types/sol_arc"; 4 | 5 | describe("sol-arc", () => { 6 | // Configure the client to use the local cluster. 7 | anchor.setProvider(anchor.AnchorProvider.env()); 8 | 9 | const program = anchor.workspace.SolArc as Program; 10 | 11 | it("Is initialized!", async () => { 12 | // Add your test here. 13 | const tx = await program.methods.initialize().rpc(); 14 | console.log("Your transaction signature", tx); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /programs/tsab/src/component.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use core_ds::account::MaxSize; 4 | use crate::constant::*; 5 | 6 | #[derive(AnchorSerialize, AnchorDeserialize, Debug, Clone)] 7 | pub struct ComponentMetadata{ 8 | pub update_authority: Pubkey, 9 | pub mint: Pubkey, 10 | pub name: String, 11 | pub symbol: String, 12 | pub uri: String, 13 | pub is_mutable: bool, 14 | } 15 | 16 | impl MaxSize for ComponentMetadata { 17 | fn get_max_size() -> u64 { 18 | return 32 + 32 + METADATA_NAME_MAX_SIZE + METADATA_SYMBOL_MAX_SIZE + METADATA_URI_MAX_SIZE + 1; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /programs/core-ds/src/event.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::state::*; 4 | 5 | #[event] 6 | pub struct NewWorldInitalized{ 7 | pub world: Pubkey, 8 | pub instance: u64, 9 | pub instance_address: Pubkey 10 | } 11 | 12 | #[event] 13 | pub struct NewEntityMinted{ 14 | pub world_instance: Pubkey, 15 | pub entity_id: u64, 16 | pub entity: Pubkey 17 | } 18 | 19 | #[event] 20 | pub struct NewComponentAdded{ 21 | pub entity: Pubkey, 22 | pub components: Vec<(Pubkey,SerializedComponent)> 23 | } 24 | 25 | #[event] 26 | pub struct ComponentRemoved{ 27 | pub entity: Pubkey, 28 | pub component: Vec 29 | } 30 | 31 | #[event] 32 | pub struct ComponentModified{ 33 | pub entity: Pubkey, 34 | pub components: Vec 35 | } 36 | -------------------------------------------------------------------------------- /programs/registry/src/account.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use core_ds::account::MaxSize; 3 | use std::collections::BTreeSet; 4 | 5 | use crate::constant::STRING_MAX_SIZE; 6 | 7 | //use crate::state::*; 8 | 9 | #[account] 10 | pub struct RegistryConfig{ 11 | pub core_ds: Pubkey, 12 | pub components: u64, 13 | } 14 | 15 | impl MaxSize for RegistryConfig { 16 | fn get_max_size() -> u64 { 17 | return 32+8; 18 | } 19 | } 20 | 21 | #[account] 22 | pub struct InstanceAuthority{ 23 | pub instance: u64, 24 | pub authority: Pubkey 25 | } 26 | 27 | impl MaxSize for InstanceAuthority { 28 | fn get_max_size() -> u64 { 29 | return 8+32; 30 | } 31 | } 32 | 33 | #[account] 34 | pub struct ComponentSchema{ 35 | pub url: String, 36 | } 37 | 38 | impl MaxSize for ComponentSchema { 39 | fn get_max_size() -> u64 { 40 | return STRING_MAX_SIZE; 41 | } 42 | } 43 | 44 | #[account] 45 | pub struct ActionBundleRegistration{ 46 | pub action_bundle: Pubkey, 47 | pub instances: BTreeSet, 48 | pub can_mint: bool, 49 | pub components: BTreeSet, //PDA of the Component Schema 50 | } 51 | 52 | impl MaxSize for ActionBundleRegistration { 53 | fn get_max_size() -> u64 { 54 | return 32+8+1+4; 55 | } 56 | } -------------------------------------------------------------------------------- /programs/core-ds/src/account.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use std::collections::BTreeMap; 3 | use crate::state::*; 4 | 5 | #[cfg_attr(feature = "sdk", derive(serde::Serialize, serde::Deserialize))] 6 | #[account] 7 | pub struct RegistryInstance { 8 | pub registry: Pubkey, 9 | pub instance: u64, 10 | pub entities: u64, 11 | } 12 | 13 | impl MaxSize for RegistryInstance { 14 | fn get_max_size() -> u64 { 15 | return 32 + 8 + 8; 16 | } 17 | } 18 | 19 | #[cfg_attr(feature = "sdk", derive(serde::Serialize, serde::Deserialize))] 20 | #[account] 21 | pub struct Entity { 22 | pub entity_id: u64, 23 | pub instance: u64, 24 | pub registry: Pubkey, 25 | pub components: BTreeMap, 26 | } 27 | 28 | impl MaxSize for Entity { 29 | fn get_max_size() -> u64 { 30 | // Max size is listed with empty BTreeMap (4) with the expecation that it'll get realloc'd with new components 31 | return 8+8+32+4; 32 | } 33 | } 34 | 35 | #[cfg_attr(feature = "sdk", derive(serde::Serialize, serde::Deserialize))] 36 | #[account] 37 | pub struct ARCNFT { 38 | pub entity: Pubkey, 39 | pub mint: Pubkey, 40 | } 41 | 42 | impl MaxSize for ARCNFT { 43 | fn get_max_size() -> u64 { 44 | return 32 + 32; 45 | } 46 | } 47 | 48 | pub trait MaxSize { 49 | fn get_max_size() -> u64; 50 | } -------------------------------------------------------------------------------- /programs/tsab/src/context.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use anchor_spl::token::Mint; 4 | use core_ds::account::{MaxSize, RegistryInstance}; 5 | use core_ds::program::CoreDs; 6 | use registry::account::{RegistryConfig, ActionBundleRegistration}; 7 | use registry::program::Registry; 8 | use crate::account::TSABConfig; 9 | 10 | 11 | #[derive(Accounts)] 12 | pub struct Initialize<'info> { 13 | #[account(mut)] 14 | pub payer: Signer<'info>, 15 | pub system_program: Signer<'info>, 16 | 17 | #[account( 18 | init, 19 | payer=payer, 20 | space=8+TSABConfig::get_max_size() as usize, 21 | seeds=[ 22 | b"tsab_signer" 23 | ], 24 | bump, 25 | )] 26 | pub tsab_config: Account<'info, TSABConfig>, 27 | } 28 | 29 | #[derive(Accounts)] 30 | pub struct MintMetdata<'info> { 31 | #[account(mut)] 32 | pub payer: Signer<'info>, 33 | pub system_program: Signer<'info>, 34 | 35 | //SPL Mint 36 | pub mint: Account<'info, Mint>, 37 | 38 | //AB Accounts 39 | //// AB Config/Signer 40 | pub tsab_config: Account<'info, TSABConfig>, 41 | 42 | // New Accounts created via CPI 43 | //// Entity 44 | /// CHECK: Created via CPI 45 | pub entity: AccountInfo<'info>, 46 | //// ARCNFT 47 | /// CHECK: Created via CPI 48 | pub arcnft: AccountInfo<'info>, 49 | 50 | // Registry Accounts 51 | //// Registry Config/Signer 52 | pub registry_config: Account<'info, RegistryConfig>, 53 | //// Registry Program 54 | pub registry_program: Program<'info, Registry>, 55 | //// AB Registration 56 | pub tsab_registration: Account<'info, ActionBundleRegistration>, 57 | 58 | // CoreDS Accounts 59 | //// CoreDS Program 60 | pub core_ds_program: Program<'info, CoreDs>, 61 | //// Registry Instance 62 | pub registry_instance: Account<'info, RegistryInstance>, 63 | } 64 | -------------------------------------------------------------------------------- /programs/tsab/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use std::collections::BTreeMap; 3 | use anchor_lang::solana_program::keccak::Hash; 4 | use core_ds::account::MaxSize; 5 | 6 | declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"); 7 | 8 | mod context; 9 | mod account; 10 | mod component; 11 | mod constant; 12 | 13 | use context::*; 14 | use component::*; 15 | 16 | #[program] 17 | pub mod tsab { 18 | use core_ds::state::SerializedComponent; 19 | 20 | use crate::component::ComponentMetadata; 21 | 22 | use super::*; 23 | 24 | pub fn initalize(ctx:Context, components:BTreeMap<[u8;32], Pubkey>) -> Result<()> { 25 | ctx.accounts.tsab_config.authority = ctx.accounts.payer.key(); 26 | ctx.accounts.tsab_config.components = components; 27 | Ok(()) 28 | } 29 | 30 | pub fn mint_metadata(ctx:Context, entity_id: u64, metadata:ComponentMetadata) -> Result<()> { 31 | // Create Entity 32 | let system_signer_seeds:&[&[u8]] = &[ 33 | b"tsab_signer", 34 | &[*ctx.bumps.get("tsab_config").unwrap()] 35 | ]; 36 | let signer_seeds = &[system_signer_seeds]; 37 | 38 | let init_entity_ctx = CpiContext::new_with_signer( 39 | ctx.accounts.registry_program.to_account_info(), 40 | registry::cpi::accounts::InitEntity{ 41 | payer: ctx.accounts.payer.to_account_info(), 42 | system_program: ctx.accounts.system_program.to_account_info(), 43 | registry_config: ctx.accounts.registry_config.to_account_info(), 44 | entity: ctx.accounts.entity.to_account_info(), 45 | registry_instance: ctx.accounts.registry_instance.to_account_info(), 46 | action_bundle: ctx.accounts.tsab_config.to_account_info(), 47 | action_bundle_registration: ctx.accounts.tsab_registration.to_account_info(), 48 | core_ds: ctx.accounts.core_ds_program.to_account_info(), 49 | 50 | }, 51 | signer_seeds 52 | ); 53 | 54 | let metadata_component_hash:[u8; 32] = Hash::new(b"metadata").to_bytes(); 55 | let mut components = BTreeMap::new(); 56 | components.insert( 57 | ctx.accounts.tsab_config.components.get(&metadata_component_hash).unwrap().key(), 58 | SerializedComponent { 59 | max_size: ComponentMetadata::get_max_size(), 60 | data: metadata.try_to_vec().unwrap() 61 | } 62 | ); 63 | 64 | registry::cpi::init_entity(init_entity_ctx, entity_id, components)?; 65 | 66 | // Create ARCNFT 67 | let mint_arcnft_ctx = CpiContext::new_with_signer( 68 | ctx.accounts.registry_program.to_account_info(), 69 | registry::cpi::accounts::MintARCNFT{ 70 | payer: ctx.accounts.payer.to_account_info(), 71 | system_program: ctx.accounts.system_program.to_account_info(), 72 | registry_config: ctx.accounts.registry_config.to_account_info(), 73 | entity: ctx.accounts.entity.to_account_info(), 74 | registry_instance: ctx.accounts.registry_instance.to_account_info(), 75 | action_bundle: ctx.accounts.tsab_config.to_account_info(), 76 | action_bundle_registration: ctx.accounts.tsab_registration.to_account_info(), 77 | core_ds: ctx.accounts.core_ds_program.to_account_info(), 78 | mint: ctx.accounts.mint.to_account_info(), 79 | arcnft: ctx.accounts.arcnft.to_account_info(), 80 | }, 81 | signer_seeds 82 | ); 83 | 84 | registry::cpi::mint_arcnft(mint_arcnft_ctx)?; 85 | 86 | Ok(()) 87 | } 88 | } -------------------------------------------------------------------------------- /programs/core-ds/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use std::collections::BTreeMap; 3 | 4 | declare_id!("GN5Ww5qa8ej4evFCJxMhV6AFEPKhD1Drdu8qYYptVgDJ"); 5 | 6 | pub mod account; 7 | pub mod context; 8 | pub mod constant; 9 | pub mod error; 10 | pub mod event; 11 | pub mod state; 12 | 13 | //use account::*; 14 | use context::*; 15 | //use constant::*; 16 | //use error::*; 17 | //use event::*; 18 | use state::*; 19 | 20 | #[program] 21 | pub mod core_ds { 22 | 23 | use super::*; 24 | 25 | pub fn init_registry(ctx:Context, registry:Pubkey, instance: u64) -> Result<()> { 26 | ctx.accounts.registry_instance.registry = registry; 27 | ctx.accounts.registry_instance.instance = instance; 28 | 29 | Ok(()) 30 | } 31 | 32 | pub fn init_entity(ctx:Context, entity_id:u64, components: BTreeMap) -> Result<()> { 33 | // Increment registry Instance Entities 34 | ctx.accounts.registry_instance.entities += 1; 35 | 36 | // Set Entity Data 37 | ctx.accounts.entity.entity_id = entity_id; 38 | ctx.accounts.entity.registry = ctx.accounts.registry_instance.registry.key(); 39 | ctx.accounts.entity.instance = ctx.accounts.registry_instance.instance; 40 | ctx.accounts.entity.components = components; 41 | 42 | Ok(()) 43 | } 44 | 45 | pub fn mint_arcnft(ctx:Context) -> Result<()> { 46 | ctx.accounts.arcnft.entity = ctx.accounts.entity.key(); 47 | ctx.accounts.arcnft.mint = ctx.accounts.mint.key(); 48 | Ok(()) 49 | } 50 | 51 | pub fn add_components(ctx:Context, components:Vec<(Pubkey,SerializedComponent)>) -> Result<()> { 52 | for comp in components { 53 | ctx.accounts.entity.components.insert(comp.0, comp.1); 54 | } 55 | 56 | Ok(()) 57 | } 58 | 59 | pub fn remove_component(ctx:Context, removed_components: Vec) -> Result<()> { 60 | for comp in removed_components { 61 | ctx.accounts.entity.components.remove(&comp); 62 | } 63 | 64 | Ok(()) 65 | } 66 | 67 | pub fn modify_components(ctx:Context, components: Vec<(Pubkey, Vec)>) -> Result<()> { 68 | for comp in components.iter() { 69 | let mut new_comp = ctx.accounts.entity.components.get(&comp.0).unwrap().clone(); 70 | new_comp.data = comp.1.clone(); 71 | ctx.accounts.entity.components.insert(comp.0.clone(), new_comp); 72 | } 73 | 74 | Ok(()) 75 | } 76 | 77 | pub fn remove_entity(_ctx:Context) -> Result<()> { 78 | Ok(()) 79 | } 80 | 81 | } 82 | 83 | /* 84 | Entity Mint that's also a SPL Token 85 | // Initalize SPL Token 86 | let mint_ix = spl_token::instruction::initialize_mint2( 87 | &spl_token::ID, 88 | &ctx.accounts.mint.key(), 89 | &ctx.accounts.entity_owner.key(), 90 | Some(&ctx.accounts.entity_owner.key()), 91 | 1 92 | )?; 93 | invoke( 94 | &mint_ix, 95 | &[ctx.accounts.mint.to_account_info()], 96 | )?; 97 | 98 | // Create ATA Account 99 | let create_ata_ix = spl_associated_token_account::instruction::create_associated_token_account( 100 | &ctx.accounts.payer.key(), 101 | &ctx.accounts.entity_owner.key(), 102 | &ctx.accounts.mint.key() 103 | ); 104 | 105 | invoke( 106 | &create_ata_ix, 107 | &[ 108 | ctx.accounts.payer.to_account_info(), 109 | ctx.accounts.mint_ata.to_account_info(), 110 | ctx.accounts.entity_owner.to_account_info(), 111 | ctx.accounts.mint.to_account_info(), 112 | ctx.accounts.system_program.to_account_info(), 113 | ctx.accounts.spl_token_program.to_account_info() 114 | ] 115 | )?; 116 | 117 | // Mint SPL Token (1) to Mint ATA 118 | anchor_spl::token::mint_to( 119 | CpiContext::new( 120 | ctx.accounts.spl_token_program.to_account_info(), 121 | anchor_spl::token::MintTo { 122 | mint: ctx.accounts.mint.to_account_info(), 123 | to: ctx.accounts.mint_ata.to_account_info(), 124 | authority: ctx.accounts.entity_owner.to_account_info() 125 | } 126 | ), 127 | 1 128 | )?; 129 | */ -------------------------------------------------------------------------------- /programs/core-ds/src/context.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use anchor_spl::token::Mint; 3 | use std::collections::BTreeMap; 4 | 5 | use crate::account::*; 6 | use crate::state::*; 7 | use crate::constant::*; 8 | 9 | #[derive(Accounts)] 10 | #[instruction(registry:Pubkey, instance:u64)] 11 | pub struct InitRegistryInstance <'info> { 12 | #[account(mut)] 13 | pub payer: Signer<'info>, 14 | pub system_program: Program<'info, System>, 15 | 16 | #[account( 17 | init, 18 | payer=payer, 19 | space=8+RegistryInstance::get_max_size() as usize, 20 | seeds=[ 21 | SEEDS_REGISTRYINSTANCE_PREFIX, 22 | registry.key().to_bytes().as_ref(), 23 | instance.to_be_bytes().as_ref() 24 | ], 25 | bump, 26 | )] 27 | pub registry_instance: Account<'info, RegistryInstance>, 28 | 29 | // Only the Registry can implment new instances of itself. It's left up to the registry on how to implement this. 30 | #[account( 31 | owner = registry.key() 32 | )] 33 | pub registry_signer: Signer<'info> 34 | } 35 | 36 | #[derive(Accounts)] 37 | #[instruction(entity_id:u64, components: BTreeMap)] 38 | pub struct InitEntity<'info>{ 39 | #[account(mut)] 40 | pub payer: Signer<'info>, 41 | pub system_program: Program<'info, System>, 42 | 43 | pub registry_instance: Account<'info, RegistryInstance>, 44 | 45 | #[account( 46 | init, 47 | payer=payer, 48 | space=8+Entity::get_max_size() as usize+compute_comp_arr_max_size(&components.values().cloned().collect()), //It is expected this will get Realloc'd every time a component is added 49 | seeds = [ 50 | SEEDS_ENTITY_PREFIX, 51 | entity_id.to_be_bytes().as_ref(), 52 | registry_instance.key().as_ref() 53 | ], 54 | bump, 55 | )] 56 | pub entity: Box>, 57 | 58 | // Only the Entity's Registry can make changes to the Entity 59 | #[account( 60 | owner = registry_instance.registry.key() 61 | )] 62 | pub registry_signer: Signer<'info> 63 | } 64 | 65 | #[derive(Accounts)] 66 | pub struct MintARCNFT<'info>{ 67 | #[account(mut)] 68 | pub payer: Signer<'info>, 69 | pub system_program: Program<'info, System>, 70 | 71 | pub registry_instance: Account<'info, RegistryInstance>, 72 | pub entity: Box>, 73 | pub mint: Account<'info, Mint>, 74 | 75 | #[account( 76 | init, 77 | payer=payer, 78 | space=8+ARCNFT::get_max_size() as usize, 79 | seeds=[ 80 | b"arcnft", 81 | mint.key().as_ref(), 82 | entity.key().as_ref() 83 | ], 84 | bump, 85 | )] 86 | pub arcnft: Account<'info, ARCNFT>, 87 | 88 | // Only the Entity's Registry can make mint the NFT 89 | #[account( 90 | seeds = [ 91 | SEEDS_ARCNFT_PREFIX 92 | ], 93 | bump, 94 | seeds::program = registry_instance.registry.key() 95 | )] 96 | pub registry_signer: Signer<'info> 97 | } 98 | 99 | #[derive(Accounts)] 100 | #[instruction(components:Vec<(Pubkey,SerializedComponent)>)] 101 | pub struct AddComponent<'info> { 102 | #[account(mut)] 103 | pub payer: Signer<'info>, 104 | pub system_program: Program<'info, System>, 105 | 106 | #[account( 107 | mut, 108 | realloc = entity.to_account_info().data_len() + compute_comp_arr_max_size(&components.iter().map(|tuple| tuple.1.clone() ).collect()), 109 | realloc::payer = payer, 110 | realloc::zero = true, 111 | )] 112 | pub entity: Account<'info, Entity>, 113 | 114 | // Only the Entity's registry can make changes to the Entity 115 | #[account( 116 | owner = entity.registry.key() 117 | )] 118 | pub registry_signer: Signer<'info> 119 | } 120 | 121 | #[derive(Accounts)] 122 | #[instruction(removed_components: Vec)] 123 | pub struct RemoveComponent<'info> { 124 | #[account(mut)] 125 | pub benefactor: Signer<'info>, 126 | pub system_program: Program<'info, System>, 127 | 128 | #[account( 129 | mut, 130 | realloc = entity.to_account_info().data_len() - get_removed_size(&entity.components, &removed_components), 131 | realloc::payer = benefactor, 132 | realloc::zero = false, 133 | )] 134 | pub entity: Account<'info, Entity>, 135 | 136 | // Only the Entity's registry can make changes to the Entity 137 | #[account( 138 | owner = entity.registry.key() 139 | )] 140 | pub registry_signer: Signer<'info> 141 | } 142 | 143 | #[derive(Accounts)] 144 | #[instruction(components: Vec<(Pubkey, Vec)>)] 145 | pub struct ModifyComponent<'info> { 146 | #[account(mut)] 147 | pub entity: Account<'info, Entity>, 148 | 149 | // Only the Entity's registry can make changes to the Entity 150 | #[account( 151 | owner = entity.registry.key() 152 | )] 153 | pub registry_signer: Signer<'info> 154 | } 155 | 156 | #[derive(Accounts)] 157 | pub struct RemoveEntity<'info>{ 158 | #[account(mut)] 159 | pub benefactor: Signer<'info>, 160 | pub system_program: Program<'info, System>, 161 | 162 | #[account( 163 | mut, 164 | close = benefactor 165 | )] 166 | pub entity: Account<'info, Entity>, 167 | 168 | // Only the Entity's registry can make changes to the Entity 169 | #[account( 170 | owner = entity.registry.key() 171 | )] 172 | pub registry_signer: Signer<'info> 173 | } 174 | 175 | /************************************************ Utility Functions */ 176 | pub fn compute_comp_arr_max_size(components: &Vec) -> usize { 177 | let mut max_size:usize = 0; 178 | for comp in components { 179 | max_size += comp.max_size as usize + SERIALIZED_COMPONENT_EXTRA_SPACE as usize; 180 | } 181 | return max_size; 182 | } 183 | 184 | pub fn get_removed_size(components: &BTreeMap, removed_components: &Vec) -> usize { 185 | let mut removed_size:usize = 0; 186 | for comp in removed_components { 187 | removed_size += components.get(comp).unwrap().max_size as usize + SERIALIZED_COMPONENT_EXTRA_SPACE as usize; 188 | } 189 | return removed_size; 190 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ARC Proposed Framework 2 | 3 | ARC stands for "Action Registry Core" and is a standard to represent on chain data using the Entity-Component pattern found in traditional game development. 4 | 5 | Modules: 6 | - Core Proposed Framework Program (Code Complete) 7 | - Rust SDK (+WASM) for CoreDS (TODO) 8 | - Admin Registry (Code Complete) 9 | - Rust SDK (+WASM) for Admin Registry (TODO) 10 | - TSAB (Token Standard Action Bundle) 11 | - Rust SDK (+WASM) for TSAB (TODO) 12 | - xNFT to view ARC NFTs (TODO) 13 | 14 | 15 | ## Abstract 16 | The primary goal for the ARC Proposed Framework is to provide a unified interface for on chain games on Solana. 17 | 18 | ARC stands for “Action, Registry, Core”, and uses Entity-Component-System (ECS) style architecture often found in video game development under the hood. The key here is to separate *data* from its *execution,* while creating dynamic data structures that boost interoperability and composability. 19 | 20 | The Core DS program is in charge of maintaining data buckets called entities. It’s a relatively small code surface, and could be frozen if needed, without worrying about schema upgrades (as we’ll get into in a little bit). The goal for the Core DS program is to provide a single program where all the Entity accounts can be queried from. 21 | 22 | The Registry programs sit on top of the Core DS program and usually are unique per *community*. These are governance programs whose goal is to validate if actions taken to make changes to Entities were done in accordance to the community’s governance policy. 23 | 24 | Finally, most of the logic for using ARC DS lies in the Action Bundles, that can exist either on chain or off chain. These action bundles are groups of change functions that modify entity data buckets. 25 | 26 | ## Core 27 | 28 | The Core DS program attempts to be as simple as possible to as to be frozen after audits. It’s goal is to define and track three types of accounts: Entities, ARCNFTs, and RegistryInstances. 29 | 30 | ### Registry Instances 31 | 32 | For every registry, or community, there might exist multiple instances. For example, a given game might have a single registry, but have each of it’s servers as different instances. For simple communities, like the pfp-nft community you might only have the one instance per registry, with a different registry per collection. More on registries down below. 33 | 34 | ```rs 35 | seeds = [ 36 | b"registry", 37 | registry.key().to_bytes().as_ref(), 38 | instance.to_be_bytes().as_ref() 39 | ] 40 | 41 | #[account] 42 | pub struct RegistryInstance { 43 | pub registry: Pubkey, 44 | pub instance: u64, 45 | pub entities: u64, 46 | } 47 | ``` 48 | Registry instances keep track of the Registry Program (registry) that they belong to, their instance_id (u64), and how many entities have been created. 49 | 50 | ### Entities 51 | An entity is the magical data bucket that keeps all sort of state through a BTreeMap that maps a Pubkey to a SerializedComponent. It also contains info about the registry and instance it’s correlated to, but we’ll cover what those are later. 52 | 53 | ```rs 54 | seeds = [ 55 | b"entity", 56 | entity_id.to_be_bytes().as_ref(), 57 | registry_instance.key().as_ref() 58 | ] 59 | 60 | #[account] 61 | pub struct Entity { 62 | pub entity_id: u64, 63 | pub instance: u64, 64 | pub registry: Pubkey, 65 | pub components: BTreeMap, 66 | } 67 | ``` 68 | 1. Entity ID 69 | 1. There is no standard way to allocate entity ids to entities. Games where entities are made quickly and there’s chances of collisions, ids might be given out through random u64 generation. Other instances, where new entity creation is methodical, entities might be incremented continuously (this approach would have the added benefit of automatically indexing all entity ids in a single counter value, which could be used to fetch entities later). 70 | 2. Instance 71 | 1. This is the u64 instance id for a given registry. Different instances for the same registry exist because you might want different game servers all governed by the same community. For example, in an ARC MMO, you might have a server that allows Portals which allow for quick travel, and in another “hard core” server, the community might not allow portals. Both of them have otherwise the same game rules and structure, just certain systems are turned on / off based on which server you’re on. 72 | 3. Registry 73 | 1. This is the program that lays out all the governance rules. This could be as simple as an Admin Registry (provided) that gives command of the rules to the person who instantiates the code, to a very complex token governed registry that gate keeps what action bundles can make changes to what components on which entities. More on this in the registry section. 74 | 4. Components 75 | 1. This maps registered component pubkeys with a *SerializedComponent*. Basically, for any given component name (usually a url pointing to it’s unique schema registered with a Registry — more on this below) it maps to a bucket of bytes. This means that the Core DS program never really cares what data goes in and out of an entity, it leaves Registries to mark the data with their own stickers and deal with them as such. 76 | 77 | ### ARC NFT 78 | 79 | ARC NFTs are Entities entangled with a sol mint. This allows them to be transferred and traded just like SPL Tokens, while tying Entity data to that SPL token. 80 | 81 | ```rs 82 | seeds = [ 83 | b"arcnft", 84 | mint.key().as_ref(), 85 | entity.key().as_ref() 86 | ] 87 | 88 | #[account] 89 | pub struct ARCNFT { 90 | pub entity: Pubkey, 91 | pub mint: Pubkey, 92 | } 93 | ``` 94 | 95 | 96 | ## Registries 97 | A Registry is a *community* or *set of communities* that interact with the same set of components in roughly the same way. There isn’t a good formal definition I can give for registries, but it might make sense when thinking of them through examples. 98 | 99 | → For games, Registries can encompass a full game, where the *instances* of the registry encompass each server of that game. Some games might have *lots* of instances; you might create a new instance every time you play the game with a friend, or maybe only a few instances, as official persistent servers. 100 | 101 | → For PFP-Style/Traditional NFTs, there might exist a registry *per IP* with an instance per collection drop. This way, the governance of that IP is handled by the same registry for all the different collections they drop. Or they might have just one registry per collection, and isolate their governance per drop. 102 | 103 | One benefit is by isolating governance by community, each community can setup their own system, and don’t need to rely on one over arching system, while still enjoying the benefits of one over arching data storage contract. This significantly boosts interoperability with wallets and explorers by standardizing data formats while still having a very flexible system for on chain data. 104 | 105 | A registry is in charge primarily of hosting two types of accounts; ComponentSchema and ActionBundleRegistration. 106 | 107 | ```rs 108 | seeds = [ 109 | schema_url.as_bytes() 110 | ] 111 | 112 | #[account] 113 | pub struct ComponentSchema{ 114 | pub url: String, 115 | } 116 | ``` 117 | The ComponentSchema account simply registers a schema url for a component and issues it a pubkey that identifies it within the Registry. When the registry is adding/modifying/removing components from entities, it uses this pubkey, just as it uses it when deciding which ActionBundles to give what kind of access. 118 | ```rs 119 | seeds = [ 120 | b"action_bundle_registration", 121 | registry_instance.key().as_ref(), 122 | action_bundle.key().as_ref() 123 | ] 124 | 125 | #[account] 126 | pub struct ActionBundleRegistration{ 127 | pub action_bundle: Pubkey, 128 | pub instance: BTreeSet, 129 | pub can_mint: bool, 130 | pub components: BTreeSet, //PDA of the Component Schema 131 | } 132 | ``` 133 | ActionBundleRegistration keeps track of what Pubkeys can make changes to what components. It also specifies in which instances that action bundle can make changes. It also tracks if that action bundle has the ability to mint ARC NFTs and what specific components it can edit. 134 | 135 | ## Action Bundles 136 | Action Bundles are where all serialization and deserialization logic takes place for SerializedComponents. Action Bundles validate the state change based on community rules, Registries validate that the Action Bundle approving the change was approved by the community, and finally Core DS handles the data storage itself. You can think of the Action Bundle as a Bank Client, the Registry as a Banker, and the Core DS program as the Bank Vault in how their responsibilities tie together. 137 | 138 | ## Use Cases 139 | 1. Games 140 | 2. PFP-Style/Traditional NFTs 141 | 3. Off Chain Oracles 142 | 143 | ## FAQ 144 | 145 | 1. Can a Entity exist across multiple registries/instances? 146 | 1. No. This is because the *rules* governing the data inside an entity are hard locked to the governance of that entity. 147 | 2. Can ComponentSchema Pubkeys be u64 schema_ids instead to save space? 148 | 1. Possibly :- the deterministic nature of PDAs means we don’t need to worry about collisions, but theoretically, this job could be given up to the client to find a non collision u64 and submit that when registering a ComponentSchema (like we do for Entities). 149 | 3. What are the account size requirements for entities? 150 | 1. Entity accounts (and other relevant accounts like ActionBundleRegistration) use the Solana realloc ability to resize accounts as new data is added and removed from those accounts. -------------------------------------------------------------------------------- /programs/registry/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use std::collections::{BTreeSet, BTreeMap}; 3 | use core_ds::state::SerializedComponent; 4 | 5 | declare_id!("H5mieGWWK6qukHoNzbR6ysLxReeQC4JHZcNM6JkPQnm3"); 6 | 7 | pub mod account; 8 | pub mod context; 9 | pub mod constant; 10 | pub mod error; 11 | pub mod event; 12 | pub mod state; 13 | 14 | //use account::*; 15 | use context::*; 16 | //use constant::*; 17 | //use error::*; 18 | //use event::*; 19 | //use state::*; 20 | 21 | #[program] 22 | pub mod registry { 23 | 24 | use std::collections::BTreeMap; 25 | 26 | use super::*; 27 | 28 | pub fn initalize(ctx:Context, core_ds: Pubkey) -> Result<()> { 29 | ctx.accounts.registry_config.core_ds = core_ds; 30 | ctx.accounts.registry_config.components = 0; 31 | Ok(()) 32 | } 33 | 34 | /** 35 | * Instance World should normally be regulated by governance; 36 | * In this case, we allow anyone to instance a new dominari registry. 37 | * We also set the Instance Authority for the World to the Payer 38 | * This authority is the only one that can add action_bundles to a given instance 39 | */ 40 | pub fn instance_registry(ctx:Context, instance:u64) -> Result<()> { 41 | let core_ds = ctx.accounts.core_ds.to_account_info(); 42 | let accounts = core_ds::cpi::accounts::InitRegistryInstance { 43 | payer: ctx.accounts.payer.to_account_info(), 44 | system_program: ctx.accounts.system_program.to_account_info(), 45 | registry_instance: ctx.accounts.registry_instance.to_account_info(), 46 | registry_signer: ctx.accounts.registry_config.to_account_info() 47 | }; 48 | let registry_signer_seeds:&[&[u8]] = &[ 49 | b"registry_signer", 50 | &[*ctx.bumps.get("registry_config").unwrap()] 51 | ]; 52 | let signer_seeds = &[registry_signer_seeds]; 53 | 54 | let register_registry_ctx = CpiContext::new_with_signer( 55 | core_ds, 56 | accounts, 57 | signer_seeds 58 | ); 59 | 60 | core_ds::cpi::init_registry(register_registry_ctx, ctx.program_id.key(), instance)?; 61 | ctx.accounts.instance_authority.instance = instance; 62 | ctx.accounts.instance_authority.authority = ctx.accounts.payer.key(); // fancier Worlds might have different governance setup for this 63 | 64 | Ok(()) 65 | } 66 | 67 | /** 68 | * Anyone can register new components as long as they use unique URIs 69 | */ 70 | pub fn register_component(ctx:Context, schema:String) -> Result<()> { 71 | ctx.accounts.component.url = schema.clone(); 72 | ctx.accounts.registry_config.components += 1; 73 | Ok(()) 74 | } 75 | 76 | pub fn register_action_bundle(ctx: Context) -> Result<()> { 77 | ctx.accounts.action_bundle_registration.action_bundle = ctx.accounts.action_bundle.key(); 78 | ctx.accounts.action_bundle_registration.instances = BTreeSet::new(); 79 | ctx.accounts.action_bundle_registration.instances.insert(ctx.accounts.registry_instance.instance); 80 | ctx.accounts.action_bundle_registration.can_mint = true; 81 | Ok(()) 82 | } 83 | 84 | pub fn add_components_to_action_bundle_registration(ctx:Context, components:Vec) -> Result<()> { 85 | for comp in components { 86 | ctx.accounts.action_bundle_registration.components.insert(comp); 87 | } 88 | Ok(()) 89 | } 90 | 91 | pub fn add_instances_to_action_bundle_registration(ctx:Context, instances: Vec) -> Result<()> { 92 | for instance in instances{ 93 | ctx.accounts.action_bundle_registration.instances.insert(instance); 94 | } 95 | Ok(()) 96 | } 97 | 98 | pub fn init_entity(ctx:Context, entity_id: u64, components: BTreeMap) -> Result<()> { 99 | let accounts = core_ds::cpi::accounts::InitEntity { 100 | entity: ctx.accounts.entity.to_account_info(), 101 | payer: ctx.accounts.payer.to_account_info(), 102 | system_program: ctx.accounts.system_program.to_account_info(), 103 | registry_instance: ctx.accounts.registry_instance.to_account_info(), 104 | registry_signer: ctx.accounts.registry_config.to_account_info(), 105 | }; 106 | let registry_signer_seeds:&[&[u8]] = &[ 107 | b"registry_signer", 108 | &[*ctx.bumps.get("registry_config").unwrap()] 109 | ]; 110 | let signer_seeds = &[registry_signer_seeds]; 111 | 112 | core_ds::cpi::init_entity(CpiContext::new_with_signer( 113 | ctx.accounts.core_ds.to_account_info(), 114 | accounts, 115 | signer_seeds 116 | ), entity_id, components)?; 117 | 118 | Ok(()) 119 | } 120 | 121 | pub fn mint_arcnft(ctx:Context) -> Result<()> { 122 | let accounts = core_ds::cpi::accounts::MintARCNFT { 123 | entity: ctx.accounts.entity.to_account_info(), 124 | payer: ctx.accounts.payer.to_account_info(), 125 | system_program: ctx.accounts.system_program.to_account_info(), 126 | registry_instance: ctx.accounts.registry_instance.to_account_info(), 127 | registry_signer: ctx.accounts.registry_config.to_account_info(), 128 | mint: ctx.accounts.mint.to_account_info(), 129 | arcnft: ctx.accounts.arcnft.to_account_info(), 130 | }; 131 | let registry_signer_seeds:&[&[u8]] = &[ 132 | b"registry_signer", 133 | &[*ctx.bumps.get("registry_config").unwrap()] 134 | ]; 135 | let signer_seeds = &[registry_signer_seeds]; 136 | 137 | core_ds::cpi::mint_arcnft(CpiContext::new_with_signer( 138 | ctx.accounts.core_ds.to_account_info(), 139 | accounts, 140 | signer_seeds 141 | ))?; 142 | 143 | Ok(()) 144 | } 145 | 146 | pub fn req_add_component(ctx:Context, components: Vec<(Pubkey,SerializedComponent)>) -> Result<()> { 147 | let accounts = core_ds::cpi::accounts::AddComponent { 148 | payer: ctx.accounts.payer.to_account_info(), 149 | system_program: ctx.accounts.system_program.to_account_info(), 150 | entity: ctx.accounts.entity.to_account_info(), 151 | registry_signer: ctx.accounts.registry_config.to_account_info() 152 | }; 153 | let registry_signer_seeds:&[&[u8]] = &[ 154 | b"registry_signer", 155 | &[*ctx.bumps.get("registry_config").unwrap()] 156 | ]; 157 | let signer_seeds = &[registry_signer_seeds]; 158 | 159 | core_ds::cpi::add_components(CpiContext::new_with_signer( 160 | ctx.accounts.core_ds.to_account_info(), 161 | accounts, 162 | signer_seeds 163 | ), components)?; 164 | Ok(()) 165 | } 166 | 167 | pub fn req_remove_component(ctx:Context, components: Vec) -> Result<()> { 168 | let accounts = core_ds::cpi::accounts::RemoveComponent { 169 | benefactor: ctx.accounts.benefactor.to_account_info(), 170 | system_program: ctx.accounts.system_program.to_account_info(), 171 | entity: ctx.accounts.entity.to_account_info(), 172 | registry_signer: ctx.accounts.registry_config.to_account_info() 173 | }; 174 | let registry_signer_seeds:&[&[u8]] = &[ 175 | b"registry_signer", 176 | &[*ctx.bumps.get("registry_config").unwrap()] 177 | ]; 178 | let signer_seeds = &[registry_signer_seeds]; 179 | 180 | core_ds::cpi::remove_component(CpiContext::new_with_signer( 181 | ctx.accounts.core_ds.to_account_info(), 182 | accounts, 183 | signer_seeds 184 | ), components)?; 185 | Ok(()) 186 | } 187 | 188 | pub fn req_modify_component(ctx:Context, components: Vec<(Pubkey, Vec)>) -> Result<()> { 189 | let accounts = core_ds::cpi::accounts::ModifyComponent { 190 | entity: ctx.accounts.entity.to_account_info(), 191 | registry_signer: ctx.accounts.registry_config.to_account_info() 192 | }; 193 | let registry_signer_seeds:&[&[u8]] = &[ 194 | b"registry_signer", 195 | &[*ctx.bumps.get("registry_config").unwrap()] 196 | ]; 197 | let signer_seeds = &[registry_signer_seeds]; 198 | 199 | core_ds::cpi::modify_components(CpiContext::new_with_signer( 200 | ctx.accounts.core_ds.to_account_info(), 201 | accounts, 202 | signer_seeds 203 | ), components)?; 204 | 205 | Ok(()) 206 | } 207 | 208 | pub fn req_remove_entity(ctx:Context) -> Result<()> { 209 | let accounts = core_ds::cpi::accounts::RemoveEntity { 210 | benefactor: ctx.accounts.benefactor.to_account_info(), 211 | system_program: ctx.accounts.system_program.to_account_info(), 212 | entity: ctx.accounts.entity.to_account_info(), 213 | registry_signer: ctx.accounts.registry_config.to_account_info() 214 | }; 215 | let registry_signer_seeds:&[&[u8]] = &[ 216 | b"registry_signer", 217 | &[*ctx.bumps.get("registry_config").unwrap()] 218 | ]; 219 | let signer_seeds = &[registry_signer_seeds]; 220 | 221 | core_ds::cpi::remove_entity(CpiContext::new_with_signer( 222 | ctx.accounts.core_ds.to_account_info(), 223 | accounts, 224 | signer_seeds 225 | ))?; 226 | 227 | Ok(()) 228 | } 229 | 230 | } -------------------------------------------------------------------------------- /programs/registry/src/context.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use anchor_spl::token::Mint; 3 | use std::collections::BTreeMap; 4 | use std::collections::BTreeSet; 5 | 6 | use crate::account::*; 7 | use crate::constant::*; 8 | 9 | use core_ds::{ 10 | self, 11 | account::*, 12 | program::CoreDs, 13 | state::SerializedComponent 14 | }; 15 | 16 | #[derive(Accounts)] 17 | pub struct Initialize<'info>{ 18 | #[account(mut)] 19 | pub payer: Signer<'info>, 20 | pub system_program: Program<'info, System>, 21 | 22 | #[account( 23 | init, 24 | payer=payer, 25 | seeds=[b"registry_signer"], 26 | bump, 27 | space=8+RegistryConfig::get_max_size() as usize 28 | )] 29 | pub registry_config: Account<'info, RegistryConfig>, 30 | } 31 | 32 | #[derive(Accounts)] 33 | pub struct InstanceRegistry<'info>{ 34 | #[account(mut)] 35 | pub payer: Signer<'info>, 36 | pub system_program: Program<'info, System>, 37 | 38 | #[account( 39 | mut, 40 | seeds=[b"registry_signer"], 41 | bump, 42 | )] 43 | pub registry_config: Account<'info, RegistryConfig>, 44 | 45 | /// CHECK: Initialized via CPI 46 | #[account(mut)] 47 | pub registry_instance: AccountInfo<'info>, 48 | pub core_ds: Program<'info, CoreDs>, 49 | 50 | // Instance Authority is in charge of allowing new action_bundles onto this instance 51 | #[account( 52 | init, 53 | payer=payer, 54 | seeds=[ 55 | b"instance_authority", 56 | registry_instance.key().as_ref() 57 | ], 58 | bump, 59 | space=8+InstanceAuthority::get_max_size() as usize, 60 | )] 61 | pub instance_authority: Account<'info, InstanceAuthority> 62 | 63 | } 64 | 65 | #[derive(Accounts)] 66 | #[instruction(schema:String)] 67 | pub struct RegisterComponent<'info>{ 68 | #[account(mut)] 69 | pub payer: Signer<'info>, 70 | pub system_program: Program<'info, System>, 71 | 72 | #[account( 73 | init, 74 | payer=payer, 75 | seeds=[ 76 | schema.as_bytes(), 77 | ], 78 | bump, 79 | space=8+(STRING_MAX_SIZE as usize) 80 | )] 81 | pub component: Account<'info, ComponentSchema>, 82 | 83 | #[account( 84 | mut, 85 | seeds=[b"registry_signer"], 86 | bump, 87 | )] 88 | pub registry_config: Account<'info, RegistryConfig>, 89 | } 90 | 91 | #[derive(Accounts)] 92 | pub struct RegisterSystem <'info> { 93 | #[account(mut)] 94 | pub payer: Signer<'info>, 95 | pub system_program: Program<'info, System>, 96 | 97 | /// CoreDS Registry Instance Account 98 | /// Make sure that its a Registry instance that belongs to *this* Registry 99 | #[account( 100 | constraint = registry_instance.registry.key() == program_id.key() 101 | )] 102 | pub registry_instance: Account<'info, RegistryInstance>, 103 | 104 | /// Make sure the instance authority is of the registry instance that's passed in 105 | #[account( 106 | constraint = instance_authority.instance == registry_instance.instance 107 | )] 108 | pub instance_authority: Account<'info, InstanceAuthority>, 109 | 110 | #[account( 111 | init, 112 | payer=payer, 113 | seeds=[ 114 | b"action_bundle_registration", 115 | registry_instance.key().as_ref(), 116 | action_bundle.key().as_ref() 117 | ], 118 | bump, 119 | space=8+ActionBundleRegistration::get_max_size() as usize 120 | )] 121 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 122 | 123 | /// CHECK: This can be any pubkey, but likely will be pubkey of 124 | /// PDA Signer from System 125 | pub action_bundle: AccountInfo<'info>, 126 | } 127 | 128 | #[derive(Accounts)] 129 | #[instruction(components: Vec)] 130 | pub struct AddComponentsToActionBundleRegistration <'info> { 131 | #[account(mut)] 132 | pub payer: Signer<'info>, 133 | pub system_program: Program<'info, System>, 134 | 135 | /// CoreDS Registry Instance Account 136 | /// Make sure that its a Registry instance that belongs to *this* Registry 137 | #[account( 138 | constraint = registry_instance.registry.key() == program_id.key() 139 | )] 140 | pub registry_instance: Account<'info, RegistryInstance>, 141 | 142 | /// Make sure the instance authority is of the Registry instance that's passed in 143 | #[account( 144 | constraint = instance_authority.instance == registry_instance.instance 145 | )] 146 | pub instance_authority: Account<'info, InstanceAuthority>, 147 | 148 | #[account( 149 | mut, 150 | realloc = action_bundle_registration.to_account_info().data_len() + (components.len()*32), 151 | realloc::payer = payer, 152 | realloc::zero = false, 153 | seeds=[ 154 | b"action_bundle_registration", 155 | registry_instance.key().as_ref(), 156 | action_bundle.key().as_ref() 157 | ], 158 | bump, 159 | )] 160 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 161 | 162 | /// CHECK: This can be any pubkey, but likely will be pubkey of 163 | /// PDA Signer from System 164 | pub action_bundle: AccountInfo<'info>, 165 | } 166 | 167 | #[derive(Accounts)] 168 | #[instruction(instances: Vec)] 169 | pub struct AddInstancesToActionBundleRegistration <'info> { 170 | #[account(mut)] 171 | pub payer: Signer<'info>, 172 | pub system_program: Program<'info, System>, 173 | 174 | /// CoreDS Registry Instance Account 175 | /// Make sure that its a Registry instance that belongs to *this* Registry 176 | #[account( 177 | constraint = registry_instance.registry.key() == program_id.key() 178 | )] 179 | pub registry_instance: Account<'info, RegistryInstance>, 180 | 181 | /// Make sure the instance authority is of the Registry instance that's passed in 182 | #[account( 183 | constraint = instance_authority.instance == registry_instance.instance 184 | )] 185 | pub instance_authority: Account<'info, InstanceAuthority>, 186 | 187 | #[account( 188 | mut, 189 | realloc = action_bundle_registration.to_account_info().data_len() + (instances.len()*8), 190 | realloc::payer = payer, 191 | realloc::zero = false, 192 | seeds=[ 193 | b"action_bundle_registration", 194 | registry_instance.key().as_ref(), 195 | action_bundle.key().as_ref() 196 | ], 197 | bump, 198 | )] 199 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 200 | 201 | /// CHECK: This can be any pubkey, but likely will be pubkey of 202 | /// PDA Signer from System 203 | pub action_bundle: AccountInfo<'info>, 204 | } 205 | 206 | #[derive(Accounts)] 207 | #[instruction(entity_id:u64, components: BTreeMap)] 208 | pub struct InitEntity<'info> { 209 | #[account(mut)] 210 | pub payer: Signer<'info>, 211 | pub system_program: Program<'info, System>, 212 | 213 | /// CHECK: Used to Sign Tx for the CPI 214 | #[account( 215 | seeds=[b"registry_signer"], 216 | bump, 217 | )] 218 | pub registry_config: Account<'info, RegistryConfig>, 219 | 220 | /// CHECK: Initalized via CPI 221 | #[account(mut)] 222 | pub entity: AccountInfo<'info>, 223 | 224 | #[account( 225 | constraint = registry_instance.registry.key() == program_id.key() && action_bundle_registration.instances.contains(®istry_instance.instance) 226 | )] 227 | pub registry_instance: Account<'info, RegistryInstance>, 228 | pub action_bundle: Signer<'info>, 229 | // All action_bundles can make any entities they want 230 | #[account( 231 | constraint = action_bundle_registration.action_bundle.key() == action_bundle.key() && check_sys_registry(&components.keys().cloned().collect(), &action_bundle_registration.components) 232 | )] 233 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 234 | pub core_ds: Program<'info, CoreDs>, 235 | } 236 | 237 | #[derive(Accounts)] 238 | pub struct MintARCNFT<'info> { 239 | #[account(mut)] 240 | pub payer: Signer<'info>, 241 | pub system_program: Program<'info, System>, 242 | 243 | /// CHECK: Used to Sign Tx for the CPI 244 | #[account( 245 | seeds=[b"registry_signer"], 246 | bump, 247 | )] 248 | pub registry_config: Account<'info, RegistryConfig>, 249 | 250 | pub entity: Box>, 251 | pub mint: Account<'info, Mint>, 252 | 253 | /// CHECK: Created in CoreDS 254 | pub arcnft: AccountInfo<'info>, 255 | 256 | #[account( 257 | constraint = registry_instance.registry.key() == program_id.key() && action_bundle_registration.instances.contains(®istry_instance.instance) 258 | )] 259 | pub registry_instance: Account<'info, RegistryInstance>, 260 | 261 | #[account( 262 | constraint = action_bundle_registration.action_bundle.key() == action_bundle.key() 263 | )] 264 | pub action_bundle: Signer<'info>, 265 | 266 | #[account( 267 | constraint = action_bundle_registration.can_mint == true 268 | )] 269 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 270 | pub core_ds: Program<'info, CoreDs>, 271 | } 272 | 273 | #[derive(Accounts)] 274 | #[instruction(components: Vec<(Pubkey, SerializedComponent)>)] 275 | pub struct AddComponents<'info>{ 276 | #[account(mut)] 277 | pub payer: Signer<'info>, 278 | pub system_program: Program<'info, System>, 279 | 280 | //Used to Sign Tx for the CPI 281 | #[account( 282 | seeds=[b"registry_signer"], 283 | bump, 284 | )] 285 | pub registry_config: Account<'info, RegistryConfig>, 286 | 287 | #[account( 288 | mut, 289 | constraint = entity.registry.key() == program_id.key() && action_bundle_registration.instances.contains(&entity.instance) 290 | )] 291 | pub entity: Box>, 292 | 293 | pub action_bundle: Signer<'info>, 294 | 295 | // System is allowed to modify the component it's adding 296 | // System is a signer 297 | #[account( 298 | constraint = action_bundle_registration.action_bundle.key() == action_bundle.key() && check_sys_registry(&components.iter().map(|tuple| tuple.0.clone() ).collect(), &action_bundle_registration.components) 299 | )] 300 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 301 | 302 | pub core_ds: Program<'info, CoreDs>, 303 | } 304 | 305 | #[derive(Accounts)] 306 | #[instruction(components: Vec)] 307 | pub struct RemoveComponent<'info>{ 308 | #[account(mut)] 309 | pub benefactor: Signer<'info>, 310 | pub system_program: Program<'info, System>, 311 | 312 | //Used to Sign Tx for the CPI 313 | #[account( 314 | seeds=[b"registry_signer"], 315 | bump, 316 | )] 317 | pub registry_config: Account<'info, RegistryConfig>, 318 | 319 | #[account( 320 | mut, 321 | constraint = entity.registry.key() == program_id.key() && action_bundle_registration.instances.contains(&entity.instance) 322 | )] 323 | pub entity: Account<'info, Entity>, 324 | 325 | pub action_bundle: Signer<'info>, 326 | 327 | // System is allowed to modify the component it's adding 328 | // System is a signer 329 | #[account( 330 | constraint = action_bundle_registration.action_bundle.key() == action_bundle.key() && check_sys_registry(&components, &action_bundle_registration.components) 331 | )] 332 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 333 | 334 | pub core_ds: Program<'info, CoreDs>, 335 | } 336 | 337 | #[derive(Accounts)] 338 | #[instruction(components: Vec, data:Vec>)] 339 | pub struct ModifyComponent<'info>{ 340 | //Used to Sign Tx for the CPI 341 | #[account( 342 | seeds=[b"registry_signer"], 343 | bump, 344 | )] 345 | pub registry_config: Account<'info, RegistryConfig>, 346 | 347 | #[account( 348 | mut, 349 | constraint = entity.registry.key() == program_id.key() && action_bundle_registration.instances.contains(&entity.instance) 350 | )] 351 | pub entity: Account<'info, Entity>, 352 | 353 | pub action_bundle: Signer<'info>, 354 | 355 | // System is allowed to modify the component it's adding 356 | // System is a signer 357 | #[account( 358 | constraint = action_bundle_registration.action_bundle.key() == action_bundle.key() && check_sys_registry(&components, &action_bundle_registration.components) 359 | )] 360 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 361 | 362 | pub core_ds: Program<'info, CoreDs>, 363 | } 364 | 365 | #[derive(Accounts)] 366 | pub struct RemoveEntity<'info>{ 367 | #[account(mut)] 368 | pub benefactor: Signer<'info>, 369 | pub system_program: Program<'info, System>, 370 | 371 | //Used to Sign Tx for the CPI 372 | #[account( 373 | seeds=[b"registry_signer"], 374 | bump, 375 | )] 376 | pub registry_config: Account<'info, RegistryConfig>, 377 | 378 | #[account( 379 | mut, 380 | constraint = entity.registry.key() == program_id.key() && action_bundle_registration.instances.contains(&entity.instance) && entity.components.len() == 0 381 | )] 382 | pub entity: Account<'info, Entity>, 383 | 384 | pub action_bundle: Signer<'info>, 385 | 386 | // ANY registered action_bundle can close an empty entity 387 | #[account( 388 | constraint = action_bundle_registration.action_bundle.key() == action_bundle.key() 389 | )] 390 | pub action_bundle_registration: Account<'info, ActionBundleRegistration>, 391 | 392 | pub core_ds: Program<'info, CoreDs>, 393 | } 394 | 395 | 396 | /*************************************************UTIL Functions */ 397 | 398 | pub fn check_sys_registry(components: &Vec, action_bundle_components: &BTreeSet) -> bool { 399 | for comp in components { 400 | if !action_bundle_components.contains(comp) { 401 | return false; 402 | } 403 | } 404 | return true; 405 | } -------------------------------------------------------------------------------- /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 | version "7.20.6" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" 8 | integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== 9 | dependencies: 10 | regenerator-runtime "^0.13.11" 11 | 12 | "@noble/ed25519@^1.7.0": 13 | version "1.7.1" 14 | resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.1.tgz#6899660f6fbb97798a6fbd227227c4589a454724" 15 | integrity sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw== 16 | 17 | "@noble/hashes@^1.1.2": 18 | version "1.1.4" 19 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.4.tgz#2611ebf5764c1bf754da7c7794de4fb30512336d" 20 | integrity sha512-+PYsVPrTSqtVjatKt2A/Proukn2Yrz61OBThOCKErc5w2/r1Fh37vbDv0Eah7pyNltrmacjwTvdw3JoR+WE4TA== 21 | 22 | "@noble/secp256k1@^1.6.3": 23 | version "1.7.0" 24 | resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.0.tgz#d15357f7c227e751d90aa06b05a0e5cf993ba8c1" 25 | integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw== 26 | 27 | "@project-serum/anchor@^0.25.0": 28 | version "0.25.0" 29 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.25.0.tgz#88ee4843336005cf5a64c80636ce626f0996f503" 30 | integrity sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A== 31 | dependencies: 32 | "@project-serum/borsh" "^0.2.5" 33 | "@solana/web3.js" "^1.36.0" 34 | base64-js "^1.5.1" 35 | bn.js "^5.1.2" 36 | bs58 "^4.0.1" 37 | buffer-layout "^1.2.2" 38 | camelcase "^5.3.1" 39 | cross-fetch "^3.1.5" 40 | crypto-hash "^1.3.0" 41 | eventemitter3 "^4.0.7" 42 | js-sha256 "^0.9.0" 43 | pako "^2.0.3" 44 | snake-case "^3.0.4" 45 | superstruct "^0.15.4" 46 | toml "^3.0.0" 47 | 48 | "@project-serum/borsh@^0.2.5": 49 | version "0.2.5" 50 | resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" 51 | integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== 52 | dependencies: 53 | bn.js "^5.1.2" 54 | buffer-layout "^1.2.0" 55 | 56 | "@solana/buffer-layout@^4.0.0": 57 | version "4.0.1" 58 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" 59 | integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== 60 | dependencies: 61 | buffer "~6.0.3" 62 | 63 | "@solana/web3.js@^1.36.0": 64 | version "1.70.1" 65 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.70.1.tgz#4a2df47cc32a0f67be5161e772b2ceb6512281fa" 66 | integrity sha512-AnaqCF1cJ3w7d0yhvLGAKAcRI+n5o+ursQihhoTe4cUh8/9d4gbT73SoHYElS7e67OtAgLmSfbcC5hcOAgdvnQ== 67 | dependencies: 68 | "@babel/runtime" "^7.12.5" 69 | "@noble/ed25519" "^1.7.0" 70 | "@noble/hashes" "^1.1.2" 71 | "@noble/secp256k1" "^1.6.3" 72 | "@solana/buffer-layout" "^4.0.0" 73 | bigint-buffer "^1.1.5" 74 | bn.js "^5.0.0" 75 | borsh "^0.7.0" 76 | bs58 "^4.0.1" 77 | buffer "6.0.1" 78 | fast-stable-stringify "^1.0.0" 79 | jayson "^3.4.4" 80 | node-fetch "2" 81 | rpc-websockets "^7.5.0" 82 | superstruct "^0.14.2" 83 | 84 | "@types/bn.js@^5.1.0": 85 | version "5.1.1" 86 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" 87 | integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== 88 | dependencies: 89 | "@types/node" "*" 90 | 91 | "@types/chai@^4.3.0": 92 | version "4.3.4" 93 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" 94 | integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== 95 | 96 | "@types/connect@^3.4.33": 97 | version "3.4.35" 98 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 99 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 100 | dependencies: 101 | "@types/node" "*" 102 | 103 | "@types/json5@^0.0.29": 104 | version "0.0.29" 105 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 106 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 107 | 108 | "@types/mocha@^9.0.0": 109 | version "9.1.1" 110 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" 111 | integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== 112 | 113 | "@types/node@*": 114 | version "18.11.13" 115 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.13.tgz#dff34f226ec1ac0432ae3b136ec5552bd3b9c0fe" 116 | integrity sha512-IASpMGVcWpUsx5xBOrxMj7Bl8lqfuTY7FKAnPmu5cHkfQVWF8GulWS1jbRqA934qZL35xh5xN/+Xe/i26Bod4w== 117 | 118 | "@types/node@^12.12.54": 119 | version "12.20.55" 120 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" 121 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 122 | 123 | "@types/ws@^7.4.4": 124 | version "7.4.7" 125 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" 126 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 127 | dependencies: 128 | "@types/node" "*" 129 | 130 | "@ungap/promise-all-settled@1.1.2": 131 | version "1.1.2" 132 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 133 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 134 | 135 | JSONStream@^1.3.5: 136 | version "1.3.5" 137 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 138 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 139 | dependencies: 140 | jsonparse "^1.2.0" 141 | through ">=2.2.7 <3" 142 | 143 | ansi-colors@4.1.1: 144 | version "4.1.1" 145 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 146 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 147 | 148 | ansi-regex@^5.0.1: 149 | version "5.0.1" 150 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 151 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 152 | 153 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 154 | version "4.3.0" 155 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 156 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 157 | dependencies: 158 | color-convert "^2.0.1" 159 | 160 | anymatch@~3.1.2: 161 | version "3.1.3" 162 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 163 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 164 | dependencies: 165 | normalize-path "^3.0.0" 166 | picomatch "^2.0.4" 167 | 168 | argparse@^2.0.1: 169 | version "2.0.1" 170 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 171 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 172 | 173 | arrify@^1.0.0: 174 | version "1.0.1" 175 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 176 | integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== 177 | 178 | assertion-error@^1.1.0: 179 | version "1.1.0" 180 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 181 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 182 | 183 | balanced-match@^1.0.0: 184 | version "1.0.2" 185 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 186 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 187 | 188 | base-x@^3.0.2: 189 | version "3.0.9" 190 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 191 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 192 | dependencies: 193 | safe-buffer "^5.0.1" 194 | 195 | base64-js@^1.3.1, base64-js@^1.5.1: 196 | version "1.5.1" 197 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 198 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 199 | 200 | bigint-buffer@^1.1.5: 201 | version "1.1.5" 202 | resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" 203 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 204 | dependencies: 205 | bindings "^1.3.0" 206 | 207 | binary-extensions@^2.0.0: 208 | version "2.2.0" 209 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 210 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 211 | 212 | bindings@^1.3.0: 213 | version "1.5.0" 214 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 215 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 216 | dependencies: 217 | file-uri-to-path "1.0.0" 218 | 219 | bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0: 220 | version "5.2.1" 221 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" 222 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 223 | 224 | borsh@^0.7.0: 225 | version "0.7.0" 226 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" 227 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 228 | dependencies: 229 | bn.js "^5.2.0" 230 | bs58 "^4.0.0" 231 | text-encoding-utf-8 "^1.0.2" 232 | 233 | brace-expansion@^1.1.7: 234 | version "1.1.11" 235 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 236 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 237 | dependencies: 238 | balanced-match "^1.0.0" 239 | concat-map "0.0.1" 240 | 241 | braces@~3.0.2: 242 | version "3.0.2" 243 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 244 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 245 | dependencies: 246 | fill-range "^7.0.1" 247 | 248 | browser-stdout@1.3.1: 249 | version "1.3.1" 250 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 251 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 252 | 253 | bs58@^4.0.0, bs58@^4.0.1: 254 | version "4.0.1" 255 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 256 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 257 | dependencies: 258 | base-x "^3.0.2" 259 | 260 | buffer-from@^1.0.0, buffer-from@^1.1.0: 261 | version "1.1.2" 262 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 263 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 264 | 265 | buffer-layout@^1.2.0, buffer-layout@^1.2.2: 266 | version "1.2.2" 267 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" 268 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 269 | 270 | buffer@6.0.1: 271 | version "6.0.1" 272 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" 273 | integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== 274 | dependencies: 275 | base64-js "^1.3.1" 276 | ieee754 "^1.2.1" 277 | 278 | buffer@~6.0.3: 279 | version "6.0.3" 280 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 281 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 282 | dependencies: 283 | base64-js "^1.3.1" 284 | ieee754 "^1.2.1" 285 | 286 | bufferutil@^4.0.1: 287 | version "4.0.7" 288 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" 289 | integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== 290 | dependencies: 291 | node-gyp-build "^4.3.0" 292 | 293 | camelcase@^5.3.1: 294 | version "5.3.1" 295 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 296 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 297 | 298 | camelcase@^6.0.0: 299 | version "6.3.0" 300 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 301 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 302 | 303 | chai@^4.3.4: 304 | version "4.3.7" 305 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" 306 | integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== 307 | dependencies: 308 | assertion-error "^1.1.0" 309 | check-error "^1.0.2" 310 | deep-eql "^4.1.2" 311 | get-func-name "^2.0.0" 312 | loupe "^2.3.1" 313 | pathval "^1.1.1" 314 | type-detect "^4.0.5" 315 | 316 | chalk@^4.1.0: 317 | version "4.1.2" 318 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 319 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 320 | dependencies: 321 | ansi-styles "^4.1.0" 322 | supports-color "^7.1.0" 323 | 324 | check-error@^1.0.2: 325 | version "1.0.2" 326 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 327 | integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== 328 | 329 | chokidar@3.5.3: 330 | version "3.5.3" 331 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 332 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 333 | dependencies: 334 | anymatch "~3.1.2" 335 | braces "~3.0.2" 336 | glob-parent "~5.1.2" 337 | is-binary-path "~2.1.0" 338 | is-glob "~4.0.1" 339 | normalize-path "~3.0.0" 340 | readdirp "~3.6.0" 341 | optionalDependencies: 342 | fsevents "~2.3.2" 343 | 344 | cliui@^7.0.2: 345 | version "7.0.4" 346 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 347 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 348 | dependencies: 349 | string-width "^4.2.0" 350 | strip-ansi "^6.0.0" 351 | wrap-ansi "^7.0.0" 352 | 353 | color-convert@^2.0.1: 354 | version "2.0.1" 355 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 356 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 357 | dependencies: 358 | color-name "~1.1.4" 359 | 360 | color-name@~1.1.4: 361 | version "1.1.4" 362 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 363 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 364 | 365 | commander@^2.20.3: 366 | version "2.20.3" 367 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 368 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 369 | 370 | concat-map@0.0.1: 371 | version "0.0.1" 372 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 373 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 374 | 375 | cross-fetch@^3.1.5: 376 | version "3.1.5" 377 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" 378 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== 379 | dependencies: 380 | node-fetch "2.6.7" 381 | 382 | crypto-hash@^1.3.0: 383 | version "1.3.0" 384 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" 385 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 386 | 387 | debug@4.3.3: 388 | version "4.3.3" 389 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 390 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 391 | dependencies: 392 | ms "2.1.2" 393 | 394 | decamelize@^4.0.0: 395 | version "4.0.0" 396 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 397 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 398 | 399 | deep-eql@^4.1.2: 400 | version "4.1.3" 401 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" 402 | integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== 403 | dependencies: 404 | type-detect "^4.0.0" 405 | 406 | delay@^5.0.0: 407 | version "5.0.0" 408 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 409 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 410 | 411 | diff@5.0.0: 412 | version "5.0.0" 413 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 414 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 415 | 416 | diff@^3.1.0: 417 | version "3.5.0" 418 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 419 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 420 | 421 | dot-case@^3.0.4: 422 | version "3.0.4" 423 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" 424 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 425 | dependencies: 426 | no-case "^3.0.4" 427 | tslib "^2.0.3" 428 | 429 | emoji-regex@^8.0.0: 430 | version "8.0.0" 431 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 432 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 433 | 434 | es6-promise@^4.0.3: 435 | version "4.2.8" 436 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 437 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 438 | 439 | es6-promisify@^5.0.0: 440 | version "5.0.0" 441 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 442 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 443 | dependencies: 444 | es6-promise "^4.0.3" 445 | 446 | escalade@^3.1.1: 447 | version "3.1.1" 448 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 449 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 450 | 451 | escape-string-regexp@4.0.0: 452 | version "4.0.0" 453 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 454 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 455 | 456 | eventemitter3@^4.0.7: 457 | version "4.0.7" 458 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 459 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 460 | 461 | eyes@^0.1.8: 462 | version "0.1.8" 463 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 464 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 465 | 466 | fast-stable-stringify@^1.0.0: 467 | version "1.0.0" 468 | resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" 469 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 470 | 471 | file-uri-to-path@1.0.0: 472 | version "1.0.0" 473 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 474 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 475 | 476 | fill-range@^7.0.1: 477 | version "7.0.1" 478 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 479 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 480 | dependencies: 481 | to-regex-range "^5.0.1" 482 | 483 | find-up@5.0.0: 484 | version "5.0.0" 485 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 486 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 487 | dependencies: 488 | locate-path "^6.0.0" 489 | path-exists "^4.0.0" 490 | 491 | flat@^5.0.2: 492 | version "5.0.2" 493 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 494 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 495 | 496 | fs.realpath@^1.0.0: 497 | version "1.0.0" 498 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 499 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 500 | 501 | fsevents@~2.3.2: 502 | version "2.3.2" 503 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 504 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 505 | 506 | get-caller-file@^2.0.5: 507 | version "2.0.5" 508 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 509 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 510 | 511 | get-func-name@^2.0.0: 512 | version "2.0.0" 513 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 514 | integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== 515 | 516 | glob-parent@~5.1.2: 517 | version "5.1.2" 518 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 519 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 520 | dependencies: 521 | is-glob "^4.0.1" 522 | 523 | glob@7.2.0: 524 | version "7.2.0" 525 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 526 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 527 | dependencies: 528 | fs.realpath "^1.0.0" 529 | inflight "^1.0.4" 530 | inherits "2" 531 | minimatch "^3.0.4" 532 | once "^1.3.0" 533 | path-is-absolute "^1.0.0" 534 | 535 | growl@1.10.5: 536 | version "1.10.5" 537 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 538 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 539 | 540 | has-flag@^4.0.0: 541 | version "4.0.0" 542 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 543 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 544 | 545 | he@1.2.0: 546 | version "1.2.0" 547 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 548 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 549 | 550 | ieee754@^1.2.1: 551 | version "1.2.1" 552 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 553 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 554 | 555 | inflight@^1.0.4: 556 | version "1.0.6" 557 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 558 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 559 | dependencies: 560 | once "^1.3.0" 561 | wrappy "1" 562 | 563 | inherits@2: 564 | version "2.0.4" 565 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 566 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 567 | 568 | is-binary-path@~2.1.0: 569 | version "2.1.0" 570 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 571 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 572 | dependencies: 573 | binary-extensions "^2.0.0" 574 | 575 | is-extglob@^2.1.1: 576 | version "2.1.1" 577 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 578 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 579 | 580 | is-fullwidth-code-point@^3.0.0: 581 | version "3.0.0" 582 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 583 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 584 | 585 | is-glob@^4.0.1, is-glob@~4.0.1: 586 | version "4.0.3" 587 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 588 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 589 | dependencies: 590 | is-extglob "^2.1.1" 591 | 592 | is-number@^7.0.0: 593 | version "7.0.0" 594 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 595 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 596 | 597 | is-plain-obj@^2.1.0: 598 | version "2.1.0" 599 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 600 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 601 | 602 | is-unicode-supported@^0.1.0: 603 | version "0.1.0" 604 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 605 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 606 | 607 | isexe@^2.0.0: 608 | version "2.0.0" 609 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 610 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 611 | 612 | isomorphic-ws@^4.0.1: 613 | version "4.0.1" 614 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" 615 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 616 | 617 | jayson@^3.4.4: 618 | version "3.7.0" 619 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25" 620 | integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ== 621 | dependencies: 622 | "@types/connect" "^3.4.33" 623 | "@types/node" "^12.12.54" 624 | "@types/ws" "^7.4.4" 625 | JSONStream "^1.3.5" 626 | commander "^2.20.3" 627 | delay "^5.0.0" 628 | es6-promisify "^5.0.0" 629 | eyes "^0.1.8" 630 | isomorphic-ws "^4.0.1" 631 | json-stringify-safe "^5.0.1" 632 | lodash "^4.17.20" 633 | uuid "^8.3.2" 634 | ws "^7.4.5" 635 | 636 | js-sha256@^0.9.0: 637 | version "0.9.0" 638 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" 639 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== 640 | 641 | js-yaml@4.1.0: 642 | version "4.1.0" 643 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 644 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 645 | dependencies: 646 | argparse "^2.0.1" 647 | 648 | json-stringify-safe@^5.0.1: 649 | version "5.0.1" 650 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 651 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 652 | 653 | json5@^1.0.1: 654 | version "1.0.1" 655 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 656 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 657 | dependencies: 658 | minimist "^1.2.0" 659 | 660 | jsonparse@^1.2.0: 661 | version "1.3.1" 662 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 663 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 664 | 665 | locate-path@^6.0.0: 666 | version "6.0.0" 667 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 668 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 669 | dependencies: 670 | p-locate "^5.0.0" 671 | 672 | lodash@^4.17.20: 673 | version "4.17.21" 674 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 675 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 676 | 677 | log-symbols@4.1.0: 678 | version "4.1.0" 679 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 680 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 681 | dependencies: 682 | chalk "^4.1.0" 683 | is-unicode-supported "^0.1.0" 684 | 685 | loupe@^2.3.1: 686 | version "2.3.6" 687 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" 688 | integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== 689 | dependencies: 690 | get-func-name "^2.0.0" 691 | 692 | lower-case@^2.0.2: 693 | version "2.0.2" 694 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 695 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 696 | dependencies: 697 | tslib "^2.0.3" 698 | 699 | make-error@^1.1.1: 700 | version "1.3.6" 701 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 702 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 703 | 704 | minimatch@4.2.1: 705 | version "4.2.1" 706 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" 707 | integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== 708 | dependencies: 709 | brace-expansion "^1.1.7" 710 | 711 | minimatch@^3.0.4: 712 | version "3.1.2" 713 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 714 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 715 | dependencies: 716 | brace-expansion "^1.1.7" 717 | 718 | minimist@^1.2.0, minimist@^1.2.6: 719 | version "1.2.7" 720 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" 721 | integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== 722 | 723 | mkdirp@^0.5.1: 724 | version "0.5.6" 725 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 726 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 727 | dependencies: 728 | minimist "^1.2.6" 729 | 730 | mocha@^9.0.3: 731 | version "9.2.2" 732 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" 733 | integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== 734 | dependencies: 735 | "@ungap/promise-all-settled" "1.1.2" 736 | ansi-colors "4.1.1" 737 | browser-stdout "1.3.1" 738 | chokidar "3.5.3" 739 | debug "4.3.3" 740 | diff "5.0.0" 741 | escape-string-regexp "4.0.0" 742 | find-up "5.0.0" 743 | glob "7.2.0" 744 | growl "1.10.5" 745 | he "1.2.0" 746 | js-yaml "4.1.0" 747 | log-symbols "4.1.0" 748 | minimatch "4.2.1" 749 | ms "2.1.3" 750 | nanoid "3.3.1" 751 | serialize-javascript "6.0.0" 752 | strip-json-comments "3.1.1" 753 | supports-color "8.1.1" 754 | which "2.0.2" 755 | workerpool "6.2.0" 756 | yargs "16.2.0" 757 | yargs-parser "20.2.4" 758 | yargs-unparser "2.0.0" 759 | 760 | ms@2.1.2: 761 | version "2.1.2" 762 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 763 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 764 | 765 | ms@2.1.3: 766 | version "2.1.3" 767 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 768 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 769 | 770 | nanoid@3.3.1: 771 | version "3.3.1" 772 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" 773 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 774 | 775 | no-case@^3.0.4: 776 | version "3.0.4" 777 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 778 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 779 | dependencies: 780 | lower-case "^2.0.2" 781 | tslib "^2.0.3" 782 | 783 | node-fetch@2, node-fetch@2.6.7: 784 | version "2.6.7" 785 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 786 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 787 | dependencies: 788 | whatwg-url "^5.0.0" 789 | 790 | node-gyp-build@^4.3.0: 791 | version "4.5.0" 792 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" 793 | integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== 794 | 795 | normalize-path@^3.0.0, normalize-path@~3.0.0: 796 | version "3.0.0" 797 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 798 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 799 | 800 | once@^1.3.0: 801 | version "1.4.0" 802 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 803 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 804 | dependencies: 805 | wrappy "1" 806 | 807 | p-limit@^3.0.2: 808 | version "3.1.0" 809 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 810 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 811 | dependencies: 812 | yocto-queue "^0.1.0" 813 | 814 | p-locate@^5.0.0: 815 | version "5.0.0" 816 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 817 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 818 | dependencies: 819 | p-limit "^3.0.2" 820 | 821 | pako@^2.0.3: 822 | version "2.1.0" 823 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" 824 | integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== 825 | 826 | path-exists@^4.0.0: 827 | version "4.0.0" 828 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 829 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 830 | 831 | path-is-absolute@^1.0.0: 832 | version "1.0.1" 833 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 834 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 835 | 836 | pathval@^1.1.1: 837 | version "1.1.1" 838 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 839 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 840 | 841 | picomatch@^2.0.4, picomatch@^2.2.1: 842 | version "2.3.1" 843 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 844 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 845 | 846 | prettier@^2.6.2: 847 | version "2.8.1" 848 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" 849 | integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== 850 | 851 | randombytes@^2.1.0: 852 | version "2.1.0" 853 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 854 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 855 | dependencies: 856 | safe-buffer "^5.1.0" 857 | 858 | readdirp@~3.6.0: 859 | version "3.6.0" 860 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 861 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 862 | dependencies: 863 | picomatch "^2.2.1" 864 | 865 | regenerator-runtime@^0.13.11: 866 | version "0.13.11" 867 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 868 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 869 | 870 | require-directory@^2.1.1: 871 | version "2.1.1" 872 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 873 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 874 | 875 | rpc-websockets@^7.5.0: 876 | version "7.5.0" 877 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" 878 | integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== 879 | dependencies: 880 | "@babel/runtime" "^7.17.2" 881 | eventemitter3 "^4.0.7" 882 | uuid "^8.3.2" 883 | ws "^8.5.0" 884 | optionalDependencies: 885 | bufferutil "^4.0.1" 886 | utf-8-validate "^5.0.2" 887 | 888 | safe-buffer@^5.0.1, safe-buffer@^5.1.0: 889 | version "5.2.1" 890 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 891 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 892 | 893 | serialize-javascript@6.0.0: 894 | version "6.0.0" 895 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 896 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 897 | dependencies: 898 | randombytes "^2.1.0" 899 | 900 | snake-case@^3.0.4: 901 | version "3.0.4" 902 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" 903 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 904 | dependencies: 905 | dot-case "^3.0.4" 906 | tslib "^2.0.3" 907 | 908 | source-map-support@^0.5.6: 909 | version "0.5.21" 910 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 911 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 912 | dependencies: 913 | buffer-from "^1.0.0" 914 | source-map "^0.6.0" 915 | 916 | source-map@^0.6.0: 917 | version "0.6.1" 918 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 919 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 920 | 921 | string-width@^4.1.0, string-width@^4.2.0: 922 | version "4.2.3" 923 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 924 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 925 | dependencies: 926 | emoji-regex "^8.0.0" 927 | is-fullwidth-code-point "^3.0.0" 928 | strip-ansi "^6.0.1" 929 | 930 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 931 | version "6.0.1" 932 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 933 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 934 | dependencies: 935 | ansi-regex "^5.0.1" 936 | 937 | strip-bom@^3.0.0: 938 | version "3.0.0" 939 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 940 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 941 | 942 | strip-json-comments@3.1.1: 943 | version "3.1.1" 944 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 945 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 946 | 947 | superstruct@^0.14.2: 948 | version "0.14.2" 949 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" 950 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 951 | 952 | superstruct@^0.15.4: 953 | version "0.15.5" 954 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" 955 | integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== 956 | 957 | supports-color@8.1.1: 958 | version "8.1.1" 959 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 960 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 961 | dependencies: 962 | has-flag "^4.0.0" 963 | 964 | supports-color@^7.1.0: 965 | version "7.2.0" 966 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 967 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 968 | dependencies: 969 | has-flag "^4.0.0" 970 | 971 | text-encoding-utf-8@^1.0.2: 972 | version "1.0.2" 973 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" 974 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 975 | 976 | "through@>=2.2.7 <3": 977 | version "2.3.8" 978 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 979 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 980 | 981 | to-regex-range@^5.0.1: 982 | version "5.0.1" 983 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 984 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 985 | dependencies: 986 | is-number "^7.0.0" 987 | 988 | toml@^3.0.0: 989 | version "3.0.0" 990 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" 991 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 992 | 993 | tr46@~0.0.3: 994 | version "0.0.3" 995 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 996 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 997 | 998 | ts-mocha@^10.0.0: 999 | version "10.0.0" 1000 | resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.0.0.tgz#41a8d099ac90dbbc64b06976c5025ffaebc53cb9" 1001 | integrity sha512-VRfgDO+iiuJFlNB18tzOfypJ21xn2xbuZyDvJvqpTbWgkAgD17ONGr8t+Tl8rcBtOBdjXp5e/Rk+d39f7XBHRw== 1002 | dependencies: 1003 | ts-node "7.0.1" 1004 | optionalDependencies: 1005 | tsconfig-paths "^3.5.0" 1006 | 1007 | ts-node@7.0.1: 1008 | version "7.0.1" 1009 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" 1010 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1011 | dependencies: 1012 | arrify "^1.0.0" 1013 | buffer-from "^1.1.0" 1014 | diff "^3.1.0" 1015 | make-error "^1.1.1" 1016 | minimist "^1.2.0" 1017 | mkdirp "^0.5.1" 1018 | source-map-support "^0.5.6" 1019 | yn "^2.0.0" 1020 | 1021 | tsconfig-paths@^3.5.0: 1022 | version "3.14.1" 1023 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" 1024 | integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== 1025 | dependencies: 1026 | "@types/json5" "^0.0.29" 1027 | json5 "^1.0.1" 1028 | minimist "^1.2.6" 1029 | strip-bom "^3.0.0" 1030 | 1031 | tslib@^2.0.3: 1032 | version "2.4.1" 1033 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" 1034 | integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== 1035 | 1036 | type-detect@^4.0.0, type-detect@^4.0.5: 1037 | version "4.0.8" 1038 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1039 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1040 | 1041 | typescript@^4.3.5: 1042 | version "4.9.4" 1043 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" 1044 | integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== 1045 | 1046 | utf-8-validate@^5.0.2: 1047 | version "5.0.10" 1048 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" 1049 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== 1050 | dependencies: 1051 | node-gyp-build "^4.3.0" 1052 | 1053 | uuid@^8.3.2: 1054 | version "8.3.2" 1055 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 1056 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1057 | 1058 | webidl-conversions@^3.0.0: 1059 | version "3.0.1" 1060 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1061 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1062 | 1063 | whatwg-url@^5.0.0: 1064 | version "5.0.0" 1065 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1066 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1067 | dependencies: 1068 | tr46 "~0.0.3" 1069 | webidl-conversions "^3.0.0" 1070 | 1071 | which@2.0.2: 1072 | version "2.0.2" 1073 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1074 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1075 | dependencies: 1076 | isexe "^2.0.0" 1077 | 1078 | workerpool@6.2.0: 1079 | version "6.2.0" 1080 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" 1081 | integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== 1082 | 1083 | wrap-ansi@^7.0.0: 1084 | version "7.0.0" 1085 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1086 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1087 | dependencies: 1088 | ansi-styles "^4.0.0" 1089 | string-width "^4.1.0" 1090 | strip-ansi "^6.0.0" 1091 | 1092 | wrappy@1: 1093 | version "1.0.2" 1094 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1095 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1096 | 1097 | ws@^7.4.5: 1098 | version "7.5.9" 1099 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" 1100 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 1101 | 1102 | ws@^8.5.0: 1103 | version "8.11.0" 1104 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" 1105 | integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== 1106 | 1107 | y18n@^5.0.5: 1108 | version "5.0.8" 1109 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1110 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1111 | 1112 | yargs-parser@20.2.4: 1113 | version "20.2.4" 1114 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1115 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1116 | 1117 | yargs-parser@^20.2.2: 1118 | version "20.2.9" 1119 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1120 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1121 | 1122 | yargs-unparser@2.0.0: 1123 | version "2.0.0" 1124 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1125 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1126 | dependencies: 1127 | camelcase "^6.0.0" 1128 | decamelize "^4.0.0" 1129 | flat "^5.0.2" 1130 | is-plain-obj "^2.1.0" 1131 | 1132 | yargs@16.2.0: 1133 | version "16.2.0" 1134 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1135 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1136 | dependencies: 1137 | cliui "^7.0.2" 1138 | escalade "^3.1.1" 1139 | get-caller-file "^2.0.5" 1140 | require-directory "^2.1.1" 1141 | string-width "^4.2.0" 1142 | y18n "^5.0.5" 1143 | yargs-parser "^20.2.2" 1144 | 1145 | yn@^2.0.0: 1146 | version "2.0.0" 1147 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1148 | integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== 1149 | 1150 | yocto-queue@^0.1.0: 1151 | version "0.1.0" 1152 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1153 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1154 | -------------------------------------------------------------------------------- /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 0.3.0", 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 0.3.0", 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.8", 48 | "once_cell", 49 | "version_check", 50 | ] 51 | 52 | [[package]] 53 | name = "aho-corasick" 54 | version = "0.7.20" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" 57 | dependencies = [ 58 | "memchr", 59 | ] 60 | 61 | [[package]] 62 | name = "anchor-attribute-access-control" 63 | version = "0.26.0" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "cf7d535e1381be3de2c0716c0a1c1e32ad9df1042cddcf7bc18d743569e53319" 66 | dependencies = [ 67 | "anchor-syn", 68 | "anyhow", 69 | "proc-macro2", 70 | "quote", 71 | "regex", 72 | "syn", 73 | ] 74 | 75 | [[package]] 76 | name = "anchor-attribute-account" 77 | version = "0.26.0" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "c3bcd731f21048a032be27c7791701120e44f3f6371358fc4261a7f716283d29" 80 | dependencies = [ 81 | "anchor-syn", 82 | "anyhow", 83 | "bs58 0.4.0", 84 | "proc-macro2", 85 | "quote", 86 | "rustversion", 87 | "syn", 88 | ] 89 | 90 | [[package]] 91 | name = "anchor-attribute-constant" 92 | version = "0.26.0" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "e1be64a48e395fe00b8217287f226078be2cf32dae42fdf8a885b997945c3d28" 95 | dependencies = [ 96 | "anchor-syn", 97 | "proc-macro2", 98 | "syn", 99 | ] 100 | 101 | [[package]] 102 | name = "anchor-attribute-error" 103 | version = "0.26.0" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "38ea6713d1938c0da03656ff8a693b17dc0396da66d1ba320557f07e86eca0d4" 106 | dependencies = [ 107 | "anchor-syn", 108 | "proc-macro2", 109 | "quote", 110 | "syn", 111 | ] 112 | 113 | [[package]] 114 | name = "anchor-attribute-event" 115 | version = "0.26.0" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "d401f11efb3644285685f8339829a9786d43ed7490bb1699f33c478d04d5a582" 118 | dependencies = [ 119 | "anchor-syn", 120 | "anyhow", 121 | "proc-macro2", 122 | "quote", 123 | "syn", 124 | ] 125 | 126 | [[package]] 127 | name = "anchor-attribute-interface" 128 | version = "0.26.0" 129 | source = "registry+https://github.com/rust-lang/crates.io-index" 130 | checksum = "c6700a6f5c888a9c33fe8afc0c64fd8575fa28d05446037306d0f96102ae4480" 131 | dependencies = [ 132 | "anchor-syn", 133 | "anyhow", 134 | "heck", 135 | "proc-macro2", 136 | "quote", 137 | "syn", 138 | ] 139 | 140 | [[package]] 141 | name = "anchor-attribute-program" 142 | version = "0.26.0" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "6ad769993b5266714e8939e47fbdede90e5c030333c7522d99a4d4748cf26712" 145 | dependencies = [ 146 | "anchor-syn", 147 | "anyhow", 148 | "proc-macro2", 149 | "quote", 150 | "syn", 151 | ] 152 | 153 | [[package]] 154 | name = "anchor-attribute-state" 155 | version = "0.26.0" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "4e677fae4a016a554acdd0e3b7f178d3acafaa7e7ffac6b8690cf4e171f1c116" 158 | dependencies = [ 159 | "anchor-syn", 160 | "anyhow", 161 | "proc-macro2", 162 | "quote", 163 | "syn", 164 | ] 165 | 166 | [[package]] 167 | name = "anchor-derive-accounts" 168 | version = "0.26.0" 169 | source = "registry+https://github.com/rust-lang/crates.io-index" 170 | checksum = "340beef6809d1c3fcc7ae219153d981e95a8a277ff31985bd7050e32645dc9a8" 171 | dependencies = [ 172 | "anchor-syn", 173 | "anyhow", 174 | "proc-macro2", 175 | "quote", 176 | "syn", 177 | ] 178 | 179 | [[package]] 180 | name = "anchor-lang" 181 | version = "0.26.0" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "662ceafe667448ee4199a4be2ee83b6bb76da28566eee5cea05f96ab38255af8" 184 | dependencies = [ 185 | "anchor-attribute-access-control", 186 | "anchor-attribute-account", 187 | "anchor-attribute-constant", 188 | "anchor-attribute-error", 189 | "anchor-attribute-event", 190 | "anchor-attribute-interface", 191 | "anchor-attribute-program", 192 | "anchor-attribute-state", 193 | "anchor-derive-accounts", 194 | "arrayref", 195 | "base64 0.13.1", 196 | "bincode", 197 | "borsh", 198 | "bytemuck", 199 | "solana-program", 200 | "thiserror", 201 | ] 202 | 203 | [[package]] 204 | name = "anchor-spl" 205 | version = "0.26.0" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "f32390ce8356f54c0f0245ea156f8190717e37285b8bf4f406a613dc4b954cde" 208 | dependencies = [ 209 | "anchor-lang", 210 | "solana-program", 211 | "spl-associated-token-account", 212 | "spl-token", 213 | ] 214 | 215 | [[package]] 216 | name = "anchor-syn" 217 | version = "0.26.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "0418bcb5daac3b8cb1b60d8fdb1d468ca36f5509f31fb51179326fae1028fdcc" 220 | dependencies = [ 221 | "anyhow", 222 | "bs58 0.3.1", 223 | "heck", 224 | "proc-macro2", 225 | "proc-macro2-diagnostics", 226 | "quote", 227 | "serde", 228 | "serde_json", 229 | "sha2 0.9.9", 230 | "syn", 231 | "thiserror", 232 | ] 233 | 234 | [[package]] 235 | name = "anyhow" 236 | version = "1.0.66" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" 239 | 240 | [[package]] 241 | name = "arrayref" 242 | version = "0.3.6" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 245 | 246 | [[package]] 247 | name = "arrayvec" 248 | version = "0.7.2" 249 | source = "registry+https://github.com/rust-lang/crates.io-index" 250 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 251 | 252 | [[package]] 253 | name = "assert_matches" 254 | version = "1.5.0" 255 | source = "registry+https://github.com/rust-lang/crates.io-index" 256 | checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" 257 | 258 | [[package]] 259 | name = "atty" 260 | version = "0.2.14" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 263 | dependencies = [ 264 | "hermit-abi", 265 | "libc", 266 | "winapi", 267 | ] 268 | 269 | [[package]] 270 | name = "autocfg" 271 | version = "1.1.0" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 274 | 275 | [[package]] 276 | name = "base64" 277 | version = "0.12.3" 278 | source = "registry+https://github.com/rust-lang/crates.io-index" 279 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 280 | 281 | [[package]] 282 | name = "base64" 283 | version = "0.13.1" 284 | source = "registry+https://github.com/rust-lang/crates.io-index" 285 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 286 | 287 | [[package]] 288 | name = "bincode" 289 | version = "1.3.3" 290 | source = "registry+https://github.com/rust-lang/crates.io-index" 291 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 292 | dependencies = [ 293 | "serde", 294 | ] 295 | 296 | [[package]] 297 | name = "bitflags" 298 | version = "1.3.2" 299 | source = "registry+https://github.com/rust-lang/crates.io-index" 300 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 301 | 302 | [[package]] 303 | name = "bitmaps" 304 | version = "2.1.0" 305 | source = "registry+https://github.com/rust-lang/crates.io-index" 306 | checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" 307 | dependencies = [ 308 | "typenum", 309 | ] 310 | 311 | [[package]] 312 | name = "blake3" 313 | version = "1.3.3" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef" 316 | dependencies = [ 317 | "arrayref", 318 | "arrayvec", 319 | "cc", 320 | "cfg-if", 321 | "constant_time_eq", 322 | "digest 0.10.6", 323 | ] 324 | 325 | [[package]] 326 | name = "block-buffer" 327 | version = "0.9.0" 328 | source = "registry+https://github.com/rust-lang/crates.io-index" 329 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 330 | dependencies = [ 331 | "block-padding", 332 | "generic-array", 333 | ] 334 | 335 | [[package]] 336 | name = "block-buffer" 337 | version = "0.10.3" 338 | source = "registry+https://github.com/rust-lang/crates.io-index" 339 | checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" 340 | dependencies = [ 341 | "generic-array", 342 | ] 343 | 344 | [[package]] 345 | name = "block-padding" 346 | version = "0.2.1" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 349 | 350 | [[package]] 351 | name = "borsh" 352 | version = "0.9.3" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" 355 | dependencies = [ 356 | "borsh-derive", 357 | "hashbrown 0.11.2", 358 | ] 359 | 360 | [[package]] 361 | name = "borsh-derive" 362 | version = "0.9.3" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" 365 | dependencies = [ 366 | "borsh-derive-internal", 367 | "borsh-schema-derive-internal", 368 | "proc-macro-crate 0.1.5", 369 | "proc-macro2", 370 | "syn", 371 | ] 372 | 373 | [[package]] 374 | name = "borsh-derive-internal" 375 | version = "0.9.3" 376 | source = "registry+https://github.com/rust-lang/crates.io-index" 377 | checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" 378 | dependencies = [ 379 | "proc-macro2", 380 | "quote", 381 | "syn", 382 | ] 383 | 384 | [[package]] 385 | name = "borsh-schema-derive-internal" 386 | version = "0.9.3" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" 389 | dependencies = [ 390 | "proc-macro2", 391 | "quote", 392 | "syn", 393 | ] 394 | 395 | [[package]] 396 | name = "bs58" 397 | version = "0.3.1" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" 400 | 401 | [[package]] 402 | name = "bs58" 403 | version = "0.4.0" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 406 | 407 | [[package]] 408 | name = "bumpalo" 409 | version = "3.11.1" 410 | source = "registry+https://github.com/rust-lang/crates.io-index" 411 | checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" 412 | 413 | [[package]] 414 | name = "bv" 415 | version = "0.11.1" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 418 | dependencies = [ 419 | "feature-probe", 420 | "serde", 421 | ] 422 | 423 | [[package]] 424 | name = "bytemuck" 425 | version = "1.13.1" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" 428 | dependencies = [ 429 | "bytemuck_derive", 430 | ] 431 | 432 | [[package]] 433 | name = "bytemuck_derive" 434 | version = "1.4.0" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" 437 | dependencies = [ 438 | "proc-macro2", 439 | "quote", 440 | "syn", 441 | ] 442 | 443 | [[package]] 444 | name = "byteorder" 445 | version = "1.4.3" 446 | source = "registry+https://github.com/rust-lang/crates.io-index" 447 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 448 | 449 | [[package]] 450 | name = "cc" 451 | version = "1.0.79" 452 | source = "registry+https://github.com/rust-lang/crates.io-index" 453 | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" 454 | dependencies = [ 455 | "jobserver", 456 | ] 457 | 458 | [[package]] 459 | name = "cfg-if" 460 | version = "1.0.0" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 463 | 464 | [[package]] 465 | name = "chrono" 466 | version = "0.4.23" 467 | source = "registry+https://github.com/rust-lang/crates.io-index" 468 | checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" 469 | dependencies = [ 470 | "num-integer", 471 | "num-traits", 472 | ] 473 | 474 | [[package]] 475 | name = "cipher" 476 | version = "0.3.0" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" 479 | dependencies = [ 480 | "generic-array", 481 | ] 482 | 483 | [[package]] 484 | name = "cipher" 485 | version = "0.4.4" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 488 | dependencies = [ 489 | "crypto-common", 490 | "inout", 491 | ] 492 | 493 | [[package]] 494 | name = "console_error_panic_hook" 495 | version = "0.1.7" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 498 | dependencies = [ 499 | "cfg-if", 500 | "wasm-bindgen", 501 | ] 502 | 503 | [[package]] 504 | name = "console_log" 505 | version = "0.2.0" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" 508 | dependencies = [ 509 | "log", 510 | "web-sys", 511 | ] 512 | 513 | [[package]] 514 | name = "constant_time_eq" 515 | version = "0.2.4" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" 518 | 519 | [[package]] 520 | name = "core_ds" 521 | version = "0.1.0" 522 | dependencies = [ 523 | "anchor-lang", 524 | "anchor-spl", 525 | "serde", 526 | "solana-program", 527 | ] 528 | 529 | [[package]] 530 | name = "cpufeatures" 531 | version = "0.2.5" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" 534 | dependencies = [ 535 | "libc", 536 | ] 537 | 538 | [[package]] 539 | name = "crossbeam-channel" 540 | version = "0.5.6" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" 543 | dependencies = [ 544 | "cfg-if", 545 | "crossbeam-utils", 546 | ] 547 | 548 | [[package]] 549 | name = "crossbeam-deque" 550 | version = "0.8.2" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" 553 | dependencies = [ 554 | "cfg-if", 555 | "crossbeam-epoch", 556 | "crossbeam-utils", 557 | ] 558 | 559 | [[package]] 560 | name = "crossbeam-epoch" 561 | version = "0.9.13" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a" 564 | dependencies = [ 565 | "autocfg", 566 | "cfg-if", 567 | "crossbeam-utils", 568 | "memoffset 0.7.1", 569 | "scopeguard", 570 | ] 571 | 572 | [[package]] 573 | name = "crossbeam-utils" 574 | version = "0.8.14" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" 577 | dependencies = [ 578 | "cfg-if", 579 | ] 580 | 581 | [[package]] 582 | name = "crunchy" 583 | version = "0.2.2" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 586 | 587 | [[package]] 588 | name = "crypto-common" 589 | version = "0.1.6" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 592 | dependencies = [ 593 | "generic-array", 594 | "typenum", 595 | ] 596 | 597 | [[package]] 598 | name = "crypto-mac" 599 | version = "0.8.0" 600 | source = "registry+https://github.com/rust-lang/crates.io-index" 601 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 602 | dependencies = [ 603 | "generic-array", 604 | "subtle", 605 | ] 606 | 607 | [[package]] 608 | name = "ctr" 609 | version = "0.8.0" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea" 612 | dependencies = [ 613 | "cipher 0.3.0", 614 | ] 615 | 616 | [[package]] 617 | name = "curve25519-dalek" 618 | version = "3.2.1" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 621 | dependencies = [ 622 | "byteorder", 623 | "digest 0.9.0", 624 | "rand_core 0.5.1", 625 | "serde", 626 | "subtle", 627 | "zeroize", 628 | ] 629 | 630 | [[package]] 631 | name = "derivation-path" 632 | version = "0.2.0" 633 | source = "registry+https://github.com/rust-lang/crates.io-index" 634 | checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" 635 | 636 | [[package]] 637 | name = "digest" 638 | version = "0.9.0" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 641 | dependencies = [ 642 | "generic-array", 643 | ] 644 | 645 | [[package]] 646 | name = "digest" 647 | version = "0.10.6" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" 650 | dependencies = [ 651 | "block-buffer 0.10.3", 652 | "crypto-common", 653 | "subtle", 654 | ] 655 | 656 | [[package]] 657 | name = "ed25519" 658 | version = "1.5.3" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" 661 | dependencies = [ 662 | "signature", 663 | ] 664 | 665 | [[package]] 666 | name = "ed25519-dalek" 667 | version = "1.0.1" 668 | source = "registry+https://github.com/rust-lang/crates.io-index" 669 | checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" 670 | dependencies = [ 671 | "curve25519-dalek", 672 | "ed25519", 673 | "rand", 674 | "serde", 675 | "sha2 0.9.9", 676 | "zeroize", 677 | ] 678 | 679 | [[package]] 680 | name = "ed25519-dalek-bip32" 681 | version = "0.2.0" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "9d2be62a4061b872c8c0873ee4fc6f101ce7b889d039f019c5fa2af471a59908" 684 | dependencies = [ 685 | "derivation-path", 686 | "ed25519-dalek", 687 | "hmac 0.12.1", 688 | "sha2 0.10.6", 689 | ] 690 | 691 | [[package]] 692 | name = "either" 693 | version = "1.8.0" 694 | source = "registry+https://github.com/rust-lang/crates.io-index" 695 | checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" 696 | 697 | [[package]] 698 | name = "env_logger" 699 | version = "0.9.3" 700 | source = "registry+https://github.com/rust-lang/crates.io-index" 701 | checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" 702 | dependencies = [ 703 | "atty", 704 | "humantime", 705 | "log", 706 | "regex", 707 | "termcolor", 708 | ] 709 | 710 | [[package]] 711 | name = "feature-probe" 712 | version = "0.1.1" 713 | source = "registry+https://github.com/rust-lang/crates.io-index" 714 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 715 | 716 | [[package]] 717 | name = "fnv" 718 | version = "1.0.7" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 721 | 722 | [[package]] 723 | name = "generic-array" 724 | version = "0.14.6" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" 727 | dependencies = [ 728 | "serde", 729 | "typenum", 730 | "version_check", 731 | ] 732 | 733 | [[package]] 734 | name = "getrandom" 735 | version = "0.1.16" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 738 | dependencies = [ 739 | "cfg-if", 740 | "js-sys", 741 | "libc", 742 | "wasi 0.9.0+wasi-snapshot-preview1", 743 | "wasm-bindgen", 744 | ] 745 | 746 | [[package]] 747 | name = "getrandom" 748 | version = "0.2.8" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" 751 | dependencies = [ 752 | "cfg-if", 753 | "js-sys", 754 | "libc", 755 | "wasi 0.11.0+wasi-snapshot-preview1", 756 | "wasm-bindgen", 757 | ] 758 | 759 | [[package]] 760 | name = "hashbrown" 761 | version = "0.11.2" 762 | source = "registry+https://github.com/rust-lang/crates.io-index" 763 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 764 | dependencies = [ 765 | "ahash", 766 | ] 767 | 768 | [[package]] 769 | name = "hashbrown" 770 | version = "0.12.3" 771 | source = "registry+https://github.com/rust-lang/crates.io-index" 772 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 773 | dependencies = [ 774 | "ahash", 775 | ] 776 | 777 | [[package]] 778 | name = "heck" 779 | version = "0.3.3" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 782 | dependencies = [ 783 | "unicode-segmentation", 784 | ] 785 | 786 | [[package]] 787 | name = "hermit-abi" 788 | version = "0.1.19" 789 | source = "registry+https://github.com/rust-lang/crates.io-index" 790 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 791 | dependencies = [ 792 | "libc", 793 | ] 794 | 795 | [[package]] 796 | name = "hmac" 797 | version = "0.8.1" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 800 | dependencies = [ 801 | "crypto-mac", 802 | "digest 0.9.0", 803 | ] 804 | 805 | [[package]] 806 | name = "hmac" 807 | version = "0.12.1" 808 | source = "registry+https://github.com/rust-lang/crates.io-index" 809 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 810 | dependencies = [ 811 | "digest 0.10.6", 812 | ] 813 | 814 | [[package]] 815 | name = "hmac-drbg" 816 | version = "0.3.0" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 819 | dependencies = [ 820 | "digest 0.9.0", 821 | "generic-array", 822 | "hmac 0.8.1", 823 | ] 824 | 825 | [[package]] 826 | name = "humantime" 827 | version = "2.1.0" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 830 | 831 | [[package]] 832 | name = "im" 833 | version = "15.1.0" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" 836 | dependencies = [ 837 | "bitmaps", 838 | "rand_core 0.6.4", 839 | "rand_xoshiro", 840 | "rayon", 841 | "serde", 842 | "sized-chunks", 843 | "typenum", 844 | "version_check", 845 | ] 846 | 847 | [[package]] 848 | name = "inout" 849 | version = "0.1.3" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" 852 | dependencies = [ 853 | "generic-array", 854 | ] 855 | 856 | [[package]] 857 | name = "itertools" 858 | version = "0.10.5" 859 | source = "registry+https://github.com/rust-lang/crates.io-index" 860 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 861 | dependencies = [ 862 | "either", 863 | ] 864 | 865 | [[package]] 866 | name = "itoa" 867 | version = "1.0.4" 868 | source = "registry+https://github.com/rust-lang/crates.io-index" 869 | checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" 870 | 871 | [[package]] 872 | name = "jobserver" 873 | version = "0.1.26" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" 876 | dependencies = [ 877 | "libc", 878 | ] 879 | 880 | [[package]] 881 | name = "js-sys" 882 | version = "0.3.60" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" 885 | dependencies = [ 886 | "wasm-bindgen", 887 | ] 888 | 889 | [[package]] 890 | name = "keccak" 891 | version = "0.1.3" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768" 894 | dependencies = [ 895 | "cpufeatures", 896 | ] 897 | 898 | [[package]] 899 | name = "lazy_static" 900 | version = "1.4.0" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 903 | 904 | [[package]] 905 | name = "libc" 906 | version = "0.2.138" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" 909 | 910 | [[package]] 911 | name = "libsecp256k1" 912 | version = "0.6.0" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 915 | dependencies = [ 916 | "arrayref", 917 | "base64 0.12.3", 918 | "digest 0.9.0", 919 | "hmac-drbg", 920 | "libsecp256k1-core", 921 | "libsecp256k1-gen-ecmult", 922 | "libsecp256k1-gen-genmult", 923 | "rand", 924 | "serde", 925 | "sha2 0.9.9", 926 | "typenum", 927 | ] 928 | 929 | [[package]] 930 | name = "libsecp256k1-core" 931 | version = "0.2.2" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 934 | dependencies = [ 935 | "crunchy", 936 | "digest 0.9.0", 937 | "subtle", 938 | ] 939 | 940 | [[package]] 941 | name = "libsecp256k1-gen-ecmult" 942 | version = "0.2.1" 943 | source = "registry+https://github.com/rust-lang/crates.io-index" 944 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 945 | dependencies = [ 946 | "libsecp256k1-core", 947 | ] 948 | 949 | [[package]] 950 | name = "libsecp256k1-gen-genmult" 951 | version = "0.2.1" 952 | source = "registry+https://github.com/rust-lang/crates.io-index" 953 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 954 | dependencies = [ 955 | "libsecp256k1-core", 956 | ] 957 | 958 | [[package]] 959 | name = "lock_api" 960 | version = "0.4.9" 961 | source = "registry+https://github.com/rust-lang/crates.io-index" 962 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" 963 | dependencies = [ 964 | "autocfg", 965 | "scopeguard", 966 | ] 967 | 968 | [[package]] 969 | name = "log" 970 | version = "0.4.17" 971 | source = "registry+https://github.com/rust-lang/crates.io-index" 972 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 973 | dependencies = [ 974 | "cfg-if", 975 | ] 976 | 977 | [[package]] 978 | name = "memchr" 979 | version = "2.5.0" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 982 | 983 | [[package]] 984 | name = "memmap2" 985 | version = "0.5.8" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc" 988 | dependencies = [ 989 | "libc", 990 | ] 991 | 992 | [[package]] 993 | name = "memoffset" 994 | version = "0.6.5" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 997 | dependencies = [ 998 | "autocfg", 999 | ] 1000 | 1001 | [[package]] 1002 | name = "memoffset" 1003 | version = "0.7.1" 1004 | source = "registry+https://github.com/rust-lang/crates.io-index" 1005 | checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" 1006 | dependencies = [ 1007 | "autocfg", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "merlin" 1012 | version = "3.0.0" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" 1015 | dependencies = [ 1016 | "byteorder", 1017 | "keccak", 1018 | "rand_core 0.6.4", 1019 | "zeroize", 1020 | ] 1021 | 1022 | [[package]] 1023 | name = "num-derive" 1024 | version = "0.3.3" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 1027 | dependencies = [ 1028 | "proc-macro2", 1029 | "quote", 1030 | "syn", 1031 | ] 1032 | 1033 | [[package]] 1034 | name = "num-integer" 1035 | version = "0.1.45" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 1038 | dependencies = [ 1039 | "autocfg", 1040 | "num-traits", 1041 | ] 1042 | 1043 | [[package]] 1044 | name = "num-traits" 1045 | version = "0.2.15" 1046 | source = "registry+https://github.com/rust-lang/crates.io-index" 1047 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 1048 | dependencies = [ 1049 | "autocfg", 1050 | ] 1051 | 1052 | [[package]] 1053 | name = "num_cpus" 1054 | version = "1.14.0" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" 1057 | dependencies = [ 1058 | "hermit-abi", 1059 | "libc", 1060 | ] 1061 | 1062 | [[package]] 1063 | name = "num_enum" 1064 | version = "0.5.11" 1065 | source = "registry+https://github.com/rust-lang/crates.io-index" 1066 | checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" 1067 | dependencies = [ 1068 | "num_enum_derive", 1069 | ] 1070 | 1071 | [[package]] 1072 | name = "num_enum_derive" 1073 | version = "0.5.11" 1074 | source = "registry+https://github.com/rust-lang/crates.io-index" 1075 | checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" 1076 | dependencies = [ 1077 | "proc-macro-crate 1.2.1", 1078 | "proc-macro2", 1079 | "quote", 1080 | "syn", 1081 | ] 1082 | 1083 | [[package]] 1084 | name = "once_cell" 1085 | version = "1.16.0" 1086 | source = "registry+https://github.com/rust-lang/crates.io-index" 1087 | checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" 1088 | 1089 | [[package]] 1090 | name = "opaque-debug" 1091 | version = "0.3.0" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 1094 | 1095 | [[package]] 1096 | name = "parking_lot" 1097 | version = "0.12.1" 1098 | source = "registry+https://github.com/rust-lang/crates.io-index" 1099 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 1100 | dependencies = [ 1101 | "lock_api", 1102 | "parking_lot_core", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "parking_lot_core" 1107 | version = "0.9.5" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" 1110 | dependencies = [ 1111 | "cfg-if", 1112 | "libc", 1113 | "redox_syscall", 1114 | "smallvec", 1115 | "windows-sys", 1116 | ] 1117 | 1118 | [[package]] 1119 | name = "pbkdf2" 1120 | version = "0.4.0" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" 1123 | dependencies = [ 1124 | "crypto-mac", 1125 | ] 1126 | 1127 | [[package]] 1128 | name = "pbkdf2" 1129 | version = "0.11.0" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" 1132 | dependencies = [ 1133 | "digest 0.10.6", 1134 | ] 1135 | 1136 | [[package]] 1137 | name = "percent-encoding" 1138 | version = "2.2.0" 1139 | source = "registry+https://github.com/rust-lang/crates.io-index" 1140 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" 1141 | 1142 | [[package]] 1143 | name = "polyval" 1144 | version = "0.5.3" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" 1147 | dependencies = [ 1148 | "cfg-if", 1149 | "cpufeatures", 1150 | "opaque-debug", 1151 | "universal-hash", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "ppv-lite86" 1156 | version = "0.2.17" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1159 | 1160 | [[package]] 1161 | name = "proc-macro-crate" 1162 | version = "0.1.5" 1163 | source = "registry+https://github.com/rust-lang/crates.io-index" 1164 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 1165 | dependencies = [ 1166 | "toml", 1167 | ] 1168 | 1169 | [[package]] 1170 | name = "proc-macro-crate" 1171 | version = "1.2.1" 1172 | source = "registry+https://github.com/rust-lang/crates.io-index" 1173 | checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" 1174 | dependencies = [ 1175 | "once_cell", 1176 | "thiserror", 1177 | "toml", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "proc-macro2" 1182 | version = "1.0.47" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" 1185 | dependencies = [ 1186 | "unicode-ident", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "proc-macro2-diagnostics" 1191 | version = "0.9.1" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" 1194 | dependencies = [ 1195 | "proc-macro2", 1196 | "quote", 1197 | "syn", 1198 | "version_check", 1199 | "yansi", 1200 | ] 1201 | 1202 | [[package]] 1203 | name = "qstring" 1204 | version = "0.7.2" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" 1207 | dependencies = [ 1208 | "percent-encoding", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "quote" 1213 | version = "1.0.21" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" 1216 | dependencies = [ 1217 | "proc-macro2", 1218 | ] 1219 | 1220 | [[package]] 1221 | name = "rand" 1222 | version = "0.7.3" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1225 | dependencies = [ 1226 | "getrandom 0.1.16", 1227 | "libc", 1228 | "rand_chacha", 1229 | "rand_core 0.5.1", 1230 | "rand_hc", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "rand_chacha" 1235 | version = "0.2.2" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 1238 | dependencies = [ 1239 | "ppv-lite86", 1240 | "rand_core 0.5.1", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "rand_core" 1245 | version = "0.5.1" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1248 | dependencies = [ 1249 | "getrandom 0.1.16", 1250 | ] 1251 | 1252 | [[package]] 1253 | name = "rand_core" 1254 | version = "0.6.4" 1255 | source = "registry+https://github.com/rust-lang/crates.io-index" 1256 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1257 | dependencies = [ 1258 | "getrandom 0.2.8", 1259 | ] 1260 | 1261 | [[package]] 1262 | name = "rand_hc" 1263 | version = "0.2.0" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1266 | dependencies = [ 1267 | "rand_core 0.5.1", 1268 | ] 1269 | 1270 | [[package]] 1271 | name = "rand_xoshiro" 1272 | version = "0.6.0" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" 1275 | dependencies = [ 1276 | "rand_core 0.6.4", 1277 | ] 1278 | 1279 | [[package]] 1280 | name = "rayon" 1281 | version = "1.6.1" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" 1284 | dependencies = [ 1285 | "either", 1286 | "rayon-core", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "rayon-core" 1291 | version = "1.10.1" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3" 1294 | dependencies = [ 1295 | "crossbeam-channel", 1296 | "crossbeam-deque", 1297 | "crossbeam-utils", 1298 | "num_cpus", 1299 | ] 1300 | 1301 | [[package]] 1302 | name = "redox_syscall" 1303 | version = "0.2.16" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 1306 | dependencies = [ 1307 | "bitflags", 1308 | ] 1309 | 1310 | [[package]] 1311 | name = "regex" 1312 | version = "1.7.0" 1313 | source = "registry+https://github.com/rust-lang/crates.io-index" 1314 | checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" 1315 | dependencies = [ 1316 | "aho-corasick", 1317 | "memchr", 1318 | "regex-syntax", 1319 | ] 1320 | 1321 | [[package]] 1322 | name = "regex-syntax" 1323 | version = "0.6.28" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" 1326 | 1327 | [[package]] 1328 | name = "registry" 1329 | version = "0.1.0" 1330 | dependencies = [ 1331 | "anchor-lang", 1332 | "anchor-spl", 1333 | "core_ds", 1334 | "solana-program", 1335 | ] 1336 | 1337 | [[package]] 1338 | name = "rustc-hash" 1339 | version = "1.1.0" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1342 | 1343 | [[package]] 1344 | name = "rustc_version" 1345 | version = "0.4.0" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1348 | dependencies = [ 1349 | "semver", 1350 | ] 1351 | 1352 | [[package]] 1353 | name = "rustversion" 1354 | version = "1.0.9" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" 1357 | 1358 | [[package]] 1359 | name = "ryu" 1360 | version = "1.0.11" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" 1363 | 1364 | [[package]] 1365 | name = "scopeguard" 1366 | version = "1.1.0" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1369 | 1370 | [[package]] 1371 | name = "semver" 1372 | version = "1.0.14" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" 1375 | 1376 | [[package]] 1377 | name = "serde" 1378 | version = "1.0.149" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "256b9932320c590e707b94576e3cc1f7c9024d0ee6612dfbcf1cb106cbe8e055" 1381 | dependencies = [ 1382 | "serde_derive", 1383 | ] 1384 | 1385 | [[package]] 1386 | name = "serde_bytes" 1387 | version = "0.11.7" 1388 | source = "registry+https://github.com/rust-lang/crates.io-index" 1389 | checksum = "cfc50e8183eeeb6178dcb167ae34a8051d63535023ae38b5d8d12beae193d37b" 1390 | dependencies = [ 1391 | "serde", 1392 | ] 1393 | 1394 | [[package]] 1395 | name = "serde_derive" 1396 | version = "1.0.149" 1397 | source = "registry+https://github.com/rust-lang/crates.io-index" 1398 | checksum = "b4eae9b04cbffdfd550eb462ed33bc6a1b68c935127d008b27444d08380f94e4" 1399 | dependencies = [ 1400 | "proc-macro2", 1401 | "quote", 1402 | "syn", 1403 | ] 1404 | 1405 | [[package]] 1406 | name = "serde_json" 1407 | version = "1.0.89" 1408 | source = "registry+https://github.com/rust-lang/crates.io-index" 1409 | checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" 1410 | dependencies = [ 1411 | "itoa", 1412 | "ryu", 1413 | "serde", 1414 | ] 1415 | 1416 | [[package]] 1417 | name = "sha2" 1418 | version = "0.9.9" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1421 | dependencies = [ 1422 | "block-buffer 0.9.0", 1423 | "cfg-if", 1424 | "cpufeatures", 1425 | "digest 0.9.0", 1426 | "opaque-debug", 1427 | ] 1428 | 1429 | [[package]] 1430 | name = "sha2" 1431 | version = "0.10.6" 1432 | source = "registry+https://github.com/rust-lang/crates.io-index" 1433 | checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" 1434 | dependencies = [ 1435 | "cfg-if", 1436 | "cpufeatures", 1437 | "digest 0.10.6", 1438 | ] 1439 | 1440 | [[package]] 1441 | name = "sha3" 1442 | version = "0.9.1" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 1445 | dependencies = [ 1446 | "block-buffer 0.9.0", 1447 | "digest 0.9.0", 1448 | "keccak", 1449 | "opaque-debug", 1450 | ] 1451 | 1452 | [[package]] 1453 | name = "sha3" 1454 | version = "0.10.6" 1455 | source = "registry+https://github.com/rust-lang/crates.io-index" 1456 | checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" 1457 | dependencies = [ 1458 | "digest 0.10.6", 1459 | "keccak", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "signature" 1464 | version = "1.6.4" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" 1467 | 1468 | [[package]] 1469 | name = "sized-chunks" 1470 | version = "0.6.5" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" 1473 | dependencies = [ 1474 | "bitmaps", 1475 | "typenum", 1476 | ] 1477 | 1478 | [[package]] 1479 | name = "smallvec" 1480 | version = "1.10.0" 1481 | source = "registry+https://github.com/rust-lang/crates.io-index" 1482 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" 1483 | 1484 | [[package]] 1485 | name = "solana-frozen-abi" 1486 | version = "1.14.11" 1487 | source = "registry+https://github.com/rust-lang/crates.io-index" 1488 | checksum = "6c5a383f43792311db749bbed4e7794222c9f118b609bc8252b4ea3ad88b4188" 1489 | dependencies = [ 1490 | "ahash", 1491 | "blake3", 1492 | "block-buffer 0.9.0", 1493 | "bs58 0.4.0", 1494 | "bv", 1495 | "byteorder", 1496 | "cc", 1497 | "either", 1498 | "generic-array", 1499 | "getrandom 0.1.16", 1500 | "hashbrown 0.12.3", 1501 | "im", 1502 | "lazy_static", 1503 | "log", 1504 | "memmap2", 1505 | "once_cell", 1506 | "rand_core 0.6.4", 1507 | "rustc_version", 1508 | "serde", 1509 | "serde_bytes", 1510 | "serde_derive", 1511 | "serde_json", 1512 | "sha2 0.10.6", 1513 | "solana-frozen-abi-macro", 1514 | "subtle", 1515 | "thiserror", 1516 | ] 1517 | 1518 | [[package]] 1519 | name = "solana-frozen-abi-macro" 1520 | version = "1.14.11" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | checksum = "062e282539e770967500945cd2fdb78170a1ea45aff7ad1b4ce4e2cc0b557db8" 1523 | dependencies = [ 1524 | "proc-macro2", 1525 | "quote", 1526 | "rustc_version", 1527 | "syn", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "solana-logger" 1532 | version = "1.14.11" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | checksum = "0c2bcbaba2c683e7bf80ff4f3a3cdcdaabdb0b21333e8d89aed06be136193d39" 1535 | dependencies = [ 1536 | "env_logger", 1537 | "lazy_static", 1538 | "log", 1539 | ] 1540 | 1541 | [[package]] 1542 | name = "solana-program" 1543 | version = "1.14.11" 1544 | source = "registry+https://github.com/rust-lang/crates.io-index" 1545 | checksum = "75602376f2cea17ac301292a3ded6db73e968310ac482857237d95a34473b62a" 1546 | dependencies = [ 1547 | "base64 0.13.1", 1548 | "bincode", 1549 | "bitflags", 1550 | "blake3", 1551 | "borsh", 1552 | "borsh-derive", 1553 | "bs58 0.4.0", 1554 | "bv", 1555 | "bytemuck", 1556 | "cc", 1557 | "console_error_panic_hook", 1558 | "console_log", 1559 | "curve25519-dalek", 1560 | "getrandom 0.2.8", 1561 | "itertools", 1562 | "js-sys", 1563 | "lazy_static", 1564 | "libc", 1565 | "libsecp256k1", 1566 | "log", 1567 | "memoffset 0.6.5", 1568 | "num-derive", 1569 | "num-traits", 1570 | "parking_lot", 1571 | "rand", 1572 | "rand_chacha", 1573 | "rustc_version", 1574 | "rustversion", 1575 | "serde", 1576 | "serde_bytes", 1577 | "serde_derive", 1578 | "serde_json", 1579 | "sha2 0.10.6", 1580 | "sha3 0.10.6", 1581 | "solana-frozen-abi", 1582 | "solana-frozen-abi-macro", 1583 | "solana-sdk-macro", 1584 | "thiserror", 1585 | "tiny-bip39", 1586 | "wasm-bindgen", 1587 | "zeroize", 1588 | ] 1589 | 1590 | [[package]] 1591 | name = "solana-sdk" 1592 | version = "1.14.11" 1593 | source = "registry+https://github.com/rust-lang/crates.io-index" 1594 | checksum = "a46085d2548bb943e7210b28b09378e361350577b391a94457ad78af1a9f75ef" 1595 | dependencies = [ 1596 | "assert_matches", 1597 | "base64 0.13.1", 1598 | "bincode", 1599 | "bitflags", 1600 | "borsh", 1601 | "bs58 0.4.0", 1602 | "bytemuck", 1603 | "byteorder", 1604 | "chrono", 1605 | "derivation-path", 1606 | "digest 0.10.6", 1607 | "ed25519-dalek", 1608 | "ed25519-dalek-bip32", 1609 | "generic-array", 1610 | "hmac 0.12.1", 1611 | "itertools", 1612 | "js-sys", 1613 | "lazy_static", 1614 | "libsecp256k1", 1615 | "log", 1616 | "memmap2", 1617 | "num-derive", 1618 | "num-traits", 1619 | "pbkdf2 0.11.0", 1620 | "qstring", 1621 | "rand", 1622 | "rand_chacha", 1623 | "rustc_version", 1624 | "rustversion", 1625 | "serde", 1626 | "serde_bytes", 1627 | "serde_derive", 1628 | "serde_json", 1629 | "sha2 0.10.6", 1630 | "sha3 0.10.6", 1631 | "solana-frozen-abi", 1632 | "solana-frozen-abi-macro", 1633 | "solana-logger", 1634 | "solana-program", 1635 | "solana-sdk-macro", 1636 | "thiserror", 1637 | "uriparse", 1638 | "wasm-bindgen", 1639 | ] 1640 | 1641 | [[package]] 1642 | name = "solana-sdk-macro" 1643 | version = "1.14.11" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | checksum = "faa38323e649c70b698e49f1ded17849a9b5da2e0821a38ad08327307009e274" 1646 | dependencies = [ 1647 | "bs58 0.4.0", 1648 | "proc-macro2", 1649 | "quote", 1650 | "rustversion", 1651 | "syn", 1652 | ] 1653 | 1654 | [[package]] 1655 | name = "solana-zk-token-sdk" 1656 | version = "1.14.11" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | checksum = "d81faf1b8f5c550923f01e9b2c41aec8f646cceff7fd72ca6712d10a4022f163" 1659 | dependencies = [ 1660 | "aes-gcm-siv", 1661 | "arrayref", 1662 | "base64 0.13.1", 1663 | "bincode", 1664 | "bytemuck", 1665 | "byteorder", 1666 | "cipher 0.4.4", 1667 | "curve25519-dalek", 1668 | "getrandom 0.1.16", 1669 | "itertools", 1670 | "lazy_static", 1671 | "merlin", 1672 | "num-derive", 1673 | "num-traits", 1674 | "rand", 1675 | "serde", 1676 | "serde_json", 1677 | "sha3 0.9.1", 1678 | "solana-program", 1679 | "solana-sdk", 1680 | "subtle", 1681 | "thiserror", 1682 | "zeroize", 1683 | ] 1684 | 1685 | [[package]] 1686 | name = "spl-associated-token-account" 1687 | version = "1.1.2" 1688 | source = "registry+https://github.com/rust-lang/crates.io-index" 1689 | checksum = "fbc000f0fdf1f12f99d77d398137c1751345b18c88258ce0f99b7872cf6c9bd6" 1690 | dependencies = [ 1691 | "assert_matches", 1692 | "borsh", 1693 | "num-derive", 1694 | "num-traits", 1695 | "solana-program", 1696 | "spl-token", 1697 | "spl-token-2022", 1698 | "thiserror", 1699 | ] 1700 | 1701 | [[package]] 1702 | name = "spl-memo" 1703 | version = "3.0.1" 1704 | source = "registry+https://github.com/rust-lang/crates.io-index" 1705 | checksum = "bd0dc6f70db6bacea7ff25870b016a65ba1d1b6013536f08e4fd79a8f9005325" 1706 | dependencies = [ 1707 | "solana-program", 1708 | ] 1709 | 1710 | [[package]] 1711 | name = "spl-token" 1712 | version = "3.5.0" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" 1715 | dependencies = [ 1716 | "arrayref", 1717 | "bytemuck", 1718 | "num-derive", 1719 | "num-traits", 1720 | "num_enum", 1721 | "solana-program", 1722 | "thiserror", 1723 | ] 1724 | 1725 | [[package]] 1726 | name = "spl-token-2022" 1727 | version = "0.5.0" 1728 | source = "registry+https://github.com/rust-lang/crates.io-index" 1729 | checksum = "0edb869dbe159b018f17fb9bfa67118c30f232d7f54a73742bc96794dff77ed8" 1730 | dependencies = [ 1731 | "arrayref", 1732 | "bytemuck", 1733 | "num-derive", 1734 | "num-traits", 1735 | "num_enum", 1736 | "solana-program", 1737 | "solana-zk-token-sdk", 1738 | "spl-memo", 1739 | "spl-token", 1740 | "thiserror", 1741 | ] 1742 | 1743 | [[package]] 1744 | name = "subtle" 1745 | version = "2.4.1" 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" 1747 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1748 | 1749 | [[package]] 1750 | name = "syn" 1751 | version = "1.0.105" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" 1754 | dependencies = [ 1755 | "proc-macro2", 1756 | "quote", 1757 | "unicode-ident", 1758 | ] 1759 | 1760 | [[package]] 1761 | name = "synstructure" 1762 | version = "0.12.6" 1763 | source = "registry+https://github.com/rust-lang/crates.io-index" 1764 | checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" 1765 | dependencies = [ 1766 | "proc-macro2", 1767 | "quote", 1768 | "syn", 1769 | "unicode-xid", 1770 | ] 1771 | 1772 | [[package]] 1773 | name = "termcolor" 1774 | version = "1.2.0" 1775 | source = "registry+https://github.com/rust-lang/crates.io-index" 1776 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" 1777 | dependencies = [ 1778 | "winapi-util", 1779 | ] 1780 | 1781 | [[package]] 1782 | name = "thiserror" 1783 | version = "1.0.37" 1784 | source = "registry+https://github.com/rust-lang/crates.io-index" 1785 | checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" 1786 | dependencies = [ 1787 | "thiserror-impl", 1788 | ] 1789 | 1790 | [[package]] 1791 | name = "thiserror-impl" 1792 | version = "1.0.37" 1793 | source = "registry+https://github.com/rust-lang/crates.io-index" 1794 | checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" 1795 | dependencies = [ 1796 | "proc-macro2", 1797 | "quote", 1798 | "syn", 1799 | ] 1800 | 1801 | [[package]] 1802 | name = "tiny-bip39" 1803 | version = "0.8.2" 1804 | source = "registry+https://github.com/rust-lang/crates.io-index" 1805 | checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" 1806 | dependencies = [ 1807 | "anyhow", 1808 | "hmac 0.8.1", 1809 | "once_cell", 1810 | "pbkdf2 0.4.0", 1811 | "rand", 1812 | "rustc-hash", 1813 | "sha2 0.9.9", 1814 | "thiserror", 1815 | "unicode-normalization", 1816 | "wasm-bindgen", 1817 | "zeroize", 1818 | ] 1819 | 1820 | [[package]] 1821 | name = "tinyvec" 1822 | version = "1.6.0" 1823 | source = "registry+https://github.com/rust-lang/crates.io-index" 1824 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1825 | dependencies = [ 1826 | "tinyvec_macros", 1827 | ] 1828 | 1829 | [[package]] 1830 | name = "tinyvec_macros" 1831 | version = "0.1.1" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 1834 | 1835 | [[package]] 1836 | name = "toml" 1837 | version = "0.5.9" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 1840 | dependencies = [ 1841 | "serde", 1842 | ] 1843 | 1844 | [[package]] 1845 | name = "tsab" 1846 | version = "0.1.0" 1847 | dependencies = [ 1848 | "anchor-lang", 1849 | "anchor-spl", 1850 | "core_ds", 1851 | "registry", 1852 | "solana-program", 1853 | ] 1854 | 1855 | [[package]] 1856 | name = "typenum" 1857 | version = "1.16.0" 1858 | source = "registry+https://github.com/rust-lang/crates.io-index" 1859 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" 1860 | 1861 | [[package]] 1862 | name = "unicode-ident" 1863 | version = "1.0.5" 1864 | source = "registry+https://github.com/rust-lang/crates.io-index" 1865 | checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" 1866 | 1867 | [[package]] 1868 | name = "unicode-normalization" 1869 | version = "0.1.22" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" 1872 | dependencies = [ 1873 | "tinyvec", 1874 | ] 1875 | 1876 | [[package]] 1877 | name = "unicode-segmentation" 1878 | version = "1.10.0" 1879 | source = "registry+https://github.com/rust-lang/crates.io-index" 1880 | checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" 1881 | 1882 | [[package]] 1883 | name = "unicode-xid" 1884 | version = "0.2.4" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" 1887 | 1888 | [[package]] 1889 | name = "universal-hash" 1890 | version = "0.4.1" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" 1893 | dependencies = [ 1894 | "generic-array", 1895 | "subtle", 1896 | ] 1897 | 1898 | [[package]] 1899 | name = "uriparse" 1900 | version = "0.6.4" 1901 | source = "registry+https://github.com/rust-lang/crates.io-index" 1902 | checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" 1903 | dependencies = [ 1904 | "fnv", 1905 | "lazy_static", 1906 | ] 1907 | 1908 | [[package]] 1909 | name = "version_check" 1910 | version = "0.9.4" 1911 | source = "registry+https://github.com/rust-lang/crates.io-index" 1912 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1913 | 1914 | [[package]] 1915 | name = "wasi" 1916 | version = "0.9.0+wasi-snapshot-preview1" 1917 | source = "registry+https://github.com/rust-lang/crates.io-index" 1918 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1919 | 1920 | [[package]] 1921 | name = "wasi" 1922 | version = "0.11.0+wasi-snapshot-preview1" 1923 | source = "registry+https://github.com/rust-lang/crates.io-index" 1924 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1925 | 1926 | [[package]] 1927 | name = "wasm-bindgen" 1928 | version = "0.2.83" 1929 | source = "registry+https://github.com/rust-lang/crates.io-index" 1930 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" 1931 | dependencies = [ 1932 | "cfg-if", 1933 | "wasm-bindgen-macro", 1934 | ] 1935 | 1936 | [[package]] 1937 | name = "wasm-bindgen-backend" 1938 | version = "0.2.83" 1939 | source = "registry+https://github.com/rust-lang/crates.io-index" 1940 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" 1941 | dependencies = [ 1942 | "bumpalo", 1943 | "log", 1944 | "once_cell", 1945 | "proc-macro2", 1946 | "quote", 1947 | "syn", 1948 | "wasm-bindgen-shared", 1949 | ] 1950 | 1951 | [[package]] 1952 | name = "wasm-bindgen-macro" 1953 | version = "0.2.83" 1954 | source = "registry+https://github.com/rust-lang/crates.io-index" 1955 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" 1956 | dependencies = [ 1957 | "quote", 1958 | "wasm-bindgen-macro-support", 1959 | ] 1960 | 1961 | [[package]] 1962 | name = "wasm-bindgen-macro-support" 1963 | version = "0.2.83" 1964 | source = "registry+https://github.com/rust-lang/crates.io-index" 1965 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" 1966 | dependencies = [ 1967 | "proc-macro2", 1968 | "quote", 1969 | "syn", 1970 | "wasm-bindgen-backend", 1971 | "wasm-bindgen-shared", 1972 | ] 1973 | 1974 | [[package]] 1975 | name = "wasm-bindgen-shared" 1976 | version = "0.2.83" 1977 | source = "registry+https://github.com/rust-lang/crates.io-index" 1978 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" 1979 | 1980 | [[package]] 1981 | name = "web-sys" 1982 | version = "0.3.60" 1983 | source = "registry+https://github.com/rust-lang/crates.io-index" 1984 | checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" 1985 | dependencies = [ 1986 | "js-sys", 1987 | "wasm-bindgen", 1988 | ] 1989 | 1990 | [[package]] 1991 | name = "winapi" 1992 | version = "0.3.9" 1993 | source = "registry+https://github.com/rust-lang/crates.io-index" 1994 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1995 | dependencies = [ 1996 | "winapi-i686-pc-windows-gnu", 1997 | "winapi-x86_64-pc-windows-gnu", 1998 | ] 1999 | 2000 | [[package]] 2001 | name = "winapi-i686-pc-windows-gnu" 2002 | version = "0.4.0" 2003 | source = "registry+https://github.com/rust-lang/crates.io-index" 2004 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2005 | 2006 | [[package]] 2007 | name = "winapi-util" 2008 | version = "0.1.5" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 2011 | dependencies = [ 2012 | "winapi", 2013 | ] 2014 | 2015 | [[package]] 2016 | name = "winapi-x86_64-pc-windows-gnu" 2017 | version = "0.4.0" 2018 | source = "registry+https://github.com/rust-lang/crates.io-index" 2019 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2020 | 2021 | [[package]] 2022 | name = "windows-sys" 2023 | version = "0.42.0" 2024 | source = "registry+https://github.com/rust-lang/crates.io-index" 2025 | checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" 2026 | dependencies = [ 2027 | "windows_aarch64_gnullvm", 2028 | "windows_aarch64_msvc", 2029 | "windows_i686_gnu", 2030 | "windows_i686_msvc", 2031 | "windows_x86_64_gnu", 2032 | "windows_x86_64_gnullvm", 2033 | "windows_x86_64_msvc", 2034 | ] 2035 | 2036 | [[package]] 2037 | name = "windows_aarch64_gnullvm" 2038 | version = "0.42.0" 2039 | source = "registry+https://github.com/rust-lang/crates.io-index" 2040 | checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" 2041 | 2042 | [[package]] 2043 | name = "windows_aarch64_msvc" 2044 | version = "0.42.0" 2045 | source = "registry+https://github.com/rust-lang/crates.io-index" 2046 | checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" 2047 | 2048 | [[package]] 2049 | name = "windows_i686_gnu" 2050 | version = "0.42.0" 2051 | source = "registry+https://github.com/rust-lang/crates.io-index" 2052 | checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" 2053 | 2054 | [[package]] 2055 | name = "windows_i686_msvc" 2056 | version = "0.42.0" 2057 | source = "registry+https://github.com/rust-lang/crates.io-index" 2058 | checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" 2059 | 2060 | [[package]] 2061 | name = "windows_x86_64_gnu" 2062 | version = "0.42.0" 2063 | source = "registry+https://github.com/rust-lang/crates.io-index" 2064 | checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" 2065 | 2066 | [[package]] 2067 | name = "windows_x86_64_gnullvm" 2068 | version = "0.42.0" 2069 | source = "registry+https://github.com/rust-lang/crates.io-index" 2070 | checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" 2071 | 2072 | [[package]] 2073 | name = "windows_x86_64_msvc" 2074 | version = "0.42.0" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" 2077 | 2078 | [[package]] 2079 | name = "yansi" 2080 | version = "0.5.1" 2081 | source = "registry+https://github.com/rust-lang/crates.io-index" 2082 | checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" 2083 | 2084 | [[package]] 2085 | name = "zeroize" 2086 | version = "1.3.0" 2087 | source = "registry+https://github.com/rust-lang/crates.io-index" 2088 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 2089 | dependencies = [ 2090 | "zeroize_derive", 2091 | ] 2092 | 2093 | [[package]] 2094 | name = "zeroize_derive" 2095 | version = "1.3.3" 2096 | source = "registry+https://github.com/rust-lang/crates.io-index" 2097 | checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" 2098 | dependencies = [ 2099 | "proc-macro2", 2100 | "quote", 2101 | "syn", 2102 | "synstructure", 2103 | ] 2104 | --------------------------------------------------------------------------------