├── Anchor.toml ├── Cargo.lock ├── Cargo.toml ├── README.md ├── migrations └── deploy.ts ├── package.json ├── programs └── staking_program │ ├── Cargo.toml │ ├── Xargo.toml │ └── src │ ├── account.rs │ ├── constants.rs │ ├── error.rs │ ├── lib.rs │ └── utils.rs ├── test-keypair.json ├── tests └── staking_program.ts ├── tsconfig.json └── yarn.lock /Anchor.toml: -------------------------------------------------------------------------------- 1 | [programs.devnet] 2 | staking_program = "FbaMJWS14yAPH68LwFAHxaBSukgBHnAY9VaEfhFxWerb" 3 | 4 | [registry] 5 | url = "https://anchor.projectserum.com" 6 | 7 | [provider] 8 | 9 | #cluster = "devnet" 10 | cluster = "http://127.0.0.1:8899" 11 | #wallet = "/home/gitpod/.config/solana/id.json" 12 | wallet = "./test-keypair.json" 13 | 14 | [scripts] 15 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 16 | -------------------------------------------------------------------------------- /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.4.7" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" 10 | 11 | [[package]] 12 | name = "aho-corasick" 13 | version = "0.7.18" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 16 | dependencies = [ 17 | "memchr", 18 | ] 19 | 20 | [[package]] 21 | name = "anchor-attribute-access-control" 22 | version = "0.20.1" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "105c443a613f29212755fb6c5f946fa82dcf94a80528f643e0faa9d9faeb626b" 25 | dependencies = [ 26 | "anchor-syn", 27 | "anyhow", 28 | "proc-macro2", 29 | "quote", 30 | "regex", 31 | "syn", 32 | ] 33 | 34 | [[package]] 35 | name = "anchor-attribute-account" 36 | version = "0.20.1" 37 | source = "registry+https://github.com/rust-lang/crates.io-index" 38 | checksum = "fdae15851aa41972e9c18c987613c50a916c48c88c97ea3316156a5c772e5faa" 39 | dependencies = [ 40 | "anchor-syn", 41 | "anyhow", 42 | "bs58 0.4.0", 43 | "proc-macro2", 44 | "quote", 45 | "rustversion", 46 | "syn", 47 | ] 48 | 49 | [[package]] 50 | name = "anchor-attribute-constant" 51 | version = "0.20.1" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "6356865217881d0bbea8aa70625937bec6d9952610f1ba2a2452a8e427000687" 54 | dependencies = [ 55 | "anchor-syn", 56 | "proc-macro2", 57 | "syn", 58 | ] 59 | 60 | [[package]] 61 | name = "anchor-attribute-error" 62 | version = "0.20.1" 63 | source = "registry+https://github.com/rust-lang/crates.io-index" 64 | checksum = "ebe998ce4e6e0cb0e291d1a1626bd30791cdfdd9d05523111bdf4fd053f08636" 65 | dependencies = [ 66 | "anchor-syn", 67 | "proc-macro2", 68 | "quote", 69 | "syn", 70 | ] 71 | 72 | [[package]] 73 | name = "anchor-attribute-event" 74 | version = "0.20.1" 75 | source = "registry+https://github.com/rust-lang/crates.io-index" 76 | checksum = "c5810498a20554c20354f5648b6041172f2035e58d09ad40dc051dc0d1501f80" 77 | dependencies = [ 78 | "anchor-syn", 79 | "anyhow", 80 | "proc-macro2", 81 | "quote", 82 | "syn", 83 | ] 84 | 85 | [[package]] 86 | name = "anchor-attribute-interface" 87 | version = "0.20.1" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "ac83f085b2be8b3a3412989cf96cf7f683561db7d357c5aa4aa11d48bbb22213" 90 | dependencies = [ 91 | "anchor-syn", 92 | "anyhow", 93 | "heck", 94 | "proc-macro2", 95 | "quote", 96 | "syn", 97 | ] 98 | 99 | [[package]] 100 | name = "anchor-attribute-program" 101 | version = "0.20.1" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "73c56be575d89abcb192afa29deb87b2cdb3c39033abc02f2d16e6af999b23b7" 104 | dependencies = [ 105 | "anchor-syn", 106 | "anyhow", 107 | "proc-macro2", 108 | "quote", 109 | "syn", 110 | ] 111 | 112 | [[package]] 113 | name = "anchor-attribute-state" 114 | version = "0.20.1" 115 | source = "registry+https://github.com/rust-lang/crates.io-index" 116 | checksum = "62ab002353b01fcb4f72cca256d5d62db39f9ff39b1d072280deee9798f1f524" 117 | dependencies = [ 118 | "anchor-syn", 119 | "anyhow", 120 | "proc-macro2", 121 | "quote", 122 | "syn", 123 | ] 124 | 125 | [[package]] 126 | name = "anchor-derive-accounts" 127 | version = "0.20.1" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "e9e653cdb322078d95221384c4a527a403560e509ac7cb2b53d3bd664b23c4d6" 130 | dependencies = [ 131 | "anchor-syn", 132 | "anyhow", 133 | "proc-macro2", 134 | "quote", 135 | "syn", 136 | ] 137 | 138 | [[package]] 139 | name = "anchor-lang" 140 | version = "0.20.1" 141 | source = "registry+https://github.com/rust-lang/crates.io-index" 142 | checksum = "4815ad6334fd2f561f7ddcc3cfbeed87ed3003724171bd80ebe6383d5173ee8f" 143 | dependencies = [ 144 | "anchor-attribute-access-control", 145 | "anchor-attribute-account", 146 | "anchor-attribute-constant", 147 | "anchor-attribute-error", 148 | "anchor-attribute-event", 149 | "anchor-attribute-interface", 150 | "anchor-attribute-program", 151 | "anchor-attribute-state", 152 | "anchor-derive-accounts", 153 | "arrayref", 154 | "base64 0.13.0", 155 | "bincode", 156 | "borsh", 157 | "bytemuck", 158 | "solana-program", 159 | "thiserror", 160 | ] 161 | 162 | [[package]] 163 | name = "anchor-spl" 164 | version = "0.20.1" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "9ea94b04fc9a0aaae4d4473b0595fb5f55b6c9b38e0d6f596df8c8060f95f096" 167 | dependencies = [ 168 | "anchor-lang", 169 | "solana-program", 170 | "spl-associated-token-account", 171 | "spl-token", 172 | ] 173 | 174 | [[package]] 175 | name = "anchor-syn" 176 | version = "0.20.1" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "3be7bfb6991d79cce3495fb6ce0892f58a5c75a74c8d1c2fc6f62926066eb9f4" 179 | dependencies = [ 180 | "anyhow", 181 | "bs58 0.3.1", 182 | "heck", 183 | "proc-macro2", 184 | "proc-macro2-diagnostics", 185 | "quote", 186 | "serde", 187 | "serde_json", 188 | "sha2", 189 | "syn", 190 | "thiserror", 191 | ] 192 | 193 | [[package]] 194 | name = "anyhow" 195 | version = "1.0.53" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" 198 | 199 | [[package]] 200 | name = "arrayref" 201 | version = "0.3.6" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 204 | 205 | [[package]] 206 | name = "arrayvec" 207 | version = "0.7.2" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 210 | 211 | [[package]] 212 | name = "atty" 213 | version = "0.2.14" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 216 | dependencies = [ 217 | "hermit-abi", 218 | "libc", 219 | "winapi", 220 | ] 221 | 222 | [[package]] 223 | name = "autocfg" 224 | version = "1.0.1" 225 | source = "registry+https://github.com/rust-lang/crates.io-index" 226 | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" 227 | 228 | [[package]] 229 | name = "base64" 230 | version = "0.12.3" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 233 | 234 | [[package]] 235 | name = "base64" 236 | version = "0.13.0" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 239 | 240 | [[package]] 241 | name = "bincode" 242 | version = "1.3.3" 243 | source = "registry+https://github.com/rust-lang/crates.io-index" 244 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 245 | dependencies = [ 246 | "serde", 247 | ] 248 | 249 | [[package]] 250 | name = "bitflags" 251 | version = "1.3.2" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 254 | 255 | [[package]] 256 | name = "blake3" 257 | version = "1.3.0" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "882e99e4a0cb2ae6cb6e442102e8e6b7131718d94110e64c3e6a34ea9b106f37" 260 | dependencies = [ 261 | "arrayref", 262 | "arrayvec", 263 | "cc", 264 | "cfg-if", 265 | "constant_time_eq", 266 | "digest 0.10.1", 267 | ] 268 | 269 | [[package]] 270 | name = "block-buffer" 271 | version = "0.9.0" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 274 | dependencies = [ 275 | "block-padding", 276 | "generic-array", 277 | ] 278 | 279 | [[package]] 280 | name = "block-buffer" 281 | version = "0.10.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95" 284 | dependencies = [ 285 | "generic-array", 286 | ] 287 | 288 | [[package]] 289 | name = "block-padding" 290 | version = "0.2.1" 291 | source = "registry+https://github.com/rust-lang/crates.io-index" 292 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 293 | 294 | [[package]] 295 | name = "borsh" 296 | version = "0.9.1" 297 | source = "registry+https://github.com/rust-lang/crates.io-index" 298 | checksum = "18dda7dc709193c0d86a1a51050a926dc3df1cf262ec46a23a25dba421ea1924" 299 | dependencies = [ 300 | "borsh-derive", 301 | "hashbrown", 302 | ] 303 | 304 | [[package]] 305 | name = "borsh-derive" 306 | version = "0.9.1" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "684155372435f578c0fa1acd13ebbb182cc19d6b38b64ae7901da4393217d264" 309 | dependencies = [ 310 | "borsh-derive-internal", 311 | "borsh-schema-derive-internal", 312 | "proc-macro-crate 0.1.5", 313 | "proc-macro2", 314 | "syn", 315 | ] 316 | 317 | [[package]] 318 | name = "borsh-derive-internal" 319 | version = "0.9.1" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "2102f62f8b6d3edeab871830782285b64cc1830168094db05c8e458f209bc5c3" 322 | dependencies = [ 323 | "proc-macro2", 324 | "quote", 325 | "syn", 326 | ] 327 | 328 | [[package]] 329 | name = "borsh-schema-derive-internal" 330 | version = "0.9.1" 331 | source = "registry+https://github.com/rust-lang/crates.io-index" 332 | checksum = "196c978c4c9b0b142d446ef3240690bf5a8a33497074a113ff9a337ccb750483" 333 | dependencies = [ 334 | "proc-macro2", 335 | "quote", 336 | "syn", 337 | ] 338 | 339 | [[package]] 340 | name = "bs58" 341 | version = "0.3.1" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" 344 | 345 | [[package]] 346 | name = "bs58" 347 | version = "0.4.0" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 350 | 351 | [[package]] 352 | name = "bumpalo" 353 | version = "3.9.1" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" 356 | 357 | [[package]] 358 | name = "bv" 359 | version = "0.11.1" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 362 | dependencies = [ 363 | "feature-probe", 364 | "serde", 365 | ] 366 | 367 | [[package]] 368 | name = "bytemuck" 369 | version = "1.7.3" 370 | source = "registry+https://github.com/rust-lang/crates.io-index" 371 | checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f" 372 | dependencies = [ 373 | "bytemuck_derive", 374 | ] 375 | 376 | [[package]] 377 | name = "bytemuck_derive" 378 | version = "1.0.1" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54" 381 | dependencies = [ 382 | "proc-macro2", 383 | "quote", 384 | "syn", 385 | ] 386 | 387 | [[package]] 388 | name = "byteorder" 389 | version = "1.4.3" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 392 | 393 | [[package]] 394 | name = "cc" 395 | version = "1.0.72" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" 398 | 399 | [[package]] 400 | name = "cfg-if" 401 | version = "1.0.0" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 404 | 405 | [[package]] 406 | name = "console_error_panic_hook" 407 | version = "0.1.7" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 410 | dependencies = [ 411 | "cfg-if", 412 | "wasm-bindgen", 413 | ] 414 | 415 | [[package]] 416 | name = "console_log" 417 | version = "0.2.0" 418 | source = "registry+https://github.com/rust-lang/crates.io-index" 419 | checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" 420 | dependencies = [ 421 | "log", 422 | "web-sys", 423 | ] 424 | 425 | [[package]] 426 | name = "constant_time_eq" 427 | version = "0.1.5" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 430 | 431 | [[package]] 432 | name = "cpufeatures" 433 | version = "0.2.1" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" 436 | dependencies = [ 437 | "libc", 438 | ] 439 | 440 | [[package]] 441 | name = "crunchy" 442 | version = "0.2.2" 443 | source = "registry+https://github.com/rust-lang/crates.io-index" 444 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 445 | 446 | [[package]] 447 | name = "crypto-common" 448 | version = "0.1.1" 449 | source = "registry+https://github.com/rust-lang/crates.io-index" 450 | checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0" 451 | dependencies = [ 452 | "generic-array", 453 | ] 454 | 455 | [[package]] 456 | name = "crypto-mac" 457 | version = "0.8.0" 458 | source = "registry+https://github.com/rust-lang/crates.io-index" 459 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 460 | dependencies = [ 461 | "generic-array", 462 | "subtle", 463 | ] 464 | 465 | [[package]] 466 | name = "curve25519-dalek" 467 | version = "3.2.0" 468 | source = "registry+https://github.com/rust-lang/crates.io-index" 469 | checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" 470 | dependencies = [ 471 | "byteorder", 472 | "digest 0.9.0", 473 | "rand_core", 474 | "subtle", 475 | "zeroize", 476 | ] 477 | 478 | [[package]] 479 | name = "digest" 480 | version = "0.9.0" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 483 | dependencies = [ 484 | "generic-array", 485 | ] 486 | 487 | [[package]] 488 | name = "digest" 489 | version = "0.10.1" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b" 492 | dependencies = [ 493 | "block-buffer 0.10.0", 494 | "crypto-common", 495 | "generic-array", 496 | "subtle", 497 | ] 498 | 499 | [[package]] 500 | name = "either" 501 | version = "1.6.1" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" 504 | 505 | [[package]] 506 | name = "env_logger" 507 | version = "0.9.0" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" 510 | dependencies = [ 511 | "atty", 512 | "humantime", 513 | "log", 514 | "regex", 515 | "termcolor", 516 | ] 517 | 518 | [[package]] 519 | name = "feature-probe" 520 | version = "0.1.1" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 523 | 524 | [[package]] 525 | name = "generic-array" 526 | version = "0.14.5" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" 529 | dependencies = [ 530 | "serde", 531 | "typenum", 532 | "version_check", 533 | ] 534 | 535 | [[package]] 536 | name = "getrandom" 537 | version = "0.1.16" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 540 | dependencies = [ 541 | "cfg-if", 542 | "js-sys", 543 | "libc", 544 | "wasi", 545 | "wasm-bindgen", 546 | ] 547 | 548 | [[package]] 549 | name = "hashbrown" 550 | version = "0.9.1" 551 | source = "registry+https://github.com/rust-lang/crates.io-index" 552 | checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" 553 | dependencies = [ 554 | "ahash", 555 | ] 556 | 557 | [[package]] 558 | name = "heck" 559 | version = "0.3.3" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 562 | dependencies = [ 563 | "unicode-segmentation", 564 | ] 565 | 566 | [[package]] 567 | name = "hermit-abi" 568 | version = "0.1.19" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 571 | dependencies = [ 572 | "libc", 573 | ] 574 | 575 | [[package]] 576 | name = "hmac" 577 | version = "0.8.1" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 580 | dependencies = [ 581 | "crypto-mac", 582 | "digest 0.9.0", 583 | ] 584 | 585 | [[package]] 586 | name = "hmac-drbg" 587 | version = "0.3.0" 588 | source = "registry+https://github.com/rust-lang/crates.io-index" 589 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 590 | dependencies = [ 591 | "digest 0.9.0", 592 | "generic-array", 593 | "hmac", 594 | ] 595 | 596 | [[package]] 597 | name = "humantime" 598 | version = "2.1.0" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 601 | 602 | [[package]] 603 | name = "instant" 604 | version = "0.1.12" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 607 | dependencies = [ 608 | "cfg-if", 609 | ] 610 | 611 | [[package]] 612 | name = "itertools" 613 | version = "0.10.3" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 616 | dependencies = [ 617 | "either", 618 | ] 619 | 620 | [[package]] 621 | name = "itoa" 622 | version = "1.0.1" 623 | source = "registry+https://github.com/rust-lang/crates.io-index" 624 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" 625 | 626 | [[package]] 627 | name = "js-sys" 628 | version = "0.3.56" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" 631 | dependencies = [ 632 | "wasm-bindgen", 633 | ] 634 | 635 | [[package]] 636 | name = "keccak" 637 | version = "0.1.0" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" 640 | 641 | [[package]] 642 | name = "lazy_static" 643 | version = "1.4.0" 644 | source = "registry+https://github.com/rust-lang/crates.io-index" 645 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 646 | 647 | [[package]] 648 | name = "libc" 649 | version = "0.2.113" 650 | source = "registry+https://github.com/rust-lang/crates.io-index" 651 | checksum = "eef78b64d87775463c549fbd80e19249ef436ea3bf1de2a1eb7e717ec7fab1e9" 652 | 653 | [[package]] 654 | name = "libsecp256k1" 655 | version = "0.6.0" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 658 | dependencies = [ 659 | "arrayref", 660 | "base64 0.12.3", 661 | "digest 0.9.0", 662 | "hmac-drbg", 663 | "libsecp256k1-core", 664 | "libsecp256k1-gen-ecmult", 665 | "libsecp256k1-gen-genmult", 666 | "rand", 667 | "serde", 668 | "sha2", 669 | "typenum", 670 | ] 671 | 672 | [[package]] 673 | name = "libsecp256k1-core" 674 | version = "0.2.2" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 677 | dependencies = [ 678 | "crunchy", 679 | "digest 0.9.0", 680 | "subtle", 681 | ] 682 | 683 | [[package]] 684 | name = "libsecp256k1-gen-ecmult" 685 | version = "0.2.1" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 688 | dependencies = [ 689 | "libsecp256k1-core", 690 | ] 691 | 692 | [[package]] 693 | name = "libsecp256k1-gen-genmult" 694 | version = "0.2.1" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 697 | dependencies = [ 698 | "libsecp256k1-core", 699 | ] 700 | 701 | [[package]] 702 | name = "lock_api" 703 | version = "0.4.5" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" 706 | dependencies = [ 707 | "scopeguard", 708 | ] 709 | 710 | [[package]] 711 | name = "log" 712 | version = "0.4.14" 713 | source = "registry+https://github.com/rust-lang/crates.io-index" 714 | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" 715 | dependencies = [ 716 | "cfg-if", 717 | ] 718 | 719 | [[package]] 720 | name = "memchr" 721 | version = "2.4.1" 722 | source = "registry+https://github.com/rust-lang/crates.io-index" 723 | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" 724 | 725 | [[package]] 726 | name = "memmap2" 727 | version = "0.5.2" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "fe3179b85e1fd8b14447cbebadb75e45a1002f541b925f0bfec366d56a81c56d" 730 | dependencies = [ 731 | "libc", 732 | ] 733 | 734 | [[package]] 735 | name = "num-derive" 736 | version = "0.3.3" 737 | source = "registry+https://github.com/rust-lang/crates.io-index" 738 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 739 | dependencies = [ 740 | "proc-macro2", 741 | "quote", 742 | "syn", 743 | ] 744 | 745 | [[package]] 746 | name = "num-traits" 747 | version = "0.2.14" 748 | source = "registry+https://github.com/rust-lang/crates.io-index" 749 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" 750 | dependencies = [ 751 | "autocfg", 752 | ] 753 | 754 | [[package]] 755 | name = "num_enum" 756 | version = "0.5.6" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "720d3ea1055e4e4574c0c0b0f8c3fd4f24c4cdaf465948206dea090b57b526ad" 759 | dependencies = [ 760 | "num_enum_derive", 761 | ] 762 | 763 | [[package]] 764 | name = "num_enum_derive" 765 | version = "0.5.6" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21" 768 | dependencies = [ 769 | "proc-macro-crate 1.1.0", 770 | "proc-macro2", 771 | "quote", 772 | "syn", 773 | ] 774 | 775 | [[package]] 776 | name = "opaque-debug" 777 | version = "0.3.0" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 780 | 781 | [[package]] 782 | name = "parking_lot" 783 | version = "0.11.2" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 786 | dependencies = [ 787 | "instant", 788 | "lock_api", 789 | "parking_lot_core", 790 | ] 791 | 792 | [[package]] 793 | name = "parking_lot_core" 794 | version = "0.8.5" 795 | source = "registry+https://github.com/rust-lang/crates.io-index" 796 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 797 | dependencies = [ 798 | "cfg-if", 799 | "instant", 800 | "libc", 801 | "redox_syscall", 802 | "smallvec", 803 | "winapi", 804 | ] 805 | 806 | [[package]] 807 | name = "ppv-lite86" 808 | version = "0.2.16" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 811 | 812 | [[package]] 813 | name = "proc-macro-crate" 814 | version = "0.1.5" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 817 | dependencies = [ 818 | "toml", 819 | ] 820 | 821 | [[package]] 822 | name = "proc-macro-crate" 823 | version = "1.1.0" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" 826 | dependencies = [ 827 | "thiserror", 828 | "toml", 829 | ] 830 | 831 | [[package]] 832 | name = "proc-macro2" 833 | version = "1.0.36" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" 836 | dependencies = [ 837 | "unicode-xid", 838 | ] 839 | 840 | [[package]] 841 | name = "proc-macro2-diagnostics" 842 | version = "0.9.1" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" 845 | dependencies = [ 846 | "proc-macro2", 847 | "quote", 848 | "syn", 849 | "version_check", 850 | "yansi", 851 | ] 852 | 853 | [[package]] 854 | name = "quote" 855 | version = "1.0.15" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" 858 | dependencies = [ 859 | "proc-macro2", 860 | ] 861 | 862 | [[package]] 863 | name = "rand" 864 | version = "0.7.3" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 867 | dependencies = [ 868 | "getrandom", 869 | "libc", 870 | "rand_chacha", 871 | "rand_core", 872 | "rand_hc", 873 | ] 874 | 875 | [[package]] 876 | name = "rand_chacha" 877 | version = "0.2.2" 878 | source = "registry+https://github.com/rust-lang/crates.io-index" 879 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 880 | dependencies = [ 881 | "ppv-lite86", 882 | "rand_core", 883 | ] 884 | 885 | [[package]] 886 | name = "rand_core" 887 | version = "0.5.1" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 890 | dependencies = [ 891 | "getrandom", 892 | ] 893 | 894 | [[package]] 895 | name = "rand_hc" 896 | version = "0.2.0" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 899 | dependencies = [ 900 | "rand_core", 901 | ] 902 | 903 | [[package]] 904 | name = "redox_syscall" 905 | version = "0.2.10" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" 908 | dependencies = [ 909 | "bitflags", 910 | ] 911 | 912 | [[package]] 913 | name = "regex" 914 | version = "1.5.4" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" 917 | dependencies = [ 918 | "aho-corasick", 919 | "memchr", 920 | "regex-syntax", 921 | ] 922 | 923 | [[package]] 924 | name = "regex-syntax" 925 | version = "0.6.25" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" 928 | 929 | [[package]] 930 | name = "rustc_version" 931 | version = "0.4.0" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 934 | dependencies = [ 935 | "semver", 936 | ] 937 | 938 | [[package]] 939 | name = "rustversion" 940 | version = "1.0.6" 941 | source = "registry+https://github.com/rust-lang/crates.io-index" 942 | checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" 943 | 944 | [[package]] 945 | name = "ryu" 946 | version = "1.0.9" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" 949 | 950 | [[package]] 951 | name = "scopeguard" 952 | version = "1.1.0" 953 | source = "registry+https://github.com/rust-lang/crates.io-index" 954 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 955 | 956 | [[package]] 957 | name = "semver" 958 | version = "1.0.4" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" 961 | 962 | [[package]] 963 | name = "serde" 964 | version = "1.0.134" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "96b3c34c1690edf8174f5b289a336ab03f568a4460d8c6df75f2f3a692b3bc6a" 967 | dependencies = [ 968 | "serde_derive", 969 | ] 970 | 971 | [[package]] 972 | name = "serde_bytes" 973 | version = "0.11.5" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" 976 | dependencies = [ 977 | "serde", 978 | ] 979 | 980 | [[package]] 981 | name = "serde_derive" 982 | version = "1.0.134" 983 | source = "registry+https://github.com/rust-lang/crates.io-index" 984 | checksum = "784ed1fbfa13fe191077537b0d70ec8ad1e903cfe04831da608aa36457cb653d" 985 | dependencies = [ 986 | "proc-macro2", 987 | "quote", 988 | "syn", 989 | ] 990 | 991 | [[package]] 992 | name = "serde_json" 993 | version = "1.0.75" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "c059c05b48c5c0067d4b4b2b4f0732dd65feb52daf7e0ea09cd87e7dadc1af79" 996 | dependencies = [ 997 | "itoa", 998 | "ryu", 999 | "serde", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "sha2" 1004 | version = "0.9.9" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1007 | dependencies = [ 1008 | "block-buffer 0.9.0", 1009 | "cfg-if", 1010 | "cpufeatures", 1011 | "digest 0.9.0", 1012 | "opaque-debug", 1013 | ] 1014 | 1015 | [[package]] 1016 | name = "sha3" 1017 | version = "0.9.1" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 1020 | dependencies = [ 1021 | "block-buffer 0.9.0", 1022 | "digest 0.9.0", 1023 | "keccak", 1024 | "opaque-debug", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "smallvec" 1029 | version = "1.8.0" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" 1032 | 1033 | [[package]] 1034 | name = "solana-frozen-abi" 1035 | version = "1.9.5" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "fbb58e258da28e714904b62a1e8b7de5b01d349420a88409c84cb57264699021" 1038 | dependencies = [ 1039 | "bs58 0.4.0", 1040 | "bv", 1041 | "generic-array", 1042 | "log", 1043 | "memmap2", 1044 | "rustc_version", 1045 | "serde", 1046 | "serde_derive", 1047 | "sha2", 1048 | "solana-frozen-abi-macro", 1049 | "solana-logger", 1050 | "thiserror", 1051 | ] 1052 | 1053 | [[package]] 1054 | name = "solana-frozen-abi-macro" 1055 | version = "1.9.5" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | checksum = "7f9c141ee23138a001bf94a9850fff3c8804e52fa36c151a8a4699f60bd55f74" 1058 | dependencies = [ 1059 | "proc-macro2", 1060 | "quote", 1061 | "rustc_version", 1062 | "syn", 1063 | ] 1064 | 1065 | [[package]] 1066 | name = "solana-logger" 1067 | version = "1.9.5" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "72b63b04c1a2077f2eadb3c63988a14bc4fa4419f291fea7112a9c595db1e63b" 1070 | dependencies = [ 1071 | "env_logger", 1072 | "lazy_static", 1073 | "log", 1074 | ] 1075 | 1076 | [[package]] 1077 | name = "solana-program" 1078 | version = "1.9.5" 1079 | source = "registry+https://github.com/rust-lang/crates.io-index" 1080 | checksum = "0c41b2af0be4fc039852c74926a8a026e97f9b1d7c02c15610bb6a614268a4ea" 1081 | dependencies = [ 1082 | "base64 0.13.0", 1083 | "bincode", 1084 | "bitflags", 1085 | "blake3", 1086 | "borsh", 1087 | "borsh-derive", 1088 | "bs58 0.4.0", 1089 | "bv", 1090 | "bytemuck", 1091 | "console_error_panic_hook", 1092 | "console_log", 1093 | "curve25519-dalek", 1094 | "getrandom", 1095 | "itertools", 1096 | "js-sys", 1097 | "lazy_static", 1098 | "libsecp256k1", 1099 | "log", 1100 | "num-derive", 1101 | "num-traits", 1102 | "parking_lot", 1103 | "rand", 1104 | "rustc_version", 1105 | "rustversion", 1106 | "serde", 1107 | "serde_bytes", 1108 | "serde_derive", 1109 | "sha2", 1110 | "sha3", 1111 | "solana-frozen-abi", 1112 | "solana-frozen-abi-macro", 1113 | "solana-logger", 1114 | "solana-sdk-macro", 1115 | "thiserror", 1116 | "wasm-bindgen", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "solana-sdk-macro" 1121 | version = "1.9.5" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "238b93350286f73c2bd94c1a307bb0226a2f78070937bcf273bf968859f8cc39" 1124 | dependencies = [ 1125 | "bs58 0.4.0", 1126 | "proc-macro2", 1127 | "quote", 1128 | "rustversion", 1129 | "syn", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "spl-associated-token-account" 1134 | version = "1.0.4" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "44a7b802822cb7d3bee094acb356661b33d1372ef59488eaf69911af2ad9a45e" 1137 | dependencies = [ 1138 | "borsh", 1139 | "solana-program", 1140 | "spl-token", 1141 | ] 1142 | 1143 | [[package]] 1144 | name = "spl-token" 1145 | version = "3.3.0" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "0cc67166ef99d10c18cb5e9c208901e6d8255c6513bb1f877977eba48e6cc4fb" 1148 | dependencies = [ 1149 | "arrayref", 1150 | "num-derive", 1151 | "num-traits", 1152 | "num_enum", 1153 | "solana-program", 1154 | "thiserror", 1155 | ] 1156 | 1157 | [[package]] 1158 | name = "staking_program" 1159 | version = "0.1.0" 1160 | dependencies = [ 1161 | "anchor-lang", 1162 | "anchor-spl", 1163 | "solana-program", 1164 | "spl-token", 1165 | ] 1166 | 1167 | [[package]] 1168 | name = "subtle" 1169 | version = "2.4.1" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1172 | 1173 | [[package]] 1174 | name = "syn" 1175 | version = "1.0.86" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" 1178 | dependencies = [ 1179 | "proc-macro2", 1180 | "quote", 1181 | "unicode-xid", 1182 | ] 1183 | 1184 | [[package]] 1185 | name = "termcolor" 1186 | version = "1.1.2" 1187 | source = "registry+https://github.com/rust-lang/crates.io-index" 1188 | checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" 1189 | dependencies = [ 1190 | "winapi-util", 1191 | ] 1192 | 1193 | [[package]] 1194 | name = "thiserror" 1195 | version = "1.0.30" 1196 | source = "registry+https://github.com/rust-lang/crates.io-index" 1197 | checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" 1198 | dependencies = [ 1199 | "thiserror-impl", 1200 | ] 1201 | 1202 | [[package]] 1203 | name = "thiserror-impl" 1204 | version = "1.0.30" 1205 | source = "registry+https://github.com/rust-lang/crates.io-index" 1206 | checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" 1207 | dependencies = [ 1208 | "proc-macro2", 1209 | "quote", 1210 | "syn", 1211 | ] 1212 | 1213 | [[package]] 1214 | name = "toml" 1215 | version = "0.5.8" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" 1218 | dependencies = [ 1219 | "serde", 1220 | ] 1221 | 1222 | [[package]] 1223 | name = "typenum" 1224 | version = "1.15.0" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1227 | 1228 | [[package]] 1229 | name = "unicode-segmentation" 1230 | version = "1.8.0" 1231 | source = "registry+https://github.com/rust-lang/crates.io-index" 1232 | checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" 1233 | 1234 | [[package]] 1235 | name = "unicode-xid" 1236 | version = "0.2.2" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" 1239 | 1240 | [[package]] 1241 | name = "version_check" 1242 | version = "0.9.4" 1243 | source = "registry+https://github.com/rust-lang/crates.io-index" 1244 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1245 | 1246 | [[package]] 1247 | name = "wasi" 1248 | version = "0.9.0+wasi-snapshot-preview1" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1251 | 1252 | [[package]] 1253 | name = "wasm-bindgen" 1254 | version = "0.2.79" 1255 | source = "registry+https://github.com/rust-lang/crates.io-index" 1256 | checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" 1257 | dependencies = [ 1258 | "cfg-if", 1259 | "wasm-bindgen-macro", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "wasm-bindgen-backend" 1264 | version = "0.2.79" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" 1267 | dependencies = [ 1268 | "bumpalo", 1269 | "lazy_static", 1270 | "log", 1271 | "proc-macro2", 1272 | "quote", 1273 | "syn", 1274 | "wasm-bindgen-shared", 1275 | ] 1276 | 1277 | [[package]] 1278 | name = "wasm-bindgen-macro" 1279 | version = "0.2.79" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" 1282 | dependencies = [ 1283 | "quote", 1284 | "wasm-bindgen-macro-support", 1285 | ] 1286 | 1287 | [[package]] 1288 | name = "wasm-bindgen-macro-support" 1289 | version = "0.2.79" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" 1292 | dependencies = [ 1293 | "proc-macro2", 1294 | "quote", 1295 | "syn", 1296 | "wasm-bindgen-backend", 1297 | "wasm-bindgen-shared", 1298 | ] 1299 | 1300 | [[package]] 1301 | name = "wasm-bindgen-shared" 1302 | version = "0.2.79" 1303 | source = "registry+https://github.com/rust-lang/crates.io-index" 1304 | checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" 1305 | 1306 | [[package]] 1307 | name = "web-sys" 1308 | version = "0.3.56" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" 1311 | dependencies = [ 1312 | "js-sys", 1313 | "wasm-bindgen", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "winapi" 1318 | version = "0.3.9" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1321 | dependencies = [ 1322 | "winapi-i686-pc-windows-gnu", 1323 | "winapi-x86_64-pc-windows-gnu", 1324 | ] 1325 | 1326 | [[package]] 1327 | name = "winapi-i686-pc-windows-gnu" 1328 | version = "0.4.0" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1331 | 1332 | [[package]] 1333 | name = "winapi-util" 1334 | version = "0.1.5" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1337 | dependencies = [ 1338 | "winapi", 1339 | ] 1340 | 1341 | [[package]] 1342 | name = "winapi-x86_64-pc-windows-gnu" 1343 | version = "0.4.0" 1344 | source = "registry+https://github.com/rust-lang/crates.io-index" 1345 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1346 | 1347 | [[package]] 1348 | name = "yansi" 1349 | version = "0.5.0" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" 1352 | 1353 | [[package]] 1354 | name = "zeroize" 1355 | version = "1.5.0" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "cc222aec311c323c717f56060324f32b82da1ce1dd81d9a09aa6a9030bfe08db" 1358 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "programs/*" 4 | ] 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # solana staking contract 2 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@project-serum/anchor": "^0.20.1", 4 | "@solana/spl-token": "^0.1.8", 5 | "bs58": "^4.0.1" 6 | }, 7 | "devDependencies": { 8 | "@types/mocha": "^9.0.0", 9 | "chai": "^4.3.4", 10 | "mocha": "^9.0.3", 11 | "ts-mocha": "^8.0.0", 12 | "typescript": "^4.3.5" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /programs/staking_program/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "staking_program" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2018" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "staking_program" 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" -------------------------------------------------------------------------------- /programs/staking_program/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /programs/staking_program/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 | #[account(zero_copy)] 23 | pub struct GlobalLotteryPool { 24 | // 360_016 25 | pub lottery_items: [Item; NFT_TOTAL_COUNT], // 72 * 5000 = 360_000 26 | pub item_count: u64 // 8 27 | } 28 | impl Default for GlobalLotteryPool { 29 | #[inline] 30 | fn default() -> GlobalLotteryPool { 31 | GlobalLotteryPool { 32 | lottery_items: [ 33 | Item { 34 | ..Default::default() 35 | }; NFT_TOTAL_COUNT 36 | ], 37 | item_count: 0 38 | } 39 | } 40 | } 41 | impl GlobalLotteryPool { 42 | pub fn add_nft(&mut self, item: Item) { 43 | self.lottery_items[self.item_count as usize] = item; 44 | self.item_count += 1; 45 | } 46 | pub fn remove_nft(&mut self, owner: Pubkey, nft_mint: Pubkey, index: u64) -> Result<()> { 47 | require!(self.item_count > index, StakingError::IndexOverflow); 48 | require!(self.lottery_items[index as usize].nft_addr.eq(&nft_mint), StakingError::InvalidNFTAddress); 49 | require!(self.lottery_items[index as usize].owner.eq(&owner), StakingError::InvalidOwner); 50 | // remove nft 51 | if index != self.item_count - 1 { 52 | let last_idx = self.item_count - 1; 53 | self.lottery_items[index as usize] = self.lottery_items[last_idx as usize]; 54 | } 55 | self.item_count -= 1; 56 | Ok(()) 57 | } 58 | } 59 | 60 | #[zero_copy] 61 | #[derive(Default, PartialEq)] 62 | pub struct StakedNFT { 63 | pub nft_addr: Pubkey, // 32 64 | pub stake_time: i64, // 8 65 | } 66 | 67 | #[account(zero_copy)] 68 | pub struct UserPool { 69 | // 2064 70 | pub owner: Pubkey, // 32 71 | pub item_count: u64, // 8 72 | pub items: [StakedNFT; NFT_STAKE_MAX_COUNT], // 40 * 50 = 2000 73 | pub reward_time: i64, // 8 74 | pub pending_reward: u64 // 8 75 | } 76 | impl Default for UserPool { 77 | #[inline] 78 | fn default() -> UserPool { 79 | UserPool { 80 | owner: Pubkey::default(), 81 | item_count: 0, 82 | items: [ 83 | StakedNFT { 84 | ..Default::default() 85 | }; NFT_STAKE_MAX_COUNT 86 | ], 87 | reward_time: 0, 88 | pending_reward: 0 89 | } 90 | } 91 | } 92 | 93 | impl UserPool { 94 | pub fn add_nft(&mut self, item: StakedNFT) { 95 | self.items[self.item_count as usize] = item; 96 | self.item_count += 1; 97 | } 98 | pub fn remove_nft(&mut self, owner: Pubkey, nft_mint: Pubkey, now: i64) -> Result { 99 | require!(self.owner.eq(&owner), StakingError::InvalidOwner); 100 | let mut withdrawn: u8 = 0; 101 | let mut reward: u64 = 0; 102 | for i in 0..self.item_count { 103 | let index = i as usize; 104 | if self.items[index].nft_addr.eq(&nft_mint) { 105 | 106 | //require!(self.items[index].stake_time + LIMIT_PERIOD <= now, StakingError::InvalidWithdrawTime); 107 | let mut last_reward_time = self.reward_time; 108 | if last_reward_time < self.items[index].stake_time { 109 | last_reward_time = self.items[index].stake_time; 110 | } 111 | reward = (((now - last_reward_time) / DAY) as u64) * REWARD_PER_DAY; 112 | // remove nft 113 | if i != self.item_count - 1 { 114 | let last_idx = self.item_count - 1; 115 | self.items[index] = self.items[last_idx as usize]; 116 | } 117 | self.item_count -= 1; 118 | withdrawn = 1; 119 | break; 120 | } 121 | } 122 | require!(withdrawn == 1, StakingError::InvalidNFTAddress); 123 | Ok(reward) 124 | } 125 | pub fn claim_reward(&mut self, now: i64) -> Result { 126 | let mut total_reward: u64 = 0; 127 | for i in 0..self.item_count { 128 | let index = i as usize; 129 | //require!(self.items[index].stake_time + LIMIT_PERIOD <= now, StakingError::InvalidWithdrawTime); 130 | let mut last_reward_time = self.reward_time; 131 | if last_reward_time < self.items[index].stake_time { 132 | last_reward_time = self.items[index].stake_time; 133 | } 134 | let reward = (((now - last_reward_time) / DAY) as u64) * REWARD_PER_DAY; 135 | total_reward += reward; 136 | } 137 | total_reward += self.pending_reward; 138 | self.pending_reward = 0; 139 | self.reward_time = now; 140 | Ok(total_reward) 141 | } 142 | } 143 | 144 | -------------------------------------------------------------------------------- /programs/staking_program/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 | 7 | pub const DAY: i64 = 60 * 1;//60 * 60 * 24; // 1 mins 8 | pub const LIMIT_PERIOD: i64 = 60*10;//DAY * 15; 9 | pub const REWARD_PER_DAY: u64 = 2 * 10_000_000; -------------------------------------------------------------------------------- /programs/staking_program/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 | } -------------------------------------------------------------------------------- /programs/staking_program/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use anchor_spl::{ 3 | associated_token::AssociatedToken, 4 | token::{self, Token, TokenAccount, Mint, Transfer } 5 | }; 6 | 7 | pub mod account; 8 | pub mod error; 9 | pub mod constants; 10 | pub mod utils; 11 | 12 | use account::*; 13 | use constants::*; 14 | use error::*; 15 | use utils::*; 16 | 17 | declare_id!("FbaMJWS14yAPH68LwFAHxaBSukgBHnAY9VaEfhFxWerb"); 18 | 19 | #[program] 20 | pub mod staking_program { 21 | use super::*; 22 | pub fn initialize( 23 | ctx: Context, 24 | global_bump: u8, 25 | pool_wallet_bump: u8 26 | ) -> ProgramResult { 27 | ctx.accounts.global_lottery_pool.load_init()?; 28 | Ok(()) 29 | } 30 | 31 | pub fn initialize_lottery_pool( 32 | ctx: Context 33 | ) -> ProgramResult { 34 | let mut lottery_pool = ctx.accounts.user_lottery_pool.load_init()?; 35 | lottery_pool.owner = ctx.accounts.owner.key(); 36 | Ok(()) 37 | } 38 | 39 | pub fn initialize_fixed_pool( 40 | ctx: Context 41 | ) -> ProgramResult { 42 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_init()?; 43 | fixed_pool.owner = ctx.accounts.owner.key(); 44 | Ok(()) 45 | } 46 | 47 | #[access_control(user(&ctx.accounts.user_lottery_pool, &ctx.accounts.owner))] 48 | pub fn stake_nft_to_lottery( 49 | ctx: Context, 50 | global_bump: u8, 51 | staked_nft_bump: u8, 52 | ) -> ProgramResult { 53 | 54 | let timestamp = Clock::get()?.unix_timestamp; 55 | 56 | let staked_item = StakedNFT { 57 | nft_addr: ctx.accounts.nft_mint.key(), 58 | stake_time: timestamp, 59 | }; 60 | let mut lottery_pool = ctx.accounts.user_lottery_pool.load_mut()?; 61 | lottery_pool.add_nft(staked_item); 62 | 63 | let mut global_lottery_pool = ctx.accounts.global_lottery_pool.load_mut()?; 64 | global_lottery_pool.add_nft(Item { 65 | owner: ctx.accounts.owner.key(), 66 | nft_addr: ctx.accounts.nft_mint.key(), 67 | stake_time: timestamp, 68 | }); 69 | 70 | ctx.accounts.global_authority.lottery_nft_count += 1; 71 | 72 | let cpi_accounts = Transfer { 73 | from: ctx.accounts.user_nft_token_account.to_account_info(), 74 | to: ctx.accounts.dest_nft_token_account.to_account_info(), 75 | authority: ctx.accounts.owner.to_account_info() 76 | }; 77 | let token_program = ctx.accounts.token_program.to_account_info(); 78 | let transfer_ctx = CpiContext::new(token_program, cpi_accounts); 79 | token::transfer( 80 | transfer_ctx, 81 | 1 82 | )?; 83 | Ok(()) 84 | } 85 | 86 | #[access_control(user(&ctx.accounts.user_lottery_pool, &ctx.accounts.owner))] 87 | pub fn withdraw_nft_from_lottery( 88 | ctx: Context, 89 | global_bump: u8, 90 | staked_nft_bump: u8, 91 | withdraw_index: u64 92 | ) -> ProgramResult { 93 | 94 | let timestamp = Clock::get()?.unix_timestamp; 95 | 96 | let mut lottery_pool = ctx.accounts.user_lottery_pool.load_mut()?; 97 | lottery_pool.remove_nft( 98 | ctx.accounts.owner.key(), 99 | ctx.accounts.nft_mint.key(), 100 | timestamp 101 | )?; 102 | 103 | let mut global_lottery_pool = ctx.accounts.global_lottery_pool.load_mut()?; 104 | global_lottery_pool.remove_nft( 105 | ctx.accounts.owner.key(), 106 | ctx.accounts.nft_mint.key(), 107 | withdraw_index 108 | )?; 109 | 110 | ctx.accounts.global_authority.lottery_nft_count -= 1; 111 | 112 | let seeds = &[GLOBAL_AUTHORITY_SEED.as_bytes(), &[global_bump]]; 113 | let signer = &[&seeds[..]]; 114 | let cpi_accounts = Transfer { 115 | from: ctx.accounts.staked_nft_token_account.to_account_info(), 116 | to: ctx.accounts.user_nft_token_account.to_account_info(), 117 | authority: ctx.accounts.global_authority.to_account_info() 118 | }; 119 | let token_program = ctx.accounts.token_program.to_account_info(); 120 | let transfer_ctx = CpiContext::new_with_signer(token_program, cpi_accounts, signer); 121 | token::transfer( 122 | transfer_ctx, 123 | 1 124 | )?; 125 | Ok(()) 126 | } 127 | 128 | #[access_control(user(&ctx.accounts.user_fixed_pool, &ctx.accounts.owner))] 129 | pub fn stake_nft_to_fixed( 130 | ctx: Context, 131 | global_bump: u8, 132 | staked_nft_bump: u8, 133 | ) -> ProgramResult { 134 | 135 | let timestamp = Clock::get()?.unix_timestamp; 136 | 137 | let staked_item = StakedNFT { 138 | nft_addr: ctx.accounts.nft_mint.key(), 139 | stake_time: timestamp, 140 | }; 141 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_mut()?; 142 | fixed_pool.add_nft(staked_item); 143 | 144 | ctx.accounts.global_authority.fixed_nft_count += 1; 145 | 146 | let cpi_accounts = Transfer { 147 | from: ctx.accounts.user_nft_token_account.to_account_info(), 148 | to: ctx.accounts.dest_nft_token_account.to_account_info(), 149 | authority: ctx.accounts.owner.to_account_info() 150 | }; 151 | let token_program = ctx.accounts.token_program.to_account_info(); 152 | let transfer_ctx = CpiContext::new(token_program, cpi_accounts); 153 | token::transfer( 154 | transfer_ctx, 155 | 1 156 | )?; 157 | Ok(()) 158 | } 159 | 160 | #[access_control(user(&ctx.accounts.user_fixed_pool, &ctx.accounts.owner))] 161 | pub fn withdraw_nft_from_fixed( 162 | ctx: Context, 163 | global_bump: u8, 164 | staked_nft_bump: u8, 165 | pool_wallet_bump: u8 166 | ) -> ProgramResult { 167 | 168 | let timestamp = Clock::get()?.unix_timestamp; 169 | 170 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_mut()?; 171 | let reward: u64 = fixed_pool.remove_nft( 172 | ctx.accounts.owner.key(), 173 | ctx.accounts.nft_mint.key(), 174 | timestamp 175 | )?; 176 | 177 | fixed_pool.pending_reward += reward; 178 | 179 | ctx.accounts.global_authority.fixed_nft_count -= 1; 180 | 181 | let seeds = &[GLOBAL_AUTHORITY_SEED.as_bytes(), &[global_bump]]; 182 | let signer = &[&seeds[..]]; 183 | let cpi_accounts = Transfer { 184 | from: ctx.accounts.staked_nft_token_account.to_account_info(), 185 | to: ctx.accounts.user_nft_token_account.to_account_info(), 186 | authority: ctx.accounts.global_authority.to_account_info() 187 | }; 188 | let token_program = ctx.accounts.token_program.to_account_info(); 189 | let transfer_ctx = CpiContext::new_with_signer(token_program, cpi_accounts, signer); 190 | token::transfer( 191 | transfer_ctx, 192 | 1 193 | )?; 194 | /* 195 | sol_transfer_with_signer( 196 | ctx.accounts.pool_wallet.to_account_info(), 197 | ctx.accounts.owner.to_account_info(), 198 | ctx.accounts.system_program.to_account_info(), 199 | &[&[POOL_WALLET_SEED.as_ref(), &[pool_wallet_bump]]], 200 | reward 201 | )?; 202 | */ 203 | Ok(()) 204 | } 205 | 206 | #[access_control(user(&ctx.accounts.user_fixed_pool, &ctx.accounts.owner))] 207 | pub fn claim_reward( 208 | ctx: Context, 209 | global_bump: u8, 210 | staked_nft_bump: u8, 211 | pool_wallet_bump: u8 212 | ) -> ProgramResult { 213 | let timestamp = Clock::get()?.unix_timestamp; 214 | 215 | let mut fixed_pool = ctx.accounts.user_fixed_pool.load_mut()?; 216 | let reward: u64 = fixed_pool.claim_reward( 217 | timestamp 218 | )?; 219 | 220 | sol_transfer_with_signer( 221 | ctx.accounts.pool_wallet.to_account_info(), 222 | ctx.accounts.owner.to_account_info(), 223 | ctx.accounts.system_program.to_account_info(), 224 | &[&[POOL_WALLET_SEED.as_ref(), &[pool_wallet_bump]]], 225 | reward 226 | )?; 227 | 228 | Ok(()) 229 | } 230 | } 231 | 232 | #[derive(Accounts)] 233 | #[instruction(global_bump: u8, pool_wallet_bump: u8)] 234 | pub struct Initialize<'info> { 235 | #[account(mut)] 236 | pub admin: Signer<'info>, 237 | 238 | #[account( 239 | init_if_needed, 240 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 241 | bump = global_bump, 242 | payer = admin 243 | )] 244 | pub global_authority: Account<'info, GlobalPool>, 245 | 246 | #[account(zero)] 247 | pub global_lottery_pool: AccountLoader<'info, GlobalLotteryPool>, 248 | 249 | #[account( 250 | seeds = [POOL_WALLET_SEED.as_ref()], 251 | bump = pool_wallet_bump, 252 | )] 253 | pub pool_wallet: AccountInfo<'info>, 254 | 255 | pub system_program: Program<'info, System>, 256 | pub rent: Sysvar<'info, Rent> 257 | } 258 | 259 | #[derive(Accounts)] 260 | pub struct InitializeLotteryPool<'info> { 261 | #[account(zero)] 262 | pub user_lottery_pool: AccountLoader<'info, UserPool>, 263 | 264 | #[account(mut)] 265 | pub owner: Signer<'info>, 266 | } 267 | 268 | 269 | #[derive(Accounts)] 270 | pub struct InitializeFixedPool<'info> { 271 | #[account(zero)] 272 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 273 | 274 | #[account(mut)] 275 | pub owner: Signer<'info>, 276 | } 277 | 278 | #[derive(Accounts)] 279 | #[instruction(global_bump: u8, staked_nft_bump: u8)] 280 | pub struct StakeNftToLottery<'info> { 281 | #[account(mut)] 282 | pub owner: Signer<'info>, 283 | 284 | #[account(mut)] 285 | pub user_lottery_pool: AccountLoader<'info, UserPool>, 286 | 287 | #[account(mut)] 288 | pub global_lottery_pool: AccountLoader<'info, GlobalLotteryPool>, 289 | 290 | #[account( 291 | mut, 292 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 293 | bump = global_bump, 294 | )] 295 | pub global_authority: Account<'info, GlobalPool>, 296 | 297 | #[account(mut)] 298 | pub user_nft_token_account: Account<'info, TokenAccount>, 299 | 300 | #[account( 301 | init_if_needed, 302 | payer = owner, 303 | seeds = ["staked-nft".as_ref(), nft_mint.key.as_ref()], 304 | bump = staked_nft_bump, 305 | token::mint = nft_mint, 306 | token::authority = global_authority 307 | )] 308 | pub dest_nft_token_account: Account<'info, TokenAccount>, 309 | 310 | pub nft_mint: AccountInfo<'info>, 311 | 312 | pub token_program: Program<'info, Token>, 313 | pub associated_token_program: Program<'info, AssociatedToken>, 314 | pub system_program: Program<'info, System>, 315 | pub rent: Sysvar<'info, Rent> 316 | } 317 | 318 | #[derive(Accounts)] 319 | #[instruction(global_bump: u8, staked_nft_bump: u8)] 320 | pub struct WithdrawNftFromLottery<'info> { 321 | #[account(mut)] 322 | pub owner: Signer<'info>, 323 | 324 | #[account(mut)] 325 | pub user_lottery_pool: AccountLoader<'info, UserPool>, 326 | 327 | #[account(mut)] 328 | pub global_lottery_pool: AccountLoader<'info, GlobalLotteryPool>, 329 | 330 | #[account( 331 | mut, 332 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 333 | bump = global_bump, 334 | )] 335 | pub global_authority: Account<'info, GlobalPool>, 336 | 337 | #[account( 338 | mut, 339 | constraint = user_nft_token_account.owner == owner.key() 340 | )] 341 | pub user_nft_token_account: Account<'info, TokenAccount>, 342 | 343 | #[account( 344 | mut, 345 | seeds = ["staked-nft".as_ref(), nft_mint.key.as_ref()], 346 | bump = staked_nft_bump 347 | )] 348 | pub staked_nft_token_account: Account<'info, TokenAccount>, 349 | 350 | pub nft_mint: AccountInfo<'info>, 351 | 352 | pub token_program: Program<'info, Token>, 353 | pub associated_token_program: Program<'info, AssociatedToken>, 354 | pub system_program: Program<'info, System>, 355 | pub rent: Sysvar<'info, Rent> 356 | } 357 | 358 | 359 | #[derive(Accounts)] 360 | #[instruction(global_bump: u8, staked_nft_bump: u8)] 361 | pub struct StakeNftToFixed<'info> { 362 | #[account(mut)] 363 | pub owner: Signer<'info>, 364 | 365 | #[account(mut)] 366 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 367 | 368 | #[account( 369 | mut, 370 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 371 | bump = global_bump, 372 | )] 373 | pub global_authority: Account<'info, GlobalPool>, 374 | 375 | #[account(mut)] 376 | pub user_nft_token_account: Account<'info, TokenAccount>, 377 | 378 | #[account( 379 | init_if_needed, 380 | payer = owner, 381 | seeds = ["staked-nft".as_ref(), nft_mint.key.as_ref()], 382 | bump = staked_nft_bump, 383 | token::mint = nft_mint, 384 | token::authority = global_authority 385 | )] 386 | pub dest_nft_token_account: Account<'info, TokenAccount>, 387 | 388 | pub nft_mint: AccountInfo<'info>, 389 | 390 | pub token_program: Program<'info, Token>, 391 | pub associated_token_program: Program<'info, AssociatedToken>, 392 | pub system_program: Program<'info, System>, 393 | pub rent: Sysvar<'info, Rent> 394 | } 395 | 396 | #[derive(Accounts)] 397 | #[instruction(global_bump: u8, staked_nft_bump: u8, pool_wallet_bump: u8)] 398 | pub struct WithdrawNftFromFixed<'info> { 399 | #[account(mut)] 400 | pub owner: Signer<'info>, 401 | 402 | #[account(mut)] 403 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 404 | 405 | #[account( 406 | mut, 407 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 408 | bump = global_bump, 409 | )] 410 | pub global_authority: Account<'info, GlobalPool>, 411 | 412 | #[account( 413 | mut, 414 | seeds = [POOL_WALLET_SEED.as_ref()], 415 | bump = pool_wallet_bump, 416 | )] 417 | pub pool_wallet: AccountInfo<'info>, 418 | 419 | #[account( 420 | mut, 421 | constraint = user_nft_token_account.owner == owner.key() 422 | )] 423 | pub user_nft_token_account: Account<'info, TokenAccount>, 424 | 425 | #[account( 426 | mut, 427 | seeds = ["staked-nft".as_ref(), nft_mint.key.as_ref()], 428 | bump = staked_nft_bump 429 | )] 430 | pub staked_nft_token_account: Account<'info, TokenAccount>, 431 | 432 | pub nft_mint: AccountInfo<'info>, 433 | 434 | pub token_program: Program<'info, Token>, 435 | pub associated_token_program: Program<'info, AssociatedToken>, 436 | pub system_program: Program<'info, System>, 437 | pub rent: Sysvar<'info, Rent> 438 | } 439 | 440 | #[derive(Accounts)] 441 | #[instruction(global_bump: u8, staked_nft_bump: u8, pool_wallet_bump: u8)] 442 | pub struct ClaimReward<'info> { 443 | #[account(mut)] 444 | pub owner: Signer<'info>, 445 | 446 | #[account(mut)] 447 | pub user_fixed_pool: AccountLoader<'info, UserPool>, 448 | 449 | #[account( 450 | mut, 451 | seeds = [GLOBAL_AUTHORITY_SEED.as_ref()], 452 | bump = global_bump, 453 | )] 454 | pub global_authority: Account<'info, GlobalPool>, 455 | 456 | #[account( 457 | mut, 458 | seeds = [POOL_WALLET_SEED.as_ref()], 459 | bump = pool_wallet_bump, 460 | )] 461 | pub pool_wallet: AccountInfo<'info>, 462 | pub system_program: Program<'info, System>, 463 | } 464 | 465 | // Access control modifiers 466 | fn user(pool_loader: &AccountLoader, user: &AccountInfo) -> Result<()> { 467 | let user_pool = pool_loader.load()?; 468 | require!(user_pool.owner == *user.key, StakingError::InvalidUserPool); 469 | Ok(()) 470 | } -------------------------------------------------------------------------------- /programs/staking_program/src/utils.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use solana_program::{ 3 | program::{invoke_signed} 4 | }; 5 | 6 | // transfer sol 7 | pub fn sol_transfer_with_signer<'a>( 8 | source: AccountInfo<'a>, 9 | destination: AccountInfo<'a>, 10 | system_program: AccountInfo<'a>, 11 | signers: &[&[&[u8]]; 1], 12 | amount: u64, 13 | ) -> Result<(), ProgramError> { 14 | let ix = solana_program::system_instruction::transfer(source.key, destination.key, amount); 15 | invoke_signed(&ix, &[source, destination, system_program], signers) 16 | } 17 | -------------------------------------------------------------------------------- /test-keypair.json: -------------------------------------------------------------------------------- 1 | [172,235,176,128,185,166,90,139,147,30,213,132,249,186,212,30,216,51,95,155,38,227,76,14,175,102,144,65,158,167,95,246,23,104,102,208,80,252,250,205,122,78,207,62,106,24,127,182,66,240,4,2,161,155,77,210,117,58,153,115,113,76,231,207] -------------------------------------------------------------------------------- /tests/staking_program.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 | 16 | describe('staking_program', () => { 17 | 18 | // Configure the client to use the local cluster. 19 | const provider = anchor.Provider.env(); 20 | anchor.setProvider(provider); 21 | 22 | const program = anchor.workspace.StakingProgram as Program; 23 | const superOwner = anchor.web3.Keypair.generate(); 24 | const user = anchor.web3.Keypair.generate(); 25 | const lotteryPool = anchor.web3.Keypair.generate(); 26 | const fixedPool = anchor.web3.Keypair.generate(); 27 | 28 | const USER_POOL_SIZE = 2064; 29 | const GLOBAL_POOL_SIZE = 360_016; 30 | 31 | let nft_token_mint = null; 32 | let userTokenAccount = null; 33 | 34 | let globalLotteryPoolKey = anchor.web3.Keypair.generate(); 35 | 36 | it('Is initialized!', async () => { 37 | // Add your test here. 38 | await provider.connection.confirmTransaction( 39 | await provider.connection.requestAirdrop(superOwner.publicKey, 9000000000), 40 | "confirmed" 41 | ); 42 | await provider.connection.confirmTransaction( 43 | await provider.connection.requestAirdrop(user.publicKey, 9000000000), 44 | "confirmed" 45 | ); 46 | 47 | console.log("super owner =", superOwner.publicKey.toBase58()); 48 | console.log("user =", user.publicKey.toBase58()); 49 | 50 | nft_token_mint = await Token.createMint( 51 | provider.connection, 52 | user, 53 | superOwner.publicKey, 54 | null, 55 | 0, 56 | TOKEN_PROGRAM_ID 57 | ); 58 | userTokenAccount = await nft_token_mint.createAccount(user.publicKey); 59 | 60 | await nft_token_mint.mintTo( 61 | userTokenAccount, 62 | superOwner, 63 | [], 64 | 1 65 | ); 66 | 67 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 68 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 69 | program.programId 70 | ); 71 | 72 | console.log("globalAuthority =", globalAuthority.toBase58()); 73 | 74 | const [poolWalletKey, walletBump] = await PublicKey.findProgramAddress( 75 | [Buffer.from(POOL_WALLET_SEED)], 76 | program.programId 77 | ); 78 | await provider.connection.confirmTransaction( 79 | await provider.connection.requestAirdrop(poolWalletKey, 1000000000), 80 | "confirmed" 81 | ); 82 | console.log("poolWalletKey =", poolWalletKey.toBase58()); 83 | 84 | let ix = SystemProgram.createAccount({ 85 | fromPubkey: superOwner.publicKey, 86 | newAccountPubkey: globalLotteryPoolKey.publicKey, 87 | lamports : await provider.connection.getMinimumBalanceForRentExemption(GLOBAL_POOL_SIZE), 88 | space: GLOBAL_POOL_SIZE, 89 | programId: program.programId, 90 | }) 91 | 92 | console.log("globalLotteryPoolKey =", globalLotteryPoolKey.publicKey.toBase58()) 93 | 94 | const tx = await program.rpc.initialize( 95 | bump, walletBump, { 96 | accounts: { 97 | admin: superOwner.publicKey, 98 | globalAuthority, 99 | globalLotteryPool: globalLotteryPoolKey.publicKey, 100 | poolWallet: poolWalletKey, 101 | systemProgram: SystemProgram.programId, 102 | rent: SYSVAR_RENT_PUBKEY 103 | }, 104 | instructions: [ix], 105 | signers: [superOwner, globalLotteryPoolKey] 106 | } 107 | ); 108 | 109 | console.log("Your transaction signature", tx); 110 | }); 111 | 112 | it('initialize lottery pool', async () => { 113 | /*let [userLotteryPool, lotteryBump] = await PublicKey.findProgramAddress( 114 | [Buffer.from("user-lottery-pool"), user.publicKey.toBuffer()], 115 | program.programId 116 | );*/ 117 | 118 | let userLotteryPoolKey = await PublicKey.createWithSeed( 119 | user.publicKey, 120 | "user-lottery-pool", 121 | program.programId, 122 | ); 123 | 124 | let ix = SystemProgram.createAccountWithSeed({ 125 | fromPubkey: user.publicKey, 126 | basePubkey: user.publicKey, 127 | seed: "user-lottery-pool", 128 | newAccountPubkey: userLotteryPoolKey, 129 | lamports : await provider.connection.getMinimumBalanceForRentExemption(USER_POOL_SIZE), 130 | space: USER_POOL_SIZE, 131 | programId: program.programId, 132 | }); 133 | console.log("userLotteryPool.pubk =", userLotteryPoolKey.toBase58()) 134 | 135 | const tx = await program.rpc.initializeLotteryPool( 136 | { 137 | accounts: { 138 | userLotteryPool: userLotteryPoolKey, 139 | owner: user.publicKey 140 | }, 141 | instructions: [ 142 | ix 143 | ], 144 | signers: [user] 145 | } 146 | ); 147 | 148 | console.log("Your transaction signature", tx); 149 | }) 150 | 151 | it("Stake Nft To Lottery", async () => { 152 | 153 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 154 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 155 | program.programId 156 | ); 157 | 158 | console.log("globalAuthority =", globalAuthority.toBase58()); 159 | 160 | let userLotteryPoolKey = await PublicKey.createWithSeed( 161 | user.publicKey, 162 | "user-lottery-pool", 163 | program.programId, 164 | ); 165 | 166 | /*let destNftTokenAccount = await Token.getAssociatedTokenAddress( 167 | ASSOCIATED_TOKEN_PROGRAM_ID, 168 | TOKEN_PROGRAM_ID, 169 | nft_token_mint.publicKey, 170 | user.publicKey 171 | );*/ 172 | 173 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 174 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 175 | program.programId 176 | ); 177 | 178 | //let destNftTokenAccount = await nft_token_mint.createAccount(user.publicKey); 179 | 180 | const tx = await program.rpc.stakeNftToLottery( 181 | bump, nft_bump, { 182 | accounts: { 183 | owner: user.publicKey, 184 | userLotteryPool: userLotteryPoolKey, 185 | globalLotteryPool: globalLotteryPoolKey.publicKey, 186 | globalAuthority, 187 | userNftTokenAccount: userTokenAccount, 188 | destNftTokenAccount: staked_nft_address, 189 | nftMint: nft_token_mint.publicKey, 190 | tokenProgram: TOKEN_PROGRAM_ID, 191 | associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, 192 | systemProgram: SystemProgram.programId, 193 | rent: SYSVAR_RENT_PUBKEY 194 | }, 195 | signers: [user] 196 | } 197 | ); 198 | 199 | console.log("Your transaction signature", tx); 200 | 201 | let userLotteryPool = await program.account.userPool.fetch(userLotteryPoolKey); 202 | //console.log("userLotteryPool =", userLotteryPool); 203 | }) 204 | 205 | it("Withdraw Nft From Lottery", async () => { 206 | 207 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 208 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 209 | program.programId 210 | ); 211 | 212 | console.log("globalAuthority =", globalAuthority.toBase58()); 213 | 214 | let userLotteryPoolKey = await PublicKey.createWithSeed( 215 | user.publicKey, 216 | "user-lottery-pool", 217 | program.programId, 218 | ); 219 | 220 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 221 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 222 | program.programId 223 | ); 224 | 225 | let globalLotteryPoolData = await program.account.globalLotteryPool.fetch(globalLotteryPoolKey.publicKey); 226 | //console.log("globalLotteryPoolData =", globalLotteryPoolData); 227 | let nftIndex = 0; 228 | for(let i = 0; i < globalLotteryPoolData.itemCount.toNumber(); i ++) { 229 | if (globalLotteryPoolData.lotteryItems[i].nftAddr.toBase58() == nft_token_mint.publicKey.toBase58()) { 230 | nftIndex = i; 231 | break; 232 | } 233 | } 234 | 235 | const tx = await program.rpc.withdrawNftFromLottery( 236 | bump, nft_bump, new anchor.BN(nftIndex), { 237 | accounts: { 238 | owner: user.publicKey, 239 | userLotteryPool: userLotteryPoolKey, 240 | globalLotteryPool: globalLotteryPoolKey.publicKey, 241 | globalAuthority, 242 | userNftTokenAccount: userTokenAccount, 243 | stakedNftTokenAccount: staked_nft_address, 244 | nftMint: nft_token_mint.publicKey, 245 | tokenProgram: TOKEN_PROGRAM_ID, 246 | associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, 247 | systemProgram: SystemProgram.programId, 248 | rent: SYSVAR_RENT_PUBKEY 249 | }, 250 | signers: [user] 251 | } 252 | ); 253 | 254 | console.log("Your transaction signature", tx); 255 | 256 | let userLotteryPool = await program.account.userPool.fetch(userLotteryPoolKey); 257 | 258 | //console.log("userLotteryPool =", userLotteryPool); 259 | }) 260 | 261 | it('initialize fixed pool', async () => { 262 | 263 | let userFixedPoolKey = await PublicKey.createWithSeed( 264 | user.publicKey, 265 | "user-fixed-pool", 266 | program.programId, 267 | ); 268 | 269 | let ix = SystemProgram.createAccountWithSeed({ 270 | fromPubkey: user.publicKey, 271 | basePubkey: user.publicKey, 272 | seed: "user-fixed-pool", 273 | newAccountPubkey: userFixedPoolKey, 274 | lamports : await provider.connection.getMinimumBalanceForRentExemption(USER_POOL_SIZE), 275 | space: USER_POOL_SIZE, 276 | programId: program.programId, 277 | }); 278 | console.log("userFixedPool.pubk =", userFixedPoolKey.toBase58()) 279 | const tx = await program.rpc.initializeFixedPool( 280 | { 281 | accounts: { 282 | userFixedPool: userFixedPoolKey, 283 | owner: user.publicKey 284 | }, 285 | instructions: [ 286 | ix 287 | ], 288 | signers: [user] 289 | } 290 | ); 291 | 292 | console.log("Your transaction signature", tx); 293 | }) 294 | 295 | it("Stake Nft To Fixed", async () => { 296 | 297 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 298 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 299 | program.programId 300 | ); 301 | 302 | console.log("globalAuthority =", globalAuthority.toBase58()); 303 | 304 | let userFixedPoolKey = await PublicKey.createWithSeed( 305 | user.publicKey, 306 | "user-fixed-pool", 307 | program.programId, 308 | ); 309 | 310 | /*let destNftTokenAccount = await Token.getAssociatedTokenAddress( 311 | ASSOCIATED_TOKEN_PROGRAM_ID, 312 | TOKEN_PROGRAM_ID, 313 | nft_token_mint.publicKey, 314 | user.publicKey 315 | );*/ 316 | 317 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 318 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 319 | program.programId 320 | ); 321 | 322 | //let destNftTokenAccount = await nft_token_mint.createAccount(user.publicKey); 323 | 324 | const tx = await program.rpc.stakeNftToFixed( 325 | bump, nft_bump, { 326 | accounts: { 327 | owner: user.publicKey, 328 | userFixedPool: userFixedPoolKey, 329 | globalAuthority, 330 | userNftTokenAccount: userTokenAccount, 331 | destNftTokenAccount: staked_nft_address, 332 | nftMint: nft_token_mint.publicKey, 333 | tokenProgram: TOKEN_PROGRAM_ID, 334 | associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, 335 | systemProgram: SystemProgram.programId, 336 | rent: SYSVAR_RENT_PUBKEY 337 | }, 338 | signers: [user] 339 | } 340 | ); 341 | 342 | console.log("Your transaction signature", tx); 343 | 344 | let userFixedPool = await program.account.userPool.fetch(userFixedPoolKey); 345 | //console.log("userFixedPool =", userFixedPool); 346 | }) 347 | 348 | it("Withdraw Nft From Fixed", async () => { 349 | 350 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 351 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 352 | program.programId 353 | ); 354 | 355 | console.log("globalAuthority =", globalAuthority.toBase58()); 356 | 357 | const [poolWalletKey, walletBump] = await PublicKey.findProgramAddress( 358 | [Buffer.from(POOL_WALLET_SEED)], 359 | program.programId 360 | ); 361 | 362 | console.log("poolWalletKey =", poolWalletKey.toBase58()); 363 | 364 | let userFixedPoolKey = await PublicKey.createWithSeed( 365 | user.publicKey, 366 | "user-fixed-pool", 367 | program.programId, 368 | ); 369 | 370 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 371 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 372 | program.programId 373 | ); 374 | 375 | const tx = await program.rpc.withdrawNftFromFixed( 376 | bump, nft_bump, walletBump, { 377 | accounts: { 378 | owner: user.publicKey, 379 | userFixedPool: userFixedPoolKey, 380 | globalAuthority, 381 | poolWallet: poolWalletKey, 382 | userNftTokenAccount: userTokenAccount, 383 | stakedNftTokenAccount: staked_nft_address, 384 | nftMint: nft_token_mint.publicKey, 385 | tokenProgram: TOKEN_PROGRAM_ID, 386 | associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID, 387 | systemProgram: SystemProgram.programId, 388 | rent: SYSVAR_RENT_PUBKEY 389 | }, 390 | signers: [user] 391 | } 392 | ); 393 | 394 | console.log("Your transaction signature", tx); 395 | 396 | let userFixedPool = await program.account.userPool.fetch(userFixedPoolKey); 397 | //console.log("userFixedPool =", userFixedPool); 398 | }) 399 | 400 | it("Claim Reward", async () => { 401 | 402 | const [globalAuthority, bump] = await PublicKey.findProgramAddress( 403 | [Buffer.from(GLOBAL_AUTHORITY_SEED)], 404 | program.programId 405 | ); 406 | 407 | console.log("globalAuthority =", globalAuthority.toBase58()); 408 | 409 | const [poolWalletKey, walletBump] = await PublicKey.findProgramAddress( 410 | [Buffer.from(POOL_WALLET_SEED)], 411 | program.programId 412 | ); 413 | 414 | console.log("poolWalletKey =", poolWalletKey.toBase58()); 415 | 416 | let userFixedPoolKey = await PublicKey.createWithSeed( 417 | user.publicKey, 418 | "user-fixed-pool", 419 | program.programId, 420 | ); 421 | 422 | const [staked_nft_address, nft_bump] = await PublicKey.findProgramAddress( 423 | [Buffer.from("staked-nft"), nft_token_mint.publicKey.toBuffer()], 424 | program.programId 425 | ); 426 | 427 | const tx = await program.rpc.claimReward( 428 | bump, nft_bump, walletBump, { 429 | accounts: { 430 | owner: user.publicKey, 431 | userFixedPool: userFixedPoolKey, 432 | globalAuthority, 433 | poolWallet: poolWalletKey, 434 | systemProgram: SystemProgram.programId, 435 | }, 436 | signers: [user] 437 | } 438 | ); 439 | 440 | console.log("Your transaction signature", tx); 441 | 442 | let userFixedPool = await program.account.userPool.fetch(userFixedPoolKey); 443 | //console.log("userFixedPool =", userFixedPool); 444 | }) 445 | }); 446 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | version "7.16.7" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" 8 | integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== 9 | dependencies: 10 | regenerator-runtime "^0.13.4" 11 | 12 | "@ethersproject/bytes@^5.5.0": 13 | version "5.5.0" 14 | resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" 15 | integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== 16 | dependencies: 17 | "@ethersproject/logger" "^5.5.0" 18 | 19 | "@ethersproject/logger@^5.5.0": 20 | version "5.5.0" 21 | resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" 22 | integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== 23 | 24 | "@ethersproject/sha2@^5.5.0": 25 | version "5.5.0" 26 | resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" 27 | integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== 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 | version "0.20.1" 35 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.20.1.tgz#0937807e807e8332aa708cfef4bcb6cbb88b4129" 36 | integrity sha512-2TuBmGUn9qeYz6sJINJlElrBuPsaUAtYyUsJ3XplEBf1pczrANAgs5ceJUFzdiqGEWLn+84ObSdBeChT/AXYFA== 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 | version "0.2.3" 55 | resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.3.tgz#1d705c5887484cb6a127dd5feff58e90cbfcb558" 56 | integrity sha512-lH9zEYADZE3cxrgiFym8+jbUE3NM/LH+WOKYcUjs65CT10Q64Hv45bcAAa/phwYk4Tpz0uQ1x+ergFaAoGt67Q== 57 | dependencies: 58 | bn.js "^5.1.2" 59 | buffer-layout "^1.2.0" 60 | 61 | "@solana/buffer-layout@^3.0.0": 62 | version "3.0.0" 63 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326" 64 | integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w== 65 | dependencies: 66 | buffer "~6.0.3" 67 | 68 | "@solana/spl-token@^0.1.8": 69 | version "0.1.8" 70 | resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" 71 | integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ== 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.21.0": 81 | version "1.32.0" 82 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.32.0.tgz#b9821de52d0e773c363516c3dcef9be701295d82" 83 | integrity sha512-jquZ/VBvM3zXAaTJvdWd9mlP0WiZaZqjji0vw5UAsb5IKIossrLhHtyUqMfo41Qkdwu1aVwf7YWG748i4XIJnw== 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 | version "4.11.6" 102 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" 103 | integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== 104 | dependencies: 105 | "@types/node" "*" 106 | 107 | "@types/connect@^3.4.33": 108 | version "3.4.35" 109 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 110 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 111 | dependencies: 112 | "@types/node" "*" 113 | 114 | "@types/express-serve-static-core@^4.17.9": 115 | version "4.17.28" 116 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" 117 | integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== 118 | dependencies: 119 | "@types/node" "*" 120 | "@types/qs" "*" 121 | "@types/range-parser" "*" 122 | 123 | "@types/json5@^0.0.29": 124 | version "0.0.29" 125 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 126 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 127 | 128 | "@types/lodash@^4.14.159": 129 | version "4.14.178" 130 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" 131 | integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== 132 | 133 | "@types/mocha@^9.0.0": 134 | version "9.1.0" 135 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.0.tgz#baf17ab2cca3fcce2d322ebc30454bff487efad5" 136 | integrity sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg== 137 | 138 | "@types/node@*": 139 | version "17.0.10" 140 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.10.tgz#616f16e9d3a2a3d618136b1be244315d95bd7cab" 141 | integrity sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog== 142 | 143 | "@types/node@^12.12.54": 144 | version "12.20.42" 145 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.42.tgz#2f021733232c2130c26f9eabbdd3bfd881774733" 146 | integrity sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw== 147 | 148 | "@types/qs@*": 149 | version "6.9.7" 150 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 151 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 152 | 153 | "@types/range-parser@*": 154 | version "1.2.4" 155 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 156 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 157 | 158 | "@types/ws@^7.4.4": 159 | version "7.4.7" 160 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" 161 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 162 | dependencies: 163 | "@types/node" "*" 164 | 165 | "@ungap/promise-all-settled@1.1.2": 166 | version "1.1.2" 167 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 168 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 169 | 170 | JSONStream@^1.3.5: 171 | version "1.3.5" 172 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 173 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 174 | dependencies: 175 | jsonparse "^1.2.0" 176 | through ">=2.2.7 <3" 177 | 178 | ansi-colors@4.1.1: 179 | version "4.1.1" 180 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 181 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 182 | 183 | ansi-regex@^5.0.1: 184 | version "5.0.1" 185 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 186 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 187 | 188 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 189 | version "4.3.0" 190 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 191 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 192 | dependencies: 193 | color-convert "^2.0.1" 194 | 195 | anymatch@~3.1.2: 196 | version "3.1.2" 197 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 198 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 199 | dependencies: 200 | normalize-path "^3.0.0" 201 | picomatch "^2.0.4" 202 | 203 | argparse@^2.0.1: 204 | version "2.0.1" 205 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 206 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 207 | 208 | arrify@^1.0.0: 209 | version "1.0.1" 210 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 211 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= 212 | 213 | assertion-error@^1.1.0: 214 | version "1.1.0" 215 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 216 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 217 | 218 | balanced-match@^1.0.0: 219 | version "1.0.2" 220 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 221 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 222 | 223 | base-x@^3.0.2: 224 | version "3.0.9" 225 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 226 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 227 | dependencies: 228 | safe-buffer "^5.0.1" 229 | 230 | base64-js@^1.3.1, base64-js@^1.5.1: 231 | version "1.5.1" 232 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 233 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 234 | 235 | binary-extensions@^2.0.0: 236 | version "2.2.0" 237 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 238 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 239 | 240 | bn.js@^4.11.9: 241 | version "4.12.0" 242 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" 243 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== 244 | 245 | bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2: 246 | version "5.2.0" 247 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" 248 | integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== 249 | 250 | borsh@^0.4.0: 251 | version "0.4.0" 252 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f" 253 | integrity sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g== 254 | dependencies: 255 | "@types/bn.js" "^4.11.5" 256 | bn.js "^5.0.0" 257 | bs58 "^4.0.0" 258 | text-encoding-utf-8 "^1.0.2" 259 | 260 | brace-expansion@^1.1.7: 261 | version "1.1.11" 262 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 263 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 264 | dependencies: 265 | balanced-match "^1.0.0" 266 | concat-map "0.0.1" 267 | 268 | braces@~3.0.2: 269 | version "3.0.2" 270 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 271 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 272 | dependencies: 273 | fill-range "^7.0.1" 274 | 275 | brorand@^1.1.0: 276 | version "1.1.0" 277 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 278 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 279 | 280 | browser-stdout@1.3.1: 281 | version "1.3.1" 282 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 283 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 284 | 285 | bs58@^4.0.0, bs58@^4.0.1: 286 | version "4.0.1" 287 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 288 | integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= 289 | dependencies: 290 | base-x "^3.0.2" 291 | 292 | buffer-from@^1.0.0, buffer-from@^1.1.0: 293 | version "1.1.2" 294 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 295 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 296 | 297 | buffer-layout@^1.2.0, buffer-layout@^1.2.2: 298 | version "1.2.2" 299 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" 300 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 301 | 302 | buffer@6.0.1: 303 | version "6.0.1" 304 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" 305 | integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== 306 | dependencies: 307 | base64-js "^1.3.1" 308 | ieee754 "^1.2.1" 309 | 310 | buffer@6.0.3, buffer@~6.0.3: 311 | version "6.0.3" 312 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 313 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 314 | dependencies: 315 | base64-js "^1.3.1" 316 | ieee754 "^1.2.1" 317 | 318 | bufferutil@^4.0.1: 319 | version "4.0.6" 320 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" 321 | integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== 322 | dependencies: 323 | node-gyp-build "^4.3.0" 324 | 325 | camelcase@^5.3.1: 326 | version "5.3.1" 327 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 328 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 329 | 330 | camelcase@^6.0.0: 331 | version "6.3.0" 332 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 333 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 334 | 335 | chai@^4.3.4: 336 | version "4.3.4" 337 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" 338 | integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== 339 | dependencies: 340 | assertion-error "^1.1.0" 341 | check-error "^1.0.2" 342 | deep-eql "^3.0.1" 343 | get-func-name "^2.0.0" 344 | pathval "^1.1.1" 345 | type-detect "^4.0.5" 346 | 347 | chalk@^4.1.0: 348 | version "4.1.2" 349 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 350 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 351 | dependencies: 352 | ansi-styles "^4.1.0" 353 | supports-color "^7.1.0" 354 | 355 | check-error@^1.0.2: 356 | version "1.0.2" 357 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 358 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 359 | 360 | chokidar@3.5.2: 361 | version "3.5.2" 362 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" 363 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== 364 | dependencies: 365 | anymatch "~3.1.2" 366 | braces "~3.0.2" 367 | glob-parent "~5.1.2" 368 | is-binary-path "~2.1.0" 369 | is-glob "~4.0.1" 370 | normalize-path "~3.0.0" 371 | readdirp "~3.6.0" 372 | optionalDependencies: 373 | fsevents "~2.3.2" 374 | 375 | circular-json@^0.5.9: 376 | version "0.5.9" 377 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d" 378 | integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== 379 | 380 | cliui@^7.0.2: 381 | version "7.0.4" 382 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 383 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 384 | dependencies: 385 | string-width "^4.2.0" 386 | strip-ansi "^6.0.0" 387 | wrap-ansi "^7.0.0" 388 | 389 | color-convert@^2.0.1: 390 | version "2.0.1" 391 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 392 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 393 | dependencies: 394 | color-name "~1.1.4" 395 | 396 | color-name@~1.1.4: 397 | version "1.1.4" 398 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 399 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 400 | 401 | commander@^2.20.3: 402 | version "2.20.3" 403 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 404 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 405 | 406 | concat-map@0.0.1: 407 | version "0.0.1" 408 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 409 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 410 | 411 | cross-fetch@^3.1.4: 412 | version "3.1.5" 413 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" 414 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== 415 | dependencies: 416 | node-fetch "2.6.7" 417 | 418 | crypto-hash@^1.3.0: 419 | version "1.3.0" 420 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" 421 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 422 | 423 | debug@4.3.2: 424 | version "4.3.2" 425 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 426 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 427 | dependencies: 428 | ms "2.1.2" 429 | 430 | decamelize@^4.0.0: 431 | version "4.0.0" 432 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 433 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 434 | 435 | deep-eql@^3.0.1: 436 | version "3.0.1" 437 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 438 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 439 | dependencies: 440 | type-detect "^4.0.0" 441 | 442 | delay@^5.0.0: 443 | version "5.0.0" 444 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 445 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 446 | 447 | diff@5.0.0: 448 | version "5.0.0" 449 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 450 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 451 | 452 | diff@^3.1.0: 453 | version "3.5.0" 454 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 455 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 456 | 457 | dot-case@^3.0.4: 458 | version "3.0.4" 459 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" 460 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 461 | dependencies: 462 | no-case "^3.0.4" 463 | tslib "^2.0.3" 464 | 465 | dotenv@10.0.0: 466 | version "10.0.0" 467 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" 468 | integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== 469 | 470 | elliptic@^6.5.4: 471 | version "6.5.4" 472 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" 473 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== 474 | dependencies: 475 | bn.js "^4.11.9" 476 | brorand "^1.1.0" 477 | hash.js "^1.0.0" 478 | hmac-drbg "^1.0.1" 479 | inherits "^2.0.4" 480 | minimalistic-assert "^1.0.1" 481 | minimalistic-crypto-utils "^1.0.1" 482 | 483 | emoji-regex@^8.0.0: 484 | version "8.0.0" 485 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 486 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 487 | 488 | es6-promise@^4.0.3: 489 | version "4.2.8" 490 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 491 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 492 | 493 | es6-promisify@^5.0.0: 494 | version "5.0.0" 495 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 496 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= 497 | dependencies: 498 | es6-promise "^4.0.3" 499 | 500 | escalade@^3.1.1: 501 | version "3.1.1" 502 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 503 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 504 | 505 | escape-string-regexp@4.0.0: 506 | version "4.0.0" 507 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 508 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 509 | 510 | eventemitter3@^4.0.7: 511 | version "4.0.7" 512 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 513 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 514 | 515 | eyes@^0.1.8: 516 | version "0.1.8" 517 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 518 | integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= 519 | 520 | fill-range@^7.0.1: 521 | version "7.0.1" 522 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 523 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 524 | dependencies: 525 | to-regex-range "^5.0.1" 526 | 527 | find-up@5.0.0: 528 | version "5.0.0" 529 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 530 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 531 | dependencies: 532 | locate-path "^6.0.0" 533 | path-exists "^4.0.0" 534 | 535 | find@^0.3.0: 536 | version "0.3.0" 537 | resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" 538 | integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== 539 | dependencies: 540 | traverse-chain "~0.1.0" 541 | 542 | flat@^5.0.2: 543 | version "5.0.2" 544 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 545 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 546 | 547 | fs.realpath@^1.0.0: 548 | version "1.0.0" 549 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 550 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 551 | 552 | fsevents@~2.3.2: 553 | version "2.3.2" 554 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 555 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 556 | 557 | get-caller-file@^2.0.5: 558 | version "2.0.5" 559 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 560 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 561 | 562 | get-func-name@^2.0.0: 563 | version "2.0.0" 564 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 565 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 566 | 567 | glob-parent@~5.1.2: 568 | version "5.1.2" 569 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 570 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 571 | dependencies: 572 | is-glob "^4.0.1" 573 | 574 | glob@7.1.7: 575 | version "7.1.7" 576 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 577 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 578 | dependencies: 579 | fs.realpath "^1.0.0" 580 | inflight "^1.0.4" 581 | inherits "2" 582 | minimatch "^3.0.4" 583 | once "^1.3.0" 584 | path-is-absolute "^1.0.0" 585 | 586 | growl@1.10.5: 587 | version "1.10.5" 588 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 589 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 590 | 591 | has-flag@^4.0.0: 592 | version "4.0.0" 593 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 594 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 595 | 596 | hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: 597 | version "1.1.7" 598 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 599 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 600 | dependencies: 601 | inherits "^2.0.3" 602 | minimalistic-assert "^1.0.1" 603 | 604 | he@1.2.0: 605 | version "1.2.0" 606 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 607 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 608 | 609 | hmac-drbg@^1.0.1: 610 | version "1.0.1" 611 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 612 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= 613 | dependencies: 614 | hash.js "^1.0.3" 615 | minimalistic-assert "^1.0.0" 616 | minimalistic-crypto-utils "^1.0.1" 617 | 618 | ieee754@^1.2.1: 619 | version "1.2.1" 620 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 621 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 622 | 623 | inflight@^1.0.4: 624 | version "1.0.6" 625 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 626 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 627 | dependencies: 628 | once "^1.3.0" 629 | wrappy "1" 630 | 631 | inherits@2, inherits@^2.0.3, inherits@^2.0.4: 632 | version "2.0.4" 633 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 634 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 635 | 636 | is-binary-path@~2.1.0: 637 | version "2.1.0" 638 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 639 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 640 | dependencies: 641 | binary-extensions "^2.0.0" 642 | 643 | is-extglob@^2.1.1: 644 | version "2.1.1" 645 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 646 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 647 | 648 | is-fullwidth-code-point@^3.0.0: 649 | version "3.0.0" 650 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 651 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 652 | 653 | is-glob@^4.0.1, is-glob@~4.0.1: 654 | version "4.0.3" 655 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 656 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 657 | dependencies: 658 | is-extglob "^2.1.1" 659 | 660 | is-number@^7.0.0: 661 | version "7.0.0" 662 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 663 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 664 | 665 | is-plain-obj@^2.1.0: 666 | version "2.1.0" 667 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 668 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 669 | 670 | is-unicode-supported@^0.1.0: 671 | version "0.1.0" 672 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 673 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 674 | 675 | isexe@^2.0.0: 676 | version "2.0.0" 677 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 678 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 679 | 680 | isomorphic-ws@^4.0.1: 681 | version "4.0.1" 682 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" 683 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 684 | 685 | jayson@^3.4.4: 686 | version "3.6.6" 687 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.6.tgz#189984f624e398f831bd2be8e8c80eb3abf764a1" 688 | integrity sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ== 689 | dependencies: 690 | "@types/connect" "^3.4.33" 691 | "@types/express-serve-static-core" "^4.17.9" 692 | "@types/lodash" "^4.14.159" 693 | "@types/node" "^12.12.54" 694 | "@types/ws" "^7.4.4" 695 | JSONStream "^1.3.5" 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 | lodash "^4.17.20" 703 | uuid "^8.3.2" 704 | ws "^7.4.5" 705 | 706 | js-sha256@^0.9.0: 707 | version "0.9.0" 708 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" 709 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== 710 | 711 | js-sha3@^0.8.0: 712 | version "0.8.0" 713 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" 714 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== 715 | 716 | js-yaml@4.1.0: 717 | version "4.1.0" 718 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 719 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 720 | dependencies: 721 | argparse "^2.0.1" 722 | 723 | json-stringify-safe@^5.0.1: 724 | version "5.0.1" 725 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 726 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 727 | 728 | json5@^1.0.1: 729 | version "1.0.1" 730 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 731 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 732 | dependencies: 733 | minimist "^1.2.0" 734 | 735 | jsonparse@^1.2.0: 736 | version "1.3.1" 737 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 738 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= 739 | 740 | locate-path@^6.0.0: 741 | version "6.0.0" 742 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 743 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 744 | dependencies: 745 | p-locate "^5.0.0" 746 | 747 | lodash@^4.17.20: 748 | version "4.17.21" 749 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 750 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 751 | 752 | log-symbols@4.1.0: 753 | version "4.1.0" 754 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 755 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 756 | dependencies: 757 | chalk "^4.1.0" 758 | is-unicode-supported "^0.1.0" 759 | 760 | lower-case@^2.0.2: 761 | version "2.0.2" 762 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 763 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 764 | dependencies: 765 | tslib "^2.0.3" 766 | 767 | make-error@^1.1.1: 768 | version "1.3.6" 769 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 770 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 771 | 772 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 773 | version "1.0.1" 774 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 775 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 776 | 777 | minimalistic-crypto-utils@^1.0.1: 778 | version "1.0.1" 779 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 780 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 781 | 782 | minimatch@3.0.4, minimatch@^3.0.4: 783 | version "3.0.4" 784 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 785 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 786 | dependencies: 787 | brace-expansion "^1.1.7" 788 | 789 | minimist@^1.2.0, minimist@^1.2.5: 790 | version "1.2.5" 791 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 792 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 793 | 794 | mkdirp@^0.5.1: 795 | version "0.5.5" 796 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 797 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 798 | dependencies: 799 | minimist "^1.2.5" 800 | 801 | mocha@^9.0.3: 802 | version "9.1.4" 803 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.4.tgz#5a332d6ade6345b975fd97b5b39139854c8e1b32" 804 | integrity sha512-+q2aV5VlJZuLgCWoBvGI5zEwPF9eEI0kr/sAA9Jm4xMND7RfIEyF8JE7C0JIg8WXRG+P1sdIAb5ccoHPlXLzcw== 805 | dependencies: 806 | "@ungap/promise-all-settled" "1.1.2" 807 | ansi-colors "4.1.1" 808 | browser-stdout "1.3.1" 809 | chokidar "3.5.2" 810 | debug "4.3.2" 811 | diff "5.0.0" 812 | escape-string-regexp "4.0.0" 813 | find-up "5.0.0" 814 | glob "7.1.7" 815 | growl "1.10.5" 816 | he "1.2.0" 817 | js-yaml "4.1.0" 818 | log-symbols "4.1.0" 819 | minimatch "3.0.4" 820 | ms "2.1.3" 821 | nanoid "3.1.25" 822 | serialize-javascript "6.0.0" 823 | strip-json-comments "3.1.1" 824 | supports-color "8.1.1" 825 | which "2.0.2" 826 | workerpool "6.1.5" 827 | yargs "16.2.0" 828 | yargs-parser "20.2.4" 829 | yargs-unparser "2.0.0" 830 | 831 | ms@2.1.2: 832 | version "2.1.2" 833 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 834 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 835 | 836 | ms@2.1.3: 837 | version "2.1.3" 838 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 839 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 840 | 841 | nanoid@3.1.25: 842 | version "3.1.25" 843 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" 844 | integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== 845 | 846 | no-case@^3.0.4: 847 | version "3.0.4" 848 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 849 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 850 | dependencies: 851 | lower-case "^2.0.2" 852 | tslib "^2.0.3" 853 | 854 | node-addon-api@^2.0.0: 855 | version "2.0.2" 856 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" 857 | integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== 858 | 859 | node-fetch@2.6.7: 860 | version "2.6.7" 861 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 862 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 863 | dependencies: 864 | whatwg-url "^5.0.0" 865 | 866 | node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: 867 | version "4.3.0" 868 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" 869 | integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== 870 | 871 | normalize-path@^3.0.0, normalize-path@~3.0.0: 872 | version "3.0.0" 873 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 874 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 875 | 876 | once@^1.3.0: 877 | version "1.4.0" 878 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 879 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 880 | dependencies: 881 | wrappy "1" 882 | 883 | p-limit@^3.0.2: 884 | version "3.1.0" 885 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 886 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 887 | dependencies: 888 | yocto-queue "^0.1.0" 889 | 890 | p-locate@^5.0.0: 891 | version "5.0.0" 892 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 893 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 894 | dependencies: 895 | p-limit "^3.0.2" 896 | 897 | pako@^2.0.3: 898 | version "2.0.4" 899 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" 900 | integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== 901 | 902 | path-exists@^4.0.0: 903 | version "4.0.0" 904 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 905 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 906 | 907 | path-is-absolute@^1.0.0: 908 | version "1.0.1" 909 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 910 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 911 | 912 | pathval@^1.1.1: 913 | version "1.1.1" 914 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 915 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 916 | 917 | picomatch@^2.0.4, picomatch@^2.2.1: 918 | version "2.3.1" 919 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 920 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 921 | 922 | randombytes@^2.1.0: 923 | version "2.1.0" 924 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 925 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 926 | dependencies: 927 | safe-buffer "^5.1.0" 928 | 929 | readdirp@~3.6.0: 930 | version "3.6.0" 931 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 932 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 933 | dependencies: 934 | picomatch "^2.2.1" 935 | 936 | regenerator-runtime@^0.13.4: 937 | version "0.13.9" 938 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" 939 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 940 | 941 | require-directory@^2.1.1: 942 | version "2.1.1" 943 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 944 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 945 | 946 | rpc-websockets@^7.4.2: 947 | version "7.4.16" 948 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.16.tgz#eb701cdef577d4357ba5f526d50e25f370396fac" 949 | integrity sha512-0b7OVhutzwRIaYAtJo5tqtaQTWKfwAsKnaThOSOy+VkhVdleNUgb8eZnWSdWITRZZEigV5uPEIDr5KZe4DBrdQ== 950 | dependencies: 951 | "@babel/runtime" "^7.11.2" 952 | circular-json "^0.5.9" 953 | eventemitter3 "^4.0.7" 954 | uuid "^8.3.0" 955 | ws "^7.4.5" 956 | optionalDependencies: 957 | bufferutil "^4.0.1" 958 | utf-8-validate "^5.0.2" 959 | 960 | safe-buffer@^5.0.1, safe-buffer@^5.1.0: 961 | version "5.2.1" 962 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 963 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 964 | 965 | secp256k1@^4.0.2: 966 | version "4.0.3" 967 | resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" 968 | integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== 969 | dependencies: 970 | elliptic "^6.5.4" 971 | node-addon-api "^2.0.0" 972 | node-gyp-build "^4.2.0" 973 | 974 | serialize-javascript@6.0.0: 975 | version "6.0.0" 976 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 977 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 978 | dependencies: 979 | randombytes "^2.1.0" 980 | 981 | snake-case@^3.0.4: 982 | version "3.0.4" 983 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" 984 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 985 | dependencies: 986 | dot-case "^3.0.4" 987 | tslib "^2.0.3" 988 | 989 | source-map-support@^0.5.6: 990 | version "0.5.21" 991 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 992 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 993 | dependencies: 994 | buffer-from "^1.0.0" 995 | source-map "^0.6.0" 996 | 997 | source-map@^0.6.0: 998 | version "0.6.1" 999 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1000 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1001 | 1002 | string-width@^4.1.0, string-width@^4.2.0: 1003 | version "4.2.3" 1004 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1005 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1006 | dependencies: 1007 | emoji-regex "^8.0.0" 1008 | is-fullwidth-code-point "^3.0.0" 1009 | strip-ansi "^6.0.1" 1010 | 1011 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1012 | version "6.0.1" 1013 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1014 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1015 | dependencies: 1016 | ansi-regex "^5.0.1" 1017 | 1018 | strip-bom@^3.0.0: 1019 | version "3.0.0" 1020 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1021 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1022 | 1023 | strip-json-comments@3.1.1: 1024 | version "3.1.1" 1025 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1026 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1027 | 1028 | superstruct@^0.14.2: 1029 | version "0.14.2" 1030 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" 1031 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 1032 | 1033 | supports-color@8.1.1: 1034 | version "8.1.1" 1035 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1036 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1037 | dependencies: 1038 | has-flag "^4.0.0" 1039 | 1040 | supports-color@^7.1.0: 1041 | version "7.2.0" 1042 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1043 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1044 | dependencies: 1045 | has-flag "^4.0.0" 1046 | 1047 | text-encoding-utf-8@^1.0.2: 1048 | version "1.0.2" 1049 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" 1050 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1051 | 1052 | "through@>=2.2.7 <3": 1053 | version "2.3.8" 1054 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1055 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1056 | 1057 | to-regex-range@^5.0.1: 1058 | version "5.0.1" 1059 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1060 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1061 | dependencies: 1062 | is-number "^7.0.0" 1063 | 1064 | toml@^3.0.0: 1065 | version "3.0.0" 1066 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" 1067 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 1068 | 1069 | tr46@~0.0.3: 1070 | version "0.0.3" 1071 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1072 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= 1073 | 1074 | traverse-chain@~0.1.0: 1075 | version "0.1.0" 1076 | resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" 1077 | integrity sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE= 1078 | 1079 | ts-mocha@^8.0.0: 1080 | version "8.0.0" 1081 | resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-8.0.0.tgz#962d0fa12eeb6468aa1a6b594bb3bbc818da3ef0" 1082 | integrity sha512-Kou1yxTlubLnD5C3unlCVO7nh0HERTezjoVhVw/M5S1SqoUec0WgllQvPk3vzPMc6by8m6xD1uR1yRf8lnVUbA== 1083 | dependencies: 1084 | ts-node "7.0.1" 1085 | optionalDependencies: 1086 | tsconfig-paths "^3.5.0" 1087 | 1088 | ts-node@7.0.1: 1089 | version "7.0.1" 1090 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" 1091 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1092 | dependencies: 1093 | arrify "^1.0.0" 1094 | buffer-from "^1.1.0" 1095 | diff "^3.1.0" 1096 | make-error "^1.1.1" 1097 | minimist "^1.2.0" 1098 | mkdirp "^0.5.1" 1099 | source-map-support "^0.5.6" 1100 | yn "^2.0.0" 1101 | 1102 | tsconfig-paths@^3.5.0: 1103 | version "3.12.0" 1104 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" 1105 | integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== 1106 | dependencies: 1107 | "@types/json5" "^0.0.29" 1108 | json5 "^1.0.1" 1109 | minimist "^1.2.0" 1110 | strip-bom "^3.0.0" 1111 | 1112 | tslib@^2.0.3: 1113 | version "2.3.1" 1114 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" 1115 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 1116 | 1117 | tweetnacl@^1.0.0: 1118 | version "1.0.3" 1119 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 1120 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 1121 | 1122 | type-detect@^4.0.0, type-detect@^4.0.5: 1123 | version "4.0.8" 1124 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1125 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1126 | 1127 | typescript@^4.3.5: 1128 | version "4.5.5" 1129 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" 1130 | integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== 1131 | 1132 | utf-8-validate@^5.0.2: 1133 | version "5.0.8" 1134 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.8.tgz#4a735a61661dbb1c59a0868c397d2fe263f14e58" 1135 | integrity sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA== 1136 | dependencies: 1137 | node-gyp-build "^4.3.0" 1138 | 1139 | uuid@^8.3.0, uuid@^8.3.2: 1140 | version "8.3.2" 1141 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 1142 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1143 | 1144 | webidl-conversions@^3.0.0: 1145 | version "3.0.1" 1146 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1147 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= 1148 | 1149 | whatwg-url@^5.0.0: 1150 | version "5.0.0" 1151 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1152 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= 1153 | dependencies: 1154 | tr46 "~0.0.3" 1155 | webidl-conversions "^3.0.0" 1156 | 1157 | which@2.0.2: 1158 | version "2.0.2" 1159 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1160 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1161 | dependencies: 1162 | isexe "^2.0.0" 1163 | 1164 | workerpool@6.1.5: 1165 | version "6.1.5" 1166 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" 1167 | integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== 1168 | 1169 | wrap-ansi@^7.0.0: 1170 | version "7.0.0" 1171 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1172 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1173 | dependencies: 1174 | ansi-styles "^4.0.0" 1175 | string-width "^4.1.0" 1176 | strip-ansi "^6.0.0" 1177 | 1178 | wrappy@1: 1179 | version "1.0.2" 1180 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1181 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1182 | 1183 | ws@^7.4.5: 1184 | version "7.5.6" 1185 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" 1186 | integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== 1187 | 1188 | y18n@^5.0.5: 1189 | version "5.0.8" 1190 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1191 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1192 | 1193 | yargs-parser@20.2.4: 1194 | version "20.2.4" 1195 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1196 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1197 | 1198 | yargs-parser@^20.2.2: 1199 | version "20.2.9" 1200 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1201 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1202 | 1203 | yargs-unparser@2.0.0: 1204 | version "2.0.0" 1205 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1206 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1207 | dependencies: 1208 | camelcase "^6.0.0" 1209 | decamelize "^4.0.0" 1210 | flat "^5.0.2" 1211 | is-plain-obj "^2.1.0" 1212 | 1213 | yargs@16.2.0: 1214 | version "16.2.0" 1215 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1216 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1217 | dependencies: 1218 | cliui "^7.0.2" 1219 | escalade "^3.1.1" 1220 | get-caller-file "^2.0.5" 1221 | require-directory "^2.1.1" 1222 | string-width "^4.2.0" 1223 | y18n "^5.0.5" 1224 | yargs-parser "^20.2.2" 1225 | 1226 | yn@^2.0.0: 1227 | version "2.0.0" 1228 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1229 | integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= 1230 | 1231 | yocto-queue@^0.1.0: 1232 | version "0.1.0" 1233 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1234 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1235 | --------------------------------------------------------------------------------