├── dwarves_staking ├── Cargo.toml ├── .gitignore ├── programs │ └── dwarves_staking │ │ ├── Xargo.toml │ │ ├── Cargo.toml │ │ └── src │ │ ├── error.rs │ │ ├── constants.rs │ │ ├── account.rs │ │ └── lib.rs ├── tsconfig.json ├── Anchor.toml ├── migrations │ └── deploy.ts ├── package.json ├── cli │ ├── types.ts │ ├── staking_program.json │ └── script.ts ├── tests │ └── dwarves_staking.ts ├── Cargo.lock └── yarn.lock ├── .gitignore └── README.md /dwarves_staking/Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "programs/*" 4 | ] 5 | -------------------------------------------------------------------------------- /dwarves_staking/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | **/*.rs.bk 6 | node_modules 7 | -------------------------------------------------------------------------------- /dwarves_staking/programs/dwarves_staking/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /dwarves_staking/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 | -------------------------------------------------------------------------------- /dwarves_staking/Anchor.toml: -------------------------------------------------------------------------------- 1 | [programs.devnet] 2 | dwarves_staking = "Gz9boUKpghd9Kb1yLcM6uLCa4tHEtGz9ETd3RdUXEpVL" 3 | 4 | [registry] 5 | url = "https://anchor.projectserum.com" 6 | 7 | [provider] 8 | cluster = "devnet" 9 | wallet = "/home/fury/.config/solana/id.json" 10 | 11 | [scripts] 12 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 13 | -------------------------------------------------------------------------------- /dwarves_staking/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 | -------------------------------------------------------------------------------- /dwarves_staking/programs/dwarves_staking/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "dwarves_staking" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2018" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "dwarves_staking" 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.20.1" 20 | anchor-spl = "0.20.1" 21 | spl-token = "3.2.0" 22 | solana-program = "=1.9.5" 23 | -------------------------------------------------------------------------------- /dwarves_staking/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "ts-node": "export ANCHOR_WALLET=/home/fury/.config/solana/id.json && ts-node ./cli/script.ts" 4 | }, 5 | "dependencies": { 6 | "@project-serum/anchor": "^0.20.1", 7 | "@solana/spl-token": "^0.1.8", 8 | "@types/chai": "^4.3.0" 9 | }, 10 | "devDependencies": { 11 | "@types/mocha": "^9.0.0", 12 | "chai": "^4.3.4", 13 | "mocha": "^9.0.3", 14 | "ts-mocha": "^8.0.0", 15 | "typescript": "^4.3.5" 16 | } 17 | } -------------------------------------------------------------------------------- /dwarves_staking/programs/dwarves_staking/src/error.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[error] 4 | pub enum StakingError { 5 | #[msg("Invalid User Pool")] 6 | InvalidUserPool, 7 | #[msg("Invalid pool number")] 8 | InvalidPoolError, 9 | #[msg("No Matching NFT to withdraw")] 10 | InvalidNFTAddress, 11 | #[msg("NFT Owner key mismatch")] 12 | InvalidOwner, 13 | #[msg("Staking Locked Now")] 14 | InvalidWithdrawTime, 15 | #[msg("Withdraw NFT Index OverFlow")] 16 | IndexOverflow, 17 | #[msg("Insufficient Lamports")] 18 | LackLamports 19 | } -------------------------------------------------------------------------------- /dwarves_staking/cli/types.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from '@project-serum/anchor'; 2 | import { PublicKey } from '@solana/web3.js'; 3 | 4 | export interface GlobalPool { 5 | lotteryNftCount: anchor.BN, // 8 6 | fixedNftCount: anchor.BN, // 8 7 | } 8 | 9 | export interface StakedNFT { 10 | nftAddr: PublicKey, // 32 11 | stakeTime: anchor.BN, // 8 12 | rate: anchor.BN, // 8 13 | } 14 | 15 | export interface UserPool { 16 | // 8 + 2456 17 | owner: PublicKey, // 32 18 | itemCount: anchor.BN, // 8 19 | items: StakedNFT[], // 48 * 50 20 | rewardTime: anchor.BN, // 8 21 | pendingReward: anchor.BN, // 8 22 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /dwarves_staking/programs/dwarves_staking/src/constants.rs: -------------------------------------------------------------------------------- 1 | pub const NFT_STAKE_MAX_COUNT: usize = 50; 2 | pub const NFT_TOTAL_COUNT: usize = 5000; 3 | 4 | pub const GLOBAL_AUTHORITY_SEED: &str = "global-authority"; 5 | pub const POOL_WALLET_SEED: &str = "pool-wallet"; 6 | pub const REWARD_TOKEN_MINT_PUBKEY: &str = "8EoML7gaBJsgJtepm25wq3GuUCqLYHBoqd3HP1JxtyBx"; 7 | pub const MIN_REWARD_DEPOSIT_AMOUNT: u64 = 10_000_000_000; 8 | 9 | pub const DAY: i64 = 60; // 1 day 10 | pub const REWARD_PER_DAY: i64 = 100; 11 | 12 | pub const DEPOSIT_AMOUNT: u64 = 100_000_000; 13 | pub const POOL_SIZE: u64 = 424_120; 14 | 15 | // "Dwarf": { 16 | pub const DLORD: &str = "The Dark Lord"; 17 | pub const EULORD: &str = "Emerald Underlord"; 18 | pub const IARCH: &str = "Irish Archer"; 19 | pub const INVI: &str = "Invisible"; 20 | pub const FULORD: &str = "Fluorite Underlord"; 21 | pub const LULORD: &str = "Lapis Underlord"; 22 | pub const RULORD: &str = "Ruby Underlord"; 23 | pub const HELLBEND: &str = "Hellbender"; 24 | pub const AIRBEND: &str = "Airbender"; 25 | pub const PALPATINE: &str = "Palpatine"; 26 | pub const AVATAR: &str = "Avatar"; 27 | pub const JACKSKELL: &str = "Jack Skellington"; 28 | pub const ENGLAND: &str = "England"; 29 | pub const MOUSE: &str = "Mouse"; 30 | pub const PEPE: &str = "Pepe"; 31 | pub const REANIMFIEND: &str = "Reanimated Undead Fiend"; 32 | pub const CADAVEROUS: &str = "Cadaverous Undead Wraith"; 33 | pub const REANIMWRAITH: &str = "Reanimated Undead Wraith"; 34 | pub const POSSESSWRAITH: &str = "Possessed Undead Wraith"; 35 | pub const ELECTIFIED: &str = "Electrified Undead Fiend"; 36 | pub const ELECTIWRAITH: &str = "Electrified Undead Wraith"; 37 | pub const POSSESSFIED: &str = "Possessed Undead Fiend"; 38 | pub const CADAVEROUSFIED: &str = "Cadaverous Undead Fiend"; 39 | pub const BURNACCURSED: &str = "Burned Accursed"; 40 | pub const DEMONIACCURED: &str = "Demonic Accursed"; 41 | pub const MINER: &str = "Miner"; 42 | pub const MAULEDACCURSED: &str = "Mauled Accursed"; 43 | pub const FIGHTACCURSED: &str = "Fight Club Accursed"; 44 | pub const INFLICTACCURSED: &str = "Inflicted Accursed"; 45 | pub const INFERNALACCURSED: &str = "Infernal Accursed"; 46 | pub const CORRUPTEDACCURSED: &str = "Corrupted Accursed"; 47 | pub const REANIMATEUNDEAD: &str = "Reanimated Undead"; 48 | pub const DWARFOFWAR: &str = "Dwarf of War"; 49 | pub const CULTICACCURSED: &str = "Cultic Accursed"; 50 | pub const ELECTRIFIEDUNDEAD: &str = "Electrified Undead"; 51 | pub const POSSESSEDUNDEAD: &str = "Possessed Undead"; 52 | pub const FULLMOON: &str = "Full Moon"; 53 | pub const MUSTARDSKULL: &str = "Mustard Skull Accursed"; 54 | pub const CADAVEROUSUN: &str = "Cadaverous Undead"; 55 | pub const UMBERSKULL: &str = "Umber Skull Accursed"; 56 | pub const IVORYSKULL: &str = "Ivory Skull Accursed"; 57 | pub const HALFMOONGR: &str = "Half Moon Grey"; 58 | pub const AUQASKULL: &str = "Aqua Skull Accursed"; 59 | pub const HALFMOON: &str = "Half Moon"; 60 | pub const GAMETIME: &str = "Gametime"; 61 | pub const BLOODIED: &str = "Bloodied"; 62 | pub const ACCURSED: &str = "Accursed"; 63 | pub const NEUTRAL: &str = "Neutral"; 64 | 65 | // "Occupation": { 66 | pub const HIGHKING: &str = "High King"; 67 | pub const KING: &str = "King"; 68 | pub const KINGGUARD: &str = "King's Guards"; 69 | 70 | // "Season": { 71 | pub const ONE: &str = "1"; 72 | pub const TWO: &str = "2"; 73 | // "Gemstone": { 74 | pub const DIAMOND: &str = "Diamond"; 75 | pub const LAPISLAZULI: &str = "Lapis Lazuli"; 76 | pub const RUBY: &str = "Ruby"; 77 | pub const OBSIDIAN: &str = "Obsidian"; 78 | pub const EMERALD: &str = "Emerald"; 79 | pub const FLOURITE: &str = "Flourite"; 80 | pub const AMETHYST: &str = "Amethyst"; 81 | -------------------------------------------------------------------------------- /dwarves_staking/programs/dwarves_staking/src/account.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | use crate::constants::*; 4 | use crate::error::*; 5 | 6 | #[account] 7 | #[derive(Default)] 8 | pub struct GlobalPool { 9 | pub lottery_nft_count: u64, // 8 10 | pub fixed_nft_count: u64, // 8 11 | } 12 | 13 | #[zero_copy] 14 | #[derive(Default)] 15 | pub struct Item { 16 | // 72 17 | pub owner: Pubkey, // 32 18 | pub nft_addr: Pubkey, // 32 19 | pub stake_time: i64, // 8 20 | } 21 | 22 | #[zero_copy] 23 | #[derive(Default, PartialEq)] 24 | pub struct StakedNFT { 25 | pub nft_addr: Pubkey, // 32 26 | pub stake_time: i64, // 8 27 | pub rate: i64, // 8 28 | } 29 | 30 | #[account(zero_copy)] 31 | pub struct UserPool { 32 | // 2464 33 | pub owner: Pubkey, // 32 34 | pub item_count: u64, // 8 35 | pub items: [StakedNFT; NFT_STAKE_MAX_COUNT], // 48 * 50 = 2400 36 | pub reward_time: i64, // 8 37 | pub pending_reward: i64, // 8 38 | } 39 | impl Default for UserPool { 40 | #[inline] 41 | fn default() -> UserPool { 42 | UserPool { 43 | owner: Pubkey::default(), 44 | item_count: 0, 45 | items: [StakedNFT { 46 | ..Default::default() 47 | }; NFT_STAKE_MAX_COUNT], 48 | reward_time: 0, 49 | pending_reward: 0, 50 | } 51 | } 52 | } 53 | 54 | impl UserPool { 55 | pub fn add_nft(&mut self, item: StakedNFT) { 56 | self.items[self.item_count as usize] = item; 57 | self.item_count += 1; 58 | } 59 | pub fn remove_nft(&mut self, owner: Pubkey, nft_mint: Pubkey, now: i64) -> Result { 60 | require!(self.owner.eq(&owner), StakingError::InvalidOwner); 61 | let mut withdrawn: u8 = 0; 62 | let mut reward: i64 = 0; 63 | for i in 0..self.item_count { 64 | let index = i as usize; 65 | if self.items[index].nft_addr.eq(&nft_mint) { 66 | //require!(self.items[index].stake_time + LIMIT_PERIOD <= now, StakingError::InvalidWithdrawTime); 67 | let mut last_reward_time = self.reward_time; 68 | if last_reward_time < self.items[index].stake_time { 69 | last_reward_time = self.items[index].stake_time; 70 | } 71 | let accrate: i64 = self.items[index].rate; 72 | 73 | let reward = ((now / DAY as i64) - (last_reward_time / DAY as i64)) 74 | * REWARD_PER_DAY 75 | * accrate; 76 | // remove nft 77 | if i != self.item_count - 1 { 78 | let last_idx = self.item_count - 1; 79 | self.items[index] = self.items[last_idx as usize]; 80 | } 81 | self.item_count -= 1; 82 | withdrawn = 1; 83 | break; 84 | } 85 | } 86 | require!(withdrawn == 1, StakingError::InvalidNFTAddress); 87 | Ok(reward) 88 | } 89 | pub fn claim_reward(&mut self, now: i64) -> Result { 90 | let mut total_reward: i64 = 0; 91 | for i in 0..self.item_count { 92 | let index = i as usize; 93 | //require!(self.items[index].stake_time + LIMIT_PERIOD <= now, StakingError::InvalidWithdrawTime); 94 | let mut last_reward_time = self.reward_time; 95 | if last_reward_time < self.items[index].stake_time { 96 | last_reward_time = self.items[index].stake_time; 97 | } 98 | let accrate: i64 = self.items[index].rate; 99 | 100 | // let reward = 101 | // ((now / DAY as i64) - (last_reward_time / DAY as i64)) * REWARD_PER_DAY * accrate; 102 | let reward = ((now - last_reward_time)/DAY as i64) * REWARD_PER_DAY * accrate; 103 | total_reward += reward; 104 | } 105 | total_reward += self.pending_reward; 106 | self.pending_reward = 0; 107 | self.reward_time = now; 108 | Ok(total_reward) 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Solana NFT Staking Smart Contract 2 | Solana nft staking smart contract for Kingdom of Dwarves NFT collections 3 | #### If you have any question about it, feel free to reach out of me[Whatsapp: https://wa.me/13137423660, Telegram: https://t.me/DevCutup]. 4 | 5 | ## Install Dependencies 6 | - Install `node` and `yarn` 7 | - Install `ts-node` as global command 8 | - Confirm the solana wallet preparation: `/home/fury/.config/solana/id.json` in test case 9 | 10 | ## Usage 11 | - Main script source for all functionality is here: `/cli/script.ts` 12 | - Program account types are declared here: `/cli/types.ts` 13 | - Idl to make the JS binding easy is here: `/cli/staking_program.json` 14 | 15 | Able to test the script functions working in this way. 16 | - Change commands properly in the main functions of the `script.ts` file to call the other functions 17 | - Confirm the `ANCHOR_WALLET` environment variable of the `ts-node` script in `package.json` 18 | - Run `yarn ts-node` 19 | 20 | ## Features 21 | 22 | ### As a Smart Contract Owner 23 | For the first time use, the Smart Contract Owner should `initialize` the Smart Contract for global account allocation. 24 | - `initProject` 25 | 26 | Recall `initialize` function for update the Threshold values after change the constants properly 27 | - `initProject` 28 | 29 | Maintain the Reward token($KCROWN) vault's balance 30 | - `REWARD_TOKEN_MINT` is the reward token mint (for test). 31 | - `rewardVault` is the reward token account for owner. The owner should have the token's `Mint Authority` or should `Fund` regularly. 32 | 33 | This is current test value. Should be revised properly. 34 | - `EPOCH` = 60 // A day 35 | - `REWARD_PER_DAY` = 100_000_000 // 0.1 $KCROWN 36 | According to the rank of NFTs, there reward amount will be changed automatically following the below logic. 37 | 38 | { 39 | "Dwarf": { 40 | "The Dark Lord": 2.3, 41 | "Emerald Underlord": 2.2, 42 | "Irish Archer": 2, 43 | "Invisible": 2, 44 | "Fluorite Underlord": 2.2, 45 | "Lapis Underlord": 2.2, 46 | "Ruby Underlord": 2.2, 47 | "Hellbender": 2, 48 | "Airbender": 2, 49 | "Palpatine": 2, 50 | "Avatar": 2, 51 | "Jack Skellington": 2, 52 | "England": 2, 53 | "Mouse": 2, 54 | "Pepe": 2, 55 | "Reanimated Undead Fiend": 1.5, 56 | "Cadaverous Undead Wraith": 1.5, 57 | "Reanimated Undead Wraith": 1.4, 58 | "Possessed Undead Wraith": 1.4, 59 | "Electrified Undead Fiend": 1.35, 60 | "Electrified Undead Wraith": 1.35, 61 | "Possessed Undead Fiend": 1.3, 62 | "Cadaverous Undead Fiend": 1.3, 63 | "Burned Accursed": 1.25, 64 | "Demonic Accursed": 1.25, 65 | "Miner": 1.42, 66 | "Mauled Accursed": 1.23, 67 | "Fight Club Accursed": 1.22, 68 | "Inflicted Accursed": 1.22, 69 | "Infernal Accursed": 1.21, 70 | "Corrupted Accursed": 1.21, 71 | "Reanimated Undead": 1.2, 72 | "Dwarf of War": 1.35, 73 | "Cultic Accursed": 1.22, 74 | "Electrified Undead": 1.2, 75 | "Possessed Undead": 1.2, 76 | "Full Moon": 1.33, 77 | "Mustard Skull Accursed": 1.23, 78 | "Cadaverous Undead": 1.22, 79 | "Umber Skull Accursed": 1.15, 80 | "Ivory Skull Accursed": 1.15, 81 | "Half Moon Grey": 1.26, 82 | "Aqua Skull Accursed": 1.1, 83 | "Half Moon": 1.15, 84 | "Gametime": 1.07, 85 | "Bloodied": 1.07, 86 | "Accursed": 1.05, 87 | "Neutral": 1 88 | }, 89 | "Occupation": { 90 | "High King": 2.5, 91 | "King": 2.2, 92 | "King's Guards": 1 93 | }, 94 | "Season": { 95 | "1": 1.08, 96 | "2": 1.07 97 | }, 98 | "Gemstone": { 99 | "Diamond": 1.1, 100 | "Lapis Lazuli": 1.06, 101 | "Ruby": 1.05, 102 | "Obsidian": 1.07, 103 | "Emerald": 1.04, 104 | "Flourite": 1.03, 105 | "Amethyst": 1.01 106 | }, 107 | } 108 | 109 | ### As a NFT Holder 110 | Stake Shred Collection NFTs with NFT `mint address` and a boolean parameter weather the NFT is Legendary NFT. 111 | - `stakeNft` 112 | 113 | ### As a Staker 114 | Unstake their staked NFTs with `mint address` and get rewards. ( Calculate generated reward by this NFT too ) 115 | - `withdrawNft` 116 | 117 | Claim reward to receive generated $KCROWN from their staking. 118 | - `claimReward` 119 | 120 | ### Contact Information 121 | - Telegram: https://t.me/DevCutup 122 | - Whatsapp: https://wa.me/13137423660 123 | - Twitter: https://x.com/devcutup 124 | -------------------------------------------------------------------------------- /dwarves_staking/cli/staking_program.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | "name": "staking_program", 4 | "instructions": [ 5 | { 6 | "name": "initialize", 7 | "accounts": [ 8 | { 9 | "name": "admin", 10 | "isMut": true, 11 | "isSigner": true 12 | }, 13 | { 14 | "name": "globalAuthority", 15 | "isMut": true, 16 | "isSigner": false 17 | }, 18 | { 19 | "name": "rewardVault", 20 | "isMut": true, 21 | "isSigner": false 22 | }, 23 | { 24 | "name": "systemProgram", 25 | "isMut": false, 26 | "isSigner": false 27 | }, 28 | { 29 | "name": "rent", 30 | "isMut": false, 31 | "isSigner": false 32 | } 33 | ], 34 | "args": [ 35 | { 36 | "name": "globalBump", 37 | "type": "u8" 38 | } 39 | ] 40 | }, 41 | { 42 | "name": "initializeFixedPool", 43 | "accounts": [ 44 | { 45 | "name": "userFixedPool", 46 | "isMut": true, 47 | "isSigner": false 48 | }, 49 | { 50 | "name": "owner", 51 | "isMut": true, 52 | "isSigner": true 53 | } 54 | ], 55 | "args": [] 56 | }, 57 | { 58 | "name": "stakeNftToFixed", 59 | "accounts": [ 60 | { 61 | "name": "owner", 62 | "isMut": true, 63 | "isSigner": true 64 | }, 65 | { 66 | "name": "userFixedPool", 67 | "isMut": true, 68 | "isSigner": false 69 | }, 70 | { 71 | "name": "globalAuthority", 72 | "isMut": true, 73 | "isSigner": false 74 | }, 75 | { 76 | "name": "userTokenAccount", 77 | "isMut": true, 78 | "isSigner": false 79 | }, 80 | { 81 | "name": "destNftTokenAccount", 82 | "isMut": true, 83 | "isSigner": false 84 | }, 85 | { 86 | "name": "nftMint", 87 | "isMut": false, 88 | "isSigner": false 89 | }, 90 | { 91 | "name": "tokenProgram", 92 | "isMut": false, 93 | "isSigner": false 94 | } 95 | ], 96 | "args": [ 97 | { 98 | "name": "globalBump", 99 | "type": "u8" 100 | }, 101 | { 102 | "name": "dwarf", 103 | "type": "string" 104 | }, 105 | { 106 | "name": "occupation", 107 | "type": "string" 108 | }, 109 | { 110 | "name": "season", 111 | "type": "string" 112 | }, 113 | { 114 | "name": "gemstone", 115 | "type": "string" 116 | } 117 | ] 118 | }, 119 | { 120 | "name": "withdrawNftFromFixed", 121 | "accounts": [ 122 | { 123 | "name": "owner", 124 | "isMut": true, 125 | "isSigner": true 126 | }, 127 | { 128 | "name": "userFixedPool", 129 | "isMut": true, 130 | "isSigner": false 131 | }, 132 | { 133 | "name": "globalAuthority", 134 | "isMut": true, 135 | "isSigner": false 136 | }, 137 | { 138 | "name": "userTokenAccount", 139 | "isMut": true, 140 | "isSigner": false 141 | }, 142 | { 143 | "name": "destNftTokenAccount", 144 | "isMut": true, 145 | "isSigner": false 146 | }, 147 | { 148 | "name": "nftMint", 149 | "isMut": false, 150 | "isSigner": false 151 | }, 152 | { 153 | "name": "tokenProgram", 154 | "isMut": false, 155 | "isSigner": false 156 | } 157 | ], 158 | "args": [ 159 | { 160 | "name": "globalBump", 161 | "type": "u8" 162 | } 163 | ] 164 | }, 165 | { 166 | "name": "claimReward", 167 | "accounts": [ 168 | { 169 | "name": "owner", 170 | "isMut": true, 171 | "isSigner": true 172 | }, 173 | { 174 | "name": "userFixedPool", 175 | "isMut": true, 176 | "isSigner": false 177 | }, 178 | { 179 | "name": "globalAuthority", 180 | "isMut": true, 181 | "isSigner": false 182 | }, 183 | { 184 | "name": "rewardVault", 185 | "isMut": true, 186 | "isSigner": false 187 | }, 188 | { 189 | "name": "userRewardAccount", 190 | "isMut": true, 191 | "isSigner": false 192 | }, 193 | { 194 | "name": "tokenProgram", 195 | "isMut": false, 196 | "isSigner": false 197 | } 198 | ], 199 | "args": [ 200 | { 201 | "name": "globalBump", 202 | "type": "u8" 203 | } 204 | ] 205 | } 206 | ], 207 | "accounts": [ 208 | { 209 | "name": "GlobalPool", 210 | "type": { 211 | "kind": "struct", 212 | "fields": [ 213 | { 214 | "name": "lotteryNftCount", 215 | "type": "u64" 216 | }, 217 | { 218 | "name": "fixedNftCount", 219 | "type": "u64" 220 | } 221 | ] 222 | } 223 | }, 224 | { 225 | "name": "UserPool", 226 | "type": { 227 | "kind": "struct", 228 | "fields": [ 229 | { 230 | "name": "owner", 231 | "type": "publicKey" 232 | }, 233 | { 234 | "name": "itemCount", 235 | "type": "u64" 236 | }, 237 | { 238 | "name": "items", 239 | "type": { 240 | "array": [ 241 | { 242 | "defined": "StakedNFT" 243 | }, 244 | 50 245 | ] 246 | } 247 | }, 248 | { 249 | "name": "rewardTime", 250 | "type": "i64" 251 | }, 252 | { 253 | "name": "pendingReward", 254 | "type": "i64" 255 | } 256 | ] 257 | } 258 | } 259 | ], 260 | "types": [ 261 | { 262 | "name": "Item", 263 | "type": { 264 | "kind": "struct", 265 | "fields": [ 266 | { 267 | "name": "owner", 268 | "type": "publicKey" 269 | }, 270 | { 271 | "name": "nftAddr", 272 | "type": "publicKey" 273 | }, 274 | { 275 | "name": "stakeTime", 276 | "type": "i64" 277 | } 278 | ] 279 | } 280 | }, 281 | { 282 | "name": "StakedNFT", 283 | "type": { 284 | "kind": "struct", 285 | "fields": [ 286 | { 287 | "name": "nftAddr", 288 | "type": "publicKey" 289 | }, 290 | { 291 | "name": "stakeTime", 292 | "type": "i64" 293 | }, 294 | { 295 | "name": "rate", 296 | "type": "i64" 297 | } 298 | ] 299 | } 300 | } 301 | ], 302 | "errors": [ 303 | { 304 | "code": 6000, 305 | "name": "InvalidUserPool", 306 | "msg": "Invalid User Pool" 307 | }, 308 | { 309 | "code": 6001, 310 | "name": "InvalidPoolError", 311 | "msg": "Invalid pool number" 312 | }, 313 | { 314 | "code": 6002, 315 | "name": "InvalidNFTAddress", 316 | "msg": "No Matching NFT to withdraw" 317 | }, 318 | { 319 | "code": 6003, 320 | "name": "InvalidOwner", 321 | "msg": "NFT Owner key mismatch" 322 | }, 323 | { 324 | "code": 6004, 325 | "name": "InvalidWithdrawTime", 326 | "msg": "Staking Locked Now" 327 | }, 328 | { 329 | "code": 6005, 330 | "name": "IndexOverflow", 331 | "msg": "Withdraw NFT Index OverFlow" 332 | }, 333 | { 334 | "code": 6006, 335 | "name": "LackLamports", 336 | "msg": "Insufficient Lamports" 337 | } 338 | ] 339 | } -------------------------------------------------------------------------------- /dwarves_staking/tests/dwarves_staking.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from '@project-serum/anchor'; 2 | import { Program } from '@project-serum/anchor'; 3 | import { StakingProgram } from '../target/types/staking_program'; 4 | import { SystemProgram, SYSVAR_RENT_PUBKEY } from "@solana/web3.js"; 5 | 6 | import { Token, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from "@solana/spl-token"; 7 | import bs58 from 'bs58'; 8 | 9 | const PublicKey = anchor.web3.PublicKey; 10 | const BN = anchor.BN; 11 | const assert = require("assert"); 12 | 13 | const GLOBAL_AUTHORITY_SEED = "global-authority"; 14 | const POOL_WALLET_SEED = "pool-wallet"; 15 | const USER_POOL_SIZE = 2464; 16 | 17 | describe('staking_program', () => { 18 | 19 | // Configure the client to use the local cluster. 20 | const provider = anchor.Provider.env(); 21 | anchor.setProvider(provider); 22 | 23 | const program = anchor.workspace.StakingProgram as Program; 24 | const superOwner = anchor.web3.Keypair.generate(); 25 | const user = anchor.web3.Keypair.generate(); 26 | const lotteryPool = anchor.web3.Keypair.generate(); 27 | const fixedPool = anchor.web3.Keypair.generate(); 28 | const REWARD_TOKEN_MINT = new PublicKey("8EoML7gaBJsgJtepm25wq3GuUCqLYHBoqd3HP1JxtyBx"); 29 | 30 | 31 | const USER_POOL_SIZE = 2464; 32 | const GLOBAL_POOL_SIZE = 360_016; 33 | 34 | let nft_token_mint = null; 35 | let userTokenAccount = null; 36 | 37 | let globalLotteryPoolKey = anchor.web3.Keypair.generate(); 38 | 39 | // let rewardAccount = anchor.web3.Keypair.generate(); 40 | // let reward = anchor.web3.Keypair.generate(); 41 | 42 | const reward = anchor.web3.Keypair.fromSecretKey(new Uint8Array([154, 43, 74, 184, 192, 57, 192, 123, 59, 172, 107, 58, 107, 47, 129, 73, 187, 15, 160, 217, 13, 135, 47, 181, 246, 63, 94, 26, 245, 108, 183, 36, 107, 138, 196, 135, 102, 88, 153, 43, 141, 165, 202, 167, 48, 225, 231, 113, 123, 61, 176, 248, 90, 204, 240, 109, 165, 204, 141, 5, 100, 184, 81, 99])); 43 | 44 | console.log('Reward Token: ', reward.publicKey.toBase58()); 45 | const rewardToken = new Token( 46 | provider.connection, 47 | REWARD_TOKEN_MINT, 48 | TOKEN_PROGRAM_ID, 49 | superOwner, 50 | ) 51 | 52 | 53 | it('Is initialized!', async () => { 54 | // Add your test here. 55 | await provider.connection.confirmTransaction( 56 | await provider.connection.requestAirdrop(superOwner.publicKey, 9000000000), 57 | "confirmed" 58 | ); 59 | await provider.connection.confirmTransaction( 60 | await provider.connection.requestAirdrop(user.publicKey, 9000000000), 61 | "confirmed" 62 | ); 63 | 64 | console.log("super owner =", superOwner.publicKey.toBase58()); 65 | console.log("user =", user.publicKey.toBase58()); 66 | 67 | nft_token_mint = await Token.createMint( 68 | provider.connection, 69 | user, 70 | superOwner.publicKey, 71 | null, 72 | 0, 73 | TOKEN_PROGRAM_ID 74 | ); 75 | userTokenAccount = await nft_token_mint.createAccount(user.publicKey); 76 | 77 | await nft_token_mint.mintTo( 78 | userTokenAccount, 79 | superOwner, 80 | [], 81 | 1 82 | ); 83 | 84 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 85 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 86 | program.programId 87 | ); 88 | 89 | console.log("globalAuthority =", globalAuthority.toBase58()); 90 | 91 | const [poolWalletKey, walletBump] = await PublicKey.findProgramAddress( 92 | [Buffer.from(POOL_WALLET_SEED)], 93 | program.programId 94 | ); 95 | await provider.connection.confirmTransaction( 96 | await provider.connection.requestAirdrop(poolWalletKey, 1000000000), 97 | "confirmed" 98 | ); 99 | console.log("poolWalletKey =", poolWalletKey.toBase58()); 100 | 101 | let ix = SystemProgram.createAccount({ 102 | fromPubkey: superOwner.publicKey, 103 | newAccountPubkey: globalLotteryPoolKey.publicKey, 104 | lamports: await provider.connection.getMinimumBalanceForRentExemption(GLOBAL_POOL_SIZE), 105 | space: GLOBAL_POOL_SIZE, 106 | programId: program.programId, 107 | }) 108 | 109 | console.log("globalLotteryPoolKey =", globalLotteryPoolKey.publicKey.toBase58()) 110 | 111 | const tx = await program.rpc.initialize( 112 | bump, { 113 | accounts: { 114 | admin: superOwner.publicKey, 115 | globalAuthority, 116 | poolWallet: poolWalletKey, 117 | systemProgram: SystemProgram.programId, 118 | rent: SYSVAR_RENT_PUBKEY 119 | }, 120 | instructions: [ix], 121 | signers: [superOwner, globalLotteryPoolKey] 122 | } 123 | ); 124 | 125 | console.log("Your transaction signature", tx); 126 | }); 127 | 128 | it('initialize fixed pool', async () => { 129 | 130 | let userFixedPoolKey = await PublicKey.createWithSeed( 131 | user.publicKey, 132 | "user-fixed-pool", 133 | program.programId, 134 | ); 135 | 136 | let ix = SystemProgram.createAccountWithSeed({ 137 | fromPubkey: user.publicKey, 138 | basePubkey: user.publicKey, 139 | seed: "user-fixed-pool", 140 | newAccountPubkey: userFixedPoolKey, 141 | lamports: await provider.connection.getMinimumBalanceForRentExemption(USER_POOL_SIZE), 142 | space: USER_POOL_SIZE, 143 | programId: program.programId, 144 | }); 145 | console.log("userFixedPool.pubk =", userFixedPoolKey.toBase58()) 146 | const tx = await program.rpc.initializeFixedPool( 147 | { 148 | accounts: { 149 | userFixedPool: userFixedPoolKey, 150 | owner: user.publicKey 151 | }, 152 | instructions: [ 153 | ix 154 | ], 155 | signers: [user] 156 | } 157 | ); 158 | 159 | console.log("Your transaction signature", tx); 160 | }) 161 | 162 | it("Stake Nft To Fixed", async () => { 163 | 164 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 165 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 166 | program.programId 167 | ); 168 | 169 | console.log("globalAuthority =", globalAuthority.toBase58()); 170 | 171 | let userFixedPoolKey = await PublicKey.createWithSeed( 172 | user.publicKey, 173 | "user-fixed-pool", 174 | program.programId, 175 | ); 176 | 177 | /*let destNftTokenAccount = await Token.getAssociatedTokenAddress( 178 | ASSOCIATED_TOKEN_PROGRAM_ID, 179 | TOKEN_PROGRAM_ID, 180 | nft_token_mint.publicKey, 181 | user.publicKey 182 | );*/ 183 | 184 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 185 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 186 | program.programId 187 | ); 188 | 189 | //let destNftTokenAccount = await nft_token_mint.createAccount(user.publicKey); 190 | const rank = 100; 191 | const tx = await program.rpc.stakeNftToFixed( 192 | bump, new anchor.BN(rank), { 193 | accounts: { 194 | owner: user.publicKey, 195 | userFixedPool: userFixedPoolKey, 196 | globalAuthority, 197 | userNftTokenAccount: userTokenAccount, 198 | destNftTokenAccount: staked_nft_address, 199 | nftMint: nft_token_mint.publicKey, 200 | tokenProgram: TOKEN_PROGRAM_ID, 201 | associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, 202 | systemProgram: SystemProgram.programId, 203 | rent: SYSVAR_RENT_PUBKEY 204 | }, 205 | signers: [user] 206 | }); 207 | 208 | console.log("Your transaction signature", tx); 209 | 210 | let userFixedPool = await program.account.userPool.fetch(userFixedPoolKey); 211 | console.log("userFixedPool =", userFixedPool.itemCount.toNumber()); 212 | }) 213 | 214 | it("Withdraw Nft From Fixed", async () => { 215 | 216 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 217 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 218 | program.programId 219 | ); 220 | 221 | console.log("globalAuthority =", globalAuthority.toBase58()); 222 | 223 | const [poolWalletKey, walletBump] = await PublicKey.findProgramAddress( 224 | [Buffer.from(POOL_WALLET_SEED)], 225 | program.programId 226 | ); 227 | 228 | console.log("poolWalletKey =", poolWalletKey.toBase58()); 229 | 230 | let userFixedPoolKey = await PublicKey.createWithSeed( 231 | user.publicKey, 232 | "user-fixed-pool", 233 | program.programId, 234 | ); 235 | 236 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 237 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 238 | program.programId 239 | ); 240 | 241 | const tx = await program.rpc.withdrawNftFromFixed( 242 | bump, nft_bump, walletBump, { 243 | accounts: { 244 | owner: user.publicKey, 245 | userFixedPool: userFixedPoolKey, 246 | globalAuthority, 247 | poolWallet: poolWalletKey, 248 | userNftTokenAccount: userTokenAccount, 249 | stakedNftTokenAccount: staked_nft_address, 250 | nftMint: nft_token_mint.publicKey, 251 | tokenProgram: TOKEN_PROGRAM_ID, 252 | associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, 253 | systemProgram: SystemProgram.programId, 254 | rent: SYSVAR_RENT_PUBKEY 255 | }, 256 | signers: [user] 257 | } 258 | ); 259 | 260 | console.log("Your transaction signature", tx); 261 | 262 | let userFixedPool = await program.account.userPool.fetch(userFixedPoolKey); 263 | //console.log("userFixedPool =", userFixedPool); 264 | }) 265 | 266 | it("Claim Reward", async () => { 267 | 268 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 269 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 270 | program.programId 271 | ); 272 | 273 | console.log("globalAuthority =", globalAuthority.toBase58()); 274 | 275 | const [poolWalletKey, walletBump] = await PublicKey.findProgramAddress( 276 | [Buffer.from(POOL_WALLET_SEED)], 277 | program.programId 278 | ); 279 | 280 | console.log("poolWalletKey =", poolWalletKey.toBase58()); 281 | 282 | let userFixedPoolKey = await PublicKey.createWithSeed( 283 | user.publicKey, 284 | "user-fixed-pool", 285 | program.programId, 286 | ); 287 | 288 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 289 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 290 | program.programId 291 | ); 292 | 293 | let userRewardAccount = await rewardToken.createAccount(user.publicKey); 294 | let rewardVault = await rewardToken.createAccount(globalAuthority); 295 | 296 | const tx = await program.rpc.claimReward( 297 | bump, { 298 | accounts: { 299 | owner: user.publicKey, 300 | userFixedPool: userFixedPoolKey, 301 | globalAuthority, 302 | rewardVault: rewardVault, 303 | userRewardAccount: userRewardAccount, 304 | tokenProgram: TOKEN_PROGRAM_ID, 305 | }, 306 | signers: [user] 307 | } 308 | ); 309 | 310 | console.log("Your transaction signature", tx); 311 | 312 | let userFixedPool = await program.account.userPool.fetch(userFixedPoolKey); 313 | //console.log("userFixedPool =", userFixedPool); 314 | }) 315 | }); -------------------------------------------------------------------------------- /dwarves_staking/programs/dwarves_staking/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::{accounts::cpi_account::CpiAccount, prelude::*, AnchorDeserialize}; 2 | use anchor_spl::{ 3 | associated_token::AssociatedToken, 4 | token::{self, Token, TokenAccount, Transfer}, 5 | }; 6 | 7 | pub mod account; 8 | pub mod constants; 9 | pub mod error; 10 | 11 | use account::*; 12 | use constants::*; 13 | use error::*; 14 | 15 | declare_id!("Gz9boUKpghd9Kb1yLcM6uLCa4tHEtGz9ETd3RdUXEpVL"); 16 | 17 | #[program] 18 | pub mod staking_program { 19 | use super::*; 20 | pub fn initialize(ctx: Context, global_bump: u8) -> ProgramResult { 21 | Ok(()) 22 | } 23 | 24 | pub fn initialize_fixed_pool(ctx: Context) -> ProgramResult { 25 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_init()?; 26 | fixed_pool.owner = ctx.accounts.owner.key(); 27 | Ok(()) 28 | } 29 | 30 | #[access_control(user(&ctx.accounts.user_fixed_pool, &ctx.accounts.owner))] 31 | pub fn stake_nft_to_fixed( 32 | ctx: Context, 33 | global_bump: u8, 34 | dwarf: String, 35 | occupation: String, 36 | season: String, 37 | gemstone: String, 38 | ) -> ProgramResult { 39 | let timestamp = Clock::get()?.unix_timestamp; 40 | let mut rate: i64 = 1; 41 | match dwarf.as_str() { 42 | DLORD => rate *= 230, 43 | EULORD => rate *= 220, 44 | IARCH => rate *= 200, 45 | INVI => rate *= 200, 46 | FULORD => rate *= 220, 47 | LULORD => rate *= 220, 48 | RULORD => rate *= 220, 49 | HELLBEND => rate *= 200, 50 | AIRBEND => rate *= 200, 51 | PALPATINE => rate *= 200, 52 | AVATAR => rate *= 200, 53 | JACKSKELL => rate *= 200, 54 | ENGLAND => rate *= 200, 55 | MOUSE => rate *= 200, 56 | PEPE => rate *= 200, 57 | REANIMFIEND => rate *= 150, 58 | CADAVEROUS => rate *= 150, 59 | REANIMWRAITH => rate *= 140, 60 | POSSESSWRAITH => rate *= 140, 61 | ELECTIFIED => rate *= 135, 62 | ELECTIWRAITH => rate *= 135, 63 | POSSESSFIED => rate *= 130, 64 | CADAVEROUSFIED => rate *= 130, 65 | BURNACCURSED => rate *= 125, 66 | DEMONIACCURED => rate *= 125, 67 | MINER => rate *= 142, 68 | MAULEDACCURSED => rate *= 123, 69 | FIGHTACCURSED => rate *= 122, 70 | INFLICTACCURSED => rate *= 122, 71 | INFERNALACCURSED => rate *= 121, 72 | CORRUPTEDACCURSED => rate *= 121, 73 | REANIMATEUNDEAD => rate *= 120, 74 | DWARFOFWAR => rate *= 135, 75 | CULTICACCURSED => rate *= 122, 76 | ELECTRIFIEDUNDEAD => rate *= 120, 77 | POSSESSEDUNDEAD => rate *= 120, 78 | FULLMOON => rate *= 133, 79 | MUSTARDSKULL => rate *= 123, 80 | CADAVEROUSUN => rate *= 122, 81 | UMBERSKULL => rate *= 115, 82 | IVORYSKULL => rate *= 115, 83 | HALFMOONGR => rate *= 126, 84 | AUQASKULL => rate *= 110, 85 | HALFMOON => rate *= 115, 86 | GAMETIME => rate *= 107, 87 | BLOODIED => rate *= 107, 88 | ACCURSED => rate *= 105, 89 | NEUTRAL => rate *= 100, 90 | _ => rate *= 100, 91 | } 92 | match occupation.as_str() { 93 | HIGHKING => rate *= 250, 94 | KING => rate *= 220, 95 | KINGGUARD => rate *= 100, 96 | _ => rate *= 100, 97 | } 98 | match season.as_str() { 99 | ONE => rate *= 108, 100 | TWO => rate *= 107, 101 | _ => rate *= 100, 102 | } 103 | match gemstone.as_str() { 104 | DIAMOND => rate *= 110, 105 | LAPISLAZULI => rate *= 106, 106 | RUBY => rate *= 105, 107 | OBSIDIAN => rate *= 107, 108 | EMERALD => rate *= 104, 109 | FLOURITE => rate *= 103, 110 | AMETHYST => rate *= 101, 111 | _ => rate *= 100, 112 | } 113 | 114 | let staked_item = StakedNFT { 115 | nft_addr: ctx.accounts.nft_mint.key(), 116 | stake_time: timestamp, 117 | rate: rate, 118 | }; 119 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_mut()?; 120 | fixed_pool.add_nft(staked_item); 121 | 122 | ctx.accounts.global_authority.fixed_nft_count += 1; 123 | let token_account_info = &mut &ctx.accounts.user_token_account; 124 | let dest_token_account_info = &mut &ctx.accounts.dest_nft_token_account; 125 | let token_program = &mut &ctx.accounts.token_program; 126 | 127 | let cpi_accounts = Transfer { 128 | from: token_account_info.to_account_info().clone(), 129 | to: dest_token_account_info.to_account_info().clone(), 130 | authority: ctx.accounts.owner.to_account_info().clone(), 131 | }; 132 | token::transfer( 133 | CpiContext::new(token_program.clone().to_account_info(), cpi_accounts), 134 | 1, 135 | )?; 136 | Ok(()) 137 | } 138 | 139 | #[access_control(user(&ctx.accounts.user_fixed_pool, &ctx.accounts.owner))] 140 | pub fn withdraw_nft_from_fixed( 141 | ctx: Context, 142 | global_bump: u8, 143 | ) -> ProgramResult { 144 | let timestamp = Clock::get()?.unix_timestamp; 145 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_mut()?; 146 | let reward: i64 = fixed_pool.remove_nft( 147 | ctx.accounts.owner.key(), 148 | ctx.accounts.nft_mint.key(), 149 | timestamp, 150 | )?; 151 | 152 | fixed_pool.pending_reward += reward; 153 | 154 | ctx.accounts.global_authority.fixed_nft_count -= 1; 155 | 156 | let token_account_info = &mut &ctx.accounts.user_token_account; 157 | let dest_token_account_info = &mut &ctx.accounts.dest_nft_token_account; 158 | let token_program = &mut &ctx.accounts.token_program; 159 | let seeds = &[GLOBAL_AUTHORITY_SEED.as_bytes(), &[global_bump]]; 160 | let signer = &[&seeds[..]]; 161 | 162 | let cpi_accounts = Transfer { 163 | from: dest_token_account_info.to_account_info().clone(), 164 | to: token_account_info.to_account_info().clone(), 165 | authority: ctx.accounts.global_authority.to_account_info(), 166 | }; 167 | token::transfer( 168 | CpiContext::new_with_signer( 169 | token_program.clone().to_account_info(), 170 | cpi_accounts, 171 | signer, 172 | ), 173 | 1, 174 | )?; 175 | Ok(()) 176 | } 177 | 178 | #[access_control(user(&ctx.accounts.user_fixed_pool, &ctx.accounts.owner))] 179 | pub fn claim_reward(ctx: Context, global_bump: u8) -> ProgramResult { 180 | let timestamp = Clock::get()?.unix_timestamp; 181 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_mut()?; 182 | let reward: u64 = fixed_pool.claim_reward(timestamp)? as u64; 183 | msg!("Reward: {}", reward); 184 | if ctx.accounts.reward_vault.amount < 1000_000_000 + reward { 185 | return Err(StakingError::LackLamports.into()); 186 | } 187 | let seeds = &[GLOBAL_AUTHORITY_SEED.as_bytes(), &[global_bump]]; 188 | let signer = &[&seeds[..]]; 189 | let token_program = ctx.accounts.token_program.to_account_info(); 190 | let cpi_accounts = Transfer { 191 | from: ctx.accounts.reward_vault.to_account_info(), 192 | to: ctx.accounts.user_reward_account.to_account_info(), 193 | authority: ctx.accounts.global_authority.to_account_info(), 194 | }; 195 | token::transfer( 196 | CpiContext::new_with_signer(token_program.clone(), cpi_accounts, signer), 197 | reward, 198 | )?; 199 | 200 | Ok(()) 201 | } 202 | } 203 | 204 | #[derive(Accounts)] 205 | #[instruction(global_bump: u8)] 206 | pub struct Initialize<'info> { 207 | #[account(mut)] 208 | pub admin: Signer<'info>, 209 | 210 | #[account( 211 | init_if_needed, 212 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 213 | bump = global_bump, 214 | payer = admin 215 | )] 216 | pub global_authority: Account<'info, GlobalPool>, 217 | 218 | #[account( 219 | mut, 220 | constraint = reward_vault.mint == REWARD_TOKEN_MINT_PUBKEY.parse::().unwrap(), 221 | constraint = reward_vault.owner == global_authority.key(), 222 | constraint = reward_vault.amount >= MIN_REWARD_DEPOSIT_AMOUNT, 223 | )] 224 | pub reward_vault: Account<'info, TokenAccount>, 225 | 226 | pub system_program: Program<'info, System>, 227 | pub rent: Sysvar<'info, Rent>, 228 | } 229 | 230 | #[derive(Accounts)] 231 | pub struct InitializeFixedPool<'info> { 232 | #[account(zero)] 233 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 234 | 235 | #[account(mut)] 236 | pub owner: Signer<'info>, 237 | } 238 | 239 | #[derive(Accounts)] 240 | #[instruction(global_bump: u8)] 241 | pub struct StakeNftToFixed<'info> { 242 | #[account(mut)] 243 | pub owner: Signer<'info>, 244 | 245 | #[account(mut)] 246 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 247 | 248 | #[account( 249 | mut, 250 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 251 | bump = global_bump, 252 | )] 253 | pub global_authority: Account<'info, GlobalPool>, 254 | #[account( 255 | mut, 256 | constraint = user_token_account.mint == *nft_mint.to_account_info().key, 257 | constraint = user_token_account.owner == *owner.key, 258 | constraint = user_token_account.amount == 1, 259 | )] 260 | pub user_token_account: CpiAccount<'info, TokenAccount>, 261 | 262 | #[account( 263 | mut, 264 | constraint = dest_nft_token_account.mint == *nft_mint.to_account_info().key, 265 | constraint = dest_nft_token_account.owner == *global_authority.to_account_info().key, 266 | )] 267 | pub dest_nft_token_account: CpiAccount<'info, TokenAccount>, 268 | 269 | pub nft_mint: AccountInfo<'info>, 270 | pub token_program: Program<'info, Token>, 271 | } 272 | 273 | #[derive(Accounts)] 274 | #[instruction(global_bump: u8)] 275 | pub struct WithdrawNftFromFixed<'info> { 276 | #[account(mut)] 277 | pub owner: Signer<'info>, 278 | 279 | #[account(mut)] 280 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 281 | 282 | #[account( 283 | mut, 284 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 285 | bump = global_bump, 286 | )] 287 | pub global_authority: Account<'info, GlobalPool>, 288 | 289 | #[account( 290 | mut, 291 | constraint = user_token_account.mint == *nft_mint.to_account_info().key, 292 | constraint = user_token_account.owner == *owner.key, 293 | )] 294 | pub user_token_account: CpiAccount<'info, TokenAccount>, 295 | #[account( 296 | mut, 297 | constraint = dest_nft_token_account.mint == *nft_mint.to_account_info().key, 298 | constraint = dest_nft_token_account.owner == *global_authority.to_account_info().key, 299 | constraint = dest_nft_token_account.amount == 1, 300 | )] 301 | pub dest_nft_token_account: CpiAccount<'info, TokenAccount>, 302 | 303 | pub nft_mint: AccountInfo<'info>, 304 | pub token_program: Program<'info, Token>, 305 | } 306 | 307 | #[derive(Accounts)] 308 | #[instruction(global_bump: u8)] 309 | pub struct ClaimReward<'info> { 310 | #[account(mut)] 311 | pub owner: Signer<'info>, 312 | 313 | #[account(mut)] 314 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 315 | 316 | #[account( 317 | mut, 318 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 319 | bump = global_bump, 320 | )] 321 | pub global_authority: Account<'info, GlobalPool>, 322 | 323 | #[account( 324 | mut, 325 | constraint = reward_vault.mint == REWARD_TOKEN_MINT_PUBKEY.parse::().unwrap(), 326 | constraint = reward_vault.owner == global_authority.key(), 327 | )] 328 | pub reward_vault: Box>, 329 | 330 | #[account( 331 | mut, 332 | constraint = user_reward_account.mint == REWARD_TOKEN_MINT_PUBKEY.parse::().unwrap(), 333 | constraint = user_reward_account.owner == owner.key(), 334 | )] 335 | pub user_reward_account: Account<'info, TokenAccount>, 336 | 337 | pub token_program: Program<'info, Token>, 338 | } 339 | 340 | // Access control modifiers 341 | fn user(pool_loader: &AccountLoader, user: &AccountInfo) -> Result<()> { 342 | let user_pool = pool_loader.load()?; 343 | require!(user_pool.owner == *user.key, StakingError::InvalidUserPool); 344 | Ok(()) 345 | } 346 | -------------------------------------------------------------------------------- /dwarves_staking/cli/script.ts: -------------------------------------------------------------------------------- 1 | import { Program, web3 } from '@project-serum/anchor'; 2 | import * as anchor from '@project-serum/anchor'; 3 | import { 4 | Keypair, 5 | PublicKey, 6 | SystemProgram, 7 | SYSVAR_RENT_PUBKEY, 8 | Transaction, 9 | TransactionInstruction, 10 | sendAndConfirmTransaction 11 | } from '@solana/web3.js'; 12 | import { Token, TOKEN_PROGRAM_ID, AccountLayout, MintLayout, ASSOCIATED_TOKEN_PROGRAM_ID } from "@solana/spl-token"; 13 | 14 | import fs from 'fs'; 15 | import { GlobalPool, UserPool } from './types'; 16 | 17 | const USER_POOL_SIZE = 2464; // 8 + 41056 18 | const GLOBAL_AUTHORITY_SEED = "global-authority"; 19 | 20 | const ADMIN_PUBKEY = new PublicKey("Fs8R7R6dP3B7mAJ6QmWZbomBRuTbiJyiR4QYjoxhLdPu"); 21 | const REWARD_TOKEN_MINT = new PublicKey("8EoML7gaBJsgJtepm25wq3GuUCqLYHBoqd3HP1JxtyBx"); 22 | const PROGRAM_ID = "Gz9boUKpghd9Kb1yLcM6uLCa4tHEtGz9ETd3RdUXEpVL"; 23 | 24 | anchor.setProvider(anchor.Provider.local(web3.clusterApiUrl("devnet"))); 25 | const solConnection = anchor.getProvider().connection; 26 | const payer = anchor.getProvider().wallet; 27 | 28 | let rewardVault: PublicKey = null; 29 | let program: Program = null; 30 | const idl = JSON.parse( 31 | fs.readFileSync(__dirname + "/staking_program.json", "utf8") 32 | ); 33 | 34 | // Address of the deployed program. 35 | const programId = new anchor.web3.PublicKey(PROGRAM_ID); 36 | 37 | // Generate the program client from IDL. 38 | program = new anchor.Program(idl, programId); 39 | console.log('ProgramId: ', program.programId.toBase58()); 40 | 41 | const main = async () => { 42 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 43 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 44 | program.programId 45 | ); 46 | console.log('GlobalAuthority: ', globalAuthority.toBase58()); 47 | 48 | rewardVault = await getAssociatedTokenAccount(globalAuthority, REWARD_TOKEN_MINT); 49 | console.log('RewardVault: ', rewardVault.toBase58()); 50 | console.log(await solConnection.getTokenAccountBalance(rewardVault)); 51 | 52 | // await initProject(); 53 | 54 | const globalPool: GlobalPool = await getGlobalState(); 55 | console.log("globalPool =", globalPool.fixedNftCount.toNumber()); 56 | 57 | // await initUserPool(payer.publicKey); 58 | 59 | // await stakeNft(payer.publicKey, new PublicKey('3vPAcP2gu1eFLENdW6YNGvmDENuLUM9Jd1yoBrS9fjwt'), "Avatar", "High King", "1", "Diamond"); 60 | // await stakeNft(payer.publicKey, new PublicKey('FvVKssmkvAxTh1P9WLtoiCQExss4rpmt3ddqiap4eK3r'), false); 61 | // await withdrawNft(payer.publicKey, new PublicKey('D79yrn3PaNqjdJgV8HrVeBR35EuK2LTFS637psei5fW1')); 62 | await withdrawNft(payer.publicKey, new PublicKey('3vPAcP2gu1eFLENdW6YNGvmDENuLUM9Jd1yoBrS9fjwt')); 63 | // await claimReward(payer.publicKey); 64 | 65 | // const userPool: UserPool = await getUserPoolState(payer.publicKey); 66 | // console.log({ 67 | // // ...userPool, 68 | // owner: userPool.owner.toBase58(), 69 | // stakedMints: userPool.items.slice(0, userPool.itemCount.toNumber()).map((info) => { 70 | // return { 71 | // // ...info, 72 | // mint: info.nftAddr.toBase58(), 73 | // stakedTime: info.stakeTime.toNumber(), 74 | // rank: info.rate.toNumber(), 75 | // } 76 | // }), 77 | // stakedCount: userPool.itemCount.toNumber(), 78 | // pendingReward: userPool.pendingReward.toNumber(), 79 | // lastRewardTime: (new Date(1000 * userPool.rewardTime.toNumber())).toLocaleString(), 80 | // }); 81 | }; 82 | 83 | export const initProject = async ( 84 | ) => { 85 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 86 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 87 | program.programId 88 | ); 89 | console.log(globalAuthority, "00000000000000000000000"); 90 | const tx = await program.rpc.initialize( 91 | bump, { 92 | accounts: { 93 | admin: payer.publicKey, 94 | globalAuthority, 95 | rewardVault: rewardVault, 96 | systemProgram: SystemProgram.programId, 97 | rent: SYSVAR_RENT_PUBKEY, 98 | }, 99 | signers: [], 100 | }); 101 | await solConnection.confirmTransaction(tx, "confirmed"); 102 | 103 | console.log("txHash =", tx); 104 | return false; 105 | } 106 | 107 | export const initUserPool = async ( 108 | userAddress: PublicKey, 109 | ) => { 110 | let userPoolKey = await PublicKey.createWithSeed( 111 | userAddress, 112 | "user-pool", 113 | program.programId, 114 | ); 115 | 116 | console.log(USER_POOL_SIZE); 117 | let ix = SystemProgram.createAccountWithSeed({ 118 | fromPubkey: userAddress, 119 | basePubkey: userAddress, 120 | seed: "user-pool", 121 | newAccountPubkey: userPoolKey, 122 | lamports: await solConnection.getMinimumBalanceForRentExemption(USER_POOL_SIZE), 123 | space: USER_POOL_SIZE, 124 | programId: program.programId, 125 | }); 126 | 127 | const tx = await program.rpc.initializeFixedPool( 128 | { 129 | accounts: { 130 | userFixedPool: userPoolKey, 131 | owner: userAddress 132 | }, 133 | instructions: [ 134 | ix 135 | ], 136 | signers: [] 137 | } 138 | ); 139 | await solConnection.confirmTransaction(tx, "confirmed"); 140 | 141 | console.log("Your transaction signature", tx); 142 | let poolAccount = await program.account.userPool.fetch(userPoolKey); 143 | console.log('Owner of initialized pool = ', poolAccount.owner.toBase58()); 144 | } 145 | 146 | export const stakeNft = async (userAddress: PublicKey, mint: PublicKey, dwarf: String, occupation: String, season: String, gemstone: String) => { 147 | let userTokenAccount = await getAssociatedTokenAccount(userAddress, mint); 148 | console.log("NFT = ", mint.toBase58(), userTokenAccount.toBase58()); 149 | 150 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 151 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 152 | program.programId 153 | ); 154 | 155 | let { instructions, destinationAccounts } = await getATokenAccountsNeedCreate( 156 | solConnection, 157 | userAddress, 158 | globalAuthority, 159 | [mint] 160 | ); 161 | 162 | console.log("Dest NFT Account = ", destinationAccounts[0].toBase58()) 163 | let userPoolKey = await PublicKey.createWithSeed( 164 | userAddress, 165 | "user-pool", 166 | program.programId, 167 | ); 168 | 169 | let poolAccount = await solConnection.getAccountInfo(userPoolKey); 170 | console.log(poolAccount); 171 | if (poolAccount === null || poolAccount.data === null) { 172 | await initUserPool(userAddress); 173 | } 174 | 175 | const tx = await program.rpc.stakeNftToFixed( 176 | bump, dwarf, occupation, season, gemstone, { 177 | accounts: { 178 | owner: userAddress, 179 | userFixedPool: userPoolKey, 180 | globalAuthority, 181 | userTokenAccount, 182 | destNftTokenAccount: destinationAccounts[0], 183 | nftMint: mint, 184 | tokenProgram: TOKEN_PROGRAM_ID, 185 | }, 186 | instructions: [ 187 | ...instructions, 188 | ], 189 | signers: [], 190 | } 191 | ); 192 | await solConnection.confirmTransaction(tx, "singleGossip"); 193 | 194 | } 195 | 196 | export const withdrawNft = async (userAddress: PublicKey, mint: PublicKey) => { 197 | let userTokenAccount = await getAssociatedTokenAccount(userAddress, mint); 198 | console.log("NFT = ", mint.toBase58(), userTokenAccount.toBase58()); 199 | 200 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 201 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 202 | program.programId 203 | ); 204 | 205 | let { instructions, destinationAccounts } = await getATokenAccountsNeedCreate( 206 | solConnection, 207 | userAddress, 208 | globalAuthority, 209 | [mint] 210 | ); 211 | 212 | console.log("Dest NFT Account = ", destinationAccounts[0].toBase58()); 213 | 214 | let userPoolKey = await PublicKey.createWithSeed( 215 | userAddress, 216 | "user-pool", 217 | program.programId, 218 | ); 219 | 220 | const tx = await program.rpc.withdrawNftFromFixed( 221 | bump, { 222 | accounts: { 223 | owner: userAddress, 224 | userFixedPool: userPoolKey, 225 | globalAuthority, 226 | userTokenAccount, 227 | destNftTokenAccount: destinationAccounts[0], 228 | nftMint: mint, 229 | tokenProgram: TOKEN_PROGRAM_ID, 230 | }, 231 | instructions: [ 232 | ], 233 | signers: [], 234 | } 235 | ); 236 | await solConnection.confirmTransaction(tx, "singleGossip"); 237 | } 238 | 239 | export const claimReward = async (userAddress: PublicKey) => { 240 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 241 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 242 | program.programId 243 | ); 244 | 245 | console.log("globalAuthority =", globalAuthority.toBase58()); 246 | 247 | let userPoolKey = await PublicKey.createWithSeed( 248 | userAddress, 249 | "user-pool", 250 | program.programId, 251 | ); 252 | 253 | let { instructions, destinationAccounts } = await getATokenAccountsNeedCreate( 254 | solConnection, 255 | userAddress, 256 | userAddress, 257 | [REWARD_TOKEN_MINT] 258 | ); 259 | 260 | console.log("Dest NFT Account = ", destinationAccounts[0].toBase58()); 261 | console.log(await solConnection.getTokenAccountBalance(destinationAccounts[0])); 262 | 263 | const tx = await program.rpc.claimReward( 264 | bump, { 265 | accounts: { 266 | owner: userAddress, 267 | userFixedPool: userPoolKey, 268 | globalAuthority, 269 | rewardVault, 270 | userRewardAccount: destinationAccounts[0], 271 | tokenProgram: TOKEN_PROGRAM_ID, 272 | }, 273 | instructions: [ 274 | ...instructions, 275 | ], 276 | signers: [] 277 | } 278 | ); 279 | 280 | console.log("Your transaction signature", tx); 281 | await solConnection.confirmTransaction(tx, "singleGossip"); 282 | 283 | console.log(await solConnection.getTokenAccountBalance(destinationAccounts[0])); 284 | } 285 | 286 | export const getGlobalState = async ( 287 | ): Promise => { 288 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 289 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 290 | program.programId 291 | ); 292 | try { 293 | let globalState = await program.account.globalPool.fetch(globalAuthority); 294 | return globalState as GlobalPool; 295 | } catch { 296 | return null; 297 | } 298 | } 299 | 300 | export const getUserPoolState = async ( 301 | userAddress: PublicKey 302 | ): Promise => { 303 | if (!userAddress) return null; 304 | 305 | let userPoolKey = await PublicKey.createWithSeed( 306 | userAddress, 307 | "user-pool", 308 | program.programId, 309 | ); 310 | console.log('User Pool: ', userPoolKey.toBase58()); 311 | try { 312 | let poolState = await program.account.userPool.fetch(userPoolKey); 313 | return poolState as UserPool; 314 | } catch { 315 | return null; 316 | } 317 | } 318 | 319 | const getAssociatedTokenAccount = async (ownerPubkey: PublicKey, mintPk: PublicKey): Promise => { 320 | let associatedTokenAccountPubkey = (await PublicKey.findProgramAddress( 321 | [ 322 | ownerPubkey.toBuffer(), 323 | TOKEN_PROGRAM_ID.toBuffer(), 324 | mintPk.toBuffer(), // mint address 325 | ], 326 | ASSOCIATED_TOKEN_PROGRAM_ID 327 | ))[0]; 328 | return associatedTokenAccountPubkey; 329 | } 330 | 331 | export const getATokenAccountsNeedCreate = async ( 332 | connection: anchor.web3.Connection, 333 | walletAddress: anchor.web3.PublicKey, 334 | owner: anchor.web3.PublicKey, 335 | nfts: anchor.web3.PublicKey[], 336 | ) => { 337 | let instructions = [], destinationAccounts = []; 338 | for (const mint of nfts) { 339 | const destinationPubkey = await getAssociatedTokenAccount(owner, mint); 340 | let response = await connection.getAccountInfo(destinationPubkey); 341 | if (!response) { 342 | const createATAIx = createAssociatedTokenAccountInstruction( 343 | destinationPubkey, 344 | walletAddress, 345 | owner, 346 | mint, 347 | ); 348 | instructions.push(createATAIx); 349 | } 350 | destinationAccounts.push(destinationPubkey); 351 | if (walletAddress != owner) { 352 | const userAccount = await getAssociatedTokenAccount(walletAddress, mint); 353 | response = await connection.getAccountInfo(userAccount); 354 | if (!response) { 355 | const createATAIx = createAssociatedTokenAccountInstruction( 356 | userAccount, 357 | walletAddress, 358 | walletAddress, 359 | mint, 360 | ); 361 | instructions.push(createATAIx); 362 | } 363 | } 364 | } 365 | return { 366 | instructions, 367 | destinationAccounts, 368 | }; 369 | } 370 | 371 | export const createAssociatedTokenAccountInstruction = ( 372 | associatedTokenAddress: anchor.web3.PublicKey, 373 | payer: anchor.web3.PublicKey, 374 | walletAddress: anchor.web3.PublicKey, 375 | splTokenMintAddress: anchor.web3.PublicKey 376 | ) => { 377 | const keys = [ 378 | { pubkey: payer, isSigner: true, isWritable: true }, 379 | { pubkey: associatedTokenAddress, isSigner: false, isWritable: true }, 380 | { pubkey: walletAddress, isSigner: false, isWritable: false }, 381 | { pubkey: splTokenMintAddress, isSigner: false, isWritable: false }, 382 | { 383 | pubkey: anchor.web3.SystemProgram.programId, 384 | isSigner: false, 385 | isWritable: false, 386 | }, 387 | { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, 388 | { 389 | pubkey: anchor.web3.SYSVAR_RENT_PUBKEY, 390 | isSigner: false, 391 | isWritable: false, 392 | }, 393 | ]; 394 | return new anchor.web3.TransactionInstruction({ 395 | keys, 396 | programId: ASSOCIATED_TOKEN_PROGRAM_ID, 397 | data: Buffer.from([]), 398 | }); 399 | } 400 | 401 | main(); -------------------------------------------------------------------------------- /dwarves_staking/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 = "ahash" 7 | version = "0.7.6" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 10 | dependencies = [ 11 | "getrandom 0.2.4", 12 | "once_cell", 13 | "version_check", 14 | ] 15 | 16 | [[package]] 17 | name = "aho-corasick" 18 | version = "0.7.18" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 21 | dependencies = [ 22 | "memchr", 23 | ] 24 | 25 | [[package]] 26 | name = "anchor-attribute-access-control" 27 | version = "0.20.1" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "105c443a613f29212755fb6c5f946fa82dcf94a80528f643e0faa9d9faeb626b" 30 | dependencies = [ 31 | "anchor-syn", 32 | "anyhow", 33 | "proc-macro2", 34 | "quote", 35 | "regex", 36 | "syn", 37 | ] 38 | 39 | [[package]] 40 | name = "anchor-attribute-account" 41 | version = "0.20.1" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "fdae15851aa41972e9c18c987613c50a916c48c88c97ea3316156a5c772e5faa" 44 | dependencies = [ 45 | "anchor-syn", 46 | "anyhow", 47 | "bs58 0.4.0", 48 | "proc-macro2", 49 | "quote", 50 | "rustversion", 51 | "syn", 52 | ] 53 | 54 | [[package]] 55 | name = "anchor-attribute-constant" 56 | version = "0.20.1" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "6356865217881d0bbea8aa70625937bec6d9952610f1ba2a2452a8e427000687" 59 | dependencies = [ 60 | "anchor-syn", 61 | "proc-macro2", 62 | "syn", 63 | ] 64 | 65 | [[package]] 66 | name = "anchor-attribute-error" 67 | version = "0.20.1" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "ebe998ce4e6e0cb0e291d1a1626bd30791cdfdd9d05523111bdf4fd053f08636" 70 | dependencies = [ 71 | "anchor-syn", 72 | "proc-macro2", 73 | "quote", 74 | "syn", 75 | ] 76 | 77 | [[package]] 78 | name = "anchor-attribute-event" 79 | version = "0.20.1" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "c5810498a20554c20354f5648b6041172f2035e58d09ad40dc051dc0d1501f80" 82 | dependencies = [ 83 | "anchor-syn", 84 | "anyhow", 85 | "proc-macro2", 86 | "quote", 87 | "syn", 88 | ] 89 | 90 | [[package]] 91 | name = "anchor-attribute-interface" 92 | version = "0.20.1" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "ac83f085b2be8b3a3412989cf96cf7f683561db7d357c5aa4aa11d48bbb22213" 95 | dependencies = [ 96 | "anchor-syn", 97 | "anyhow", 98 | "heck", 99 | "proc-macro2", 100 | "quote", 101 | "syn", 102 | ] 103 | 104 | [[package]] 105 | name = "anchor-attribute-program" 106 | version = "0.20.1" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "73c56be575d89abcb192afa29deb87b2cdb3c39033abc02f2d16e6af999b23b7" 109 | dependencies = [ 110 | "anchor-syn", 111 | "anyhow", 112 | "proc-macro2", 113 | "quote", 114 | "syn", 115 | ] 116 | 117 | [[package]] 118 | name = "anchor-attribute-state" 119 | version = "0.20.1" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "62ab002353b01fcb4f72cca256d5d62db39f9ff39b1d072280deee9798f1f524" 122 | dependencies = [ 123 | "anchor-syn", 124 | "anyhow", 125 | "proc-macro2", 126 | "quote", 127 | "syn", 128 | ] 129 | 130 | [[package]] 131 | name = "anchor-derive-accounts" 132 | version = "0.20.1" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "e9e653cdb322078d95221384c4a527a403560e509ac7cb2b53d3bd664b23c4d6" 135 | dependencies = [ 136 | "anchor-syn", 137 | "anyhow", 138 | "proc-macro2", 139 | "quote", 140 | "syn", 141 | ] 142 | 143 | [[package]] 144 | name = "anchor-lang" 145 | version = "0.20.1" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "4815ad6334fd2f561f7ddcc3cfbeed87ed3003724171bd80ebe6383d5173ee8f" 148 | dependencies = [ 149 | "anchor-attribute-access-control", 150 | "anchor-attribute-account", 151 | "anchor-attribute-constant", 152 | "anchor-attribute-error", 153 | "anchor-attribute-event", 154 | "anchor-attribute-interface", 155 | "anchor-attribute-program", 156 | "anchor-attribute-state", 157 | "anchor-derive-accounts", 158 | "arrayref", 159 | "base64 0.13.0", 160 | "bincode", 161 | "borsh", 162 | "bytemuck", 163 | "solana-program", 164 | "thiserror", 165 | ] 166 | 167 | [[package]] 168 | name = "anchor-spl" 169 | version = "0.20.1" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "9ea94b04fc9a0aaae4d4473b0595fb5f55b6c9b38e0d6f596df8c8060f95f096" 172 | dependencies = [ 173 | "anchor-lang", 174 | "solana-program", 175 | "spl-associated-token-account", 176 | "spl-token", 177 | ] 178 | 179 | [[package]] 180 | name = "anchor-syn" 181 | version = "0.20.1" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "3be7bfb6991d79cce3495fb6ce0892f58a5c75a74c8d1c2fc6f62926066eb9f4" 184 | dependencies = [ 185 | "anyhow", 186 | "bs58 0.3.1", 187 | "heck", 188 | "proc-macro2", 189 | "proc-macro2-diagnostics", 190 | "quote", 191 | "serde", 192 | "serde_json", 193 | "sha2", 194 | "syn", 195 | "thiserror", 196 | ] 197 | 198 | [[package]] 199 | name = "anyhow" 200 | version = "1.0.54" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "7a99269dff3bc004caa411f38845c20303f1e393ca2bd6581576fa3a7f59577d" 203 | 204 | [[package]] 205 | name = "arrayref" 206 | version = "0.3.6" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 209 | 210 | [[package]] 211 | name = "arrayvec" 212 | version = "0.7.2" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 215 | 216 | [[package]] 217 | name = "atty" 218 | version = "0.2.14" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 221 | dependencies = [ 222 | "hermit-abi", 223 | "libc", 224 | "winapi", 225 | ] 226 | 227 | [[package]] 228 | name = "autocfg" 229 | version = "1.1.0" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 232 | 233 | [[package]] 234 | name = "base64" 235 | version = "0.12.3" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 238 | 239 | [[package]] 240 | name = "base64" 241 | version = "0.13.0" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 244 | 245 | [[package]] 246 | name = "bincode" 247 | version = "1.3.3" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 250 | dependencies = [ 251 | "serde", 252 | ] 253 | 254 | [[package]] 255 | name = "bitflags" 256 | version = "1.3.2" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 259 | 260 | [[package]] 261 | name = "blake3" 262 | version = "1.3.1" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" 265 | dependencies = [ 266 | "arrayref", 267 | "arrayvec", 268 | "cc", 269 | "cfg-if", 270 | "constant_time_eq", 271 | "digest 0.10.3", 272 | ] 273 | 274 | [[package]] 275 | name = "block-buffer" 276 | version = "0.9.0" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 279 | dependencies = [ 280 | "block-padding", 281 | "generic-array", 282 | ] 283 | 284 | [[package]] 285 | name = "block-buffer" 286 | version = "0.10.2" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 289 | dependencies = [ 290 | "generic-array", 291 | ] 292 | 293 | [[package]] 294 | name = "block-padding" 295 | version = "0.2.1" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 298 | 299 | [[package]] 300 | name = "borsh" 301 | version = "0.9.3" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" 304 | dependencies = [ 305 | "borsh-derive", 306 | "hashbrown", 307 | ] 308 | 309 | [[package]] 310 | name = "borsh-derive" 311 | version = "0.9.3" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" 314 | dependencies = [ 315 | "borsh-derive-internal", 316 | "borsh-schema-derive-internal", 317 | "proc-macro-crate 0.1.5", 318 | "proc-macro2", 319 | "syn", 320 | ] 321 | 322 | [[package]] 323 | name = "borsh-derive-internal" 324 | version = "0.9.3" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" 327 | dependencies = [ 328 | "proc-macro2", 329 | "quote", 330 | "syn", 331 | ] 332 | 333 | [[package]] 334 | name = "borsh-schema-derive-internal" 335 | version = "0.9.3" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" 338 | dependencies = [ 339 | "proc-macro2", 340 | "quote", 341 | "syn", 342 | ] 343 | 344 | [[package]] 345 | name = "bs58" 346 | version = "0.3.1" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" 349 | 350 | [[package]] 351 | name = "bs58" 352 | version = "0.4.0" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 355 | 356 | [[package]] 357 | name = "bumpalo" 358 | version = "3.9.1" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" 361 | 362 | [[package]] 363 | name = "bv" 364 | version = "0.11.1" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 367 | dependencies = [ 368 | "feature-probe", 369 | "serde", 370 | ] 371 | 372 | [[package]] 373 | name = "bytemuck" 374 | version = "1.7.3" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f" 377 | dependencies = [ 378 | "bytemuck_derive", 379 | ] 380 | 381 | [[package]] 382 | name = "bytemuck_derive" 383 | version = "1.0.1" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54" 386 | dependencies = [ 387 | "proc-macro2", 388 | "quote", 389 | "syn", 390 | ] 391 | 392 | [[package]] 393 | name = "byteorder" 394 | version = "1.4.3" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 397 | 398 | [[package]] 399 | name = "cc" 400 | version = "1.0.73" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 403 | 404 | [[package]] 405 | name = "cfg-if" 406 | version = "1.0.0" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 409 | 410 | [[package]] 411 | name = "console_error_panic_hook" 412 | version = "0.1.7" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 415 | dependencies = [ 416 | "cfg-if", 417 | "wasm-bindgen", 418 | ] 419 | 420 | [[package]] 421 | name = "console_log" 422 | version = "0.2.0" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" 425 | dependencies = [ 426 | "log", 427 | "web-sys", 428 | ] 429 | 430 | [[package]] 431 | name = "constant_time_eq" 432 | version = "0.1.5" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 435 | 436 | [[package]] 437 | name = "cpufeatures" 438 | version = "0.2.1" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" 441 | dependencies = [ 442 | "libc", 443 | ] 444 | 445 | [[package]] 446 | name = "crunchy" 447 | version = "0.2.2" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 450 | 451 | [[package]] 452 | name = "crypto-common" 453 | version = "0.1.3" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" 456 | dependencies = [ 457 | "generic-array", 458 | "typenum", 459 | ] 460 | 461 | [[package]] 462 | name = "crypto-mac" 463 | version = "0.8.0" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 466 | dependencies = [ 467 | "generic-array", 468 | "subtle", 469 | ] 470 | 471 | [[package]] 472 | name = "curve25519-dalek" 473 | version = "3.2.1" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 476 | dependencies = [ 477 | "byteorder", 478 | "digest 0.9.0", 479 | "rand_core", 480 | "subtle", 481 | "zeroize", 482 | ] 483 | 484 | [[package]] 485 | name = "digest" 486 | version = "0.9.0" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 489 | dependencies = [ 490 | "generic-array", 491 | ] 492 | 493 | [[package]] 494 | name = "digest" 495 | version = "0.10.3" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 498 | dependencies = [ 499 | "block-buffer 0.10.2", 500 | "crypto-common", 501 | "subtle", 502 | ] 503 | 504 | [[package]] 505 | name = "dwarves_staking" 506 | version = "0.1.0" 507 | dependencies = [ 508 | "anchor-lang", 509 | "anchor-spl", 510 | "solana-program", 511 | "spl-token", 512 | ] 513 | 514 | [[package]] 515 | name = "either" 516 | version = "1.6.1" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 519 | 520 | [[package]] 521 | name = "env_logger" 522 | version = "0.9.0" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" 525 | dependencies = [ 526 | "atty", 527 | "humantime", 528 | "log", 529 | "regex", 530 | "termcolor", 531 | ] 532 | 533 | [[package]] 534 | name = "feature-probe" 535 | version = "0.1.1" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 538 | 539 | [[package]] 540 | name = "generic-array" 541 | version = "0.14.5" 542 | source = "registry+https://github.com/rust-lang/crates.io-index" 543 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" 544 | dependencies = [ 545 | "serde", 546 | "typenum", 547 | "version_check", 548 | ] 549 | 550 | [[package]] 551 | name = "getrandom" 552 | version = "0.1.16" 553 | source = "registry+https://github.com/rust-lang/crates.io-index" 554 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 555 | dependencies = [ 556 | "cfg-if", 557 | "js-sys", 558 | "libc", 559 | "wasi 0.9.0+wasi-snapshot-preview1", 560 | "wasm-bindgen", 561 | ] 562 | 563 | [[package]] 564 | name = "getrandom" 565 | version = "0.2.4" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" 568 | dependencies = [ 569 | "cfg-if", 570 | "libc", 571 | "wasi 0.10.2+wasi-snapshot-preview1", 572 | ] 573 | 574 | [[package]] 575 | name = "hashbrown" 576 | version = "0.11.2" 577 | source = "registry+https://github.com/rust-lang/crates.io-index" 578 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 579 | dependencies = [ 580 | "ahash", 581 | ] 582 | 583 | [[package]] 584 | name = "heck" 585 | version = "0.3.3" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 588 | dependencies = [ 589 | "unicode-segmentation", 590 | ] 591 | 592 | [[package]] 593 | name = "hermit-abi" 594 | version = "0.1.19" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 597 | dependencies = [ 598 | "libc", 599 | ] 600 | 601 | [[package]] 602 | name = "hmac" 603 | version = "0.8.1" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 606 | dependencies = [ 607 | "crypto-mac", 608 | "digest 0.9.0", 609 | ] 610 | 611 | [[package]] 612 | name = "hmac-drbg" 613 | version = "0.3.0" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 616 | dependencies = [ 617 | "digest 0.9.0", 618 | "generic-array", 619 | "hmac", 620 | ] 621 | 622 | [[package]] 623 | name = "humantime" 624 | version = "2.1.0" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 627 | 628 | [[package]] 629 | name = "instant" 630 | version = "0.1.12" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 633 | dependencies = [ 634 | "cfg-if", 635 | ] 636 | 637 | [[package]] 638 | name = "itertools" 639 | version = "0.10.3" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 642 | dependencies = [ 643 | "either", 644 | ] 645 | 646 | [[package]] 647 | name = "itoa" 648 | version = "1.0.1" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" 651 | 652 | [[package]] 653 | name = "js-sys" 654 | version = "0.3.56" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" 657 | dependencies = [ 658 | "wasm-bindgen", 659 | ] 660 | 661 | [[package]] 662 | name = "keccak" 663 | version = "0.1.0" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" 666 | 667 | [[package]] 668 | name = "lazy_static" 669 | version = "1.4.0" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 672 | 673 | [[package]] 674 | name = "libc" 675 | version = "0.2.119" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" 678 | 679 | [[package]] 680 | name = "libsecp256k1" 681 | version = "0.6.0" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 684 | dependencies = [ 685 | "arrayref", 686 | "base64 0.12.3", 687 | "digest 0.9.0", 688 | "hmac-drbg", 689 | "libsecp256k1-core", 690 | "libsecp256k1-gen-ecmult", 691 | "libsecp256k1-gen-genmult", 692 | "rand", 693 | "serde", 694 | "sha2", 695 | "typenum", 696 | ] 697 | 698 | [[package]] 699 | name = "libsecp256k1-core" 700 | version = "0.2.2" 701 | source = "registry+https://github.com/rust-lang/crates.io-index" 702 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 703 | dependencies = [ 704 | "crunchy", 705 | "digest 0.9.0", 706 | "subtle", 707 | ] 708 | 709 | [[package]] 710 | name = "libsecp256k1-gen-ecmult" 711 | version = "0.2.1" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 714 | dependencies = [ 715 | "libsecp256k1-core", 716 | ] 717 | 718 | [[package]] 719 | name = "libsecp256k1-gen-genmult" 720 | version = "0.2.1" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 723 | dependencies = [ 724 | "libsecp256k1-core", 725 | ] 726 | 727 | [[package]] 728 | name = "lock_api" 729 | version = "0.4.6" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" 732 | dependencies = [ 733 | "scopeguard", 734 | ] 735 | 736 | [[package]] 737 | name = "log" 738 | version = "0.4.14" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" 741 | dependencies = [ 742 | "cfg-if", 743 | ] 744 | 745 | [[package]] 746 | name = "memchr" 747 | version = "2.4.1" 748 | source = "registry+https://github.com/rust-lang/crates.io-index" 749 | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" 750 | 751 | [[package]] 752 | name = "memmap2" 753 | version = "0.5.3" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "057a3db23999c867821a7a59feb06a578fcb03685e983dff90daf9e7d24ac08f" 756 | dependencies = [ 757 | "libc", 758 | ] 759 | 760 | [[package]] 761 | name = "num-derive" 762 | version = "0.3.3" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 765 | dependencies = [ 766 | "proc-macro2", 767 | "quote", 768 | "syn", 769 | ] 770 | 771 | [[package]] 772 | name = "num-traits" 773 | version = "0.2.14" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 776 | dependencies = [ 777 | "autocfg", 778 | ] 779 | 780 | [[package]] 781 | name = "num_enum" 782 | version = "0.5.6" 783 | source = "registry+https://github.com/rust-lang/crates.io-index" 784 | checksum = "720d3ea1055e4e4574c0c0b0f8c3fd4f24c4cdaf465948206dea090b57b526ad" 785 | dependencies = [ 786 | "num_enum_derive", 787 | ] 788 | 789 | [[package]] 790 | name = "num_enum_derive" 791 | version = "0.5.6" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21" 794 | dependencies = [ 795 | "proc-macro-crate 1.1.2", 796 | "proc-macro2", 797 | "quote", 798 | "syn", 799 | ] 800 | 801 | [[package]] 802 | name = "once_cell" 803 | version = "1.9.0" 804 | source = "registry+https://github.com/rust-lang/crates.io-index" 805 | checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" 806 | 807 | [[package]] 808 | name = "opaque-debug" 809 | version = "0.3.0" 810 | source = "registry+https://github.com/rust-lang/crates.io-index" 811 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 812 | 813 | [[package]] 814 | name = "parking_lot" 815 | version = "0.11.2" 816 | source = "registry+https://github.com/rust-lang/crates.io-index" 817 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 818 | dependencies = [ 819 | "instant", 820 | "lock_api", 821 | "parking_lot_core", 822 | ] 823 | 824 | [[package]] 825 | name = "parking_lot_core" 826 | version = "0.8.5" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 829 | dependencies = [ 830 | "cfg-if", 831 | "instant", 832 | "libc", 833 | "redox_syscall", 834 | "smallvec", 835 | "winapi", 836 | ] 837 | 838 | [[package]] 839 | name = "ppv-lite86" 840 | version = "0.2.16" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 843 | 844 | [[package]] 845 | name = "proc-macro-crate" 846 | version = "0.1.5" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 849 | dependencies = [ 850 | "toml", 851 | ] 852 | 853 | [[package]] 854 | name = "proc-macro-crate" 855 | version = "1.1.2" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "9dada8c9981fcf32929c3c0f0cd796a9284aca335565227ed88c83babb1d43dc" 858 | dependencies = [ 859 | "thiserror", 860 | "toml", 861 | ] 862 | 863 | [[package]] 864 | name = "proc-macro2" 865 | version = "1.0.36" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" 868 | dependencies = [ 869 | "unicode-xid", 870 | ] 871 | 872 | [[package]] 873 | name = "proc-macro2-diagnostics" 874 | version = "0.9.1" 875 | source = "registry+https://github.com/rust-lang/crates.io-index" 876 | checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" 877 | dependencies = [ 878 | "proc-macro2", 879 | "quote", 880 | "syn", 881 | "version_check", 882 | "yansi", 883 | ] 884 | 885 | [[package]] 886 | name = "quote" 887 | version = "1.0.15" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" 890 | dependencies = [ 891 | "proc-macro2", 892 | ] 893 | 894 | [[package]] 895 | name = "rand" 896 | version = "0.7.3" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 899 | dependencies = [ 900 | "getrandom 0.1.16", 901 | "libc", 902 | "rand_chacha", 903 | "rand_core", 904 | "rand_hc", 905 | ] 906 | 907 | [[package]] 908 | name = "rand_chacha" 909 | version = "0.2.2" 910 | source = "registry+https://github.com/rust-lang/crates.io-index" 911 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 912 | dependencies = [ 913 | "ppv-lite86", 914 | "rand_core", 915 | ] 916 | 917 | [[package]] 918 | name = "rand_core" 919 | version = "0.5.1" 920 | source = "registry+https://github.com/rust-lang/crates.io-index" 921 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 922 | dependencies = [ 923 | "getrandom 0.1.16", 924 | ] 925 | 926 | [[package]] 927 | name = "rand_hc" 928 | version = "0.2.0" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 931 | dependencies = [ 932 | "rand_core", 933 | ] 934 | 935 | [[package]] 936 | name = "redox_syscall" 937 | version = "0.2.10" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" 940 | dependencies = [ 941 | "bitflags", 942 | ] 943 | 944 | [[package]] 945 | name = "regex" 946 | version = "1.5.4" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" 949 | dependencies = [ 950 | "aho-corasick", 951 | "memchr", 952 | "regex-syntax", 953 | ] 954 | 955 | [[package]] 956 | name = "regex-syntax" 957 | version = "0.6.25" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" 960 | 961 | [[package]] 962 | name = "rustc_version" 963 | version = "0.4.0" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 966 | dependencies = [ 967 | "semver", 968 | ] 969 | 970 | [[package]] 971 | name = "rustversion" 972 | version = "1.0.6" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" 975 | 976 | [[package]] 977 | name = "ryu" 978 | version = "1.0.9" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" 981 | 982 | [[package]] 983 | name = "scopeguard" 984 | version = "1.1.0" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 987 | 988 | [[package]] 989 | name = "semver" 990 | version = "1.0.5" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | checksum = "0486718e92ec9a68fbed73bb5ef687d71103b142595b406835649bebd33f72c7" 993 | 994 | [[package]] 995 | name = "serde" 996 | version = "1.0.136" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" 999 | dependencies = [ 1000 | "serde_derive", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "serde_bytes" 1005 | version = "0.11.5" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" 1008 | dependencies = [ 1009 | "serde", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "serde_derive" 1014 | version = "1.0.136" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" 1017 | dependencies = [ 1018 | "proc-macro2", 1019 | "quote", 1020 | "syn", 1021 | ] 1022 | 1023 | [[package]] 1024 | name = "serde_json" 1025 | version = "1.0.79" 1026 | source = "registry+https://github.com/rust-lang/crates.io-index" 1027 | checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" 1028 | dependencies = [ 1029 | "itoa", 1030 | "ryu", 1031 | "serde", 1032 | ] 1033 | 1034 | [[package]] 1035 | name = "sha2" 1036 | version = "0.9.9" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1039 | dependencies = [ 1040 | "block-buffer 0.9.0", 1041 | "cfg-if", 1042 | "cpufeatures", 1043 | "digest 0.9.0", 1044 | "opaque-debug", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "sha3" 1049 | version = "0.9.1" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 1052 | dependencies = [ 1053 | "block-buffer 0.9.0", 1054 | "digest 0.9.0", 1055 | "keccak", 1056 | "opaque-debug", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "smallvec" 1061 | version = "1.8.0" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" 1064 | 1065 | [[package]] 1066 | name = "solana-frozen-abi" 1067 | version = "1.9.5" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "fbb58e258da28e714904b62a1e8b7de5b01d349420a88409c84cb57264699021" 1070 | dependencies = [ 1071 | "bs58 0.4.0", 1072 | "bv", 1073 | "generic-array", 1074 | "log", 1075 | "memmap2", 1076 | "rustc_version", 1077 | "serde", 1078 | "serde_derive", 1079 | "sha2", 1080 | "solana-frozen-abi-macro", 1081 | "solana-logger", 1082 | "thiserror", 1083 | ] 1084 | 1085 | [[package]] 1086 | name = "solana-frozen-abi-macro" 1087 | version = "1.9.5" 1088 | source = "registry+https://github.com/rust-lang/crates.io-index" 1089 | checksum = "7f9c141ee23138a001bf94a9850fff3c8804e52fa36c151a8a4699f60bd55f74" 1090 | dependencies = [ 1091 | "proc-macro2", 1092 | "quote", 1093 | "rustc_version", 1094 | "syn", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "solana-logger" 1099 | version = "1.9.5" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "72b63b04c1a2077f2eadb3c63988a14bc4fa4419f291fea7112a9c595db1e63b" 1102 | dependencies = [ 1103 | "env_logger", 1104 | "lazy_static", 1105 | "log", 1106 | ] 1107 | 1108 | [[package]] 1109 | name = "solana-program" 1110 | version = "1.9.5" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "0c41b2af0be4fc039852c74926a8a026e97f9b1d7c02c15610bb6a614268a4ea" 1113 | dependencies = [ 1114 | "base64 0.13.0", 1115 | "bincode", 1116 | "bitflags", 1117 | "blake3", 1118 | "borsh", 1119 | "borsh-derive", 1120 | "bs58 0.4.0", 1121 | "bv", 1122 | "bytemuck", 1123 | "console_error_panic_hook", 1124 | "console_log", 1125 | "curve25519-dalek", 1126 | "getrandom 0.1.16", 1127 | "itertools", 1128 | "js-sys", 1129 | "lazy_static", 1130 | "libsecp256k1", 1131 | "log", 1132 | "num-derive", 1133 | "num-traits", 1134 | "parking_lot", 1135 | "rand", 1136 | "rustc_version", 1137 | "rustversion", 1138 | "serde", 1139 | "serde_bytes", 1140 | "serde_derive", 1141 | "sha2", 1142 | "sha3", 1143 | "solana-frozen-abi", 1144 | "solana-frozen-abi-macro", 1145 | "solana-logger", 1146 | "solana-sdk-macro", 1147 | "thiserror", 1148 | "wasm-bindgen", 1149 | ] 1150 | 1151 | [[package]] 1152 | name = "solana-sdk-macro" 1153 | version = "1.9.5" 1154 | source = "registry+https://github.com/rust-lang/crates.io-index" 1155 | checksum = "238b93350286f73c2bd94c1a307bb0226a2f78070937bcf273bf968859f8cc39" 1156 | dependencies = [ 1157 | "bs58 0.4.0", 1158 | "proc-macro2", 1159 | "quote", 1160 | "rustversion", 1161 | "syn", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "spl-associated-token-account" 1166 | version = "1.0.3" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "393e2240d521c3dd770806bff25c2c00d761ac962be106e14e22dd912007f428" 1169 | dependencies = [ 1170 | "solana-program", 1171 | "spl-token", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "spl-token" 1176 | version = "3.3.0" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "0cc67166ef99d10c18cb5e9c208901e6d8255c6513bb1f877977eba48e6cc4fb" 1179 | dependencies = [ 1180 | "arrayref", 1181 | "num-derive", 1182 | "num-traits", 1183 | "num_enum", 1184 | "solana-program", 1185 | "thiserror", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "subtle" 1190 | version = "2.4.1" 1191 | source = "registry+https://github.com/rust-lang/crates.io-index" 1192 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1193 | 1194 | [[package]] 1195 | name = "syn" 1196 | version = "1.0.86" 1197 | source = "registry+https://github.com/rust-lang/crates.io-index" 1198 | checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" 1199 | dependencies = [ 1200 | "proc-macro2", 1201 | "quote", 1202 | "unicode-xid", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "termcolor" 1207 | version = "1.1.2" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" 1210 | dependencies = [ 1211 | "winapi-util", 1212 | ] 1213 | 1214 | [[package]] 1215 | name = "thiserror" 1216 | version = "1.0.30" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" 1219 | dependencies = [ 1220 | "thiserror-impl", 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "thiserror-impl" 1225 | version = "1.0.30" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" 1228 | dependencies = [ 1229 | "proc-macro2", 1230 | "quote", 1231 | "syn", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "toml" 1236 | version = "0.5.8" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 1239 | dependencies = [ 1240 | "serde", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "typenum" 1245 | version = "1.15.0" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1248 | 1249 | [[package]] 1250 | name = "unicode-segmentation" 1251 | version = "1.9.0" 1252 | source = "registry+https://github.com/rust-lang/crates.io-index" 1253 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 1254 | 1255 | [[package]] 1256 | name = "unicode-xid" 1257 | version = "0.2.2" 1258 | source = "registry+https://github.com/rust-lang/crates.io-index" 1259 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 1260 | 1261 | [[package]] 1262 | name = "version_check" 1263 | version = "0.9.4" 1264 | source = "registry+https://github.com/rust-lang/crates.io-index" 1265 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1266 | 1267 | [[package]] 1268 | name = "wasi" 1269 | version = "0.9.0+wasi-snapshot-preview1" 1270 | source = "registry+https://github.com/rust-lang/crates.io-index" 1271 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1272 | 1273 | [[package]] 1274 | name = "wasi" 1275 | version = "0.10.2+wasi-snapshot-preview1" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" 1278 | 1279 | [[package]] 1280 | name = "wasm-bindgen" 1281 | version = "0.2.79" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" 1284 | dependencies = [ 1285 | "cfg-if", 1286 | "wasm-bindgen-macro", 1287 | ] 1288 | 1289 | [[package]] 1290 | name = "wasm-bindgen-backend" 1291 | version = "0.2.79" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" 1294 | dependencies = [ 1295 | "bumpalo", 1296 | "lazy_static", 1297 | "log", 1298 | "proc-macro2", 1299 | "quote", 1300 | "syn", 1301 | "wasm-bindgen-shared", 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "wasm-bindgen-macro" 1306 | version = "0.2.79" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" 1309 | dependencies = [ 1310 | "quote", 1311 | "wasm-bindgen-macro-support", 1312 | ] 1313 | 1314 | [[package]] 1315 | name = "wasm-bindgen-macro-support" 1316 | version = "0.2.79" 1317 | source = "registry+https://github.com/rust-lang/crates.io-index" 1318 | checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" 1319 | dependencies = [ 1320 | "proc-macro2", 1321 | "quote", 1322 | "syn", 1323 | "wasm-bindgen-backend", 1324 | "wasm-bindgen-shared", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "wasm-bindgen-shared" 1329 | version = "0.2.79" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" 1332 | 1333 | [[package]] 1334 | name = "web-sys" 1335 | version = "0.3.56" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" 1338 | dependencies = [ 1339 | "js-sys", 1340 | "wasm-bindgen", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "winapi" 1345 | version = "0.3.9" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1348 | dependencies = [ 1349 | "winapi-i686-pc-windows-gnu", 1350 | "winapi-x86_64-pc-windows-gnu", 1351 | ] 1352 | 1353 | [[package]] 1354 | name = "winapi-i686-pc-windows-gnu" 1355 | version = "0.4.0" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1358 | 1359 | [[package]] 1360 | name = "winapi-util" 1361 | version = "0.1.5" 1362 | source = "registry+https://github.com/rust-lang/crates.io-index" 1363 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1364 | dependencies = [ 1365 | "winapi", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "winapi-x86_64-pc-windows-gnu" 1370 | version = "0.4.0" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1373 | 1374 | [[package]] 1375 | name = "yansi" 1376 | version = "0.5.0" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" 1379 | 1380 | [[package]] 1381 | name = "zeroize" 1382 | version = "1.3.0" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 1385 | -------------------------------------------------------------------------------- /dwarves_staking/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5": 6 | "integrity" "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" 7 | "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" 8 | "version" "7.17.2" 9 | dependencies: 10 | "regenerator-runtime" "^0.13.4" 11 | 12 | "@ethersproject/bytes@^5.5.0": 13 | "integrity" "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==" 14 | "resolved" "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz" 15 | "version" "5.5.0" 16 | dependencies: 17 | "@ethersproject/logger" "^5.5.0" 18 | 19 | "@ethersproject/logger@^5.5.0": 20 | "integrity" "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" 21 | "resolved" "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz" 22 | "version" "5.5.0" 23 | 24 | "@ethersproject/sha2@^5.5.0": 25 | "integrity" "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==" 26 | "resolved" "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz" 27 | "version" "5.5.0" 28 | dependencies: 29 | "@ethersproject/bytes" "^5.5.0" 30 | "@ethersproject/logger" "^5.5.0" 31 | "hash.js" "1.1.7" 32 | 33 | "@project-serum/anchor@^0.20.1": 34 | "integrity" "sha512-2TuBmGUn9qeYz6sJINJlElrBuPsaUAtYyUsJ3XplEBf1pczrANAgs5ceJUFzdiqGEWLn+84ObSdBeChT/AXYFA==" 35 | "resolved" "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.20.1.tgz" 36 | "version" "0.20.1" 37 | dependencies: 38 | "@project-serum/borsh" "^0.2.2" 39 | "@solana/web3.js" "^1.17.0" 40 | "base64-js" "^1.5.1" 41 | "bn.js" "^5.1.2" 42 | "bs58" "^4.0.1" 43 | "buffer-layout" "^1.2.2" 44 | "camelcase" "^5.3.1" 45 | "crypto-hash" "^1.3.0" 46 | "eventemitter3" "^4.0.7" 47 | "find" "^0.3.0" 48 | "js-sha256" "^0.9.0" 49 | "pako" "^2.0.3" 50 | "snake-case" "^3.0.4" 51 | "toml" "^3.0.0" 52 | 53 | "@project-serum/borsh@^0.2.2": 54 | "integrity" "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==" 55 | "resolved" "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz" 56 | "version" "0.2.5" 57 | dependencies: 58 | "bn.js" "^5.1.2" 59 | "buffer-layout" "^1.2.0" 60 | 61 | "@solana/buffer-layout@^3.0.0": 62 | "integrity" "sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==" 63 | "resolved" "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz" 64 | "version" "3.0.0" 65 | dependencies: 66 | "buffer" "~6.0.3" 67 | 68 | "@solana/spl-token@^0.1.8": 69 | "integrity" "sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==" 70 | "resolved" "https://registry.npmjs.org/@solana/spl-token/-/spl-token-0.1.8.tgz" 71 | "version" "0.1.8" 72 | dependencies: 73 | "@babel/runtime" "^7.10.5" 74 | "@solana/web3.js" "^1.21.0" 75 | "bn.js" "^5.1.0" 76 | "buffer" "6.0.3" 77 | "buffer-layout" "^1.2.0" 78 | "dotenv" "10.0.0" 79 | 80 | "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.2.0", "@solana/web3.js@^1.21.0": 81 | "integrity" "sha512-eKf2rPoWEyVq7QsgAQKNqxODvPsb0vqSwwg2xRY1e49Fn5Qh29m2FiLcYHRS/xhPu/7b/5gsD+RzO3BWozOeZQ==" 82 | "resolved" "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.35.0.tgz" 83 | "version" "1.35.0" 84 | dependencies: 85 | "@babel/runtime" "^7.12.5" 86 | "@ethersproject/sha2" "^5.5.0" 87 | "@solana/buffer-layout" "^3.0.0" 88 | "bn.js" "^5.0.0" 89 | "borsh" "^0.4.0" 90 | "bs58" "^4.0.1" 91 | "buffer" "6.0.1" 92 | "cross-fetch" "^3.1.4" 93 | "jayson" "^3.4.4" 94 | "js-sha3" "^0.8.0" 95 | "rpc-websockets" "^7.4.2" 96 | "secp256k1" "^4.0.2" 97 | "superstruct" "^0.14.2" 98 | "tweetnacl" "^1.0.0" 99 | 100 | "@types/bn.js@^4.11.5": 101 | "integrity" "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==" 102 | "resolved" "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" 103 | "version" "4.11.6" 104 | dependencies: 105 | "@types/node" "*" 106 | 107 | "@types/chai@^4.3.0": 108 | "integrity" "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==" 109 | "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz" 110 | "version" "4.3.0" 111 | 112 | "@types/connect@^3.4.33": 113 | "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" 114 | "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" 115 | "version" "3.4.35" 116 | dependencies: 117 | "@types/node" "*" 118 | 119 | "@types/express-serve-static-core@^4.17.9": 120 | "integrity" "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==" 121 | "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz" 122 | "version" "4.17.28" 123 | dependencies: 124 | "@types/node" "*" 125 | "@types/qs" "*" 126 | "@types/range-parser" "*" 127 | 128 | "@types/json5@^0.0.29": 129 | "integrity" "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" 130 | "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 131 | "version" "0.0.29" 132 | 133 | "@types/lodash@^4.14.159": 134 | "integrity" "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" 135 | "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz" 136 | "version" "4.14.178" 137 | 138 | "@types/mocha@^9.0.0": 139 | "integrity" "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==" 140 | "resolved" "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz" 141 | "version" "9.1.0" 142 | 143 | "@types/node@*": 144 | "integrity" "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==" 145 | "resolved" "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz" 146 | "version" "17.0.18" 147 | 148 | "@types/node@^12.12.54": 149 | "integrity" "sha512-cPjLXj8d6anFPzFvOPxS3fvly3Shm5nTfl6g8X5smexixbuGUf7hfr21J5tX9JW+UPStp/5P5R8qrKL5IyVJ+A==" 150 | "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.46.tgz" 151 | "version" "12.20.46" 152 | 153 | "@types/qs@*": 154 | "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" 155 | "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" 156 | "version" "6.9.7" 157 | 158 | "@types/range-parser@*": 159 | "integrity" "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" 160 | "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" 161 | "version" "1.2.4" 162 | 163 | "@types/ws@^7.4.4": 164 | "integrity" "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==" 165 | "resolved" "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" 166 | "version" "7.4.7" 167 | dependencies: 168 | "@types/node" "*" 169 | 170 | "@ungap/promise-all-settled@1.1.2": 171 | "integrity" "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" 172 | "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" 173 | "version" "1.1.2" 174 | 175 | "ansi-colors@4.1.1": 176 | "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" 177 | "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" 178 | "version" "4.1.1" 179 | 180 | "ansi-regex@^5.0.1": 181 | "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 182 | "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 183 | "version" "5.0.1" 184 | 185 | "ansi-styles@^4.0.0", "ansi-styles@^4.1.0": 186 | "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" 187 | "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 188 | "version" "4.3.0" 189 | dependencies: 190 | "color-convert" "^2.0.1" 191 | 192 | "anymatch@~3.1.2": 193 | "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" 194 | "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" 195 | "version" "3.1.2" 196 | dependencies: 197 | "normalize-path" "^3.0.0" 198 | "picomatch" "^2.0.4" 199 | 200 | "argparse@^2.0.1": 201 | "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 202 | "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 203 | "version" "2.0.1" 204 | 205 | "arrify@^1.0.0": 206 | "integrity" "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" 207 | "resolved" "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" 208 | "version" "1.0.1" 209 | 210 | "assertion-error@^1.1.0": 211 | "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" 212 | "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" 213 | "version" "1.1.0" 214 | 215 | "balanced-match@^1.0.0": 216 | "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 217 | "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 218 | "version" "1.0.2" 219 | 220 | "base-x@^3.0.2": 221 | "integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" 222 | "resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" 223 | "version" "3.0.9" 224 | dependencies: 225 | "safe-buffer" "^5.0.1" 226 | 227 | "base64-js@^1.3.1", "base64-js@^1.5.1": 228 | "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 229 | "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 230 | "version" "1.5.1" 231 | 232 | "binary-extensions@^2.0.0": 233 | "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 234 | "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" 235 | "version" "2.2.0" 236 | 237 | "bn.js@^4.11.9": 238 | "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 239 | "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" 240 | "version" "4.12.0" 241 | 242 | "bn.js@^5.0.0", "bn.js@^5.1.0", "bn.js@^5.1.2": 243 | "integrity" "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" 244 | "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" 245 | "version" "5.2.0" 246 | 247 | "borsh@^0.4.0": 248 | "integrity" "sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==" 249 | "resolved" "https://registry.npmjs.org/borsh/-/borsh-0.4.0.tgz" 250 | "version" "0.4.0" 251 | dependencies: 252 | "@types/bn.js" "^4.11.5" 253 | "bn.js" "^5.0.0" 254 | "bs58" "^4.0.0" 255 | "text-encoding-utf-8" "^1.0.2" 256 | 257 | "brace-expansion@^1.1.7": 258 | "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" 259 | "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 260 | "version" "1.1.11" 261 | dependencies: 262 | "balanced-match" "^1.0.0" 263 | "concat-map" "0.0.1" 264 | 265 | "braces@~3.0.2": 266 | "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" 267 | "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 268 | "version" "3.0.2" 269 | dependencies: 270 | "fill-range" "^7.0.1" 271 | 272 | "brorand@^1.1.0": 273 | "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 274 | "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" 275 | "version" "1.1.0" 276 | 277 | "browser-stdout@1.3.1": 278 | "integrity" "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" 279 | "resolved" "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" 280 | "version" "1.3.1" 281 | 282 | "bs58@^4.0.0", "bs58@^4.0.1": 283 | "integrity" "sha1-vhYedsNU9veIrkBx9j806MTwpCo=" 284 | "resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" 285 | "version" "4.0.1" 286 | dependencies: 287 | "base-x" "^3.0.2" 288 | 289 | "buffer-from@^1.0.0", "buffer-from@^1.1.0": 290 | "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 291 | "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" 292 | "version" "1.1.2" 293 | 294 | "buffer-layout@^1.2.0", "buffer-layout@^1.2.2": 295 | "integrity" "sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==" 296 | "resolved" "https://registry.npmjs.org/buffer-layout/-/buffer-layout-1.2.2.tgz" 297 | "version" "1.2.2" 298 | 299 | "buffer@~6.0.3": 300 | "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" 301 | "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" 302 | "version" "6.0.3" 303 | dependencies: 304 | "base64-js" "^1.3.1" 305 | "ieee754" "^1.2.1" 306 | 307 | "buffer@6.0.1": 308 | "integrity" "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==" 309 | "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz" 310 | "version" "6.0.1" 311 | dependencies: 312 | "base64-js" "^1.3.1" 313 | "ieee754" "^1.2.1" 314 | 315 | "buffer@6.0.3": 316 | "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" 317 | "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" 318 | "version" "6.0.3" 319 | dependencies: 320 | "base64-js" "^1.3.1" 321 | "ieee754" "^1.2.1" 322 | 323 | "bufferutil@^4.0.1": 324 | "integrity" "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==" 325 | "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz" 326 | "version" "4.0.6" 327 | dependencies: 328 | "node-gyp-build" "^4.3.0" 329 | 330 | "camelcase@^5.3.1": 331 | "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 332 | "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" 333 | "version" "5.3.1" 334 | 335 | "camelcase@^6.0.0": 336 | "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" 337 | "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" 338 | "version" "6.3.0" 339 | 340 | "chai@^4.3.4": 341 | "integrity" "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==" 342 | "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz" 343 | "version" "4.3.6" 344 | dependencies: 345 | "assertion-error" "^1.1.0" 346 | "check-error" "^1.0.2" 347 | "deep-eql" "^3.0.1" 348 | "get-func-name" "^2.0.0" 349 | "loupe" "^2.3.1" 350 | "pathval" "^1.1.1" 351 | "type-detect" "^4.0.5" 352 | 353 | "chalk@^4.1.0": 354 | "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" 355 | "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 356 | "version" "4.1.2" 357 | dependencies: 358 | "ansi-styles" "^4.1.0" 359 | "supports-color" "^7.1.0" 360 | 361 | "check-error@^1.0.2": 362 | "integrity" "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" 363 | "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" 364 | "version" "1.0.2" 365 | 366 | "chokidar@3.5.3": 367 | "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" 368 | "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 369 | "version" "3.5.3" 370 | dependencies: 371 | "anymatch" "~3.1.2" 372 | "braces" "~3.0.2" 373 | "glob-parent" "~5.1.2" 374 | "is-binary-path" "~2.1.0" 375 | "is-glob" "~4.0.1" 376 | "normalize-path" "~3.0.0" 377 | "readdirp" "~3.6.0" 378 | optionalDependencies: 379 | "fsevents" "~2.3.2" 380 | 381 | "circular-json@^0.5.9": 382 | "integrity" "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==" 383 | "resolved" "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz" 384 | "version" "0.5.9" 385 | 386 | "cliui@^7.0.2": 387 | "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" 388 | "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" 389 | "version" "7.0.4" 390 | dependencies: 391 | "string-width" "^4.2.0" 392 | "strip-ansi" "^6.0.0" 393 | "wrap-ansi" "^7.0.0" 394 | 395 | "color-convert@^2.0.1": 396 | "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" 397 | "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 398 | "version" "2.0.1" 399 | dependencies: 400 | "color-name" "~1.1.4" 401 | 402 | "color-name@~1.1.4": 403 | "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 404 | "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 405 | "version" "1.1.4" 406 | 407 | "commander@^2.20.3": 408 | "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" 409 | "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" 410 | "version" "2.20.3" 411 | 412 | "concat-map@0.0.1": 413 | "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 414 | "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 415 | "version" "0.0.1" 416 | 417 | "cross-fetch@^3.1.4": 418 | "integrity" "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==" 419 | "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz" 420 | "version" "3.1.5" 421 | dependencies: 422 | "node-fetch" "2.6.7" 423 | 424 | "crypto-hash@^1.3.0": 425 | "integrity" "sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==" 426 | "resolved" "https://registry.npmjs.org/crypto-hash/-/crypto-hash-1.3.0.tgz" 427 | "version" "1.3.0" 428 | 429 | "debug@4.3.3": 430 | "integrity" "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==" 431 | "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" 432 | "version" "4.3.3" 433 | dependencies: 434 | "ms" "2.1.2" 435 | 436 | "decamelize@^4.0.0": 437 | "integrity" "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" 438 | "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" 439 | "version" "4.0.0" 440 | 441 | "deep-eql@^3.0.1": 442 | "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" 443 | "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" 444 | "version" "3.0.1" 445 | dependencies: 446 | "type-detect" "^4.0.0" 447 | 448 | "delay@^5.0.0": 449 | "integrity" "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" 450 | "resolved" "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" 451 | "version" "5.0.0" 452 | 453 | "diff@^3.1.0": 454 | "integrity" "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" 455 | "resolved" "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" 456 | "version" "3.5.0" 457 | 458 | "diff@5.0.0": 459 | "integrity" "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" 460 | "resolved" "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" 461 | "version" "5.0.0" 462 | 463 | "dot-case@^3.0.4": 464 | "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==" 465 | "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" 466 | "version" "3.0.4" 467 | dependencies: 468 | "no-case" "^3.0.4" 469 | "tslib" "^2.0.3" 470 | 471 | "dotenv@10.0.0": 472 | "integrity" "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" 473 | "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" 474 | "version" "10.0.0" 475 | 476 | "elliptic@^6.5.4": 477 | "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" 478 | "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" 479 | "version" "6.5.4" 480 | dependencies: 481 | "bn.js" "^4.11.9" 482 | "brorand" "^1.1.0" 483 | "hash.js" "^1.0.0" 484 | "hmac-drbg" "^1.0.1" 485 | "inherits" "^2.0.4" 486 | "minimalistic-assert" "^1.0.1" 487 | "minimalistic-crypto-utils" "^1.0.1" 488 | 489 | "emoji-regex@^8.0.0": 490 | "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 491 | "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 492 | "version" "8.0.0" 493 | 494 | "es6-promise@^4.0.3": 495 | "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" 496 | "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" 497 | "version" "4.2.8" 498 | 499 | "es6-promisify@^5.0.0": 500 | "integrity" "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=" 501 | "resolved" "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" 502 | "version" "5.0.0" 503 | dependencies: 504 | "es6-promise" "^4.0.3" 505 | 506 | "escalade@^3.1.1": 507 | "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 508 | "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 509 | "version" "3.1.1" 510 | 511 | "escape-string-regexp@4.0.0": 512 | "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 513 | "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 514 | "version" "4.0.0" 515 | 516 | "eventemitter3@^4.0.7": 517 | "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" 518 | "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" 519 | "version" "4.0.7" 520 | 521 | "eyes@^0.1.8": 522 | "integrity" "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" 523 | "resolved" "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" 524 | "version" "0.1.8" 525 | 526 | "fill-range@^7.0.1": 527 | "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" 528 | "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 529 | "version" "7.0.1" 530 | dependencies: 531 | "to-regex-range" "^5.0.1" 532 | 533 | "find-up@5.0.0": 534 | "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==" 535 | "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 536 | "version" "5.0.0" 537 | dependencies: 538 | "locate-path" "^6.0.0" 539 | "path-exists" "^4.0.0" 540 | 541 | "find@^0.3.0": 542 | "integrity" "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==" 543 | "resolved" "https://registry.npmjs.org/find/-/find-0.3.0.tgz" 544 | "version" "0.3.0" 545 | dependencies: 546 | "traverse-chain" "~0.1.0" 547 | 548 | "flat@^5.0.2": 549 | "integrity" "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" 550 | "resolved" "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" 551 | "version" "5.0.2" 552 | 553 | "fs.realpath@^1.0.0": 554 | "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 555 | "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 556 | "version" "1.0.0" 557 | 558 | "get-caller-file@^2.0.5": 559 | "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 560 | "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" 561 | "version" "2.0.5" 562 | 563 | "get-func-name@^2.0.0": 564 | "integrity" "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" 565 | "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" 566 | "version" "2.0.0" 567 | 568 | "glob-parent@~5.1.2": 569 | "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" 570 | "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 571 | "version" "5.1.2" 572 | dependencies: 573 | "is-glob" "^4.0.1" 574 | 575 | "glob@7.2.0": 576 | "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" 577 | "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" 578 | "version" "7.2.0" 579 | dependencies: 580 | "fs.realpath" "^1.0.0" 581 | "inflight" "^1.0.4" 582 | "inherits" "2" 583 | "minimatch" "^3.0.4" 584 | "once" "^1.3.0" 585 | "path-is-absolute" "^1.0.0" 586 | 587 | "growl@1.10.5": 588 | "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" 589 | "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" 590 | "version" "1.10.5" 591 | 592 | "has-flag@^4.0.0": 593 | "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 594 | "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 595 | "version" "4.0.0" 596 | 597 | "hash.js@^1.0.0", "hash.js@^1.0.3", "hash.js@1.1.7": 598 | "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" 599 | "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" 600 | "version" "1.1.7" 601 | dependencies: 602 | "inherits" "^2.0.3" 603 | "minimalistic-assert" "^1.0.1" 604 | 605 | "he@1.2.0": 606 | "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" 607 | "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" 608 | "version" "1.2.0" 609 | 610 | "hmac-drbg@^1.0.1": 611 | "integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=" 612 | "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" 613 | "version" "1.0.1" 614 | dependencies: 615 | "hash.js" "^1.0.3" 616 | "minimalistic-assert" "^1.0.0" 617 | "minimalistic-crypto-utils" "^1.0.1" 618 | 619 | "ieee754@^1.2.1": 620 | "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 621 | "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 622 | "version" "1.2.1" 623 | 624 | "inflight@^1.0.4": 625 | "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" 626 | "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 627 | "version" "1.0.6" 628 | dependencies: 629 | "once" "^1.3.0" 630 | "wrappy" "1" 631 | 632 | "inherits@^2.0.3", "inherits@^2.0.4", "inherits@2": 633 | "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 634 | "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 635 | "version" "2.0.4" 636 | 637 | "is-binary-path@~2.1.0": 638 | "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" 639 | "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 640 | "version" "2.1.0" 641 | dependencies: 642 | "binary-extensions" "^2.0.0" 643 | 644 | "is-extglob@^2.1.1": 645 | "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" 646 | "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 647 | "version" "2.1.1" 648 | 649 | "is-fullwidth-code-point@^3.0.0": 650 | "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 651 | "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 652 | "version" "3.0.0" 653 | 654 | "is-glob@^4.0.1", "is-glob@~4.0.1": 655 | "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" 656 | "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 657 | "version" "4.0.3" 658 | dependencies: 659 | "is-extglob" "^2.1.1" 660 | 661 | "is-number@^7.0.0": 662 | "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 663 | "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 664 | "version" "7.0.0" 665 | 666 | "is-plain-obj@^2.1.0": 667 | "integrity" "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" 668 | "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" 669 | "version" "2.1.0" 670 | 671 | "is-unicode-supported@^0.1.0": 672 | "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" 673 | "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" 674 | "version" "0.1.0" 675 | 676 | "isexe@^2.0.0": 677 | "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 678 | "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 679 | "version" "2.0.0" 680 | 681 | "isomorphic-ws@^4.0.1": 682 | "integrity" "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" 683 | "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" 684 | "version" "4.0.1" 685 | 686 | "jayson@^3.4.4": 687 | "integrity" "sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ==" 688 | "resolved" "https://registry.npmjs.org/jayson/-/jayson-3.6.6.tgz" 689 | "version" "3.6.6" 690 | dependencies: 691 | "@types/connect" "^3.4.33" 692 | "@types/express-serve-static-core" "^4.17.9" 693 | "@types/lodash" "^4.14.159" 694 | "@types/node" "^12.12.54" 695 | "@types/ws" "^7.4.4" 696 | "commander" "^2.20.3" 697 | "delay" "^5.0.0" 698 | "es6-promisify" "^5.0.0" 699 | "eyes" "^0.1.8" 700 | "isomorphic-ws" "^4.0.1" 701 | "json-stringify-safe" "^5.0.1" 702 | "JSONStream" "^1.3.5" 703 | "lodash" "^4.17.20" 704 | "uuid" "^8.3.2" 705 | "ws" "^7.4.5" 706 | 707 | "js-sha256@^0.9.0": 708 | "integrity" "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" 709 | "resolved" "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" 710 | "version" "0.9.0" 711 | 712 | "js-sha3@^0.8.0": 713 | "integrity" "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 714 | "resolved" "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" 715 | "version" "0.8.0" 716 | 717 | "js-yaml@4.1.0": 718 | "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" 719 | "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 720 | "version" "4.1.0" 721 | dependencies: 722 | "argparse" "^2.0.1" 723 | 724 | "json-stringify-safe@^5.0.1": 725 | "integrity" "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 726 | "resolved" "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" 727 | "version" "5.0.1" 728 | 729 | "json5@^1.0.1": 730 | "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" 731 | "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" 732 | "version" "1.0.1" 733 | dependencies: 734 | "minimist" "^1.2.0" 735 | 736 | "jsonparse@^1.2.0": 737 | "integrity" "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" 738 | "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" 739 | "version" "1.3.1" 740 | 741 | "JSONStream@^1.3.5": 742 | "integrity" "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==" 743 | "resolved" "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" 744 | "version" "1.3.5" 745 | dependencies: 746 | "jsonparse" "^1.2.0" 747 | "through" ">=2.2.7 <3" 748 | 749 | "locate-path@^6.0.0": 750 | "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==" 751 | "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 752 | "version" "6.0.0" 753 | dependencies: 754 | "p-locate" "^5.0.0" 755 | 756 | "lodash@^4.17.20": 757 | "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 758 | "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 759 | "version" "4.17.21" 760 | 761 | "log-symbols@4.1.0": 762 | "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" 763 | "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" 764 | "version" "4.1.0" 765 | dependencies: 766 | "chalk" "^4.1.0" 767 | "is-unicode-supported" "^0.1.0" 768 | 769 | "loupe@^2.3.1": 770 | "integrity" "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==" 771 | "resolved" "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz" 772 | "version" "2.3.4" 773 | dependencies: 774 | "get-func-name" "^2.0.0" 775 | 776 | "lower-case@^2.0.2": 777 | "integrity" "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==" 778 | "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" 779 | "version" "2.0.2" 780 | dependencies: 781 | "tslib" "^2.0.3" 782 | 783 | "make-error@^1.1.1": 784 | "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 785 | "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" 786 | "version" "1.3.6" 787 | 788 | "minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": 789 | "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 790 | "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" 791 | "version" "1.0.1" 792 | 793 | "minimalistic-crypto-utils@^1.0.1": 794 | "integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 795 | "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" 796 | "version" "1.0.1" 797 | 798 | "minimatch@^3.0.4": 799 | "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" 800 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 801 | "version" "3.1.2" 802 | dependencies: 803 | "brace-expansion" "^1.1.7" 804 | 805 | "minimatch@3.0.4": 806 | "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" 807 | "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" 808 | "version" "3.0.4" 809 | dependencies: 810 | "brace-expansion" "^1.1.7" 811 | 812 | "minimist@^1.2.0", "minimist@^1.2.5": 813 | "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 814 | "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" 815 | "version" "1.2.5" 816 | 817 | "mkdirp@^0.5.1": 818 | "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" 819 | "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" 820 | "version" "0.5.5" 821 | dependencies: 822 | "minimist" "^1.2.5" 823 | 824 | "mocha@^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X", "mocha@^9.0.3": 825 | "integrity" "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==" 826 | "resolved" "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz" 827 | "version" "9.2.1" 828 | dependencies: 829 | "@ungap/promise-all-settled" "1.1.2" 830 | "ansi-colors" "4.1.1" 831 | "browser-stdout" "1.3.1" 832 | "chokidar" "3.5.3" 833 | "debug" "4.3.3" 834 | "diff" "5.0.0" 835 | "escape-string-regexp" "4.0.0" 836 | "find-up" "5.0.0" 837 | "glob" "7.2.0" 838 | "growl" "1.10.5" 839 | "he" "1.2.0" 840 | "js-yaml" "4.1.0" 841 | "log-symbols" "4.1.0" 842 | "minimatch" "3.0.4" 843 | "ms" "2.1.3" 844 | "nanoid" "3.2.0" 845 | "serialize-javascript" "6.0.0" 846 | "strip-json-comments" "3.1.1" 847 | "supports-color" "8.1.1" 848 | "which" "2.0.2" 849 | "workerpool" "6.2.0" 850 | "yargs" "16.2.0" 851 | "yargs-parser" "20.2.4" 852 | "yargs-unparser" "2.0.0" 853 | 854 | "ms@2.1.2": 855 | "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 856 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 857 | "version" "2.1.2" 858 | 859 | "ms@2.1.3": 860 | "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 861 | "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 862 | "version" "2.1.3" 863 | 864 | "nanoid@3.2.0": 865 | "integrity" "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" 866 | "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz" 867 | "version" "3.2.0" 868 | 869 | "no-case@^3.0.4": 870 | "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==" 871 | "resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" 872 | "version" "3.0.4" 873 | dependencies: 874 | "lower-case" "^2.0.2" 875 | "tslib" "^2.0.3" 876 | 877 | "node-addon-api@^2.0.0": 878 | "integrity" "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" 879 | "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" 880 | "version" "2.0.2" 881 | 882 | "node-fetch@2.6.7": 883 | "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" 884 | "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" 885 | "version" "2.6.7" 886 | dependencies: 887 | "whatwg-url" "^5.0.0" 888 | 889 | "node-gyp-build@^4.2.0", "node-gyp-build@^4.3.0": 890 | "integrity" "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" 891 | "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz" 892 | "version" "4.3.0" 893 | 894 | "normalize-path@^3.0.0", "normalize-path@~3.0.0": 895 | "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 896 | "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 897 | "version" "3.0.0" 898 | 899 | "once@^1.3.0": 900 | "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" 901 | "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 902 | "version" "1.4.0" 903 | dependencies: 904 | "wrappy" "1" 905 | 906 | "p-limit@^3.0.2": 907 | "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" 908 | "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 909 | "version" "3.1.0" 910 | dependencies: 911 | "yocto-queue" "^0.1.0" 912 | 913 | "p-locate@^5.0.0": 914 | "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==" 915 | "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 916 | "version" "5.0.0" 917 | dependencies: 918 | "p-limit" "^3.0.2" 919 | 920 | "pako@^2.0.3": 921 | "integrity" "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==" 922 | "resolved" "https://registry.npmjs.org/pako/-/pako-2.0.4.tgz" 923 | "version" "2.0.4" 924 | 925 | "path-exists@^4.0.0": 926 | "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 927 | "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 928 | "version" "4.0.0" 929 | 930 | "path-is-absolute@^1.0.0": 931 | "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 932 | "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 933 | "version" "1.0.1" 934 | 935 | "pathval@^1.1.1": 936 | "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" 937 | "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" 938 | "version" "1.1.1" 939 | 940 | "picomatch@^2.0.4", "picomatch@^2.2.1": 941 | "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 942 | "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 943 | "version" "2.3.1" 944 | 945 | "randombytes@^2.1.0": 946 | "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" 947 | "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" 948 | "version" "2.1.0" 949 | dependencies: 950 | "safe-buffer" "^5.1.0" 951 | 952 | "readdirp@~3.6.0": 953 | "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" 954 | "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 955 | "version" "3.6.0" 956 | dependencies: 957 | "picomatch" "^2.2.1" 958 | 959 | "regenerator-runtime@^0.13.4": 960 | "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" 961 | "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" 962 | "version" "0.13.9" 963 | 964 | "require-directory@^2.1.1": 965 | "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 966 | "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" 967 | "version" "2.1.1" 968 | 969 | "rpc-websockets@^7.4.2": 970 | "integrity" "sha512-eolVi/qlXS13viIUH9aqrde902wzSLAai0IjmOZSRefp5I3CSG/vCnD0c0fDSYCWuEyUoRL1BHQA8K1baEUyow==" 971 | "resolved" "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.4.17.tgz" 972 | "version" "7.4.17" 973 | dependencies: 974 | "@babel/runtime" "^7.11.2" 975 | "circular-json" "^0.5.9" 976 | "eventemitter3" "^4.0.7" 977 | "uuid" "^8.3.0" 978 | "ws" "^7.4.5" 979 | optionalDependencies: 980 | "bufferutil" "^4.0.1" 981 | "utf-8-validate" "^5.0.2" 982 | 983 | "safe-buffer@^5.0.1", "safe-buffer@^5.1.0": 984 | "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 985 | "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" 986 | "version" "5.2.1" 987 | 988 | "secp256k1@^4.0.2": 989 | "integrity" "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==" 990 | "resolved" "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" 991 | "version" "4.0.3" 992 | dependencies: 993 | "elliptic" "^6.5.4" 994 | "node-addon-api" "^2.0.0" 995 | "node-gyp-build" "^4.2.0" 996 | 997 | "serialize-javascript@6.0.0": 998 | "integrity" "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==" 999 | "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" 1000 | "version" "6.0.0" 1001 | dependencies: 1002 | "randombytes" "^2.1.0" 1003 | 1004 | "snake-case@^3.0.4": 1005 | "integrity" "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==" 1006 | "resolved" "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" 1007 | "version" "3.0.4" 1008 | dependencies: 1009 | "dot-case" "^3.0.4" 1010 | "tslib" "^2.0.3" 1011 | 1012 | "source-map-support@^0.5.6": 1013 | "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" 1014 | "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" 1015 | "version" "0.5.21" 1016 | dependencies: 1017 | "buffer-from" "^1.0.0" 1018 | "source-map" "^0.6.0" 1019 | 1020 | "source-map@^0.6.0": 1021 | "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1022 | "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" 1023 | "version" "0.6.1" 1024 | 1025 | "string-width@^4.1.0", "string-width@^4.2.0": 1026 | "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" 1027 | "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1028 | "version" "4.2.3" 1029 | dependencies: 1030 | "emoji-regex" "^8.0.0" 1031 | "is-fullwidth-code-point" "^3.0.0" 1032 | "strip-ansi" "^6.0.1" 1033 | 1034 | "strip-ansi@^6.0.0", "strip-ansi@^6.0.1": 1035 | "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" 1036 | "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1037 | "version" "6.0.1" 1038 | dependencies: 1039 | "ansi-regex" "^5.0.1" 1040 | 1041 | "strip-bom@^3.0.0": 1042 | "integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" 1043 | "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 1044 | "version" "3.0.0" 1045 | 1046 | "strip-json-comments@3.1.1": 1047 | "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" 1048 | "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1049 | "version" "3.1.1" 1050 | 1051 | "superstruct@^0.14.2": 1052 | "integrity" "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==" 1053 | "resolved" "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz" 1054 | "version" "0.14.2" 1055 | 1056 | "supports-color@^7.1.0": 1057 | "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" 1058 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1059 | "version" "7.2.0" 1060 | dependencies: 1061 | "has-flag" "^4.0.0" 1062 | 1063 | "supports-color@8.1.1": 1064 | "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" 1065 | "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" 1066 | "version" "8.1.1" 1067 | dependencies: 1068 | "has-flag" "^4.0.0" 1069 | 1070 | "text-encoding-utf-8@^1.0.2": 1071 | "integrity" "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" 1072 | "resolved" "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" 1073 | "version" "1.0.2" 1074 | 1075 | "through@>=2.2.7 <3": 1076 | "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 1077 | "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1078 | "version" "2.3.8" 1079 | 1080 | "to-regex-range@^5.0.1": 1081 | "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" 1082 | "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1083 | "version" "5.0.1" 1084 | dependencies: 1085 | "is-number" "^7.0.0" 1086 | 1087 | "toml@^3.0.0": 1088 | "integrity" "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" 1089 | "resolved" "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz" 1090 | "version" "3.0.0" 1091 | 1092 | "tr46@~0.0.3": 1093 | "integrity" "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 1094 | "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" 1095 | "version" "0.0.3" 1096 | 1097 | "traverse-chain@~0.1.0": 1098 | "integrity" "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=" 1099 | "resolved" "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz" 1100 | "version" "0.1.0" 1101 | 1102 | "ts-mocha@^8.0.0": 1103 | "integrity" "sha512-Kou1yxTlubLnD5C3unlCVO7nh0HERTezjoVhVw/M5S1SqoUec0WgllQvPk3vzPMc6by8m6xD1uR1yRf8lnVUbA==" 1104 | "resolved" "https://registry.npmjs.org/ts-mocha/-/ts-mocha-8.0.0.tgz" 1105 | "version" "8.0.0" 1106 | dependencies: 1107 | "ts-node" "7.0.1" 1108 | optionalDependencies: 1109 | "tsconfig-paths" "^3.5.0" 1110 | 1111 | "ts-node@7.0.1": 1112 | "integrity" "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==" 1113 | "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz" 1114 | "version" "7.0.1" 1115 | dependencies: 1116 | "arrify" "^1.0.0" 1117 | "buffer-from" "^1.1.0" 1118 | "diff" "^3.1.0" 1119 | "make-error" "^1.1.1" 1120 | "minimist" "^1.2.0" 1121 | "mkdirp" "^0.5.1" 1122 | "source-map-support" "^0.5.6" 1123 | "yn" "^2.0.0" 1124 | 1125 | "tsconfig-paths@^3.5.0": 1126 | "integrity" "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==" 1127 | "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz" 1128 | "version" "3.12.0" 1129 | dependencies: 1130 | "@types/json5" "^0.0.29" 1131 | "json5" "^1.0.1" 1132 | "minimist" "^1.2.0" 1133 | "strip-bom" "^3.0.0" 1134 | 1135 | "tslib@^2.0.3": 1136 | "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" 1137 | "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" 1138 | "version" "2.3.1" 1139 | 1140 | "tweetnacl@^1.0.0": 1141 | "integrity" "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 1142 | "resolved" "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" 1143 | "version" "1.0.3" 1144 | 1145 | "type-detect@^4.0.0", "type-detect@^4.0.5": 1146 | "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" 1147 | "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" 1148 | "version" "4.0.8" 1149 | 1150 | "typescript@^4.3.5": 1151 | "integrity" "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" 1152 | "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz" 1153 | "version" "4.5.5" 1154 | 1155 | "utf-8-validate@^5.0.2": 1156 | "integrity" "sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA==" 1157 | "resolved" "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.8.tgz" 1158 | "version" "5.0.8" 1159 | dependencies: 1160 | "node-gyp-build" "^4.3.0" 1161 | 1162 | "uuid@^8.3.0", "uuid@^8.3.2": 1163 | "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" 1164 | "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" 1165 | "version" "8.3.2" 1166 | 1167 | "webidl-conversions@^3.0.0": 1168 | "integrity" "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 1169 | "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" 1170 | "version" "3.0.1" 1171 | 1172 | "whatwg-url@^5.0.0": 1173 | "integrity" "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=" 1174 | "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" 1175 | "version" "5.0.0" 1176 | dependencies: 1177 | "tr46" "~0.0.3" 1178 | "webidl-conversions" "^3.0.0" 1179 | 1180 | "which@2.0.2": 1181 | "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" 1182 | "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1183 | "version" "2.0.2" 1184 | dependencies: 1185 | "isexe" "^2.0.0" 1186 | 1187 | "workerpool@6.2.0": 1188 | "integrity" "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" 1189 | "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz" 1190 | "version" "6.2.0" 1191 | 1192 | "wrap-ansi@^7.0.0": 1193 | "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" 1194 | "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1195 | "version" "7.0.0" 1196 | dependencies: 1197 | "ansi-styles" "^4.0.0" 1198 | "string-width" "^4.1.0" 1199 | "strip-ansi" "^6.0.0" 1200 | 1201 | "wrappy@1": 1202 | "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1203 | "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1204 | "version" "1.0.2" 1205 | 1206 | "ws@*", "ws@^7.4.5": 1207 | "integrity" "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==" 1208 | "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz" 1209 | "version" "7.5.7" 1210 | 1211 | "y18n@^5.0.5": 1212 | "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 1213 | "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" 1214 | "version" "5.0.8" 1215 | 1216 | "yargs-parser@^20.2.2": 1217 | "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" 1218 | "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" 1219 | "version" "20.2.9" 1220 | 1221 | "yargs-parser@20.2.4": 1222 | "integrity" "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" 1223 | "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" 1224 | "version" "20.2.4" 1225 | 1226 | "yargs-unparser@2.0.0": 1227 | "integrity" "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==" 1228 | "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" 1229 | "version" "2.0.0" 1230 | dependencies: 1231 | "camelcase" "^6.0.0" 1232 | "decamelize" "^4.0.0" 1233 | "flat" "^5.0.2" 1234 | "is-plain-obj" "^2.1.0" 1235 | 1236 | "yargs@16.2.0": 1237 | "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" 1238 | "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" 1239 | "version" "16.2.0" 1240 | dependencies: 1241 | "cliui" "^7.0.2" 1242 | "escalade" "^3.1.1" 1243 | "get-caller-file" "^2.0.5" 1244 | "require-directory" "^2.1.1" 1245 | "string-width" "^4.2.0" 1246 | "y18n" "^5.0.5" 1247 | "yargs-parser" "^20.2.2" 1248 | 1249 | "yn@^2.0.0": 1250 | "integrity" "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" 1251 | "resolved" "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz" 1252 | "version" "2.0.0" 1253 | 1254 | "yocto-queue@^0.1.0": 1255 | "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" 1256 | "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 1257 | "version" "0.1.0" 1258 | --------------------------------------------------------------------------------