From 9fa402efe343901d972fda66258ac701ac97fd93 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Wed, 23 Apr 2025 16:35:32 +0200 Subject: [PATCH 01/12] chore: add vanilla anchor --- lazer/solana-anchor/.gitignore | 7 + lazer/solana-anchor/.prettierignore | 7 + lazer/solana-anchor/Anchor.toml | 16 + lazer/solana-anchor/Cargo.lock | 2263 +++++++++++++++++ lazer/solana-anchor/Cargo.toml | 14 + lazer/solana-anchor/migrations/deploy.ts | 12 + lazer/solana-anchor/package.json | 20 + .../programs/solana-anchor/Cargo.toml | 21 + .../programs/solana-anchor/Xargo.toml | 2 + lazer/solana-anchor/tests/solana-anchor.ts | 16 + lazer/solana-anchor/tsconfig.json | 10 + lazer/solana-anchor/yarn.lock | 1189 +++++++++ 12 files changed, 3577 insertions(+) create mode 100644 lazer/solana-anchor/.gitignore create mode 100644 lazer/solana-anchor/.prettierignore create mode 100644 lazer/solana-anchor/Anchor.toml create mode 100644 lazer/solana-anchor/Cargo.lock create mode 100644 lazer/solana-anchor/Cargo.toml create mode 100644 lazer/solana-anchor/migrations/deploy.ts create mode 100644 lazer/solana-anchor/package.json create mode 100644 lazer/solana-anchor/programs/solana-anchor/Cargo.toml create mode 100644 lazer/solana-anchor/programs/solana-anchor/Xargo.toml create mode 100644 lazer/solana-anchor/tests/solana-anchor.ts create mode 100644 lazer/solana-anchor/tsconfig.json create mode 100644 lazer/solana-anchor/yarn.lock diff --git a/lazer/solana-anchor/.gitignore b/lazer/solana-anchor/.gitignore new file mode 100644 index 0000000..2e0446b --- /dev/null +++ b/lazer/solana-anchor/.gitignore @@ -0,0 +1,7 @@ +.anchor +.DS_Store +target +**/*.rs.bk +node_modules +test-ledger +.yarn diff --git a/lazer/solana-anchor/.prettierignore b/lazer/solana-anchor/.prettierignore new file mode 100644 index 0000000..4142583 --- /dev/null +++ b/lazer/solana-anchor/.prettierignore @@ -0,0 +1,7 @@ +.anchor +.DS_Store +target +node_modules +dist +build +test-ledger diff --git a/lazer/solana-anchor/Anchor.toml b/lazer/solana-anchor/Anchor.toml new file mode 100644 index 0000000..275e93d --- /dev/null +++ b/lazer/solana-anchor/Anchor.toml @@ -0,0 +1,16 @@ +[features] +resolution = true +skip-lint = false + +[programs.localnet] +solana_anchor = "FpmpVrP57C6ADT8d4dQp9TkM1vmxohZJ5WEQQc9RGLPY" + +[registry] +url = "https://api.apr.dev" + +[provider] +cluster = "Localnet" +wallet = "~/.config/solana/id.json" + +[scripts] +test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" diff --git a/lazer/solana-anchor/Cargo.lock b/lazer/solana-anchor/Cargo.lock new file mode 100644 index 0000000..ac22b25 --- /dev/null +++ b/lazer/solana-anchor/Cargo.lock @@ -0,0 +1,2263 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.16", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy 0.7.35", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "anchor-attribute-access-control" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47fe28365b33e8334dd70ae2f34a43892363012fe239cf37d2ee91693575b1f8" +dependencies = [ + "anchor-syn", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-account" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c288d496168268d198d9b53ee9f4f9d260a55ba4df9877ea1d4486ad6109e0f" +dependencies = [ + "anchor-syn", + "bs58 0.5.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-constant" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b77b6948d0eeaaa129ce79eea5bbbb9937375a9241d909ca8fb9e006bb6e90" +dependencies = [ + "anchor-syn", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-error" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d20bb569c5a557c86101b944721d865e1fd0a4c67c381d31a44a84f07f84828" +dependencies = [ + "anchor-syn", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-event" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cebd8d0671a3a9dc3160c48598d652c34c77de6be4d44345b8b514323284d57" +dependencies = [ + "anchor-syn", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-attribute-program" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb2a5eb0860e661ab31aff7bb5e0288357b176380e985bade4ccb395981b42d" +dependencies = [ + "anchor-lang-idl", + "anchor-syn", + "anyhow", + "bs58 0.5.1", + "heck", + "proc-macro2", + "quote", + "serde_json", + "syn 1.0.109", +] + +[[package]] +name = "anchor-derive-accounts" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04368b5abef4266250ca8d1d12f4dff860242681e4ec22b885dcfe354fd35aa1" +dependencies = [ + "anchor-syn", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-derive-serde" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0bb0e0911ad4a70cab880cdd6287fe1e880a1a9d8e4e6defa8e9044b9796a6c" +dependencies = [ + "anchor-syn", + "borsh-derive-internal 0.10.4", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-derive-space" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef415ff156dc82e9ecb943189b0cb241b3a6bfc26a180234dc21bd3ef3ce0cb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "anchor-lang" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6620c9486d9d36a4389cab5e37dc34a42ed0bfaa62e6a75a2999ce98f8f2e373" +dependencies = [ + "anchor-attribute-access-control", + "anchor-attribute-account", + "anchor-attribute-constant", + "anchor-attribute-error", + "anchor-attribute-event", + "anchor-attribute-program", + "anchor-derive-accounts", + "anchor-derive-serde", + "anchor-derive-space", + "anchor-lang-idl", + "arrayref", + "base64 0.21.7", + "bincode", + "borsh 0.10.4", + "bytemuck", + "getrandom 0.2.16", + "solana-program", + "thiserror 1.0.69", +] + +[[package]] +name = "anchor-lang-idl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e8599d21995f68e296265aa5ab0c3cef582fd58afec014d01bd0bce18a4418" +dependencies = [ + "anchor-lang-idl-spec", + "anyhow", + "heck", + "regex", + "serde", + "serde_json", + "sha2 0.10.8", +] + +[[package]] +name = "anchor-lang-idl-spec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bdf143115440fe621bdac3a29a1f7472e09f6cd82b2aa569429a0c13f103838" +dependencies = [ + "anyhow", + "serde", +] + +[[package]] +name = "anchor-syn" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f99daacb53b55cfd37ce14d6c9905929721137fd4c67bbab44a19802aecb622f" +dependencies = [ + "anyhow", + "bs58 0.5.1", + "cargo_toml", + "heck", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.8", + "syn 1.0.109", + "thiserror 1.0.69", +] + +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + +[[package]] +name = "ark-bn254" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a22f4561524cd949590d78d7d4c5df8f592430d221f7f3c9497bbafd8972120f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools 0.10.5", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +dependencies = [ + "serde", +] + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake3" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "borsh" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15bf3650200d8bffa99015595e10f1fbd17de07abbc25bb067da79e769939bfa" +dependencies = [ + "borsh-derive 0.9.3", + "hashbrown 0.11.2", +] + +[[package]] +name = "borsh" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115e54d64eb62cdebad391c19efc9dce4981c690c85a33a12199d99bb9546fee" +dependencies = [ + "borsh-derive 0.10.4", + "hashbrown 0.13.2", +] + +[[package]] +name = "borsh" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce" +dependencies = [ + "borsh-derive 1.5.7", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" +dependencies = [ + "borsh-derive-internal 0.9.3", + "borsh-schema-derive-internal 0.9.3", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831213f80d9423998dd696e2c5345aba6be7a0bd8cd19e31c5243e13df1cef89" +dependencies = [ + "borsh-derive-internal 0.10.4", + "borsh-schema-derive-internal 0.10.4", + "proc-macro-crate 0.1.5", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive" +version = "1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd1d3c0c2f5833f22386f252fe8ed005c7f59fdcddeef025c01b4c3b9fd9ac3" +dependencies = [ + "once_cell", + "proc-macro-crate 3.3.0", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5449c28a7b352f2d1e592a8a28bf139bc71afb0764a14f3c02500935d8c44065" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65d6ba50644c98714aa2a70d13d7df3cd75cd2b523a2b452bf010443800976b3" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdbd5696d8bfa21d53d9fe39a714a18538bad11492a42d066dbbc395fb1951c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276691d96f063427be83e6692b86148e488ebba9f48f77788724ca027ba3b6d4" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytemuck" +version = "1.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cargo_toml" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be" +dependencies = [ + "serde", + "toml 0.8.20", +] + +[[package]] +name = "cc" +version = "1.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f" +dependencies = [ + "log", + "web-sys", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "serde", + "subtle", + "zeroize", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "serde", + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hmac" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac-drbg" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" +dependencies = [ + "digest 0.9.0", + "generic-array", + "hmac", +] + +[[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "rayon", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] +name = "indexmap" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.2", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.172" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" + +[[package]] +name = "libsecp256k1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73" +dependencies = [ + "arrayref", + "base64 0.12.3", + "digest 0.9.0", + "hmac-drbg", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.7.3", + "serde", + "sha2 0.9.9", + "typenum", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "light-poseidon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee" +dependencies = [ + "ark-bn254", + "ark-ff", + "num-bigint", + "thiserror 1.0.69", +] + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pbkdf2" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216eaa586a190f0a738f2f918511eecfa90f13295abec0e457cdebcceda80cbd" +dependencies = [ + "crypto-mac", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy 0.8.24", +] + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml 0.5.11", +] + +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "protobuf" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65a1d4ddae7d8b5de68153b48f6aa3bba8cb002b243dbdbc55a5afbc98f99f4" +dependencies = [ + "once_cell", + "protobuf-support", + "thiserror 1.0.69", +] + +[[package]] +name = "protobuf-support" +version = "3.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e36c2f31e0a47f9280fb347ef5e461ffcd2c52dd520d8e216b52f93b0b0d7d6" +dependencies = [ + "thiserror 1.0.69", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pyth-lazer-protocol" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9bdf4e2ba853a8b437309487542e742c7d094d8db189db194cb538f2be02ecd" +dependencies = [ + "anyhow", + "base64 0.22.1", + "byteorder", + "derive_more", + "itertools 0.13.0", + "protobuf", + "rust_decimal", + "serde", + "serde_json", +] + +[[package]] +name = "pyth-lazer-solana-contract" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ada5f33dc3f560a3c08910b971bd0c3e5ca8bed1e07700bc95ea8b330339e98" +dependencies = [ + "anchor-lang", + "bytemuck", + "byteorder", + "pyth-lazer-protocol", + "thiserror 2.0.12", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rust_decimal" +version = "1.37.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faa7de2ba56ac291bd90c6b9bece784a52ae1411f9506544b3eae36dd2356d50" +dependencies = [ + "arrayvec", + "borsh 1.5.7", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] +name = "smallvec" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" + +[[package]] +name = "solana-anchor" +version = "0.1.0" +dependencies = [ + "anchor-lang", + "pyth-lazer-solana-contract", +] + +[[package]] +name = "solana-frozen-abi" +version = "1.18.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03ab2c30c15311b511c0d1151e4ab6bc9a3e080a37e7c6e7c2d96f5784cf9434" +dependencies = [ + "block-buffer 0.10.4", + "bs58 0.4.0", + "bv", + "either", + "generic-array", + "im", + "lazy_static", + "log", + "memmap2", + "rustc_version", + "serde", + "serde_bytes", + "serde_derive", + "sha2 0.10.8", + "solana-frozen-abi-macro", + "subtle", + "thiserror 1.0.69", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.18.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c142f779c3633ac83c84d04ff06c70e1f558c876f13358bed77ba629c7417932" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.100", +] + +[[package]] +name = "solana-program" +version = "1.18.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c10f4588cefd716b24a1a40dd32c278e43a560ab8ce4de6b5805c9d113afdfa1" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "base64 0.21.7", + "bincode", + "bitflags", + "blake3", + "borsh 0.10.4", + "borsh 0.9.3", + "borsh 1.5.7", + "bs58 0.4.0", + "bv", + "bytemuck", + "cc", + "console_error_panic_hook", + "console_log", + "curve25519-dalek", + "getrandom 0.2.16", + "itertools 0.10.5", + "js-sys", + "lazy_static", + "libc", + "libsecp256k1", + "light-poseidon", + "log", + "memoffset", + "num-bigint", + "num-derive", + "num-traits", + "parking_lot", + "rand 0.8.5", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "serde_json", + "sha2 0.10.8", + "sha3", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-sdk-macro", + "thiserror 1.0.69", + "tiny-bip39", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.18.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b75d0f193a27719257af19144fdaebec0415d1c9e9226ae4bd29b791be5e9bd" +dependencies = [ + "bs58 0.4.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.100", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "tiny-bip39" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc59cb9dfc85bb312c3a78fd6aa8a8582e310b0fa885d5bb877f6dcc601839d" +dependencies = [ + "anyhow", + "hmac", + "once_cell", + "pbkdf2", + "rand 0.7.3", + "rustc-hash", + "sha2 0.9.9", + "thiserror 1.0.69", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "uuid" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.100", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +dependencies = [ + "zerocopy-derive 0.8.24", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zeroize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] diff --git a/lazer/solana-anchor/Cargo.toml b/lazer/solana-anchor/Cargo.toml new file mode 100644 index 0000000..f397704 --- /dev/null +++ b/lazer/solana-anchor/Cargo.toml @@ -0,0 +1,14 @@ +[workspace] +members = [ + "programs/*" +] +resolver = "2" + +[profile.release] +overflow-checks = true +lto = "fat" +codegen-units = 1 +[profile.release.build-override] +opt-level = 3 +incremental = false +codegen-units = 1 diff --git a/lazer/solana-anchor/migrations/deploy.ts b/lazer/solana-anchor/migrations/deploy.ts new file mode 100644 index 0000000..82fb175 --- /dev/null +++ b/lazer/solana-anchor/migrations/deploy.ts @@ -0,0 +1,12 @@ +// Migrations are an early feature. Currently, they're nothing more than this +// single deploy script that's invoked from the CLI, injecting a provider +// configured from the workspace's Anchor.toml. + +const anchor = require("@coral-xyz/anchor"); + +module.exports = async function (provider) { + // Configure client to use the provider. + anchor.setProvider(provider); + + // Add your deploy script here. +}; diff --git a/lazer/solana-anchor/package.json b/lazer/solana-anchor/package.json new file mode 100644 index 0000000..04daffe --- /dev/null +++ b/lazer/solana-anchor/package.json @@ -0,0 +1,20 @@ +{ + "license": "ISC", + "scripts": { + "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + }, + "dependencies": { + "@coral-xyz/anchor": "^0.30.1" + }, + "devDependencies": { + "chai": "^4.3.4", + "mocha": "^9.0.3", + "ts-mocha": "^10.0.0", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.3.0", + "@types/mocha": "^9.0.0", + "typescript": "^4.3.5", + "prettier": "^2.6.2" + } +} diff --git a/lazer/solana-anchor/programs/solana-anchor/Cargo.toml b/lazer/solana-anchor/programs/solana-anchor/Cargo.toml new file mode 100644 index 0000000..c4c3fec --- /dev/null +++ b/lazer/solana-anchor/programs/solana-anchor/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "solana-anchor" +version = "0.1.0" +description = "Created with Anchor" +edition = "2021" + +[lib] +crate-type = ["cdylib", "lib"] +name = "solana_anchor" + +[features] +default = [] +cpi = ["no-entrypoint"] +no-entrypoint = [] +no-idl = [] +no-log-ix-name = [] +idl-build = ["anchor-lang/idl-build"] + +[dependencies] +anchor-lang = "0.30.1" +pyth-lazer-solana-contract = { version = "0.4.1", features = ["no-entrypoint", "cpi"] } diff --git a/lazer/solana-anchor/programs/solana-anchor/Xargo.toml b/lazer/solana-anchor/programs/solana-anchor/Xargo.toml new file mode 100644 index 0000000..475fb71 --- /dev/null +++ b/lazer/solana-anchor/programs/solana-anchor/Xargo.toml @@ -0,0 +1,2 @@ +[target.bpfel-unknown-unknown.dependencies.std] +features = [] diff --git a/lazer/solana-anchor/tests/solana-anchor.ts b/lazer/solana-anchor/tests/solana-anchor.ts new file mode 100644 index 0000000..f8a19b0 --- /dev/null +++ b/lazer/solana-anchor/tests/solana-anchor.ts @@ -0,0 +1,16 @@ +import * as anchor from "@coral-xyz/anchor"; +import { Program } from "@coral-xyz/anchor"; +import { SolanaAnchor } from "../target/types/solana_anchor"; + +describe("solana-anchor", () => { + // Configure the client to use the local cluster. + anchor.setProvider(anchor.AnchorProvider.env()); + + const program = anchor.workspace.SolanaAnchor as Program; + + it("Is initialized!", async () => { + // Add your test here. + const tx = await program.methods.initialize().rpc(); + console.log("Your transaction signature", tx); + }); +}); diff --git a/lazer/solana-anchor/tsconfig.json b/lazer/solana-anchor/tsconfig.json new file mode 100644 index 0000000..cd5d2e3 --- /dev/null +++ b/lazer/solana-anchor/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "types": ["mocha", "chai"], + "typeRoots": ["./node_modules/@types"], + "lib": ["es2015"], + "module": "commonjs", + "target": "es6", + "esModuleInterop": true + } +} diff --git a/lazer/solana-anchor/yarn.lock b/lazer/solana-anchor/yarn.lock new file mode 100644 index 0000000..252da56 --- /dev/null +++ b/lazer/solana-anchor/yarn.lock @@ -0,0 +1,1189 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/runtime@^7.25.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== + dependencies: + regenerator-runtime "^0.14.0" + +"@coral-xyz/anchor-errors@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz#bdfd3a353131345244546876eb4afc0e125bec30" + integrity sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ== + +"@coral-xyz/anchor@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.30.1.tgz#17f3e9134c28cd0ea83574c6bab4e410bcecec5d" + integrity sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ== + dependencies: + "@coral-xyz/anchor-errors" "^0.30.1" + "@coral-xyz/borsh" "^0.30.1" + "@noble/hashes" "^1.3.1" + "@solana/web3.js" "^1.68.0" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@coral-xyz/borsh@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.30.1.tgz#869d8833abe65685c72e9199b8688477a4f6b0e3" + integrity sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ== + dependencies: + bn.js "^5.1.2" + buffer-layout "^1.2.0" + +"@noble/curves@^1.4.2": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.0.tgz#13e0ca8be4a0ce66c113693a94514e5599f40cfc" + integrity sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg== + dependencies: + "@noble/hashes" "1.8.0" + +"@noble/hashes@1.8.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + +"@solana/buffer-layout@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== + dependencies: + buffer "~6.0.3" + +"@solana/codecs-core@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.1.0.tgz#79ac28fbcde4a09d88f4360777ceeb30ec14e3f1" + integrity sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw== + dependencies: + "@solana/errors" "2.1.0" + +"@solana/codecs-numbers@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.1.0.tgz#f6a1a9009ace56238d8d9478dd5d375b09c6342a" + integrity sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag== + dependencies: + "@solana/codecs-core" "2.1.0" + "@solana/errors" "2.1.0" + +"@solana/errors@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.1.0.tgz#1a139965fcb8bec610cc1c6194d53d169f4b5852" + integrity sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw== + dependencies: + chalk "^5.3.0" + commander "^13.1.0" + +"@solana/web3.js@^1.68.0": + version "1.98.1" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.98.1.tgz#9237a5dcded21b323672aa503a0db1c3d18ff841" + integrity sha512-gRAq1YPbfSDAbmho4kY7P/8iLIjMWXAzBJdP9iENFR+dFQSBSueHzjK/ou8fxhqHP9j+J4Msl4p/oDemFcIjlg== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + "@solana/codecs-numbers" "^2.1.0" + agentkeepalive "^4.5.0" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + +"@swc/helpers@^0.5.11": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" + integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== + dependencies: + tslib "^2.8.0" + +"@types/bn.js@^5.1.0": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== + dependencies: + "@types/node" "*" + +"@types/chai@^4.3.0": + version "4.3.20" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== + +"@types/connect@^3.4.33": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/mocha@^9.0.0": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== + +"@types/node@*": + version "22.14.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f" + integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== + dependencies: + undici-types "~6.21.0" + +"@types/node@^12.12.54": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/ws@^8.2.2": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +agentkeepalive@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" + integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== + dependencies: + humanize-ms "^1.2.1" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +borsh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" + integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +bs58@^4.0.0, bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +buffer-from@^1.0.0, buffer-from@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-layout@^1.2.0, buffer-layout@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" + integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== + +buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@^4.0.1: + version "4.0.9" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.9.tgz#6e81739ad48a95cad45a279588e13e95e24a800a" + integrity sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw== + dependencies: + node-gyp-build "^4.3.0" + +camelcase@^6.0.0, camelcase@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +chai@^4.3.4: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== + +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cross-fetch@^3.1.5: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" + integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== + dependencies: + node-fetch "^2.7.0" + +crypto-hash@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" + integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== + +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^3.1.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eventemitter3@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== + +fast-stable-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" + integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +jayson@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.2.0.tgz#b71762393fa40bc9637eaf734ca6f40d3b8c0c93" + integrity sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + stream-json "^1.9.1" + uuid "^8.3.2" + ws "^7.5.10" + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.4: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mocha@^9.0.3: + version "9.2.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.3" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + growl "1.10.5" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "4.2.1" + ms "2.1.3" + nanoid "3.3.1" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + workerpool "6.2.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@^4.3.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +pako@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prettier@^2.6.2: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +rpc-websockets@^9.0.2: + version "9.1.1" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.1.1.tgz#5764336f3623ee1c5cc8653b7335183e3c0c78bd" + integrity sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA== + dependencies: + "@swc/helpers" "^0.5.11" + "@types/uuid" "^8.3.4" + "@types/ws" "^8.2.2" + buffer "^6.0.3" + eventemitter3 "^5.0.1" + uuid "^8.3.2" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^5.0.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +source-map-support@^0.5.6: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +stream-chain@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" + integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== + +stream-json@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.9.1.tgz#e3fec03e984a503718946c170db7d74556c2a187" + integrity sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw== + dependencies: + stream-chain "^2.2.5" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +superstruct@^0.15.4: + version "0.15.5" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" + integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== + +superstruct@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-2.0.2.tgz#3f6d32fbdc11c357deff127d591a39b996300c54" + integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-mocha@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.1.0.tgz#17a1c055f5f7733fd82447c4420740db87221bc8" + integrity sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA== + dependencies: + ts-node "7.0.1" + optionalDependencies: + tsconfig-paths "^3.5.0" + +ts-node@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" + integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== + dependencies: + arrify "^1.0.0" + buffer-from "^1.1.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.6" + yn "^2.0.0" + +tsconfig-paths@^3.5.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.0.3, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +typescript@^4.3.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== + dependencies: + node-gyp-build "^4.3.0" + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +workerpool@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" + integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +ws@^8.5.0: + version "8.18.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" + integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" + integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 24cc52bbcca0730ddd067f45fcfa409ce33649fd Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Wed, 23 Apr 2025 16:35:52 +0200 Subject: [PATCH 02/12] chore: separate rust toolchains --- lazer/{ => publisher}/rust-toolchain | 0 lazer/solana-anchor/rust-toolchain | 1 + lazer/solana/rust-toolchain | 1 + 3 files changed, 2 insertions(+) rename lazer/{ => publisher}/rust-toolchain (100%) create mode 100644 lazer/solana-anchor/rust-toolchain create mode 100644 lazer/solana/rust-toolchain diff --git a/lazer/rust-toolchain b/lazer/publisher/rust-toolchain similarity index 100% rename from lazer/rust-toolchain rename to lazer/publisher/rust-toolchain diff --git a/lazer/solana-anchor/rust-toolchain b/lazer/solana-anchor/rust-toolchain new file mode 100644 index 0000000..b3a8c61 --- /dev/null +++ b/lazer/solana-anchor/rust-toolchain @@ -0,0 +1 @@ +1.79.0 diff --git a/lazer/solana/rust-toolchain b/lazer/solana/rust-toolchain new file mode 100644 index 0000000..7c7053a --- /dev/null +++ b/lazer/solana/rust-toolchain @@ -0,0 +1 @@ +1.75.0 From 375f29a7fb7e6d1c525b599303786f3dadcbe1cd Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Wed, 23 Apr 2025 16:36:07 +0200 Subject: [PATCH 03/12] feat: add anchor based example contract --- .../programs/solana-anchor/src/lib.rs | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 lazer/solana-anchor/programs/solana-anchor/src/lib.rs diff --git a/lazer/solana-anchor/programs/solana-anchor/src/lib.rs b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs new file mode 100644 index 0000000..ab685b6 --- /dev/null +++ b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs @@ -0,0 +1,148 @@ +use anchor_lang::prelude::*; +use pyth_lazer_solana_contract::protocol::{ + message::LeEcdsaMessage, + payload::{PayloadData, PayloadPropertyValue}, + router::channel_ids::FIXED_RATE_200, + }; + +declare_id!("My11111111111111111111111111111111111111111"); + +#[program] +pub mod solana_anchor { + use super::*; + + pub fn initialize(ctx: Context, price_feed_id: u32) -> Result<()> { + let state = &mut ctx.accounts.state; + state.price_feed_id = price_feed_id; + state.latest_timestamp = 0; + state.latest_price = 0; + Ok(()) + } + + pub fn update_ecdsa(ctx: Context, pyth_message: Vec) -> Result<()> { + // Verify ECDSA signature + let cpi_accounts = pyth_lazer_solana_contract::cpi::accounts::VerifyEcdsaMessage { + payer: ctx.accounts.payer.to_account_info(), + storage: ctx.accounts.pyth_storage.to_account_info(), + treasury: ctx.accounts.pyth_treasury.to_account_info(), + system_program: ctx.accounts.system_program.to_account_info(), + }; + + let cpi_ctx = CpiContext::new( + ctx.accounts.pyth_program.clone(), + cpi_accounts, + ); + + pyth_lazer_solana_contract::cpi::verify_ecdsa_message(cpi_ctx, pyth_message.clone())?; + + // Deserialize and process the message + let pyth_message = LeEcdsaMessage::deserialize_slice(&pyth_message) + .map_err(|_| ErrorCode::InvalidMessage)?; + + let data = PayloadData::deserialize_slice_le(&pyth_message.payload) + .map_err(|_| ErrorCode::InvalidPayload)?; + + apply_update(&mut ctx.accounts.state, &data)?; + + Ok(()) + } +} + +#[derive(Accounts)] +pub struct Initialize<'info> { + #[account(mut)] + pub payer: Signer<'info>, + + #[account( + init, + payer = payer, + space = 8 + std::mem::size_of::(), + seeds = [b"data"], + bump + )] + pub state: Account<'info, State>, + + pub system_program: Program<'info, System>, +} + +#[derive(Accounts)] +pub struct UpdateEcdsa<'info> { + #[account(mut)] + pub payer: Signer<'info>, + + #[account(mut, seeds = [b"data"], bump)] + pub state: Account<'info, State>, + + /// CHECK: This is the Pyth program + #[account(address = pyth_lazer_solana_contract::ID)] + pub pyth_program: AccountInfo<'info>, + + #[account(address = pyth_lazer_solana_contract::STORAGE_ID)] + pub pyth_storage: Account<'info, pyth_lazer_solana_contract::Storage>, + + /// CHECK: This is the Pyth treasury account + #[account(address = pyth_storage.treasury)] + pub pyth_treasury: AccountInfo<'info>, + + pub system_program: Program<'info, System>, +} + +#[account] +pub struct State { + pub price_feed_id: u32, + pub latest_timestamp: u64, + pub latest_price: i64, +} + +#[error_code] +pub enum ErrorCode { + #[msg("Invalid message")] + InvalidMessage, + #[msg("Invalid channel")] + InvalidChannel, + #[msg("Invalid payload")] + InvalidPayload, + #[msg("Invalid payload feed id")] + InvalidPayloadFeedId, + #[msg("Invalid payload property")] + InvalidPayloadProperty, + #[msg("Invalid payload timestamp")] + InvalidPayloadTimestamp, +} + +fn apply_update(state: &mut Account, data: &PayloadData) -> Result<()> { + // Check the channel is what we expect + if data.channel_id != FIXED_RATE_200 { + return Err(ErrorCode::InvalidChannel.into()); + } + + // Check if the timestamp is greater than the current timestamp + if data.timestamp_us.0 <= state.latest_timestamp { + return Err(ErrorCode::InvalidPayloadTimestamp.into()); + } + + // Check the payload has a single feed + if data.feeds.len() != 1 { + return Err(ErrorCode::InvalidPayload.into()); + } + + // Check the feed id is what we expect + if data.feeds[0].feed_id.0 != state.price_feed_id { + return Err(ErrorCode::InvalidPayloadFeedId.into()); + } + + // Check the payload has a single price property + if data.feeds[0].properties.len() != 1 { + return Err(ErrorCode::InvalidPayloadProperty.into()); + } + + // Check the price property is a price + let PayloadPropertyValue::Price(Some(price)) = data.feeds[0].properties[0] else { + return Err(ErrorCode::InvalidPayloadProperty.into()); + }; + + state.latest_price = price.into_inner().into(); + state.latest_timestamp = data.timestamp_us.0; + + Ok(()) +} From 379fd621cfabbaa5ced413319467df7c0757dd70 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Wed, 23 Apr 2025 16:36:20 +0200 Subject: [PATCH 04/12] fix: update non-anchor solana contract --- lazer/solana/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lazer/solana/src/lib.rs b/lazer/solana/src/lib.rs index 698a2c5..6619121 100644 --- a/lazer/solana/src/lib.rs +++ b/lazer/solana/src/lib.rs @@ -189,7 +189,7 @@ pub fn process_update_instruction( let pyth_storage_account = &accounts[3]; let pyth_treasury_account = &accounts[4]; let system_program_account = &accounts[5]; - let instructions_sysvar_account = &accounts[6]; + let pyth_lazer_program_account = &accounts[6]; let (data_pda_key, _data_pda_bump_seed) = Pubkey::find_program_address(&[DATA_PDA_SEED], program_id); @@ -229,7 +229,7 @@ pub fn process_update_instruction( AccountMeta::new_readonly(*pyth_storage_account.key, false), AccountMeta::new(*pyth_treasury_account.key, false), AccountMeta::new_readonly(*system_program_account.key, false), - AccountMeta::new_readonly(*instructions_sysvar_account.key, false), + AccountMeta::new_readonly(*pyth_lazer_program_account.key, false), ], ), &[ @@ -237,7 +237,7 @@ pub fn process_update_instruction( pyth_storage_account.clone(), pyth_treasury_account.clone(), system_program_account.clone(), - instructions_sysvar_account.clone(), + pyth_lazer_program_account.clone(), ], )?; From a5f5878edf62cba13c3517dd137da8ca97a9672d Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Wed, 23 Apr 2025 16:45:45 +0200 Subject: [PATCH 05/12] feat: add ci --- .github/workflows/ci-lazer-anchor.yml | 48 +++++++++++++++++++ .../programs/solana-anchor/src/lib.rs | 2 +- lazer/solana-anchor/tests/solana-anchor.ts | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/ci-lazer-anchor.yml diff --git a/.github/workflows/ci-lazer-anchor.yml b/.github/workflows/ci-lazer-anchor.yml new file mode 100644 index 0000000..0967ccd --- /dev/null +++ b/.github/workflows/ci-lazer-anchor.yml @@ -0,0 +1,48 @@ +name: "Lazer Solana contract test" +on: + push: + branches: + - main + pull_request: + paths: + - lazer/solana-anchor/ + - .github/workflows/ci-lazer-anchor.yml + +jobs: + lazer-anchor-example-test: + name: Lazer Anchor example contract test + runs-on: ubuntu-22.04 + defaults: + run: + working-directory: lazer/solana-anchor/ + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.82.0 + - name: install taplo + run: cargo install --locked taplo-cli@0.9.3 + # Libusb is a build requirement for the node-hid package and so pnpm + # install will fail if this isn't in the build environment and if a + # precompiled binary isn't found. + - name: Install libusb + run: sudo apt-get update && sudo apt-get install -y libusb-1.0-0-dev libudev-dev + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + run_install: true + - name: Install Solana Cli + run: | + sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)" + echo "$HOME/.local/share/solana/install/active_release/bin" >> "$GITHUB_PATH" + - name: Set Solana Cli version + run: agave-install init 1.18.26 + - name: Create Solana key + run: solana-keygen new --no-bip39-passphrase + - name: Install Anchor + run: | + rustup install 1.79.0 + rustup install nightly-2025-04-15 + RUSTFLAGS= cargo +1.79.0 install --git https://github.com/coral-xyz/anchor --tag v0.30.1 --locked anchor-cli + - name: Run anchor tests + run: anchor test diff --git a/lazer/solana-anchor/programs/solana-anchor/src/lib.rs b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs index ab685b6..fd89c4c 100644 --- a/lazer/solana-anchor/programs/solana-anchor/src/lib.rs +++ b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs @@ -5,7 +5,7 @@ use pyth_lazer_solana_contract::protocol::{ router::channel_ids::FIXED_RATE_200, }; -declare_id!("My11111111111111111111111111111111111111111"); +declare_id!("FpmpVrP57C6ADT8d4dQp9TkM1vmxohZJ5WEQQc9RGLPY"); #[program] pub mod solana_anchor { diff --git a/lazer/solana-anchor/tests/solana-anchor.ts b/lazer/solana-anchor/tests/solana-anchor.ts index f8a19b0..bd1f275 100644 --- a/lazer/solana-anchor/tests/solana-anchor.ts +++ b/lazer/solana-anchor/tests/solana-anchor.ts @@ -10,7 +10,7 @@ describe("solana-anchor", () => { it("Is initialized!", async () => { // Add your test here. - const tx = await program.methods.initialize().rpc(); + const tx = await program.methods.initialize(1).rpc(); console.log("Your transaction signature", tx); }); }); From 0f17afa541eb18a5a2e82b3a9351fb276ac98ea9 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Wed, 23 Apr 2025 16:45:53 +0200 Subject: [PATCH 06/12] refactor: format the code --- .../programs/solana-anchor/src/lib.rs | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/lazer/solana-anchor/programs/solana-anchor/src/lib.rs b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs index fd89c4c..cb89f74 100644 --- a/lazer/solana-anchor/programs/solana-anchor/src/lib.rs +++ b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs @@ -1,9 +1,9 @@ use anchor_lang::prelude::*; use pyth_lazer_solana_contract::protocol::{ - message::LeEcdsaMessage, - payload::{PayloadData, PayloadPropertyValue}, - router::channel_ids::FIXED_RATE_200, - }; + message::LeEcdsaMessage, + payload::{PayloadData, PayloadPropertyValue}, + router::channel_ids::FIXED_RATE_200, +}; declare_id!("FpmpVrP57C6ADT8d4dQp9TkM1vmxohZJ5WEQQc9RGLPY"); @@ -28,11 +28,8 @@ pub mod solana_anchor { system_program: ctx.accounts.system_program.to_account_info(), }; - let cpi_ctx = CpiContext::new( - ctx.accounts.pyth_program.clone(), - cpi_accounts, - ); - + let cpi_ctx = CpiContext::new(ctx.accounts.pyth_program.clone(), cpi_accounts); + pyth_lazer_solana_contract::cpi::verify_ecdsa_message(cpi_ctx, pyth_message.clone())?; // Deserialize and process the message @@ -52,7 +49,7 @@ pub mod solana_anchor { pub struct Initialize<'info> { #[account(mut)] pub payer: Signer<'info>, - + #[account( init, payer = payer, @@ -61,7 +58,7 @@ pub struct Initialize<'info> { bump )] pub state: Account<'info, State>, - + pub system_program: Program<'info, System>, } @@ -69,21 +66,21 @@ pub struct Initialize<'info> { pub struct UpdateEcdsa<'info> { #[account(mut)] pub payer: Signer<'info>, - + #[account(mut, seeds = [b"data"], bump)] pub state: Account<'info, State>, - + /// CHECK: This is the Pyth program #[account(address = pyth_lazer_solana_contract::ID)] pub pyth_program: AccountInfo<'info>, - + #[account(address = pyth_lazer_solana_contract::STORAGE_ID)] pub pyth_storage: Account<'info, pyth_lazer_solana_contract::Storage>, - + /// CHECK: This is the Pyth treasury account #[account(address = pyth_storage.treasury)] pub pyth_treasury: AccountInfo<'info>, - + pub system_program: Program<'info, System>, } @@ -105,7 +102,7 @@ pub enum ErrorCode { #[msg("Invalid payload feed id")] InvalidPayloadFeedId, #[msg("Invalid payload property")] - InvalidPayloadProperty, + InvalidPayloadProperty, #[msg("Invalid payload timestamp")] InvalidPayloadTimestamp, } From b9f0c00f2a119cabdc89141f64e5fb01e0e6ab45 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Fri, 25 Apr 2025 09:50:34 +0200 Subject: [PATCH 07/12] fix ci --- .github/workflows/ci-lazer-anchor.yml | 15 +- lazer/solana-anchor/Anchor.toml | 2 +- lazer/solana-anchor/Cargo.lock | 4 +- lazer/solana-anchor/package.json | 5 +- lazer/solana-anchor/pnpm-lock.yaml | 1409 +++++++++++++++++++++++++ lazer/solana-anchor/yarn.lock | 1189 --------------------- package-lock.json | 6 - 7 files changed, 1421 insertions(+), 1209 deletions(-) create mode 100644 lazer/solana-anchor/pnpm-lock.yaml delete mode 100644 lazer/solana-anchor/yarn.lock delete mode 100644 package-lock.json diff --git a/.github/workflows/ci-lazer-anchor.yml b/.github/workflows/ci-lazer-anchor.yml index 0967ccd..4b33020 100644 --- a/.github/workflows/ci-lazer-anchor.yml +++ b/.github/workflows/ci-lazer-anchor.yml @@ -1,4 +1,4 @@ -name: "Lazer Solana contract test" +name: "Lazer Anchor contract test" on: push: branches: @@ -20,16 +20,13 @@ jobs: - uses: actions-rust-lang/setup-rust-toolchain@v1 with: toolchain: 1.82.0 - - name: install taplo - run: cargo install --locked taplo-cli@0.9.3 - # Libusb is a build requirement for the node-hid package and so pnpm - # install will fail if this isn't in the build environment and if a - # precompiled binary isn't found. - - name: Install libusb - run: sudo apt-get update && sudo apt-get install -y libusb-1.0-0-dev libudev-dev + - uses: actions/setup-node@v4 + with: + node-version: 22 - uses: pnpm/action-setup@v4 name: Install pnpm with: + version: 10 run_install: true - name: Install Solana Cli run: | @@ -45,4 +42,4 @@ jobs: rustup install nightly-2025-04-15 RUSTFLAGS= cargo +1.79.0 install --git https://github.com/coral-xyz/anchor --tag v0.30.1 --locked anchor-cli - name: Run anchor tests - run: anchor test + run: pnpm run anchor:test diff --git a/lazer/solana-anchor/Anchor.toml b/lazer/solana-anchor/Anchor.toml index 275e93d..46f76c5 100644 --- a/lazer/solana-anchor/Anchor.toml +++ b/lazer/solana-anchor/Anchor.toml @@ -13,4 +13,4 @@ cluster = "Localnet" wallet = "~/.config/solana/id.json" [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" +test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" diff --git a/lazer/solana-anchor/Cargo.lock b/lazer/solana-anchor/Cargo.lock index ac22b25..1a48f48 100644 --- a/lazer/solana-anchor/Cargo.lock +++ b/lazer/solana-anchor/Cargo.lock @@ -1272,9 +1272,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] diff --git a/lazer/solana-anchor/package.json b/lazer/solana-anchor/package.json index 04daffe..cb692d5 100644 --- a/lazer/solana-anchor/package.json +++ b/lazer/solana-anchor/package.json @@ -1,8 +1,9 @@ { - "license": "ISC", + "license": "ISC", "scripts": { "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", - "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" + "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check", + "test:anchor": "CARGO_TARGET_DIR=\"$PWD/target\" RUSTUP_TOOLCHAIN=nightly-2025-04-15 anchor test" }, "dependencies": { "@coral-xyz/anchor": "^0.30.1" diff --git a/lazer/solana-anchor/pnpm-lock.yaml b/lazer/solana-anchor/pnpm-lock.yaml new file mode 100644 index 0000000..9061f2a --- /dev/null +++ b/lazer/solana-anchor/pnpm-lock.yaml @@ -0,0 +1,1409 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@coral-xyz/anchor': + specifier: ^0.30.1 + version: 0.30.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + devDependencies: + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.6 + '@types/chai': + specifier: ^4.3.0 + version: 4.3.20 + '@types/mocha': + specifier: ^9.0.0 + version: 9.1.1 + chai: + specifier: ^4.3.4 + version: 4.5.0 + mocha: + specifier: ^9.0.3 + version: 9.2.2 + prettier: + specifier: ^2.6.2 + version: 2.8.8 + ts-mocha: + specifier: ^10.0.0 + version: 10.1.0(mocha@9.2.2) + typescript: + specifier: ^4.3.5 + version: 4.9.5 + +packages: + + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + engines: {node: '>=6.9.0'} + + '@coral-xyz/anchor-errors@0.30.1': + resolution: {integrity: sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ==} + engines: {node: '>=10'} + + '@coral-xyz/anchor@0.30.1': + resolution: {integrity: sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ==} + engines: {node: '>=11'} + + '@coral-xyz/borsh@0.30.1': + resolution: {integrity: sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ==} + engines: {node: '>=10'} + peerDependencies: + '@solana/web3.js': ^1.68.0 + + '@noble/curves@1.9.0': + resolution: {integrity: sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.1.0': + resolution: {integrity: sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5' + + '@solana/codecs-numbers@2.1.0': + resolution: {integrity: sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5' + + '@solana/errors@2.1.0': + resolution: {integrity: sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5' + + '@solana/web3.js@1.98.2': + resolution: {integrity: sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A==} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@types/bn.js@5.1.6': + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mocha@9.1.1': + resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@22.15.2': + resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-layout@1.2.2: + resolution: {integrity: sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==} + engines: {node: '>=4.5'} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + crypto-hash@1.3.0: + resolution: {integrity: sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==} + engines: {node: '>=8'} + + debug@4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.1: + resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mocha@9.2.2: + resolution: {integrity: sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + rpc-websockets@9.1.1: + resolution: {integrity: sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-mocha@10.1.0: + resolution: {integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==} + engines: {node: '>= 6.X.X'} + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X + + ts-node@7.0.1: + resolution: {integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==} + engines: {node: '>=4.2.0'} + hasBin: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + workerpool@6.2.0: + resolution: {integrity: sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@2.0.0: + resolution: {integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==} + engines: {node: '>=4'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@coral-xyz/anchor-errors@0.30.1': {} + + '@coral-xyz/anchor@0.30.1(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + dependencies: + '@coral-xyz/anchor-errors': 0.30.1 + '@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)) + '@noble/hashes': 1.8.0 + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + bs58: 4.0.1 + buffer-layout: 1.2.2 + camelcase: 6.3.0 + cross-fetch: 3.2.0 + crypto-hash: 1.3.0 + eventemitter3: 4.0.7 + pako: 2.1.0 + snake-case: 3.0.4 + superstruct: 0.15.5 + toml: 3.0.0 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@coral-xyz/borsh@0.30.1(@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10))': + dependencies: + '@solana/web3.js': 1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10) + bn.js: 5.2.1 + buffer-layout: 1.2.2 + + '@noble/curves@1.9.0': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.1.0(typescript@4.9.5)': + dependencies: + '@solana/errors': 2.1.0(typescript@4.9.5) + typescript: 4.9.5 + + '@solana/codecs-numbers@2.1.0(typescript@4.9.5)': + dependencies: + '@solana/codecs-core': 2.1.0(typescript@4.9.5) + '@solana/errors': 2.1.0(typescript@4.9.5) + typescript: 4.9.5 + + '@solana/errors@2.1.0(typescript@4.9.5)': + dependencies: + chalk: 5.4.1 + commander: 13.1.0 + typescript: 4.9.5 + + '@solana/web3.js@1.98.2(bufferutil@4.0.9)(typescript@4.9.5)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.27.0 + '@noble/curves': 1.9.0 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.1.0(typescript@4.9.5) + agentkeepalive: 4.6.0 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.1.1 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@types/bn.js@5.1.6': + dependencies: + '@types/node': 22.15.2 + + '@types/chai@4.3.20': {} + + '@types/connect@3.4.38': + dependencies: + '@types/node': 12.20.55 + + '@types/json5@0.0.29': + optional: true + + '@types/mocha@9.1.1': {} + + '@types/node@12.20.55': {} + + '@types/node@22.15.2': + dependencies: + undici-types: 6.21.0 + + '@types/uuid@8.3.4': {} + + '@types/ws@7.4.7': + dependencies: + '@types/node': 12.20.55 + + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.15.2 + + '@ungap/promise-all-settled@1.1.2': {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + ansi-colors@4.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + arrify@1.0.1: {} + + assertion-error@1.1.0: {} + + balanced-match@1.0.2: {} + + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + bn.js@5.2.1: {} + + borsh@0.7.0: + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + + buffer-from@1.1.2: {} + + buffer-layout@1.2.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + camelcase@6.3.0: {} + + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + commander@13.1.0: {} + + commander@2.20.3: {} + + concat-map@0.0.1: {} + + cross-fetch@3.2.0: + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + crypto-hash@1.3.0: {} + + debug@4.3.3(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + delay@5.0.0: {} + + diff@3.5.0: {} + + diff@5.0.0: {} + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + emoji-regex@8.0.0: {} + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + growl@1.10.5: {} + + has-flag@4.0.0: {} + + he@1.2.0: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + + isexe@2.0.0: {} + + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + optional: true + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + make-error@1.3.6: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@4.2.1: + dependencies: + brace-expansion: 1.1.11 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mocha@9.2.2: + dependencies: + '@ungap/promise-all-settled': 1.1.2 + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.3(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 4.2.1 + ms: 2.1.3 + nanoid: 3.3.1 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + which: 2.0.2 + workerpool: 6.2.0 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nanoid@3.3.1: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.4: + optional: true + + normalize-path@3.0.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + pako@2.1.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + pathval@1.1.1: {} + + picomatch@2.3.1: {} + + prettier@2.8.8: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + regenerator-runtime@0.14.1: {} + + require-directory@2.1.1: {} + + rpc-websockets@9.1.1: + dependencies: + '@swc/helpers': 0.5.17 + '@types/uuid': 8.3.4 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + + serialize-javascript@6.0.0: + dependencies: + randombytes: 2.1.0 + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-bom@3.0.0: + optional: true + + strip-json-comments@3.1.1: {} + + superstruct@0.15.5: {} + + superstruct@2.0.2: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + text-encoding-utf-8@1.0.2: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toml@3.0.0: {} + + tr46@0.0.3: {} + + ts-mocha@10.1.0(mocha@9.2.2): + dependencies: + mocha: 9.2.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 + + ts-node@7.0.1: + dependencies: + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.21 + yn: 2.0.0 + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + optional: true + + tslib@2.8.1: {} + + type-detect@4.1.0: {} + + typescript@4.9.5: {} + + undici-types@6.21.0: {} + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + uuid@8.3.2: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + workerpool@6.2.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + y18n@5.0.8: {} + + yargs-parser@20.2.4: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + + yn@2.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/lazer/solana-anchor/yarn.lock b/lazer/solana-anchor/yarn.lock deleted file mode 100644 index 252da56..0000000 --- a/lazer/solana-anchor/yarn.lock +++ /dev/null @@ -1,1189 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/runtime@^7.25.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - -"@coral-xyz/anchor-errors@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz#bdfd3a353131345244546876eb4afc0e125bec30" - integrity sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ== - -"@coral-xyz/anchor@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.30.1.tgz#17f3e9134c28cd0ea83574c6bab4e410bcecec5d" - integrity sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ== - dependencies: - "@coral-xyz/anchor-errors" "^0.30.1" - "@coral-xyz/borsh" "^0.30.1" - "@noble/hashes" "^1.3.1" - "@solana/web3.js" "^1.68.0" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.2" - camelcase "^6.3.0" - cross-fetch "^3.1.5" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - pako "^2.0.3" - snake-case "^3.0.4" - superstruct "^0.15.4" - toml "^3.0.0" - -"@coral-xyz/borsh@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.30.1.tgz#869d8833abe65685c72e9199b8688477a4f6b0e3" - integrity sha512-aaxswpPrCFKl8vZTbxLssA2RvwX2zmKLlRCIktJOwW+VpVwYtXRtlWiIP+c2pPRKneiTiWCN2GEMSH9j1zTlWQ== - dependencies: - bn.js "^5.1.2" - buffer-layout "^1.2.0" - -"@noble/curves@^1.4.2": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.0.tgz#13e0ca8be4a0ce66c113693a94514e5599f40cfc" - integrity sha512-7YDlXiNMdO1YZeH6t/kvopHHbIZzlxrCV9WLqCY6QhcXOoXiNCMDqJIglZ9Yjx5+w7Dz30TITFrlTjnRg7sKEg== - dependencies: - "@noble/hashes" "1.8.0" - -"@noble/hashes@1.8.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - -"@solana/buffer-layout@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" - integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== - dependencies: - buffer "~6.0.3" - -"@solana/codecs-core@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.1.0.tgz#79ac28fbcde4a09d88f4360777ceeb30ec14e3f1" - integrity sha512-SR7pKtmJBg2mhmkel2NeHA1pz06QeQXdMv8WJoIR9m8F/hw80K/612uaYbwTt2nkK0jg/Qn/rNSd7EcJ4SBGjw== - dependencies: - "@solana/errors" "2.1.0" - -"@solana/codecs-numbers@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.1.0.tgz#f6a1a9009ace56238d8d9478dd5d375b09c6342a" - integrity sha512-XMu4yw5iCgQnMKsxSWPPOrGgtaohmupN3eyAtYv3K3C/MJEc5V90h74k5B1GUCiHvcrdUDO9RclNjD9lgbjFag== - dependencies: - "@solana/codecs-core" "2.1.0" - "@solana/errors" "2.1.0" - -"@solana/errors@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.1.0.tgz#1a139965fcb8bec610cc1c6194d53d169f4b5852" - integrity sha512-l+GxAv0Ar4d3c3PlZdA9G++wFYZREEbbRyAFP8+n8HSg0vudCuzogh/13io6hYuUhG/9Ve8ARZNamhV7UScKNw== - dependencies: - chalk "^5.3.0" - commander "^13.1.0" - -"@solana/web3.js@^1.68.0": - version "1.98.1" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.98.1.tgz#9237a5dcded21b323672aa503a0db1c3d18ff841" - integrity sha512-gRAq1YPbfSDAbmho4kY7P/8iLIjMWXAzBJdP9iENFR+dFQSBSueHzjK/ou8fxhqHP9j+J4Msl4p/oDemFcIjlg== - dependencies: - "@babel/runtime" "^7.25.0" - "@noble/curves" "^1.4.2" - "@noble/hashes" "^1.4.0" - "@solana/buffer-layout" "^4.0.1" - "@solana/codecs-numbers" "^2.1.0" - agentkeepalive "^4.5.0" - bn.js "^5.2.1" - borsh "^0.7.0" - bs58 "^4.0.1" - buffer "6.0.3" - fast-stable-stringify "^1.0.0" - jayson "^4.1.1" - node-fetch "^2.7.0" - rpc-websockets "^9.0.2" - superstruct "^2.0.2" - -"@swc/helpers@^0.5.11": - version "0.5.17" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.17.tgz#5a7be95ac0f0bf186e7e6e890e7a6f6cda6ce971" - integrity sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A== - dependencies: - tslib "^2.8.0" - -"@types/bn.js@^5.1.0": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" - integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== - dependencies: - "@types/node" "*" - -"@types/chai@^4.3.0": - version "4.3.20" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" - integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== - -"@types/connect@^3.4.33": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/mocha@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== - -"@types/node@*": - version "22.14.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f" - integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== - dependencies: - undici-types "~6.21.0" - -"@types/node@^12.12.54": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/uuid@^8.3.4": - version "8.3.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" - integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== - -"@types/ws@^7.4.4": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - -"@types/ws@^8.2.2": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" - integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== - dependencies: - "@types/node" "*" - -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - -agentkeepalive@^4.5.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" - integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== - dependencies: - humanize-ms "^1.2.1" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" - integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -borsh@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" - integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -buffer-from@^1.0.0, buffer-from@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-layout@^1.2.0, buffer-layout@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" - integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== - -buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bufferutil@^4.0.1: - version "4.0.9" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.9.tgz#6e81739ad48a95cad45a279588e13e95e24a800a" - integrity sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw== - dependencies: - node-gyp-build "^4.3.0" - -camelcase@^6.0.0, camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -chai@^4.3.4: - version "4.5.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" - integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.1.0" - -chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.3.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" - integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== - -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" - integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== - -commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -cross-fetch@^3.1.5: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" - integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== - dependencies: - node-fetch "^2.7.0" - -crypto-hash@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" - integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== - -debug@4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -deep-eql@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" - integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== - dependencies: - type-detect "^4.0.0" - -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^3.1.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== - dependencies: - es6-promise "^4.0.3" - -escalade@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eventemitter3@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -eyes@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== - -fast-stable-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" - integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -jayson@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.2.0.tgz#b71762393fa40bc9637eaf734ca6f40d3b8c0c93" - integrity sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg== - dependencies: - "@types/connect" "^3.4.33" - "@types/node" "^12.12.54" - "@types/ws" "^7.4.4" - commander "^2.20.3" - delay "^5.0.0" - es6-promisify "^5.0.0" - eyes "^0.1.8" - isomorphic-ws "^4.0.1" - json-stringify-safe "^5.0.1" - stream-json "^1.9.1" - uuid "^8.3.2" - ws "^7.5.10" - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loupe@^2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -minimatch@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" - integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mocha@^9.0.3: - version "9.2.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" - integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.3" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "4.2.1" - ms "2.1.3" - nanoid "3.3.1" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.3.0: - version "4.8.4" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" - integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -pako@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -prettier@^2.6.2: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -rpc-websockets@^9.0.2: - version "9.1.1" - resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.1.1.tgz#5764336f3623ee1c5cc8653b7335183e3c0c78bd" - integrity sha512-1IXGM/TfPT6nfYMIXkJdzn+L4JEsmb0FL1O2OBjaH03V3yuUDdKFulGLMFG6ErV+8pZ5HVC0limve01RyO+saA== - dependencies: - "@swc/helpers" "^0.5.11" - "@types/uuid" "^8.3.4" - "@types/ws" "^8.2.2" - buffer "^6.0.3" - eventemitter3 "^5.0.1" - uuid "^8.3.2" - ws "^8.5.0" - optionalDependencies: - bufferutil "^4.0.1" - utf-8-validate "^5.0.2" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -stream-chain@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" - integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== - -stream-json@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.9.1.tgz#e3fec03e984a503718946c170db7d74556c2a187" - integrity sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw== - dependencies: - stream-chain "^2.2.5" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -superstruct@^0.15.4: - version "0.15.5" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" - integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== - -superstruct@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-2.0.2.tgz#3f6d32fbdc11c357deff127d591a39b996300c54" - integrity sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A== - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toml@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" - integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-mocha@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-10.1.0.tgz#17a1c055f5f7733fd82447c4420740db87221bc8" - integrity sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA== - dependencies: - ts-node "7.0.1" - optionalDependencies: - tsconfig-paths "^3.5.0" - -ts-node@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" - integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw== - dependencies: - arrify "^1.0.0" - buffer-from "^1.1.0" - diff "^3.1.0" - make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.5.6" - yn "^2.0.0" - -tsconfig-paths@^3.5.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.0.3, tslib@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -type-detect@^4.0.0, type-detect@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" - integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== - -typescript@^4.3.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -undici-types@~6.21.0: - version "6.21.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" - integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== - -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.5.10: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -ws@^8.5.0: - version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" - integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yn@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" - integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6e4dcf2..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "pyth-examples", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} From 79a6131db2114e2aba12637bd7a87f7c20c486ec Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Fri, 25 Apr 2025 12:48:10 +0200 Subject: [PATCH 08/12] trigger ci From 4e042dab7ddb2cb7f891a0157d92b275ad583022 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Fri, 25 Apr 2025 19:20:51 +0200 Subject: [PATCH 09/12] fix: add cwd to pnpm action --- .github/workflows/ci-lazer-anchor.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-lazer-anchor.yml b/.github/workflows/ci-lazer-anchor.yml index 4b33020..e54c8e9 100644 --- a/.github/workflows/ci-lazer-anchor.yml +++ b/.github/workflows/ci-lazer-anchor.yml @@ -27,7 +27,9 @@ jobs: name: Install pnpm with: version: 10 - run_install: true + run_install: | + recursive: false + cwd: lazer/solana-anchor/ - name: Install Solana Cli run: | sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)" From 1e7797b30b5528f2e8795f4887faf6e43f59007f Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Mon, 28 Apr 2025 08:19:47 +0200 Subject: [PATCH 10/12] fix ci again --- .github/workflows/ci-lazer-anchor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-lazer-anchor.yml b/.github/workflows/ci-lazer-anchor.yml index e54c8e9..149f0fe 100644 --- a/.github/workflows/ci-lazer-anchor.yml +++ b/.github/workflows/ci-lazer-anchor.yml @@ -44,4 +44,4 @@ jobs: rustup install nightly-2025-04-15 RUSTFLAGS= cargo +1.79.0 install --git https://github.com/coral-xyz/anchor --tag v0.30.1 --locked anchor-cli - name: Run anchor tests - run: pnpm run anchor:test + run: pnpm run test:anchor From 622cb2246d4273bfd90915f1d05be8e2bc66b2b5 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Mon, 28 Apr 2025 15:51:51 +0200 Subject: [PATCH 11/12] add test --- lazer/solana-anchor/Anchor.toml | 5 + lazer/solana-anchor/Cargo.lock | 8 +- .../fixtures/pyth_lazer_solana_contract.so | Bin 0 -> 285048 bytes .../fixtures/pyth_lazer_solana_contract.ts | 931 ++++++++++++++++++ .../programs/solana-anchor/Cargo.toml | 3 +- .../programs/solana-anchor/src/lib.rs | 4 +- lazer/solana-anchor/tests/solana-anchor.ts | 73 +- 7 files changed, 1011 insertions(+), 13 deletions(-) create mode 100755 lazer/solana-anchor/fixtures/pyth_lazer_solana_contract.so create mode 100644 lazer/solana-anchor/fixtures/pyth_lazer_solana_contract.ts diff --git a/lazer/solana-anchor/Anchor.toml b/lazer/solana-anchor/Anchor.toml index 46f76c5..8616775 100644 --- a/lazer/solana-anchor/Anchor.toml +++ b/lazer/solana-anchor/Anchor.toml @@ -14,3 +14,8 @@ wallet = "~/.config/solana/id.json" [scripts] test = "pnpm ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" + +[test] +[[test.genesis]] +address = "pytd2yyk641x7ak7mkaasSJVXh6YYZnC7wTmtgAyxPt" +program = "fixtures/pyth_lazer_solana_contract.so" \ No newline at end of file diff --git a/lazer/solana-anchor/Cargo.lock b/lazer/solana-anchor/Cargo.lock index 1a48f48..4b6c779 100644 --- a/lazer/solana-anchor/Cargo.lock +++ b/lazer/solana-anchor/Cargo.lock @@ -1322,8 +1322,7 @@ dependencies = [ [[package]] name = "pyth-lazer-protocol" version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9bdf4e2ba853a8b437309487542e742c7d094d8db189db194cb538f2be02ecd" +source = "git+https://github.com/pyth-network/pyth-crosschain.git?branch=lazer/add-writable-annotation-anchor#80cb2952611a2f7f906a16ee506e05cd050383e9" dependencies = [ "anyhow", "base64 0.22.1", @@ -1338,9 +1337,8 @@ dependencies = [ [[package]] name = "pyth-lazer-solana-contract" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ada5f33dc3f560a3c08910b971bd0c3e5ca8bed1e07700bc95ea8b330339e98" +version = "0.4.2" +source = "git+https://github.com/pyth-network/pyth-crosschain.git?branch=lazer/add-writable-annotation-anchor#80cb2952611a2f7f906a16ee506e05cd050383e9" dependencies = [ "anchor-lang", "bytemuck", diff --git a/lazer/solana-anchor/fixtures/pyth_lazer_solana_contract.so b/lazer/solana-anchor/fixtures/pyth_lazer_solana_contract.so new file mode 100755 index 0000000000000000000000000000000000000000..75bbf669858d7047b9e24904c63f97135d36cc09 GIT binary patch literal 285048 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 EUnBB>!vFvP literal 0 HcmV?d00001 diff --git a/lazer/solana-anchor/fixtures/pyth_lazer_solana_contract.ts b/lazer/solana-anchor/fixtures/pyth_lazer_solana_contract.ts new file mode 100644 index 0000000..e7c3a32 --- /dev/null +++ b/lazer/solana-anchor/fixtures/pyth_lazer_solana_contract.ts @@ -0,0 +1,931 @@ +/** + * Program IDL in camelCase format in order to be used in JS/TS. + * + * Note that this is only a type helper and is not the actual IDL. The original + * IDL can be found at `target/idl/pyth_lazer_solana_contract.json`. + */ +export type PythLazerSolanaContract = { + "address": "pytd2yyk641x7ak7mkaasSJVXh6YYZnC7wTmtgAyxPt", + "metadata": { + "name": "pythLazerSolanaContract", + "version": "0.4.1", + "spec": "0.1.0", + "description": "Pyth Lazer Solana contract and SDK.", + "repository": "https://github.com/pyth-network/pyth-crosschain" + }, + "instructions": [ + { + "name": "initialize", + "discriminator": [ + 175, + 175, + 109, + 31, + 13, + 152, + 155, + 237 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "storage", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + }, + { + "name": "systemProgram", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "topAuthority", + "type": "pubkey" + }, + { + "name": "treasury", + "type": "pubkey" + } + ] + }, + { + "name": "update", + "discriminator": [ + 219, + 200, + 88, + 176, + 158, + 63, + 253, + 127 + ], + "accounts": [ + { + "name": "topAuthority", + "signer": true, + "relations": [ + "storage" + ] + }, + { + "name": "storage", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + } + ], + "args": [ + { + "name": "trustedSigner", + "type": "pubkey" + }, + { + "name": "expiresAt", + "type": "i64" + } + ] + }, + { + "name": "updateEcdsaSigner", + "discriminator": [ + 22, + 110, + 222, + 141, + 112, + 219, + 27, + 200 + ], + "accounts": [ + { + "name": "topAuthority", + "signer": true, + "relations": [ + "storage" + ] + }, + { + "name": "storage", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + } + ], + "args": [ + { + "name": "trustedSigner", + "type": { + "array": [ + "u8", + 20 + ] + } + }, + { + "name": "expiresAt", + "type": "i64" + } + ] + }, + { + "name": "verifyEcdsaMessage", + "discriminator": [ + 207, + 170, + 89, + 179, + 216, + 67, + 129, + 146 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "storage", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + }, + { + "name": "treasury", + "relations": [ + "storage" + ] + }, + { + "name": "systemProgram", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "messageData", + "type": "bytes" + } + ] + }, + { + "name": "verifyMessage", + "docs": [ + "Verifies a ed25519 signature on Solana by checking that the transaction contains", + "a correct call to the built-in `ed25519_program`.", + "", + "- `message_data` is the signed message that is being verified.", + "- `ed25519_instruction_index` is the index of the `ed25519_program` instruction", + "within the transaction. This instruction must precede the current instruction.", + "- `signature_index` is the index of the signature within the inputs to the `ed25519_program`.", + "- `message_offset` is the offset of the signed message within the", + "input data for the current instruction." + ], + "discriminator": [ + 180, + 193, + 120, + 55, + 189, + 135, + 203, + 83 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "storage", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + }, + { + "name": "treasury", + "relations": [ + "storage" + ] + }, + { + "name": "systemProgram", + "address": "11111111111111111111111111111111" + }, + { + "name": "instructionsSysvar", + "docs": [ + "(e.g. in `sysvar::instructions::load_instruction_at_checked`).", + "This account is not usable with anchor's `Program` account type because it's not executable." + ] + } + ], + "args": [ + { + "name": "messageData", + "type": "bytes" + }, + { + "name": "ed25519InstructionIndex", + "type": "u16" + }, + { + "name": "signatureIndex", + "type": "u8" + } + ], + "returns": { + "defined": { + "name": "verifiedMessage" + } + } + } + ], + "accounts": [ + { + "name": "storage", + "discriminator": [ + 209, + 117, + 255, + 185, + 196, + 175, + 68, + 9 + ] + } + ], + "types": [ + { + "name": "storage", + "type": { + "kind": "struct", + "fields": [ + { + "name": "topAuthority", + "type": "pubkey" + }, + { + "name": "treasury", + "type": "pubkey" + }, + { + "name": "singleUpdateFeeInLamports", + "type": "u64" + }, + { + "name": "numTrustedSigners", + "type": "u8" + }, + { + "name": "trustedSigners", + "type": { + "array": [ + { + "defined": { + "name": "trustedSignerInfo", + "generics": [ + { + "kind": "type", + "type": "pubkey" + } + ] + } + }, + 5 + ] + } + }, + { + "name": "numTrustedEcdsaSigners", + "type": "u8" + }, + { + "name": "trustedEcdsaSigners", + "type": { + "array": [ + { + "defined": { + "name": "trustedSignerInfo", + "generics": [ + { + "kind": "type", + "type": { + "array": [ + "u8", + 20 + ] + } + } + ] + } + }, + 2 + ] + } + }, + { + "name": "extraSpace", + "type": { + "array": [ + "u8", + 43 + ] + } + } + ] + } + }, + { + "name": "trustedSignerInfo", + "generics": [ + { + "kind": "type", + "name": "t" + } + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pubkey", + "type": { + "generic": "t" + } + }, + { + "name": "expiresAt", + "type": "i64" + } + ] + } + }, + { + "name": "verifiedMessage", + "docs": [ + "A message with a verified ed25519 signature." + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "publicKey", + "docs": [ + "Public key that signed the message." + ], + "type": "pubkey" + }, + { + "name": "payload", + "docs": [ + "Signed message payload." + ], + "type": "bytes" + } + ] + } + } + ] +}; + +export const IDL: PythLazerSolanaContract = { + "address": "pytd2yyk641x7ak7mkaasSJVXh6YYZnC7wTmtgAyxPt", + "metadata": { + "name": "pythLazerSolanaContract", + "version": "0.4.1", + "spec": "0.1.0", + "description": "Pyth Lazer Solana contract and SDK.", + "repository": "https://github.com/pyth-network/pyth-crosschain" + }, + "instructions": [ + { + "name": "initialize", + "discriminator": [ + 175, + 175, + 109, + 31, + 13, + 152, + 155, + 237 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "storage", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + }, + { + "name": "systemProgram", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "topAuthority", + "type": "pubkey" + }, + { + "name": "treasury", + "type": "pubkey" + } + ] + }, + { + "name": "update", + "discriminator": [ + 219, + 200, + 88, + 176, + 158, + 63, + 253, + 127 + ], + "accounts": [ + { + "name": "topAuthority", + "signer": true, + "relations": [ + "storage" + ] + }, + { + "name": "storage", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + } + ], + "args": [ + { + "name": "trustedSigner", + "type": "pubkey" + }, + { + "name": "expiresAt", + "type": "i64" + } + ] + }, + { + "name": "updateEcdsaSigner", + "discriminator": [ + 22, + 110, + 222, + 141, + 112, + 219, + 27, + 200 + ], + "accounts": [ + { + "name": "topAuthority", + "signer": true, + "relations": [ + "storage" + ] + }, + { + "name": "storage", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + } + ], + "args": [ + { + "name": "trustedSigner", + "type": { + "array": [ + "u8", + 20 + ] + } + }, + { + "name": "expiresAt", + "type": "i64" + } + ] + }, + { + "name": "verifyEcdsaMessage", + "discriminator": [ + 207, + 170, + 89, + 179, + 216, + 67, + 129, + 146 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "storage", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + }, + { + "name": "treasury", + "relations": [ + "storage" + ] + }, + { + "name": "systemProgram", + "address": "11111111111111111111111111111111" + } + ], + "args": [ + { + "name": "messageData", + "type": "bytes" + } + ] + }, + { + "name": "verifyMessage", + "docs": [ + "Verifies a ed25519 signature on Solana by checking that the transaction contains", + "a correct call to the built-in `ed25519_program`.", + "", + "- `message_data` is the signed message that is being verified.", + "- `ed25519_instruction_index` is the index of the `ed25519_program` instruction", + "within the transaction. This instruction must precede the current instruction.", + "- `signature_index` is the index of the signature within the inputs to the `ed25519_program`.", + "- `message_offset` is the offset of the signed message within the", + "input data for the current instruction." + ], + "discriminator": [ + 180, + 193, + 120, + 55, + 189, + 135, + 203, + 83 + ], + "accounts": [ + { + "name": "payer", + "writable": true, + "signer": true + }, + { + "name": "storage", + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 116, + 111, + 114, + 97, + 103, + 101 + ] + } + ] + } + }, + { + "name": "treasury", + "relations": [ + "storage" + ] + }, + { + "name": "systemProgram", + "address": "11111111111111111111111111111111" + }, + { + "name": "instructionsSysvar", + "docs": [ + "(e.g. in `sysvar::instructions::load_instruction_at_checked`).", + "This account is not usable with anchor's `Program` account type because it's not executable." + ] + } + ], + "args": [ + { + "name": "messageData", + "type": "bytes" + }, + { + "name": "ed25519InstructionIndex", + "type": "u16" + }, + { + "name": "signatureIndex", + "type": "u8" + } + ], + "returns": { + "defined": { + "name": "verifiedMessage" + } + } + } + ], + "accounts": [ + { + "name": "storage", + "discriminator": [ + 209, + 117, + 255, + 185, + 196, + 175, + 68, + 9 + ] + } + ], + "types": [ + { + "name": "storage", + "type": { + "kind": "struct", + "fields": [ + { + "name": "topAuthority", + "type": "pubkey" + }, + { + "name": "treasury", + "type": "pubkey" + }, + { + "name": "singleUpdateFeeInLamports", + "type": "u64" + }, + { + "name": "numTrustedSigners", + "type": "u8" + }, + { + "name": "trustedSigners", + "type": { + "array": [ + { + "defined": { + "name": "trustedSignerInfo", + "generics": [ + { + "kind": "type", + "type": "pubkey" + } + ] + } + }, + 5 + ] + } + }, + { + "name": "numTrustedEcdsaSigners", + "type": "u8" + }, + { + "name": "trustedEcdsaSigners", + "type": { + "array": [ + { + "defined": { + "name": "trustedSignerInfo", + "generics": [ + { + "kind": "type", + "type": { + "array": [ + "u8", + 20 + ] + } + } + ] + } + }, + 2 + ] + } + }, + { + "name": "extraSpace", + "type": { + "array": [ + "u8", + 43 + ] + } + } + ] + } + }, + { + "name": "trustedSignerInfo", + "generics": [ + { + "kind": "type", + "name": "t" + } + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "pubkey", + "type": { + "generic": "t" + } + }, + { + "name": "expiresAt", + "type": "i64" + } + ] + } + }, + { + "name": "verifiedMessage", + "docs": [ + "A message with a verified ed25519 signature." + ], + "type": { + "kind": "struct", + "fields": [ + { + "name": "publicKey", + "docs": [ + "Public key that signed the message." + ], + "type": "pubkey" + }, + { + "name": "payload", + "docs": [ + "Signed message payload." + ], + "type": "bytes" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/lazer/solana-anchor/programs/solana-anchor/Cargo.toml b/lazer/solana-anchor/programs/solana-anchor/Cargo.toml index c4c3fec..a94eb83 100644 --- a/lazer/solana-anchor/programs/solana-anchor/Cargo.toml +++ b/lazer/solana-anchor/programs/solana-anchor/Cargo.toml @@ -18,4 +18,5 @@ idl-build = ["anchor-lang/idl-build"] [dependencies] anchor-lang = "0.30.1" -pyth-lazer-solana-contract = { version = "0.4.1", features = ["no-entrypoint", "cpi"] } +# pyth-lazer-solana-contract = { version = "0.4.1", features = ["no-entrypoint", "cpi"] } +pyth-lazer-solana-contract = { git = "https://github.com/pyth-network/pyth-crosschain.git", branch = "lazer/add-writable-annotation-anchor", features = ["no-entrypoint", "cpi"] } diff --git a/lazer/solana-anchor/programs/solana-anchor/src/lib.rs b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs index cb89f74..5a64c4e 100644 --- a/lazer/solana-anchor/programs/solana-anchor/src/lib.rs +++ b/lazer/solana-anchor/programs/solana-anchor/src/lib.rs @@ -77,8 +77,8 @@ pub struct UpdateEcdsa<'info> { #[account(address = pyth_lazer_solana_contract::STORAGE_ID)] pub pyth_storage: Account<'info, pyth_lazer_solana_contract::Storage>, - /// CHECK: This is the Pyth treasury account - #[account(address = pyth_storage.treasury)] + /// CHECK: This is the Pyth treasury account and the address is checked in the cpi + #[account(mut)] pub pyth_treasury: AccountInfo<'info>, pub system_program: Program<'info, System>, diff --git a/lazer/solana-anchor/tests/solana-anchor.ts b/lazer/solana-anchor/tests/solana-anchor.ts index bd1f275..2512ba9 100644 --- a/lazer/solana-anchor/tests/solana-anchor.ts +++ b/lazer/solana-anchor/tests/solana-anchor.ts @@ -1,16 +1,79 @@ import * as anchor from "@coral-xyz/anchor"; import { Program } from "@coral-xyz/anchor"; import { SolanaAnchor } from "../target/types/solana_anchor"; +import { PythLazerSolanaContract, IDL as PYTH_LAZER_SOLANA_CONTRACT_IDL } from "../fixtures/pyth_lazer_solana_contract"; +import { PublicKey, SystemProgram, Keypair } from "@solana/web3.js"; +import { Buffer } from "buffer"; +import * as assert from "assert"; +import { BN } from "bn.js"; + +async function setupPythLazerContract(provider: anchor.AnchorProvider) { + // Create a treasury account + const treasury = Keypair.generate(); + + const createTreasuryIx = SystemProgram.createAccount({ + fromPubkey: provider.wallet.publicKey, + newAccountPubkey: treasury.publicKey, + lamports: 10_000_000, // Large enough to not need to add rent + space: 0, + programId: SystemProgram.programId, + }); + + await provider.sendAndConfirm( + new anchor.web3.Transaction().add(createTreasuryIx), + [treasury] + ); + + // Initialize the contract + const pythLazerContract = new Program( + PYTH_LAZER_SOLANA_CONTRACT_IDL, + provider + ); + + await pythLazerContract.methods.initialize(provider.wallet.publicKey, treasury.publicKey).accounts({ + payer: provider.wallet.publicKey, + }).rpc(); + + // Set trusted signer for ECDSA + const verifyingKey = Buffer.from("b8d50f0bae75bf6e03c104903d7c3afc4a6596da", "hex"); + + await pythLazerContract.methods.updateEcdsaSigner(Array.from(verifyingKey), new BN(2376995919)).accounts({ + payer: provider.wallet.publicKey, + }).rpc(); + + return { pythLazerContract, treasury }; +} describe("solana-anchor", () => { // Configure the client to use the local cluster. - anchor.setProvider(anchor.AnchorProvider.env()); + const provider = anchor.AnchorProvider.env(); + anchor.setProvider(provider); const program = anchor.workspace.SolanaAnchor as Program; + + // This is a fixture taken from Lazer Staging + const messageEcdsa = Buffer.from( + "e4bd474dafa7d6460b9cc3ad4513b7b5007967851ab847db56e522c2d702fc1645ed57ca0f6d4f4af6643c350b54516af5ac80b321e1798f9bd8c5f5b3323b31e0ef3451011c0075d3c793e804667ed633060003010100000001001e73e130ab080000", + "hex" + ); + + it("Initializes the program and tests updates with ECDSA message", async () => { + const { treasury } = await setupPythLazerContract(provider); + // Initialize Solana Anchor program with price feed id 1 + await program.methods.initialize(1).accounts({ + payer: provider.wallet.publicKey, + }).rpc(); + + // Update with ECDSA message + await program.methods.updateEcdsa(messageEcdsa).accounts({ + payer: provider.wallet.publicKey, + pythTreasury: treasury.publicKey, + }).rpc(); - it("Is initialized!", async () => { - // Add your test here. - const tx = await program.methods.initialize(1).rpc(); - console.log("Your transaction signature", tx); + // Get the state + const state = (await program.account.state.all())[0].account; // There's only one state account + assert.equal(state.priceFeedId.toString(), "1"); + assert.equal(state.latestTimestamp.toString(), "1745846196897000"); + assert.equal(state.latestPrice.toString(), "9531352511262"); }); }); From 41635c1b23aa459cda8d56a2ef38cb97bc8d22f0 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Mon, 28 Apr 2025 19:08:29 +0200 Subject: [PATCH 12/12] chore: add readme and final touches --- lazer/solana-anchor/Cargo.lock | 6 ++- lazer/solana-anchor/README.md | 44 +++++++++++++++++++ lazer/solana-anchor/migrations/deploy.ts | 12 ----- .../programs/solana-anchor/Cargo.toml | 3 +- 4 files changed, 49 insertions(+), 16 deletions(-) create mode 100644 lazer/solana-anchor/README.md delete mode 100644 lazer/solana-anchor/migrations/deploy.ts diff --git a/lazer/solana-anchor/Cargo.lock b/lazer/solana-anchor/Cargo.lock index 4b6c779..92d01f5 100644 --- a/lazer/solana-anchor/Cargo.lock +++ b/lazer/solana-anchor/Cargo.lock @@ -1322,7 +1322,8 @@ dependencies = [ [[package]] name = "pyth-lazer-protocol" version = "0.7.2" -source = "git+https://github.com/pyth-network/pyth-crosschain.git?branch=lazer/add-writable-annotation-anchor#80cb2952611a2f7f906a16ee506e05cd050383e9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9bdf4e2ba853a8b437309487542e742c7d094d8db189db194cb538f2be02ecd" dependencies = [ "anyhow", "base64 0.22.1", @@ -1338,7 +1339,8 @@ dependencies = [ [[package]] name = "pyth-lazer-solana-contract" version = "0.4.2" -source = "git+https://github.com/pyth-network/pyth-crosschain.git?branch=lazer/add-writable-annotation-anchor#80cb2952611a2f7f906a16ee506e05cd050383e9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d341333b7763d0e6ba032f63acfc6d47e81d18b57e899e074a8409528b16226c" dependencies = [ "anchor-lang", "bytemuck", diff --git a/lazer/solana-anchor/README.md b/lazer/solana-anchor/README.md new file mode 100644 index 0000000..ea4eb78 --- /dev/null +++ b/lazer/solana-anchor/README.md @@ -0,0 +1,44 @@ +# Solana Anchor Example Program for Pyth Lazer + +This is a simple Solana program built using the Anchor framework that uses Pyth Lazer prices and stores them on-chain. + +## Prerequisites + +- [Rust](https://rustup.rs/) +- [Solana CLI Tools](https://docs.solana.com/cli/install-solana-cli-tools) +- [Anchor Framework](https://www.anchor-lang.com/docs/installation) +- [Node.js](https://nodejs.org/) and [pnpm](https://pnpm.io/) + +## Project Structure + +``` +solana-anchor/ +├── programs/ # Solana program source code +├── tests/ # Test files +└── fixtures/ # Lazer Program artifacts +``` + +## Setup + +1. Install dependencies: +```bash +pnpm install +``` + +2. Build the program: +```bash +anchor build +``` + +## Testing + +Run the test suite: +```bash +pnpm test:anchor +``` + +## Development + +- The program is configured to run on Localnet by default +- Program ID: `FpmpVrP57C6ADT8d4dQp9TkM1vmxohZJ5WEQQc9RGLPY` +- Uses Pyth Lazer with address: `pytd2yyk641x7ak7mkaasSJVXh6YYZnC7wTmtgAyxPt` \ No newline at end of file diff --git a/lazer/solana-anchor/migrations/deploy.ts b/lazer/solana-anchor/migrations/deploy.ts deleted file mode 100644 index 82fb175..0000000 --- a/lazer/solana-anchor/migrations/deploy.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Migrations are an early feature. Currently, they're nothing more than this -// single deploy script that's invoked from the CLI, injecting a provider -// configured from the workspace's Anchor.toml. - -const anchor = require("@coral-xyz/anchor"); - -module.exports = async function (provider) { - // Configure client to use the provider. - anchor.setProvider(provider); - - // Add your deploy script here. -}; diff --git a/lazer/solana-anchor/programs/solana-anchor/Cargo.toml b/lazer/solana-anchor/programs/solana-anchor/Cargo.toml index a94eb83..f53b3b0 100644 --- a/lazer/solana-anchor/programs/solana-anchor/Cargo.toml +++ b/lazer/solana-anchor/programs/solana-anchor/Cargo.toml @@ -18,5 +18,4 @@ idl-build = ["anchor-lang/idl-build"] [dependencies] anchor-lang = "0.30.1" -# pyth-lazer-solana-contract = { version = "0.4.1", features = ["no-entrypoint", "cpi"] } -pyth-lazer-solana-contract = { git = "https://github.com/pyth-network/pyth-crosschain.git", branch = "lazer/add-writable-annotation-anchor", features = ["no-entrypoint", "cpi"] } +pyth-lazer-solana-contract = { version = "0.4.2", features = ["no-entrypoint", "cpi"] }