diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7c94fc4..665e6d5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,17 +1,16 @@ -# copy of https://github.com/actions-rs/meta/blob/master/recipes/quickstart.md +name: CI + on: push: branches: [main] pull_request_review: types: [submitted] -name: CI - jobs: fmt: name: cargo fmt runs-on: ubuntu-latest - container: + container: image: rust:latest steps: - uses: actions/checkout@v3 @@ -22,31 +21,23 @@ jobs: check: name: Check if: github.event.review.state == 'approved' - strategy: - matrix: - include: - - os: ubuntu-latest - toolchain: stable-x86_64-unknown-linux-gnu - - os: macos-latest - toolchain: stable-x86_64-apple-darwin - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: true - name: Checkout submodules run: git submodule update --init --recursive - - uses: actions/setup-go@v4 # we need go to build go-waku + - uses: actions/setup-go@v4 with: go-version: '1.19' - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: ${{ matrix.toolchain }} + toolchain: stable-x86_64-unknown-linux-gnu default: true override: true - uses: actions-rs/cargo@v1 - continue-on-error: false with: command: check - name: Run Clippy @@ -59,19 +50,32 @@ jobs: if: github.event.review.state == 'approved' strategy: matrix: - include: - - os: ubuntu-latest - toolchain: stable-x86_64-unknown-linux-gnu - - os: macos-latest - toolchain: stable-x86_64-apple-darwin + os: [ubuntu-latest] + toolchain: [stable-x86_64-unknown-linux-gnu] runs-on: ${{ matrix.os }} + services: + postgres: + image: postgres:12 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: test_db + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + env: + DATABASE_URL: postgres://postgres:postgres@localhost:5432/test_db steps: - uses: actions/checkout@v3 with: submodules: true - name: Checkout submodules run: git submodule update --init --recursive - - uses: actions/setup-go@v4 # we need go to build go-waku + - uses: actions/setup-go@v4 with: go-version: '1.19' - uses: actions-rs/toolchain@v1 @@ -80,11 +84,15 @@ jobs: toolchain: ${{ matrix.toolchain }} default: true override: true + - name: Install sqlx-cli + run: cargo install sqlx-cli --version=0.6.0 + - name: Run Database Migrations + run: cargo sqlx database create && cargo sqlx migrate run + env: + DATABASE_URL: postgres://postgres:postgres@localhost:5432/test_db - uses: actions-rs/cargo@v1 - continue-on-error: false with: command: build - uses: actions-rs/cargo@v1 - continue-on-error: false with: command: test diff --git a/.sqlx/query-072603f4f0b17b26cec784a0e210b192cc9b7ddc23323def08c60118df914a47.json b/.sqlx/query-072603f4f0b17b26cec784a0e210b192cc9b7ddc23323def08c60118df914a47.json new file mode 100644 index 0000000..1c04b3a --- /dev/null +++ b/.sqlx/query-072603f4f0b17b26cec784a0e210b192cc9b7ddc23323def08c60118df914a47.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM messages\n WHERE (message->>'nonce')::bigint < $1\n RETURNING id\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "072603f4f0b17b26cec784a0e210b192cc9b7ddc23323def08c60118df914a47" +} diff --git a/Cargo.lock b/Cargo.lock index 4ea6c1a..72956b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -39,9 +39,9 @@ dependencies = [ [[package]] name = "aes" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", @@ -64,9 +64,9 @@ 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", "once_cell", @@ -75,9 +75,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "42cd52102d3df161c77a887b608d7a4897d7cc112886a9537b738a887a03aaff" dependencies = [ "cfg-if", "getrandom", @@ -132,9 +132,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" @@ -719,9 +719,9 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytecheck" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -730,9 +730,9 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ "proc-macro2", "quote", @@ -786,9 +786,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" dependencies = [ "serde", ] @@ -854,9 +854,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chrono" -version = "0.4.33" +version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "android-tzdata", "iana-time-zone", @@ -890,9 +890,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.18" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" +checksum = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f" dependencies = [ "clap_builder", "clap_derive", @@ -900,21 +900,21 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.18" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" +checksum = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99" dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] name = "clap_derive" -version = "4.4.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" dependencies = [ "heck", "proc-macro2", @@ -924,9 +924,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" [[package]] name = "coins-bip32" @@ -1001,9 +1001,9 @@ dependencies = [ [[package]] name = "const-hex" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5104de16b218eddf8e34ffe2f86f74bfa4e61e95a1b89732fccf6325efd0557" +checksum = "18d59688ad0945eaf6b84cb44fedbe93484c81b48970e98f09db8a22832d7961" dependencies = [ "cfg-if", "cpufeatures", @@ -1110,9 +1110,9 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if", ] @@ -1242,12 +1242,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.4" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da01daa5f6d41c91358398e8db4dde38e292378da1f28300b59ef4732b879454" +checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8" dependencies = [ - "darling_core 0.20.4", - "darling_macro 0.20.4", + "darling_core 0.20.5", + "darling_macro 0.20.5", ] [[package]] @@ -1260,7 +1260,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.10.0", "syn 1.0.109", ] @@ -1274,21 +1274,21 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.10.0", "syn 1.0.109", ] [[package]] name = "darling_core" -version = "0.20.4" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f44f6238b948a3c6c3073cdf53bb0c2d5e024ee27e0f35bfe9d556a12395808a" +checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.10.0", "syn 2.0.48", ] @@ -1316,11 +1316,11 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.4" +version = "0.20.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d2d88bd93979b1feb760a6b5c531ac5ba06bd63e74894c377af02faee07b9cd" +checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77" dependencies = [ - "darling_core 0.20.4", + "darling_core 0.20.5", "quote", "syn 2.0.48", ] @@ -1534,9 +1534,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" dependencies = [ "serde", ] @@ -1745,13 +1745,13 @@ dependencies = [ [[package]] name = "ethers" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5344eea9b20effb5efeaad29418215c4d27017639fd1f908260f59cbbd226e" +checksum = "6c7cd562832e2ff584fa844cd2f6e5d4f35bbe11b28c7c9b8df957b2e1d0c701" dependencies = [ "ethers-addressbook", "ethers-contract", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "ethers-etherscan", "ethers-middleware", "ethers-providers", @@ -1761,11 +1761,11 @@ dependencies = [ [[package]] name = "ethers-addressbook" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bf35eb7d2e2092ad41f584951e08ec7c077b142dba29c4f1b8f52d2efddc49c" +checksum = "35dc9a249c066d17e8947ff52a4116406163cf92c7f0763cb8c001760b26403f" dependencies = [ - "ethers-core 2.0.12", + "ethers-core 2.0.13", "once_cell", "serde", "serde_json", @@ -1773,14 +1773,14 @@ dependencies = [ [[package]] name = "ethers-contract" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0111ead599d17a7bff6985fd5756f39ca7033edc79a31b23026a8d5d64fa95cd" +checksum = "43304317c7f776876e47f2f637859f6d0701c1ec7930a150f169d5fbe7d76f5a" dependencies = [ "const-hex", "ethers-contract-abigen", "ethers-contract-derive", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "ethers-providers", "futures-util", "once_cell", @@ -1792,14 +1792,14 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbdfb952aafd385b31d316ed80d7b76215ce09743c172966d840e96924427e0c" +checksum = "f9f96502317bf34f6d71a3e3d270defaa9485d754d789e15a8e04a84161c95eb" dependencies = [ "Inflector", "const-hex", "dunce", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "ethers-etherscan", "eyre", "prettyplease", @@ -1810,20 +1810,20 @@ dependencies = [ "serde", "serde_json", "syn 2.0.48", - "toml 0.8.8", + "toml 0.8.10", "walkdir", ] [[package]] name = "ethers-contract-derive" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7465c814a2ecd0de0442160da13584205d1cdc08f4717a6511cad455bd5d7dc4" +checksum = "452ff6b0a64507ce8d67ffd48b1da3b42f03680dcf5382244e9c93822cbbf5de" dependencies = [ "Inflector", "const-hex", "ethers-contract-abigen", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "proc-macro2", "quote", "serde_json", @@ -1863,9 +1863,9 @@ dependencies = [ [[package]] name = "ethers-core" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "918b1a9ba585ea61022647def2f27c29ba19f6d2a4a4c8f68a9ae97fd5769737" +checksum = "aab3cef6cc1c9fd7f787043c81ad3052eff2b96a3878ef1526aa446311bdbfc9" dependencies = [ "arrayvec", "bytes", @@ -1906,12 +1906,12 @@ dependencies = [ [[package]] name = "ethers-etherscan" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "facabf8551b4d1a3c08cb935e7fca187804b6c2525cc0dafb8e5a6dd453a24de" +checksum = "16d45b981f5fa769e1d0343ebc2a44cfa88c9bc312eb681b676318b40cef6fb1" dependencies = [ "chrono", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "reqwest", "semver", "serde", @@ -1922,14 +1922,14 @@ dependencies = [ [[package]] name = "ethers-middleware" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681ece6eb1d10f7cf4f873059a77c04ff1de4f35c63dd7bccde8f438374fcb93" +checksum = "145211f34342487ef83a597c1e69f0d3e01512217a7c72cc8a25931854c7dca0" dependencies = [ "async-trait", "auto_impl", "ethers-contract", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "ethers-etherscan", "ethers-providers", "ethers-signers", @@ -1949,9 +1949,9 @@ dependencies = [ [[package]] name = "ethers-providers" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25d6c0c9455d93d4990c06e049abf9b30daf148cf461ee939c11d88907c60816" +checksum = "fb6b15393996e3b8a78ef1332d6483c11d839042c17be58decc92fa8b1c3508a" dependencies = [ "async-trait", "auto_impl", @@ -1959,7 +1959,7 @@ dependencies = [ "bytes", "const-hex", "enr 0.9.1", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "futures-core", "futures-timer", "futures-util", @@ -1986,9 +1986,9 @@ dependencies = [ [[package]] name = "ethers-signers" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cb1b714e227bbd2d8c53528adb580b203009728b17d0d0e4119353aa9bc5532" +checksum = "b3b125a103b56aef008af5d5fb48191984aa326b50bfd2557d231dc499833de3" dependencies = [ "async-trait", "coins-bip32", @@ -1996,7 +1996,7 @@ dependencies = [ "const-hex", "elliptic-curve 0.13.8", "eth-keystore", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "rand", "sha2", "thiserror", @@ -2005,15 +2005,15 @@ dependencies = [ [[package]] name = "ethers-solc" -version = "2.0.12" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2e46e3ec8ef0c986145901fa9864205dc4dcee701f9846be2d56112d34bdea" +checksum = "d21df08582e0a43005018a858cc9b465c5fff9cf4056651be64f844e57d1f55f" dependencies = [ "cfg-if", "const-hex", "dirs", "dunce", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "glob", "home", "md-5", @@ -2043,9 +2043,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "eyre" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ "indenter", "once_cell", @@ -2379,7 +2379,7 @@ dependencies = [ "dotenv", "ethers", "ethers-contract", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "ethers-derive-eip712", "graphql_client", "lazy_static", @@ -2498,7 +2498,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.11", - "indexmap 2.2.1", + "indexmap 2.2.3", "slab", "tokio", "tokio-util", @@ -2511,7 +2511,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.7", + "ahash 0.7.8", ] [[package]] @@ -2520,7 +2520,7 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.8", "allocator-api2", ] @@ -2577,9 +2577,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" +checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd" [[package]] name = "hex" @@ -2720,9 +2720,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2814,9 +2814,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.1" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433de089bd45971eecf4668ee0ee8f4cec17db4f8bd8f7bc3197a6ce37aa7d9b" +checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -2849,12 +2849,12 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" +checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ "hermit-abi", - "rustix", + "libc", "windows-sys 0.52.0", ] @@ -2902,18 +2902,18 @@ checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ "wasm-bindgen", ] @@ -3013,9 +3013,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" @@ -3070,12 +3070,13 @@ dependencies = [ "async-graphql-axum", "autometrics", "axum 0.5.17", + "chrono", "clap", "derive-getters", "dotenv", "ethers", "ethers-contract", - "ethers-core 2.0.12", + "ethers-core 2.0.13", "ethers-derive-eip712", "graphcast-sdk", "metrics", @@ -3162,7 +3163,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b9b8653cec6897f73b519a43fba5ee3d50f62fe9af80b428accdcc093b4a849" dependencies = [ - "ahash 0.7.7", + "ahash 0.7.8", "metrics-macros", "portable-atomic 0.3.20", ] @@ -3234,9 +3235,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] @@ -3414,21 +3415,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[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-iter" -version = "0.1.43" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" dependencies = [ "autocfg", "num-integer", @@ -3437,9 +3443,9 @@ dependencies = [ [[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", "libm", @@ -3769,9 +3775,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.6" +version = "2.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06" +checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546" dependencies = [ "memchr", "thiserror", @@ -3785,7 +3791,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.2.1", + "indexmap 2.2.3", ] [[package]] @@ -3914,9 +3920,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "polyval" @@ -4012,7 +4018,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit 0.21.0", + "toml_edit 0.21.1", ] [[package]] @@ -4322,18 +4328,18 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "rend" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" dependencies = [ "bytecheck", ] [[package]] name = "reqwest" -version = "0.11.23" +version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ "base64 0.21.7", "bytes", @@ -4360,6 +4366,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -4436,9 +4443,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.43" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527a97cdfef66f65998b5f3b637c26f5a5ec09cc52a3f9932313ac645f4190f5" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" dependencies = [ "bitvec", "bytecheck", @@ -4454,9 +4461,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.43" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c462a1328c8e67e4d6dbad1eb0355dd43e8ab432c6e227a43657f16ade5033" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" dependencies = [ "proc-macro2", "quote", @@ -4518,9 +4525,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.33.1" +version = "1.34.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4" +checksum = "b39449a79f45e8da28c57c341891b69a183044b29518bb8f86dbac9df60bb7df" dependencies = [ "arrayvec", "borsh", @@ -4561,9 +4568,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", @@ -4593,7 +4600,7 @@ dependencies = [ "log", "ring 0.17.7", "rustls-pki-types", - "rustls-webpki 0.102.1", + "rustls-webpki 0.102.2", "subtle", "zeroize", ] @@ -4644,9 +4651,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9d979b3ce68192e42760c7810125eb6cf2ea10efae545a156063e61f314e2a" +checksum = "048a63e5b3ac996d78d402940b5fa47973d2d080c6c6fffa1d0f19c4445310b7" [[package]] name = "rustls-webpki" @@ -4660,9 +4667,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.1" +version = "0.102.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4ca26037c909dedb327b48c3327d0ba91d3dd3c4e05dad328f210ffb68e95b" +checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" dependencies = [ "ring 0.17.7", "rustls-pki-types", @@ -4969,18 +4976,19 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.5.1" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5c9fdb6b00a489875b22efd4b78fe2b363b72265cc5f6eb2e2b9ee270e6140c" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" dependencies = [ "base64 0.21.7", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.1", + "indexmap 2.2.3", "serde", + "serde_derive", "serde_json", - "serde_with_macros 3.5.1", + "serde_with_macros 3.6.1", "time", ] @@ -4998,11 +5006,11 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.5.1" +version = "3.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbff351eb4b33600a2e138dfa0b10b65a238ea8ff8fb2387c422c5022a3e8298" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" dependencies = [ - "darling 0.20.4", + "darling 0.20.5", "proc-macro2", "quote", "syn 2.0.48", @@ -5144,9 +5152,9 @@ checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "sketches-ddsketch" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a406c1882ed7f29cd5e248c9848a80e7cb6ae0fea82346d2746f2f941c07e1" +checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" [[package]] name = "slab" @@ -5304,7 +5312,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d84b0a3c3739e220d94b3239fd69fb1f74bc36e16643423bd99de3b43c21bfbd" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.8", "atoi", "bigdecimal", "byteorder", @@ -5321,7 +5329,7 @@ dependencies = [ "futures-util", "hashlink", "hex", - "indexmap 2.2.1", + "indexmap 2.2.3", "log", "memchr", "once_cell", @@ -5515,7 +5523,7 @@ dependencies = [ "proc-macro2", "quote", "regex-syntax 0.6.29", - "strsim", + "strsim 0.10.0", "syn 2.0.48", "unicode-width", ] @@ -5556,6 +5564,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "strsim" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" + [[package]] name = "strum" version = "0.24.1" @@ -5775,13 +5789,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", "rustix", "windows-sys 0.52.0", ] @@ -5799,18 +5812,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", @@ -5829,12 +5842,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.31" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" dependencies = [ "deranged", "itoa", + "num-conv", "powerfmt", "serde", "time-core", @@ -5849,10 +5863,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" dependencies = [ + "num-conv", "time-core", ] @@ -5882,9 +5897,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.1" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ "backtrace", "bytes", @@ -6034,14 +6049,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit 0.22.5", ] [[package]] @@ -6059,11 +6074,11 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.1", + "indexmap 2.2.3", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] @@ -6072,22 +6087,33 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.2.1", + "indexmap 2.2.3", "toml_datetime", - "winnow", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.3", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "99e68c159e8f5ba8a28c4eb7b0c0c190d77bb479047ca713270048145a9ad28a" dependencies = [ - "indexmap 2.2.1", + "indexmap 2.2.3", "serde", "serde_spanned", "toml_datetime", - "winnow", + "winnow 0.6.0", ] [[package]] @@ -6350,9 +6376,9 @@ dependencies = [ [[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 = "unicode-width" @@ -6546,9 +6572,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -6556,9 +6582,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", @@ -6571,9 +6597,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", @@ -6583,9 +6609,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6593,9 +6619,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", @@ -6606,15 +6632,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "wasm-streams" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" dependencies = [ "futures-util", "js-sys", @@ -6625,9 +6651,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", @@ -6635,9 +6661,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.3" +version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "which" @@ -6831,9 +6857,18 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.35" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1931d78a9c73861da0134f453bb1f790ce49b2e30eba8410b4b79bac72b46a2d" +checksum = "6b1dbce9e90e5404c5a52ed82b1d13fc8cfbdad85033b6f57546ffd1265f8451" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index a8ddabe..fd5f555 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ reqwest = { version = "0.11.17", features = ["json"] } serde = { version = "1.0.163", features = ["rc", "derive"] } serde_derive = "1.0" serde_json = "1.0.96" -sqlx = { version = "0.7.1", features = ["postgres", "runtime-tokio", "bigdecimal", "rust_decimal", "time"] } +sqlx = { version = "0.7.2", features = ["postgres", "runtime-tokio", "bigdecimal", "rust_decimal", "time", "migrate"] } thiserror = "1.0.40" tracing = "0.1" tracing-subscriber = { version = "0.3", features = [ @@ -43,3 +43,5 @@ tracing-subscriber = { version = "0.3", features = [ "json", ] } tokio = { version = "1.28.1", features = ["full", "rt"] } +chrono = "0.4.33" + diff --git a/src/config.rs b/src/config.rs index 1c79ee5..4026108 100644 --- a/src/config.rs +++ b/src/config.rs @@ -240,13 +240,8 @@ pub struct Config { default_value = "subgraph-radio" )] pub radio_name: String, - #[clap( - long, - value_name = "MAX_STORAGE", - env = "MAX_STORAGE", - default_value = "3000" - )] - pub max_storage: i32, + #[clap(long, value_name = "MAX_STORAGE", env = "MAX_STORAGE")] + pub max_storage: Option, #[clap( long, value_name = "ID_VALIDATION", @@ -263,6 +258,13 @@ pub struct Config { indexer: must be registered at Graphcast Registry or is a Graph Account, correspond to and Indexer statisfying indexer minimum stake requirement" )] pub id_validation: IdentityValidation, + #[clap( + long, + value_name = "RETENTION", + env = "RETENTION", + default_value_t = 1440 + )] + pub retention: i32, } impl Config { diff --git a/src/db/resolver.rs b/src/db/resolver.rs index 566d624..7407a1f 100644 --- a/src/db/resolver.rs +++ b/src/db/resolver.rs @@ -1,6 +1,7 @@ use async_graphql::OutputType; +use chrono::Utc; use serde::{de::DeserializeOwned, Serialize}; -use sqlx::{types::Json, PgPool}; +use sqlx::{types::Json, PgPool, Row as SqliteRow}; use std::ops::Deref; use tracing::trace; @@ -191,3 +192,220 @@ RETURNING id Ok(deleted_ids.try_into().unwrap()) } + +/// Function to delete messages older than `retention` minutes +/// Returns the number of messages deleted +pub async fn prune_old_messages(pool: &PgPool, retention: i32) -> Result { + let cutoff_nonce = Utc::now().timestamp() - (retention as i64 * 60); + + let deleted_count = sqlx::query!( + r#" + DELETE FROM messages + WHERE (message->>'nonce')::bigint < $1 + RETURNING id + "#, + cutoff_nonce + ) + .fetch_all(pool) + .await? + .len() as i64; + + Ok(deleted_count) +} + +pub async fn list_active_indexers( + pool: &PgPool, + indexers: Option>, + from_timestamp: i64, +) -> Result, anyhow::Error> { + let mut query = String::from("SELECT DISTINCT message->>'graph_account' as graph_account FROM messages WHERE (CAST(message->>'nonce' AS BIGINT)) > $1"); + + // Dynamically add placeholders for indexers if provided. + if let Some(ref idxs) = indexers { + let placeholders = idxs + .iter() + .enumerate() + .map(|(i, _)| format!("${}", i + 2)) + .collect::>() + .join(","); + query.push_str(&format!( + " AND (message->>'graph_account') IN ({})", + placeholders + )); + } + + let mut query = sqlx::query(&query).bind(from_timestamp); + + // Bind indexers to the query if provided. + if let Some(indexers) = indexers { + for account in indexers { + query = query.bind(account); + } + } + + let rows = query + .fetch_all(pool) + .await + .map_err(anyhow::Error::new)? + .iter() + .map(|row| row.get::("graph_account")) + .collect(); + + Ok(rows) +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::message_types::PublicPoiMessage; + use sqlx::PgPool; + + async fn insert_test_data(pool: &PgPool, entries: Vec<(i64, &str)>) { + for (nonce, graph_account) in entries { + let message = PublicPoiMessage { + identifier: "QmTamam".to_string(), + content: "0xText".to_string(), + nonce: nonce.try_into().unwrap(), + network: "testnet".to_string(), + block_number: 1, + block_hash: "hash".to_string(), + graph_account: graph_account.to_string(), + }; + + add_message(pool, message) + .await + .expect("Failed to insert test data"); + } + } + + #[sqlx::test(migrations = "./migrations")] + async fn test_list_active_indexers_without_indexers(pool: PgPool) { + insert_test_data( + &pool, + vec![(1707328517, "0xb4b4570df6f7fe320f10fdfb702dba7e35244550")], + ) + .await; + + let from_timestamp = 1707328516; + let indexers = None; + let result = list_active_indexers(&pool, indexers, from_timestamp) + .await + .expect("Function should complete successfully"); + + assert!( + result.contains(&"0xb4b4570df6f7fe320f10fdfb702dba7e35244550".to_string()), + "Result should contain the expected graph_account" + ); + } + + #[sqlx::test(migrations = "./migrations")] + async fn test_list_active_indexers_with_specific_indexers(pool: PgPool) { + insert_test_data( + &pool, + vec![(1707328517, "0xb4b4570df6f7fe320f10fdfb702dba7e35244550")], + ) + .await; + + let from_timestamp = 1707328516; + let indexers = Some(vec![ + "0xb4b4570df6f7fe320f10fdfb702dba7e35244550".to_string(), + "nonexistent_indexer".to_string(), + ]); + let result = list_active_indexers(&pool, indexers, from_timestamp) + .await + .expect("Function should complete successfully"); + + assert_eq!( + result.len(), + 1, + "Should only match records for existing indexers" + ); + assert!( + result.contains(&"0xb4b4570df6f7fe320f10fdfb702dba7e35244550".to_string()), + "Result should contain the expected graph_account" + ); + } + + #[sqlx::test(migrations = "./migrations")] + async fn test_list_active_indexers_no_matching_records(pool: PgPool) { + let from_timestamp = 9999999999; + let indexers = None; + let result = list_active_indexers(&pool, indexers, from_timestamp) + .await + .expect("Function should complete successfully"); + + assert!( + result.is_empty(), + "Result should be empty when no records match criteria" + ); + } + + #[sqlx::test(migrations = "./migrations")] + async fn test_list_active_indexers_edge_cases(pool: PgPool) { + let specific_nonce = Utc::now().timestamp(); + insert_test_data( + &pool, + vec![(specific_nonce, "0xb4b4570df6f7fe320f10fdfb702dba7e35244550")], + ) + .await; + + let from_timestamp = specific_nonce; + let indexers = None; + let result = list_active_indexers(&pool, indexers, from_timestamp) + .await + .expect("Function should complete successfully"); + + assert!( + result.is_empty(), + "Result should be empty when from_timestamp exactly matches nonce" + ); + } + + #[sqlx::test(migrations = "./migrations")] + async fn test_list_active_indexers_with_partial_matching_indexers(pool: PgPool) { + insert_test_data( + &pool, + vec![ + (1707328517, "0xb4b4570df6f7fe320f10fdfb702dba7e35244550"), + (1707328518, "some_other_account"), + ], + ) + .await; + + let from_timestamp = 1707328516; + let indexers = Some(vec![ + "0xb4b4570df6f7fe320f10fdfb702dba7e35244550".to_string(), + "partial_match_indexer".to_string(), + ]); + let result = list_active_indexers(&pool, indexers, from_timestamp) + .await + .expect("Function should complete successfully"); + + assert_eq!( + result.len(), + 1, + "Should only match records for existing indexers" + ); + assert!( + result.contains(&"0xb4b4570df6f7fe320f10fdfb702dba7e35244550".to_string()), + "Result should contain the expected graph_account" + ); + } + + #[sqlx::test(migrations = "./migrations")] + async fn test_list_active_indexers_with_nonexistent_indexers(pool: PgPool) { + let from_timestamp = 1707328516; + let indexers = Some(vec![ + "nonexistent_indexer_1".to_string(), + "nonexistent_indexer_2".to_string(), + ]); + let result = list_active_indexers(&pool, indexers, from_timestamp) + .await + .expect("Function should complete successfully"); + + assert!( + result.is_empty(), + "Result should be empty for non-existent indexers" + ); + } +} diff --git a/src/operator/mod.rs b/src/operator/mod.rs index 25ff189..b2c79df 100644 --- a/src/operator/mod.rs +++ b/src/operator/mod.rs @@ -13,7 +13,7 @@ use tracing::{debug, info, trace, warn}; use graphcast_sdk::graphcast_agent::{message_typing::GraphcastMessage, GraphcastAgent}; -use crate::db::resolver::retain_max_storage; +use crate::db::resolver::{prune_old_messages, retain_max_storage}; use crate::metrics::{CONNECTED_PEERS, GOSSIP_PEERS, PRUNED_MESSAGES, RECEIVED_MESSAGES}; use crate::{ config::Config, @@ -167,34 +167,48 @@ impl RadioOperator { continue; } - // Prune old messages - let num_pruned = - match timeout(update_timeout, - retain_max_storage(&self.db, self.config.max_storage.try_into().unwrap()) + let mut total_num_pruned: i64 = 0; + + // Conditionally prune based on max_storage if provided + if let Some(max_storage) = self.config.max_storage { + let max_storage_usize = max_storage as usize; + match timeout( + update_timeout, + retain_max_storage(&self.db, max_storage_usize) ).await { - Err(e) => {debug!(err = tracing::field::debug(e), "Pruning time out"); 0}, + Err(e) => debug!(err = tracing::field::debug(e), "Pruning by max storage timed out"), Ok(Ok(num_pruned)) => { - PRUNED_MESSAGES.set(num_pruned); - num_pruned - } - Ok(Err(e)) => { - warn!(err = tracing::field::debug(e), "Pruning time out"); 0 - } + total_num_pruned += num_pruned; + PRUNED_MESSAGES.set(total_num_pruned); + }, + Ok(Err(e)) => warn!(err = tracing::field::debug(e), "Error during pruning by max storage"), }; + } + + // Always prune old messages based on RETENTION + match timeout( + update_timeout, + prune_old_messages(&self.db, self.config.retention) + ).await { + Err(e) => debug!(err = tracing::field::debug(e), "Pruning by retention timed out"), + Ok(Ok(num_pruned)) => { + total_num_pruned += num_pruned; + PRUNED_MESSAGES.set(total_num_pruned); + }, + Ok(Err(e)) => warn!(err = tracing::field::debug(e), "Error during pruning by retention"), + }; - // List the ones leftover - let result = timeout(update_timeout, - list_messages::>(&self.db) - ).await; + // List the remaining messages + let result = timeout(update_timeout, list_messages::>(&self.db)).await; match result { Err(e) => warn!(err = tracing::field::debug(e), "Public PoI messages summary timed out"), Ok(msgs) => { - let msg_num = &msgs.map_or(0, |m| m.len()); - CACHED_MESSAGES.set(*msg_num as i64); + let msg_num = msgs.map_or(0, |m| m.len()); + CACHED_MESSAGES.set(msg_num as i64); info!(total_messages = msg_num, - num_pruned, - "Monitoring summary" + total_num_pruned, + "Monitoring summary" ) } } diff --git a/src/server/model/mod.rs b/src/server/model/mod.rs index fa7c742..7708566 100644 --- a/src/server/model/mod.rs +++ b/src/server/model/mod.rs @@ -1,15 +1,16 @@ use async_graphql::{Context, EmptySubscription, Object, OutputType, Schema, SimpleObject}; +use chrono::{Duration, Utc}; use serde::{de::DeserializeOwned, Serialize}; use sqlx::{Pool, Postgres}; - use std::sync::Arc; use thiserror::Error; use crate::{ config::Config, db::resolver::{ - delete_message_all, delete_message_by_id, list_messages, list_rows, message_by_id, + delete_message_all, delete_message_by_id, list_active_indexers, list_messages, list_rows, + message_by_id, }, operator::radio_types::RadioPayloadMessage, }; @@ -56,6 +57,22 @@ impl QueryRoot { Ok(rows) } + async fn query_active_indexers( + &self, + ctx: &Context<'_>, + indexers: Option>, + minutes_ago: Option, + ) -> Result, HttpServiceError> { + let pool = ctx.data_unchecked::>(); + // Use a default time window if not specified + // Default to 1440 minutes (24 hours) if not provided + let minutes_ago = minutes_ago.unwrap_or(1440); + let from_timestamp = (Utc::now() - Duration::minutes(minutes_ago)).timestamp(); + + let active_indexers = list_active_indexers(pool, indexers, from_timestamp).await?; + Ok(active_indexers) + } + /// Grab a row from db by db entry id async fn row( &self,