├── .gitignore ├── .prettierignore ├── Anchor.toml ├── Cargo.lock ├── Cargo.toml ├── README.md ├── migration ├── compute.ts ├── initialize.ts ├── mintChild.ts ├── setting.ts └── updateUri.ts ├── package.json ├── programs └── nft-breeding │ ├── Cargo.toml │ ├── Xargo.toml │ └── src │ └── lib.rs ├── tests └── nft-breeding.ts ├── ts ├── ids.ts ├── index.ts ├── infos.ts ├── instruction.ts ├── transaction.ts └── utils.ts ├── tsconfig.json ├── uri ├── childUri.json ├── parentAUri.json └── parentBUri.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | **/*.rs.bk 6 | node_modules 7 | test-ledger 8 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | 2 | .anchor 3 | .DS_Store 4 | target 5 | node_modules 6 | dist 7 | build 8 | test-ledger 9 | -------------------------------------------------------------------------------- /Anchor.toml: -------------------------------------------------------------------------------- 1 | [features] 2 | seeds = false 3 | [programs.localnet] 4 | nft_breeding = "NFTBfAcFhBb8yqNvYiN8RPQfr5KrVuHGK7pj61EiVnZ" 5 | 6 | [registry] 7 | url = "https://anchor.projectserum.com" 8 | 9 | [provider] 10 | #cluster = "localnet" 11 | cluster = "https://rpc-mainnet-fork.epochs.studio" 12 | wallet = "~/.config/solana/phantom.json" 13 | 14 | [scripts] 15 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 16 | initialize = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 migration/initialize.ts" 17 | compute = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 migration/compute.ts" 18 | mintChild = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 migration/mintChild.ts" 19 | updateUri = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 migration/updateUri.ts" 20 | -------------------------------------------------------------------------------- /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.24.2" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "a9b75d05b6b4ac9d95bb6e3b786b27d3a708c4c5a87c92ffaa25bbe9ae4c5d91" 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.24.2" 42 | source = "registry+https://github.com/rust-lang/crates.io-index" 43 | checksum = "485351a6d8157750d10d88c8e256f1bf8339262b2220ae9125aed3471309b5de" 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.24.2" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "dc632c540913dd051a78b00587cc47f57013d303163ddfaf4fa18717f7ccc1e0" 59 | dependencies = [ 60 | "anchor-syn", 61 | "proc-macro2", 62 | "syn", 63 | ] 64 | 65 | [[package]] 66 | name = "anchor-attribute-error" 67 | version = "0.24.2" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "3b5bd1dcfa7f3bc22dacef233d70a9e0bee269c4ac484510662f257cba2353a1" 70 | dependencies = [ 71 | "anchor-syn", 72 | "proc-macro2", 73 | "quote", 74 | "syn", 75 | ] 76 | 77 | [[package]] 78 | name = "anchor-attribute-event" 79 | version = "0.24.2" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "6c6f9e6ce551ac9a177a45c99a65699a860c9e95fac68675138af1246e2591b0" 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.24.2" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "d104aa17418cb329ed7418b227e083d5f326a27f26ce98f5d92e33da62a5f459" 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.24.2" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "b6831b920b173c004ddf7ae1167d1d25e9f002ffcb1773bbc5c7ce532a4441e1" 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.24.2" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "cde147b10c71d95dc679785db0b5f3abac0091f789167aa62ac0135e2f54e8b9" 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.24.2" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "9cde98a0e1a56046b040ff591dfda391f88917af2b6487d02b45093c05be3514" 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.24.2" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "a85dd2c5e29e20c7f4701a43724d6cd5406d0ee5694705522e43da0f26542a84" 148 | dependencies = [ 149 | "anchor-attribute-access-control", 150 | "anchor-attribute-account", 151 | "anchor-attribute-constant", 152 | "anchor-attribute-error", 153 | "anchor-attribute-event", 154 | "anchor-attribute-interface", 155 | "anchor-attribute-program", 156 | "anchor-attribute-state", 157 | "anchor-derive-accounts", 158 | "arrayref", 159 | "base64 0.13.0", 160 | "bincode", 161 | "borsh", 162 | "bytemuck", 163 | "solana-program", 164 | "thiserror", 165 | ] 166 | 167 | [[package]] 168 | name = "anchor-spl" 169 | version = "0.24.2" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "0188c33b4a3c124c4e593f2b440415aaea70a7650fac6ba0772395385d71c003" 172 | dependencies = [ 173 | "anchor-lang", 174 | "solana-program", 175 | "spl-associated-token-account", 176 | "spl-token", 177 | ] 178 | 179 | [[package]] 180 | name = "anchor-syn" 181 | version = "0.24.2" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "03549dc2eae0b20beba6333b14520e511822a6321cdb1760f841064a69347316" 184 | dependencies = [ 185 | "anyhow", 186 | "bs58 0.3.1", 187 | "heck", 188 | "proc-macro2", 189 | "proc-macro2-diagnostics", 190 | "quote", 191 | "serde", 192 | "serde_json", 193 | "sha2", 194 | "syn", 195 | "thiserror", 196 | ] 197 | 198 | [[package]] 199 | name = "anyhow" 200 | version = "1.0.58" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" 203 | 204 | [[package]] 205 | name = "arrayref" 206 | version = "0.3.6" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 209 | 210 | [[package]] 211 | name = "arrayvec" 212 | version = "0.7.2" 213 | source = "registry+https://github.com/rust-lang/crates.io-index" 214 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" 215 | 216 | [[package]] 217 | name = "atty" 218 | version = "0.2.14" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 221 | dependencies = [ 222 | "hermit-abi", 223 | "libc", 224 | "winapi", 225 | ] 226 | 227 | [[package]] 228 | name = "autocfg" 229 | version = "1.1.0" 230 | source = "registry+https://github.com/rust-lang/crates.io-index" 231 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 232 | 233 | [[package]] 234 | name = "base64" 235 | version = "0.12.3" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" 238 | 239 | [[package]] 240 | name = "base64" 241 | version = "0.13.0" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 244 | 245 | [[package]] 246 | name = "bincode" 247 | version = "1.3.3" 248 | source = "registry+https://github.com/rust-lang/crates.io-index" 249 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 250 | dependencies = [ 251 | "serde", 252 | ] 253 | 254 | [[package]] 255 | name = "bitflags" 256 | version = "1.3.2" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 259 | 260 | [[package]] 261 | name = "blake3" 262 | version = "1.3.1" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" 265 | dependencies = [ 266 | "arrayref", 267 | "arrayvec", 268 | "cc", 269 | "cfg-if", 270 | "constant_time_eq", 271 | "digest 0.10.3", 272 | ] 273 | 274 | [[package]] 275 | name = "block-buffer" 276 | version = "0.9.0" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 279 | dependencies = [ 280 | "block-padding", 281 | "generic-array", 282 | ] 283 | 284 | [[package]] 285 | name = "block-buffer" 286 | version = "0.10.2" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 289 | dependencies = [ 290 | "generic-array", 291 | ] 292 | 293 | [[package]] 294 | name = "block-padding" 295 | version = "0.2.1" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" 298 | 299 | [[package]] 300 | name = "borsh" 301 | version = "0.9.3" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" 304 | dependencies = [ 305 | "borsh-derive", 306 | "hashbrown", 307 | ] 308 | 309 | [[package]] 310 | name = "borsh-derive" 311 | version = "0.9.3" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" 314 | dependencies = [ 315 | "borsh-derive-internal", 316 | "borsh-schema-derive-internal", 317 | "proc-macro-crate 0.1.5", 318 | "proc-macro2", 319 | "syn", 320 | ] 321 | 322 | [[package]] 323 | name = "borsh-derive-internal" 324 | version = "0.9.3" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" 327 | dependencies = [ 328 | "proc-macro2", 329 | "quote", 330 | "syn", 331 | ] 332 | 333 | [[package]] 334 | name = "borsh-schema-derive-internal" 335 | version = "0.9.3" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" 338 | dependencies = [ 339 | "proc-macro2", 340 | "quote", 341 | "syn", 342 | ] 343 | 344 | [[package]] 345 | name = "bs58" 346 | version = "0.3.1" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" 349 | 350 | [[package]] 351 | name = "bs58" 352 | version = "0.4.0" 353 | source = "registry+https://github.com/rust-lang/crates.io-index" 354 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" 355 | 356 | [[package]] 357 | name = "bumpalo" 358 | version = "3.10.0" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" 361 | 362 | [[package]] 363 | name = "bv" 364 | version = "0.11.1" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" 367 | dependencies = [ 368 | "feature-probe", 369 | "serde", 370 | ] 371 | 372 | [[package]] 373 | name = "bytemuck" 374 | version = "1.11.0" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" 377 | dependencies = [ 378 | "bytemuck_derive", 379 | ] 380 | 381 | [[package]] 382 | name = "bytemuck_derive" 383 | version = "1.1.1" 384 | source = "registry+https://github.com/rust-lang/crates.io-index" 385 | checksum = "cfd2f4180c5721da6335cc9e9061cce522b87a35e51cc57636d28d22a9863c80" 386 | dependencies = [ 387 | "proc-macro2", 388 | "quote", 389 | "syn", 390 | ] 391 | 392 | [[package]] 393 | name = "byteorder" 394 | version = "1.4.3" 395 | source = "registry+https://github.com/rust-lang/crates.io-index" 396 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 397 | 398 | [[package]] 399 | name = "cc" 400 | version = "1.0.73" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 403 | 404 | [[package]] 405 | name = "cfg-if" 406 | version = "1.0.0" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 409 | 410 | [[package]] 411 | name = "console_error_panic_hook" 412 | version = "0.1.7" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 415 | dependencies = [ 416 | "cfg-if", 417 | "wasm-bindgen", 418 | ] 419 | 420 | [[package]] 421 | name = "console_log" 422 | version = "0.2.0" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494" 425 | dependencies = [ 426 | "log", 427 | "web-sys", 428 | ] 429 | 430 | [[package]] 431 | name = "constant_time_eq" 432 | version = "0.1.5" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 435 | 436 | [[package]] 437 | name = "cpufeatures" 438 | version = "0.2.2" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" 441 | dependencies = [ 442 | "libc", 443 | ] 444 | 445 | [[package]] 446 | name = "crunchy" 447 | version = "0.2.2" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" 450 | 451 | [[package]] 452 | name = "crypto-common" 453 | version = "0.1.6" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 456 | dependencies = [ 457 | "generic-array", 458 | "typenum", 459 | ] 460 | 461 | [[package]] 462 | name = "crypto-mac" 463 | version = "0.8.0" 464 | source = "registry+https://github.com/rust-lang/crates.io-index" 465 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" 466 | dependencies = [ 467 | "generic-array", 468 | "subtle", 469 | ] 470 | 471 | [[package]] 472 | name = "curve25519-dalek" 473 | version = "3.2.1" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" 476 | dependencies = [ 477 | "byteorder", 478 | "digest 0.9.0", 479 | "rand_core", 480 | "subtle", 481 | "zeroize", 482 | ] 483 | 484 | [[package]] 485 | name = "digest" 486 | version = "0.9.0" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 489 | dependencies = [ 490 | "generic-array", 491 | ] 492 | 493 | [[package]] 494 | name = "digest" 495 | version = "0.10.3" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 498 | dependencies = [ 499 | "block-buffer 0.10.2", 500 | "crypto-common", 501 | "subtle", 502 | ] 503 | 504 | [[package]] 505 | name = "either" 506 | version = "1.7.0" 507 | source = "registry+https://github.com/rust-lang/crates.io-index" 508 | checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" 509 | 510 | [[package]] 511 | name = "env_logger" 512 | version = "0.9.0" 513 | source = "registry+https://github.com/rust-lang/crates.io-index" 514 | checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" 515 | dependencies = [ 516 | "atty", 517 | "humantime", 518 | "log", 519 | "regex", 520 | "termcolor", 521 | ] 522 | 523 | [[package]] 524 | name = "feature-probe" 525 | version = "0.1.1" 526 | source = "registry+https://github.com/rust-lang/crates.io-index" 527 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" 528 | 529 | [[package]] 530 | name = "generic-array" 531 | version = "0.14.5" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" 534 | dependencies = [ 535 | "serde", 536 | "typenum", 537 | "version_check", 538 | ] 539 | 540 | [[package]] 541 | name = "getrandom" 542 | version = "0.1.16" 543 | source = "registry+https://github.com/rust-lang/crates.io-index" 544 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 545 | dependencies = [ 546 | "cfg-if", 547 | "js-sys", 548 | "libc", 549 | "wasi 0.9.0+wasi-snapshot-preview1", 550 | "wasm-bindgen", 551 | ] 552 | 553 | [[package]] 554 | name = "getrandom" 555 | version = "0.2.7" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 558 | dependencies = [ 559 | "cfg-if", 560 | "libc", 561 | "wasi 0.11.0+wasi-snapshot-preview1", 562 | ] 563 | 564 | [[package]] 565 | name = "hashbrown" 566 | version = "0.11.2" 567 | source = "registry+https://github.com/rust-lang/crates.io-index" 568 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" 569 | dependencies = [ 570 | "ahash", 571 | ] 572 | 573 | [[package]] 574 | name = "heck" 575 | version = "0.3.3" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 578 | dependencies = [ 579 | "unicode-segmentation", 580 | ] 581 | 582 | [[package]] 583 | name = "hermit-abi" 584 | version = "0.1.19" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 587 | dependencies = [ 588 | "libc", 589 | ] 590 | 591 | [[package]] 592 | name = "hex" 593 | version = "0.4.3" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 596 | 597 | [[package]] 598 | name = "hmac" 599 | version = "0.8.1" 600 | source = "registry+https://github.com/rust-lang/crates.io-index" 601 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" 602 | dependencies = [ 603 | "crypto-mac", 604 | "digest 0.9.0", 605 | ] 606 | 607 | [[package]] 608 | name = "hmac-drbg" 609 | version = "0.3.0" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" 612 | dependencies = [ 613 | "digest 0.9.0", 614 | "generic-array", 615 | "hmac", 616 | ] 617 | 618 | [[package]] 619 | name = "humantime" 620 | version = "2.1.0" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 623 | 624 | [[package]] 625 | name = "instant" 626 | version = "0.1.12" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 629 | dependencies = [ 630 | "cfg-if", 631 | ] 632 | 633 | [[package]] 634 | name = "itertools" 635 | version = "0.10.3" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 638 | dependencies = [ 639 | "either", 640 | ] 641 | 642 | [[package]] 643 | name = "itoa" 644 | version = "1.0.2" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" 647 | 648 | [[package]] 649 | name = "js-sys" 650 | version = "0.3.59" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" 653 | dependencies = [ 654 | "wasm-bindgen", 655 | ] 656 | 657 | [[package]] 658 | name = "keccak" 659 | version = "0.1.2" 660 | source = "registry+https://github.com/rust-lang/crates.io-index" 661 | checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" 662 | 663 | [[package]] 664 | name = "lazy_static" 665 | version = "1.4.0" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 668 | 669 | [[package]] 670 | name = "libc" 671 | version = "0.2.126" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" 674 | 675 | [[package]] 676 | name = "libsecp256k1" 677 | version = "0.6.0" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" 680 | dependencies = [ 681 | "arrayref", 682 | "base64 0.12.3", 683 | "digest 0.9.0", 684 | "hmac-drbg", 685 | "libsecp256k1-core", 686 | "libsecp256k1-gen-ecmult", 687 | "libsecp256k1-gen-genmult", 688 | "rand", 689 | "serde", 690 | "sha2", 691 | "typenum", 692 | ] 693 | 694 | [[package]] 695 | name = "libsecp256k1-core" 696 | version = "0.2.2" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" 699 | dependencies = [ 700 | "crunchy", 701 | "digest 0.9.0", 702 | "subtle", 703 | ] 704 | 705 | [[package]] 706 | name = "libsecp256k1-gen-ecmult" 707 | version = "0.2.1" 708 | source = "registry+https://github.com/rust-lang/crates.io-index" 709 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" 710 | dependencies = [ 711 | "libsecp256k1-core", 712 | ] 713 | 714 | [[package]] 715 | name = "libsecp256k1-gen-genmult" 716 | version = "0.2.1" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" 719 | dependencies = [ 720 | "libsecp256k1-core", 721 | ] 722 | 723 | [[package]] 724 | name = "lock_api" 725 | version = "0.4.7" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 728 | dependencies = [ 729 | "autocfg", 730 | "scopeguard", 731 | ] 732 | 733 | [[package]] 734 | name = "log" 735 | version = "0.4.17" 736 | source = "registry+https://github.com/rust-lang/crates.io-index" 737 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 738 | dependencies = [ 739 | "cfg-if", 740 | ] 741 | 742 | [[package]] 743 | name = "memchr" 744 | version = "2.5.0" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 747 | 748 | [[package]] 749 | name = "memmap2" 750 | version = "0.5.5" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "3a79b39c93a7a5a27eeaf9a23b5ff43f1b9e0ad6b1cdd441140ae53c35613fc7" 753 | dependencies = [ 754 | "libc", 755 | ] 756 | 757 | [[package]] 758 | name = "mpl-token-metadata" 759 | version = "1.3.3" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "b73a2070e1acf3a42357e7580ae1905795cbee0a77858f8e0c44df885cbc4814" 762 | dependencies = [ 763 | "arrayref", 764 | "borsh", 765 | "mpl-token-vault", 766 | "num-derive", 767 | "num-traits", 768 | "shank", 769 | "solana-program", 770 | "spl-associated-token-account", 771 | "spl-token", 772 | "thiserror", 773 | ] 774 | 775 | [[package]] 776 | name = "mpl-token-vault" 777 | version = "0.1.0" 778 | source = "registry+https://github.com/rust-lang/crates.io-index" 779 | checksum = "7ade4ef15bc06a6033076c4ff28cba9b42521df5ec61211d6f419415ace2746a" 780 | dependencies = [ 781 | "borsh", 782 | "num-derive", 783 | "num-traits", 784 | "solana-program", 785 | "spl-token", 786 | "thiserror", 787 | ] 788 | 789 | [[package]] 790 | name = "nft-breeding" 791 | version = "0.1.0" 792 | dependencies = [ 793 | "anchor-lang", 794 | "anchor-spl", 795 | "hex", 796 | "mpl-token-metadata", 797 | ] 798 | 799 | [[package]] 800 | name = "num-derive" 801 | version = "0.3.3" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" 804 | dependencies = [ 805 | "proc-macro2", 806 | "quote", 807 | "syn", 808 | ] 809 | 810 | [[package]] 811 | name = "num-traits" 812 | version = "0.2.15" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 815 | dependencies = [ 816 | "autocfg", 817 | ] 818 | 819 | [[package]] 820 | name = "num_enum" 821 | version = "0.5.7" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" 824 | dependencies = [ 825 | "num_enum_derive", 826 | ] 827 | 828 | [[package]] 829 | name = "num_enum_derive" 830 | version = "0.5.7" 831 | source = "registry+https://github.com/rust-lang/crates.io-index" 832 | checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" 833 | dependencies = [ 834 | "proc-macro-crate 1.1.3", 835 | "proc-macro2", 836 | "quote", 837 | "syn", 838 | ] 839 | 840 | [[package]] 841 | name = "once_cell" 842 | version = "1.13.0" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" 845 | 846 | [[package]] 847 | name = "opaque-debug" 848 | version = "0.3.0" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" 851 | 852 | [[package]] 853 | name = "parking_lot" 854 | version = "0.11.2" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 857 | dependencies = [ 858 | "instant", 859 | "lock_api", 860 | "parking_lot_core", 861 | ] 862 | 863 | [[package]] 864 | name = "parking_lot_core" 865 | version = "0.8.5" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 868 | dependencies = [ 869 | "cfg-if", 870 | "instant", 871 | "libc", 872 | "redox_syscall", 873 | "smallvec", 874 | "winapi", 875 | ] 876 | 877 | [[package]] 878 | name = "ppv-lite86" 879 | version = "0.2.16" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 882 | 883 | [[package]] 884 | name = "proc-macro-crate" 885 | version = "0.1.5" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" 888 | dependencies = [ 889 | "toml", 890 | ] 891 | 892 | [[package]] 893 | name = "proc-macro-crate" 894 | version = "1.1.3" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" 897 | dependencies = [ 898 | "thiserror", 899 | "toml", 900 | ] 901 | 902 | [[package]] 903 | name = "proc-macro2" 904 | version = "1.0.42" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" 907 | dependencies = [ 908 | "unicode-ident", 909 | ] 910 | 911 | [[package]] 912 | name = "proc-macro2-diagnostics" 913 | version = "0.9.1" 914 | source = "registry+https://github.com/rust-lang/crates.io-index" 915 | checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" 916 | dependencies = [ 917 | "proc-macro2", 918 | "quote", 919 | "syn", 920 | "version_check", 921 | "yansi", 922 | ] 923 | 924 | [[package]] 925 | name = "quote" 926 | version = "1.0.20" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" 929 | dependencies = [ 930 | "proc-macro2", 931 | ] 932 | 933 | [[package]] 934 | name = "rand" 935 | version = "0.7.3" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 938 | dependencies = [ 939 | "getrandom 0.1.16", 940 | "libc", 941 | "rand_chacha", 942 | "rand_core", 943 | "rand_hc", 944 | ] 945 | 946 | [[package]] 947 | name = "rand_chacha" 948 | version = "0.2.2" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 951 | dependencies = [ 952 | "ppv-lite86", 953 | "rand_core", 954 | ] 955 | 956 | [[package]] 957 | name = "rand_core" 958 | version = "0.5.1" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 961 | dependencies = [ 962 | "getrandom 0.1.16", 963 | ] 964 | 965 | [[package]] 966 | name = "rand_hc" 967 | version = "0.2.0" 968 | source = "registry+https://github.com/rust-lang/crates.io-index" 969 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 970 | dependencies = [ 971 | "rand_core", 972 | ] 973 | 974 | [[package]] 975 | name = "redox_syscall" 976 | version = "0.2.16" 977 | source = "registry+https://github.com/rust-lang/crates.io-index" 978 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 979 | dependencies = [ 980 | "bitflags", 981 | ] 982 | 983 | [[package]] 984 | name = "regex" 985 | version = "1.6.0" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 988 | dependencies = [ 989 | "aho-corasick", 990 | "memchr", 991 | "regex-syntax", 992 | ] 993 | 994 | [[package]] 995 | name = "regex-syntax" 996 | version = "0.6.27" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 999 | 1000 | [[package]] 1001 | name = "rustc_version" 1002 | version = "0.4.0" 1003 | source = "registry+https://github.com/rust-lang/crates.io-index" 1004 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1005 | dependencies = [ 1006 | "semver", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "rustversion" 1011 | version = "1.0.8" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8" 1014 | 1015 | [[package]] 1016 | name = "ryu" 1017 | version = "1.0.10" 1018 | source = "registry+https://github.com/rust-lang/crates.io-index" 1019 | checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" 1020 | 1021 | [[package]] 1022 | name = "scopeguard" 1023 | version = "1.1.0" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 1026 | 1027 | [[package]] 1028 | name = "semver" 1029 | version = "1.0.12" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "a2333e6df6d6598f2b1974829f853c2b4c5f4a6e503c10af918081aa6f8564e1" 1032 | 1033 | [[package]] 1034 | name = "serde" 1035 | version = "1.0.140" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" 1038 | dependencies = [ 1039 | "serde_derive", 1040 | ] 1041 | 1042 | [[package]] 1043 | name = "serde_bytes" 1044 | version = "0.11.6" 1045 | source = "registry+https://github.com/rust-lang/crates.io-index" 1046 | checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54" 1047 | dependencies = [ 1048 | "serde", 1049 | ] 1050 | 1051 | [[package]] 1052 | name = "serde_derive" 1053 | version = "1.0.140" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" 1056 | dependencies = [ 1057 | "proc-macro2", 1058 | "quote", 1059 | "syn", 1060 | ] 1061 | 1062 | [[package]] 1063 | name = "serde_json" 1064 | version = "1.0.82" 1065 | source = "registry+https://github.com/rust-lang/crates.io-index" 1066 | checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" 1067 | dependencies = [ 1068 | "itoa", 1069 | "ryu", 1070 | "serde", 1071 | ] 1072 | 1073 | [[package]] 1074 | name = "sha2" 1075 | version = "0.9.9" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1078 | dependencies = [ 1079 | "block-buffer 0.9.0", 1080 | "cfg-if", 1081 | "cpufeatures", 1082 | "digest 0.9.0", 1083 | "opaque-debug", 1084 | ] 1085 | 1086 | [[package]] 1087 | name = "sha3" 1088 | version = "0.9.1" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" 1091 | dependencies = [ 1092 | "block-buffer 0.9.0", 1093 | "digest 0.9.0", 1094 | "keccak", 1095 | "opaque-debug", 1096 | ] 1097 | 1098 | [[package]] 1099 | name = "shank" 1100 | version = "0.0.4" 1101 | source = "registry+https://github.com/rust-lang/crates.io-index" 1102 | checksum = "85a6c6cad96abd1fd950d1df186ec02e786566161f03adadbb7cf157ae9a82d8" 1103 | dependencies = [ 1104 | "shank_macro", 1105 | ] 1106 | 1107 | [[package]] 1108 | name = "shank_macro" 1109 | version = "0.0.4" 1110 | source = "registry+https://github.com/rust-lang/crates.io-index" 1111 | checksum = "c0b3bf722b43cea02627c7fd89925f5861f7aa27604c1852720f8eee1a73523d" 1112 | dependencies = [ 1113 | "proc-macro2", 1114 | "quote", 1115 | "shank_macro_impl", 1116 | "syn", 1117 | ] 1118 | 1119 | [[package]] 1120 | name = "shank_macro_impl" 1121 | version = "0.0.4" 1122 | source = "registry+https://github.com/rust-lang/crates.io-index" 1123 | checksum = "90a37f762b0529d64a9e3401ac3829e132f58fa9bc50b1fd6ad7b5a1a414a228" 1124 | dependencies = [ 1125 | "anyhow", 1126 | "proc-macro2", 1127 | "quote", 1128 | "serde", 1129 | "syn", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "smallvec" 1134 | version = "1.9.0" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" 1137 | 1138 | [[package]] 1139 | name = "solana-frozen-abi" 1140 | version = "1.9.29" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "2d4fcb89eb3d0f30bd4b4a31ad1825c9d95cd638509acead00969d7601713288" 1143 | dependencies = [ 1144 | "bs58 0.4.0", 1145 | "bv", 1146 | "generic-array", 1147 | "log", 1148 | "memmap2", 1149 | "rustc_version", 1150 | "serde", 1151 | "serde_derive", 1152 | "sha2", 1153 | "solana-frozen-abi-macro", 1154 | "solana-logger", 1155 | "thiserror", 1156 | ] 1157 | 1158 | [[package]] 1159 | name = "solana-frozen-abi-macro" 1160 | version = "1.9.29" 1161 | source = "registry+https://github.com/rust-lang/crates.io-index" 1162 | checksum = "d63ab101db88ecccd8da34065b9097b88367e0744fdfd05cb7de87b4ede3717f" 1163 | dependencies = [ 1164 | "proc-macro2", 1165 | "quote", 1166 | "rustc_version", 1167 | "syn", 1168 | ] 1169 | 1170 | [[package]] 1171 | name = "solana-logger" 1172 | version = "1.9.29" 1173 | source = "registry+https://github.com/rust-lang/crates.io-index" 1174 | checksum = "9ce1805d52fc8277a84c4803c7850c8f41471b57fb0dec7750338955ad6e43e2" 1175 | dependencies = [ 1176 | "env_logger", 1177 | "lazy_static", 1178 | "log", 1179 | ] 1180 | 1181 | [[package]] 1182 | name = "solana-program" 1183 | version = "1.9.29" 1184 | source = "registry+https://github.com/rust-lang/crates.io-index" 1185 | checksum = "f5deafc4902425d40197f74166640300dd20b078e4ffd518c1bb56ceb7e01680" 1186 | dependencies = [ 1187 | "base64 0.13.0", 1188 | "bincode", 1189 | "bitflags", 1190 | "blake3", 1191 | "borsh", 1192 | "borsh-derive", 1193 | "bs58 0.4.0", 1194 | "bv", 1195 | "bytemuck", 1196 | "console_error_panic_hook", 1197 | "console_log", 1198 | "curve25519-dalek", 1199 | "getrandom 0.1.16", 1200 | "itertools", 1201 | "js-sys", 1202 | "lazy_static", 1203 | "libsecp256k1", 1204 | "log", 1205 | "num-derive", 1206 | "num-traits", 1207 | "parking_lot", 1208 | "rand", 1209 | "rustc_version", 1210 | "rustversion", 1211 | "serde", 1212 | "serde_bytes", 1213 | "serde_derive", 1214 | "sha2", 1215 | "sha3", 1216 | "solana-frozen-abi", 1217 | "solana-frozen-abi-macro", 1218 | "solana-logger", 1219 | "solana-sdk-macro", 1220 | "thiserror", 1221 | "wasm-bindgen", 1222 | ] 1223 | 1224 | [[package]] 1225 | name = "solana-sdk-macro" 1226 | version = "1.9.29" 1227 | source = "registry+https://github.com/rust-lang/crates.io-index" 1228 | checksum = "3db4c93bd43c91290ad54fe6ff86179a859954f196507c4789a4876d38a62f17" 1229 | dependencies = [ 1230 | "bs58 0.4.0", 1231 | "proc-macro2", 1232 | "quote", 1233 | "rustversion", 1234 | "syn", 1235 | ] 1236 | 1237 | [[package]] 1238 | name = "spl-associated-token-account" 1239 | version = "1.0.5" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "2b013067447a1396303ddfc294f36e3d260a32f8a16c501c295bcdc7de39b490" 1242 | dependencies = [ 1243 | "borsh", 1244 | "solana-program", 1245 | "spl-token", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "spl-token" 1250 | version = "3.3.0" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "0cc67166ef99d10c18cb5e9c208901e6d8255c6513bb1f877977eba48e6cc4fb" 1253 | dependencies = [ 1254 | "arrayref", 1255 | "num-derive", 1256 | "num-traits", 1257 | "num_enum", 1258 | "solana-program", 1259 | "thiserror", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "subtle" 1264 | version = "2.4.1" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1267 | 1268 | [[package]] 1269 | name = "syn" 1270 | version = "1.0.98" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" 1273 | dependencies = [ 1274 | "proc-macro2", 1275 | "quote", 1276 | "unicode-ident", 1277 | ] 1278 | 1279 | [[package]] 1280 | name = "termcolor" 1281 | version = "1.1.3" 1282 | source = "registry+https://github.com/rust-lang/crates.io-index" 1283 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" 1284 | dependencies = [ 1285 | "winapi-util", 1286 | ] 1287 | 1288 | [[package]] 1289 | name = "thiserror" 1290 | version = "1.0.31" 1291 | source = "registry+https://github.com/rust-lang/crates.io-index" 1292 | checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" 1293 | dependencies = [ 1294 | "thiserror-impl", 1295 | ] 1296 | 1297 | [[package]] 1298 | name = "thiserror-impl" 1299 | version = "1.0.31" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" 1302 | dependencies = [ 1303 | "proc-macro2", 1304 | "quote", 1305 | "syn", 1306 | ] 1307 | 1308 | [[package]] 1309 | name = "toml" 1310 | version = "0.5.9" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" 1313 | dependencies = [ 1314 | "serde", 1315 | ] 1316 | 1317 | [[package]] 1318 | name = "typenum" 1319 | version = "1.15.0" 1320 | source = "registry+https://github.com/rust-lang/crates.io-index" 1321 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1322 | 1323 | [[package]] 1324 | name = "unicode-ident" 1325 | version = "1.0.2" 1326 | source = "registry+https://github.com/rust-lang/crates.io-index" 1327 | checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" 1328 | 1329 | [[package]] 1330 | name = "unicode-segmentation" 1331 | version = "1.9.0" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 1334 | 1335 | [[package]] 1336 | name = "version_check" 1337 | version = "0.9.4" 1338 | source = "registry+https://github.com/rust-lang/crates.io-index" 1339 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1340 | 1341 | [[package]] 1342 | name = "wasi" 1343 | version = "0.9.0+wasi-snapshot-preview1" 1344 | source = "registry+https://github.com/rust-lang/crates.io-index" 1345 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 1346 | 1347 | [[package]] 1348 | name = "wasi" 1349 | version = "0.11.0+wasi-snapshot-preview1" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1352 | 1353 | [[package]] 1354 | name = "wasm-bindgen" 1355 | version = "0.2.82" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" 1358 | dependencies = [ 1359 | "cfg-if", 1360 | "wasm-bindgen-macro", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "wasm-bindgen-backend" 1365 | version = "0.2.82" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" 1368 | dependencies = [ 1369 | "bumpalo", 1370 | "log", 1371 | "once_cell", 1372 | "proc-macro2", 1373 | "quote", 1374 | "syn", 1375 | "wasm-bindgen-shared", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "wasm-bindgen-macro" 1380 | version = "0.2.82" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" 1383 | dependencies = [ 1384 | "quote", 1385 | "wasm-bindgen-macro-support", 1386 | ] 1387 | 1388 | [[package]] 1389 | name = "wasm-bindgen-macro-support" 1390 | version = "0.2.82" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" 1393 | dependencies = [ 1394 | "proc-macro2", 1395 | "quote", 1396 | "syn", 1397 | "wasm-bindgen-backend", 1398 | "wasm-bindgen-shared", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "wasm-bindgen-shared" 1403 | version = "0.2.82" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" 1406 | 1407 | [[package]] 1408 | name = "web-sys" 1409 | version = "0.3.59" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" 1412 | dependencies = [ 1413 | "js-sys", 1414 | "wasm-bindgen", 1415 | ] 1416 | 1417 | [[package]] 1418 | name = "winapi" 1419 | version = "0.3.9" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1422 | dependencies = [ 1423 | "winapi-i686-pc-windows-gnu", 1424 | "winapi-x86_64-pc-windows-gnu", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "winapi-i686-pc-windows-gnu" 1429 | version = "0.4.0" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1432 | 1433 | [[package]] 1434 | name = "winapi-util" 1435 | version = "0.1.5" 1436 | source = "registry+https://github.com/rust-lang/crates.io-index" 1437 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" 1438 | dependencies = [ 1439 | "winapi", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "winapi-x86_64-pc-windows-gnu" 1444 | version = "0.4.0" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1447 | 1448 | [[package]] 1449 | name = "yansi" 1450 | version = "0.5.1" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" 1453 | 1454 | [[package]] 1455 | name = "zeroize" 1456 | version = "1.3.0" 1457 | source = "registry+https://github.com/rust-lang/crates.io-index" 1458 | checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" 1459 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = [ 3 | "programs/*" 4 | ] 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NFT Breeding Program 2 | 3 | > #### Prerequisite: What is Metaplex Standard? 4 | > > 5 | > ![](https://i.imgur.com/yeO8vDC.png) 6 | > image from [Metaplex docs](https://docs.metaplex.com/programs/token-metadata/accounts) 7 | 8 | ![](https://hackmd.io/_uploads/H1djPylTq.png) 9 | 10 | ## 1. Initialize 11 | 12 | ![](https://hackmd.io/_uploads/ry604xgpq.png) 13 | 14 | - Store metaplex NFT attributes on chain 15 | - Breeding Metadata 16 | - **Hash** 17 | - **Generation** 18 | - **Name** 19 | - **Metaplex Mint** 20 | - ParentA 21 | - ParentB 22 | - ... 23 | - AttributeA 24 | - AttributeB 25 | - ... 26 | - Initialization is **only** for genesis (Generation 0) 27 | - Change Upgrade Authority of NFT to Breeding PDA signer so that the used NFT can be burnt by Breeding program 28 | 29 | ## 2. Compute New Data 30 | 31 | ![](https://hackmd.io/_uploads/S1k-rex6q.png) 32 | 33 | - Customizable Breeding Logic with `compute` interface 34 | - **Write attributes to `BreedingMeta` (PDA)** 35 | 36 | ## 3. Mint Child NFT 37 | 38 | ![](https://hackmd.io/_uploads/SJA7rlgpc.png) 39 | 40 | - **Write Metaplex metadata (without URI)** 41 | - Transfer upgrade authority to Breeding program PDA Signer 42 | - Burn Parent NFTs(optional) 43 | - Read attributes (off-chain) 44 | - Upload image to web3 storage (off-chain) 45 | 46 | ## 4. Update URI of child NFT 47 | 48 | ![](https://hackmd.io/_uploads/B1ONSgl6q.png) 49 | 50 | - Update URI in Metaplex metadata 51 | -------------------------------------------------------------------------------- /migration/compute.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { PublicKey, Connection, Keypair } from "@solana/web3.js"; 3 | import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; 4 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 5 | import { getAccount } from "@solana/spl-token"; 6 | import { assert } from "chai"; 7 | import * as nftBreedingSDK from "../ts" 8 | import {parentAMint, parentAUriPath, parentBMint, parentBUriPath, childMint, childUri, connection} from "./setting" 9 | 10 | describe("NFT Breeding", () => { 11 | const options = anchor.AnchorProvider.defaultOptions(); 12 | const wallet = NodeWallet.local(); 13 | const provider = new anchor.AnchorProvider(connection, wallet, options); 14 | 15 | anchor.setProvider(provider); 16 | const nftBreedingProgram = new anchor.Program( 17 | nftBreedingIDL, 18 | nftBreedingSDK.NFT_BREEDING_PROGRAM_ID, 19 | provider 20 | ); 21 | 22 | let parentAAttributes: string[] = []; 23 | let parentBAttributes: string[] = []; 24 | 25 | it("Read token metadata",async () => { 26 | parentAAttributes = nftBreedingSDK.readAttrsFromUri(parentAUriPath); 27 | parentBAttributes = nftBreedingSDK.readAttrsFromUri(parentBUriPath); 28 | console.log("parent A attributes:\n",parentAAttributes); 29 | console.log("parent B attributes:\n",parentBAttributes); 30 | }); 31 | 32 | it("Compute", async()=>{ 33 | const conputeTxn = await nftBreedingSDK.computeTxn(wallet.publicKey, parentAMint, parentBMint, childMint.publicKey, provider); 34 | 35 | conputeTxn.feePayer = wallet.publicKey; 36 | conputeTxn.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash; 37 | console.log(conputeTxn.serializeMessage().toString("base64")); 38 | 39 | const result = await provider.sendAndConfirm(conputeTxn, [wallet.payer, childMint]); 40 | console.log("compute txn:", result); 41 | 42 | console.log("\nChild:") 43 | const childBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByParent(parentAMint ,parentBMint, provider); 44 | console.log(childBreedingMeta) 45 | console.log("attributes:"); 46 | // @ts-ignore 47 | childBreedingMeta?.account.attributes.forEach((trait)=>{ 48 | console.log(Buffer.from(trait).toString("utf-8")) 49 | }); 50 | }); 51 | }); -------------------------------------------------------------------------------- /migration/initialize.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { PublicKey, Connection, Keypair } from "@solana/web3.js"; 3 | import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; 4 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 5 | import { getAccount } from "@solana/spl-token"; 6 | import { assert } from "chai"; 7 | import * as nftBreedingSDK from "../ts" 8 | import {parentAMint, parentAUriPath, parentBMint, parentBUriPath, childMint, childUri, connection, collectionName, collectionSymbol} from "./setting" 9 | 10 | describe("NFT Breeding", () => { 11 | const options = anchor.AnchorProvider.defaultOptions(); 12 | const wallet = NodeWallet.local(); 13 | const provider = new anchor.AnchorProvider(connection, wallet, options); 14 | 15 | anchor.setProvider(provider); 16 | const nftBreedingProgram = new anchor.Program( 17 | nftBreedingIDL, 18 | nftBreedingSDK.NFT_BREEDING_PROGRAM_ID, 19 | provider 20 | ); 21 | 22 | let parentAAttributes: string[] = []; 23 | let parentBAttributes: string[] = []; 24 | 25 | it("Read token metadata",async () => { 26 | parentAAttributes = nftBreedingSDK.readAttrsFromUri(parentAUriPath); 27 | parentBAttributes = nftBreedingSDK.readAttrsFromUri(parentBUriPath); 28 | console.log("parent A attributes:\n",parentAAttributes); 29 | console.log("parent B attributes:\n",parentBAttributes); 30 | }); 31 | 32 | it("Initialize", async()=>{ 33 | // initialize parent A 34 | const initializeATxn = await nftBreedingSDK.initializeTxn(wallet.publicKey, parentAMint,collectionName, collectionSymbol, parentAAttributes, provider); 35 | 36 | initializeATxn.feePayer = wallet.publicKey; 37 | initializeATxn.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash; 38 | console.log(initializeATxn.serializeMessage().toString("base64")); 39 | 40 | const resultA = await provider.sendAndConfirm(initializeATxn); 41 | console.log("initialize parent A txn:", resultA); 42 | 43 | // initialize parent B 44 | const initializeBTxn = await nftBreedingSDK.initializeTxn(wallet.publicKey, parentBMint,collectionName,collectionSymbol, parentBAttributes, provider); 45 | 46 | initializeBTxn.feePayer = wallet.publicKey; 47 | initializeBTxn.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash; 48 | console.log(initializeBTxn.serializeMessage().toString("base64")); 49 | 50 | const resultB = await provider.sendAndConfirm(initializeBTxn); 51 | console.log("initialize parent B txn:", resultB); 52 | 53 | 54 | console.log("\n===============\n") 55 | 56 | console.log("Parent A:") 57 | const parentABreedingMeta = await nftBreedingSDK.fetchBreedingMetaByMint(parentAMint, provider); 58 | console.log(parentABreedingMeta) 59 | console.log("attributes:"); 60 | // @ts-ignore 61 | parentABreedingMeta?.account.attributes.forEach((trait)=>{ 62 | console.log(Buffer.from(trait).toString("utf-8")) 63 | }) 64 | 65 | console.log("\nParent B:") 66 | const parentBBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByMint(parentBMint, provider); 67 | console.log(parentBBreedingMeta) 68 | console.log("attributes:"); 69 | // @ts-ignore 70 | parentBBreedingMeta?.account.attributes.forEach((trait)=>{ 71 | console.log(Buffer.from(trait).toString("utf-8")) 72 | }) 73 | }); 74 | }); -------------------------------------------------------------------------------- /migration/mintChild.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { PublicKey, Connection, Keypair } from "@solana/web3.js"; 3 | import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; 4 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 5 | import { getAccount } from "@solana/spl-token"; 6 | import { assert } from "chai"; 7 | import * as nftBreedingSDK from "../ts" 8 | import {parentAMint, parentAUriPath, parentBMint, parentBUriPath, childMint, childUri, connection} from "./setting" 9 | 10 | describe("NFT Breeding", () => { 11 | const options = anchor.AnchorProvider.defaultOptions(); 12 | const wallet = NodeWallet.local(); 13 | const provider = new anchor.AnchorProvider(connection, wallet, options); 14 | 15 | anchor.setProvider(provider); 16 | const nftBreedingProgram = new anchor.Program( 17 | nftBreedingIDL, 18 | nftBreedingSDK.NFT_BREEDING_PROGRAM_ID, 19 | provider 20 | ); 21 | 22 | let parentAAttributes: string[] = []; 23 | let parentBAttributes: string[] = []; 24 | 25 | it("Mint Child", async()=>{ 26 | // if you run it second time childMint might be different, 27 | // use fetch to get the key which is written in BreedingMeta account 28 | const childBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByParent(parentAMint ,parentBMint, provider); 29 | const _childMint = childBreedingMeta!.account.mint; 30 | 31 | const mintChildTxn = await nftBreedingSDK.mintChildTxn(wallet.publicKey, _childMint, parentAMint, parentBMint, provider); 32 | mintChildTxn.feePayer = wallet.publicKey; 33 | mintChildTxn.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash; 34 | console.log(mintChildTxn.serializeMessage().toString("base64")); 35 | 36 | // const result = await provider.sendAndConfirm(mintChildTxn, [wallet.payer]); 37 | // console.log("mint child txn:", result); 38 | }); 39 | }); -------------------------------------------------------------------------------- /migration/setting.ts: -------------------------------------------------------------------------------- 1 | import { Connection, Commitment, PublicKey, Keypair } from "@solana/web3.js"; 2 | 3 | // Initialize setting 4 | // SolMeet DAO#4 5 | export const parentAMint = new PublicKey( 6 | "B3YyjQboa94cC8FpLJvA3tggTGVkWj7U7wKChGH8n67S" 7 | ); 8 | export const parentAUri = "https://arweave.net/UNvkUJj3uNU9rRxGrp5om2JyC0QDW-DCZkXB4Q427gs"; 9 | export const parentAUriPath = "./uri/parentAUri.json" 10 | 11 | // SolMeet DAO#5 12 | export const parentBMint = new PublicKey( 13 | "FWF28SJuWHnyRKkLKk7pt5umsw86tcPmzVXzsb2AB5dQ" 14 | ); 15 | export const parentBUri = "https://arweave.net/V0_nkGdRNEdggue1B-w9jdtqVvs1uVLkPPZjjYs6n3s"; 16 | export const parentBUriPath = "./uri/parentBUri.json" 17 | 18 | export const childMint = Keypair.generate(); 19 | export const childUri = "solmeet"; 20 | 21 | export const collectionName = "SolMeet DAO"; 22 | export const collectionSymbol = "SMD"; 23 | 24 | // Configure connection 25 | export const commitment: Commitment = "processed"; 26 | 27 | // ENDPOINT: epoch mainnet fork 28 | export const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { 29 | commitment: "confirmed", 30 | wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", 31 | }); -------------------------------------------------------------------------------- /migration/updateUri.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { PublicKey, Connection, Keypair } from "@solana/web3.js"; 3 | import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; 4 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 5 | import { getAccount } from "@solana/spl-token"; 6 | import { assert } from "chai"; 7 | import * as nftBreedingSDK from "../ts" 8 | import {parentAMint, parentAUriPath, parentBMint, parentBUriPath, childMint, childUri, connection} from "./setting" 9 | 10 | describe("NFT Breeding", () => { 11 | const options = anchor.AnchorProvider.defaultOptions(); 12 | const wallet = NodeWallet.local(); 13 | const provider = new anchor.AnchorProvider(connection, wallet, options); 14 | 15 | anchor.setProvider(provider); 16 | const nftBreedingProgram = new anchor.Program( 17 | nftBreedingIDL, 18 | nftBreedingSDK.NFT_BREEDING_PROGRAM_ID, 19 | provider 20 | ); 21 | 22 | let parentAAttributes: string[] = []; 23 | let parentBAttributes: string[] = []; 24 | 25 | it("Update URI", async()=>{ 26 | const childBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByParent(parentAMint ,parentBMint, provider); 27 | const _childMint = childBreedingMeta!.account.mint; 28 | 29 | const updateUri = await nftBreedingSDK.updateUriTxn(wallet.publicKey, _childMint, childUri, provider); 30 | updateUri.feePayer = wallet.publicKey; 31 | updateUri.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash; 32 | console.log(updateUri.serializeMessage().toString("base64")); 33 | 34 | // const result = await provider.sendAndConfirm(updateUri, [wallet.payer]); 35 | // console.log("update uri txn:", result); 36 | }); 37 | }); -------------------------------------------------------------------------------- /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 | "@solana/spl-token": "^0.2.0" 9 | }, 10 | "devDependencies": { 11 | "@types/bn.js": "^5.1.0", 12 | "@types/chai": "^4.3.0", 13 | "@types/mocha": "^9.0.0", 14 | "chai": "^4.3.4", 15 | "mocha": "^9.0.3", 16 | "prettier": "^2.6.2", 17 | "ts-mocha": "^8.0.0", 18 | "typescript": "^4.3.5" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /programs/nft-breeding/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "nft-breeding" 3 | version = "0.1.0" 4 | description = "Created with Anchor" 5 | edition = "2021" 6 | 7 | [lib] 8 | crate-type = ["cdylib", "lib"] 9 | name = "nft_breeding" 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 = "0.24.2" 23 | anchor-spl = "0.24.2" 24 | mpl-token-metadata = {version = "1.3.3", features = ["no-entrypoint"]} 25 | hex = "0.4.3" -------------------------------------------------------------------------------- /programs/nft-breeding/Xargo.toml: -------------------------------------------------------------------------------- 1 | [target.bpfel-unknown-unknown.dependencies.std] 2 | features = [] 3 | -------------------------------------------------------------------------------- /programs/nft-breeding/src/lib.rs: -------------------------------------------------------------------------------- 1 | use anchor_lang::prelude::*; 2 | use anchor_lang::solana_program::hash::{hash, Hash}; 3 | 4 | use anchor_lang::solana_program::{system_program, sysvar::slot_hashes}; 5 | use anchor_spl::associated_token::get_associated_token_address; 6 | use anchor_spl::token::{ 7 | self, Burn, CloseAccount, InitializeMint, Mint, SetAuthority, Token, TokenAccount, Transfer, 8 | }; 9 | 10 | use anchor_lang::solana_program::program::invoke; 11 | use mpl_token_metadata::state::Creator; 12 | declare_id!("NFTBfAcFhBb8yqNvYiN8RPQfr5KrVuHGK7pj61EiVnZ"); 13 | 14 | #[program] 15 | pub mod nft_breeding { 16 | 17 | use anchor_lang::solana_program::{native_token::Sol, program::invoke_signed}; 18 | use mpl_token_metadata::{instruction::update_metadata_accounts_v2, state::DataV2}; 19 | 20 | use super::*; 21 | 22 | pub fn initialize( 23 | ctx: Context, 24 | bump: u8, 25 | name: Vec, 26 | symbol: Vec, 27 | attributes: Vec>, 28 | ) -> Result<()> { 29 | //generate hash 30 | let mut hash_data: Vec = ctx.accounts.authority.key().to_bytes().clone().to_vec(); 31 | hash_data.append(&mut ctx.accounts.token_mint.key().to_bytes().clone().to_vec()); 32 | hash_data.append(&mut system_program::id().to_bytes().clone().to_vec()); 33 | hash_data.append(&mut system_program::id().to_bytes().clone().to_vec()); 34 | hash_data.append(&mut name.clone()); 35 | hash_data.append(&mut symbol.clone()); 36 | for mut attribute in attributes.clone() { 37 | hash_data.append(&mut attribute); 38 | } 39 | 40 | let hash_value = hash_to_fix_len(&hash_data); 41 | 42 | ctx.accounts.breeding_meta.hash = hash_value; 43 | ctx.accounts.breeding_meta.generation = 0; 44 | ctx.accounts.breeding_meta.authority = ctx.accounts.authority.key().clone(); 45 | ctx.accounts.breeding_meta.mint = ctx.accounts.token_mint.key().clone(); 46 | ctx.accounts.breeding_meta.parent_a = system_program::id(); 47 | ctx.accounts.breeding_meta.parent_b = system_program::id(); 48 | ctx.accounts.breeding_meta.name = name.clone(); 49 | ctx.accounts.breeding_meta.symbol = symbol.clone(); 50 | ctx.accounts.breeding_meta.attributes = attributes.clone(); 51 | ctx.accounts.breeding_meta.breeding = false; 52 | ctx.accounts.breeding_meta.bump = bump; 53 | Ok(()) 54 | } 55 | 56 | pub fn compute(ctx: Context, bump: u8) -> Result<()> { 57 | //decide new attributes 58 | let mut random_seed: Vec = vec![0]; 59 | random_seed.extend_from_slice( 60 | &ctx.accounts 61 | .parent_a_breeding_meta 62 | .to_account_info() 63 | .data 64 | .borrow(), 65 | ); 66 | random_seed.extend_from_slice( 67 | &ctx.accounts 68 | .parent_b_breeding_meta 69 | .to_account_info() 70 | .data 71 | .borrow(), 72 | ); 73 | random_seed.extend_from_slice( 74 | &ctx.accounts 75 | .slot_hashes_account 76 | .to_account_info() 77 | .data 78 | .borrow(), 79 | ); 80 | let random = hash(&random_seed).to_bytes().to_vec(); 81 | let mut new_attributes: Vec> = vec![]; 82 | 83 | // hash length is 32 bytes long 84 | // Support up to 32 attributes in metadata 85 | for index in 0..ctx.accounts.parent_a_breeding_meta.attributes.len() { 86 | if random[index] % 2 == 0 { 87 | new_attributes.push(ctx.accounts.parent_a_breeding_meta.attributes[index].clone()) 88 | } 89 | if random[index] % 2 == 1 { 90 | new_attributes.push(ctx.accounts.parent_b_breeding_meta.attributes[index].clone()) 91 | } 92 | } 93 | 94 | //generate hash 95 | 96 | let mut hash_data: Vec = ctx 97 | .accounts 98 | .parent_a_breeding_meta 99 | .authority 100 | .to_bytes() 101 | .clone() 102 | .to_vec(); 103 | hash_data.append(&mut ctx.accounts.new_token.key().to_bytes().clone().to_vec()); 104 | hash_data.append( 105 | &mut ctx 106 | .accounts 107 | .parent_a_breeding_meta 108 | .mint 109 | .to_bytes() 110 | .clone() 111 | .to_vec(), 112 | ); 113 | hash_data.append( 114 | &mut ctx 115 | .accounts 116 | .parent_b_breeding_meta 117 | .mint 118 | .to_bytes() 119 | .clone() 120 | .to_vec(), 121 | ); 122 | hash_data.append(&mut ctx.accounts.parent_a_breeding_meta.name.clone()); 123 | hash_data.append(&mut ctx.accounts.parent_a_breeding_meta.symbol.clone()); 124 | for mut attribute in new_attributes.clone() { 125 | hash_data.append(&mut attribute); 126 | } 127 | let hash_value = hash_to_fix_len(&hash_data); 128 | let generation = ctx 129 | .accounts 130 | .parent_a_breeding_meta 131 | .generation 132 | .max(ctx.accounts.parent_b_breeding_meta.generation) 133 | .checked_add(1) 134 | .unwrap(); 135 | ctx.accounts.parent_a_breeding_meta.breeding = true; 136 | ctx.accounts.parent_b_breeding_meta.breeding = true; 137 | 138 | ctx.accounts.child_breeding_meta.hash = hash_value.clone(); 139 | ctx.accounts.child_breeding_meta.generation = generation.clone(); 140 | ctx.accounts.child_breeding_meta.mint = ctx.accounts.new_token.key().clone(); 141 | ctx.accounts.child_breeding_meta.authority = 142 | ctx.accounts.parent_a_breeding_meta.authority.clone(); 143 | ctx.accounts.child_breeding_meta.parent_a = 144 | ctx.accounts.parent_a_breeding_meta.mint.clone(); 145 | ctx.accounts.child_breeding_meta.parent_b = 146 | ctx.accounts.parent_b_breeding_meta.mint.clone(); 147 | ctx.accounts.child_breeding_meta.name = ctx.accounts.parent_a_breeding_meta.name.clone(); 148 | ctx.accounts.child_breeding_meta.symbol = ctx.accounts.parent_a_breeding_meta.symbol.clone(); 149 | ctx.accounts.child_breeding_meta.attributes = new_attributes.clone(); 150 | ctx.accounts.child_breeding_meta.breeding = true; 151 | ctx.accounts.child_breeding_meta.bump = bump; 152 | Ok(()) 153 | } 154 | 155 | pub fn mint(ctx: Context) -> Result<()> { 156 | let creators = Creator { 157 | share: 100, 158 | address: ctx.accounts.child_breeding_meta.key(), 159 | verified: false, 160 | }; 161 | let create_metadata_ins = mpl_token_metadata::instruction::create_metadata_accounts( 162 | mpl_token_metadata::ID, 163 | ctx.accounts.new_token_metadata.key(), 164 | ctx.accounts.new_token.key(), 165 | ctx.accounts.payer.key(), 166 | ctx.accounts.payer.key(), 167 | ctx.accounts.child_breeding_meta.key(), 168 | String::from_utf8(ctx.accounts.child_breeding_meta.name.clone()).unwrap(), 169 | String::from_utf8(ctx.accounts.child_breeding_meta.symbol.clone()).unwrap(), 170 | "".to_string(), 171 | Some(vec![creators]), 172 | 0, 173 | false, 174 | true, 175 | ); 176 | invoke(&create_metadata_ins, &ctx.accounts.to_account_infos())?; 177 | let master_edition_ix = mpl_token_metadata::instruction::create_master_edition_v3( 178 | mpl_token_metadata::ID, 179 | ctx.accounts.new_token_master_edition.key(), 180 | ctx.accounts.new_token.key(), 181 | ctx.accounts.child_breeding_meta.key(), 182 | ctx.accounts.payer.key(), 183 | ctx.accounts.new_token_metadata.key(), 184 | ctx.accounts.payer.key(), 185 | None, 186 | ); 187 | invoke_signed( 188 | &master_edition_ix, 189 | &ctx.accounts.to_account_infos(), 190 | &[&[ 191 | b"breeding", 192 | &ctx.accounts.child_breeding_meta.authority.key().to_bytes(), 193 | &ctx.accounts.new_token.key().to_bytes(), 194 | &ctx.accounts.child_breeding_meta.bump.to_le_bytes(), 195 | ]], 196 | )?; 197 | anchor_spl::token::burn(ctx.accounts.burn_parent_a_token_from_owner(), 1)?; 198 | anchor_spl::token::burn(ctx.accounts.burn_parent_b_token_from_owner(), 1)?; 199 | ctx.accounts.child_breeding_meta.breeding = false; 200 | Ok(()) 201 | } 202 | 203 | pub fn update_uri(ctx: Context, uri: String) -> Result<()> { 204 | let creators = Creator { 205 | share: 100, 206 | address: ctx.accounts.breeding_meta.key(), 207 | verified: false, 208 | }; 209 | let update_ix = update_metadata_accounts_v2( 210 | mpl_token_metadata::ID, 211 | ctx.accounts.nft_metadata.key(), 212 | ctx.accounts.breeding_meta.key(), 213 | None, 214 | Some(DataV2 { 215 | name: String::from_utf8(ctx.accounts.breeding_meta.hash.to_vec()).unwrap(), 216 | symbol: "".to_string(), 217 | uri: uri, 218 | seller_fee_basis_points: 0, 219 | collection: None, 220 | creators: Some(vec![creators]), 221 | uses: None, 222 | }), 223 | Some(false), 224 | Some(true), 225 | ); 226 | invoke_signed( 227 | &update_ix, 228 | &ctx.accounts.to_account_infos(), 229 | &[&[ 230 | b"breeding", 231 | &ctx.accounts.breeding_meta.authority.key().to_bytes(), 232 | &ctx.accounts.nft_mint.key().to_bytes(), 233 | &ctx.accounts.breeding_meta.bump.to_le_bytes(), 234 | ]], 235 | )?; 236 | Ok(()) 237 | } 238 | } 239 | 240 | #[derive(Accounts)] 241 | pub struct Initialize<'info> { 242 | #[account(mut)] 243 | pub authority: Signer<'info>, 244 | pub token_mint: Box>, 245 | /// CHECK: safe 246 | pub token_metadata: AccountInfo<'info>, 247 | #[account( 248 | init, 249 | seeds = [b"breeding".as_ref(),&authority.key().as_ref(), &token_mint.key().as_ref()], 250 | bump, 251 | payer = authority, 252 | space = 1000 253 | )] 254 | pub breeding_meta: Account<'info, BreedingMeta>, 255 | 256 | pub system_program: Program<'info, System>, 257 | } 258 | 259 | #[derive(Accounts)] 260 | pub struct Compute<'info> { 261 | #[account(mut)] 262 | pub payer: Signer<'info>, 263 | #[account(mut)] 264 | pub new_token: Box>, 265 | #[account( 266 | init, 267 | seeds = [b"breeding".as_ref(),&parent_a_breeding_meta.authority.key().as_ref(), &new_token.key().as_ref()], 268 | bump, 269 | payer = payer, 270 | space = 1000 271 | )] 272 | pub child_breeding_meta: Account<'info, BreedingMeta>, 273 | #[account( 274 | constraint = parent_a_token_account.owner == payer.key(), 275 | constraint = parent_a_token_account.mint == parent_a_breeding_meta.mint, 276 | constraint = parent_a_token_account.amount > 0, 277 | )] 278 | pub parent_a_token_account: Box>, 279 | #[account(mut, 280 | constraint = parent_a_breeding_meta.authority == parent_b_breeding_meta.authority, 281 | constraint = parent_a_breeding_meta.breeding == false, 282 | constraint = parent_a_breeding_meta.name == parent_b_breeding_meta.name, 283 | constraint = parent_a_breeding_meta.symbol == parent_b_breeding_meta.symbol 284 | )] 285 | pub parent_a_breeding_meta: Account<'info, BreedingMeta>, 286 | #[account( 287 | constraint = parent_b_token_account.owner == payer.key(), 288 | constraint = parent_b_token_account.mint == parent_b_breeding_meta.mint, 289 | constraint = parent_b_token_account.amount > 0 290 | )] 291 | pub parent_b_token_account: Box>, 292 | #[account(mut, 293 | constraint = parent_b_breeding_meta.breeding == false 294 | )] 295 | pub parent_b_breeding_meta: Account<'info, BreedingMeta>, 296 | pub system_program: Program<'info, System>, 297 | /// CHECK: safe 298 | #[account( 299 | constraint = slot_hashes_account.key() == slot_hashes::id() 300 | )] 301 | pub slot_hashes_account: AccountInfo<'info>, 302 | } 303 | #[derive(Accounts)] 304 | pub struct MintChild<'info> { 305 | #[account(mut)] 306 | pub payer: Signer<'info>, 307 | #[account(mut)] 308 | pub new_token: Box>, 309 | /// CHECK: safe 310 | #[account(mut)] 311 | pub new_token_metadata: AccountInfo<'info>, 312 | /// CHECK: safe 313 | #[account(mut)] 314 | pub new_token_master_edition: AccountInfo<'info>, 315 | #[account(mut)] 316 | pub child_breeding_meta: Account<'info, BreedingMeta>, 317 | #[account(mut)] 318 | pub parent_a_token_account: Box>, 319 | #[account(mut)] 320 | pub parent_a_token_mint: Box>, 321 | #[account(mut)] 322 | pub parent_b_token_account: Box>, 323 | #[account(mut)] 324 | pub parent_b_token_mint: Box>, 325 | pub rent: Sysvar<'info, Rent>, 326 | /// CHECK: safe 327 | pub token_program: AccountInfo<'info>, 328 | /// CHECK: safe 329 | pub metadata_program: AccountInfo<'info>, 330 | pub system_program: Program<'info, System>, 331 | } 332 | impl<'info> MintChild<'info> { 333 | fn burn_parent_a_token_from_owner(&self) -> CpiContext<'_, '_, '_, 'info, Burn<'info>> { 334 | let cpi_accounts = Burn { 335 | mint: self.parent_a_token_mint.to_account_info().clone(), 336 | from: self.parent_a_token_account.to_account_info().clone(), 337 | authority: self.payer.to_account_info().clone(), 338 | }; 339 | CpiContext::new(self.token_program.clone(), cpi_accounts) 340 | } 341 | fn burn_parent_b_token_from_owner(&self) -> CpiContext<'_, '_, '_, 'info, Burn<'info>> { 342 | let cpi_accounts = Burn { 343 | mint: self.parent_b_token_mint.to_account_info().clone(), 344 | from: self.parent_b_token_account.to_account_info().clone(), 345 | authority: self.payer.to_account_info().clone(), 346 | }; 347 | CpiContext::new(self.token_program.clone(), cpi_accounts) 348 | } 349 | } 350 | #[derive(Accounts)] 351 | pub struct UpdateUri<'info> { 352 | #[account(mut)] 353 | pub owner: Signer<'info>, 354 | #[account(mut, 355 | constraint = breeding_meta.mint == nft_account.mint, 356 | )] 357 | pub breeding_meta: Account<'info, BreedingMeta>, 358 | #[account(mut, 359 | constraint = owner.key() == nft_account.owner, 360 | constraint = nft_account.amount > 0 361 | )] 362 | pub nft_account: Account<'info, TokenAccount>, 363 | pub nft_mint: Account<'info, Mint>, 364 | /// CHECK: safe 365 | #[account(mut)] 366 | pub nft_metadata: AccountInfo<'info>, 367 | /// CHECK: safe 368 | pub metadata_program: AccountInfo<'info>, 369 | } 370 | #[account] 371 | pub struct BreedingMeta { 372 | pub hash: [u8; 32], 373 | pub generation: u8, 374 | pub mint: Pubkey, 375 | pub authority: Pubkey, 376 | pub parent_a: Pubkey, 377 | pub parent_b: Pubkey, 378 | pub name: Vec, 379 | pub symbol: Vec, 380 | pub attributes: Vec>, 381 | pub breeding: bool, 382 | pub bump: u8, 383 | } 384 | 385 | pub fn hash_to_fix_len(hash_data: &Vec) -> [u8; 32] { 386 | let encoded = hex::encode(hash(hash_data)); 387 | let src = encoded.as_bytes(); 388 | let mut hash_value = [0u8; 32]; 389 | hash_value[..].copy_from_slice(&src[..32]); 390 | hash_value 391 | } 392 | -------------------------------------------------------------------------------- /tests/nft-breeding.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { PublicKey, Connection, Keypair } from "@solana/web3.js"; 3 | import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; 4 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 5 | import { getAccount } from "@solana/spl-token"; 6 | import { assert } from "chai"; 7 | import * as nftBreedingSDK from "../ts"; 8 | 9 | describe("NFT Breeding", () => { 10 | const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { 11 | commitment: "confirmed", 12 | wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", 13 | }); 14 | 15 | const options = anchor.AnchorProvider.defaultOptions(); 16 | const wallet = NodeWallet.local(); 17 | const provider = new anchor.AnchorProvider(connection, wallet, options); 18 | 19 | anchor.setProvider(provider); 20 | const nftBreedingProgram = new anchor.Program( 21 | nftBreedingIDL, 22 | nftBreedingSDK.NFT_BREEDING_PROGRAM_ID, 23 | provider, 24 | ); 25 | 26 | // SolMeet DAO#4 27 | const parentAMint = new PublicKey( 28 | "B3YyjQboa94cC8FpLJvA3tggTGVkWj7U7wKChGH8n67S", 29 | ); 30 | const parentAUri = 31 | "https://arweave.net/UNvkUJj3uNU9rRxGrp5om2JyC0QDW-DCZkXB4Q427gs"; 32 | const parentAUriPath = "./uri/parentAUri.json"; 33 | let parentAAttributes: string[] = []; 34 | 35 | // SolMeet DAO#5 36 | const parentBMint = new PublicKey( 37 | "FWF28SJuWHnyRKkLKk7pt5umsw86tcPmzVXzsb2AB5dQ", 38 | ); 39 | const parentBUri = 40 | "https://arweave.net/V0_nkGdRNEdggue1B-w9jdtqVvs1uVLkPPZjjYs6n3s"; 41 | const parentBUriPath = "./uri/parentBUri.json"; 42 | let parentBAttributes: string[] = []; 43 | 44 | const childMint = Keypair.generate(); 45 | const childUri = 46 | "https://arweave.net/Uugbviekk9LERxdcG-WSfiOja4hKe1wgJekPNLoL9Hk"; 47 | 48 | const collectionName = "SolMeet DAO"; 49 | const collectionSymbol = "SMD"; 50 | it("Read token metadata", async () => { 51 | parentAAttributes = nftBreedingSDK.readAttrsFromUri(parentAUriPath); 52 | parentBAttributes = nftBreedingSDK.readAttrsFromUri(parentBUriPath); 53 | console.log("parent A attributes:\n", parentAAttributes); 54 | console.log("parent B attributes:\n", parentBAttributes); 55 | }); 56 | 57 | it("Initialize", async () => { 58 | // initialize parent A 59 | const initializeATxn = await nftBreedingSDK.initializeTxn( 60 | wallet.publicKey, 61 | parentAMint, 62 | collectionName, 63 | collectionSymbol, 64 | parentAAttributes, 65 | provider, 66 | ); 67 | 68 | initializeATxn.feePayer = wallet.publicKey; 69 | initializeATxn.recentBlockhash = ( 70 | await provider.connection.getLatestBlockhash() 71 | ).blockhash; 72 | console.log(initializeATxn.serializeMessage().toString("base64")); 73 | 74 | // const resultA = await provider.sendAndConfirm(initializeATxn); 75 | // console.log("initialize parent A txn:", resultA); 76 | 77 | // initialize parent B 78 | const initializeBTxn = await nftBreedingSDK.initializeTxn( 79 | wallet.publicKey, 80 | parentBMint, 81 | collectionName, 82 | collectionSymbol, 83 | parentBAttributes, 84 | provider, 85 | ); 86 | 87 | initializeBTxn.feePayer = wallet.publicKey; 88 | initializeBTxn.recentBlockhash = ( 89 | await provider.connection.getLatestBlockhash() 90 | ).blockhash; 91 | console.log(initializeBTxn.serializeMessage().toString("base64")); 92 | 93 | // const resultB = await provider.sendAndConfirm(initializeBTxn); 94 | // console.log("initialize parent B txn:", resultB); 95 | 96 | console.log("\n===============\n"); 97 | 98 | console.log("Parent A:"); 99 | const parentABreedingMeta = await nftBreedingSDK.fetchBreedingMetaByMint( 100 | parentAMint, 101 | provider, 102 | ); 103 | console.log(parentABreedingMeta); 104 | console.log("attributes:"); 105 | // @ts-ignore 106 | parentABreedingMeta?.account.attributes.forEach((trait) => { 107 | console.log(Buffer.from(trait).toString("utf-8")); 108 | }); 109 | 110 | console.log("\nParent B:"); 111 | const parentBBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByMint( 112 | parentBMint, 113 | provider, 114 | ); 115 | console.log(parentBBreedingMeta); 116 | console.log("attributes:"); 117 | // @ts-ignore 118 | parentBBreedingMeta?.account.attributes.forEach((trait) => { 119 | console.log(Buffer.from(trait).toString("utf-8")); 120 | }); 121 | }); 122 | 123 | it("Compute", async () => { 124 | const conputeTxn = await nftBreedingSDK.computeTxn( 125 | wallet.publicKey, 126 | parentAMint, 127 | parentBMint, 128 | childMint.publicKey, 129 | provider, 130 | ); 131 | 132 | conputeTxn.feePayer = wallet.publicKey; 133 | conputeTxn.recentBlockhash = ( 134 | await provider.connection.getLatestBlockhash() 135 | ).blockhash; 136 | console.log(conputeTxn.serializeMessage().toString("base64")); 137 | 138 | // const result = await provider.sendAndConfirm(conputeTxn, [wallet.payer, childMint]); 139 | // console.log("compute txn:", result); 140 | 141 | console.log("\nChild:"); 142 | const childBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByParent( 143 | parentAMint, 144 | parentBMint, 145 | provider, 146 | ); 147 | console.log(childBreedingMeta); 148 | console.log("attributes:"); 149 | // @ts-ignore 150 | childBreedingMeta?.account.attributes.forEach((trait) => { 151 | console.log(Buffer.from(trait).toString("utf-8")); 152 | }); 153 | }); 154 | 155 | it("Mint Child", async () => { 156 | // if you run it second time childMint might be different, 157 | // use fetch to get the key which is written in BreedingMeta account 158 | const childBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByParent( 159 | parentAMint, 160 | parentBMint, 161 | provider, 162 | ); 163 | const _childMint = childBreedingMeta.account.mint; 164 | 165 | const mintChildTxn = await nftBreedingSDK.mintChildTxn( 166 | wallet.publicKey, 167 | _childMint, 168 | parentAMint, 169 | parentBMint, 170 | provider, 171 | ); 172 | mintChildTxn.feePayer = wallet.publicKey; 173 | mintChildTxn.recentBlockhash = ( 174 | await provider.connection.getLatestBlockhash() 175 | ).blockhash; 176 | console.log(mintChildTxn.serializeMessage().toString("base64")); 177 | 178 | // const result = await provider.sendAndConfirm(mintChildTxn, [wallet.payer]); 179 | // console.log("mint child txn:", result); 180 | }); 181 | 182 | it("Update URI", async () => { 183 | const childBreedingMeta = await nftBreedingSDK.fetchBreedingMetaByParent( 184 | parentAMint, 185 | parentBMint, 186 | provider, 187 | ); 188 | const _childMint = childBreedingMeta.account.mint; 189 | 190 | const updateUri = await nftBreedingSDK.updateUriTxn( 191 | wallet.publicKey, 192 | _childMint, 193 | childUri, 194 | provider, 195 | ); 196 | updateUri.feePayer = wallet.publicKey; 197 | updateUri.recentBlockhash = ( 198 | await provider.connection.getLatestBlockhash() 199 | ).blockhash; 200 | console.log(updateUri.serializeMessage().toString("base64")); 201 | 202 | // const result = await provider.sendAndConfirm(updateUri, [wallet.payer]); 203 | // console.log("update uri txn:", result); 204 | }); 205 | }); 206 | -------------------------------------------------------------------------------- /ts/ids.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from "@solana/web3.js"; 2 | 3 | export const NFT_BREEDING_PROGRAM_ID = new PublicKey( 4 | "NFTBfAcFhBb8yqNvYiN8RPQfr5KrVuHGK7pj61EiVnZ" 5 | ); 6 | 7 | export const TOKEN_METADATA_PROGRAM_ID = new PublicKey( 8 | "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s" 9 | ); 10 | 11 | -------------------------------------------------------------------------------- /ts/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./ids"; 2 | export * from "./infos" 3 | export * from "./instruction"; 4 | export * from "./transaction"; 5 | export * from "./utils"; 6 | -------------------------------------------------------------------------------- /ts/infos.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { 3 | PublicKey, 4 | SystemProgram, 5 | Transaction, 6 | MemcmpFilter, 7 | GetProgramAccountsConfig, 8 | DataSizeFilter, 9 | Keypair 10 | } from "@solana/web3.js"; 11 | import { createInitializeMintInstruction, createMint, createMintToInstruction, getAccount, getMinimumBalanceForRentExemptMint, MINT_SIZE, TOKEN_PROGRAM_ID } from "@solana/spl-token"; 12 | import { hex } from "@project-serum/anchor/dist/cjs/utils/bytes"; 13 | import { hash } from "@project-serum/anchor/dist/cjs/utils/sha256"; 14 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 15 | import { 16 | NFT_BREEDING_PROGRAM_ID, 17 | } from "./ids"; 18 | 19 | export async function fetchBreedingMetaByParent( 20 | parentAMint: PublicKey, 21 | parentBMint: PublicKey, 22 | provider: anchor.AnchorProvider 23 | ){ 24 | const nftBreedingProgram = new anchor.Program( 25 | nftBreedingIDL, 26 | NFT_BREEDING_PROGRAM_ID, 27 | provider 28 | ); 29 | 30 | let ParentAMemcmp = { 31 | memcmp: { 32 | offset: 105, // 8 + 32 + 1 + 32 * 2 33 | bytes: parentAMint.toString(), 34 | }, 35 | }; 36 | let ParentBMemcmp = { 37 | memcmp: { 38 | offset: 137, // 8 + 32 + 1 + 32 * 3 39 | bytes: parentBMint.toString(), 40 | }, 41 | }; 42 | 43 | let filter = [ParentAMemcmp, ParentBMemcmp]; 44 | 45 | const breedingMeta = await nftBreedingProgram.account.breedingMeta.all(filter); 46 | if(breedingMeta){ 47 | return breedingMeta[0]; 48 | }else{ 49 | let ParentAMemcmp = { 50 | memcmp: { 51 | offset: 137, // 8 + 32 + 1 + 32 * 3 52 | bytes: parentAMint.toString(), 53 | }, 54 | }; 55 | let ParentBMemcmp = { 56 | memcmp: { 57 | offset: 105, // 8 + 32 + 1 + 32 * 2 58 | bytes: parentBMint.toString(), 59 | }, 60 | }; 61 | filter = [ParentAMemcmp, ParentBMemcmp]; 62 | 63 | const breedingMeta = await nftBreedingProgram.account.breedingMeta.all(filter); 64 | if(breedingMeta){ 65 | return breedingMeta[0]; 66 | }else{ 67 | return null; 68 | } 69 | } 70 | } 71 | 72 | export async function fetchBreedingMetaByMint( 73 | nftMint: PublicKey, 74 | provider: anchor.AnchorProvider 75 | ){ 76 | const nftBreedingProgram = new anchor.Program( 77 | nftBreedingIDL, 78 | NFT_BREEDING_PROGRAM_ID, 79 | provider 80 | ); 81 | 82 | const nftMintMemcmp = { 83 | memcmp: { 84 | offset: 41, // 8 + 32 + 1 85 | bytes: nftMint.toString(), 86 | }, 87 | }; 88 | 89 | const filter = [nftMintMemcmp]; 90 | 91 | const breedingMeta = await nftBreedingProgram.account.breedingMeta.all(filter); 92 | if(breedingMeta){ 93 | return breedingMeta[0]; 94 | }else{ 95 | return null; 96 | } 97 | } -------------------------------------------------------------------------------- /ts/instruction.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { 3 | PublicKey, 4 | SystemProgram, 5 | Transaction, 6 | MemcmpFilter, 7 | GetProgramAccountsConfig, 8 | DataSizeFilter, 9 | } from "@solana/web3.js"; 10 | import { createInitializeMintInstruction, createMint, createMintToInstruction, getAccount, getMinimumBalanceForRentExemptMint, MINT_SIZE, TOKEN_PROGRAM_ID } from "@solana/spl-token"; 11 | import { hex } from "@project-serum/anchor/dist/cjs/utils/bytes"; 12 | import { hash } from "@project-serum/anchor/dist/cjs/utils/sha256"; 13 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 14 | import { 15 | NFT_BREEDING_PROGRAM_ID, TOKEN_METADATA_PROGRAM_ID, 16 | } from "./ids"; 17 | import { createATAWithoutCheckIx, findAssociatedTokenAddress, findBreedingMeta, findMasterEditionAddress, findTokenMetadataAddress } from "./utils"; 18 | 19 | export async function initializeIx( 20 | userKey: PublicKey, 21 | nftMint: PublicKey, 22 | name: string, 23 | symbol: string, 24 | attributes: string[], 25 | provider: anchor.AnchorProvider 26 | ){ 27 | const nftBreedingProgram = new anchor.Program( 28 | nftBreedingIDL, 29 | NFT_BREEDING_PROGRAM_ID, 30 | provider 31 | ); 32 | 33 | const _attributes = attributes.map((trait)=>Buffer.from(trait)); 34 | 35 | const nftMetadata = (await findTokenMetadataAddress(nftMint))[0]; 36 | const [breedingMeta, bump] = await findBreedingMeta(userKey, nftMint); 37 | 38 | const ix = await nftBreedingProgram.methods.initialize(bump,Buffer.from(name),Buffer.from(symbol), _attributes) 39 | .accounts({ 40 | authority: userKey, 41 | tokenMint: nftMint, 42 | tokenMetadata: nftMetadata, 43 | breedingMeta:breedingMeta, 44 | systemProgram: anchor.web3.SystemProgram.programId 45 | }) 46 | .instruction(); 47 | 48 | return ix; 49 | } 50 | 51 | export async function computeIx( 52 | userKey: PublicKey, 53 | parentAMint: PublicKey, 54 | parentBMint: PublicKey, 55 | childMint: PublicKey, 56 | provider: anchor.AnchorProvider 57 | ){ 58 | const nftBreedingProgram = new anchor.Program( 59 | nftBreedingIDL, 60 | NFT_BREEDING_PROGRAM_ID, 61 | provider 62 | ); 63 | 64 | const allIx: anchor.web3.TransactionInstruction[] = []; 65 | 66 | const parentATokenAccount = await findAssociatedTokenAddress(userKey, parentAMint); 67 | const parentBTokenAccount = await findAssociatedTokenAddress(userKey, parentBMint); 68 | 69 | const parentABreedingMetadata = (await findBreedingMeta(userKey, parentAMint))[0]; 70 | const parentBBreedingMetadata = (await findBreedingMeta(userKey, parentBMint))[0]; 71 | 72 | const [childBreedingMeta, bump] = await findBreedingMeta(userKey, childMint); 73 | const createAccountIx = SystemProgram.createAccount({ 74 | fromPubkey: userKey, 75 | newAccountPubkey: childMint, 76 | space: MINT_SIZE, 77 | lamports: await getMinimumBalanceForRentExemptMint(provider.connection), 78 | programId: TOKEN_PROGRAM_ID, 79 | }); 80 | const createInitializeMintIx = createInitializeMintInstruction(childMint, 0, userKey, null, TOKEN_PROGRAM_ID); 81 | 82 | const ComputeIx = await nftBreedingProgram.methods.compute(bump) 83 | .accounts({ 84 | payer: userKey, 85 | newToken: childMint, 86 | childBreedingMeta, 87 | parentATokenAccount, 88 | parentABreedingMeta: parentABreedingMetadata, 89 | parentBTokenAccount, 90 | parentBBreedingMeta: parentBBreedingMetadata, 91 | systemProgram: anchor.web3.SystemProgram.programId, 92 | slotHashesAccount: anchor.web3.SYSVAR_SLOT_HASHES_PUBKEY 93 | }) 94 | .instruction(); 95 | 96 | allIx.push(createAccountIx); 97 | allIx.push(createInitializeMintIx); 98 | allIx.push(ComputeIx); 99 | 100 | return allIx; 101 | } 102 | 103 | export async function mintChildIx( 104 | userKey: PublicKey, 105 | childNftMint: PublicKey, 106 | parentAMint: PublicKey, 107 | parentBMint: PublicKey, 108 | provider: anchor.AnchorProvider 109 | ){ 110 | const nftBreedingProgram = new anchor.Program( 111 | nftBreedingIDL, 112 | NFT_BREEDING_PROGRAM_ID, 113 | provider 114 | ); 115 | const allIx: anchor.web3.TransactionInstruction[] = []; 116 | 117 | const parentATokenAccount = await findAssociatedTokenAddress(userKey, parentAMint); 118 | const parentBTokenAccount = await findAssociatedTokenAddress(userKey, parentBMint); 119 | const childNftTokenAccount = await findAssociatedTokenAddress(userKey, childNftMint); 120 | 121 | const childNftBreedingMetadata = (await findBreedingMeta(userKey, childNftMint))[0]; 122 | const childTokenMetadataAddress = (await findTokenMetadataAddress(childNftMint))[0]; 123 | const childMasterEditionAddress = (await findMasterEditionAddress(childNftMint))[0]; 124 | 125 | 126 | const createAtaIx = await createATAWithoutCheckIx(userKey, childNftMint); 127 | const mintToIx = createMintToInstruction(childNftMint, childNftTokenAccount, userKey, 1); 128 | 129 | const mintChildIx = await nftBreedingProgram.methods.mint() 130 | .accounts({ 131 | payer: userKey, 132 | newToken: childNftMint, 133 | newTokenMetadata: childTokenMetadataAddress, 134 | newTokenMasterEdition: childMasterEditionAddress, 135 | childBreedingMeta: childNftBreedingMetadata, 136 | parentATokenAccount, 137 | parentATokenMint: parentAMint, 138 | parentBTokenAccount, 139 | parentBTokenMint: parentBMint, 140 | rent: anchor.web3.SYSVAR_RENT_PUBKEY, 141 | tokenProgram: TOKEN_PROGRAM_ID, 142 | metadataProgram: TOKEN_METADATA_PROGRAM_ID, 143 | systemProgram: anchor.web3.SystemProgram.programId 144 | }) 145 | .instruction(); 146 | 147 | allIx.push(createAtaIx); 148 | allIx.push(mintToIx); 149 | allIx.push(mintChildIx); 150 | 151 | 152 | return allIx; 153 | } 154 | 155 | export async function updateUriIx( 156 | userKey: PublicKey, 157 | nftMint: PublicKey, 158 | updateUri: string, 159 | provider: anchor.AnchorProvider 160 | ){ 161 | const nftBreedingProgram = new anchor.Program( 162 | nftBreedingIDL, 163 | NFT_BREEDING_PROGRAM_ID, 164 | provider 165 | ); 166 | 167 | const nftBreedingMetadata = (await findBreedingMeta(userKey, nftMint))[0]; 168 | const nftTokenAccount = await findAssociatedTokenAddress(userKey, nftMint); 169 | 170 | const nftMetadata = (await findTokenMetadataAddress(nftMint))[0]; 171 | 172 | const ix = await nftBreedingProgram.methods.updateUri(updateUri) 173 | .accounts({ 174 | owner: userKey, 175 | breedingMeta: nftBreedingMetadata, 176 | nftAccount: nftTokenAccount, 177 | nftMint, 178 | nftMetadata: nftMetadata, 179 | metadataProgram: TOKEN_METADATA_PROGRAM_ID, 180 | }) 181 | .instruction() 182 | 183 | return ix; 184 | } -------------------------------------------------------------------------------- /ts/transaction.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from "@project-serum/anchor"; 2 | import { 3 | PublicKey, 4 | SystemProgram, 5 | Transaction, 6 | MemcmpFilter, 7 | GetProgramAccountsConfig, 8 | DataSizeFilter, 9 | Keypair 10 | } from "@solana/web3.js"; 11 | import { createInitializeMintInstruction, createMint, createMintToInstruction, getAccount, getMinimumBalanceForRentExemptMint, MINT_SIZE, TOKEN_PROGRAM_ID } from "@solana/spl-token"; 12 | import { IDL as nftBreedingIDL } from "../target/types/nft_breeding"; 13 | import { 14 | NFT_BREEDING_PROGRAM_ID, 15 | } from "./ids"; 16 | import * as ixns from "./instruction"; 17 | 18 | export async function initializeTxn( 19 | userKey: PublicKey, 20 | nftMint: PublicKey, 21 | name: string, 22 | symbol: string, 23 | attributes: string[], 24 | provider: anchor.AnchorProvider 25 | ){ 26 | const tx = new Transaction(); 27 | 28 | const initializeIx = await ixns.initializeIx(userKey, nftMint,name,symbol, attributes, provider); 29 | 30 | tx.add(initializeIx); 31 | 32 | return tx; 33 | } 34 | 35 | export async function computeTxn( 36 | userKey: PublicKey, 37 | parentAMint: PublicKey, 38 | parentBMint: PublicKey, 39 | childMint: PublicKey, 40 | provider: anchor.AnchorProvider 41 | ){ 42 | const tx = new Transaction(); 43 | 44 | const computeIx = await ixns.computeIx(userKey, parentAMint, parentBMint, childMint, provider); 45 | 46 | computeIx.forEach((ix)=>{ 47 | tx.add(ix); 48 | }) 49 | 50 | return tx; 51 | } 52 | 53 | export async function mintChildTxn( 54 | userKey: PublicKey, 55 | childNftMint: PublicKey, 56 | parentAMint: PublicKey, 57 | parentBMint: PublicKey, 58 | provider: anchor.AnchorProvider 59 | ){ 60 | const tx = new Transaction(); 61 | 62 | const mintChildIx = await ixns.mintChildIx(userKey, childNftMint, parentAMint, parentBMint, provider); 63 | 64 | mintChildIx.forEach((ix)=>{ 65 | tx.add(ix); 66 | }) 67 | 68 | return tx; 69 | } 70 | 71 | export async function updateUriTxn( 72 | userKey: PublicKey, 73 | nftMint: PublicKey, 74 | updateUri: string, 75 | provider: anchor.AnchorProvider 76 | ){ 77 | const tx = new Transaction(); 78 | 79 | const updateUriIx = await ixns.updateUriIx( 80 | userKey, 81 | nftMint, 82 | updateUri, 83 | provider 84 | ); 85 | 86 | tx.add(updateUriIx); 87 | 88 | return tx; 89 | } -------------------------------------------------------------------------------- /ts/utils.ts: -------------------------------------------------------------------------------- 1 | import { 2 | PublicKey, 3 | Transaction, 4 | TransactionInstruction, 5 | SystemProgram, 6 | Connection, 7 | SYSVAR_RENT_PUBKEY, 8 | Keypair, 9 | sendAndConfirmTransaction, 10 | } from "@solana/web3.js"; 11 | import { 12 | TOKEN_PROGRAM_ID, 13 | ASSOCIATED_TOKEN_PROGRAM_ID, 14 | } from "@solana/spl-token"; 15 | import * as fs from "fs"; 16 | import { AnchorProvider } from "@project-serum/anchor"; 17 | import { NFT_BREEDING_PROGRAM_ID, TOKEN_METADATA_PROGRAM_ID } from "./ids"; 18 | const ATA_INIT_PROGRAM_ID = new PublicKey( 19 | "9tiP8yZcekzfGzSBmp7n9LaDHRjxP2w7wJj8tpPJtfG" 20 | ); 21 | 22 | const BREEDING_SEED = "breeding"; 23 | const PREFIX = "metadata"; 24 | const EDITION = "edition"; 25 | 26 | export async function findAssociatedTokenAddress( 27 | walletAddress: PublicKey, 28 | tokenMintAddress: PublicKey 29 | ): Promise { 30 | return ( 31 | await PublicKey.findProgramAddress( 32 | [ 33 | walletAddress.toBuffer(), 34 | TOKEN_PROGRAM_ID.toBuffer(), 35 | tokenMintAddress.toBuffer(), 36 | ], 37 | ASSOCIATED_TOKEN_PROGRAM_ID 38 | ) 39 | )[0]; 40 | } 41 | 42 | export async function createATAWithoutCheckIx( 43 | wallet: PublicKey, 44 | mint: PublicKey, 45 | payer?: PublicKey 46 | ): Promise { 47 | if (payer === undefined) { 48 | payer = wallet as PublicKey; 49 | } 50 | payer = payer as PublicKey; 51 | const ATA = await findAssociatedTokenAddress(wallet, mint); 52 | const keys = [ 53 | { pubkey: payer, isSigner: true, isWritable: true }, 54 | { pubkey: ATA, isSigner: false, isWritable: true }, 55 | { pubkey: wallet, isSigner: false, isWritable: true }, 56 | { pubkey: mint, isSigner: false, isWritable: false }, 57 | { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, 58 | { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, 59 | { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, 60 | { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, 61 | ]; 62 | return new TransactionInstruction({ 63 | keys, 64 | programId: ATA_INIT_PROGRAM_ID, 65 | }); 66 | } 67 | 68 | export async function findBreedingMeta( 69 | userKey: PublicKey, 70 | nftMint: PublicKey 71 | ){ 72 | return await PublicKey.findProgramAddress( 73 | [ 74 | Buffer.from(BREEDING_SEED), 75 | userKey.toBuffer(), 76 | nftMint.toBuffer(), 77 | ], 78 | NFT_BREEDING_PROGRAM_ID 79 | ) 80 | ; 81 | } 82 | 83 | export async function findTokenMetadataAddress( 84 | nftMint: PublicKey 85 | ){ 86 | const seeds = [ 87 | Buffer.from(PREFIX), 88 | TOKEN_METADATA_PROGRAM_ID.toBuffer(), 89 | nftMint.toBuffer() 90 | ]; 91 | 92 | return await PublicKey.findProgramAddress( 93 | seeds, 94 | TOKEN_METADATA_PROGRAM_ID 95 | ) 96 | ; 97 | } 98 | 99 | export async function findMasterEditionAddress( 100 | nftMint: PublicKey 101 | ){ 102 | const seeds = [ 103 | Buffer.from(PREFIX), 104 | TOKEN_METADATA_PROGRAM_ID.toBuffer(), 105 | nftMint.toBuffer(), 106 | Buffer.from(EDITION) 107 | ]; 108 | 109 | return await PublicKey.findProgramAddress( 110 | seeds, 111 | TOKEN_METADATA_PROGRAM_ID 112 | ) 113 | ; 114 | } 115 | 116 | export function readAttrsFromUri( 117 | path: string, 118 | ): string[] { 119 | const attribute: string[] = []; 120 | 121 | const rawData = fs.readFileSync(path, "utf-8"); 122 | const data: nftMint = JSON.parse(rawData); 123 | data.attributes.forEach((element) => { 124 | attribute.push(element.value); 125 | }); 126 | 127 | return attribute; 128 | } 129 | 130 | interface nftMint { 131 | name: string; 132 | symbol: string; 133 | description: string; 134 | seller_fee_basis_points: string; 135 | external_url: string; 136 | attributes: attribute[]; 137 | collection: collecntion; 138 | properties: properties; 139 | } 140 | 141 | interface attribute { 142 | trait_type: string; 143 | value: string; 144 | } 145 | interface collecntion { 146 | name: string; 147 | family: string; 148 | } 149 | interface properties { 150 | files: file[]; 151 | category: string; 152 | maxSupply: number; 153 | creators: creator; 154 | image: string; 155 | } 156 | interface file { 157 | uri: string; 158 | type: string; 159 | } 160 | interface creator { 161 | address: string; 162 | share: number; 163 | } -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /uri/childUri.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DappioLab/nft-breeding/5d4f26bec2037ba0bb097056ed132d75ab1ba3df/uri/childUri.json -------------------------------------------------------------------------------- /uri/parentAUri.json: -------------------------------------------------------------------------------- 1 | {"name":"SolMeet DAO #4","symbol":"SolMeet","description":"SolMeet DAO","seller_fee_basis_points":100,"external_url":"https://solmeet.dev","attributes":[{"trait_type":"background","value":"bg4"},{"trait_type":"base","value":"base2"},{"trait_type":"clothes","value":"clothes5"},{"trait_type":"faces","value":"face1"},{"trait_type":"hats","value":"hat1"}],"collection":{"name":"SolMeet","family":"DAO"},"properties":{"files":[{"uri":"https://arweave.net/pHIH2hbECfyKev2L04UHVxbX5zNiy2J27CrDM8P0c0c","type":"image/png"}],"category":"image","maxSupply":0,"creators":[{"address":"5AbLuR2nX8RCj9pV4aGXbQmpLojHB2xdyinXNnKBthHa","share":100}]},"image":"https://arweave.net/pHIH2hbECfyKev2L04UHVxbX5zNiy2J27CrDM8P0c0c"} -------------------------------------------------------------------------------- /uri/parentBUri.json: -------------------------------------------------------------------------------- 1 | {"name":"SolMeet DAO #5","symbol":"SolMeet","description":"SolMeet DAO","seller_fee_basis_points":100,"external_url":"https://solmeet.dev","attributes":[{"trait_type":"background","value":"bg5"},{"trait_type":"base","value":"base2"},{"trait_type":"clothes","value":"clothes2"},{"trait_type":"faces","value":"face1"},{"trait_type":"hats","value":"hat5"}],"collection":{"name":"SolMeet","family":"DAO"},"properties":{"files":[{"uri":"https://arweave.net/xwQQp6HmtQBq3oR_-SmETN8sB0EkjOpTgVeflCz9Oj8","type":"image/png"}],"category":"image","maxSupply":0,"creators":[{"address":"5AbLuR2nX8RCj9pV4aGXbQmpLojHB2xdyinXNnKBthHa","share":100}]},"image":"https://arweave.net/xwQQp6HmtQBq3oR_-SmETN8sB0EkjOpTgVeflCz9Oj8"} -------------------------------------------------------------------------------- /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 | "@hapi/hoek@^9.0.0": 34 | version "9.3.0" 35 | resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" 36 | integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== 37 | 38 | "@hapi/topo@^5.0.0": 39 | version "5.1.0" 40 | resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" 41 | integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== 42 | dependencies: 43 | "@hapi/hoek" "^9.0.0" 44 | 45 | "@project-serum/anchor@^0.24.2": 46 | version "0.24.2" 47 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" 48 | integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== 49 | dependencies: 50 | "@project-serum/borsh" "^0.2.5" 51 | "@solana/web3.js" "^1.36.0" 52 | base64-js "^1.5.1" 53 | bn.js "^5.1.2" 54 | bs58 "^4.0.1" 55 | buffer-layout "^1.2.2" 56 | camelcase "^5.3.1" 57 | cross-fetch "^3.1.5" 58 | crypto-hash "^1.3.0" 59 | eventemitter3 "^4.0.7" 60 | js-sha256 "^0.9.0" 61 | pako "^2.0.3" 62 | snake-case "^3.0.4" 63 | toml "^3.0.0" 64 | 65 | "@project-serum/borsh@^0.2.5": 66 | version "0.2.5" 67 | resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" 68 | integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== 69 | dependencies: 70 | bn.js "^5.1.2" 71 | buffer-layout "^1.2.0" 72 | 73 | "@sideway/address@^4.1.3": 74 | version "4.1.4" 75 | resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" 76 | integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== 77 | dependencies: 78 | "@hapi/hoek" "^9.0.0" 79 | 80 | "@sideway/formula@^3.0.0": 81 | version "3.0.0" 82 | resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" 83 | integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== 84 | 85 | "@sideway/pinpoint@^2.0.0": 86 | version "2.0.0" 87 | resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" 88 | integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== 89 | 90 | "@solana/buffer-layout-utils@^0.2.0": 91 | version "0.2.0" 92 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" 93 | integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== 94 | dependencies: 95 | "@solana/buffer-layout" "^4.0.0" 96 | "@solana/web3.js" "^1.32.0" 97 | bigint-buffer "^1.1.5" 98 | bignumber.js "^9.0.1" 99 | 100 | "@solana/buffer-layout@^4.0.0": 101 | version "4.0.0" 102 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734" 103 | integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== 104 | dependencies: 105 | buffer "~6.0.3" 106 | 107 | "@solana/spl-token@^0.2.0": 108 | version "0.2.0" 109 | resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.2.0.tgz#329bb6babb5de0f9c40035ddb1657f01a8347acd" 110 | integrity sha512-RWcn31OXtdqIxmkzQfB2R+WpsJOVS6rKuvpxJFjvik2LyODd+WN58ZP3Rpjpro03fscGAkzlFuP3r42doRJgyQ== 111 | dependencies: 112 | "@solana/buffer-layout" "^4.0.0" 113 | "@solana/buffer-layout-utils" "^0.2.0" 114 | "@solana/web3.js" "^1.32.0" 115 | start-server-and-test "^1.14.0" 116 | 117 | "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0": 118 | version "1.50.1" 119 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.50.1.tgz#dae726a06267d1bcd88b1e3cd8ae44c709302dcf" 120 | integrity sha512-1l9N/nS8pJEA2YibNT8wa072718O0/A1eKWE0+pdWC5wDGQgBNxZSLuv7Cq5Dcn46WsZ5J5ZstK89q8J/ZZaQA== 121 | dependencies: 122 | "@babel/runtime" "^7.12.5" 123 | "@ethersproject/sha2" "^5.5.0" 124 | "@solana/buffer-layout" "^4.0.0" 125 | bigint-buffer "^1.1.5" 126 | bn.js "^5.0.0" 127 | borsh "^0.7.0" 128 | bs58 "^4.0.1" 129 | buffer "6.0.1" 130 | fast-stable-stringify "^1.0.0" 131 | jayson "^3.4.4" 132 | js-sha3 "^0.8.0" 133 | node-fetch "2" 134 | react-native-url-polyfill "^1.3.0" 135 | rpc-websockets "^7.5.0" 136 | secp256k1 "^4.0.2" 137 | superstruct "^0.14.2" 138 | tweetnacl "^1.0.0" 139 | 140 | "@types/bn.js@^5.1.0": 141 | version "5.1.0" 142 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" 143 | integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== 144 | dependencies: 145 | "@types/node" "*" 146 | 147 | "@types/chai@^4.3.0": 148 | version "4.3.1" 149 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" 150 | integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== 151 | 152 | "@types/connect@^3.4.33": 153 | version "3.4.35" 154 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 155 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 156 | dependencies: 157 | "@types/node" "*" 158 | 159 | "@types/express-serve-static-core@^4.17.9": 160 | version "4.17.30" 161 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" 162 | integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== 163 | dependencies: 164 | "@types/node" "*" 165 | "@types/qs" "*" 166 | "@types/range-parser" "*" 167 | 168 | "@types/json5@^0.0.29": 169 | version "0.0.29" 170 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 171 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 172 | 173 | "@types/lodash@^4.14.159": 174 | version "4.14.182" 175 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" 176 | integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== 177 | 178 | "@types/mocha@^9.0.0": 179 | version "9.1.1" 180 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" 181 | integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== 182 | 183 | "@types/node@*": 184 | version "18.6.1" 185 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.1.tgz#828e4785ccca13f44e2fb6852ae0ef11e3e20ba5" 186 | integrity sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg== 187 | 188 | "@types/node@^12.12.54": 189 | version "12.20.55" 190 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" 191 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 192 | 193 | "@types/qs@*": 194 | version "6.9.7" 195 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 196 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 197 | 198 | "@types/range-parser@*": 199 | version "1.2.4" 200 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 201 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 202 | 203 | "@types/ws@^7.4.4": 204 | version "7.4.7" 205 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" 206 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 207 | dependencies: 208 | "@types/node" "*" 209 | 210 | "@ungap/promise-all-settled@1.1.2": 211 | version "1.1.2" 212 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 213 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 214 | 215 | JSONStream@^1.3.5: 216 | version "1.3.5" 217 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 218 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 219 | dependencies: 220 | jsonparse "^1.2.0" 221 | through ">=2.2.7 <3" 222 | 223 | ansi-colors@4.1.1: 224 | version "4.1.1" 225 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 226 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 227 | 228 | ansi-regex@^5.0.1: 229 | version "5.0.1" 230 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 231 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 232 | 233 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 234 | version "4.3.0" 235 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 236 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 237 | dependencies: 238 | color-convert "^2.0.1" 239 | 240 | anymatch@~3.1.2: 241 | version "3.1.2" 242 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 243 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 244 | dependencies: 245 | normalize-path "^3.0.0" 246 | picomatch "^2.0.4" 247 | 248 | argparse@^2.0.1: 249 | version "2.0.1" 250 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 251 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 252 | 253 | arrify@^1.0.0: 254 | version "1.0.1" 255 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 256 | integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== 257 | 258 | assertion-error@^1.1.0: 259 | version "1.1.0" 260 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 261 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 262 | 263 | axios@^0.21.1: 264 | version "0.21.4" 265 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" 266 | integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== 267 | dependencies: 268 | follow-redirects "^1.14.0" 269 | 270 | balanced-match@^1.0.0: 271 | version "1.0.2" 272 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 273 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 274 | 275 | base-x@^3.0.2: 276 | version "3.0.9" 277 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 278 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 279 | dependencies: 280 | safe-buffer "^5.0.1" 281 | 282 | base64-js@^1.3.1, base64-js@^1.5.1: 283 | version "1.5.1" 284 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 285 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 286 | 287 | bigint-buffer@^1.1.5: 288 | version "1.1.5" 289 | resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" 290 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 291 | dependencies: 292 | bindings "^1.3.0" 293 | 294 | bignumber.js@^9.0.1: 295 | version "9.0.2" 296 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" 297 | integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== 298 | 299 | binary-extensions@^2.0.0: 300 | version "2.2.0" 301 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 302 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 303 | 304 | bindings@^1.3.0: 305 | version "1.5.0" 306 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 307 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 308 | dependencies: 309 | file-uri-to-path "1.0.0" 310 | 311 | bluebird@3.7.2: 312 | version "3.7.2" 313 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" 314 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 315 | 316 | bn.js@^4.11.9: 317 | version "4.12.0" 318 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" 319 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== 320 | 321 | bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0: 322 | version "5.2.1" 323 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" 324 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 325 | 326 | borsh@^0.7.0: 327 | version "0.7.0" 328 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" 329 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 330 | dependencies: 331 | bn.js "^5.2.0" 332 | bs58 "^4.0.0" 333 | text-encoding-utf-8 "^1.0.2" 334 | 335 | brace-expansion@^1.1.7: 336 | version "1.1.11" 337 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 338 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 339 | dependencies: 340 | balanced-match "^1.0.0" 341 | concat-map "0.0.1" 342 | 343 | braces@~3.0.2: 344 | version "3.0.2" 345 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 346 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 347 | dependencies: 348 | fill-range "^7.0.1" 349 | 350 | brorand@^1.1.0: 351 | version "1.1.0" 352 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 353 | integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== 354 | 355 | browser-stdout@1.3.1: 356 | version "1.3.1" 357 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 358 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 359 | 360 | bs58@^4.0.0, bs58@^4.0.1: 361 | version "4.0.1" 362 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 363 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 364 | dependencies: 365 | base-x "^3.0.2" 366 | 367 | buffer-from@^1.0.0, buffer-from@^1.1.0: 368 | version "1.1.2" 369 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 370 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 371 | 372 | buffer-layout@^1.2.0, buffer-layout@^1.2.2: 373 | version "1.2.2" 374 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" 375 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 376 | 377 | buffer@6.0.1: 378 | version "6.0.1" 379 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" 380 | integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== 381 | dependencies: 382 | base64-js "^1.3.1" 383 | ieee754 "^1.2.1" 384 | 385 | buffer@^5.4.3: 386 | version "5.7.1" 387 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 388 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 389 | dependencies: 390 | base64-js "^1.3.1" 391 | ieee754 "^1.1.13" 392 | 393 | buffer@~6.0.3: 394 | version "6.0.3" 395 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 396 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 397 | dependencies: 398 | base64-js "^1.3.1" 399 | ieee754 "^1.2.1" 400 | 401 | bufferutil@^4.0.1: 402 | version "4.0.6" 403 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" 404 | integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== 405 | dependencies: 406 | node-gyp-build "^4.3.0" 407 | 408 | camelcase@^5.3.1: 409 | version "5.3.1" 410 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 411 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 412 | 413 | camelcase@^6.0.0: 414 | version "6.3.0" 415 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 416 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 417 | 418 | chai@^4.3.4: 419 | version "4.3.6" 420 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" 421 | integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== 422 | dependencies: 423 | assertion-error "^1.1.0" 424 | check-error "^1.0.2" 425 | deep-eql "^3.0.1" 426 | get-func-name "^2.0.0" 427 | loupe "^2.3.1" 428 | pathval "^1.1.1" 429 | type-detect "^4.0.5" 430 | 431 | chalk@^4.1.0: 432 | version "4.1.2" 433 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 434 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 435 | dependencies: 436 | ansi-styles "^4.1.0" 437 | supports-color "^7.1.0" 438 | 439 | check-error@^1.0.2: 440 | version "1.0.2" 441 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 442 | integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== 443 | 444 | check-more-types@2.24.0: 445 | version "2.24.0" 446 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" 447 | integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== 448 | 449 | chokidar@3.5.3: 450 | version "3.5.3" 451 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 452 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 453 | dependencies: 454 | anymatch "~3.1.2" 455 | braces "~3.0.2" 456 | glob-parent "~5.1.2" 457 | is-binary-path "~2.1.0" 458 | is-glob "~4.0.1" 459 | normalize-path "~3.0.0" 460 | readdirp "~3.6.0" 461 | optionalDependencies: 462 | fsevents "~2.3.2" 463 | 464 | cliui@^7.0.2: 465 | version "7.0.4" 466 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 467 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 468 | dependencies: 469 | string-width "^4.2.0" 470 | strip-ansi "^6.0.0" 471 | wrap-ansi "^7.0.0" 472 | 473 | color-convert@^2.0.1: 474 | version "2.0.1" 475 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 476 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 477 | dependencies: 478 | color-name "~1.1.4" 479 | 480 | color-name@~1.1.4: 481 | version "1.1.4" 482 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 483 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 484 | 485 | commander@^2.20.3: 486 | version "2.20.3" 487 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 488 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 489 | 490 | concat-map@0.0.1: 491 | version "0.0.1" 492 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 493 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 494 | 495 | cross-fetch@^3.1.5: 496 | version "3.1.5" 497 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" 498 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== 499 | dependencies: 500 | node-fetch "2.6.7" 501 | 502 | cross-spawn@^7.0.3: 503 | version "7.0.3" 504 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 505 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 506 | dependencies: 507 | path-key "^3.1.0" 508 | shebang-command "^2.0.0" 509 | which "^2.0.1" 510 | 511 | crypto-hash@^1.3.0: 512 | version "1.3.0" 513 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" 514 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 515 | 516 | debug@4.3.2: 517 | version "4.3.2" 518 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 519 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 520 | dependencies: 521 | ms "2.1.2" 522 | 523 | debug@4.3.3: 524 | version "4.3.3" 525 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" 526 | integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== 527 | dependencies: 528 | ms "2.1.2" 529 | 530 | decamelize@^4.0.0: 531 | version "4.0.0" 532 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 533 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 534 | 535 | deep-eql@^3.0.1: 536 | version "3.0.1" 537 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 538 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 539 | dependencies: 540 | type-detect "^4.0.0" 541 | 542 | delay@^5.0.0: 543 | version "5.0.0" 544 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 545 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 546 | 547 | diff@5.0.0: 548 | version "5.0.0" 549 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 550 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 551 | 552 | diff@^3.1.0: 553 | version "3.5.0" 554 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 555 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 556 | 557 | dot-case@^3.0.4: 558 | version "3.0.4" 559 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" 560 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 561 | dependencies: 562 | no-case "^3.0.4" 563 | tslib "^2.0.3" 564 | 565 | duplexer@~0.1.1: 566 | version "0.1.2" 567 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" 568 | integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== 569 | 570 | elliptic@^6.5.4: 571 | version "6.5.4" 572 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" 573 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== 574 | dependencies: 575 | bn.js "^4.11.9" 576 | brorand "^1.1.0" 577 | hash.js "^1.0.0" 578 | hmac-drbg "^1.0.1" 579 | inherits "^2.0.4" 580 | minimalistic-assert "^1.0.1" 581 | minimalistic-crypto-utils "^1.0.1" 582 | 583 | emoji-regex@^8.0.0: 584 | version "8.0.0" 585 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 586 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 587 | 588 | es6-promise@^4.0.3: 589 | version "4.2.8" 590 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 591 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 592 | 593 | es6-promisify@^5.0.0: 594 | version "5.0.0" 595 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 596 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 597 | dependencies: 598 | es6-promise "^4.0.3" 599 | 600 | escalade@^3.1.1: 601 | version "3.1.1" 602 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 603 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 604 | 605 | escape-string-regexp@4.0.0: 606 | version "4.0.0" 607 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 608 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 609 | 610 | event-stream@=3.3.4: 611 | version "3.3.4" 612 | resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" 613 | integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== 614 | dependencies: 615 | duplexer "~0.1.1" 616 | from "~0" 617 | map-stream "~0.1.0" 618 | pause-stream "0.0.11" 619 | split "0.3" 620 | stream-combiner "~0.0.4" 621 | through "~2.3.1" 622 | 623 | eventemitter3@^4.0.7: 624 | version "4.0.7" 625 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 626 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 627 | 628 | execa@5.1.1: 629 | version "5.1.1" 630 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 631 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 632 | dependencies: 633 | cross-spawn "^7.0.3" 634 | get-stream "^6.0.0" 635 | human-signals "^2.1.0" 636 | is-stream "^2.0.0" 637 | merge-stream "^2.0.0" 638 | npm-run-path "^4.0.1" 639 | onetime "^5.1.2" 640 | signal-exit "^3.0.3" 641 | strip-final-newline "^2.0.0" 642 | 643 | eyes@^0.1.8: 644 | version "0.1.8" 645 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 646 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 647 | 648 | fast-stable-stringify@^1.0.0: 649 | version "1.0.0" 650 | resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" 651 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 652 | 653 | file-uri-to-path@1.0.0: 654 | version "1.0.0" 655 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 656 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 657 | 658 | fill-range@^7.0.1: 659 | version "7.0.1" 660 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 661 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 662 | dependencies: 663 | to-regex-range "^5.0.1" 664 | 665 | find-up@5.0.0: 666 | version "5.0.0" 667 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 668 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 669 | dependencies: 670 | locate-path "^6.0.0" 671 | path-exists "^4.0.0" 672 | 673 | flat@^5.0.2: 674 | version "5.0.2" 675 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 676 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 677 | 678 | follow-redirects@^1.14.0: 679 | version "1.15.1" 680 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" 681 | integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== 682 | 683 | from@~0: 684 | version "0.1.7" 685 | resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" 686 | integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== 687 | 688 | fs.realpath@^1.0.0: 689 | version "1.0.0" 690 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 691 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 692 | 693 | fsevents@~2.3.2: 694 | version "2.3.2" 695 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 696 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 697 | 698 | get-caller-file@^2.0.5: 699 | version "2.0.5" 700 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 701 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 702 | 703 | get-func-name@^2.0.0: 704 | version "2.0.0" 705 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 706 | integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== 707 | 708 | get-stream@^6.0.0: 709 | version "6.0.1" 710 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 711 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 712 | 713 | glob-parent@~5.1.2: 714 | version "5.1.2" 715 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 716 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 717 | dependencies: 718 | is-glob "^4.0.1" 719 | 720 | glob@7.2.0: 721 | version "7.2.0" 722 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 723 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 724 | dependencies: 725 | fs.realpath "^1.0.0" 726 | inflight "^1.0.4" 727 | inherits "2" 728 | minimatch "^3.0.4" 729 | once "^1.3.0" 730 | path-is-absolute "^1.0.0" 731 | 732 | growl@1.10.5: 733 | version "1.10.5" 734 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 735 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 736 | 737 | has-flag@^4.0.0: 738 | version "4.0.0" 739 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 740 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 741 | 742 | hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: 743 | version "1.1.7" 744 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 745 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 746 | dependencies: 747 | inherits "^2.0.3" 748 | minimalistic-assert "^1.0.1" 749 | 750 | he@1.2.0: 751 | version "1.2.0" 752 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 753 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 754 | 755 | hmac-drbg@^1.0.1: 756 | version "1.0.1" 757 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 758 | integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== 759 | dependencies: 760 | hash.js "^1.0.3" 761 | minimalistic-assert "^1.0.0" 762 | minimalistic-crypto-utils "^1.0.1" 763 | 764 | human-signals@^2.1.0: 765 | version "2.1.0" 766 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 767 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 768 | 769 | ieee754@^1.1.13, ieee754@^1.2.1: 770 | version "1.2.1" 771 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 772 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 773 | 774 | inflight@^1.0.4: 775 | version "1.0.6" 776 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 777 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 778 | dependencies: 779 | once "^1.3.0" 780 | wrappy "1" 781 | 782 | inherits@2, inherits@^2.0.3, inherits@^2.0.4: 783 | version "2.0.4" 784 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 785 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 786 | 787 | is-binary-path@~2.1.0: 788 | version "2.1.0" 789 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 790 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 791 | dependencies: 792 | binary-extensions "^2.0.0" 793 | 794 | is-extglob@^2.1.1: 795 | version "2.1.1" 796 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 797 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 798 | 799 | is-fullwidth-code-point@^3.0.0: 800 | version "3.0.0" 801 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 802 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 803 | 804 | is-glob@^4.0.1, is-glob@~4.0.1: 805 | version "4.0.3" 806 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 807 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 808 | dependencies: 809 | is-extglob "^2.1.1" 810 | 811 | is-number@^7.0.0: 812 | version "7.0.0" 813 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 814 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 815 | 816 | is-plain-obj@^2.1.0: 817 | version "2.1.0" 818 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 819 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 820 | 821 | is-stream@^2.0.0: 822 | version "2.0.1" 823 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 824 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 825 | 826 | is-unicode-supported@^0.1.0: 827 | version "0.1.0" 828 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 829 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 830 | 831 | isexe@^2.0.0: 832 | version "2.0.0" 833 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 834 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 835 | 836 | isomorphic-ws@^4.0.1: 837 | version "4.0.1" 838 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" 839 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 840 | 841 | jayson@^3.4.4: 842 | version "3.6.6" 843 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.6.tgz#189984f624e398f831bd2be8e8c80eb3abf764a1" 844 | integrity sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ== 845 | dependencies: 846 | "@types/connect" "^3.4.33" 847 | "@types/express-serve-static-core" "^4.17.9" 848 | "@types/lodash" "^4.14.159" 849 | "@types/node" "^12.12.54" 850 | "@types/ws" "^7.4.4" 851 | JSONStream "^1.3.5" 852 | commander "^2.20.3" 853 | delay "^5.0.0" 854 | es6-promisify "^5.0.0" 855 | eyes "^0.1.8" 856 | isomorphic-ws "^4.0.1" 857 | json-stringify-safe "^5.0.1" 858 | lodash "^4.17.20" 859 | uuid "^8.3.2" 860 | ws "^7.4.5" 861 | 862 | joi@^17.4.0: 863 | version "17.6.0" 864 | resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" 865 | integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== 866 | dependencies: 867 | "@hapi/hoek" "^9.0.0" 868 | "@hapi/topo" "^5.0.0" 869 | "@sideway/address" "^4.1.3" 870 | "@sideway/formula" "^3.0.0" 871 | "@sideway/pinpoint" "^2.0.0" 872 | 873 | js-sha256@^0.9.0: 874 | version "0.9.0" 875 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" 876 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== 877 | 878 | js-sha3@^0.8.0: 879 | version "0.8.0" 880 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" 881 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== 882 | 883 | js-yaml@4.1.0: 884 | version "4.1.0" 885 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 886 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 887 | dependencies: 888 | argparse "^2.0.1" 889 | 890 | json-stringify-safe@^5.0.1: 891 | version "5.0.1" 892 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 893 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 894 | 895 | json5@^1.0.1: 896 | version "1.0.1" 897 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 898 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 899 | dependencies: 900 | minimist "^1.2.0" 901 | 902 | jsonparse@^1.2.0: 903 | version "1.3.1" 904 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 905 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 906 | 907 | lazy-ass@1.6.0: 908 | version "1.6.0" 909 | resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" 910 | integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== 911 | 912 | locate-path@^6.0.0: 913 | version "6.0.0" 914 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 915 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 916 | dependencies: 917 | p-locate "^5.0.0" 918 | 919 | lodash@^4.17.20, lodash@^4.17.21: 920 | version "4.17.21" 921 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 922 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 923 | 924 | log-symbols@4.1.0: 925 | version "4.1.0" 926 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 927 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 928 | dependencies: 929 | chalk "^4.1.0" 930 | is-unicode-supported "^0.1.0" 931 | 932 | loupe@^2.3.1: 933 | version "2.3.4" 934 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" 935 | integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== 936 | dependencies: 937 | get-func-name "^2.0.0" 938 | 939 | lower-case@^2.0.2: 940 | version "2.0.2" 941 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 942 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 943 | dependencies: 944 | tslib "^2.0.3" 945 | 946 | make-error@^1.1.1: 947 | version "1.3.6" 948 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 949 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 950 | 951 | map-stream@~0.1.0: 952 | version "0.1.0" 953 | resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" 954 | integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== 955 | 956 | merge-stream@^2.0.0: 957 | version "2.0.0" 958 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 959 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 960 | 961 | mimic-fn@^2.1.0: 962 | version "2.1.0" 963 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 964 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 965 | 966 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 967 | version "1.0.1" 968 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 969 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 970 | 971 | minimalistic-crypto-utils@^1.0.1: 972 | version "1.0.1" 973 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 974 | integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== 975 | 976 | minimatch@4.2.1: 977 | version "4.2.1" 978 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" 979 | integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== 980 | dependencies: 981 | brace-expansion "^1.1.7" 982 | 983 | minimatch@^3.0.4: 984 | version "3.1.2" 985 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 986 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 987 | dependencies: 988 | brace-expansion "^1.1.7" 989 | 990 | minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: 991 | version "1.2.6" 992 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 993 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 994 | 995 | mkdirp@^0.5.1: 996 | version "0.5.6" 997 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 998 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 999 | dependencies: 1000 | minimist "^1.2.6" 1001 | 1002 | mocha@^9.0.3: 1003 | version "9.2.2" 1004 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" 1005 | integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== 1006 | dependencies: 1007 | "@ungap/promise-all-settled" "1.1.2" 1008 | ansi-colors "4.1.1" 1009 | browser-stdout "1.3.1" 1010 | chokidar "3.5.3" 1011 | debug "4.3.3" 1012 | diff "5.0.0" 1013 | escape-string-regexp "4.0.0" 1014 | find-up "5.0.0" 1015 | glob "7.2.0" 1016 | growl "1.10.5" 1017 | he "1.2.0" 1018 | js-yaml "4.1.0" 1019 | log-symbols "4.1.0" 1020 | minimatch "4.2.1" 1021 | ms "2.1.3" 1022 | nanoid "3.3.1" 1023 | serialize-javascript "6.0.0" 1024 | strip-json-comments "3.1.1" 1025 | supports-color "8.1.1" 1026 | which "2.0.2" 1027 | workerpool "6.2.0" 1028 | yargs "16.2.0" 1029 | yargs-parser "20.2.4" 1030 | yargs-unparser "2.0.0" 1031 | 1032 | ms@2.1.2: 1033 | version "2.1.2" 1034 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1035 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1036 | 1037 | ms@2.1.3: 1038 | version "2.1.3" 1039 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1040 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1041 | 1042 | nanoid@3.3.1: 1043 | version "3.3.1" 1044 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" 1045 | integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== 1046 | 1047 | no-case@^3.0.4: 1048 | version "3.0.4" 1049 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 1050 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 1051 | dependencies: 1052 | lower-case "^2.0.2" 1053 | tslib "^2.0.3" 1054 | 1055 | node-addon-api@^2.0.0: 1056 | version "2.0.2" 1057 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" 1058 | integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== 1059 | 1060 | node-fetch@2, node-fetch@2.6.7: 1061 | version "2.6.7" 1062 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 1063 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 1064 | dependencies: 1065 | whatwg-url "^5.0.0" 1066 | 1067 | node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: 1068 | version "4.5.0" 1069 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" 1070 | integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== 1071 | 1072 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1073 | version "3.0.0" 1074 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1075 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1076 | 1077 | npm-run-path@^4.0.1: 1078 | version "4.0.1" 1079 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 1080 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1081 | dependencies: 1082 | path-key "^3.0.0" 1083 | 1084 | once@^1.3.0: 1085 | version "1.4.0" 1086 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1087 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1088 | dependencies: 1089 | wrappy "1" 1090 | 1091 | onetime@^5.1.2: 1092 | version "5.1.2" 1093 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 1094 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1095 | dependencies: 1096 | mimic-fn "^2.1.0" 1097 | 1098 | p-limit@^3.0.2: 1099 | version "3.1.0" 1100 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1101 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1102 | dependencies: 1103 | yocto-queue "^0.1.0" 1104 | 1105 | p-locate@^5.0.0: 1106 | version "5.0.0" 1107 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1108 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1109 | dependencies: 1110 | p-limit "^3.0.2" 1111 | 1112 | pako@^2.0.3: 1113 | version "2.0.4" 1114 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" 1115 | integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== 1116 | 1117 | path-exists@^4.0.0: 1118 | version "4.0.0" 1119 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1120 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1121 | 1122 | path-is-absolute@^1.0.0: 1123 | version "1.0.1" 1124 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1125 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1126 | 1127 | path-key@^3.0.0, path-key@^3.1.0: 1128 | version "3.1.1" 1129 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1130 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1131 | 1132 | pathval@^1.1.1: 1133 | version "1.1.1" 1134 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 1135 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 1136 | 1137 | pause-stream@0.0.11: 1138 | version "0.0.11" 1139 | resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" 1140 | integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== 1141 | dependencies: 1142 | through "~2.3" 1143 | 1144 | picomatch@^2.0.4, picomatch@^2.2.1: 1145 | version "2.3.1" 1146 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1147 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1148 | 1149 | prettier@^2.6.2: 1150 | version "2.7.1" 1151 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" 1152 | integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== 1153 | 1154 | ps-tree@1.2.0: 1155 | version "1.2.0" 1156 | resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" 1157 | integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== 1158 | dependencies: 1159 | event-stream "=3.3.4" 1160 | 1161 | punycode@^2.1.1: 1162 | version "2.1.1" 1163 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1164 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1165 | 1166 | randombytes@^2.1.0: 1167 | version "2.1.0" 1168 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1169 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1170 | dependencies: 1171 | safe-buffer "^5.1.0" 1172 | 1173 | react-native-url-polyfill@^1.3.0: 1174 | version "1.3.0" 1175 | resolved "https://registry.yarnpkg.com/react-native-url-polyfill/-/react-native-url-polyfill-1.3.0.tgz#c1763de0f2a8c22cc3e959b654c8790622b6ef6a" 1176 | integrity sha512-w9JfSkvpqqlix9UjDvJjm1EjSt652zVQ6iwCIj1cVVkwXf4jQhQgTNXY6EVTwuAmUjg6BC6k9RHCBynoLFo3IQ== 1177 | dependencies: 1178 | whatwg-url-without-unicode "8.0.0-3" 1179 | 1180 | readdirp@~3.6.0: 1181 | version "3.6.0" 1182 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1183 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1184 | dependencies: 1185 | picomatch "^2.2.1" 1186 | 1187 | regenerator-runtime@^0.13.4: 1188 | version "0.13.9" 1189 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" 1190 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 1191 | 1192 | require-directory@^2.1.1: 1193 | version "2.1.1" 1194 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1195 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1196 | 1197 | rpc-websockets@^7.5.0: 1198 | version "7.5.0" 1199 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" 1200 | integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== 1201 | dependencies: 1202 | "@babel/runtime" "^7.17.2" 1203 | eventemitter3 "^4.0.7" 1204 | uuid "^8.3.2" 1205 | ws "^8.5.0" 1206 | optionalDependencies: 1207 | bufferutil "^4.0.1" 1208 | utf-8-validate "^5.0.2" 1209 | 1210 | rxjs@^7.1.0: 1211 | version "7.5.6" 1212 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" 1213 | integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== 1214 | dependencies: 1215 | tslib "^2.1.0" 1216 | 1217 | safe-buffer@^5.0.1, safe-buffer@^5.1.0: 1218 | version "5.2.1" 1219 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1220 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1221 | 1222 | secp256k1@^4.0.2: 1223 | version "4.0.3" 1224 | resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" 1225 | integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== 1226 | dependencies: 1227 | elliptic "^6.5.4" 1228 | node-addon-api "^2.0.0" 1229 | node-gyp-build "^4.2.0" 1230 | 1231 | serialize-javascript@6.0.0: 1232 | version "6.0.0" 1233 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1234 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1235 | dependencies: 1236 | randombytes "^2.1.0" 1237 | 1238 | shebang-command@^2.0.0: 1239 | version "2.0.0" 1240 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1241 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1242 | dependencies: 1243 | shebang-regex "^3.0.0" 1244 | 1245 | shebang-regex@^3.0.0: 1246 | version "3.0.0" 1247 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1248 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1249 | 1250 | signal-exit@^3.0.3: 1251 | version "3.0.7" 1252 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1253 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1254 | 1255 | snake-case@^3.0.4: 1256 | version "3.0.4" 1257 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" 1258 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 1259 | dependencies: 1260 | dot-case "^3.0.4" 1261 | tslib "^2.0.3" 1262 | 1263 | source-map-support@^0.5.6: 1264 | version "0.5.21" 1265 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 1266 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 1267 | dependencies: 1268 | buffer-from "^1.0.0" 1269 | source-map "^0.6.0" 1270 | 1271 | source-map@^0.6.0: 1272 | version "0.6.1" 1273 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1274 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1275 | 1276 | split@0.3: 1277 | version "0.3.3" 1278 | resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" 1279 | integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== 1280 | dependencies: 1281 | through "2" 1282 | 1283 | start-server-and-test@^1.14.0: 1284 | version "1.14.0" 1285 | resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.14.0.tgz#c57f04f73eac15dd51733b551d775b40837fdde3" 1286 | integrity sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw== 1287 | dependencies: 1288 | bluebird "3.7.2" 1289 | check-more-types "2.24.0" 1290 | debug "4.3.2" 1291 | execa "5.1.1" 1292 | lazy-ass "1.6.0" 1293 | ps-tree "1.2.0" 1294 | wait-on "6.0.0" 1295 | 1296 | stream-combiner@~0.0.4: 1297 | version "0.0.4" 1298 | resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" 1299 | integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== 1300 | dependencies: 1301 | duplexer "~0.1.1" 1302 | 1303 | string-width@^4.1.0, string-width@^4.2.0: 1304 | version "4.2.3" 1305 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1306 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1307 | dependencies: 1308 | emoji-regex "^8.0.0" 1309 | is-fullwidth-code-point "^3.0.0" 1310 | strip-ansi "^6.0.1" 1311 | 1312 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1313 | version "6.0.1" 1314 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1315 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1316 | dependencies: 1317 | ansi-regex "^5.0.1" 1318 | 1319 | strip-bom@^3.0.0: 1320 | version "3.0.0" 1321 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1322 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1323 | 1324 | strip-final-newline@^2.0.0: 1325 | version "2.0.0" 1326 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 1327 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1328 | 1329 | strip-json-comments@3.1.1: 1330 | version "3.1.1" 1331 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1332 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1333 | 1334 | superstruct@^0.14.2: 1335 | version "0.14.2" 1336 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" 1337 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 1338 | 1339 | supports-color@8.1.1: 1340 | version "8.1.1" 1341 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1342 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1343 | dependencies: 1344 | has-flag "^4.0.0" 1345 | 1346 | supports-color@^7.1.0: 1347 | version "7.2.0" 1348 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1349 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1350 | dependencies: 1351 | has-flag "^4.0.0" 1352 | 1353 | text-encoding-utf-8@^1.0.2: 1354 | version "1.0.2" 1355 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" 1356 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 1357 | 1358 | through@2, "through@>=2.2.7 <3", through@~2.3, through@~2.3.1: 1359 | version "2.3.8" 1360 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1361 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1362 | 1363 | to-regex-range@^5.0.1: 1364 | version "5.0.1" 1365 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1366 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1367 | dependencies: 1368 | is-number "^7.0.0" 1369 | 1370 | toml@^3.0.0: 1371 | version "3.0.0" 1372 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" 1373 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 1374 | 1375 | tr46@~0.0.3: 1376 | version "0.0.3" 1377 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1378 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1379 | 1380 | ts-mocha@^8.0.0: 1381 | version "8.0.0" 1382 | resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-8.0.0.tgz#962d0fa12eeb6468aa1a6b594bb3bbc818da3ef0" 1383 | integrity sha512-Kou1yxTlubLnD5C3unlCVO7nh0HERTezjoVhVw/M5S1SqoUec0WgllQvPk3vzPMc6by8m6xD1uR1yRf8lnVUbA== 1384 | dependencies: 1385 | ts-node "7.0.1" 1386 | optionalDependencies: 1387 | tsconfig-paths "^3.5.0" 1388 | 1389 | ts-node@7.0.1: 1390 | version "7.0.1" 1391 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" 1392 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== 1393 | dependencies: 1394 | arrify "^1.0.0" 1395 | buffer-from "^1.1.0" 1396 | diff "^3.1.0" 1397 | make-error "^1.1.1" 1398 | minimist "^1.2.0" 1399 | mkdirp "^0.5.1" 1400 | source-map-support "^0.5.6" 1401 | yn "^2.0.0" 1402 | 1403 | tsconfig-paths@^3.5.0: 1404 | version "3.14.1" 1405 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" 1406 | integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== 1407 | dependencies: 1408 | "@types/json5" "^0.0.29" 1409 | json5 "^1.0.1" 1410 | minimist "^1.2.6" 1411 | strip-bom "^3.0.0" 1412 | 1413 | tslib@^2.0.3, tslib@^2.1.0: 1414 | version "2.4.0" 1415 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 1416 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 1417 | 1418 | tweetnacl@^1.0.0: 1419 | version "1.0.3" 1420 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 1421 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 1422 | 1423 | type-detect@^4.0.0, type-detect@^4.0.5: 1424 | version "4.0.8" 1425 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 1426 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 1427 | 1428 | typescript@^4.3.5: 1429 | version "4.7.4" 1430 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 1431 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 1432 | 1433 | utf-8-validate@^5.0.2: 1434 | version "5.0.9" 1435 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" 1436 | integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== 1437 | dependencies: 1438 | node-gyp-build "^4.3.0" 1439 | 1440 | uuid@^8.3.2: 1441 | version "8.3.2" 1442 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 1443 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1444 | 1445 | wait-on@6.0.0: 1446 | version "6.0.0" 1447 | resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.0.tgz#7e9bf8e3d7fe2daecbb7a570ac8ca41e9311c7e7" 1448 | integrity sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw== 1449 | dependencies: 1450 | axios "^0.21.1" 1451 | joi "^17.4.0" 1452 | lodash "^4.17.21" 1453 | minimist "^1.2.5" 1454 | rxjs "^7.1.0" 1455 | 1456 | webidl-conversions@^3.0.0: 1457 | version "3.0.1" 1458 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1459 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1460 | 1461 | webidl-conversions@^5.0.0: 1462 | version "5.0.0" 1463 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" 1464 | integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== 1465 | 1466 | whatwg-url-without-unicode@8.0.0-3: 1467 | version "8.0.0-3" 1468 | resolved "https://registry.yarnpkg.com/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz#ab6df4bf6caaa6c85a59f6e82c026151d4bb376b" 1469 | integrity sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig== 1470 | dependencies: 1471 | buffer "^5.4.3" 1472 | punycode "^2.1.1" 1473 | webidl-conversions "^5.0.0" 1474 | 1475 | whatwg-url@^5.0.0: 1476 | version "5.0.0" 1477 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1478 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1479 | dependencies: 1480 | tr46 "~0.0.3" 1481 | webidl-conversions "^3.0.0" 1482 | 1483 | which@2.0.2, which@^2.0.1: 1484 | version "2.0.2" 1485 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1486 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1487 | dependencies: 1488 | isexe "^2.0.0" 1489 | 1490 | workerpool@6.2.0: 1491 | version "6.2.0" 1492 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" 1493 | integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== 1494 | 1495 | wrap-ansi@^7.0.0: 1496 | version "7.0.0" 1497 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1498 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1499 | dependencies: 1500 | ansi-styles "^4.0.0" 1501 | string-width "^4.1.0" 1502 | strip-ansi "^6.0.0" 1503 | 1504 | wrappy@1: 1505 | version "1.0.2" 1506 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1507 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1508 | 1509 | ws@^7.4.5: 1510 | version "7.5.9" 1511 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" 1512 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 1513 | 1514 | ws@^8.5.0: 1515 | version "8.8.1" 1516 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" 1517 | integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== 1518 | 1519 | y18n@^5.0.5: 1520 | version "5.0.8" 1521 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1522 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1523 | 1524 | yargs-parser@20.2.4: 1525 | version "20.2.4" 1526 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 1527 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 1528 | 1529 | yargs-parser@^20.2.2: 1530 | version "20.2.9" 1531 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1532 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1533 | 1534 | yargs-unparser@2.0.0: 1535 | version "2.0.0" 1536 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 1537 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 1538 | dependencies: 1539 | camelcase "^6.0.0" 1540 | decamelize "^4.0.0" 1541 | flat "^5.0.2" 1542 | is-plain-obj "^2.1.0" 1543 | 1544 | yargs@16.2.0: 1545 | version "16.2.0" 1546 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1547 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1548 | dependencies: 1549 | cliui "^7.0.2" 1550 | escalade "^3.1.1" 1551 | get-caller-file "^2.0.5" 1552 | require-directory "^2.1.1" 1553 | string-width "^4.2.0" 1554 | y18n "^5.0.5" 1555 | yargs-parser "^20.2.2" 1556 | 1557 | yn@^2.0.0: 1558 | version "2.0.0" 1559 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 1560 | integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== 1561 | 1562 | yocto-queue@^0.1.0: 1563 | version "0.1.0" 1564 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1565 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1566 | --------------------------------------------------------------------------------