From 16fd56654eead9f7ef6b73c318da4bdc7d2468ae Mon Sep 17 00:00:00 2001 From: Emanuele Cesena Date: Wed, 17 Apr 2024 17:29:59 -0700 Subject: [PATCH] update: anchor 0.30, flatbuffers --- anchor/Cargo.lock | 726 +++---- anchor/Cargo.toml | 24 +- .../deps/anchor-attribute-account/Cargo.toml | 23 + .../deps/anchor-attribute-account/src/id.rs | 295 +++ .../deps/anchor-attribute-account/src/lib.rs | 634 ++++++ anchor/programs/glam/Cargo.toml | 7 +- anchor/programs/glam/src/state/fund.rs | 80 +- .../programs/glam/src/state/glam_generated.rs | 250 +++ anchor/programs/glam/src/state/mod.rs | 5 +- anchor/schema/glam.fbs | 8 + anchor/schema/glam_generated.rs | 250 +++ anchor/target/idl/custody.json | 28 - anchor/target/idl/glam.json | 1214 +++++++---- anchor/target/idl/policy.json | 95 - anchor/target/idl/pricing.json | 64 - anchor/target/idl/strategy.json | 28 - anchor/target/types/custody.ts | 51 - anchor/target/types/glam.ts | 1852 +++++++---------- anchor/target/types/policy.ts | 185 -- anchor/target/types/pricing.ts | 123 -- anchor/target/types/strategy.ts | 51 - package.json | 2 +- pnpm-lock.yaml | 14 +- 23 files changed, 3396 insertions(+), 2613 deletions(-) create mode 100644 anchor/deps/anchor-attribute-account/Cargo.toml create mode 100644 anchor/deps/anchor-attribute-account/src/id.rs create mode 100644 anchor/deps/anchor-attribute-account/src/lib.rs create mode 100644 anchor/programs/glam/src/state/glam_generated.rs create mode 100644 anchor/schema/glam.fbs create mode 100644 anchor/schema/glam_generated.rs delete mode 100644 anchor/target/idl/custody.json delete mode 100644 anchor/target/idl/policy.json delete mode 100644 anchor/target/idl/pricing.json delete mode 100644 anchor/target/idl/strategy.json delete mode 100644 anchor/target/types/custody.ts delete mode 100644 anchor/target/types/policy.ts delete mode 100644 anchor/target/types/pricing.ts delete mode 100644 anchor/target/types/strategy.ts diff --git a/anchor/Cargo.lock b/anchor/Cargo.lock index 28e18601..e331306e 100644 --- a/anchor/Cargo.lock +++ b/anchor/Cargo.lock @@ -40,20 +40,20 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.14", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.5" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7d5a2cecb58716e47d67d5703a249964b14c7be1ec3cad3affc295b2d1c35d" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "once_cell", @@ -63,20 +63,20 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "anchor-attribute-access-control" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f619f1d04f53621925ba8a2e633ba5a6081f2ae14758cbb67f38fd823e0a3e" +checksum = "dd7368e171b3a317885dc08ec0f74eed9d0ad6c726cc819593aed81440dca926" dependencies = [ - "anchor-syn 0.29.0", + "anchor-syn 0.30.0", "proc-macro2", "quote", "syn 1.0.109", @@ -84,12 +84,10 @@ dependencies = [ [[package]] name = "anchor-attribute-account" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f2a3e1df4685f18d12a943a9f2a7456305401af21a07c9fe076ef9ecd6e400" +version = "0.30.0" dependencies = [ - "anchor-syn 0.29.0", - "bs58 0.5.0", + "anchor-syn 0.30.0", + "bs58 0.5.1", "proc-macro2", "quote", "syn 1.0.109", @@ -97,33 +95,33 @@ dependencies = [ [[package]] name = "anchor-attribute-constant" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9423945cb55627f0b30903288e78baf6f62c6c8ab28fb344b6b25f1ffee3dca7" +checksum = "3eb1dc1845cf8636c2e046a274ca074dabd3884ac8ed11cc4ed64b7e8ef5a318" dependencies = [ - "anchor-syn 0.29.0", + "anchor-syn 0.30.0", "quote", "syn 1.0.109", ] [[package]] name = "anchor-attribute-error" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ed12720033cc3c3bf3cfa293349c2275cd5ab99936e33dd4bf283aaad3e241" +checksum = "7f382e41514c59a77ffa7bb1a47df9a0359564a749b6934485c742c11962e540" dependencies = [ - "anchor-syn 0.29.0", + "anchor-syn 0.30.0", "quote", "syn 1.0.109", ] [[package]] name = "anchor-attribute-event" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eef4dc0371eba2d8c8b54794b0b0eb786a234a559b77593d6f80825b6d2c77a2" +checksum = "473a122aeed3f6b666438236338d2ef7833ee5fdc5688e1baa80185d61088a53" dependencies = [ - "anchor-syn 0.29.0", + "anchor-syn 0.30.0", "proc-macro2", "quote", "syn 1.0.109", @@ -131,33 +129,39 @@ dependencies = [ [[package]] name = "anchor-attribute-program" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b18c4f191331e078d4a6a080954d1576241c29c56638783322a18d308ab27e4f" +checksum = "7f88c7ffe2eb40aeac43ffd0d74a6671581158aedfaa0552330a2ef92fa5c889" dependencies = [ - "anchor-syn 0.29.0", + "anchor-lang-idl", + "anchor-syn 0.30.0", + "anyhow", + "bs58 0.5.1", + "heck 0.3.3", + "proc-macro2", "quote", + "serde_json", "syn 1.0.109", ] [[package]] name = "anchor-derive-accounts" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de10d6e9620d3bcea56c56151cad83c5992f50d5960b3a9bebc4a50390ddc3c" +checksum = "ed9b97c99dcec135aae0ff908c14bcfcd3e78cfc16a0c6f245135038f0e6d390" dependencies = [ - "anchor-syn 0.29.0", + "anchor-syn 0.30.0", "quote", "syn 1.0.109", ] [[package]] name = "anchor-derive-serde" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e2e5be518ec6053d90a2a7f26843dbee607583c779e6c8395951b9739bdfbe" +checksum = "bbece98f6ad9c37070edc0841326c9623a249346cd74f433e7cef69b14f7f31d" dependencies = [ - "anchor-syn 0.29.0", + "anchor-syn 0.30.0", "borsh-derive-internal 0.10.3", "proc-macro2", "quote", @@ -166,9 +170,9 @@ dependencies = [ [[package]] name = "anchor-derive-space" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ecc31d19fa54840e74b7a979d44bcea49d70459de846088a1d71e87ba53c419" +checksum = "8badbe2648bc99a85ee05a7a5f9512e5e2af8ffac71476a69350cb278057ac53" dependencies = [ "proc-macro2", "quote", @@ -223,9 +227,9 @@ dependencies = [ [[package]] name = "anchor-lang" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35da4785497388af0553586d55ebdc08054a8b1724720ef2749d313494f2b8ad" +checksum = "e41feb9c1cd9f4b0fad1c004fc8f289183f3ce27e9db38fa6e434470c716fb1e" dependencies = [ "anchor-attribute-access-control", "anchor-attribute-account", @@ -236,27 +240,43 @@ dependencies = [ "anchor-derive-accounts", "anchor-derive-serde", "anchor-derive-space", + "anchor-lang-idl", "arrayref", - "base64 0.13.1", + "base64 0.21.7", "bincode", "borsh 0.10.3", "bytemuck", - "getrandom 0.2.12", + "getrandom 0.2.14", "solana-program", "thiserror", ] +[[package]] +name = "anchor-lang-idl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b29da81eae478b1bb846749b06b8a2cb9c6f9ed26ca793b0c916793fdf36adab" +dependencies = [ + "anchor-syn 0.30.0", + "anyhow", + "regex", + "serde", + "serde_json", +] + [[package]] name = "anchor-spl" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c4fd6e43b2ca6220d2ef1641539e678bfc31b6cc393cf892b373b5997b6a39a" +checksum = "0dcee54a30b27ea8317ca647759b5d9701a8c7caaaa0c922c6d3c306a7278a7a" dependencies = [ "anchor-lang", - "solana-program", - "spl-associated-token-account 2.2.0", + "spl-associated-token-account", + "spl-pod", "spl-token", - "spl-token-2022 0.9.0", + "spl-token-2022", + "spl-token-group-interface", + "spl-token-metadata-interface", ] [[package]] @@ -280,12 +300,13 @@ dependencies = [ [[package]] name = "anchor-syn" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9101b84702fed2ea57bd22992f75065da5648017135b844283a2f6d74f27825" +checksum = "ac53f2378bc08e89e20c2b893c01986ffd34cfbc69a17e35bd6f754753e9fdad" dependencies = [ "anyhow", - "bs58 0.5.0", + "bs58 0.5.1", + "cargo_toml", "heck 0.3.3", "proc-macro2", "quote", @@ -298,9 +319,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" [[package]] name = "ark-bn254" @@ -450,9 +471,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] name = "base64" @@ -460,12 +481,6 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -489,9 +504,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" dependencies = [ "serde", ] @@ -507,9 +522,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" dependencies = [ "arrayref", "arrayvec", @@ -610,7 +625,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", "syn_derive", ] @@ -672,18 +687,18 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bs58" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" dependencies = [ "tinyvec", ] [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bv" @@ -706,13 +721,13 @@ dependencies = [ [[package]] name = "bytemuck_derive" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -721,11 +736,21 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[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.12", +] + [[package]] name = "cc" -version = "1.0.83" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7" dependencies = [ "jobserver", "libc", @@ -745,9 +770,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chrono" -version = "0.4.33" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "num-traits", ] @@ -882,12 +907,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.5" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ - "darling_core 0.20.5", - "darling_macro 0.20.5", + "darling_core 0.20.8", + "darling_macro 0.20.8", ] [[package]] @@ -906,16 +931,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.5" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -931,13 +956,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.5" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ - "darling_core 0.20.5", + "darling_core 0.20.8", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -987,9 +1012,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "ed25519" @@ -1028,9 +1053,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" [[package]] name = "env_logger" @@ -1057,6 +1082,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" +[[package]] +name = "flatbuffers" +version = "24.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f" +dependencies = [ + "bitflags 1.3.2", + "rustc_version", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1089,9 +1124,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if", "js-sys", @@ -1104,16 +1139,15 @@ dependencies = [ name = "glam" version = "0.1.0" dependencies = [ + "anchor-attribute-account", "anchor-lang", "anchor-spl", "drift", - "num_enum", + "flatbuffers", "pyth-sdk-solana", "solana-program", - "spl-associated-token-account 3.0.2", - "spl-token", - "spl-token-2022 3.0.2", - "spl-token-metadata-interface 0.3.3", + "spl-token-2022", + "spl-token-metadata-interface", ] [[package]] @@ -1122,7 +1156,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash 0.7.7", + "ahash 0.7.8", ] [[package]] @@ -1131,7 +1165,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.8.5", + "ahash 0.8.11", ] [[package]] @@ -1233,9 +1267,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.2" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -1252,24 +1286,24 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -1367,15 +1401,15 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memmap2" @@ -1388,9 +1422,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -1437,24 +1471,23 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] @@ -1474,10 +1507,10 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -1488,9 +1521,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "parking_lot" @@ -1569,17 +1602,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" dependencies = [ - "toml", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", + "toml 0.5.11", ] [[package]] @@ -1616,9 +1639,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" dependencies = [ "unicode-ident", ] @@ -1644,7 +1667,7 @@ checksum = "1e7aeef4d5f0a9c98ff5af2ddd84a8b89919c512188305b497a9eb9afa97a949" dependencies = [ "borsh 0.10.3", "borsh-derive 0.10.3", - "getrandom 0.2.12", + "getrandom 0.2.14", "hex", "schemars", "serde", @@ -1684,14 +1707,14 @@ checksum = "9e2e25ee72f5b24d773cae88422baddefff7714f97aab68d96fe2b6fc4a28fb2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -1755,7 +1778,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.14", ] [[package]] @@ -1778,9 +1801,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -1807,9 +1830,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.3" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "aho-corasick", "memchr", @@ -1819,9 +1842,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -1830,9 +1853,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "rustc-hash" @@ -1851,15 +1874,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "schemars" @@ -1893,15 +1916,15 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" [[package]] name = "serde" -version = "1.0.196" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" dependencies = [ "serde_derive", ] @@ -1917,13 +1940,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.196" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -1939,15 +1962,24 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.113" +version = "1.0.116" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" +checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" dependencies = [ "itoa", "ryu", "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + [[package]] name = "serde_with" version = "2.3.3" @@ -1964,10 +1996,10 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.5", + "darling 0.20.8", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -2040,15 +2072,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "solana-frozen-abi" -version = "1.18.7" +version = "1.18.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc310416403e8bd4f10799d7736a3a17126b217236983a884f0e1989b93040" +checksum = "3b8177685ab2bc8cc8b3bf63aa1eaa0580d5af850ecefac323ca1c2473085d77" dependencies = [ "block-buffer 0.10.4", "bs58 0.4.0", @@ -2071,21 +2103,21 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.18.7" +version = "1.18.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc8882e99fb0589cafdd48690c0c1b589d419110630a25e221de68ee1c10fb3" +checksum = "4a68241cad17b74c6034a68ba4890632d409a2c886e7bead9c1e1432befdb7c9" dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] name = "solana-logger" -version = "1.18.7" +version = "1.18.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d232989da2972107e5e40dcc179f8f4ca2ddcf1cb9ac2b27305ca97f2a0c0408" +checksum = "fea560989ef67ba4a1a0fd62a248721f1aa5bac8fa5ede9ccf4fe9ee484ccadf" dependencies = [ "env_logger", "lazy_static", @@ -2094,9 +2126,9 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.18.7" +version = "1.18.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f49c1f01637722d95bbcc9de05c49112bd4aa6aeacad377fa5b3524785cb43" +checksum = "8bddf573103c890b4ab8f9a6641d4f969d4148bce9a451c263f4a62afa949fae" dependencies = [ "ark-bn254", "ark-ec", @@ -2104,7 +2136,7 @@ dependencies = [ "ark-serialize", "base64 0.21.7", "bincode", - "bitflags 2.4.2", + "bitflags 2.5.0", "blake3", "borsh 0.10.3", "borsh 0.9.3", @@ -2116,7 +2148,7 @@ dependencies = [ "console_error_panic_hook", "console_log", "curve25519-dalek", - "getrandom 0.2.12", + "getrandom 0.2.14", "itertools", "js-sys", "lazy_static", @@ -2149,14 +2181,14 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.18.7" +version = "1.18.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32067a43e8911d442c50c2fb3a40ac3e73f5645b8ae911ba5f4c5af9190f3b29" +checksum = "08b24b06fa176209ddb2a2f8172a00b07e8a3b18229fbfc49f1eb3ce6ad11ff1" dependencies = [ "assert_matches", "base64 0.21.7", "bincode", - "bitflags 2.4.2", + "bitflags 2.5.0", "borsh 1.4.0", "bs58 0.4.0", "bytemuck", @@ -2204,15 +2236,15 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.18.7" +version = "1.18.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "457e23df0b7b859eba7b72bc525f63f3a415500fb0a17d554e5166378f4c9b4b" +checksum = "869483c05f18d37d4d95a08d9e05e00a4f76a8c8349aeedeee9ba2d013cbacde" dependencies = [ "bs58 0.4.0", "proc-macro2", "quote", "rustversion", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -2223,9 +2255,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183" [[package]] name = "solana-zk-token-sdk" -version = "1.18.7" +version = "1.18.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8b429abaacfd233305d996bed2d453e33835cb3bf2508bc72d12cbc4483514f" +checksum = "459c27f7b954798677d8243aa53b8080cfb314ecfecbf8889a5a65c91ad11fee" dependencies = [ "aes-gcm-siv", "base64 0.21.7", @@ -2250,22 +2282,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "spl-associated-token-account" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385e31c29981488f2820b2022d8e731aae3b02e6e18e2fd854e4c9a94dc44fc3" -dependencies = [ - "assert_matches", - "borsh 0.10.3", - "num-derive 0.4.2", - "num-traits", - "solana-program", - "spl-token", - "spl-token-2022 0.9.0", - "thiserror", -] - [[package]] name = "spl-associated-token-account" version = "3.0.2" @@ -2278,21 +2294,10 @@ dependencies = [ "num-traits", "solana-program", "spl-token", - "spl-token-2022 3.0.2", + "spl-token-2022", "thiserror", ] -[[package]] -name = "spl-discriminator" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa600f2fe56f32e923261719bae640d873edadbc5237681a39b8e37bfd4d263" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator-derive 0.1.2", -] - [[package]] name = "spl-discriminator" version = "0.2.2" @@ -2301,18 +2306,7 @@ checksum = "34d1814406e98b08c5cd02c1126f83fd407ad084adce0b05fda5730677822eac" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator-derive 0.2.0", -] - -[[package]] -name = "spl-discriminator-derive" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07fd7858fc4ff8fb0e34090e41d7eb06a823e1057945c26d480bfc21d2338a93" -dependencies = [ - "quote", - "spl-discriminator-syn 0.1.2", - "syn 2.0.48", + "spl-discriminator-derive", ] [[package]] @@ -2322,21 +2316,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9e8418ea6269dcfb01c712f0444d2c75542c04448b480e87de59d2865edc750" dependencies = [ "quote", - "spl-discriminator-syn 0.2.0", - "syn 2.0.48", -] - -[[package]] -name = "spl-discriminator-syn" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fea7be851bd98d10721782ea958097c03a0c2a07d8d4997041d0ece6319a63" -dependencies = [ - "proc-macro2", - "quote", - "sha2 0.10.8", - "syn 2.0.48", - "thiserror", + "spl-discriminator-syn", + "syn 2.0.59", ] [[package]] @@ -2348,7 +2329,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.48", + "syn 2.0.59", "thiserror", ] @@ -2361,19 +2342,6 @@ dependencies = [ "solana-program", ] -[[package]] -name = "spl-pod" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5db7e4efb1107b0b8e52a13f035437cdcb36ef99c58f6d467f089d9b2915a" -dependencies = [ - "borsh 0.10.3", - "bytemuck", - "solana-program", - "solana-zk-token-sdk", - "spl-program-error 0.3.1", -] - [[package]] name = "spl-pod" version = "0.2.2" @@ -2384,20 +2352,7 @@ dependencies = [ "bytemuck", "solana-program", "solana-zk-token-sdk", - "spl-program-error 0.4.0", -] - -[[package]] -name = "spl-program-error" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e0657b6490196971d9e729520ba934911ff41fbb2cb9004463dbe23cf8b4b4f" -dependencies = [ - "num-derive 0.4.2", - "num-traits", - "solana-program", - "spl-program-error-derive 0.3.2", - "thiserror", + "spl-program-error", ] [[package]] @@ -2409,22 +2364,10 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "solana-program", - "spl-program-error-derive 0.4.0", + "spl-program-error-derive", "thiserror", ] -[[package]] -name = "spl-program-error-derive" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1845dfe71fd68f70382232742e758557afe973ae19e6c06807b2c30f5d5cb474" -dependencies = [ - "proc-macro2", - "quote", - "sha2 0.10.8", - "syn 2.0.48", -] - [[package]] name = "spl-program-error-derive" version = "0.4.0" @@ -2434,21 +2377,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.8", - "syn 2.0.48", -] - -[[package]] -name = "spl-tlv-account-resolution" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062e148d3eab7b165582757453632ffeef490c02c86a48bfdb4988f63eefb3b9" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.1.1", - "spl-pod 0.1.1", - "spl-program-error 0.3.1", - "spl-type-length-value 0.3.1", + "syn 2.0.59", ] [[package]] @@ -2459,10 +2388,10 @@ checksum = "cace91ba08984a41556efe49cbf2edca4db2f577b649da7827d3621161784bf8" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator 0.2.2", - "spl-pod 0.2.2", - "spl-program-error 0.4.0", - "spl-type-length-value 0.4.3", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", ] [[package]] @@ -2480,28 +2409,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "spl-token-2022" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4abf34a65ba420584a0c35f3903f8d727d1f13ababbdc3f714c6b065a686e86" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.4.2", - "num-traits", - "num_enum", - "solana-program", - "solana-zk-token-sdk", - "spl-memo", - "spl-pod 0.1.1", - "spl-token", - "spl-token-metadata-interface 0.2.1", - "spl-transfer-hook-interface 0.3.0", - "spl-type-length-value 0.3.1", - "thiserror", -] - [[package]] name = "spl-token-2022" version = "3.0.2" @@ -2517,12 +2424,12 @@ dependencies = [ "solana-security-txt", "solana-zk-token-sdk", "spl-memo", - "spl-pod 0.2.2", + "spl-pod", "spl-token", "spl-token-group-interface", - "spl-token-metadata-interface 0.3.3", - "spl-transfer-hook-interface 0.6.3", - "spl-type-length-value 0.4.3", + "spl-token-metadata-interface", + "spl-transfer-hook-interface", + "spl-type-length-value", "thiserror", ] @@ -2534,23 +2441,9 @@ checksum = "d419b5cfa3ee8e0f2386fd7e02a33b3ec8a7db4a9c7064a2ea24849dc4a273b6" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator 0.2.2", - "spl-pod 0.2.2", - "spl-program-error 0.4.0", -] - -[[package]] -name = "spl-token-metadata-interface" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16aa8f64b6e0eaab3f5034e84d867c8435d8216497b4543a4978a31f4b6e8a8" -dependencies = [ - "borsh 0.10.3", - "solana-program", - "spl-discriminator 0.1.1", - "spl-pod 0.1.1", - "spl-program-error 0.3.1", - "spl-type-length-value 0.3.1", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] @@ -2561,26 +2454,10 @@ checksum = "30179c47e93625680dabb620c6e7931bd12d62af390f447bc7beb4a3a9b5feee" dependencies = [ "borsh 1.4.0", "solana-program", - "spl-discriminator 0.2.2", - "spl-pod 0.2.2", - "spl-program-error 0.4.0", - "spl-type-length-value 0.4.3", -] - -[[package]] -name = "spl-transfer-hook-interface" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051d31803f873cabe71aec3c1b849f35248beae5d19a347d93a5c9cccc5d5a9b" -dependencies = [ - "arrayref", - "bytemuck", - "solana-program", - "spl-discriminator 0.1.1", - "spl-pod 0.1.1", - "spl-program-error 0.3.1", - "spl-tlv-account-resolution 0.4.0", - "spl-type-length-value 0.3.1", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-type-length-value", ] [[package]] @@ -2592,24 +2469,11 @@ dependencies = [ "arrayref", "bytemuck", "solana-program", - "spl-discriminator 0.2.2", - "spl-pod 0.2.2", - "spl-program-error 0.4.0", - "spl-tlv-account-resolution 0.6.3", - "spl-type-length-value 0.4.3", -] - -[[package]] -name = "spl-type-length-value" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f9ebd75d29c5f48de5f6a9c114e08531030b75b8ac2c557600ac7da0b73b1e8" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.1.1", - "spl-pod 0.1.1", - "spl-program-error 0.3.1", + "spl-discriminator", + "spl-pod", + "spl-program-error", + "spl-tlv-account-resolution", + "spl-type-length-value", ] [[package]] @@ -2620,9 +2484,9 @@ checksum = "422ce13429dbd41d2cee8a73931c05fda0b0c8ca156a8b0c19445642550bb61a" dependencies = [ "bytemuck", "solana-program", - "spl-discriminator 0.2.2", - "spl-pod 0.2.2", - "spl-program-error 0.4.0", + "spl-discriminator", + "spl-pod", + "spl-program-error", ] [[package]] @@ -2650,9 +2514,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "4a6531ffc7b071655e4ce2e04bd464c4830bb585a61cabb96cf808f05172615a" dependencies = [ "proc-macro2", "quote", @@ -2668,7 +2532,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -2682,22 +2546,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -2743,32 +2607,49 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.9", +] + [[package]] name = "toml_datetime" version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ "indexmap", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.21.1" +version = "0.22.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" dependencies = [ "indexmap", + "serde", + "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.6", ] [[package]] @@ -2785,18 +2666,18 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "universal-hash" @@ -2838,9 +2719,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2848,24 +2729,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2873,28 +2754,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -2990,9 +2871,18 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winnow" -version = "0.5.39" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29" +checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" dependencies = [ "memchr", ] @@ -3020,7 +2910,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] [[package]] @@ -3040,5 +2930,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.59", ] diff --git a/anchor/Cargo.toml b/anchor/Cargo.toml index b2ba4412..0dfd4dc8 100644 --- a/anchor/Cargo.toml +++ b/anchor/Cargo.toml @@ -14,19 +14,19 @@ incremental = false codegen-units = 1 [workspace.dependencies] -anchor-lang = { version="0.29.0", features=["init-if-needed"] } -anchor-spl = "0.29.0" -anchor-gen = "0.3.0" +anchor-lang = { version="0.30.0", features=["init-if-needed"] } +anchor-attribute-account = "0.30.0" +anchor-spl = "0.30.0" +solana-program = "=1.18.11" -solana-program = "=1.18.7" -spl-associated-token-account = "=3.0.2" -spl-token = "=4.0.1" -spl-token-2022 = "=3.0.2" -spl-token-metadata-interface = "=0.3.3" -num_enum = "=0.7.2" - -spl-tlv-account-resolution = "0.5.2" -spl-transfer-hook-interface = "0.5.1" +anchor-gen = "0.3.1" +flatbuffers = "24.3.25" +spl-token-2022 = "3.0.2" +spl-token-metadata-interface = "0.3.3" +spl-transfer-hook-interface = "0.6.3" pyth-sdk-solana = "0.10.1" drift = { path="./deps/drift" } + +[patch.crates-io] +anchor-attribute-account = { path="./deps/anchor-attribute-account" } diff --git a/anchor/deps/anchor-attribute-account/Cargo.toml b/anchor/deps/anchor-attribute-account/Cargo.toml new file mode 100644 index 00000000..5740bfa5 --- /dev/null +++ b/anchor/deps/anchor-attribute-account/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "anchor-attribute-account" +version = "0.30.0" +authors = ["Anchor Maintainers "] +repository = "https://github.com/coral-xyz/anchor" +license = "Apache-2.0" +description = "Anchor attribute macro for defining an account" +rust-version = "1.60" +edition = "2021" + +[lib] +proc-macro = true + +[features] +anchor-debug = ["anchor-syn/anchor-debug"] +idl-build = ["anchor-syn/idl-build"] + +[dependencies] +anchor-syn = { version = "0.30.0", features = ["hash"] } +bs58 = "0.5" +proc-macro2 = "1" +quote = "1" +syn = { version = "1", features = ["full"] } diff --git a/anchor/deps/anchor-attribute-account/src/id.rs b/anchor/deps/anchor-attribute-account/src/id.rs new file mode 100644 index 00000000..85b5c00a --- /dev/null +++ b/anchor/deps/anchor-attribute-account/src/id.rs @@ -0,0 +1,295 @@ +//! Copied from solana/sdk/macro so that Anchor programs don't need to specify +//! `solana_program` as an additional crate dependency, but instead can access +//! it via `anchor_lang::declare_id`. +//! +//! Convenience macro to declare a static public key and functions to interact with it +//! +//! Input: a single literal base58 string representation of a program's id + +extern crate proc_macro; + +use proc_macro2::{Delimiter, Span, TokenTree}; +use quote::{quote, ToTokens}; +use syn::{ + bracketed, + parse::{Parse, ParseStream, Result}, + punctuated::Punctuated, + token::Bracket, + Expr, Ident, LitByte, LitStr, Path, Token, +}; + +fn parse_id( + input: ParseStream, + pubkey_type: proc_macro2::TokenStream, +) -> Result { + let id = if input.peek(syn::LitStr) { + let id_literal: LitStr = input.parse()?; + parse_pubkey(&id_literal, &pubkey_type)? + } else { + let expr: Expr = input.parse()?; + quote! { #expr } + }; + + if !input.is_empty() { + let stream: proc_macro2::TokenStream = input.parse()?; + return Err(syn::Error::new_spanned(stream, "unexpected token")); + } + Ok(id) +} + +fn id_to_tokens( + id: &proc_macro2::TokenStream, + pubkey_type: proc_macro2::TokenStream, + tokens: &mut proc_macro2::TokenStream, +) { + tokens.extend(quote! { + /// The static program ID + pub static ID: #pubkey_type = #id; + + /// Confirms that a given pubkey is equivalent to the program ID + pub fn check_id(id: &#pubkey_type) -> bool { + id == &ID + } + + /// Returns the program ID + pub fn id() -> #pubkey_type { + ID + } + + #[cfg(test)] + #[test] + fn test_id() { + assert!(check_id(&id())); + } + }); +} + +fn deprecated_id_to_tokens( + id: &proc_macro2::TokenStream, + pubkey_type: proc_macro2::TokenStream, + tokens: &mut proc_macro2::TokenStream, +) { + tokens.extend(quote! { + /// The static program ID + pub static ID: #pubkey_type = #id; + + /// Confirms that a given pubkey is equivalent to the program ID + #[deprecated()] + pub fn check_id(id: &#pubkey_type) -> bool { + id == &ID + } + + /// Returns the program ID + #[deprecated()] + pub fn id() -> #pubkey_type { + ID + } + + #[cfg(test)] + #[test] + fn test_id() { + #[allow(deprecated)] + assert!(check_id(&id())); + } + }); +} + +pub struct Id(proc_macro2::TokenStream); + +impl Parse for Id { + fn parse(input: ParseStream) -> Result { + parse_id( + input, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + ) + .map(Self) + } +} + +impl ToTokens for Id { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + id_to_tokens( + &self.0, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + tokens, + ) + } +} + +struct IdDeprecated(proc_macro2::TokenStream); + +impl Parse for IdDeprecated { + fn parse(input: ParseStream) -> Result { + parse_id( + input, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + ) + .map(Self) + } +} + +impl ToTokens for IdDeprecated { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + deprecated_id_to_tokens( + &self.0, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + tokens, + ) + } +} + +struct ProgramSdkId(proc_macro2::TokenStream); +impl Parse for ProgramSdkId { + fn parse(input: ParseStream) -> Result { + parse_id( + input, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + ) + .map(Self) + } +} + +impl ToTokens for ProgramSdkId { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + id_to_tokens( + &self.0, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + tokens, + ) + } +} + +struct ProgramSdkIdDeprecated(proc_macro2::TokenStream); +impl Parse for ProgramSdkIdDeprecated { + fn parse(input: ParseStream) -> Result { + parse_id( + input, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + ) + .map(Self) + } +} + +impl ToTokens for ProgramSdkIdDeprecated { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + deprecated_id_to_tokens( + &self.0, + quote! { anchor_lang::solana_program::pubkey::Pubkey }, + tokens, + ) + } +} + +#[allow(dead_code)] // `respan` may be compiled out +struct RespanInput { + to_respan: Path, + respan_using: Span, +} + +impl Parse for RespanInput { + fn parse(input: ParseStream) -> Result { + let to_respan: Path = input.parse()?; + let _comma: Token![,] = input.parse()?; + let respan_tree: TokenTree = input.parse()?; + match respan_tree { + TokenTree::Group(g) if g.delimiter() == Delimiter::None => { + let ident: Ident = syn::parse2(g.stream())?; + Ok(RespanInput { + to_respan, + respan_using: ident.span(), + }) + } + val => Err(syn::Error::new_spanned( + val, + "expected None-delimited group", + )), + } + } +} + +fn parse_pubkey( + id_literal: &LitStr, + pubkey_type: &proc_macro2::TokenStream, +) -> Result { + let id_vec = bs58::decode(id_literal.value()) + .into_vec() + .map_err(|_| syn::Error::new_spanned(id_literal, "failed to decode base58 string"))?; + let id_array = <[u8; 32]>::try_from(<&[u8]>::clone(&&id_vec[..])).map_err(|_| { + syn::Error::new_spanned( + id_literal, + format!("pubkey array is not 32 bytes long: len={}", id_vec.len()), + ) + })?; + let bytes = id_array.iter().map(|b| LitByte::new(*b, Span::call_site())); + Ok(quote! { + #pubkey_type::new_from_array( + [#(#bytes,)*] + ) + }) +} + +struct Pubkeys { + method: Ident, + num: usize, + pubkeys: proc_macro2::TokenStream, +} +impl Parse for Pubkeys { + fn parse(input: ParseStream) -> Result { + let pubkey_type = quote! { + anchor_lang::solana_program::pubkey::Pubkey + }; + + let method = input.parse()?; + let _comma: Token![,] = input.parse()?; + let (num, pubkeys) = if input.peek(syn::LitStr) { + let id_literal: LitStr = input.parse()?; + (1, parse_pubkey(&id_literal, &pubkey_type)?) + } else if input.peek(Bracket) { + let pubkey_strings; + bracketed!(pubkey_strings in input); + let punctuated: Punctuated = + Punctuated::parse_terminated(&pubkey_strings)?; + let mut pubkeys: Punctuated = Punctuated::new(); + for string in punctuated.iter() { + pubkeys.push(parse_pubkey(string, &pubkey_type)?); + } + (pubkeys.len(), quote! {#pubkeys}) + } else { + let stream: proc_macro2::TokenStream = input.parse()?; + return Err(syn::Error::new_spanned(stream, "unexpected token")); + }; + + Ok(Pubkeys { + method, + num, + pubkeys, + }) + } +} + +impl ToTokens for Pubkeys { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + let Pubkeys { + method, + num, + pubkeys, + } = self; + + let pubkey_type = quote! { + anchor_lang::solana_program::pubkey::Pubkey + }; + if *num == 1 { + tokens.extend(quote! { + pub fn #method() -> #pubkey_type { + #pubkeys + } + }); + } else { + tokens.extend(quote! { + pub fn #method() -> ::std::vec::Vec<#pubkey_type> { + vec![#pubkeys] + } + }); + } + } +} diff --git a/anchor/deps/anchor-attribute-account/src/lib.rs b/anchor/deps/anchor-attribute-account/src/lib.rs new file mode 100644 index 00000000..f9f6e76a --- /dev/null +++ b/anchor/deps/anchor-attribute-account/src/lib.rs @@ -0,0 +1,634 @@ +extern crate proc_macro; + +use quote::quote; +use syn::parse_macro_input; + +mod id; + +/// An attribute for a data structure representing a Solana account. +/// +/// `#[account]` generates trait implementations for the following traits: +/// +/// - [`AccountSerialize`](./trait.AccountSerialize.html) +/// - [`AccountDeserialize`](./trait.AccountDeserialize.html) +/// - [`AnchorSerialize`](./trait.AnchorSerialize.html) +/// - [`AnchorDeserialize`](./trait.AnchorDeserialize.html) +/// - [`Clone`](https://doc.rust-lang.org/std/clone/trait.Clone.html) +/// - [`Discriminator`](./trait.Discriminator.html) +/// - [`Owner`](./trait.Owner.html) +/// +/// When implementing account serialization traits the first 8 bytes are +/// reserved for a unique account discriminator, self described by the first 8 +/// bytes of the SHA256 of the account's Rust ident. +/// +/// As a result, any calls to `AccountDeserialize`'s `try_deserialize` will +/// check this discriminator. If it doesn't match, an invalid account was given, +/// and the account deserialization will exit with an error. +/// +/// # Zero Copy Deserialization +/// +/// **WARNING**: Zero copy deserialization is an experimental feature. It's +/// recommended to use it only when necessary, i.e., when you have extremely +/// large accounts that cannot be Borsh deserialized without hitting stack or +/// heap limits. +/// +/// ## Usage +/// +/// To enable zero-copy-deserialization, one can pass in the `zero_copy` +/// argument to the macro as follows: +/// +/// ```ignore +/// #[account(zero_copy)] +/// ``` +/// +/// This can be used to conveniently implement +/// [`ZeroCopy`](./trait.ZeroCopy.html) so that the account can be used +/// with [`AccountLoader`](./accounts/account_loader/struct.AccountLoader.html). +/// +/// Other than being more efficient, the most salient benefit this provides is +/// the ability to define account types larger than the max stack or heap size. +/// When using borsh, the account has to be copied and deserialized into a new +/// data structure and thus is constrained by stack and heap limits imposed by +/// the BPF VM. With zero copy deserialization, all bytes from the account's +/// backing `RefCell<&mut [u8]>` are simply re-interpreted as a reference to +/// the data structure. No allocations or copies necessary. Hence the ability +/// to get around stack and heap limitations. +/// +/// To facilitate this, all fields in an account must be constrained to be +/// "plain old data", i.e., they must implement +/// [`Pod`](https://docs.rs/bytemuck/latest/bytemuck/trait.Pod.html). Please review the +/// [`safety`](https://docs.rs/bytemuck/latest/bytemuck/trait.Pod.html#safety) +/// section before using. +/// +/// Using `zero_copy` requires adding the following to your `cargo.toml` file: +/// `bytemuck = { version = "1.4.0", features = ["derive", "min_const_generics"]}` +#[proc_macro_attribute] +pub fn account( + args: proc_macro::TokenStream, + input: proc_macro::TokenStream, +) -> proc_macro::TokenStream { + let mut namespace = "".to_string(); + let mut is_zero_copy = false; + let mut unsafe_bytemuck = false; + let args_str = args.to_string(); + let args: Vec<&str> = args_str.split(',').collect(); + if args.len() > 2 { + panic!("Only two args are allowed to the account attribute.") + } + for arg in args { + let ns = arg + .to_string() + .replace('\"', "") + .chars() + .filter(|c| !c.is_whitespace()) + .collect(); + if ns == "zero_copy" { + is_zero_copy = true; + unsafe_bytemuck = false; + } else if ns == "zero_copy(unsafe)" { + is_zero_copy = true; + unsafe_bytemuck = true; + } else { + namespace = ns; + } + } + + let account_strct = parse_macro_input!(input as syn::ItemStruct); + let account_name = &account_strct.ident; + let account_name_str = account_name.to_string(); + let (impl_gen, type_gen, where_clause) = account_strct.generics.split_for_impl(); + + let discriminator: proc_macro2::TokenStream = { + // Namespace the discriminator to prevent collisions. + let discriminator_preimage = { + // For now, zero copy accounts can't be namespaced. + if namespace.is_empty() { + format!("account:{account_name}") + } else { + format!("{namespace}:{account_name}") + } + }; + + let mut discriminator = [0u8; 8]; + discriminator.copy_from_slice( + &anchor_syn::hash::hash(discriminator_preimage.as_bytes()).to_bytes()[..8], + ); + format!("{discriminator:?}").parse().unwrap() + }; + + let owner_impl = { + if namespace.is_empty() { + quote! { + #[automatically_derived] + impl #impl_gen anchor_lang::Owner for #account_name #type_gen #where_clause { + fn owner() -> Pubkey { + crate::ID + } + } + } + } else { + quote! {} + } + }; + + let unsafe_bytemuck_impl = { + if unsafe_bytemuck { + quote! { + #[automatically_derived] + unsafe impl #impl_gen anchor_lang::__private::bytemuck::Pod for #account_name #type_gen #where_clause {} + #[automatically_derived] + unsafe impl #impl_gen anchor_lang::__private::bytemuck::Zeroable for #account_name #type_gen #where_clause {} + } + } else { + quote! {} + } + }; + + let bytemuck_derives = { + if !unsafe_bytemuck { + quote! { + #[zero_copy] + } + } else { + quote! { + #[zero_copy(unsafe)] + } + } + }; + + proc_macro::TokenStream::from({ + if is_zero_copy { + quote! { + #bytemuck_derives + #account_strct + + #unsafe_bytemuck_impl + + #[automatically_derived] + impl #impl_gen anchor_lang::ZeroCopy for #account_name #type_gen #where_clause {} + + #[automatically_derived] + impl #impl_gen anchor_lang::Discriminator for #account_name #type_gen #where_clause { + const DISCRIMINATOR: [u8; 8] = #discriminator; + } + + // This trait is useful for clients deserializing accounts. + // It's expected on-chain programs deserialize via zero-copy. + #[automatically_derived] + impl #impl_gen anchor_lang::AccountDeserialize for #account_name #type_gen #where_clause { + fn try_deserialize(buf: &mut &[u8]) -> anchor_lang::Result { + if buf.len() < #discriminator.len() { + return Err(anchor_lang::error::ErrorCode::AccountDiscriminatorNotFound.into()); + } + let given_disc = &buf[..8]; + if &#discriminator != given_disc { + return Err(anchor_lang::error!(anchor_lang::error::ErrorCode::AccountDiscriminatorMismatch).with_account_name(#account_name_str)); + } + Self::try_deserialize_unchecked(buf) + } + + fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result { + let data: &[u8] = &buf[8..]; + // Re-interpret raw bytes into the POD data structure. + let account = anchor_lang::__private::bytemuck::from_bytes(data); + // Copy out the bytes into a new, owned data structure. + Ok(*account) + } + } + + #owner_impl + } + } else { + quote! { + #[derive(AnchorSerialize, AnchorDeserialize, Clone)] + #account_strct + + #[automatically_derived] + impl #impl_gen anchor_lang::AccountSerialize for #account_name #type_gen #where_clause { + fn try_serialize(&self, writer: &mut W) -> anchor_lang::Result<()> { + if writer.write_all(&#discriminator).is_err() { + return Err(anchor_lang::error::ErrorCode::AccountDidNotSerialize.into()); + } + + if AnchorSerialize::serialize(self, writer).is_err() { + return Err(anchor_lang::error::ErrorCode::AccountDidNotSerialize.into()); + } + Ok(()) + } + } + + #[automatically_derived] + impl #impl_gen anchor_lang::AccountDeserialize for #account_name #type_gen #where_clause { + fn try_deserialize(buf: &mut &[u8]) -> anchor_lang::Result { + if buf.len() < #discriminator.len() { + return Err(anchor_lang::error::ErrorCode::AccountDiscriminatorNotFound.into()); + } + let given_disc = &buf[..8]; + if &#discriminator != given_disc { + return Err(anchor_lang::error!(anchor_lang::error::ErrorCode::AccountDiscriminatorMismatch).with_account_name(#account_name_str)); + } + Self::try_deserialize_unchecked(buf) + } + + fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result { + let mut data: &[u8] = &buf[8..]; + AnchorDeserialize::deserialize(&mut data) + .map_err(|_| anchor_lang::error::ErrorCode::AccountDidNotDeserialize.into()) + } + } + + #[automatically_derived] + impl #impl_gen anchor_lang::Discriminator for #account_name #type_gen #where_clause { + const DISCRIMINATOR: [u8; 8] = #discriminator; + } + + #owner_impl + } + } + }) +} + +#[proc_macro_attribute] +pub fn account_no_serde( + args: proc_macro::TokenStream, + input: proc_macro::TokenStream, +) -> proc_macro::TokenStream { + let mut namespace = "".to_string(); + let mut is_zero_copy = false; + let mut unsafe_bytemuck = false; + let args_str = args.to_string(); + let args: Vec<&str> = args_str.split(',').collect(); + if args.len() > 2 { + panic!("Only two args are allowed to the account attribute.") + } + for arg in args { + let ns = arg + .to_string() + .replace('\"', "") + .chars() + .filter(|c| !c.is_whitespace()) + .collect(); + if ns == "zero_copy" { + is_zero_copy = true; + unsafe_bytemuck = false; + } else if ns == "zero_copy(unsafe)" { + is_zero_copy = true; + unsafe_bytemuck = true; + } else { + namespace = ns; + } + } + + let account_strct = parse_macro_input!(input as syn::ItemStruct); + let account_name = &account_strct.ident; + let account_name_str = account_name.to_string(); + let (impl_gen, type_gen, where_clause) = account_strct.generics.split_for_impl(); + + let discriminator: proc_macro2::TokenStream = { + // Namespace the discriminator to prevent collisions. + let discriminator_preimage = { + // For now, zero copy accounts can't be namespaced. + if namespace.is_empty() { + format!("account:{account_name}") + } else { + format!("{namespace}:{account_name}") + } + }; + + let mut discriminator = [0u8; 8]; + discriminator.copy_from_slice( + &anchor_syn::hash::hash(discriminator_preimage.as_bytes()).to_bytes()[..8], + ); + format!("{discriminator:?}").parse().unwrap() + }; + + let owner_impl = { + if namespace.is_empty() { + quote! { + #[automatically_derived] + impl #impl_gen anchor_lang::Owner for #account_name #type_gen #where_clause { + fn owner() -> Pubkey { + crate::ID + } + } + } + } else { + quote! {} + } + }; + + let unsafe_bytemuck_impl = { + if unsafe_bytemuck { + quote! { + #[automatically_derived] + unsafe impl #impl_gen anchor_lang::__private::bytemuck::Pod for #account_name #type_gen #where_clause {} + #[automatically_derived] + unsafe impl #impl_gen anchor_lang::__private::bytemuck::Zeroable for #account_name #type_gen #where_clause {} + } + } else { + quote! {} + } + }; + + let bytemuck_derives = { + if !unsafe_bytemuck { + quote! { + #[zero_copy] + } + } else { + quote! { + #[zero_copy(unsafe)] + } + } + }; + + proc_macro::TokenStream::from({ + if is_zero_copy { + quote! { + #bytemuck_derives + #account_strct + + #unsafe_bytemuck_impl + + #[automatically_derived] + impl #impl_gen anchor_lang::ZeroCopy for #account_name #type_gen #where_clause {} + + #[automatically_derived] + impl #impl_gen anchor_lang::Discriminator for #account_name #type_gen #where_clause { + const DISCRIMINATOR: [u8; 8] = #discriminator; + } + + // This trait is useful for clients deserializing accounts. + // It's expected on-chain programs deserialize via zero-copy. + #[automatically_derived] + impl #impl_gen anchor_lang::AccountDeserialize for #account_name #type_gen #where_clause { + fn try_deserialize(buf: &mut &[u8]) -> anchor_lang::Result { + if buf.len() < #discriminator.len() { + return Err(anchor_lang::error::ErrorCode::AccountDiscriminatorNotFound.into()); + } + let given_disc = &buf[..8]; + if &#discriminator != given_disc { + return Err(anchor_lang::error!(anchor_lang::error::ErrorCode::AccountDiscriminatorMismatch).with_account_name(#account_name_str)); + } + Self::try_deserialize_unchecked(buf) + } + + fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result { + let data: &[u8] = &buf[8..]; + // Re-interpret raw bytes into the POD data structure. + let account = anchor_lang::__private::bytemuck::from_bytes(data); + // Copy out the bytes into a new, owned data structure. + Ok(*account) + } + } + + #owner_impl + } + } else { + quote! { + #[derive(Clone)] + #account_strct + + #[automatically_derived] + impl #impl_gen anchor_lang::AccountSerialize for #account_name #type_gen #where_clause { + fn try_serialize(&self, writer: &mut W) -> anchor_lang::Result<()> { + if writer.write_all(&#discriminator).is_err() { + return Err(anchor_lang::error::ErrorCode::AccountDidNotSerialize.into()); + } + + if AnchorSerialize::serialize(self, writer).is_err() { + return Err(anchor_lang::error::ErrorCode::AccountDidNotSerialize.into()); + } + Ok(()) + } + } + + #[automatically_derived] + impl #impl_gen anchor_lang::AccountDeserialize for #account_name #type_gen #where_clause { + fn try_deserialize(buf: &mut &[u8]) -> anchor_lang::Result { + if buf.len() < #discriminator.len() { + return Err(anchor_lang::error::ErrorCode::AccountDiscriminatorNotFound.into()); + } + let given_disc = &buf[..8]; + if &#discriminator != given_disc { + return Err(anchor_lang::error!(anchor_lang::error::ErrorCode::AccountDiscriminatorMismatch).with_account_name(#account_name_str)); + } + Self::try_deserialize_unchecked(buf) + } + + fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result { + let mut data: &[u8] = &buf[8..]; + AnchorDeserialize::deserialize(&mut data) + .map_err(|_| anchor_lang::error::ErrorCode::AccountDidNotDeserialize.into()) + } + } + + #[automatically_derived] + impl #impl_gen anchor_lang::Discriminator for #account_name #type_gen #where_clause { + const DISCRIMINATOR: [u8; 8] = #discriminator; + } + + #owner_impl + } + } + }) +} + +#[proc_macro_derive(ZeroCopyAccessor, attributes(accessor))] +pub fn derive_zero_copy_accessor(item: proc_macro::TokenStream) -> proc_macro::TokenStream { + let account_strct = parse_macro_input!(item as syn::ItemStruct); + let account_name = &account_strct.ident; + let (impl_gen, ty_gen, where_clause) = account_strct.generics.split_for_impl(); + + let fields = match &account_strct.fields { + syn::Fields::Named(n) => n, + _ => panic!("Fields must be named"), + }; + let methods: Vec = fields + .named + .iter() + .filter_map(|field: &syn::Field| { + field + .attrs + .iter() + .find(|attr| anchor_syn::parser::tts_to_string(&attr.path) == "accessor") + .map(|attr| { + let mut tts = attr.tokens.clone().into_iter(); + let g_stream = match tts.next().expect("Must have a token group") { + proc_macro2::TokenTree::Group(g) => g.stream(), + _ => panic!("Invalid syntax"), + }; + let accessor_ty = match g_stream.into_iter().next() { + Some(token) => token, + _ => panic!("Missing accessor type"), + }; + + let field_name = field.ident.as_ref().unwrap(); + + let get_field: proc_macro2::TokenStream = + format!("get_{field_name}").parse().unwrap(); + let set_field: proc_macro2::TokenStream = + format!("set_{field_name}").parse().unwrap(); + + quote! { + pub fn #get_field(&self) -> #accessor_ty { + anchor_lang::__private::ZeroCopyAccessor::get(&self.#field_name) + } + pub fn #set_field(&mut self, input: &#accessor_ty) { + self.#field_name = anchor_lang::__private::ZeroCopyAccessor::set(input); + } + } + }) + }) + .collect(); + proc_macro::TokenStream::from(quote! { + #[automatically_derived] + impl #impl_gen #account_name #ty_gen #where_clause { + #(#methods)* + } + }) +} + +/// A data structure that can be used as an internal field for a zero copy +/// deserialized account, i.e., a struct marked with `#[account(zero_copy)]`. +/// +/// `#[zero_copy]` is just a convenient alias for +/// +/// ```ignore +/// #[derive(Copy, Clone)] +/// #[derive(bytemuck::Zeroable)] +/// #[derive(bytemuck::Pod)] +/// #[repr(C)] +/// struct MyStruct {...} +/// ``` +#[proc_macro_attribute] +pub fn zero_copy( + args: proc_macro::TokenStream, + item: proc_macro::TokenStream, +) -> proc_macro::TokenStream { + let mut is_unsafe = false; + for arg in args.into_iter() { + match arg { + proc_macro::TokenTree::Ident(ident) => { + if ident.to_string() == "unsafe" { + // `#[zero_copy(unsafe)]` maintains the old behaviour + // + // ```ignore + // #[derive(Copy, Clone)] + // #[repr(packed)] + // struct MyStruct {...} + // ``` + is_unsafe = true; + } else { + // TODO: how to return a compile error with a span (can't return prase error because expected type TokenStream) + panic!("expected single ident `unsafe`"); + } + } + _ => { + panic!("expected single ident `unsafe`"); + } + } + } + + let account_strct = parse_macro_input!(item as syn::ItemStruct); + + // Takes the first repr. It's assumed that more than one are not on the + // struct. + let attr = account_strct + .attrs + .iter() + .find(|attr| anchor_syn::parser::tts_to_string(&attr.path) == "repr"); + + let repr = match attr { + // Users might want to manually specify repr modifiers e.g. repr(C, packed) + Some(_attr) => quote! {}, + None => { + if is_unsafe { + quote! {#[repr(packed)]} + } else { + quote! {#[repr(C)]} + } + } + }; + + let mut has_pod_attr = false; + let mut has_zeroable_attr = false; + for attr in account_strct.attrs.iter() { + let token_string = attr.tokens.to_string(); + if token_string.contains("bytemuck :: Pod") { + has_pod_attr = true; + } + if token_string.contains("bytemuck :: Zeroable") { + has_zeroable_attr = true; + } + } + + // Once the Pod derive macro is expanded the compiler has to use the local crate's + // bytemuck `::bytemuck::Pod` anyway, so we're no longer using the privately + // exported anchor bytemuck `__private::bytemuck`, so that there won't be any + // possible disparity between the anchor version and the local crate's version. + let pod = if has_pod_attr || is_unsafe { + quote! {} + } else { + quote! {#[derive(::bytemuck::Pod)]} + }; + let zeroable = if has_zeroable_attr || is_unsafe { + quote! {} + } else { + quote! {#[derive(::bytemuck::Zeroable)]} + }; + + let ret = quote! { + #[derive(anchor_lang::__private::ZeroCopyAccessor, Copy, Clone)] + #repr + #pod + #zeroable + #account_strct + }; + + #[cfg(feature = "idl-build")] + { + let derive_unsafe = if is_unsafe { + // Not a real proc-macro but exists in order to pass the serialization info + quote! { #[derive(bytemuck::Unsafe)] } + } else { + quote! {} + }; + let zc_struct = syn::parse2(quote! { + #derive_unsafe + #ret + }) + .unwrap(); + let idl_build_impl = anchor_syn::idl::impl_idl_build_struct(&zc_struct); + return proc_macro::TokenStream::from(quote! { + #ret + #idl_build_impl + }); + } + + #[allow(unreachable_code)] + proc_macro::TokenStream::from(ret) +} + +/// Defines the program's ID. This should be used at the root of all Anchor +/// based programs. +#[proc_macro] +pub fn declare_id(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + #[cfg(feature = "idl-build")] + let address = input.clone().to_string(); + + let id = parse_macro_input!(input as id::Id); + let ret = quote! { #id }; + + #[cfg(feature = "idl-build")] + { + let idl_print = anchor_syn::idl::gen_idl_print_fn_address(address); + return proc_macro::TokenStream::from(quote! { + #ret + #idl_print + }); + } + + #[allow(unreachable_code)] + proc_macro::TokenStream::from(ret) +} diff --git a/anchor/programs/glam/Cargo.toml b/anchor/programs/glam/Cargo.toml index 5b3cc758..a8dd34ef 100644 --- a/anchor/programs/glam/Cargo.toml +++ b/anchor/programs/glam/Cargo.toml @@ -13,18 +13,19 @@ no-entrypoint = [] no-idl = [] no-log-ix-name = [] cpi = ["no-entrypoint"] +idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] default = [] mainnet = [] devnet = [] [dependencies] anchor-lang = { workspace = true } +anchor-attribute-account = { workspace = true } anchor-spl = { workspace = true } solana-program = { workspace = true } -spl-associated-token-account = { workspace = true } -spl-token = { workspace = true } + +flatbuffers = { workspace = true } spl-token-2022 = { workspace = true } spl-token-metadata-interface = { workspace = true } -num_enum = { workspace = true } pyth-sdk-solana = { workspace = true } drift = { workspace = true } diff --git a/anchor/programs/glam/src/state/fund.rs b/anchor/programs/glam/src/state/fund.rs index 020adafa..558bf249 100644 --- a/anchor/programs/glam/src/state/fund.rs +++ b/anchor/programs/glam/src/state/fund.rs @@ -1,12 +1,75 @@ +use anchor_attribute_account::account_no_serde; +#[cfg(feature = "idl-build")] +use anchor_lang::idl::types::*; use anchor_lang::prelude::*; +use crate::state::glam_generated::glam::{root_as_weapon, WeaponT}; + pub const MAX_ASSETS: usize = 5; pub const MAX_SHARE_CLASSES: usize = 3; pub const MAX_FUND_NAME: usize = 50; pub const MAX_FUND_SYMBOL: usize = 20; pub const MAX_FUND_URI: usize = 100; -#[account] +impl AnchorDeserialize for WeaponT { + fn deserialize_reader(reader: &mut R) -> std::result::Result + where + R: std::io::Read, + { + let mut buf = Vec::new(); + reader.read_to_end(&mut buf)?; + + root_as_weapon(&buf) + .map(|weapon| weapon.unpack()) + .map_err(|err| { + std::io::Error::new( + std::io::ErrorKind::InvalidInput, + format!("Error deserializing: {}", err), + ) + }) + } +} +impl AnchorSerialize for WeaponT { + fn serialize(&self, writer: &mut W) -> std::result::Result<(), std::io::Error> + where + W: std::io::Write, + { + let mut builder = flatbuffers::FlatBufferBuilder::new(); + let weapon = self.pack(&mut builder); + builder.finish(weapon, None); + let buf = builder.finished_data(); + writer.write_all(buf) + } +} +#[cfg(feature = "idl-build")] +impl IdlBuild for WeaponT { + fn create_type() -> Option { + Some(IdlTypeDef { + name: "WeaponT".into(), + ty: IdlTypeDefTy::Struct { + fields: Some(IdlDefinedFields::Named(vec![ + IdlField { + name: "name".into(), + ty: IdlType::Option(Box::new(IdlType::String)), + docs: Default::default(), + }, + IdlField { + name: "damange".into(), + ty: IdlType::Option(Box::new(IdlType::I16)), + docs: Default::default(), + }, + ])), + }, + docs: Default::default(), + generics: Default::default(), + serialization: Default::default(), + repr: Default::default(), + }) + } +} + +#[account_no_serde] +#[derive(AnchorDeserialize, AnchorSerialize)] pub struct Fund { pub manager: Pubkey, // 32 pub treasury: Pubkey, // 32 @@ -24,21 +87,10 @@ pub struct Fund { pub symbol: String, // max MAX_FUND_SYMBOL chars pub uri: String, // max MAX_FUND_URI chars pub is_active: bool, // 1 + // pub weapon: WeaponT, } impl Fund { - pub const INIT_SIZE: usize = 32 - + 32 - + 1 - + (32 + 4) * MAX_ASSETS - + 1 - + (32 + 1) * MAX_SHARE_CLASSES - + 8 - + 1 - + 1 - + MAX_FUND_NAME - + MAX_FUND_SYMBOL - + MAX_FUND_URI - + 1; + pub const INIT_SIZE: usize = 1024; } #[account] diff --git a/anchor/programs/glam/src/state/glam_generated.rs b/anchor/programs/glam/src/state/glam_generated.rs new file mode 100644 index 00000000..9d717b93 --- /dev/null +++ b/anchor/programs/glam/src/state/glam_generated.rs @@ -0,0 +1,250 @@ +// automatically generated by the FlatBuffers compiler, do not modify + + +// @generated + +use core::mem; +use core::cmp::Ordering; + +extern crate flatbuffers; +use self::flatbuffers::{EndianScalar, Follow}; + +#[allow(unused_imports, dead_code)] +pub mod glam { + + use core::mem; + use core::cmp::Ordering; + + extern crate flatbuffers; + use self::flatbuffers::{EndianScalar, Follow}; + +pub enum WeaponOffset {} +#[derive(Copy, Clone, PartialEq)] + +pub struct Weapon<'a> { + pub _tab: flatbuffers::Table<'a>, +} + +impl<'a> flatbuffers::Follow<'a> for Weapon<'a> { + type Inner = Weapon<'a>; + #[inline] + unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { + Self { _tab: flatbuffers::Table::new(buf, loc) } + } +} + +impl<'a> Weapon<'a> { + pub const VT_NAME: flatbuffers::VOffsetT = 4; + pub const VT_DAMAGE: flatbuffers::VOffsetT = 6; + + pub const fn get_fully_qualified_name() -> &'static str { + "Glam.Weapon" + } + + #[inline] + pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self { + Weapon { _tab: table } + } + #[allow(unused_mut)] + pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>( + _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>, + args: &'args WeaponArgs<'args> + ) -> flatbuffers::WIPOffset> { + let mut builder = WeaponBuilder::new(_fbb); + if let Some(x) = args.name { builder.add_name(x); } + builder.add_damage(args.damage); + builder.finish() + } + + pub fn unpack(&self) -> WeaponT { + let name = self.name().map(|x| { + x.to_string() + }); + let damage = self.damage(); + WeaponT { + name, + damage, + } + } + + #[inline] + pub fn name(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(Weapon::VT_NAME, None)} + } + #[inline] + pub fn damage(&self) -> i16 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(Weapon::VT_DAMAGE, Some(0)).unwrap()} + } +} + +impl flatbuffers::Verifiable for Weapon<'_> { + #[inline] + fn run_verifier( + v: &mut flatbuffers::Verifier, pos: usize + ) -> Result<(), flatbuffers::InvalidFlatbuffer> { + use self::flatbuffers::Verifiable; + v.visit_table(pos)? + .visit_field::>("name", Self::VT_NAME, false)? + .visit_field::("damage", Self::VT_DAMAGE, false)? + .finish(); + Ok(()) + } +} +pub struct WeaponArgs<'a> { + pub name: Option>, + pub damage: i16, +} +impl<'a> Default for WeaponArgs<'a> { + #[inline] + fn default() -> Self { + WeaponArgs { + name: None, + damage: 0, + } + } +} + +pub struct WeaponBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> { + fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>, + start_: flatbuffers::WIPOffset, +} +impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> WeaponBuilder<'a, 'b, A> { + #[inline] + pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(Weapon::VT_NAME, name); + } + #[inline] + pub fn add_damage(&mut self, damage: i16) { + self.fbb_.push_slot::(Weapon::VT_DAMAGE, damage, 0); + } + #[inline] + pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> WeaponBuilder<'a, 'b, A> { + let start = _fbb.start_table(); + WeaponBuilder { + fbb_: _fbb, + start_: start, + } + } + #[inline] + pub fn finish(self) -> flatbuffers::WIPOffset> { + let o = self.fbb_.end_table(self.start_); + flatbuffers::WIPOffset::new(o.value()) + } +} + +impl core::fmt::Debug for Weapon<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut ds = f.debug_struct("Weapon"); + ds.field("name", &self.name()); + ds.field("damage", &self.damage()); + ds.finish() + } +} +#[non_exhaustive] +#[derive(Debug, Clone, PartialEq)] +pub struct WeaponT { + pub name: Option, + pub damage: i16, +} +impl Default for WeaponT { + fn default() -> Self { + Self { + name: None, + damage: 0, + } + } +} +impl WeaponT { + pub fn pack<'b, A: flatbuffers::Allocator + 'b>( + &self, + _fbb: &mut flatbuffers::FlatBufferBuilder<'b, A> + ) -> flatbuffers::WIPOffset> { + let name = self.name.as_ref().map(|x|{ + _fbb.create_string(x) + }); + let damage = self.damage; + Weapon::create(_fbb, &WeaponArgs{ + name, + damage, + }) + } +} +#[inline] +/// Verifies that a buffer of bytes contains a `Weapon` +/// and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_weapon_unchecked`. +pub fn root_as_weapon(buf: &[u8]) -> Result { + flatbuffers::root::(buf) +} +#[inline] +/// Verifies that a buffer of bytes contains a size prefixed +/// `Weapon` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `size_prefixed_root_as_weapon_unchecked`. +pub fn size_prefixed_root_as_weapon(buf: &[u8]) -> Result { + flatbuffers::size_prefixed_root::(buf) +} +#[inline] +/// Verifies, with the given options, that a buffer of bytes +/// contains a `Weapon` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_weapon_unchecked`. +pub fn root_as_weapon_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::root_with_opts::>(opts, buf) +} +#[inline] +/// Verifies, with the given verifier options, that a buffer of +/// bytes contains a size prefixed `Weapon` and returns +/// it. Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_weapon_unchecked`. +pub fn size_prefixed_root_as_weapon_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::size_prefixed_root_with_opts::>(opts, buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a Weapon and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid `Weapon`. +pub unsafe fn root_as_weapon_unchecked(buf: &[u8]) -> Weapon { + flatbuffers::root_unchecked::(buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a size prefixed Weapon and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid size prefixed `Weapon`. +pub unsafe fn size_prefixed_root_as_weapon_unchecked(buf: &[u8]) -> Weapon { + flatbuffers::size_prefixed_root_unchecked::(buf) +} +#[inline] +pub fn finish_weapon_buffer<'a, 'b, A: flatbuffers::Allocator + 'a>( + fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>, + root: flatbuffers::WIPOffset>) { + fbb.finish(root, None); +} + +#[inline] +pub fn finish_size_prefixed_weapon_buffer<'a, 'b, A: flatbuffers::Allocator + 'a>(fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>, root: flatbuffers::WIPOffset>) { + fbb.finish_size_prefixed(root, None); +} +} // pub mod Glam + diff --git a/anchor/programs/glam/src/state/mod.rs b/anchor/programs/glam/src/state/mod.rs index b1abad8e..c52c5403 100644 --- a/anchor/programs/glam/src/state/mod.rs +++ b/anchor/programs/glam/src/state/mod.rs @@ -1,3 +1,6 @@ pub mod fund; - pub use fund::*; + +#[allow(dead_code, unused_imports)] +#[allow(clippy::all)] +mod glam_generated; diff --git a/anchor/schema/glam.fbs b/anchor/schema/glam.fbs new file mode 100644 index 00000000..233ad637 --- /dev/null +++ b/anchor/schema/glam.fbs @@ -0,0 +1,8 @@ +namespace Glam; + +table Weapon { + name:string; + damage:short; +} + +root_type Weapon; diff --git a/anchor/schema/glam_generated.rs b/anchor/schema/glam_generated.rs new file mode 100644 index 00000000..9d717b93 --- /dev/null +++ b/anchor/schema/glam_generated.rs @@ -0,0 +1,250 @@ +// automatically generated by the FlatBuffers compiler, do not modify + + +// @generated + +use core::mem; +use core::cmp::Ordering; + +extern crate flatbuffers; +use self::flatbuffers::{EndianScalar, Follow}; + +#[allow(unused_imports, dead_code)] +pub mod glam { + + use core::mem; + use core::cmp::Ordering; + + extern crate flatbuffers; + use self::flatbuffers::{EndianScalar, Follow}; + +pub enum WeaponOffset {} +#[derive(Copy, Clone, PartialEq)] + +pub struct Weapon<'a> { + pub _tab: flatbuffers::Table<'a>, +} + +impl<'a> flatbuffers::Follow<'a> for Weapon<'a> { + type Inner = Weapon<'a>; + #[inline] + unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { + Self { _tab: flatbuffers::Table::new(buf, loc) } + } +} + +impl<'a> Weapon<'a> { + pub const VT_NAME: flatbuffers::VOffsetT = 4; + pub const VT_DAMAGE: flatbuffers::VOffsetT = 6; + + pub const fn get_fully_qualified_name() -> &'static str { + "Glam.Weapon" + } + + #[inline] + pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self { + Weapon { _tab: table } + } + #[allow(unused_mut)] + pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr, A: flatbuffers::Allocator + 'bldr>( + _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr, A>, + args: &'args WeaponArgs<'args> + ) -> flatbuffers::WIPOffset> { + let mut builder = WeaponBuilder::new(_fbb); + if let Some(x) = args.name { builder.add_name(x); } + builder.add_damage(args.damage); + builder.finish() + } + + pub fn unpack(&self) -> WeaponT { + let name = self.name().map(|x| { + x.to_string() + }); + let damage = self.damage(); + WeaponT { + name, + damage, + } + } + + #[inline] + pub fn name(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(Weapon::VT_NAME, None)} + } + #[inline] + pub fn damage(&self) -> i16 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(Weapon::VT_DAMAGE, Some(0)).unwrap()} + } +} + +impl flatbuffers::Verifiable for Weapon<'_> { + #[inline] + fn run_verifier( + v: &mut flatbuffers::Verifier, pos: usize + ) -> Result<(), flatbuffers::InvalidFlatbuffer> { + use self::flatbuffers::Verifiable; + v.visit_table(pos)? + .visit_field::>("name", Self::VT_NAME, false)? + .visit_field::("damage", Self::VT_DAMAGE, false)? + .finish(); + Ok(()) + } +} +pub struct WeaponArgs<'a> { + pub name: Option>, + pub damage: i16, +} +impl<'a> Default for WeaponArgs<'a> { + #[inline] + fn default() -> Self { + WeaponArgs { + name: None, + damage: 0, + } + } +} + +pub struct WeaponBuilder<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> { + fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a, A>, + start_: flatbuffers::WIPOffset, +} +impl<'a: 'b, 'b, A: flatbuffers::Allocator + 'a> WeaponBuilder<'a, 'b, A> { + #[inline] + pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(Weapon::VT_NAME, name); + } + #[inline] + pub fn add_damage(&mut self, damage: i16) { + self.fbb_.push_slot::(Weapon::VT_DAMAGE, damage, 0); + } + #[inline] + pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>) -> WeaponBuilder<'a, 'b, A> { + let start = _fbb.start_table(); + WeaponBuilder { + fbb_: _fbb, + start_: start, + } + } + #[inline] + pub fn finish(self) -> flatbuffers::WIPOffset> { + let o = self.fbb_.end_table(self.start_); + flatbuffers::WIPOffset::new(o.value()) + } +} + +impl core::fmt::Debug for Weapon<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut ds = f.debug_struct("Weapon"); + ds.field("name", &self.name()); + ds.field("damage", &self.damage()); + ds.finish() + } +} +#[non_exhaustive] +#[derive(Debug, Clone, PartialEq)] +pub struct WeaponT { + pub name: Option, + pub damage: i16, +} +impl Default for WeaponT { + fn default() -> Self { + Self { + name: None, + damage: 0, + } + } +} +impl WeaponT { + pub fn pack<'b, A: flatbuffers::Allocator + 'b>( + &self, + _fbb: &mut flatbuffers::FlatBufferBuilder<'b, A> + ) -> flatbuffers::WIPOffset> { + let name = self.name.as_ref().map(|x|{ + _fbb.create_string(x) + }); + let damage = self.damage; + Weapon::create(_fbb, &WeaponArgs{ + name, + damage, + }) + } +} +#[inline] +/// Verifies that a buffer of bytes contains a `Weapon` +/// and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_weapon_unchecked`. +pub fn root_as_weapon(buf: &[u8]) -> Result { + flatbuffers::root::(buf) +} +#[inline] +/// Verifies that a buffer of bytes contains a size prefixed +/// `Weapon` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `size_prefixed_root_as_weapon_unchecked`. +pub fn size_prefixed_root_as_weapon(buf: &[u8]) -> Result { + flatbuffers::size_prefixed_root::(buf) +} +#[inline] +/// Verifies, with the given options, that a buffer of bytes +/// contains a `Weapon` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_weapon_unchecked`. +pub fn root_as_weapon_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::root_with_opts::>(opts, buf) +} +#[inline] +/// Verifies, with the given verifier options, that a buffer of +/// bytes contains a size prefixed `Weapon` and returns +/// it. Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_weapon_unchecked`. +pub fn size_prefixed_root_as_weapon_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::size_prefixed_root_with_opts::>(opts, buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a Weapon and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid `Weapon`. +pub unsafe fn root_as_weapon_unchecked(buf: &[u8]) -> Weapon { + flatbuffers::root_unchecked::(buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a size prefixed Weapon and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid size prefixed `Weapon`. +pub unsafe fn size_prefixed_root_as_weapon_unchecked(buf: &[u8]) -> Weapon { + flatbuffers::size_prefixed_root_unchecked::(buf) +} +#[inline] +pub fn finish_weapon_buffer<'a, 'b, A: flatbuffers::Allocator + 'a>( + fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>, + root: flatbuffers::WIPOffset>) { + fbb.finish(root, None); +} + +#[inline] +pub fn finish_size_prefixed_weapon_buffer<'a, 'b, A: flatbuffers::Allocator + 'a>(fbb: &'b mut flatbuffers::FlatBufferBuilder<'a, A>, root: flatbuffers::WIPOffset>) { + fbb.finish_size_prefixed(root, None); +} +} // pub mod Glam + diff --git a/anchor/target/idl/custody.json b/anchor/target/idl/custody.json deleted file mode 100644 index bfe94e43..00000000 --- a/anchor/target/idl/custody.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "version": "0.1.0", - "name": "custody", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "CustomError", - "msg": "Custom error message" - } - ], - "metadata": { - "address": "Gcu1vbed9bwpfwU9PCnJw8QanQfVHfETWxAK3EZczbgo" - } -} \ No newline at end of file diff --git a/anchor/target/idl/glam.json b/anchor/target/idl/glam.json index e6c32750..05b51b9a 100644 --- a/anchor/target/idl/glam.json +++ b/anchor/target/idl/glam.json @@ -1,538 +1,800 @@ { - "version": "0.1.0", - "name": "glam", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], + "address": "Gco1pcjxCMYjKJjSNJ7mKV7qezeUTE7arXJgy7PAPNRc", + "metadata": { + "name": "glam", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, "instructions": [ { - "name": "initialize", + "name": "close", + "discriminator": [ + 98, + 165, + 201, + 177, + 108, + 65, + 206, + 96 + ], "accounts": [ { "name": "fund", - "isMut": true, - "isSigner": false - }, - { - "name": "treasury", - "isMut": true, - "isSigner": false - }, - { - "name": "share", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "manager", - "isMut": true, - "isSigner": true - }, + "writable": true, + "signer": true, + "relations": [ + "fund" + ] + } + ], + "args": [] + }, + { + "name": "drift_close", + "discriminator": [ + 23, + 133, + 219, + 157, + 137, + 34, + 93, + 58 + ], + "accounts": [ { - "name": "systemProgram", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + "name": "treasury" }, { - "name": "rent", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "fundName", - "type": "string" + "name": "user_stats", + "writable": true }, { - "name": "fundSymbol", - "type": "string" + "name": "user", + "writable": true }, { - "name": "fundUri", - "type": "string" + "name": "state", + "writable": true }, { - "name": "assetWeights", - "type": { - "vec": "u32" - } + "name": "manager", + "writable": true, + "signer": true, + "relations": [ + "fund" + ] }, { - "name": "activate", - "type": "bool" + "name": "drift_program", + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" }, { - "name": "shareClassMetadata", - "type": { - "defined": "ShareClassMetadata" - } + "name": "system_program", + "address": "11111111111111111111111111111111" } - ] + ], + "args": [] }, { - "name": "update", + "name": "drift_deposit", + "discriminator": [ + 252, + 63, + 250, + 201, + 98, + 55, + 130, + 12 + ], "accounts": [ { - "name": "fund", - "isMut": true, - "isSigner": false + "name": "fund" }, { - "name": "manager", - "isMut": true, - "isSigner": true - } - ], - "args": [ + "name": "treasury" + }, { - "name": "name", - "type": { - "option": "string" - } + "name": "user_stats", + "writable": true }, { - "name": "uri", - "type": { - "option": "string" - } + "name": "user", + "writable": true }, { - "name": "assetWeights", - "type": { - "option": { - "vec": "u32" - } - } + "name": "state", + "writable": true }, { - "name": "activate", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "close", - "accounts": [ + "name": "treasury_ata", + "writable": true + }, { - "name": "fund", - "isMut": true, - "isSigner": false + "name": "drift_ata", + "writable": true }, { "name": "manager", - "isMut": true, - "isSigner": true + "writable": true, + "signer": true, + "relations": [ + "fund" + ] + }, + { + "name": "drift_program", + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" + }, + { + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" } ], - "args": [] + "args": [ + { + "name": "amount", + "type": "u64" + } + ] }, { - "name": "subscribe", + "name": "drift_initialize", + "discriminator": [ + 21, + 21, + 69, + 55, + 41, + 129, + 44, + 198 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "shareClass", - "isMut": true, - "isSigner": false + "name": "treasury" }, { - "name": "signerShareAta", - "isMut": true, - "isSigner": false + "name": "user_stats", + "writable": true }, { - "name": "asset", - "isMut": true, - "isSigner": false - }, - { - "name": "treasuryAta", - "isMut": true, - "isSigner": false - }, - { - "name": "signerAssetAta", - "isMut": true, - "isSigner": false + "name": "user", + "writable": true }, { - "name": "signer", - "isMut": true, - "isSigner": true + "name": "state", + "writable": true }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + "name": "manager", + "writable": true, + "signer": true, + "relations": [ + "fund" + ] }, { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false + "name": "drift_program", + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + "name": "rent", + "address": "SysvarRent111111111111111111111111111111111" }, { - "name": "token2022Program", - "isMut": false, - "isSigner": false + "name": "system_program", + "address": "11111111111111111111111111111111" } ], "args": [ { - "name": "amount", - "type": "u64" - }, - { - "name": "skipState", - "type": "bool" + "name": "trader", + "type": { + "option": "pubkey" + } } ] }, { - "name": "redeem", + "name": "drift_update_delegated_trader", + "discriminator": [ + 98, + 66, + 206, + 146, + 109, + 215, + 206, + 57 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "shareClass", - "isMut": true, - "isSigner": false + "name": "fund" }, { - "name": "signerShareAta", - "isMut": true, - "isSigner": false + "name": "treasury" }, { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "user", + "writable": true }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + "name": "manager", + "writable": true, + "signer": true, + "relations": [ + "fund" + ] }, { - "name": "token2022Program", - "isMut": false, - "isSigner": false + "name": "drift_program", + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" } ], "args": [ { - "name": "amount", - "type": "u64" - }, - { - "name": "inKind", - "type": "bool" - }, - { - "name": "skipState", - "type": "bool" + "name": "trader", + "type": { + "option": "pubkey" + } } ] }, { - "name": "driftInitialize", + "name": "drift_withdraw", + "discriminator": [ + 86, + 59, + 186, + 123, + 183, + 181, + 234, + 137 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "treasury" }, { - "name": "userStats", - "isMut": true, - "isSigner": false + "name": "user_stats", + "writable": true }, { "name": "user", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "state", - "isMut": true, - "isSigner": false + "writable": true }, { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "drift_signer" }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "treasury_ata", + "writable": true }, { - "name": "rent", - "isMut": false, - "isSigner": false + "name": "drift_ata", + "writable": true + }, + { + "name": "manager", + "writable": true, + "signer": true, + "relations": [ + "fund" + ] + }, + { + "name": "drift_program", + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" } ], "args": [ { - "name": "trader", - "type": { - "option": "publicKey" - } + "name": "amount", + "type": "u64" } ] }, { - "name": "driftUpdateDelegatedTrader", + "name": "initialize", + "discriminator": [ + 175, + 175, + 109, + 31, + 13, + 152, + 155, + 237 + ], "accounts": [ { "name": "fund", - "isMut": false, - "isSigner": false + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 102, + 117, + 110, + 100 + ] + }, + { + "kind": "account", + "path": "manager" + }, + { + "kind": "arg", + "path": "name" + } + ] + } }, { "name": "treasury", - "isMut": false, - "isSigner": false + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 114, + 101, + 97, + 115, + 117, + 114, + 121 + ] + }, + { + "kind": "account", + "path": "fund" + } + ] + } }, { - "name": "user", - "isMut": true, - "isSigner": false + "name": "share", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 104, + 97, + 114, + 101, + 45, + 48 + ] + }, + { + "kind": "account", + "path": "fund" + } + ] + } }, { "name": "manager", - "isMut": true, - "isSigner": true + "writable": true, + "signer": true }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "system_program", + "address": "11111111111111111111111111111111" + }, + { + "name": "token_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + }, + { + "name": "rent", + "address": "SysvarRent111111111111111111111111111111111" } ], "args": [ { - "name": "trader", + "name": "fund_name", + "type": "string" + }, + { + "name": "fund_symbol", + "type": "string" + }, + { + "name": "fund_uri", + "type": "string" + }, + { + "name": "asset_weights", "type": { - "option": "publicKey" + "vec": "u32" + } + }, + { + "name": "activate", + "type": "bool" + }, + { + "name": "share_class_metadata", + "type": { + "defined": { + "name": "ShareClassMetadata" + } } } ] }, { - "name": "driftDeposit", + "name": "redeem", + "discriminator": [ + 184, + 12, + 86, + 149, + 70, + 196, + 97, + 225 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false - }, - { - "name": "user", - "isMut": true, - "isSigner": false + "name": "fund" }, { - "name": "state", - "isMut": true, - "isSigner": false + "name": "share_class", + "writable": true }, { - "name": "treasuryAta", - "isMut": true, - "isSigner": false + "name": "signer_share_ata", + "writable": true }, { - "name": "driftAta", - "isMut": true, - "isSigner": false + "name": "signer", + "writable": true, + "signer": true }, { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "treasury" }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + "name": "token_2022_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" } ], "args": [ { "name": "amount", "type": "u64" + }, + { + "name": "in_kind", + "type": "bool" + }, + { + "name": "skip_state", + "type": "bool" } ] }, { - "name": "driftWithdraw", + "name": "subscribe", + "discriminator": [ + 254, + 28, + 191, + 138, + 156, + 179, + 183, + 53 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "share_class", + "writable": true }, { - "name": "userStats", - "isMut": true, - "isSigner": false + "name": "signer_share_ata", + "writable": true }, { - "name": "user", - "isMut": true, - "isSigner": false + "name": "asset", + "writable": true }, { - "name": "state", - "isMut": true, - "isSigner": false + "name": "treasury_ata", + "writable": true }, { - "name": "driftSigner", - "isMut": false, - "isSigner": false + "name": "signer_asset_ata", + "writable": true }, { - "name": "treasuryAta", - "isMut": true, - "isSigner": false + "name": "signer", + "writable": true, + "signer": true }, { - "name": "driftAta", - "isMut": true, - "isSigner": false + "name": "system_program", + "address": "11111111111111111111111111111111" }, { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "associated_token_program", + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "token_program", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + "name": "token_2022_program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" } ], "args": [ { "name": "amount", "type": "u64" + }, + { + "name": "skip_state", + "type": "bool" } ] }, { - "name": "driftClose", + "name": "update", + "discriminator": [ + 219, + 200, + 88, + 176, + 158, + 63, + 253, + 127 + ], "accounts": [ { "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false + "writable": true }, { - "name": "user", - "isMut": true, - "isSigner": false - }, + "name": "manager", + "writable": true, + "signer": true, + "relations": [ + "fund" + ] + } + ], + "args": [ { - "name": "state", - "isMut": true, - "isSigner": false + "name": "name", + "type": { + "option": "string" + } }, { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "uri", + "type": { + "option": "string" + } }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "asset_weights", + "type": { + "option": { + "vec": "u32" + } + } }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + "name": "activate", + "type": { + "option": "bool" + } } - ], - "args": [] + ] } ], "accounts": [ + { + "name": "Fund", + "discriminator": [ + 62, + 128, + 183, + 208, + 91, + 31, + 212, + 209 + ] + }, + { + "name": "State", + "discriminator": [ + 216, + 146, + 107, + 94, + 104, + 75, + 182, + 177 + ] + }, + { + "name": "Treasury", + "discriminator": [ + 238, + 239, + 123, + 238, + 89, + 1, + 168, + 253 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "CloseNotEmptyError", + "msg": "Error closing account: not empty" + }, + { + "code": 6001, + "name": "NotAuthorizedError", + "msg": "Error: not authorized" + }, + { + "code": 6002, + "name": "InvalidFundName", + "msg": "Invalid fund name: max 30 chars" + }, + { + "code": 6003, + "name": "InvalidFundSymbol", + "msg": "Too many assets: max 50" + }, + { + "code": 6004, + "name": "InvalidFundUri", + "msg": "Too many assets: max 20" + }, + { + "code": 6005, + "name": "InvalidAssetsLen", + "msg": "Too many assets: max 100" + }, + { + "code": 6006, + "name": "InvalidAssetsWeights", + "msg": "Number of weights should match number of assets" + } + ], + "types": [ + { + "name": "FeeStructure", + "type": { + "kind": "struct", + "fields": [ + { + "name": "fee_tiers", + "type": { + "array": [ + { + "defined": { + "name": "FeeTier" + } + }, + 10 + ] + } + }, + { + "name": "filler_reward_structure", + "type": { + "defined": { + "name": "OrderFillerRewardStructure" + } + } + }, + { + "name": "referrer_reward_epoch_upper_bound", + "type": "u64" + }, + { + "name": "flat_filler_fee", + "type": "u64" + } + ] + } + }, + { + "name": "FeeTier", + "type": { + "kind": "struct", + "fields": [ + { + "name": "fee_numerator", + "type": "u32" + }, + { + "name": "fee_denominator", + "type": "u32" + }, + { + "name": "maker_rebate_numerator", + "type": "u32" + }, + { + "name": "maker_rebate_denominator", + "type": "u32" + }, + { + "name": "referrer_reward_numerator", + "type": "u32" + }, + { + "name": "referrer_reward_denominator", + "type": "u32" + }, + { + "name": "referee_fee_numerator", + "type": "u32" + }, + { + "name": "referee_fee_denominator", + "type": "u32" + } + ] + } + }, { "name": "Fund", "type": { @@ -540,27 +802,27 @@ "fields": [ { "name": "manager", - "type": "publicKey" + "type": "pubkey" }, { "name": "treasury", - "type": "publicKey" + "type": "pubkey" }, { - "name": "assetsLen", + "name": "assets_len", "type": "u8" }, { "name": "assets", "type": { "array": [ - "publicKey", + "pubkey", 5 ] } }, { - "name": "assetsWeights", + "name": "assets_weights", "type": { "array": [ "u32", @@ -569,31 +831,33 @@ } }, { - "name": "shareClassesLen", + "name": "share_classes_len", "type": "u8" }, { - "name": "shareClasses", + "name": "share_classes", "type": { "array": [ - "publicKey", + "pubkey", 3 ] } }, { - "name": "shareClassesMetadata", + "name": "share_classes_metadata", "type": { "array": [ { - "defined": "ShareClassMetadata" + "defined": { + "name": "ShareClassMetadata" + } }, 3 ] } }, { - "name": "shareClassesBumps", + "name": "share_classes_bumps", "type": { "array": [ "u8", @@ -602,15 +866,15 @@ } }, { - "name": "timeCreated", + "name": "time_created", "type": "i64" }, { - "name": "bumpFund", + "name": "bump_fund", "type": "u8" }, { - "name": "bumpTreasury", + "name": "bump_treasury", "type": "u8" }, { @@ -626,34 +890,72 @@ "type": "string" }, { - "name": "isActive", + "name": "is_active", "type": "bool" } ] } }, { - "name": "Treasury", + "name": "OracleGuardRails", "type": { "kind": "struct", "fields": [ { - "name": "manager", - "type": "publicKey" + "name": "price_divergence", + "type": { + "defined": { + "name": "PriceDivergenceGuardRails" + } + } }, { - "name": "fund", - "type": "publicKey" + "name": "validity", + "type": { + "defined": { + "name": "ValidityGuardRails" + } + } + } + ] + } + }, + { + "name": "OrderFillerRewardStructure", + "type": { + "kind": "struct", + "fields": [ + { + "name": "reward_numerator", + "type": "u32" }, { - "name": "bump", - "type": "u8" + "name": "reward_denominator", + "type": "u32" + }, + { + "name": "time_based_reward_lower_bound", + "type": "u128" } ] } - } - ], - "types": [ + }, + { + "name": "PriceDivergenceGuardRails", + "type": { + "kind": "struct", + "fields": [ + { + "name": "mark_oracle_percent_divergence", + "type": "u64" + }, + { + "name": "oracle_twap5min_percent_divergence", + "type": "u64" + } + ] + } + }, { "name": "ShareClassMetadata", "type": { @@ -672,12 +974,12 @@ "type": "string" }, { - "name": "shareClassAsset", + "name": "share_class_asset", "type": "string" }, { - "name": "shareClassAssetId", - "type": "publicKey" + "name": "share_class_asset_id", + "type": "pubkey" }, { "name": "isin", @@ -688,15 +990,15 @@ "type": "string" }, { - "name": "feeManagement", + "name": "fee_management", "type": "i32" }, { - "name": "feePerformance", + "name": "fee_performance", "type": "i32" }, { - "name": "policyDistribution", + "name": "policy_distribution", "type": "string" }, { @@ -704,7 +1006,7 @@ "type": "string" }, { - "name": "launchDate", + "name": "launch_date", "type": "string" }, { @@ -712,94 +1014,190 @@ "type": "string" }, { - "name": "imageUri", + "name": "image_uri", "type": "string" } ] } }, { - "name": "InvestorError", + "name": "State", + "docs": [ + "Account: State" + ], "type": { - "kind": "enum", - "variants": [ + "kind": "struct", + "fields": [ + { + "name": "admin", + "type": "pubkey" + }, + { + "name": "whitelist_mint", + "type": "pubkey" + }, + { + "name": "discount_mint", + "type": "pubkey" + }, + { + "name": "signer", + "type": "pubkey" + }, + { + "name": "srm_vault", + "type": "pubkey" + }, + { + "name": "perp_fee_structure", + "type": { + "defined": { + "name": "FeeStructure" + } + } + }, + { + "name": "spot_fee_structure", + "type": { + "defined": { + "name": "FeeStructure" + } + } + }, + { + "name": "oracle_guard_rails", + "type": { + "defined": { + "name": "OracleGuardRails" + } + } + }, + { + "name": "number_of_authorities", + "type": "u64" + }, + { + "name": "number_of_sub_accounts", + "type": "u64" + }, { - "name": "FundNotActive" + "name": "lp_cooldown_time", + "type": "u64" }, { - "name": "InvalidShareClass" + "name": "liquidation_margin_buffer_ratio", + "type": "u32" }, { - "name": "InvalidAssetSubscribe" + "name": "settlement_duration", + "type": "u16" }, { - "name": "InvalidPricingOracle" + "name": "number_of_markets", + "type": "u16" }, { - "name": "InvalidAssetsRedeem" + "name": "number_of_spot_markets", + "type": "u16" }, { - "name": "InvalidTreasuryAccount" + "name": "signer_nonce", + "type": "u8" + }, + { + "name": "min_perp_auction_duration", + "type": "u8" + }, + { + "name": "default_market_order_time_in_force", + "type": "u8" + }, + { + "name": "default_spot_auction_duration", + "type": "u8" + }, + { + "name": "exchange_status", + "type": "u8" + }, + { + "name": "liquidation_duration", + "type": "u8" + }, + { + "name": "initial_pct_to_liquidate", + "type": "u16" + }, + { + "name": "max_number_of_sub_accounts", + "type": "u16" + }, + { + "name": "max_initialize_user_fee", + "type": "u16" + }, + { + "name": "padding", + "type": { + "array": [ + "u8", + 10 + ] + } } ] } }, { - "name": "PolicyError", + "name": "Treasury", "type": { - "kind": "enum", - "variants": [ + "kind": "struct", + "fields": [ { - "name": "TransfersDisabled" + "name": "manager", + "type": "pubkey" }, { - "name": "AmountTooBig" + "name": "fund", + "type": "pubkey" }, { - "name": "LockOut" + "name": "bump", + "type": "u8" } ] } - } - ], - "errors": [ - { - "code": 6000, - "name": "CloseNotEmptyError", - "msg": "Error closing account: not empty" - }, - { - "code": 6001, - "name": "NotAuthorizedError", - "msg": "Error: not authorized" - }, - { - "code": 6002, - "name": "InvalidFundName", - "msg": "Invalid fund name: max 30 chars" - }, - { - "code": 6003, - "name": "InvalidFundSymbol", - "msg": "Too many assets: max 50" - }, - { - "code": 6004, - "name": "InvalidFundUri", - "msg": "Too many assets: max 20" }, { - "code": 6005, - "name": "InvalidAssetsLen", - "msg": "Too many assets: max 100" - }, - { - "code": 6006, - "name": "InvalidAssetsWeights", - "msg": "Number of weights should match number of assets" + "name": "ValidityGuardRails", + "type": { + "kind": "struct", + "fields": [ + { + "name": "slots_before_stale_for_amm", + "type": "i64" + }, + { + "name": "slots_before_stale_for_margin", + "type": "i64" + }, + { + "name": "confidence_interval_max_size", + "type": "u64" + }, + { + "name": "too_volatile_ratio", + "type": "i64" + } + ] + } } ], - "metadata": { - "address": "Gco1pcjxCMYjKJjSNJ7mKV7qezeUTE7arXJgy7PAPNRc" - } + "constants": [ + { + "name": "SEED", + "type": "string", + "value": "\"anchor\"" + } + ] } \ No newline at end of file diff --git a/anchor/target/idl/policy.json b/anchor/target/idl/policy.json deleted file mode 100644 index 52041038..00000000 --- a/anchor/target/idl/policy.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "version": "0.1.0", - "name": "policy", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "transferHook", - "accounts": [ - { - "name": "sourceToken", - "isMut": false, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "destinationToken", - "isMut": false, - "isSigner": false - }, - { - "name": "owner", - "isMut": false, - "isSigner": false - }, - { - "name": "extraAccountMetaList", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "initializeExtraAccountMetaList", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "extraAccountMetaList", - "isMut": true, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "AmountTooBig", - "msg": "Amount too big" - } - ], - "metadata": { - "address": "Gpo1jXtEFepqyPQWTG7oDJrg8rye8JL3zcsczHzXKqLt" - } -} \ No newline at end of file diff --git a/anchor/target/idl/pricing.json b/anchor/target/idl/pricing.json deleted file mode 100644 index bbfdd399..00000000 --- a/anchor/target/idl/pricing.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "version": "0.1.0", - "name": "pricing", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - }, - { - "name": "payUsd", - "accounts": [ - { - "name": "from", - "isMut": false, - "isSigner": true - }, - { - "name": "to", - "isMut": true, - "isSigner": false - }, - { - "name": "solUsdPriceAccount", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "PriceUnavailable", - "msg": "Price is currently not available" - }, - { - "code": 6001, - "name": "InvalidPriceFeedId", - "msg": "Invalid price feed id" - } - ], - "metadata": { - "address": "Gpr1WZZXAty2L9eiMwZPC7ra69vMFojhdqDuiRHkQQQp" - } -} \ No newline at end of file diff --git a/anchor/target/idl/strategy.json b/anchor/target/idl/strategy.json deleted file mode 100644 index 1156bf21..00000000 --- a/anchor/target/idl/strategy.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "version": "0.1.0", - "name": "strategy", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "CustomError", - "msg": "Custom error message" - } - ], - "metadata": { - "address": "Gst1YGe5vKURSWfCqM7GhZys1oML9E9t91WRyV2rt4yS" - } -} \ No newline at end of file diff --git a/anchor/target/types/custody.ts b/anchor/target/types/custody.ts deleted file mode 100644 index 36614498..00000000 --- a/anchor/target/types/custody.ts +++ /dev/null @@ -1,51 +0,0 @@ -export type Custody = { - "version": "0.1.0", - "name": "custody", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "CustomError", - "msg": "Custom error message" - } - ] -}; - -export const IDL: Custody = { - "version": "0.1.0", - "name": "custody", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "CustomError", - "msg": "Custom error message" - } - ] -}; diff --git a/anchor/target/types/glam.ts b/anchor/target/types/glam.ts index a47a2463..868d748d 100644 --- a/anchor/target/types/glam.ts +++ b/anchor/target/types/glam.ts @@ -1,415 +1,322 @@ +/** + * 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/glam.json`. + */ export type Glam = { - "version": "0.1.0", - "name": "glam", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], + "address": "Gco1pcjxCMYjKJjSNJ7mKV7qezeUTE7arXJgy7PAPNRc", + "metadata": { + "name": "glam", + "version": "0.1.0", + "spec": "0.1.0", + "description": "Created with Anchor" + }, "instructions": [ { - "name": "initialize", + "name": "close", + "discriminator": [ + 98, + 165, + 201, + 177, + 108, + 65, + 206, + 96 + ], "accounts": [ { "name": "fund", - "isMut": true, - "isSigner": false - }, - { - "name": "treasury", - "isMut": true, - "isSigner": false - }, - { - "name": "share", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "manager", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false + "writable": true, + "signer": true, + "relations": [ + "fund" + ] } ], - "args": [ - { - "name": "fundName", - "type": "string" - }, - { - "name": "fundSymbol", - "type": "string" - }, - { - "name": "fundUri", - "type": "string" - }, - { - "name": "assetWeights", - "type": { - "vec": "u32" - } - }, - { - "name": "activate", - "type": "bool" - }, - { - "name": "shareClassMetadata", - "type": { - "defined": "ShareClassMetadata" - } - } - ] + "args": [] }, { - "name": "update", + "name": "driftClose", + "discriminator": [ + 23, + 133, + 219, + 157, + 137, + 34, + 93, + 58 + ], "accounts": [ { - "name": "fund", - "isMut": true, - "isSigner": false + "name": "fund" }, { - "name": "manager", - "isMut": true, - "isSigner": true - } - ], - "args": [ + "name": "treasury" + }, { - "name": "name", - "type": { - "option": "string" - } + "name": "userStats", + "writable": true }, { - "name": "uri", - "type": { - "option": "string" - } + "name": "user", + "writable": true }, { - "name": "assetWeights", - "type": { - "option": { - "vec": "u32" - } - } + "name": "state", + "writable": true }, { - "name": "activate", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "close", - "accounts": [ + "name": "manager", + "writable": true, + "signer": true, + "relations": [ + "fund" + ] + }, { - "name": "fund", - "isMut": true, - "isSigner": false + "name": "driftProgram", + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" }, { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "systemProgram", + "address": "11111111111111111111111111111111" } ], "args": [] }, { - "name": "subscribe", + "name": "driftDeposit", + "discriminator": [ + 252, + 63, + 250, + 201, + 98, + 55, + 130, + 12 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "shareClass", - "isMut": true, - "isSigner": false - }, - { - "name": "signerShareAta", - "isMut": true, - "isSigner": false - }, - { - "name": "asset", - "isMut": true, - "isSigner": false - }, - { - "name": "treasuryAta", - "isMut": true, - "isSigner": false - }, - { - "name": "signerAssetAta", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false + "name": "treasury" }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false + "name": "userStats", + "writable": true }, { - "name": "token2022Program", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" + "name": "user", + "writable": true }, { - "name": "skipState", - "type": "bool" - } - ] - }, - { - "name": "redeem", - "accounts": [ - { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "state", + "writable": true }, { - "name": "shareClass", - "isMut": true, - "isSigner": false + "name": "treasuryAta", + "writable": true }, { - "name": "signerShareAta", - "isMut": true, - "isSigner": false + "name": "driftAta", + "writable": true }, { - "name": "signer", - "isMut": true, - "isSigner": true + "name": "manager", + "writable": true, + "signer": true, + "relations": [ + "fund" + ] }, { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "driftProgram", + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" }, { "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "token2022Program", - "isMut": false, - "isSigner": false + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" } ], "args": [ { "name": "amount", "type": "u64" - }, - { - "name": "inKind", - "type": "bool" - }, - { - "name": "skipState", - "type": "bool" } ] }, { "name": "driftInitialize", + "discriminator": [ + 21, + 21, + 69, + 55, + 41, + 129, + 44, + 198 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "treasury" }, { "name": "userStats", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "user", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "state", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "manager", - "isMut": true, - "isSigner": true + "writable": true, + "signer": true, + "relations": [ + "fund" + ] }, { "name": "driftProgram", - "isMut": false, - "isSigner": false + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" }, { "name": "rent", - "isMut": false, - "isSigner": false + "address": "SysvarRent111111111111111111111111111111111" }, { "name": "systemProgram", - "isMut": false, - "isSigner": false + "address": "11111111111111111111111111111111" } ], "args": [ { "name": "trader", "type": { - "option": "publicKey" + "option": "pubkey" } } ] }, { "name": "driftUpdateDelegatedTrader", + "discriminator": [ + 98, + 66, + 206, + 146, + 109, + 215, + 206, + 57 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "treasury" }, { "name": "user", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "manager", - "isMut": true, - "isSigner": true + "writable": true, + "signer": true, + "relations": [ + "fund" + ] }, { "name": "driftProgram", - "isMut": false, - "isSigner": false + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" } ], "args": [ { "name": "trader", "type": { - "option": "publicKey" + "option": "pubkey" } } ] }, { - "name": "driftDeposit", + "name": "driftWithdraw", + "discriminator": [ + 86, + 59, + 186, + 123, + 183, + 181, + 234, + 137 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "treasury" }, { "name": "userStats", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "user", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "state", - "isMut": true, - "isSigner": false + "writable": true + }, + { + "name": "driftSigner" }, { "name": "treasuryAta", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "driftAta", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "manager", - "isMut": true, - "isSigner": true + "writable": true, + "signer": true, + "relations": [ + "fund" + ] }, { "name": "driftProgram", - "isMut": false, - "isSigner": false + "address": "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH" }, { "name": "tokenProgram", - "isMut": false, - "isSigner": false + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" } ], "args": [ @@ -420,634 +327,255 @@ export type Glam = { ] }, { - "name": "driftWithdraw", + "name": "initialize", + "discriminator": [ + 175, + 175, + 109, + 31, + 13, + 152, + 155, + 237 + ], "accounts": [ { "name": "fund", - "isMut": false, - "isSigner": false + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 102, + 117, + 110, + 100 + ] + }, + { + "kind": "account", + "path": "manager" + }, + { + "kind": "arg", + "path": "name" + } + ] + } }, { "name": "treasury", - "isMut": false, - "isSigner": false + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 116, + 114, + 101, + 97, + 115, + 117, + 114, + 121 + ] + }, + { + "kind": "account", + "path": "fund" + } + ] + } }, { - "name": "userStats", - "isMut": true, - "isSigner": false + "name": "share", + "writable": true, + "pda": { + "seeds": [ + { + "kind": "const", + "value": [ + 115, + 104, + 97, + 114, + 101, + 45, + 48 + ] + }, + { + "kind": "account", + "path": "fund" + } + ] + } }, { - "name": "user", - "isMut": true, - "isSigner": false + "name": "manager", + "writable": true, + "signer": true }, { - "name": "state", - "isMut": true, - "isSigner": false + "name": "systemProgram", + "address": "11111111111111111111111111111111" }, { - "name": "driftSigner", - "isMut": false, - "isSigner": false + "name": "tokenProgram", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" }, { - "name": "treasuryAta", - "isMut": true, - "isSigner": false + "name": "rent", + "address": "SysvarRent111111111111111111111111111111111" + } + ], + "args": [ + { + "name": "fundName", + "type": "string" }, { - "name": "driftAta", - "isMut": true, - "isSigner": false + "name": "fundSymbol", + "type": "string" }, { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "fundUri", + "type": "string" }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "assetWeights", + "type": { + "vec": "u32" + } }, { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ + "name": "activate", + "type": "bool" + }, { - "name": "amount", - "type": "u64" + "name": "shareClassMetadata", + "type": { + "defined": { + "name": "shareClassMetadata" + } + } } ] }, { - "name": "driftClose", + "name": "redeem", + "discriminator": [ + 184, + 12, + 86, + 149, + 70, + 196, + 97, + 225 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { - "name": "treasury", - "isMut": false, - "isSigner": false + "name": "shareClass", + "writable": true }, { - "name": "userStats", - "isMut": true, - "isSigner": false + "name": "signerShareAta", + "writable": true }, { - "name": "user", - "isMut": true, - "isSigner": false + "name": "signer", + "writable": true, + "signer": true }, { - "name": "state", - "isMut": true, - "isSigner": false + "name": "treasury" }, { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "tokenProgram", + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "token2022Program", + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" + } + ], + "args": [ + { + "name": "amount", + "type": "u64" }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + "name": "inKind", + "type": "bool" + }, + { + "name": "skipState", + "type": "bool" } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "fund", - "type": { - "kind": "struct", - "fields": [ - { - "name": "manager", - "type": "publicKey" - }, - { - "name": "treasury", - "type": "publicKey" - }, - { - "name": "assetsLen", - "type": "u8" - }, - { - "name": "assets", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "assetsWeights", - "type": { - "array": [ - "u32", - 5 - ] - } - }, - { - "name": "shareClassesLen", - "type": "u8" - }, - { - "name": "shareClasses", - "type": { - "array": [ - "publicKey", - 3 - ] - } - }, - { - "name": "shareClassesMetadata", - "type": { - "array": [ - { - "defined": "ShareClassMetadata" - }, - 3 - ] - } - }, - { - "name": "shareClassesBumps", - "type": { - "array": [ - "u8", - 3 - ] - } - }, - { - "name": "timeCreated", - "type": "i64" - }, - { - "name": "bumpFund", - "type": "u8" - }, - { - "name": "bumpTreasury", - "type": "u8" - }, - { - "name": "name", - "type": "string" - }, - { - "name": "symbol", - "type": "string" - }, - { - "name": "uri", - "type": "string" - }, - { - "name": "isActive", - "type": "bool" - } - ] - } - }, - { - "name": "treasury", - "type": { - "kind": "struct", - "fields": [ - { - "name": "manager", - "type": "publicKey" - }, - { - "name": "fund", - "type": "publicKey" - }, - { - "name": "bump", - "type": "u8" - } - ] - } - } - ], - "types": [ - { - "name": "ShareClassMetadata", - "type": { - "kind": "struct", - "fields": [ - { - "name": "name", - "type": "string" - }, - { - "name": "symbol", - "type": "string" - }, - { - "name": "uri", - "type": "string" - }, - { - "name": "shareClassAsset", - "type": "string" - }, - { - "name": "shareClassAssetId", - "type": "publicKey" - }, - { - "name": "isin", - "type": "string" - }, - { - "name": "status", - "type": "string" - }, - { - "name": "feeManagement", - "type": "i32" - }, - { - "name": "feePerformance", - "type": "i32" - }, - { - "name": "policyDistribution", - "type": "string" - }, - { - "name": "extension", - "type": "string" - }, - { - "name": "launchDate", - "type": "string" - }, - { - "name": "lifecycle", - "type": "string" - }, - { - "name": "imageUri", - "type": "string" - } - ] - } - }, - { - "name": "InvestorError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "FundNotActive" - }, - { - "name": "InvalidShareClass" - }, - { - "name": "InvalidAssetSubscribe" - }, - { - "name": "InvalidPricingOracle" - }, - { - "name": "InvalidAssetsRedeem" - }, - { - "name": "InvalidTreasuryAccount" - } - ] - } - }, - { - "name": "PolicyError", - "type": { - "kind": "enum", - "variants": [ - { - "name": "TransfersDisabled" - }, - { - "name": "AmountTooBig" - }, - { - "name": "LockOut" - } - ] - } - } - ], - "errors": [ - { - "code": 6000, - "name": "CloseNotEmptyError", - "msg": "Error closing account: not empty" - }, - { - "code": 6001, - "name": "NotAuthorizedError", - "msg": "Error: not authorized" - }, - { - "code": 6002, - "name": "InvalidFundName", - "msg": "Invalid fund name: max 30 chars" - }, - { - "code": 6003, - "name": "InvalidFundSymbol", - "msg": "Too many assets: max 50" - }, - { - "code": 6004, - "name": "InvalidFundUri", - "msg": "Too many assets: max 20" - }, - { - "code": 6005, - "name": "InvalidAssetsLen", - "msg": "Too many assets: max 100" - }, - { - "code": 6006, - "name": "InvalidAssetsWeights", - "msg": "Number of weights should match number of assets" - } - ] -}; - -export const IDL: Glam = { - "version": "0.1.0", - "name": "glam", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [ - { - "name": "fund", - "isMut": true, - "isSigner": false - }, - { - "name": "treasury", - "isMut": true, - "isSigner": false - }, - { - "name": "share", - "isMut": true, - "isSigner": false - }, - { - "name": "manager", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "fundName", - "type": "string" - }, - { - "name": "fundSymbol", - "type": "string" - }, - { - "name": "fundUri", - "type": "string" - }, - { - "name": "assetWeights", - "type": { - "vec": "u32" - } - }, - { - "name": "activate", - "type": "bool" - }, - { - "name": "shareClassMetadata", - "type": { - "defined": "ShareClassMetadata" - } - } - ] - }, - { - "name": "update", - "accounts": [ - { - "name": "fund", - "isMut": true, - "isSigner": false - }, - { - "name": "manager", - "isMut": true, - "isSigner": true - } - ], - "args": [ - { - "name": "name", - "type": { - "option": "string" - } - }, - { - "name": "uri", - "type": { - "option": "string" - } - }, - { - "name": "assetWeights", - "type": { - "option": { - "vec": "u32" - } - } - }, - { - "name": "activate", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "close", - "accounts": [ - { - "name": "fund", - "isMut": true, - "isSigner": false - }, - { - "name": "manager", - "isMut": true, - "isSigner": true - } - ], - "args": [] - }, + ] + }, { "name": "subscribe", + "discriminator": [ + 254, + 28, + 191, + 138, + 156, + 179, + 183, + 53 + ], "accounts": [ { - "name": "fund", - "isMut": false, - "isSigner": false + "name": "fund" }, { "name": "shareClass", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "signerShareAta", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "asset", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "treasuryAta", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "signerAssetAta", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "signer", - "isMut": true, - "isSigner": true + "writable": true, + "signer": true }, { "name": "systemProgram", - "isMut": false, - "isSigner": false + "address": "11111111111111111111111111111111" }, { "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "token2022Program", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "skipState", - "type": "bool" - } - ] - }, - { - "name": "redeem", - "accounts": [ - { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "shareClass", - "isMut": true, - "isSigner": false - }, - { - "name": "signerShareAta", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": true, - "isSigner": true - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false + "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" }, { "name": "tokenProgram", - "isMut": false, - "isSigner": false + "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" }, { "name": "token2022Program", - "isMut": false, - "isSigner": false + "address": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" } ], "args": [ @@ -1055,10 +583,6 @@ export const IDL: Glam = { "name": "amount", "type": "u64" }, - { - "name": "inKind", - "type": "bool" - }, { "name": "skipState", "type": "bool" @@ -1066,276 +590,217 @@ export const IDL: Glam = { ] }, { - "name": "driftInitialize", - "accounts": [ - { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false - }, - { - "name": "user", - "isMut": true, - "isSigner": false - }, - { - "name": "state", - "isMut": true, - "isSigner": false - }, - { - "name": "manager", - "isMut": true, - "isSigner": true - }, - { - "name": "driftProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } + "name": "update", + "discriminator": [ + 219, + 200, + 88, + 176, + 158, + 63, + 253, + 127 ], - "args": [ - { - "name": "trader", - "type": { - "option": "publicKey" - } - } - ] - }, - { - "name": "driftUpdateDelegatedTrader", "accounts": [ { "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false - }, - { - "name": "user", - "isMut": true, - "isSigner": false + "writable": true }, { "name": "manager", - "isMut": true, - "isSigner": true - }, - { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "writable": true, + "signer": true, + "relations": [ + "fund" + ] } ], "args": [ { - "name": "trader", + "name": "name", "type": { - "option": "publicKey" + "option": "string" } - } - ] - }, - { - "name": "driftDeposit", - "accounts": [ - { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false - }, - { - "name": "user", - "isMut": true, - "isSigner": false - }, - { - "name": "state", - "isMut": true, - "isSigner": false - }, - { - "name": "treasuryAta", - "isMut": true, - "isSigner": false - }, - { - "name": "driftAta", - "isMut": true, - "isSigner": false - }, - { - "name": "manager", - "isMut": true, - "isSigner": true - }, - { - "name": "driftProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "driftWithdraw", - "accounts": [ - { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false - }, - { - "name": "user", - "isMut": true, - "isSigner": false - }, - { - "name": "state", - "isMut": true, - "isSigner": false - }, - { - "name": "driftSigner", - "isMut": false, - "isSigner": false - }, - { - "name": "treasuryAta", - "isMut": true, - "isSigner": false - }, - { - "name": "driftAta", - "isMut": true, - "isSigner": false - }, - { - "name": "manager", - "isMut": true, - "isSigner": true - }, - { - "name": "driftProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "driftClose", - "accounts": [ - { - "name": "fund", - "isMut": false, - "isSigner": false - }, - { - "name": "treasury", - "isMut": false, - "isSigner": false - }, - { - "name": "userStats", - "isMut": true, - "isSigner": false - }, - { - "name": "user", - "isMut": true, - "isSigner": false }, { - "name": "state", - "isMut": true, - "isSigner": false - }, - { - "name": "manager", - "isMut": true, - "isSigner": true + "name": "uri", + "type": { + "option": "string" + } }, { - "name": "driftProgram", - "isMut": false, - "isSigner": false + "name": "assetWeights", + "type": { + "option": { + "vec": "u32" + } + } }, { - "name": "systemProgram", - "isMut": false, - "isSigner": false + "name": "activate", + "type": { + "option": "bool" + } } - ], - "args": [] + ] } ], "accounts": [ + { + "name": "fund", + "discriminator": [ + 62, + 128, + 183, + 208, + 91, + 31, + 212, + 209 + ] + }, + { + "name": "state", + "discriminator": [ + 216, + 146, + 107, + 94, + 104, + 75, + 182, + 177 + ] + }, + { + "name": "treasury", + "discriminator": [ + 238, + 239, + 123, + 238, + 89, + 1, + 168, + 253 + ] + } + ], + "errors": [ + { + "code": 6000, + "name": "closeNotEmptyError", + "msg": "Error closing account: not empty" + }, + { + "code": 6001, + "name": "notAuthorizedError", + "msg": "Error: not authorized" + }, + { + "code": 6002, + "name": "invalidFundName", + "msg": "Invalid fund name: max 30 chars" + }, + { + "code": 6003, + "name": "invalidFundSymbol", + "msg": "Too many assets: max 50" + }, + { + "code": 6004, + "name": "invalidFundUri", + "msg": "Too many assets: max 20" + }, + { + "code": 6005, + "name": "invalidAssetsLen", + "msg": "Too many assets: max 100" + }, + { + "code": 6006, + "name": "invalidAssetsWeights", + "msg": "Number of weights should match number of assets" + } + ], + "types": [ + { + "name": "feeStructure", + "type": { + "kind": "struct", + "fields": [ + { + "name": "feeTiers", + "type": { + "array": [ + { + "defined": { + "name": "feeTier" + } + }, + 10 + ] + } + }, + { + "name": "fillerRewardStructure", + "type": { + "defined": { + "name": "orderFillerRewardStructure" + } + } + }, + { + "name": "referrerRewardEpochUpperBound", + "type": "u64" + }, + { + "name": "flatFillerFee", + "type": "u64" + } + ] + } + }, + { + "name": "feeTier", + "type": { + "kind": "struct", + "fields": [ + { + "name": "feeNumerator", + "type": "u32" + }, + { + "name": "feeDenominator", + "type": "u32" + }, + { + "name": "makerRebateNumerator", + "type": "u32" + }, + { + "name": "makerRebateDenominator", + "type": "u32" + }, + { + "name": "referrerRewardNumerator", + "type": "u32" + }, + { + "name": "referrerRewardDenominator", + "type": "u32" + }, + { + "name": "refereeFeeNumerator", + "type": "u32" + }, + { + "name": "refereeFeeDenominator", + "type": "u32" + } + ] + } + }, { "name": "fund", "type": { @@ -1343,11 +808,11 @@ export const IDL: Glam = { "fields": [ { "name": "manager", - "type": "publicKey" + "type": "pubkey" }, { "name": "treasury", - "type": "publicKey" + "type": "pubkey" }, { "name": "assetsLen", @@ -1357,7 +822,7 @@ export const IDL: Glam = { "name": "assets", "type": { "array": [ - "publicKey", + "pubkey", 5 ] } @@ -1379,7 +844,7 @@ export const IDL: Glam = { "name": "shareClasses", "type": { "array": [ - "publicKey", + "pubkey", 3 ] } @@ -1389,7 +854,9 @@ export const IDL: Glam = { "type": { "array": [ { - "defined": "ShareClassMetadata" + "defined": { + "name": "shareClassMetadata" + } }, 3 ] @@ -1436,29 +903,67 @@ export const IDL: Glam = { } }, { - "name": "treasury", + "name": "oracleGuardRails", "type": { "kind": "struct", "fields": [ { - "name": "manager", - "type": "publicKey" + "name": "priceDivergence", + "type": { + "defined": { + "name": "priceDivergenceGuardRails" + } + } }, { - "name": "fund", - "type": "publicKey" + "name": "validity", + "type": { + "defined": { + "name": "validityGuardRails" + } + } + } + ] + } + }, + { + "name": "orderFillerRewardStructure", + "type": { + "kind": "struct", + "fields": [ + { + "name": "rewardNumerator", + "type": "u32" }, { - "name": "bump", - "type": "u8" + "name": "rewardDenominator", + "type": "u32" + }, + { + "name": "timeBasedRewardLowerBound", + "type": "u128" } ] } - } - ], - "types": [ + }, + { + "name": "priceDivergenceGuardRails", + "type": { + "kind": "struct", + "fields": [ + { + "name": "markOraclePercentDivergence", + "type": "u64" + }, + { + "name": "oracleTwap5minPercentDivergence", + "type": "u64" + } + ] + } + }, { - "name": "ShareClassMetadata", + "name": "shareClassMetadata", "type": { "kind": "struct", "fields": [ @@ -1480,7 +985,7 @@ export const IDL: Glam = { }, { "name": "shareClassAssetId", - "type": "publicKey" + "type": "pubkey" }, { "name": "isin", @@ -1522,84 +1027,183 @@ export const IDL: Glam = { } }, { - "name": "InvestorError", + "name": "state", + "docs": [ + "Account: State" + ], "type": { - "kind": "enum", - "variants": [ + "kind": "struct", + "fields": [ + { + "name": "admin", + "type": "pubkey" + }, + { + "name": "whitelistMint", + "type": "pubkey" + }, + { + "name": "discountMint", + "type": "pubkey" + }, + { + "name": "signer", + "type": "pubkey" + }, + { + "name": "srmVault", + "type": "pubkey" + }, + { + "name": "perpFeeStructure", + "type": { + "defined": { + "name": "feeStructure" + } + } + }, + { + "name": "spotFeeStructure", + "type": { + "defined": { + "name": "feeStructure" + } + } + }, + { + "name": "oracleGuardRails", + "type": { + "defined": { + "name": "oracleGuardRails" + } + } + }, + { + "name": "numberOfAuthorities", + "type": "u64" + }, + { + "name": "numberOfSubAccounts", + "type": "u64" + }, + { + "name": "lpCooldownTime", + "type": "u64" + }, + { + "name": "liquidationMarginBufferRatio", + "type": "u32" + }, + { + "name": "settlementDuration", + "type": "u16" + }, + { + "name": "numberOfMarkets", + "type": "u16" + }, + { + "name": "numberOfSpotMarkets", + "type": "u16" + }, + { + "name": "signerNonce", + "type": "u8" + }, + { + "name": "minPerpAuctionDuration", + "type": "u8" + }, + { + "name": "defaultMarketOrderTimeInForce", + "type": "u8" + }, + { + "name": "defaultSpotAuctionDuration", + "type": "u8" + }, { - "name": "FundNotActive" + "name": "exchangeStatus", + "type": "u8" }, { - "name": "InvalidShareClass" + "name": "liquidationDuration", + "type": "u8" }, { - "name": "InvalidAssetSubscribe" + "name": "initialPctToLiquidate", + "type": "u16" }, { - "name": "InvalidPricingOracle" + "name": "maxNumberOfSubAccounts", + "type": "u16" }, { - "name": "InvalidAssetsRedeem" + "name": "maxInitializeUserFee", + "type": "u16" }, { - "name": "InvalidTreasuryAccount" + "name": "padding", + "type": { + "array": [ + "u8", + 10 + ] + } } ] } }, { - "name": "PolicyError", + "name": "treasury", "type": { - "kind": "enum", - "variants": [ + "kind": "struct", + "fields": [ { - "name": "TransfersDisabled" + "name": "manager", + "type": "pubkey" }, { - "name": "AmountTooBig" + "name": "fund", + "type": "pubkey" }, { - "name": "LockOut" + "name": "bump", + "type": "u8" } ] } - } - ], - "errors": [ - { - "code": 6000, - "name": "CloseNotEmptyError", - "msg": "Error closing account: not empty" - }, - { - "code": 6001, - "name": "NotAuthorizedError", - "msg": "Error: not authorized" - }, - { - "code": 6002, - "name": "InvalidFundName", - "msg": "Invalid fund name: max 30 chars" - }, - { - "code": 6003, - "name": "InvalidFundSymbol", - "msg": "Too many assets: max 50" - }, - { - "code": 6004, - "name": "InvalidFundUri", - "msg": "Too many assets: max 20" }, { - "code": 6005, - "name": "InvalidAssetsLen", - "msg": "Too many assets: max 100" - }, + "name": "validityGuardRails", + "type": { + "kind": "struct", + "fields": [ + { + "name": "slotsBeforeStaleForAmm", + "type": "i64" + }, + { + "name": "slotsBeforeStaleForMargin", + "type": "i64" + }, + { + "name": "confidenceIntervalMaxSize", + "type": "u64" + }, + { + "name": "tooVolatileRatio", + "type": "i64" + } + ] + } + } + ], + "constants": [ { - "code": 6006, - "name": "InvalidAssetsWeights", - "msg": "Number of weights should match number of assets" + "name": "seed", + "type": "string", + "value": "\"anchor\"" } ] }; diff --git a/anchor/target/types/policy.ts b/anchor/target/types/policy.ts deleted file mode 100644 index 962bdc72..00000000 --- a/anchor/target/types/policy.ts +++ /dev/null @@ -1,185 +0,0 @@ -export type Policy = { - "version": "0.1.0", - "name": "policy", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "transferHook", - "accounts": [ - { - "name": "sourceToken", - "isMut": false, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "destinationToken", - "isMut": false, - "isSigner": false - }, - { - "name": "owner", - "isMut": false, - "isSigner": false - }, - { - "name": "extraAccountMetaList", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "initializeExtraAccountMetaList", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "extraAccountMetaList", - "isMut": true, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "AmountTooBig", - "msg": "Amount too big" - } - ] -}; - -export const IDL: Policy = { - "version": "0.1.0", - "name": "policy", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "transferHook", - "accounts": [ - { - "name": "sourceToken", - "isMut": false, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "destinationToken", - "isMut": false, - "isSigner": false - }, - { - "name": "owner", - "isMut": false, - "isSigner": false - }, - { - "name": "extraAccountMetaList", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "initializeExtraAccountMetaList", - "accounts": [ - { - "name": "payer", - "isMut": true, - "isSigner": true - }, - { - "name": "extraAccountMetaList", - "isMut": true, - "isSigner": false - }, - { - "name": "mint", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "associatedTokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "AmountTooBig", - "msg": "Amount too big" - } - ] -}; diff --git a/anchor/target/types/pricing.ts b/anchor/target/types/pricing.ts deleted file mode 100644 index 42147e33..00000000 --- a/anchor/target/types/pricing.ts +++ /dev/null @@ -1,123 +0,0 @@ -export type Pricing = { - "version": "0.1.0", - "name": "pricing", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - }, - { - "name": "payUsd", - "accounts": [ - { - "name": "from", - "isMut": false, - "isSigner": true - }, - { - "name": "to", - "isMut": true, - "isSigner": false - }, - { - "name": "solUsdPriceAccount", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "PriceUnavailable", - "msg": "Price is currently not available" - }, - { - "code": 6001, - "name": "InvalidPriceFeedId", - "msg": "Invalid price feed id" - } - ] -}; - -export const IDL: Pricing = { - "version": "0.1.0", - "name": "pricing", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - }, - { - "name": "payUsd", - "accounts": [ - { - "name": "from", - "isMut": false, - "isSigner": true - }, - { - "name": "to", - "isMut": true, - "isSigner": false - }, - { - "name": "solUsdPriceAccount", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "PriceUnavailable", - "msg": "Price is currently not available" - }, - { - "code": 6001, - "name": "InvalidPriceFeedId", - "msg": "Invalid price feed id" - } - ] -}; diff --git a/anchor/target/types/strategy.ts b/anchor/target/types/strategy.ts deleted file mode 100644 index 3afbf2d8..00000000 --- a/anchor/target/types/strategy.ts +++ /dev/null @@ -1,51 +0,0 @@ -export type Strategy = { - "version": "0.1.0", - "name": "strategy", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "CustomError", - "msg": "Custom error message" - } - ] -}; - -export const IDL: Strategy = { - "version": "0.1.0", - "name": "strategy", - "constants": [ - { - "name": "SEED", - "type": "string", - "value": "\"anchor\"" - } - ], - "instructions": [ - { - "name": "initialize", - "accounts": [], - "args": [] - } - ], - "errors": [ - { - "code": 6000, - "name": "CustomError", - "msg": "Custom error message" - } - ] -}; diff --git a/package.json b/package.json index 94d05c8b..7bdff880 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@carbon/react": "^1.53.0", "@carbon/styles": "^1.53.1", "@carbon/type": "^11.26.0", - "@coral-xyz/anchor": "^0.29.0", + "@coral-xyz/anchor": "^0.30.0", "@drift-labs/sdk": "2.71.0-beta.4", "@hookform/resolvers": "^3.3.4", "@ibm/plex": "^6.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58af67ba..8daa4334 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,8 +28,8 @@ dependencies: specifier: ^11.26.0 version: 11.26.0 '@coral-xyz/anchor': - specifier: ^0.29.0 - version: 0.29.0 + specifier: ^0.30.0 + version: 0.30.0 '@drift-labs/sdk': specifier: 2.71.0-beta.4 version: 2.71.0-beta.4(fastestsmallesttextencoderdecoder@1.0.22) @@ -1987,11 +1987,11 @@ packages: - utf-8-validate dev: false - /@coral-xyz/anchor@0.29.0: - resolution: {integrity: sha512-eny6QNG0WOwqV0zQ7cs/b1tIuzZGmP7U7EcH+ogt4Gdbl8HDmIYVMh/9aTmYZPaFWjtUaI8qSn73uYEXWfATdA==} + /@coral-xyz/anchor@0.30.0: + resolution: {integrity: sha512-qreDh5ztiRHVnCbJ+RS70NJ6aSTPBYDAgFeQ7Z5QvaT5DcDIhNyt4onOciVz2ieIE1XWePOJDDu9SbNvPGBkvQ==} engines: {node: '>=11'} dependencies: - '@coral-xyz/borsh': 0.29.0(@solana/web3.js@1.91.1) + '@coral-xyz/borsh': 0.30.0(@solana/web3.js@1.91.1) '@noble/hashes': 1.4.0 '@solana/web3.js': 1.91.1 bn.js: 5.2.1 @@ -2022,8 +2022,8 @@ packages: buffer-layout: 1.2.2 dev: false - /@coral-xyz/borsh@0.29.0(@solana/web3.js@1.91.1): - resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==} + /@coral-xyz/borsh@0.30.0(@solana/web3.js@1.91.1): + resolution: {integrity: sha512-OrcV+7N10cChhgDRUxM4iEIuwxUHHs52XD85R8cFCUqE0vbLYrcoPPPs+VF6kZ9DhdJGVW2I6DHJOp5TykyZog==} engines: {node: '>=10'} peerDependencies: '@solana/web3.js': ^1.68.0