├── .gitignore ├── Anchor.toml ├── Cargo.lock ├── Cargo.toml ├── Profile.tsx ├── app ├── .eslintrc.json ├── .gitignore ├── README.md ├── components │ ├── HomeSection.js │ ├── Loading.js │ ├── WalletConnectProvider.js │ └── todo │ │ ├── TodoItem.js │ │ ├── TodoList.js │ │ └── TodoSection.js ├── constants │ ├── idl.js │ └── index.js ├── hooks │ └── todo.js ├── next.config.js ├── package.json ├── pages │ ├── _app.js │ └── index.js ├── public │ └── favicon.ico ├── styles │ ├── Home.module.css │ ├── Todo.module.css │ └── global.css ├── utils │ └── index.js └── yarn.lock ├── migrations └── deploy.ts ├── package.json ├── programs └── clever-todo │ ├── Cargo.toml │ ├── Xargo.toml │ └── src │ ├── constant.rs │ ├── error.rs │ ├── lib.rs │ └── states.rs ├── tests └── clever-todo.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | node_modules 5 | .pnp 6 | .pnp.js 7 | 8 | # testing 9 | coverage 10 | 11 | # next.js 12 | .next/ 13 | out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # snyk code quality 35 | .dccache 36 | 37 | # webstorm 38 | .idea 39 | 40 | # anchor specific 41 | .anchor 42 | .DS_Store 43 | target 44 | **/*.rs.bk 45 | test-ledger 46 | -------------------------------------------------------------------------------- /Anchor.toml: -------------------------------------------------------------------------------- 1 | [features] 2 | seeds = false 3 | [programs.localnet] 4 | clever_todo = "FHi9b593PHHVjcrvRBXjAmRd6JsHkWCoLmC8CHdkDUy3" 5 | 6 | [programs.devnet] 7 | clever_todo = "FHi9b593PHHVjcrvRBXjAmRd6JsHkWCoLmC8CHdkDUy3" 8 | 9 | [registry] 10 | url = "https://anchor.projectserum.com" 11 | 12 | [provider] 13 | cluster = "devnet" 14 | wallet = "/home/john/.config/solana/id.json" 15 | 16 | [scripts] 17 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 18 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ahash" 7 | version = "0.7.6" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 10 | dependencies = [ 11 | "getrandom 0.2.7", 12 | "once_cell", 13 | "version_check", 14 | ] 15 | 16 | [[package]] 17 | name = "aho-corasick" 18 | version = "0.7.18" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" 21 | dependencies = [ 22 | "memchr", 23 | ] 24 | 25 | [[package]] 26 | name = "anchor-attribute-access-control" 27 | version = "0.25.0" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "70f6ee9518f50ff4d434471ccf569186022bdd5ef65a21d14da3ea5231af944f" 30 | dependencies = [ 31 | "anchor-syn", 32 | "anyhow", 33 | "proc-macro2", 34 | "quote", 35 | "regex", 36 | "syn", 37 | ] 38 | 39 | [[package]] 40 | name = "anchor-attribute-account" 41 | version = "0.25.0" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "32c92bcf5388b52676d990f85bbfd838a8f5672393135063a50dc79b2b837c79" 44 | dependencies = [ 45 | "anchor-syn", 46 | "anyhow", 47 | "bs58 0.4.0", 48 | "proc-macro2", 49 | "quote", 50 | "rustversion", 51 | "syn", 52 | ] 53 | 54 | [[package]] 55 | name = "anchor-attribute-constant" 56 | version = "0.25.0" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "0844974ac35e8ced62056b0d63777ebcdc5807438b8b189c881e2b647450b70a" 59 | dependencies = [ 60 | "anchor-syn", 61 | "proc-macro2", 62 | "syn", 63 | ] 64 | 65 | [[package]] 66 | name = "anchor-attribute-error" 67 | version = "0.25.0" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "0f7467345e67a6f1d4b862b9763a4160ad89d18c247b8c902807768f7b6e23df" 70 | dependencies = [ 71 | "anchor-syn", 72 | "proc-macro2", 73 | "quote", 74 | "syn", 75 | ] 76 | 77 | [[package]] 78 | name = "anchor-attribute-event" 79 | version = "0.25.0" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "8774e4c1ac71f71a5aea7e4932fb69c30e3b8155c4fa59fd69401195434528a9" 82 | dependencies = [ 83 | "anchor-syn", 84 | "anyhow", 85 | "proc-macro2", 86 | "quote", 87 | "syn", 88 | ] 89 | 90 | [[package]] 91 | name = "anchor-attribute-interface" 92 | version = "0.25.0" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "90eeb6e1c80f9f94fcef93a52813f6472186200e275e83cb3fac92b801de92f7" 95 | dependencies = [ 96 | "anchor-syn", 97 | "anyhow", 98 | "heck", 99 | "proc-macro2", 100 | "quote", 101 | "syn", 102 | ] 103 | 104 | [[package]] 105 | name = "anchor-attribute-program" 106 | version = "0.25.0" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "ac515a7a5a4fea7fc768b1cec40ddb948e148ea657637c75f94f283212326cb9" 109 | dependencies = [ 110 | "anchor-syn", 111 | "anyhow", 112 | "proc-macro2", 113 | "quote", 114 | "syn", 115 | ] 116 | 117 | [[package]] 118 | name = "anchor-attribute-state" 119 | version = "0.25.0" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "43dc667b62ff71450f19dcfcc37b0c408fd4ddd89e8650368c2b0984b110603f" 122 | dependencies = [ 123 | "anchor-syn", 124 | "anyhow", 125 | "proc-macro2", 126 | "quote", 127 | "syn", 128 | ] 129 | 130 | [[package]] 131 | name = "anchor-derive-accounts" 132 | version = "0.25.0" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "7354d583a06701d24800a8ec4c2b0491f62581a331af349205e23421e0b56643" 135 | dependencies = [ 136 | "anchor-syn", 137 | "anyhow", 138 | "proc-macro2", 139 | "quote", 140 | "syn", 141 | ] 142 | 143 | [[package]] 144 | name = "anchor-lang" 145 | version = "0.25.0" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "ff5f57ec5e12fa6874b27f3d5c1f6f44302d3ad86c1266197ff7611bf6f5d251" 148 | dependencies = [ 149 | "anchor-attribute-access-control", 150 | "anchor-attribute-account", 151 | "anchor-attribute-constant", 152 | "anchor-attribute-error", 153 | "anchor-attribute-event", 154 | "anchor-attribute-interface", 155 | "anchor-attribute-program", 156 | "anchor-attribute-state", 157 | "anchor-derive-accounts", 158 | "arrayref", 159 | "base64 0.13.0", 160 | "bincode", 161 | "borsh", 162 | "bytemuck", 163 | "solana-program", 164 | "thiserror", 165 | ] 166 | 167 | [[package]] 168 | name = "anchor-profile" 169 | version = "0.1.0" 170 | dependencies = [ 171 | "anchor-lang", 172 | ] 173 | 174 | [[package]] 175 | name = "anchor-syn" 176 | version = "0.25.0" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "55aa1e680d9471342122ed5b6bc13bf5da473b0f7e4677d41a6954e5cc8ad155" 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 0.9.9", 189 | "syn", 190 | "thiserror", 191 | ] 192 | 193 | [[package]] 194 | name = "anyhow" 195 | version = "1.0.58" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" 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 = "autocfg" 213 | version = "1.1.0" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 216 | 217 | [[package]] 218 | name = "base64" 219 | version = "0.12.3" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 222 | 223 | [[package]] 224 | name = "base64" 225 | version = "0.13.0" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 228 | 229 | [[package]] 230 | name = "bincode" 231 | version = "1.3.3" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 234 | dependencies = [ 235 | "serde", 236 | ] 237 | 238 | [[package]] 239 | name = "bitflags" 240 | version = "1.3.2" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 243 | 244 | [[package]] 245 | name = "bitmaps" 246 | version = "2.1.0" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" 249 | dependencies = [ 250 | "typenum", 251 | ] 252 | 253 | [[package]] 254 | name = "blake3" 255 | version = "1.3.1" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" 258 | dependencies = [ 259 | "arrayref", 260 | "arrayvec", 261 | "cc", 262 | "cfg-if", 263 | "constant_time_eq", 264 | "digest 0.10.3", 265 | ] 266 | 267 | [[package]] 268 | name = "block-buffer" 269 | version = "0.9.0" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 272 | dependencies = [ 273 | "generic-array", 274 | ] 275 | 276 | [[package]] 277 | name = "block-buffer" 278 | version = "0.10.2" 279 | source = "registry+https://github.com/rust-lang/crates.io-index" 280 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 281 | dependencies = [ 282 | "generic-array", 283 | ] 284 | 285 | [[package]] 286 | name = "borsh" 287 | version = "0.9.3" 288 | source = "registry+https://github.com/rust-lang/crates.io-index" 289 | checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" 290 | dependencies = [ 291 | "borsh-derive", 292 | "hashbrown", 293 | ] 294 | 295 | [[package]] 296 | name = "borsh-derive" 297 | version = "0.9.3" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" 300 | dependencies = [ 301 | "borsh-derive-internal", 302 | "borsh-schema-derive-internal", 303 | "proc-macro-crate", 304 | "proc-macro2", 305 | "syn", 306 | ] 307 | 308 | [[package]] 309 | name = "borsh-derive-internal" 310 | version = "0.9.3" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" 313 | dependencies = [ 314 | "proc-macro2", 315 | "quote", 316 | "syn", 317 | ] 318 | 319 | [[package]] 320 | name = "borsh-schema-derive-internal" 321 | version = "0.9.3" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" 324 | dependencies = [ 325 | "proc-macro2", 326 | "quote", 327 | "syn", 328 | ] 329 | 330 | [[package]] 331 | name = "bs58" 332 | version = "0.3.1" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" 335 | 336 | [[package]] 337 | name = "bs58" 338 | version = "0.4.0" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 341 | 342 | [[package]] 343 | name = "bumpalo" 344 | version = "3.10.0" 345 | source = "registry+https://github.com/rust-lang/crates.io-index" 346 | checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" 347 | 348 | [[package]] 349 | name = "bv" 350 | version = "0.11.1" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 353 | dependencies = [ 354 | "feature-probe", 355 | "serde", 356 | ] 357 | 358 | [[package]] 359 | name = "bytemuck" 360 | version = "1.11.0" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" 363 | dependencies = [ 364 | "bytemuck_derive", 365 | ] 366 | 367 | [[package]] 368 | name = "bytemuck_derive" 369 | version = "1.1.1" 370 | source = "registry+https://github.com/rust-lang/crates.io-index" 371 | checksum = "cfd2f4180c5721da6335cc9e9061cce522b87a35e51cc57636d28d22a9863c80" 372 | dependencies = [ 373 | "proc-macro2", 374 | "quote", 375 | "syn", 376 | ] 377 | 378 | [[package]] 379 | name = "byteorder" 380 | version = "1.4.3" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 383 | 384 | [[package]] 385 | name = "cc" 386 | version = "1.0.73" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 389 | 390 | [[package]] 391 | name = "cfg-if" 392 | version = "1.0.0" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 395 | 396 | [[package]] 397 | name = "console_error_panic_hook" 398 | version = "0.1.7" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 401 | dependencies = [ 402 | "cfg-if", 403 | "wasm-bindgen", 404 | ] 405 | 406 | [[package]] 407 | name = "console_log" 408 | version = "0.2.0" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" 411 | dependencies = [ 412 | "log", 413 | "web-sys", 414 | ] 415 | 416 | [[package]] 417 | name = "constant_time_eq" 418 | version = "0.1.5" 419 | source = "registry+https://github.com/rust-lang/crates.io-index" 420 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 421 | 422 | [[package]] 423 | name = "cpufeatures" 424 | version = "0.2.2" 425 | source = "registry+https://github.com/rust-lang/crates.io-index" 426 | checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" 427 | dependencies = [ 428 | "libc", 429 | ] 430 | 431 | [[package]] 432 | name = "crossbeam-channel" 433 | version = "0.5.6" 434 | source = "registry+https://github.com/rust-lang/crates.io-index" 435 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" 436 | dependencies = [ 437 | "cfg-if", 438 | "crossbeam-utils", 439 | ] 440 | 441 | [[package]] 442 | name = "crossbeam-deque" 443 | version = "0.8.2" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" 446 | dependencies = [ 447 | "cfg-if", 448 | "crossbeam-epoch", 449 | "crossbeam-utils", 450 | ] 451 | 452 | [[package]] 453 | name = "crossbeam-epoch" 454 | version = "0.9.10" 455 | source = "registry+https://github.com/rust-lang/crates.io-index" 456 | checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" 457 | dependencies = [ 458 | "autocfg", 459 | "cfg-if", 460 | "crossbeam-utils", 461 | "memoffset", 462 | "once_cell", 463 | "scopeguard", 464 | ] 465 | 466 | [[package]] 467 | name = "crossbeam-utils" 468 | version = "0.8.11" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" 471 | dependencies = [ 472 | "cfg-if", 473 | "once_cell", 474 | ] 475 | 476 | [[package]] 477 | name = "crunchy" 478 | version = "0.2.2" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 481 | 482 | [[package]] 483 | name = "crypto-common" 484 | version = "0.1.6" 485 | source = "registry+https://github.com/rust-lang/crates.io-index" 486 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 487 | dependencies = [ 488 | "generic-array", 489 | "typenum", 490 | ] 491 | 492 | [[package]] 493 | name = "crypto-mac" 494 | version = "0.8.0" 495 | source = "registry+https://github.com/rust-lang/crates.io-index" 496 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 497 | dependencies = [ 498 | "generic-array", 499 | "subtle", 500 | ] 501 | 502 | [[package]] 503 | name = "curve25519-dalek" 504 | version = "3.2.1" 505 | source = "registry+https://github.com/rust-lang/crates.io-index" 506 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 507 | dependencies = [ 508 | "byteorder", 509 | "digest 0.9.0", 510 | "rand_core 0.5.1", 511 | "subtle", 512 | "zeroize", 513 | ] 514 | 515 | [[package]] 516 | name = "digest" 517 | version = "0.9.0" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 520 | dependencies = [ 521 | "generic-array", 522 | ] 523 | 524 | [[package]] 525 | name = "digest" 526 | version = "0.10.3" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 529 | dependencies = [ 530 | "block-buffer 0.10.2", 531 | "crypto-common", 532 | "subtle", 533 | ] 534 | 535 | [[package]] 536 | name = "either" 537 | version = "1.7.0" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" 540 | 541 | [[package]] 542 | name = "feature-probe" 543 | version = "0.1.1" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 546 | 547 | [[package]] 548 | name = "generic-array" 549 | version = "0.14.5" 550 | source = "registry+https://github.com/rust-lang/crates.io-index" 551 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" 552 | dependencies = [ 553 | "serde", 554 | "typenum", 555 | "version_check", 556 | ] 557 | 558 | [[package]] 559 | name = "getrandom" 560 | version = "0.1.16" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 563 | dependencies = [ 564 | "cfg-if", 565 | "js-sys", 566 | "libc", 567 | "wasi 0.9.0+wasi-snapshot-preview1", 568 | "wasm-bindgen", 569 | ] 570 | 571 | [[package]] 572 | name = "getrandom" 573 | version = "0.2.7" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 576 | dependencies = [ 577 | "cfg-if", 578 | "libc", 579 | "wasi 0.11.0+wasi-snapshot-preview1", 580 | ] 581 | 582 | [[package]] 583 | name = "hashbrown" 584 | version = "0.11.2" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 587 | dependencies = [ 588 | "ahash", 589 | ] 590 | 591 | [[package]] 592 | name = "heck" 593 | version = "0.3.3" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 596 | dependencies = [ 597 | "unicode-segmentation", 598 | ] 599 | 600 | [[package]] 601 | name = "hermit-abi" 602 | version = "0.1.19" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 605 | dependencies = [ 606 | "libc", 607 | ] 608 | 609 | [[package]] 610 | name = "hmac" 611 | version = "0.8.1" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 614 | dependencies = [ 615 | "crypto-mac", 616 | "digest 0.9.0", 617 | ] 618 | 619 | [[package]] 620 | name = "hmac-drbg" 621 | version = "0.3.0" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 624 | dependencies = [ 625 | "digest 0.9.0", 626 | "generic-array", 627 | "hmac", 628 | ] 629 | 630 | [[package]] 631 | name = "im" 632 | version = "15.1.0" 633 | source = "registry+https://github.com/rust-lang/crates.io-index" 634 | checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" 635 | dependencies = [ 636 | "bitmaps", 637 | "rand_core 0.6.3", 638 | "rand_xoshiro", 639 | "rayon", 640 | "serde", 641 | "sized-chunks", 642 | "typenum", 643 | "version_check", 644 | ] 645 | 646 | [[package]] 647 | name = "itertools" 648 | version = "0.10.3" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 651 | dependencies = [ 652 | "either", 653 | ] 654 | 655 | [[package]] 656 | name = "itoa" 657 | version = "1.0.2" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" 660 | 661 | [[package]] 662 | name = "js-sys" 663 | version = "0.3.58" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" 666 | dependencies = [ 667 | "wasm-bindgen", 668 | ] 669 | 670 | [[package]] 671 | name = "keccak" 672 | version = "0.1.2" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" 675 | 676 | [[package]] 677 | name = "lazy_static" 678 | version = "1.4.0" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 681 | 682 | [[package]] 683 | name = "libc" 684 | version = "0.2.126" 685 | source = "registry+https://github.com/rust-lang/crates.io-index" 686 | checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" 687 | 688 | [[package]] 689 | name = "libsecp256k1" 690 | version = "0.6.0" 691 | source = "registry+https://github.com/rust-lang/crates.io-index" 692 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 693 | dependencies = [ 694 | "arrayref", 695 | "base64 0.12.3", 696 | "digest 0.9.0", 697 | "hmac-drbg", 698 | "libsecp256k1-core", 699 | "libsecp256k1-gen-ecmult", 700 | "libsecp256k1-gen-genmult", 701 | "rand", 702 | "serde", 703 | "sha2 0.9.9", 704 | "typenum", 705 | ] 706 | 707 | [[package]] 708 | name = "libsecp256k1-core" 709 | version = "0.2.2" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 712 | dependencies = [ 713 | "crunchy", 714 | "digest 0.9.0", 715 | "subtle", 716 | ] 717 | 718 | [[package]] 719 | name = "libsecp256k1-gen-ecmult" 720 | version = "0.2.1" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 723 | dependencies = [ 724 | "libsecp256k1-core", 725 | ] 726 | 727 | [[package]] 728 | name = "libsecp256k1-gen-genmult" 729 | version = "0.2.1" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 732 | dependencies = [ 733 | "libsecp256k1-core", 734 | ] 735 | 736 | [[package]] 737 | name = "lock_api" 738 | version = "0.4.7" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 741 | dependencies = [ 742 | "autocfg", 743 | "scopeguard", 744 | ] 745 | 746 | [[package]] 747 | name = "log" 748 | version = "0.4.17" 749 | source = "registry+https://github.com/rust-lang/crates.io-index" 750 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 751 | dependencies = [ 752 | "cfg-if", 753 | ] 754 | 755 | [[package]] 756 | name = "memchr" 757 | version = "2.5.0" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 760 | 761 | [[package]] 762 | name = "memmap2" 763 | version = "0.5.5" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "3a79b39c93a7a5a27eeaf9a23b5ff43f1b9e0ad6b1cdd441140ae53c35613fc7" 766 | dependencies = [ 767 | "libc", 768 | ] 769 | 770 | [[package]] 771 | name = "memoffset" 772 | version = "0.6.5" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 775 | dependencies = [ 776 | "autocfg", 777 | ] 778 | 779 | [[package]] 780 | name = "num-derive" 781 | version = "0.3.3" 782 | source = "registry+https://github.com/rust-lang/crates.io-index" 783 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 784 | dependencies = [ 785 | "proc-macro2", 786 | "quote", 787 | "syn", 788 | ] 789 | 790 | [[package]] 791 | name = "num-traits" 792 | version = "0.2.15" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 795 | dependencies = [ 796 | "autocfg", 797 | ] 798 | 799 | [[package]] 800 | name = "num_cpus" 801 | version = "1.13.1" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 804 | dependencies = [ 805 | "hermit-abi", 806 | "libc", 807 | ] 808 | 809 | [[package]] 810 | name = "once_cell" 811 | version = "1.13.0" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" 814 | 815 | [[package]] 816 | name = "opaque-debug" 817 | version = "0.3.0" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 820 | 821 | [[package]] 822 | name = "parking_lot" 823 | version = "0.12.1" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 826 | dependencies = [ 827 | "lock_api", 828 | "parking_lot_core", 829 | ] 830 | 831 | [[package]] 832 | name = "parking_lot_core" 833 | version = "0.9.3" 834 | source = "registry+https://github.com/rust-lang/crates.io-index" 835 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 836 | dependencies = [ 837 | "cfg-if", 838 | "libc", 839 | "redox_syscall", 840 | "smallvec", 841 | "windows-sys", 842 | ] 843 | 844 | [[package]] 845 | name = "ppv-lite86" 846 | version = "0.2.16" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 849 | 850 | [[package]] 851 | name = "proc-macro-crate" 852 | version = "0.1.5" 853 | source = "registry+https://github.com/rust-lang/crates.io-index" 854 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 855 | dependencies = [ 856 | "toml", 857 | ] 858 | 859 | [[package]] 860 | name = "proc-macro2" 861 | version = "1.0.40" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" 864 | dependencies = [ 865 | "unicode-ident", 866 | ] 867 | 868 | [[package]] 869 | name = "proc-macro2-diagnostics" 870 | version = "0.9.1" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" 873 | dependencies = [ 874 | "proc-macro2", 875 | "quote", 876 | "syn", 877 | "version_check", 878 | "yansi", 879 | ] 880 | 881 | [[package]] 882 | name = "quote" 883 | version = "1.0.20" 884 | source = "registry+https://github.com/rust-lang/crates.io-index" 885 | checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" 886 | dependencies = [ 887 | "proc-macro2", 888 | ] 889 | 890 | [[package]] 891 | name = "rand" 892 | version = "0.7.3" 893 | source = "registry+https://github.com/rust-lang/crates.io-index" 894 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 895 | dependencies = [ 896 | "getrandom 0.1.16", 897 | "libc", 898 | "rand_chacha", 899 | "rand_core 0.5.1", 900 | "rand_hc", 901 | ] 902 | 903 | [[package]] 904 | name = "rand_chacha" 905 | version = "0.2.2" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 908 | dependencies = [ 909 | "ppv-lite86", 910 | "rand_core 0.5.1", 911 | ] 912 | 913 | [[package]] 914 | name = "rand_core" 915 | version = "0.5.1" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 918 | dependencies = [ 919 | "getrandom 0.1.16", 920 | ] 921 | 922 | [[package]] 923 | name = "rand_core" 924 | version = "0.6.3" 925 | source = "registry+https://github.com/rust-lang/crates.io-index" 926 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 927 | 928 | [[package]] 929 | name = "rand_hc" 930 | version = "0.2.0" 931 | source = "registry+https://github.com/rust-lang/crates.io-index" 932 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 933 | dependencies = [ 934 | "rand_core 0.5.1", 935 | ] 936 | 937 | [[package]] 938 | name = "rand_xoshiro" 939 | version = "0.6.0" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" 942 | dependencies = [ 943 | "rand_core 0.6.3", 944 | ] 945 | 946 | [[package]] 947 | name = "rayon" 948 | version = "1.5.3" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" 951 | dependencies = [ 952 | "autocfg", 953 | "crossbeam-deque", 954 | "either", 955 | "rayon-core", 956 | ] 957 | 958 | [[package]] 959 | name = "rayon-core" 960 | version = "1.9.3" 961 | source = "registry+https://github.com/rust-lang/crates.io-index" 962 | checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" 963 | dependencies = [ 964 | "crossbeam-channel", 965 | "crossbeam-deque", 966 | "crossbeam-utils", 967 | "num_cpus", 968 | ] 969 | 970 | [[package]] 971 | name = "redox_syscall" 972 | version = "0.2.15" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "534cfe58d6a18cc17120fbf4635d53d14691c1fe4d951064df9bd326178d7d5a" 975 | dependencies = [ 976 | "bitflags", 977 | ] 978 | 979 | [[package]] 980 | name = "regex" 981 | version = "1.6.0" 982 | source = "registry+https://github.com/rust-lang/crates.io-index" 983 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 984 | dependencies = [ 985 | "aho-corasick", 986 | "memchr", 987 | "regex-syntax", 988 | ] 989 | 990 | [[package]] 991 | name = "regex-syntax" 992 | version = "0.6.27" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 995 | 996 | [[package]] 997 | name = "rustc_version" 998 | version = "0.4.0" 999 | source = "registry+https://github.com/rust-lang/crates.io-index" 1000 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1001 | dependencies = [ 1002 | "semver", 1003 | ] 1004 | 1005 | [[package]] 1006 | name = "rustversion" 1007 | version = "1.0.8" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8" 1010 | 1011 | [[package]] 1012 | name = "ryu" 1013 | version = "1.0.10" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" 1016 | 1017 | [[package]] 1018 | name = "scopeguard" 1019 | version = "1.1.0" 1020 | source = "registry+https://github.com/rust-lang/crates.io-index" 1021 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1022 | 1023 | [[package]] 1024 | name = "semver" 1025 | version = "1.0.12" 1026 | source = "registry+https://github.com/rust-lang/crates.io-index" 1027 | checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" 1028 | 1029 | [[package]] 1030 | name = "serde" 1031 | version = "1.0.140" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" 1034 | dependencies = [ 1035 | "serde_derive", 1036 | ] 1037 | 1038 | [[package]] 1039 | name = "serde_bytes" 1040 | version = "0.11.6" 1041 | source = "registry+https://github.com/rust-lang/crates.io-index" 1042 | checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54" 1043 | dependencies = [ 1044 | "serde", 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "serde_derive" 1049 | version = "1.0.140" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" 1052 | dependencies = [ 1053 | "proc-macro2", 1054 | "quote", 1055 | "syn", 1056 | ] 1057 | 1058 | [[package]] 1059 | name = "serde_json" 1060 | version = "1.0.82" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" 1063 | dependencies = [ 1064 | "itoa", 1065 | "ryu", 1066 | "serde", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "sha2" 1071 | version = "0.9.9" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1074 | dependencies = [ 1075 | "block-buffer 0.9.0", 1076 | "cfg-if", 1077 | "cpufeatures", 1078 | "digest 0.9.0", 1079 | "opaque-debug", 1080 | ] 1081 | 1082 | [[package]] 1083 | name = "sha2" 1084 | version = "0.10.2" 1085 | source = "registry+https://github.com/rust-lang/crates.io-index" 1086 | checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" 1087 | dependencies = [ 1088 | "cfg-if", 1089 | "cpufeatures", 1090 | "digest 0.10.3", 1091 | ] 1092 | 1093 | [[package]] 1094 | name = "sha3" 1095 | version = "0.10.1" 1096 | source = "registry+https://github.com/rust-lang/crates.io-index" 1097 | checksum = "881bf8156c87b6301fc5ca6b27f11eeb2761224c7081e69b409d5a1951a70c86" 1098 | dependencies = [ 1099 | "digest 0.10.3", 1100 | "keccak", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "sized-chunks" 1105 | version = "0.6.5" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" 1108 | dependencies = [ 1109 | "bitmaps", 1110 | "typenum", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "smallvec" 1115 | version = "1.9.0" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" 1118 | 1119 | [[package]] 1120 | name = "solana-frozen-abi" 1121 | version = "1.10.33" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "49a5d3280421bb53fc12bdba1eaa505153fb4f99a06b5609dae22192652ead3b" 1124 | dependencies = [ 1125 | "bs58 0.4.0", 1126 | "bv", 1127 | "generic-array", 1128 | "im", 1129 | "lazy_static", 1130 | "log", 1131 | "memmap2", 1132 | "rustc_version", 1133 | "serde", 1134 | "serde_bytes", 1135 | "serde_derive", 1136 | "sha2 0.10.2", 1137 | "solana-frozen-abi-macro", 1138 | "thiserror", 1139 | ] 1140 | 1141 | [[package]] 1142 | name = "solana-frozen-abi-macro" 1143 | version = "1.10.33" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "635c60ac96b1347af272c625465068b908aff919d19f29b5795a44310310494d" 1146 | dependencies = [ 1147 | "proc-macro2", 1148 | "quote", 1149 | "rustc_version", 1150 | "syn", 1151 | ] 1152 | 1153 | [[package]] 1154 | name = "solana-program" 1155 | version = "1.10.33" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | checksum = "eeecf504cee2821b006871f70e7a1f54db15f914cedf259eaf5976fe606470f0" 1158 | dependencies = [ 1159 | "base64 0.13.0", 1160 | "bincode", 1161 | "bitflags", 1162 | "blake3", 1163 | "borsh", 1164 | "borsh-derive", 1165 | "bs58 0.4.0", 1166 | "bv", 1167 | "bytemuck", 1168 | "console_error_panic_hook", 1169 | "console_log", 1170 | "curve25519-dalek", 1171 | "getrandom 0.1.16", 1172 | "itertools", 1173 | "js-sys", 1174 | "lazy_static", 1175 | "libsecp256k1", 1176 | "log", 1177 | "num-derive", 1178 | "num-traits", 1179 | "parking_lot", 1180 | "rand", 1181 | "rustc_version", 1182 | "rustversion", 1183 | "serde", 1184 | "serde_bytes", 1185 | "serde_derive", 1186 | "sha2 0.10.2", 1187 | "sha3", 1188 | "solana-frozen-abi", 1189 | "solana-frozen-abi-macro", 1190 | "solana-sdk-macro", 1191 | "thiserror", 1192 | "wasm-bindgen", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "solana-sdk-macro" 1197 | version = "1.10.33" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "2b8bcac4394644f21dc013e932a7df9f536fcecef3e5df43fe362b4ec532ce30" 1200 | dependencies = [ 1201 | "bs58 0.4.0", 1202 | "proc-macro2", 1203 | "quote", 1204 | "rustversion", 1205 | "syn", 1206 | ] 1207 | 1208 | [[package]] 1209 | name = "subtle" 1210 | version = "2.4.1" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1213 | 1214 | [[package]] 1215 | name = "syn" 1216 | version = "1.0.98" 1217 | source = "registry+https://github.com/rust-lang/crates.io-index" 1218 | checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" 1219 | dependencies = [ 1220 | "proc-macro2", 1221 | "quote", 1222 | "unicode-ident", 1223 | ] 1224 | 1225 | [[package]] 1226 | name = "thiserror" 1227 | version = "1.0.31" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" 1230 | dependencies = [ 1231 | "thiserror-impl", 1232 | ] 1233 | 1234 | [[package]] 1235 | name = "thiserror-impl" 1236 | version = "1.0.31" 1237 | source = "registry+https://github.com/rust-lang/crates.io-index" 1238 | checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" 1239 | dependencies = [ 1240 | "proc-macro2", 1241 | "quote", 1242 | "syn", 1243 | ] 1244 | 1245 | [[package]] 1246 | name = "toml" 1247 | version = "0.5.9" 1248 | source = "registry+https://github.com/rust-lang/crates.io-index" 1249 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 1250 | dependencies = [ 1251 | "serde", 1252 | ] 1253 | 1254 | [[package]] 1255 | name = "typenum" 1256 | version = "1.15.0" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1259 | 1260 | [[package]] 1261 | name = "unicode-ident" 1262 | version = "1.0.2" 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" 1264 | checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" 1265 | 1266 | [[package]] 1267 | name = "unicode-segmentation" 1268 | version = "1.9.0" 1269 | source = "registry+https://github.com/rust-lang/crates.io-index" 1270 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 1271 | 1272 | [[package]] 1273 | name = "version_check" 1274 | version = "0.9.4" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1277 | 1278 | [[package]] 1279 | name = "wasi" 1280 | version = "0.9.0+wasi-snapshot-preview1" 1281 | source = "registry+https://github.com/rust-lang/crates.io-index" 1282 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1283 | 1284 | [[package]] 1285 | name = "wasi" 1286 | version = "0.11.0+wasi-snapshot-preview1" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1289 | 1290 | [[package]] 1291 | name = "wasm-bindgen" 1292 | version = "0.2.81" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" 1295 | dependencies = [ 1296 | "cfg-if", 1297 | "wasm-bindgen-macro", 1298 | ] 1299 | 1300 | [[package]] 1301 | name = "wasm-bindgen-backend" 1302 | version = "0.2.81" 1303 | source = "registry+https://github.com/rust-lang/crates.io-index" 1304 | checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" 1305 | dependencies = [ 1306 | "bumpalo", 1307 | "lazy_static", 1308 | "log", 1309 | "proc-macro2", 1310 | "quote", 1311 | "syn", 1312 | "wasm-bindgen-shared", 1313 | ] 1314 | 1315 | [[package]] 1316 | name = "wasm-bindgen-macro" 1317 | version = "0.2.81" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" 1320 | dependencies = [ 1321 | "quote", 1322 | "wasm-bindgen-macro-support", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "wasm-bindgen-macro-support" 1327 | version = "0.2.81" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" 1330 | dependencies = [ 1331 | "proc-macro2", 1332 | "quote", 1333 | "syn", 1334 | "wasm-bindgen-backend", 1335 | "wasm-bindgen-shared", 1336 | ] 1337 | 1338 | [[package]] 1339 | name = "wasm-bindgen-shared" 1340 | version = "0.2.81" 1341 | source = "registry+https://github.com/rust-lang/crates.io-index" 1342 | checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" 1343 | 1344 | [[package]] 1345 | name = "web-sys" 1346 | version = "0.3.58" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" 1349 | dependencies = [ 1350 | "js-sys", 1351 | "wasm-bindgen", 1352 | ] 1353 | 1354 | [[package]] 1355 | name = "windows-sys" 1356 | version = "0.36.1" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 1359 | dependencies = [ 1360 | "windows_aarch64_msvc", 1361 | "windows_i686_gnu", 1362 | "windows_i686_msvc", 1363 | "windows_x86_64_gnu", 1364 | "windows_x86_64_msvc", 1365 | ] 1366 | 1367 | [[package]] 1368 | name = "windows_aarch64_msvc" 1369 | version = "0.36.1" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 1372 | 1373 | [[package]] 1374 | name = "windows_i686_gnu" 1375 | version = "0.36.1" 1376 | source = "registry+https://github.com/rust-lang/crates.io-index" 1377 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 1378 | 1379 | [[package]] 1380 | name = "windows_i686_msvc" 1381 | version = "0.36.1" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 1384 | 1385 | [[package]] 1386 | name = "windows_x86_64_gnu" 1387 | version = "0.36.1" 1388 | source = "registry+https://github.com/rust-lang/crates.io-index" 1389 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 1390 | 1391 | [[package]] 1392 | name = "windows_x86_64_msvc" 1393 | version = "0.36.1" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 1396 | 1397 | [[package]] 1398 | name = "yansi" 1399 | version = "0.5.1" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" 1402 | 1403 | [[package]] 1404 | name = "zeroize" 1405 | version = "1.3.0" 1406 | source = "registry+https://github.com/rust-lang/crates.io-index" 1407 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 1408 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "programs/*" 4 | ] 5 | -------------------------------------------------------------------------------- /Profile.tsx: -------------------------------------------------------------------------------- 1 | import React, { FC, useState, useEffect, useMemo } from 'react'; 2 | import * as anchor from "@project-serum/anchor"; 3 | import { useConnection, useWallet, useAnchorWallet } from '@solana/wallet-adapter-react'; 4 | 5 | import { 6 | Button, 7 | Box, 8 | Typography, 9 | Container, 10 | TextField 11 | } from '@mui/material'; 12 | import styled from 'styled-components' 13 | import { PublicKey, ParsedAccountData, Transaction, SystemProgram } from '@solana/web3.js'; 14 | 15 | import Header from '../components/Header'; 16 | import { useProfileProgram } from '../hooks'; 17 | import { utf8 } from '@project-serum/anchor/dist/cjs/utils/bytes'; 18 | import { RouteComponentProps } from 'react-router-dom'; 19 | 20 | 21 | export default function Profile({ 22 | match: { 23 | params: { address } 24 | } 25 | }: RouteComponentProps<{ address?: string }>) { 26 | 27 | const { connection } = useConnection(); 28 | const { publicKey, sendTransaction } = useWallet(); 29 | const anchorWallet = useAnchorWallet(); 30 | const program = useProfileProgram(connection, anchorWallet); 31 | const pubkey = useMemo(() => { 32 | return address ? new PublicKey(address) : publicKey; 33 | }, [ 34 | address, publicKey 35 | ]) 36 | const isMe = useMemo(() => { 37 | return pubkey?.toString() === publicKey?.toString(); 38 | }, [ 39 | pubkey, publicKey 40 | ]) 41 | 42 | const [name, setName] = useState(""); 43 | const [location, setLocation] = useState(""); 44 | const [likes, setLikes] = useState(0); 45 | 46 | const [exists, setExists] = useState(false); 47 | const [liked, setLiked] = useState(false); 48 | const [profilePda, setProfilePda] = useState(); 49 | const [loading, setLoading] = useState(false); 50 | 51 | useEffect(() => { 52 | 53 | const findProfilePda = async() => { 54 | 55 | if(pubkey && program) { 56 | const [profilePda, profileBump] = await PublicKey.findProgramAddress([ 57 | utf8.encode('PROFILE_STATE'), pubkey.toBuffer() 58 | ], program?.programId); 59 | setProfilePda(profilePda); 60 | } 61 | } 62 | 63 | findProfilePda(); 64 | 65 | }, [ 66 | pubkey, program 67 | ]) 68 | 69 | useEffect(() => { 70 | 71 | const findProfileAccount = async() => { 72 | if(profilePda && program && !loading) { 73 | const account = await program.account.userProfile.fetchNullable(profilePda); 74 | if(account) { 75 | setExists(true); 76 | setName(account.name); 77 | setLocation(account.location); 78 | setLikes(account.likes); 79 | 80 | if(!isMe && publicKey && pubkey) { 81 | const [likePda, likeBump] = await PublicKey.findProgramAddress([ 82 | utf8.encode('LIKE_STATE'), publicKey.toBuffer(), pubkey.toBuffer(), 83 | ], program.programId); 84 | const likeAccount = await program.account.userLike.fetchNullable(likePda); 85 | if(likeAccount) { 86 | setLiked(likeAccount.liked); 87 | } 88 | else { 89 | setLiked(false); 90 | } 91 | } 92 | 93 | } 94 | else { 95 | setExists(false); 96 | } 97 | } 98 | } 99 | 100 | findProfileAccount(); 101 | 102 | }, [ 103 | profilePda, loading 104 | ]) 105 | 106 | const handleInput = (e: any) => { 107 | const {name, value} = e.target; 108 | if(name === 'name') { 109 | setName(value); 110 | } 111 | if(name === 'location') { 112 | setLocation(value); 113 | } 114 | } 115 | 116 | const handleCreate = async () => { 117 | if(program && publicKey) { 118 | setLoading(true); 119 | 120 | try{ 121 | await program.methods.createProfile(name, location) 122 | .accounts({ 123 | userProfile: profilePda, 124 | authority: publicKey, 125 | systemProgram: SystemProgram.programId 126 | }) 127 | .rpc(); 128 | } 129 | catch { 130 | // 131 | } 132 | 133 | setLoading(false); 134 | } 135 | } 136 | 137 | const handleUpdate = async () => { 138 | if(program && publicKey) { 139 | setLoading(true); 140 | 141 | try{ 142 | await program.methods.updateProfile(name, location) 143 | .accounts({ 144 | userProfile: profilePda, 145 | authority: publicKey, 146 | systemProgram: SystemProgram.programId 147 | }) 148 | .rpc(); 149 | } 150 | catch { 151 | // 152 | } 153 | 154 | setLoading(false); 155 | } 156 | } 157 | 158 | const handleLike = async () => { 159 | if(program && publicKey && pubkey) { 160 | setLoading(true); 161 | 162 | try{ 163 | const [likePda, likeBump] = await PublicKey.findProgramAddress([ 164 | utf8.encode('LIKE_STATE'), publicKey.toBuffer(), pubkey.toBuffer(), 165 | ], program?.programId); 166 | 167 | await program.methods.likeProfile(pubkey) 168 | .accounts({ 169 | userLike: likePda, 170 | userProfile: profilePda, 171 | authority: publicKey, 172 | systemProgram: SystemProgram.programId 173 | }) 174 | .rpc(); 175 | } 176 | catch { 177 | // 178 | } 179 | 180 | setLoading(false); 181 | } 182 | } 183 | 184 | const handleUnlike = async () => { 185 | if(program && publicKey && pubkey) { 186 | setLoading(true); 187 | 188 | try{ 189 | const [likePda, likeBump] = await PublicKey.findProgramAddress([ 190 | utf8.encode('LIKE_STATE'), publicKey.toBuffer(), pubkey.toBuffer(), 191 | ], program?.programId); 192 | 193 | await program.methods.unlikeProfile(pubkey) 194 | .accounts({ 195 | userLike: likePda, 196 | userProfile: profilePda, 197 | authority: publicKey, 198 | systemProgram: SystemProgram.programId 199 | }) 200 | .rpc(); 201 | } 202 | catch { 203 | // 204 | } 205 | 206 | setLoading(false); 207 | } 208 | } 209 | 210 | return ( 211 | 212 | 213 |
214 | 215 | 216 | 217 |

218 | User Profile 219 |

220 | 221 | 228 | 229 | 236 | 237 | 244 | 245 | 246 | { 247 | isMe ? 248 | ( 249 | exists ? 250 | 251 | : 252 | ) : ( 253 | liked ? 254 | 255 | : 256 | ) 257 | } 258 | 259 | 260 |
261 | 262 | 263 | 264 | ); 265 | }; -------------------------------------------------------------------------------- /app/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | -------------------------------------------------------------------------------- /app/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 16 | 17 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 18 | 19 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 20 | 21 | ## Learn More 22 | 23 | To learn more about Next.js, take a look at the following resources: 24 | 25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 27 | 28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 29 | 30 | ## Deploy on Vercel 31 | 32 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 33 | 34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 35 | -------------------------------------------------------------------------------- /app/components/HomeSection.js: -------------------------------------------------------------------------------- 1 | export default function HomeSection() { 2 | return ( 3 |
4 | 24 |
25 | Shift 26 |

Supercharge your NFTs

27 |
28 |
29 |
30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /app/components/Loading.js: -------------------------------------------------------------------------------- 1 | const Loading = ({ loading, children }) => { 2 | if (loading) return

Loading...

3 | 4 | return <>{children} 5 | } 6 | 7 | export default Loading 8 | -------------------------------------------------------------------------------- /app/components/WalletConnectProvider.js: -------------------------------------------------------------------------------- 1 | import { useMemo } from 'react' 2 | import { WalletAdapterNetwork } from '@solana/wallet-adapter-base' 3 | import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react' 4 | import { WalletModalProvider } from '@solana/wallet-adapter-react-ui' 5 | import { GlowWalletAdapter, PhantomWalletAdapter, SlopeWalletAdapter, SolflareWalletAdapter, TorusWalletAdapter } from '@solana/wallet-adapter-wallets' 6 | import { clusterApiUrl } from '@solana/web3.js' 7 | 8 | export const WalletConnectProvider = ({ children }) => { 9 | // The network can be set to 'devnet', 'testnet', or 'mainnet-beta'. 10 | const network = WalletAdapterNetwork.Devnet 11 | 12 | // You can also provide a custom RPC endpoint. 13 | const endpoint = useMemo(() => { 14 | if (network === WalletAdapterNetwork.Devnet) { 15 | return 'https://api.devnet.solana.com' 16 | } 17 | 18 | return clusterApiUrl(network) 19 | }, [network]) 20 | 21 | // @solana/wallet-adapter-wallets includes all the adapters but supports tree shaking and lazy loading -- 22 | // Only the wallets you configure here will be compiled into your application, and only the dependencies 23 | // of wallets that your users connect to will be loaded. 24 | const wallets = useMemo(() => [new PhantomWalletAdapter(), new GlowWalletAdapter(), new SlopeWalletAdapter(), new SolflareWalletAdapter({ network }), new TorusWalletAdapter()], [network]) 25 | 26 | return ( 27 | 28 | 29 | {children} 30 | 31 | 32 | ) 33 | } 34 | -------------------------------------------------------------------------------- /app/components/todo/TodoItem.js: -------------------------------------------------------------------------------- 1 | import styles from '../../styles/Todo.module.css' 2 | import { CalendarIcon, TrashIcon } from '@heroicons/react/outline' 3 | 4 | const TodoItem = ({ idx, content, marked, dateline, publicKey, action }) => { 5 | const handleMarkTodo = () => { 6 | // Only allow unchecked todo to be marked 7 | if (marked) return 8 | 9 | action(publicKey, idx) 10 | } 11 | 12 | const handleRemoveTodo = () => { 13 | action(publicKey, idx) 14 | } 15 | 16 | return ( 17 |
  • 18 |
    19 |
    20 | {content} 21 | {dateline && ( 22 |
    23 | 24 | {dateline} 25 |
    26 | )} 27 |
    28 |
    29 | 30 |
    31 |
  • 32 | ) 33 | } 34 | 35 | export default TodoItem 36 | -------------------------------------------------------------------------------- /app/components/todo/TodoList.js: -------------------------------------------------------------------------------- 1 | import styles from '../../styles/Todo.module.css' 2 | import TodoItem from './TodoItem' 3 | 4 | const TodoList = ({ todos, action }) => { 5 | return ( 6 |
      7 | {todos.map((todo) => ( 8 | 9 | ))} 10 |
    11 | ) 12 | } 13 | 14 | export default TodoList 15 | -------------------------------------------------------------------------------- /app/components/todo/TodoSection.js: -------------------------------------------------------------------------------- 1 | import styles from '../../styles/Todo.module.css' 2 | import TodoList from './TodoList' 3 | 4 | const TodoSection = ({ title, todos, action }) => { 5 | return ( 6 |
    7 |

    8 | {title} - {todos.length} 9 |

    10 | 11 | 12 |
    13 | ) 14 | } 15 | 16 | export default TodoSection 17 | -------------------------------------------------------------------------------- /app/constants/idl.js: -------------------------------------------------------------------------------- 1 | export const IDL = { 2 | version: '0.1.0', 3 | name: 'clever_todo', 4 | constants: [ 5 | { 6 | name: 'USER_TAG', 7 | type: { 8 | defined: '&[u8]', 9 | }, 10 | value: 'b"USER_STATE"', 11 | }, 12 | { 13 | name: 'TODO_TAG', 14 | type: { 15 | defined: '&[u8]', 16 | }, 17 | value: 'b"TODO_STATE"', 18 | }, 19 | ], 20 | instructions: [ 21 | { 22 | name: 'initializeUser', 23 | accounts: [ 24 | { 25 | name: 'authority', 26 | isMut: true, 27 | isSigner: true, 28 | }, 29 | { 30 | name: 'userProfile', 31 | isMut: true, 32 | isSigner: false, 33 | }, 34 | { 35 | name: 'systemProgram', 36 | isMut: false, 37 | isSigner: false, 38 | }, 39 | ], 40 | args: [], 41 | }, 42 | { 43 | name: 'addTodo', 44 | accounts: [ 45 | { 46 | name: 'userProfile', 47 | isMut: true, 48 | isSigner: false, 49 | }, 50 | { 51 | name: 'todoAccount', 52 | isMut: true, 53 | isSigner: false, 54 | }, 55 | { 56 | name: 'authority', 57 | isMut: true, 58 | isSigner: true, 59 | }, 60 | { 61 | name: 'systemProgram', 62 | isMut: false, 63 | isSigner: false, 64 | }, 65 | ], 66 | args: [ 67 | { 68 | name: 'content', 69 | type: 'string', 70 | }, 71 | ], 72 | }, 73 | { 74 | name: 'markTodo', 75 | accounts: [ 76 | { 77 | name: 'userProfile', 78 | isMut: true, 79 | isSigner: false, 80 | }, 81 | { 82 | name: 'todoAccount', 83 | isMut: true, 84 | isSigner: false, 85 | }, 86 | { 87 | name: 'authority', 88 | isMut: true, 89 | isSigner: true, 90 | }, 91 | { 92 | name: 'systemProgram', 93 | isMut: false, 94 | isSigner: false, 95 | }, 96 | ], 97 | args: [ 98 | { 99 | name: 'todoIdx', 100 | type: 'u8', 101 | }, 102 | ], 103 | }, 104 | { 105 | name: 'removeTodo', 106 | accounts: [ 107 | { 108 | name: 'userProfile', 109 | isMut: true, 110 | isSigner: false, 111 | }, 112 | { 113 | name: 'todoAccount', 114 | isMut: true, 115 | isSigner: false, 116 | }, 117 | { 118 | name: 'authority', 119 | isMut: true, 120 | isSigner: true, 121 | }, 122 | { 123 | name: 'systemProgram', 124 | isMut: false, 125 | isSigner: false, 126 | }, 127 | ], 128 | args: [ 129 | { 130 | name: 'todoIdx', 131 | type: 'u8', 132 | }, 133 | ], 134 | }, 135 | ], 136 | accounts: [ 137 | { 138 | name: 'userProfile', 139 | type: { 140 | kind: 'struct', 141 | fields: [ 142 | { 143 | name: 'authority', 144 | type: 'publicKey', 145 | }, 146 | { 147 | name: 'lastTodo', 148 | type: 'u8', 149 | }, 150 | { 151 | name: 'todoCount', 152 | type: 'u8', 153 | }, 154 | ], 155 | }, 156 | }, 157 | { 158 | name: 'todoAccount', 159 | type: { 160 | kind: 'struct', 161 | fields: [ 162 | { 163 | name: 'authority', 164 | type: 'publicKey', 165 | }, 166 | { 167 | name: 'idx', 168 | type: 'u8', 169 | }, 170 | { 171 | name: 'content', 172 | type: 'string', 173 | }, 174 | { 175 | name: 'marked', 176 | type: 'bool', 177 | }, 178 | ], 179 | }, 180 | }, 181 | ], 182 | errors: [ 183 | { 184 | code: 6000, 185 | name: 'Unauthorized', 186 | msg: 'You are not authorized to perform this action.', 187 | }, 188 | { 189 | code: 6001, 190 | name: 'NotAllowed', 191 | msg: 'Not allowed', 192 | }, 193 | { 194 | code: 6002, 195 | name: 'MathOverflow', 196 | msg: 'Math operation overflow', 197 | }, 198 | { 199 | code: 6003, 200 | name: 'AlreadyMarked', 201 | msg: 'Already marked', 202 | }, 203 | ], 204 | } 205 | -------------------------------------------------------------------------------- /app/constants/index.js: -------------------------------------------------------------------------------- 1 | import { PublicKey } from "@solana/web3.js"; 2 | 3 | export const TODO_PROGRAM_PUBKEY = new PublicKey("FHi9b593PHHVjcrvRBXjAmRd6JsHkWCoLmC8CHdkDUy3"); 4 | -------------------------------------------------------------------------------- /app/hooks/todo.js: -------------------------------------------------------------------------------- 1 | import * as anchor from '@project-serum/anchor' 2 | import { useEffect, useMemo, useState } from 'react' 3 | import { TODO_PROGRAM_PUBKEY } from '../constants' 4 | import { IDL as profileIdl } from '../constants/idl' 5 | import toast from 'react-hot-toast' 6 | import { SystemProgram } from '@solana/web3.js' 7 | import { utf8 } from '@project-serum/anchor/dist/cjs/utils/bytes' 8 | import { findProgramAddressSync } from '@project-serum/anchor/dist/cjs/utils/pubkey' 9 | import { useAnchorWallet, useConnection, useWallet } from '@solana/wallet-adapter-react' 10 | import { authorFilter } from '../utils' 11 | 12 | export function useTodo() { 13 | const { connection } = useConnection() 14 | const { publicKey } = useWallet() 15 | const anchorWallet = useAnchorWallet() 16 | 17 | const [initialized, setInitialized] = useState(false) 18 | const [lastTodo, setLastTodo] = useState(0) 19 | const [todos, setTodos] = useState([]) 20 | const [loading, setLoading] = useState(false) 21 | const [transactionPending, setTransactionPending] = useState(false) 22 | 23 | const program = useMemo(() => { 24 | if (anchorWallet) { 25 | const provider = new anchor.AnchorProvider(connection, anchorWallet, anchor.AnchorProvider.defaultOptions()) 26 | return new anchor.Program(profileIdl, TODO_PROGRAM_PUBKEY, provider) 27 | } 28 | }, [connection, anchorWallet]) 29 | 30 | useEffect(() => { 31 | const findProfileAccounts = async () => { 32 | if (program && publicKey && !transactionPending) { 33 | try { 34 | setLoading(true) 35 | const [profilePda, profileBump] = await findProgramAddressSync([utf8.encode('USER_STATE'), publicKey.toBuffer()], program.programId) 36 | const profileAccount = await program.account.userProfile.fetch(profilePda) 37 | 38 | if (profileAccount) { 39 | setLastTodo(profileAccount.lastTodo) 40 | setInitialized(true) 41 | 42 | const todoAccounts = await program.account.todoAccount.all([authorFilter(publicKey.toString())]) 43 | setTodos(todoAccounts) 44 | } else { 45 | setInitialized(false) 46 | } 47 | } catch (error) { 48 | console.log(error) 49 | setInitialized(false) 50 | setTodos([]) 51 | } finally { 52 | setLoading(false) 53 | } 54 | } 55 | } 56 | 57 | findProfileAccounts() 58 | }, [publicKey, program, transactionPending]) 59 | 60 | const initializeUser = async () => { 61 | if (program && publicKey) { 62 | try { 63 | setTransactionPending(true) 64 | const [profilePda, profileBump] = findProgramAddressSync([utf8.encode('USER_STATE'), publicKey.toBuffer()], program.programId) 65 | 66 | const tx = await program.methods 67 | .initializeUser() 68 | .accounts({ 69 | userProfile: profilePda, 70 | authority: publicKey, 71 | systemProgram: SystemProgram.programId, 72 | }) 73 | .rpc() 74 | setInitialized(true) 75 | toast.success('Successfully initialized user.') 76 | } catch (error) { 77 | console.log(error) 78 | toast.error(error.toString()) 79 | } finally { 80 | setTransactionPending(false) 81 | } 82 | } 83 | } 84 | 85 | const addTodo = async () => { 86 | if (program && publicKey) { 87 | try { 88 | setTransactionPending(true) 89 | const [profilePda, profileBump] = findProgramAddressSync([utf8.encode('USER_STATE'), publicKey.toBuffer()], program.programId) 90 | const [todoPda, todoBump] = findProgramAddressSync([utf8.encode('TODO_STATE'), publicKey.toBuffer(), Uint8Array.from([lastTodo])], program.programId) 91 | 92 | const content = prompt('Please input todo content') 93 | if (!content) { 94 | setTransactionPending(false) 95 | return 96 | } 97 | 98 | await program.methods 99 | .addTodo(content) 100 | .accounts({ 101 | userProfile: profilePda, 102 | todoAccount: todoPda, 103 | authority: publicKey, 104 | systemProgram: SystemProgram.programId, 105 | }) 106 | .rpc() 107 | toast.success('Successfully added todo.') 108 | } catch (error) { 109 | console.log(error) 110 | toast.error(error.toString()) 111 | } finally { 112 | setTransactionPending(false) 113 | } 114 | } 115 | } 116 | 117 | const markTodo = async (todoPda, todoIdx) => { 118 | if (program && publicKey) { 119 | try { 120 | setTransactionPending(true) 121 | setLoading(true) 122 | const [profilePda, profileBump] = findProgramAddressSync([utf8.encode('USER_STATE'), publicKey.toBuffer()], program.programId) 123 | 124 | await program.methods 125 | .markTodo(todoIdx) 126 | .accounts({ 127 | userProfile: profilePda, 128 | todoAccount: todoPda, 129 | authority: publicKey, 130 | systemProgram: SystemProgram.programId, 131 | }) 132 | .rpc() 133 | toast.success('Successfully marked todo.') 134 | } catch (error) { 135 | console.log(error) 136 | toast.success(error.toString()) 137 | } finally { 138 | setLoading(false) 139 | setTransactionPending(false) 140 | } 141 | } 142 | } 143 | 144 | const removeTodo = async (todoPda, todoIdx) => { 145 | if (program && publicKey) { 146 | try { 147 | setTransactionPending(true) 148 | setLoading(true) 149 | const [profilePda, profileBump] = findProgramAddressSync([utf8.encode('USER_STATE'), publicKey.toBuffer()], program.programId) 150 | 151 | await program.methods 152 | .removeTodo(todoIdx) 153 | .accounts({ 154 | userProfile: profilePda, 155 | todoAccount: todoPda, 156 | authority: publicKey, 157 | systemProgram: SystemProgram.programId, 158 | }) 159 | .rpc() 160 | toast.success('Successfully removed todo.') 161 | } catch (error) { 162 | console.log(error) 163 | toast.error(error.toString()) 164 | } finally { 165 | setLoading(false) 166 | setTransactionPending(false) 167 | } 168 | } 169 | } 170 | 171 | const incompleteTodos = useMemo(() => todos.filter((todo) => !todo.account.marked), [todos]) 172 | const completedTodos = useMemo(() => todos.filter((todo) => todo.account.marked), [todos]) 173 | 174 | return { initialized, initializeUser, loading, transactionPending, completedTodos, incompleteTodos, addTodo, markTodo, removeTodo } 175 | } 176 | -------------------------------------------------------------------------------- /app/next.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | /** @type {import('next').NextConfig} */ 4 | module.exports = { 5 | reactStrictMode: false, 6 | webpack5: true, 7 | webpack: (config) => { 8 | config.resolve.fallback = { 9 | ...config.resolve.fallback, 10 | fs: false, 11 | os: false, 12 | } 13 | config.module.rules.push({ 14 | test: /\.mjs$/, 15 | include: /node_modules/, 16 | type: 'javascript/auto', 17 | }) 18 | config.resolve.alias = { 19 | ...config.resolve.alias, 20 | '@solana/wallet-adapter-react': path.resolve( 21 | './node_modules/@solana/wallet-adapter-react' 22 | ), 23 | } 24 | return config 25 | }, 26 | 27 | env: { 28 | NEXT_PUBLIC_RPC_HOST: 'https://metaplex.devnet.rpcpool.com/', 29 | // NEXT_PUBLIC_RPC_HOST: 'https://api.metaplex.solana.com/', 30 | }, 31 | } 32 | -------------------------------------------------------------------------------- /app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todo-app", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@headlessui/react": "^1.6.6", 13 | "@heroicons/react": "^1.0.6", 14 | "@project-serum/anchor": "^0.24.2", 15 | "@solana/wallet-adapter-base": "^0.9.4", 16 | "@solana/wallet-adapter-react": "^0.15.3", 17 | "@solana/wallet-adapter-react-ui": "^0.9.5", 18 | "@solana/wallet-adapter-wallets": "^0.16.0", 19 | "@solana/web3.js": "^1.36.0", 20 | "next": "12.2.0", 21 | "react": "^17.0.0 || ^18.0.0", 22 | "react-dom": "18.2.0", 23 | "react-hot-toast": "^2.3.0" 24 | }, 25 | "devDependencies": { 26 | "eslint": "8.19.0", 27 | "eslint-config-next": "12.2.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/pages/_app.js: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import { WalletConnectProvider } from '../components/WalletConnectProvider' 3 | import '../styles/global.css' 4 | import '@solana/wallet-adapter-react-ui/styles.css' 5 | 6 | function MyApp({ Component, pageProps }) { 7 | return ( 8 | <> 9 | 10 | Todo App 11 | 12 |
    13 | 14 | 15 | 16 |
    17 | 18 | ) 19 | } 20 | 21 | export default MyApp 22 | -------------------------------------------------------------------------------- /app/pages/index.js: -------------------------------------------------------------------------------- 1 | import { WalletMultiButton } from '@solana/wallet-adapter-react-ui' 2 | import { useTodo } from '../hooks/todo' 3 | import Loading from '../components/Loading' 4 | import TodoSection from '../components/todo/TodoSection' 5 | import styles from '../styles/Home.module.css' 6 | 7 | 8 | const Home = () => { 9 | const { initialized, initializeUser, loading, transactionPending, completedTodos, incompleteTodos, addTodo, markTodo, removeTodo, markStaticTodo,removeStaticTodo, addStaticTodo, input, handleChange } = useTodo() 10 | 11 | 12 | return ( 13 |
    14 |
    15 | {initialized ? ( 16 |
    17 |
    18 |
    19 |
    addTodo()}> 20 | 21 |
    22 |
    23 |
    24 | 25 |
    26 |
    27 | ) : ( 28 | 31 | )} 32 | 33 |
    34 | 35 |
    36 | 37 | 38 | 39 | 40 | 41 |
    42 |
    43 | ) 44 | } 45 | 46 | export default Home 47 | -------------------------------------------------------------------------------- /app/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CleverProgrammers/solana-todo-app/c79a975941aa482e0c92935e1af72c19ca057919/app/public/favicon.ico -------------------------------------------------------------------------------- /app/styles/Home.module.css: -------------------------------------------------------------------------------- 1 | /* Home Page */ 2 | .button { 3 | background-color: var(--accent-color); 4 | color: var(--primary-color); 5 | border-radius: var(--br-md); 6 | font-size: var(--fs-sm); 7 | font-weight: var(--fw-medium); 8 | padding: 0.5rem 1rem; 9 | cursor: pointer; 10 | } 11 | 12 | .button:hover { 13 | background-color: var(--accent-color); 14 | opacity: 0.7; 15 | } 16 | 17 | .container { 18 | position: relative; 19 | margin: 2rem auto; 20 | padding: 1rem; 21 | width: 850px; 22 | /* margin-top: 50px; */ 23 | } 24 | 25 | .actionsContainer { 26 | display: flex; 27 | justify-content: space-between; 28 | margin-bottom: 2rem; 29 | /* gap: 20px */ 30 | } 31 | 32 | .todoInput { 33 | background-color: var(--secondary-color); 34 | width: 70%; 35 | height: 50px; 36 | border-radius: var(--br-2xl); 37 | display: flex; 38 | align-items: center; 39 | } 40 | 41 | .inputContainer { 42 | width: 90%; 43 | } 44 | 45 | #inputField { 46 | width: 100%; 47 | background-color: transparent; 48 | border: none; 49 | outline: none; 50 | color: white; 51 | font-size: 18px; 52 | padding: 10px 0px; 53 | margin-left: 15px; 54 | } 55 | 56 | .mainContainer { 57 | display: flex; 58 | flex-direction: column; 59 | gap: 1rem; 60 | } 61 | 62 | @media (min-width: 640px) { 63 | .container { 64 | max-width: 640px; 65 | } 66 | } 67 | @media (min-width: 768px) { 68 | .container { 69 | max-width: 768px; 70 | } 71 | } 72 | @media (min-width: 1024px) { 73 | .container { 74 | max-width: 1024px; 75 | } 76 | } 77 | @media (min-width: 1280px) { 78 | .container { 79 | max-width: 1280px; 80 | } 81 | } 82 | @media (min-width: 1536px) { 83 | .container { 84 | max-width: 1536px; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /app/styles/Todo.module.css: -------------------------------------------------------------------------------- 1 | .todoSection { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 1rem; 5 | margin-bottom: 2rem; 6 | } 7 | 8 | .todoList { 9 | display: flex; 10 | flex-direction: column; 11 | gap: 1rem; 12 | } 13 | 14 | .todoItem { 15 | display: flex; 16 | align-items: center; 17 | gap: 1rem; 18 | background-color: var(--secondary-color); 19 | border-radius: var(--br-2xl); 20 | padding: 1rem; 21 | } 22 | 23 | .todoCheckbox { 24 | width: 1rem; 25 | height: 1rem; 26 | border: 2px solid var(--accent-color); 27 | border-radius: var(--br-lg); 28 | cursor: pointer; 29 | } 30 | 31 | .todoCheckbox.checked { 32 | background-color: var(--accent-color); 33 | background-image: url('https://assets.website-files.com/6115beb90ba52ed7fd418b93/6115d9d2a9d14f72c43355c5_icon-check-dark-small.svg'); 34 | background-size: cover; 35 | background-repeat: no-repeat; 36 | opacity: 0.3; 37 | cursor: not-allowed; 38 | } 39 | 40 | .todoCheckbox.checked + div span.todoText { 41 | text-decoration: line-through; 42 | } 43 | 44 | .todoDateline { 45 | display: flex; 46 | align-items: center; 47 | margin-top: 0.375rem; 48 | color: var(--accent-color); 49 | } 50 | 51 | .todoCheckbox.checked + div .todoDateline { 52 | color: var(--gray-color); 53 | opacity: 0.5; 54 | } 55 | 56 | .todoDateline .calendarIcon { 57 | width: 1rem; 58 | height: 1rem; 59 | } 60 | 61 | .todoDateline span { 62 | margin-left: 0.375rem; 63 | font-size: var(--fs-sm); 64 | } 65 | 66 | .todoItem .trashIcon { 67 | width: 1.25rem; 68 | height: 1.25rem; 69 | color: var(--accent-color); 70 | } 71 | 72 | .trashIcon { 73 | cursor: pointer; 74 | } 75 | 76 | .trashIcon.checked { 77 | cursor: not-allowed; 78 | } 79 | 80 | .todoItem .iconContainer { 81 | margin-left: auto; 82 | } 83 | -------------------------------------------------------------------------------- /app/styles/global.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --primary-color: #181820; 3 | --secondary-color: #21212b; 4 | --accent-color: #fc76a1; 5 | --gray-color: rgb(209 213 219); 6 | 7 | /* Font Size */ 8 | --fs-xs: 0.75rem; 9 | --fs-sm: 0.875rem; 10 | --fs-base: 1rem; 11 | --fs-lg: 1.125rem; 12 | --fs-xl: 1.25rem; 13 | --fs-2xl: 1.5rem; 14 | --fs-3xl: 1.875rem; 15 | --fs-4xl: 2.25rem; 16 | --fs-5xl: 3rem; 17 | --fs-6xl: 3.75rem; 18 | --fs-7xl: 4.5rem; 19 | --fs-8xl: 6rem; 20 | --fs-9xl: 8rem; 21 | 22 | /* Font Weight */ 23 | --fw-thin: 100; 24 | --fw-extralight: 200; 25 | --fw-light: 300; 26 | --fw-normal: 400; 27 | --fw-medium: 500; 28 | --fw-semibold: 600; 29 | --fw-bold: 700; 30 | --fw-extrabold: 800; 31 | --fw-black: 900; 32 | 33 | /* Border Radius */ 34 | --br-md: 0.375rem; 35 | --br-lg: 0.5rem; 36 | --br-2xl: 1rem; 37 | } 38 | 39 | /* Reset Styling */ 40 | blockquote, 41 | dl, 42 | dd, 43 | h1, 44 | h2, 45 | h3, 46 | h4, 47 | h5, 48 | h6, 49 | hr, 50 | figure, 51 | p, 52 | pre { 53 | margin: 0; 54 | padding: 0; 55 | box-sizing: border-box; 56 | } 57 | 58 | h1, 59 | h2, 60 | h3, 61 | h4, 62 | h5, 63 | h6 { 64 | font-size: inherit; 65 | font-weight: inherit; 66 | } 67 | 68 | ol, 69 | ul { 70 | list-style: none; 71 | margin: 0; 72 | padding: 0; 73 | } 74 | 75 | img, 76 | svg, 77 | video, 78 | canvas, 79 | audio, 80 | iframe, 81 | embed, 82 | object { 83 | display: block; 84 | /* vertical-align: middle; */ 85 | } 86 | 87 | *, 88 | ::before, 89 | ::after { 90 | border-width: 0; 91 | border-style: solid; 92 | border-color: black; 93 | } 94 | 95 | /* Global Styles */ 96 | html { 97 | font-family: system-ui; 98 | } 99 | 100 | body { 101 | background-color: var(--primary-color); 102 | color: var(--gray-color); 103 | } 104 | -------------------------------------------------------------------------------- /app/utils/index.js: -------------------------------------------------------------------------------- 1 | export const authorFilter = (authorBase58PublicKey) => ({ 2 | memcmp: { 3 | offset: 8, // Discriminator. 4 | bytes: authorBase58PublicKey, 5 | }, 6 | }) 7 | -------------------------------------------------------------------------------- /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 | "scripts": { 3 | "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", 4 | "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" 5 | }, 6 | "dependencies": { 7 | "@project-serum/anchor": "^0.24.2" 8 | }, 9 | "devDependencies": { 10 | "chai": "^4.3.4", 11 | "mocha": "^9.0.3", 12 | "ts-mocha": "^8.0.0", 13 | "@types/bn.js": "^5.1.0", 14 | "@types/chai": "^4.3.0", 15 | "@types/mocha": "^9.0.0", 16 | "typescript": "^4.3.5", 17 | "prettier": "^2.6.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /programs/clever-todo/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "anchor-profile" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "anchor_profile" 10 | 11 | [features] 12 | no-entrypoint = [] 13 | no-idl = [] 14 | no-log-ix-name = [] 15 | cpi = ["no-entrypoint"] 16 | default = [] 17 | 18 | [profile.release] 19 | overflow-checks = true 20 | 21 | [dependencies] 22 | anchor-lang = {version="0.25.0", features=["init-if-needed"]} -------------------------------------------------------------------------------- /programs/clever-todo/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /programs/clever-todo/src/constant.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[constant] 4 | pub const USER_TAG: &[u8] = b"USER_STATE"; 5 | 6 | #[constant] 7 | pub const TODO_TAG: &[u8] = b"TODO_STATE"; -------------------------------------------------------------------------------- /programs/clever-todo/src/error.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[error_code] 4 | pub enum TodoError { 5 | #[msg("You are not authorized to perform this action.")] 6 | Unauthorized, 7 | #[msg("Not allowed")] 8 | NotAllowed, 9 | #[msg("Math operation overflow")] 10 | MathOverflow, 11 | #[msg("Already marked")] 12 | AlreadyMarked, 13 | } 14 | -------------------------------------------------------------------------------- /programs/clever-todo/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | pub mod constant; 4 | pub mod error; 5 | pub mod states; 6 | use crate::{constant::*, error::*, states::*}; 7 | 8 | declare_id!("FHi9b593PHHVjcrvRBXjAmRd6JsHkWCoLmC8CHdkDUy3"); 9 | 10 | #[program] 11 | pub mod clever_todo { 12 | use super::*; 13 | 14 | pub fn initialize_user( 15 | ctx: Context 16 | ) -> Result<()> { 17 | // Initialize user profile with default data 18 | let user_profile = &mut ctx.accounts.user_profile; 19 | user_profile.authority = ctx.accounts.authority.key(); 20 | user_profile.last_todo = 0; 21 | user_profile.todo_count = 0; 22 | 23 | Ok(()) 24 | } 25 | 26 | pub fn add_todo(ctx: Context, _content: String) -> Result<()> { 27 | let todo_account = &mut ctx.accounts.todo_account; 28 | let user_profile = &mut ctx.accounts.user_profile; 29 | 30 | // Fill contents with argument 31 | todo_account.authority = ctx.accounts.authority.key(); 32 | todo_account.idx = user_profile.last_todo; 33 | todo_account.content = _content; 34 | todo_account.marked = false; 35 | 36 | // Increase todo idx for PDA 37 | user_profile.last_todo = user_profile.last_todo 38 | .checked_add(1) 39 | .unwrap(); 40 | 41 | // Increase total todo count 42 | user_profile.todo_count = user_profile.todo_count 43 | .checked_add(1) 44 | .unwrap(); 45 | 46 | Ok(()) 47 | } 48 | 49 | pub fn mark_todo(ctx: Context, todo_idx: u8) -> Result<()> { 50 | let todo_account = &mut ctx.accounts.todo_account; 51 | require!(!todo_account.marked, TodoError::AlreadyMarked); 52 | 53 | // Mark todo 54 | todo_account.marked = true; 55 | Ok(()) 56 | } 57 | 58 | pub fn remove_todo(ctx: Context, todo_idx: u8) -> Result<()> { 59 | // Decreate total todo count 60 | let user_profile = &mut ctx.accounts.user_profile; 61 | user_profile.todo_count = user_profile.todo_count 62 | .checked_sub(1) 63 | .unwrap(); 64 | 65 | // No need to decrease last todo idx 66 | 67 | // Todo PDA already closed in context 68 | 69 | Ok(()) 70 | } 71 | } 72 | 73 | #[derive(Accounts)] 74 | #[instruction()] 75 | pub struct InitializeUser<'info> { 76 | #[account(mut)] 77 | pub authority: Signer<'info>, 78 | 79 | #[account( 80 | init, 81 | seeds = [USER_TAG, authority.key().as_ref()], 82 | bump, 83 | payer = authority, 84 | space = 8 + std::mem::size_of::(), 85 | )] 86 | pub user_profile: Box>, 87 | 88 | pub system_program: Program<'info, System>, 89 | } 90 | 91 | #[derive(Accounts)] 92 | #[instruction()] 93 | pub struct AddTodo<'info> { 94 | #[account( 95 | mut, 96 | seeds = [USER_TAG, authority.key().as_ref()], 97 | bump, 98 | has_one = authority, 99 | )] 100 | pub user_profile: Box>, 101 | 102 | #[account( 103 | init, 104 | seeds = [TODO_TAG, authority.key().as_ref(), &[user_profile.last_todo as u8].as_ref()], 105 | bump, 106 | payer = authority, 107 | space = std::mem::size_of::() + 8, 108 | )] 109 | pub todo_account: Box>, 110 | 111 | #[account(mut)] 112 | pub authority: Signer<'info>, 113 | 114 | pub system_program: Program<'info, System>, 115 | } 116 | 117 | #[derive(Accounts)] 118 | #[instruction(todo_idx: u8)] 119 | pub struct MarkTodo<'info> { 120 | #[account( 121 | mut, 122 | seeds = [USER_TAG, authority.key().as_ref()], 123 | bump, 124 | has_one = authority, 125 | )] 126 | pub user_profile: Box>, 127 | 128 | #[account( 129 | mut, 130 | seeds = [TODO_TAG, authority.key().as_ref(), &[todo_idx].as_ref()], 131 | bump, 132 | has_one = authority, 133 | )] 134 | pub todo_account: Box>, 135 | 136 | #[account(mut)] 137 | pub authority: Signer<'info>, 138 | 139 | pub system_program: Program<'info, System>, 140 | } 141 | 142 | #[derive(Accounts)] 143 | #[instruction(todo_idx: u8)] 144 | pub struct RemoveTodo<'info> { 145 | #[account( 146 | mut, 147 | seeds = [USER_TAG, authority.key().as_ref()], 148 | bump, 149 | has_one = authority, 150 | )] 151 | pub user_profile: Box>, 152 | 153 | #[account( 154 | mut, 155 | close = authority, 156 | seeds = [TODO_TAG, authority.key().as_ref(), &[todo_idx].as_ref()], 157 | bump, 158 | has_one = authority, 159 | )] 160 | pub todo_account: Box>, 161 | 162 | #[account(mut)] 163 | pub authority: Signer<'info>, 164 | 165 | pub system_program: Program<'info, System>, 166 | } 167 | 168 | pub fn is_zero_account(account_info: &AccountInfo) -> bool { 169 | let account_data: &[u8] = &account_info.data.borrow(); 170 | let len = account_data.len(); 171 | let mut is_zero = true; 172 | for i in 0..len - 1 { 173 | if account_data[i] != 0 { 174 | is_zero = false; 175 | } 176 | } 177 | is_zero 178 | } 179 | 180 | pub fn bump(seeds: &[&[u8]], program_id: &Pubkey) -> u8 { 181 | let (_found_key, bump) = Pubkey::find_program_address(seeds, program_id); 182 | bump 183 | } 184 | -------------------------------------------------------------------------------- /programs/clever-todo/src/states.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | 3 | #[account] 4 | #[derive(Default)] 5 | pub struct UserProfile { 6 | pub authority: Pubkey, 7 | pub last_todo: u8, 8 | pub todo_count: u8 9 | } 10 | 11 | #[account] 12 | #[derive(Default)] 13 | pub struct TodoAccount { 14 | pub authority: Pubkey, 15 | pub idx: u8, 16 | pub content: String, 17 | pub marked: bool, 18 | } 19 | -------------------------------------------------------------------------------- /tests/clever-todo.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { Program } from "@project-serum/anchor"; 3 | import { CleverTodo } from "../target/types/clever_todo"; 4 | 5 | describe("clever-todo", () => { 6 | // Configure the client to use the local cluster. 7 | anchor.setProvider(anchor.AnchorProvider.env()); 8 | 9 | const program = anchor.workspace.CleverTodo as Program; 10 | 11 | it("Is initialized!", async () => { 12 | // Add your test here. 13 | const tx = await program.methods.initialize().rpc(); 14 | console.log("Your transaction signature", tx); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /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.12.5", "@babel/runtime@^7.17.2": 6 | version "7.18.9" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.9.tgz#b4fcfce55db3d2e5e080d2490f608a3b9f407f4a" 8 | integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== 9 | dependencies: 10 | regenerator-runtime "^0.13.4" 11 | 12 | "@ethersproject/bytes@^5.6.1": 13 | version "5.6.1" 14 | resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" 15 | integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== 16 | dependencies: 17 | "@ethersproject/logger" "^5.6.0" 18 | 19 | "@ethersproject/logger@^5.6.0": 20 | version "5.6.0" 21 | resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" 22 | integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== 23 | 24 | "@ethersproject/sha2@^5.5.0": 25 | version "5.6.1" 26 | resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" 27 | integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== 28 | dependencies: 29 | "@ethersproject/bytes" "^5.6.1" 30 | "@ethersproject/logger" "^5.6.0" 31 | hash.js "1.1.7" 32 | 33 | "@project-serum/anchor@^0.24.2": 34 | version "0.24.2" 35 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" 36 | integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== 37 | dependencies: 38 | "@project-serum/borsh" "^0.2.5" 39 | "@solana/web3.js" "^1.36.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 | cross-fetch "^3.1.5" 46 | crypto-hash "^1.3.0" 47 | eventemitter3 "^4.0.7" 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.5": 54 | version "0.2.5" 55 | resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" 56 | integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== 57 | dependencies: 58 | bn.js "^5.1.2" 59 | buffer-layout "^1.2.0" 60 | 61 | "@solana/buffer-layout@^4.0.0": 62 | version "4.0.0" 63 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734" 64 | integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== 65 | dependencies: 66 | buffer "~6.0.3" 67 | 68 | "@solana/web3.js@^1.36.0": 69 | version "1.50.1" 70 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.50.1.tgz#dae726a06267d1bcd88b1e3cd8ae44c709302dcf" 71 | integrity sha512-1l9N/nS8pJEA2YibNT8wa072718O0/A1eKWE0+pdWC5wDGQgBNxZSLuv7Cq5Dcn46WsZ5J5ZstK89q8J/ZZaQA== 72 | dependencies: 73 | "@babel/runtime" "^7.12.5" 74 | "@ethersproject/sha2" "^5.5.0" 75 | "@solana/buffer-layout" "^4.0.0" 76 | bigint-buffer "^1.1.5" 77 | bn.js "^5.0.0" 78 | borsh "^0.7.0" 79 | bs58 "^4.0.1" 80 | buffer "6.0.1" 81 | fast-stable-stringify "^1.0.0" 82 | jayson "^3.4.4" 83 | js-sha3 "^0.8.0" 84 | node-fetch "2" 85 | react-native-url-polyfill "^1.3.0" 86 | rpc-websockets "^7.5.0" 87 | secp256k1 "^4.0.2" 88 | superstruct "^0.14.2" 89 | tweetnacl "^1.0.0" 90 | 91 | "@types/bn.js@^5.1.0": 92 | version "5.1.0" 93 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" 94 | integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== 95 | dependencies: 96 | "@types/node" "*" 97 | 98 | "@types/chai@^4.3.0": 99 | version "4.3.1" 100 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" 101 | integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== 102 | 103 | "@types/connect@^3.4.33": 104 | version "3.4.35" 105 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 106 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 107 | dependencies: 108 | "@types/node" "*" 109 | 110 | "@types/express-serve-static-core@^4.17.9": 111 | version "4.17.30" 112 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" 113 | integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== 114 | dependencies: 115 | "@types/node" "*" 116 | "@types/qs" "*" 117 | "@types/range-parser" "*" 118 | 119 | "@types/json5@^0.0.29": 120 | version "0.0.29" 121 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 122 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 123 | 124 | "@types/lodash@^4.14.159": 125 | version "4.14.182" 126 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" 127 | integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== 128 | 129 | "@types/mocha@^9.0.0": 130 | version "9.1.1" 131 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" 132 | integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== 133 | 134 | "@types/node@*": 135 | version "18.6.3" 136 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.3.tgz#4e4a95b6fe44014563ceb514b2598b3e623d1c98" 137 | integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== 138 | 139 | "@types/node@^12.12.54": 140 | version "12.20.55" 141 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" 142 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 143 | 144 | "@types/qs@*": 145 | version "6.9.7" 146 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 147 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 148 | 149 | "@types/range-parser@*": 150 | version "1.2.4" 151 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 152 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 153 | 154 | "@types/ws@^7.4.4": 155 | version "7.4.7" 156 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" 157 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 158 | dependencies: 159 | "@types/node" "*" 160 | 161 | "@ungap/promise-all-settled@1.1.2": 162 | version "1.1.2" 163 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 164 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 165 | 166 | JSONStream@^1.3.5: 167 | version "1.3.5" 168 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 169 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 170 | dependencies: 171 | jsonparse "^1.2.0" 172 | through ">=2.2.7 <3" 173 | 174 | ansi-colors@4.1.1: 175 | version "4.1.1" 176 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 177 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 178 | 179 | ansi-regex@^5.0.1: 180 | version "5.0.1" 181 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 182 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 183 | 184 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 185 | version "4.3.0" 186 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 187 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 188 | dependencies: 189 | color-convert "^2.0.1" 190 | 191 | anymatch@~3.1.2: 192 | version "3.1.2" 193 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 194 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 195 | dependencies: 196 | normalize-path "^3.0.0" 197 | picomatch "^2.0.4" 198 | 199 | argparse@^2.0.1: 200 | version "2.0.1" 201 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 202 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 203 | 204 | arrify@^1.0.0: 205 | version "1.0.1" 206 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 207 | integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== 208 | 209 | assertion-error@^1.1.0: 210 | version "1.1.0" 211 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 212 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 213 | 214 | balanced-match@^1.0.0: 215 | version "1.0.2" 216 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 217 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 218 | 219 | base-x@^3.0.2: 220 | version "3.0.9" 221 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 222 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 223 | dependencies: 224 | safe-buffer "^5.0.1" 225 | 226 | base64-js@^1.3.1, base64-js@^1.5.1: 227 | version "1.5.1" 228 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 229 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 230 | 231 | bigint-buffer@^1.1.5: 232 | version "1.1.5" 233 | resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" 234 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 235 | dependencies: 236 | bindings "^1.3.0" 237 | 238 | binary-extensions@^2.0.0: 239 | version "2.2.0" 240 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 241 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 242 | 243 | bindings@^1.3.0: 244 | version "1.5.0" 245 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 246 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 247 | dependencies: 248 | file-uri-to-path "1.0.0" 249 | 250 | bn.js@^4.11.9: 251 | version "4.12.0" 252 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" 253 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== 254 | 255 | bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0: 256 | version "5.2.1" 257 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" 258 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 259 | 260 | borsh@^0.7.0: 261 | version "0.7.0" 262 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" 263 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 264 | dependencies: 265 | bn.js "^5.2.0" 266 | bs58 "^4.0.0" 267 | text-encoding-utf-8 "^1.0.2" 268 | 269 | brace-expansion@^1.1.7: 270 | version "1.1.11" 271 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 272 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 273 | dependencies: 274 | balanced-match "^1.0.0" 275 | concat-map "0.0.1" 276 | 277 | braces@~3.0.2: 278 | version "3.0.2" 279 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 280 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 281 | dependencies: 282 | fill-range "^7.0.1" 283 | 284 | brorand@^1.1.0: 285 | version "1.1.0" 286 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 287 | integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== 288 | 289 | browser-stdout@1.3.1: 290 | version "1.3.1" 291 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 292 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 293 | 294 | bs58@^4.0.0, bs58@^4.0.1: 295 | version "4.0.1" 296 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 297 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 298 | dependencies: 299 | base-x "^3.0.2" 300 | 301 | buffer-from@^1.0.0, buffer-from@^1.1.0: 302 | version "1.1.2" 303 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 304 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 305 | 306 | buffer-layout@^1.2.0, buffer-layout@^1.2.2: 307 | version "1.2.2" 308 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" 309 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 310 | 311 | buffer@6.0.1: 312 | version "6.0.1" 313 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" 314 | integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== 315 | dependencies: 316 | base64-js "^1.3.1" 317 | ieee754 "^1.2.1" 318 | 319 | buffer@^5.4.3: 320 | version "5.7.1" 321 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 322 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 323 | dependencies: 324 | base64-js "^1.3.1" 325 | ieee754 "^1.1.13" 326 | 327 | buffer@~6.0.3: 328 | version "6.0.3" 329 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 330 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 331 | dependencies: 332 | base64-js "^1.3.1" 333 | ieee754 "^1.2.1" 334 | 335 | bufferutil@^4.0.1: 336 | version "4.0.6" 337 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" 338 | integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== 339 | dependencies: 340 | node-gyp-build "^4.3.0" 341 | 342 | camelcase@^5.3.1: 343 | version "5.3.1" 344 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 345 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 346 | 347 | camelcase@^6.0.0: 348 | version "6.3.0" 349 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 350 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 351 | 352 | chai@^4.3.4: 353 | version "4.3.6" 354 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" 355 | integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== 356 | dependencies: 357 | assertion-error "^1.1.0" 358 | check-error "^1.0.2" 359 | deep-eql "^3.0.1" 360 | get-func-name "^2.0.0" 361 | loupe "^2.3.1" 362 | pathval "^1.1.1" 363 | type-detect "^4.0.5" 364 | 365 | chalk@^4.1.0: 366 | version "4.1.2" 367 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 368 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 369 | dependencies: 370 | ansi-styles "^4.1.0" 371 | supports-color "^7.1.0" 372 | 373 | check-error@^1.0.2: 374 | version "1.0.2" 375 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 376 | integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== 377 | 378 | chokidar@3.5.3: 379 | version "3.5.3" 380 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 381 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 382 | dependencies: 383 | anymatch "~3.1.2" 384 | braces "~3.0.2" 385 | glob-parent "~5.1.2" 386 | is-binary-path "~2.1.0" 387 | is-glob "~4.0.1" 388 | normalize-path "~3.0.0" 389 | readdirp "~3.6.0" 390 | optionalDependencies: 391 | fsevents "~2.3.2" 392 | 393 | cliui@^7.0.2: 394 | version "7.0.4" 395 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 396 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 397 | dependencies: 398 | string-width "^4.2.0" 399 | strip-ansi "^6.0.0" 400 | wrap-ansi "^7.0.0" 401 | 402 | color-convert@^2.0.1: 403 | version "2.0.1" 404 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 405 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 406 | dependencies: 407 | color-name "~1.1.4" 408 | 409 | color-name@~1.1.4: 410 | version "1.1.4" 411 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 412 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 413 | 414 | commander@^2.20.3: 415 | version "2.20.3" 416 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 417 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 418 | 419 | concat-map@0.0.1: 420 | version "0.0.1" 421 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 422 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 423 | 424 | cross-fetch@^3.1.5: 425 | version "3.1.5" 426 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" 427 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== 428 | dependencies: 429 | node-fetch "2.6.7" 430 | 431 | crypto-hash@^1.3.0: 432 | version "1.3.0" 433 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" 434 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 435 | 436 | debug@4.3.3: 437 | version "4.3.3" 438 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 439 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 440 | dependencies: 441 | ms "2.1.2" 442 | 443 | decamelize@^4.0.0: 444 | version "4.0.0" 445 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 446 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 447 | 448 | deep-eql@^3.0.1: 449 | version "3.0.1" 450 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 451 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 452 | dependencies: 453 | type-detect "^4.0.0" 454 | 455 | delay@^5.0.0: 456 | version "5.0.0" 457 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 458 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 459 | 460 | diff@5.0.0: 461 | version "5.0.0" 462 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 463 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 464 | 465 | diff@^3.1.0: 466 | version "3.5.0" 467 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 468 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 469 | 470 | dot-case@^3.0.4: 471 | version "3.0.4" 472 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" 473 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 474 | dependencies: 475 | no-case "^3.0.4" 476 | tslib "^2.0.3" 477 | 478 | elliptic@^6.5.4: 479 | version "6.5.4" 480 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" 481 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== 482 | dependencies: 483 | bn.js "^4.11.9" 484 | brorand "^1.1.0" 485 | hash.js "^1.0.0" 486 | hmac-drbg "^1.0.1" 487 | inherits "^2.0.4" 488 | minimalistic-assert "^1.0.1" 489 | minimalistic-crypto-utils "^1.0.1" 490 | 491 | emoji-regex@^8.0.0: 492 | version "8.0.0" 493 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 494 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 495 | 496 | es6-promise@^4.0.3: 497 | version "4.2.8" 498 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 499 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 500 | 501 | es6-promisify@^5.0.0: 502 | version "5.0.0" 503 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 504 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 505 | dependencies: 506 | es6-promise "^4.0.3" 507 | 508 | escalade@^3.1.1: 509 | version "3.1.1" 510 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 511 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 512 | 513 | escape-string-regexp@4.0.0: 514 | version "4.0.0" 515 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 516 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 517 | 518 | eventemitter3@^4.0.7: 519 | version "4.0.7" 520 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 521 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 522 | 523 | eyes@^0.1.8: 524 | version "0.1.8" 525 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 526 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 527 | 528 | fast-stable-stringify@^1.0.0: 529 | version "1.0.0" 530 | resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" 531 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 532 | 533 | file-uri-to-path@1.0.0: 534 | version "1.0.0" 535 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 536 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 537 | 538 | fill-range@^7.0.1: 539 | version "7.0.1" 540 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 541 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 542 | dependencies: 543 | to-regex-range "^5.0.1" 544 | 545 | find-up@5.0.0: 546 | version "5.0.0" 547 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 548 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 549 | dependencies: 550 | locate-path "^6.0.0" 551 | path-exists "^4.0.0" 552 | 553 | flat@^5.0.2: 554 | version "5.0.2" 555 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 556 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 557 | 558 | fs.realpath@^1.0.0: 559 | version "1.0.0" 560 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 561 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 562 | 563 | fsevents@~2.3.2: 564 | version "2.3.2" 565 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 566 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 567 | 568 | get-caller-file@^2.0.5: 569 | version "2.0.5" 570 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 571 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 572 | 573 | get-func-name@^2.0.0: 574 | version "2.0.0" 575 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 576 | integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== 577 | 578 | glob-parent@~5.1.2: 579 | version "5.1.2" 580 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 581 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 582 | dependencies: 583 | is-glob "^4.0.1" 584 | 585 | glob@7.2.0: 586 | version "7.2.0" 587 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 588 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 589 | dependencies: 590 | fs.realpath "^1.0.0" 591 | inflight "^1.0.4" 592 | inherits "2" 593 | minimatch "^3.0.4" 594 | once "^1.3.0" 595 | path-is-absolute "^1.0.0" 596 | 597 | growl@1.10.5: 598 | version "1.10.5" 599 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 600 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 601 | 602 | has-flag@^4.0.0: 603 | version "4.0.0" 604 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 605 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 606 | 607 | hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: 608 | version "1.1.7" 609 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 610 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 611 | dependencies: 612 | inherits "^2.0.3" 613 | minimalistic-assert "^1.0.1" 614 | 615 | he@1.2.0: 616 | version "1.2.0" 617 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 618 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 619 | 620 | hmac-drbg@^1.0.1: 621 | version "1.0.1" 622 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 623 | integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== 624 | dependencies: 625 | hash.js "^1.0.3" 626 | minimalistic-assert "^1.0.0" 627 | minimalistic-crypto-utils "^1.0.1" 628 | 629 | ieee754@^1.1.13, ieee754@^1.2.1: 630 | version "1.2.1" 631 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 632 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 633 | 634 | inflight@^1.0.4: 635 | version "1.0.6" 636 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 637 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 638 | dependencies: 639 | once "^1.3.0" 640 | wrappy "1" 641 | 642 | inherits@2, inherits@^2.0.3, inherits@^2.0.4: 643 | version "2.0.4" 644 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 645 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 646 | 647 | is-binary-path@~2.1.0: 648 | version "2.1.0" 649 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 650 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 651 | dependencies: 652 | binary-extensions "^2.0.0" 653 | 654 | is-extglob@^2.1.1: 655 | version "2.1.1" 656 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 657 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 658 | 659 | is-fullwidth-code-point@^3.0.0: 660 | version "3.0.0" 661 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 662 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 663 | 664 | is-glob@^4.0.1, is-glob@~4.0.1: 665 | version "4.0.3" 666 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 667 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 668 | dependencies: 669 | is-extglob "^2.1.1" 670 | 671 | is-number@^7.0.0: 672 | version "7.0.0" 673 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 674 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 675 | 676 | is-plain-obj@^2.1.0: 677 | version "2.1.0" 678 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 679 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 680 | 681 | is-unicode-supported@^0.1.0: 682 | version "0.1.0" 683 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 684 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 685 | 686 | isexe@^2.0.0: 687 | version "2.0.0" 688 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 689 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 690 | 691 | isomorphic-ws@^4.0.1: 692 | version "4.0.1" 693 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" 694 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 695 | 696 | jayson@^3.4.4: 697 | version "3.6.6" 698 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.6.tgz#189984f624e398f831bd2be8e8c80eb3abf764a1" 699 | integrity sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ== 700 | dependencies: 701 | "@types/connect" "^3.4.33" 702 | "@types/express-serve-static-core" "^4.17.9" 703 | "@types/lodash" "^4.14.159" 704 | "@types/node" "^12.12.54" 705 | "@types/ws" "^7.4.4" 706 | JSONStream "^1.3.5" 707 | commander "^2.20.3" 708 | delay "^5.0.0" 709 | es6-promisify "^5.0.0" 710 | eyes "^0.1.8" 711 | isomorphic-ws "^4.0.1" 712 | json-stringify-safe "^5.0.1" 713 | lodash "^4.17.20" 714 | uuid "^8.3.2" 715 | ws "^7.4.5" 716 | 717 | js-sha256@^0.9.0: 718 | version "0.9.0" 719 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" 720 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== 721 | 722 | js-sha3@^0.8.0: 723 | version "0.8.0" 724 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" 725 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== 726 | 727 | js-yaml@4.1.0: 728 | version "4.1.0" 729 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 730 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 731 | dependencies: 732 | argparse "^2.0.1" 733 | 734 | json-stringify-safe@^5.0.1: 735 | version "5.0.1" 736 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 737 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 738 | 739 | json5@^1.0.1: 740 | version "1.0.1" 741 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 742 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 743 | dependencies: 744 | minimist "^1.2.0" 745 | 746 | jsonparse@^1.2.0: 747 | version "1.3.1" 748 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 749 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 750 | 751 | locate-path@^6.0.0: 752 | version "6.0.0" 753 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 754 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 755 | dependencies: 756 | p-locate "^5.0.0" 757 | 758 | lodash@^4.17.20: 759 | version "4.17.21" 760 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 761 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 762 | 763 | log-symbols@4.1.0: 764 | version "4.1.0" 765 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 766 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 767 | dependencies: 768 | chalk "^4.1.0" 769 | is-unicode-supported "^0.1.0" 770 | 771 | loupe@^2.3.1: 772 | version "2.3.4" 773 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" 774 | integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== 775 | dependencies: 776 | get-func-name "^2.0.0" 777 | 778 | lower-case@^2.0.2: 779 | version "2.0.2" 780 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 781 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 782 | dependencies: 783 | tslib "^2.0.3" 784 | 785 | make-error@^1.1.1: 786 | version "1.3.6" 787 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 788 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 789 | 790 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 791 | version "1.0.1" 792 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 793 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 794 | 795 | minimalistic-crypto-utils@^1.0.1: 796 | version "1.0.1" 797 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 798 | integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== 799 | 800 | minimatch@4.2.1: 801 | version "4.2.1" 802 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" 803 | integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== 804 | dependencies: 805 | brace-expansion "^1.1.7" 806 | 807 | minimatch@^3.0.4: 808 | version "3.1.2" 809 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 810 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 811 | dependencies: 812 | brace-expansion "^1.1.7" 813 | 814 | minimist@^1.2.0, minimist@^1.2.6: 815 | version "1.2.6" 816 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 817 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 818 | 819 | mkdirp@^0.5.1: 820 | version "0.5.6" 821 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 822 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 823 | dependencies: 824 | minimist "^1.2.6" 825 | 826 | mocha@^9.0.3: 827 | version "9.2.2" 828 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" 829 | integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== 830 | dependencies: 831 | "@ungap/promise-all-settled" "1.1.2" 832 | ansi-colors "4.1.1" 833 | browser-stdout "1.3.1" 834 | chokidar "3.5.3" 835 | debug "4.3.3" 836 | diff "5.0.0" 837 | escape-string-regexp "4.0.0" 838 | find-up "5.0.0" 839 | glob "7.2.0" 840 | growl "1.10.5" 841 | he "1.2.0" 842 | js-yaml "4.1.0" 843 | log-symbols "4.1.0" 844 | minimatch "4.2.1" 845 | ms "2.1.3" 846 | nanoid "3.3.1" 847 | serialize-javascript "6.0.0" 848 | strip-json-comments "3.1.1" 849 | supports-color "8.1.1" 850 | which "2.0.2" 851 | workerpool "6.2.0" 852 | yargs "16.2.0" 853 | yargs-parser "20.2.4" 854 | yargs-unparser "2.0.0" 855 | 856 | ms@2.1.2: 857 | version "2.1.2" 858 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 859 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 860 | 861 | ms@2.1.3: 862 | version "2.1.3" 863 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 864 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 865 | 866 | nanoid@3.3.1: 867 | version "3.3.1" 868 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" 869 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 870 | 871 | no-case@^3.0.4: 872 | version "3.0.4" 873 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 874 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 875 | dependencies: 876 | lower-case "^2.0.2" 877 | tslib "^2.0.3" 878 | 879 | node-addon-api@^2.0.0: 880 | version "2.0.2" 881 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" 882 | integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== 883 | 884 | node-fetch@2, node-fetch@2.6.7: 885 | version "2.6.7" 886 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 887 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 888 | dependencies: 889 | whatwg-url "^5.0.0" 890 | 891 | node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: 892 | version "4.5.0" 893 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" 894 | integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== 895 | 896 | normalize-path@^3.0.0, normalize-path@~3.0.0: 897 | version "3.0.0" 898 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 899 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 900 | 901 | once@^1.3.0: 902 | version "1.4.0" 903 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 904 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 905 | dependencies: 906 | wrappy "1" 907 | 908 | p-limit@^3.0.2: 909 | version "3.1.0" 910 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 911 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 912 | dependencies: 913 | yocto-queue "^0.1.0" 914 | 915 | p-locate@^5.0.0: 916 | version "5.0.0" 917 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 918 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 919 | dependencies: 920 | p-limit "^3.0.2" 921 | 922 | pako@^2.0.3: 923 | version "2.0.4" 924 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" 925 | integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== 926 | 927 | path-exists@^4.0.0: 928 | version "4.0.0" 929 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 930 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 931 | 932 | path-is-absolute@^1.0.0: 933 | version "1.0.1" 934 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 935 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 936 | 937 | pathval@^1.1.1: 938 | version "1.1.1" 939 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 940 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 941 | 942 | picomatch@^2.0.4, picomatch@^2.2.1: 943 | version "2.3.1" 944 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 945 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 946 | 947 | prettier@^2.6.2: 948 | version "2.7.1" 949 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" 950 | integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== 951 | 952 | punycode@^2.1.1: 953 | version "2.1.1" 954 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 955 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 956 | 957 | randombytes@^2.1.0: 958 | version "2.1.0" 959 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 960 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 961 | dependencies: 962 | safe-buffer "^5.1.0" 963 | 964 | react-native-url-polyfill@^1.3.0: 965 | version "1.3.0" 966 | resolved "https://registry.yarnpkg.com/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz#c1763de0f2a8c22cc3e959b654c8790622b6ef6a" 967 | integrity sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ== 968 | dependencies: 969 | whatwg-url-without-unicode "8.0.0-3" 970 | 971 | readdirp@~3.6.0: 972 | version "3.6.0" 973 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 974 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 975 | dependencies: 976 | picomatch "^2.2.1" 977 | 978 | regenerator-runtime@^0.13.4: 979 | version "0.13.9" 980 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" 981 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 982 | 983 | require-directory@^2.1.1: 984 | version "2.1.1" 985 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 986 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 987 | 988 | rpc-websockets@^7.5.0: 989 | version "7.5.0" 990 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" 991 | integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== 992 | dependencies: 993 | "@babel/runtime" "^7.17.2" 994 | eventemitter3 "^4.0.7" 995 | uuid "^8.3.2" 996 | ws "^8.5.0" 997 | optionalDependencies: 998 | bufferutil "^4.0.1" 999 | utf-8-validate "^5.0.2" 1000 | 1001 | safe-buffer@^5.0.1, safe-buffer@^5.1.0: 1002 | version "5.2.1" 1003 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1004 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1005 | 1006 | secp256k1@^4.0.2: 1007 | version "4.0.3" 1008 | resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" 1009 | integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== 1010 | dependencies: 1011 | elliptic "^6.5.4" 1012 | node-addon-api "^2.0.0" 1013 | node-gyp-build "^4.2.0" 1014 | 1015 | serialize-javascript@6.0.0: 1016 | version "6.0.0" 1017 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1018 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1019 | dependencies: 1020 | randombytes "^2.1.0" 1021 | 1022 | snake-case@^3.0.4: 1023 | version "3.0.4" 1024 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" 1025 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 1026 | dependencies: 1027 | dot-case "^3.0.4" 1028 | tslib "^2.0.3" 1029 | 1030 | source-map-support@^0.5.6: 1031 | version "0.5.21" 1032 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1033 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1034 | dependencies: 1035 | buffer-from "^1.0.0" 1036 | source-map "^0.6.0" 1037 | 1038 | source-map@^0.6.0: 1039 | version "0.6.1" 1040 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1041 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1042 | 1043 | string-width@^4.1.0, string-width@^4.2.0: 1044 | version "4.2.3" 1045 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1046 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1047 | dependencies: 1048 | emoji-regex "^8.0.0" 1049 | is-fullwidth-code-point "^3.0.0" 1050 | strip-ansi "^6.0.1" 1051 | 1052 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1053 | version "6.0.1" 1054 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1055 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1056 | dependencies: 1057 | ansi-regex "^5.0.1" 1058 | 1059 | strip-bom@^3.0.0: 1060 | version "3.0.0" 1061 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1062 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1063 | 1064 | strip-json-comments@3.1.1: 1065 | version "3.1.1" 1066 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1067 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1068 | 1069 | superstruct@^0.14.2: 1070 | version "0.14.2" 1071 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" 1072 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 1073 | 1074 | supports-color@8.1.1: 1075 | version "8.1.1" 1076 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1077 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1078 | dependencies: 1079 | has-flag "^4.0.0" 1080 | 1081 | supports-color@^7.1.0: 1082 | version "7.2.0" 1083 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1084 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1085 | dependencies: 1086 | has-flag "^4.0.0" 1087 | 1088 | text-encoding-utf-8@^1.0.2: 1089 | version "1.0.2" 1090 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" 1091 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1092 | 1093 | "through@>=2.2.7 <3": 1094 | version "2.3.8" 1095 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1096 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1097 | 1098 | to-regex-range@^5.0.1: 1099 | version "5.0.1" 1100 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1101 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1102 | dependencies: 1103 | is-number "^7.0.0" 1104 | 1105 | toml@^3.0.0: 1106 | version "3.0.0" 1107 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" 1108 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 1109 | 1110 | tr46@~0.0.3: 1111 | version "0.0.3" 1112 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1113 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1114 | 1115 | ts-mocha@^8.0.0: 1116 | version "8.0.0" 1117 | resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-8.0.0.tgz#962d0fa12eeb6468aa1a6b594bb3bbc818da3ef0" 1118 | integrity sha512-Kou1yxTlubLnD5C3unlCVO7nh0HERTezjoVhVw/M5S1SqoUec0WgllQvPk3vzPMc6by8m6xD1uR1yRf8lnVUbA== 1119 | dependencies: 1120 | ts-node "7.0.1" 1121 | optionalDependencies: 1122 | tsconfig-paths "^3.5.0" 1123 | 1124 | ts-node@7.0.1: 1125 | version "7.0.1" 1126 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" 1127 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1128 | dependencies: 1129 | arrify "^1.0.0" 1130 | buffer-from "^1.1.0" 1131 | diff "^3.1.0" 1132 | make-error "^1.1.1" 1133 | minimist "^1.2.0" 1134 | mkdirp "^0.5.1" 1135 | source-map-support "^0.5.6" 1136 | yn "^2.0.0" 1137 | 1138 | tsconfig-paths@^3.5.0: 1139 | version "3.14.1" 1140 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" 1141 | integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== 1142 | dependencies: 1143 | "@types/json5" "^0.0.29" 1144 | json5 "^1.0.1" 1145 | minimist "^1.2.6" 1146 | strip-bom "^3.0.0" 1147 | 1148 | tslib@^2.0.3: 1149 | version "2.4.0" 1150 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 1151 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 1152 | 1153 | tweetnacl@^1.0.0: 1154 | version "1.0.3" 1155 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 1156 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 1157 | 1158 | type-detect@^4.0.0, type-detect@^4.0.5: 1159 | version "4.0.8" 1160 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1161 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1162 | 1163 | typescript@^4.3.5: 1164 | version "4.7.4" 1165 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 1166 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 1167 | 1168 | utf-8-validate@^5.0.2: 1169 | version "5.0.9" 1170 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" 1171 | integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== 1172 | dependencies: 1173 | node-gyp-build "^4.3.0" 1174 | 1175 | uuid@^8.3.2: 1176 | version "8.3.2" 1177 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 1178 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1179 | 1180 | webidl-conversions@^3.0.0: 1181 | version "3.0.1" 1182 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1183 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1184 | 1185 | webidl-conversions@^5.0.0: 1186 | version "5.0.0" 1187 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" 1188 | integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== 1189 | 1190 | whatwg-url-without-unicode@8.0.0-3: 1191 | version "8.0.0-3" 1192 | resolved "https://registry.yarnpkg.com/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz#ab6df4bf6caaa6c85a59f6e82c026151d4bb376b" 1193 | integrity sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig== 1194 | dependencies: 1195 | buffer "^5.4.3" 1196 | punycode "^2.1.1" 1197 | webidl-conversions "^5.0.0" 1198 | 1199 | whatwg-url@^5.0.0: 1200 | version "5.0.0" 1201 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1202 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1203 | dependencies: 1204 | tr46 "~0.0.3" 1205 | webidl-conversions "^3.0.0" 1206 | 1207 | which@2.0.2: 1208 | version "2.0.2" 1209 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1210 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1211 | dependencies: 1212 | isexe "^2.0.0" 1213 | 1214 | workerpool@6.2.0: 1215 | version "6.2.0" 1216 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" 1217 | integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== 1218 | 1219 | wrap-ansi@^7.0.0: 1220 | version "7.0.0" 1221 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1222 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1223 | dependencies: 1224 | ansi-styles "^4.0.0" 1225 | string-width "^4.1.0" 1226 | strip-ansi "^6.0.0" 1227 | 1228 | wrappy@1: 1229 | version "1.0.2" 1230 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1231 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1232 | 1233 | ws@^7.4.5: 1234 | version "7.5.9" 1235 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" 1236 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 1237 | 1238 | ws@^8.5.0: 1239 | version "8.8.1" 1240 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" 1241 | integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== 1242 | 1243 | y18n@^5.0.5: 1244 | version "5.0.8" 1245 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1246 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1247 | 1248 | yargs-parser@20.2.4: 1249 | version "20.2.4" 1250 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1251 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1252 | 1253 | yargs-parser@^20.2.2: 1254 | version "20.2.9" 1255 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1256 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1257 | 1258 | yargs-unparser@2.0.0: 1259 | version "2.0.0" 1260 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1261 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1262 | dependencies: 1263 | camelcase "^6.0.0" 1264 | decamelize "^4.0.0" 1265 | flat "^5.0.2" 1266 | is-plain-obj "^2.1.0" 1267 | 1268 | yargs@16.2.0: 1269 | version "16.2.0" 1270 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1271 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1272 | dependencies: 1273 | cliui "^7.0.2" 1274 | escalade "^3.1.1" 1275 | get-caller-file "^2.0.5" 1276 | require-directory "^2.1.1" 1277 | string-width "^4.2.0" 1278 | y18n "^5.0.5" 1279 | yargs-parser "^20.2.2" 1280 | 1281 | yn@^2.0.0: 1282 | version "2.0.0" 1283 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1284 | integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== 1285 | 1286 | yocto-queue@^0.1.0: 1287 | version "0.1.0" 1288 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1289 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1290 | --------------------------------------------------------------------------------