diff --git a/.env.sample b/.env.sample new file mode 100644 index 000000000..5b8cf377c --- /dev/null +++ b/.env.sample @@ -0,0 +1,5 @@ +DATABASE_URL=postgres://postgres:password@postgres:5433/namada-indexer +TENDERMINT_URL=http://host.docker.internal:26657 +CACHE_URL=redis://dragonfly:6379 +WEBSERVER_PORT=5001 +DATABASE_URL_TEST=postgres://postgres:password@0.0.0.0:5433 diff --git a/.env_sample b/.env_sample deleted file mode 100644 index 2b2b6911a..000000000 --- a/.env_sample +++ /dev/null @@ -1,5 +0,0 @@ -DATABASE_URL=postgres://postgres:password@postgres:5432/namada-indexer -TENDERMINT_URL=http://host.docker.internal:27657 -CACHE_URL=redis://dragonfly:6379 -WEBSERVER_PORT=5001 -DATABASE_URL_TEST=postgres://postgres:password@0.0.0.0:5432 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d4b3211ac..04c3c16e6 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -8,6 +8,8 @@ on: branches: - "v?[0-9]+.[0-9]+.[0-9]+-rc" - "v?[0-9]+.[0-9]+.[0-9]+-[a-z]+-rc" + - "v?[0-9]+.[0-9]+.[0-9]+-maint" + - "v?[0-9]+.[0-9]+.[0-9]+-[a-z]+-maint" permissions: packages: write diff --git a/.github/workflows/queue_and_merge.yml b/.github/workflows/queue_and_merge.yml index ea53c39db..8325e9866 100644 --- a/.github/workflows/queue_and_merge.yml +++ b/.github/workflows/queue_and_merge.yml @@ -34,8 +34,12 @@ jobs: with: version: "25.0" repo-token: ${{ secrets.GITHUB_TOKEN }} + - id: rust_toolchain + run: echo "version=$(cat $GITHUB_WORKSPACE/rust-stable-version | tr -d '\n')" >> $GITHUB_OUTPUT - uses: actions-rust-lang/setup-rust-toolchain@v1 with: + toolchain: ${{ steps.rust_toolchain.outputs.version }} + components: clippy cache: true - run: just clippy @@ -67,8 +71,11 @@ jobs: with: version: "25.0" repo-token: ${{ secrets.GITHUB_TOKEN }} + - id: rust_toolchain + run: echo "version=$(cat $GITHUB_WORKSPACE/rust-stable-version | tr -d '\n')" >> $GITHUB_OUTPUT - uses: actions-rust-lang/setup-rust-toolchain@v1 with: + toolchain: ${{ steps.rust_toolchain.outputs.version }} cache: true - run: just test env: @@ -97,9 +104,11 @@ jobs: with: version: "25.0" repo-token: ${{ secrets.GITHUB_TOKEN }} + - id: rust_toolchain + run: echo "version=$(cat $GITHUB_WORKSPACE/rust-nightly-version | tr -d '\n')" >> $GITHUB_OUTPUT - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: nightly-2024-06-14 + toolchain: ${{ steps.rust_toolchain.outputs.version }} components: rustfmt cache: true - run: just fmt-check @@ -194,4 +203,4 @@ jobs: run: | echo "ALL_SUCCESS=$(echo "$NEEDS_JSON" | jq '. | to_entries | map([.value.result == "success", .value.result == "skipped"] | any) | all')" >> $GITHUB_ENV - name: check outcomes - run: "[ $ALL_SUCCESS == true ]" \ No newline at end of file + run: "[ $ALL_SUCCESS == true ]" diff --git a/.gitignore b/.gitignore index e9111ef7f..fa4b55c20 100644 --- a/.gitignore +++ b/.gitignore @@ -68,10 +68,6 @@ Temporary Items debug/ target/ -# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries -# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -Cargo.lock - # These are backup files generated by rustfmt **/*.rs.bk @@ -87,4 +83,7 @@ rust-project.json .vscode -swagger-codegen.json \ No newline at end of file +swagger-codegen.json + +# Ignore docker compose override files +docker-compose.override* diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 000000000..66d513f9b --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,8752 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +dependencies = [ + "anstyle", + "once_cell", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" + +[[package]] +name = "ark-bls12-381" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65be532f9dd1e98ad0150b037276cde464c6f371059e6dd02c0222395761f6aa" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea978406c4b1ca13c2db2373b05cc55429c3575b8b21f1b9ee859aa5b03dd42" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std", + "digest 0.9.0", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "async-compression" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "zstd 0.13.2", + "zstd-safe 7.2.1", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "async-trait" +version = "0.1.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.1", +] + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto_impl" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12882f59de5360c748c4cbf569a042d5fb0eb515f7bea9c1f470b47f6ffbd73" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower 0.5.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-extra" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +dependencies = [ + "axum", + "axum-core", + "bytes", + "fastrand", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "multer", + "pin-project-lite", + "serde", + "serde_html_form", + "tower 0.5.2", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "axum-prometheus" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739e2585f5376f5bdd129324ded72d3261fdd5b7c411a645920328fb5dc875d4" +dependencies = [ + "axum", + "bytes", + "futures-core", + "http 1.2.0", + "http-body 1.0.1", + "matchit", + "metrics", + "metrics-exporter-prometheus", + "once_cell", + "pin-project", + "tokio", + "tower 0.4.13", + "tower-http", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base58" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bech32" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9ff0bbfd639f15c74af777d81383cf53efb7c93613f6cab67c6c11e05bbf8b" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bellman" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afceed28bac7f9f5a508bca8aeeff51cdfa4770c0b967ac55c621e2ddfd6171" +dependencies = [ + "bitvec", + "blake2s_simd", + "byteorder", + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "bigdecimal" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" +dependencies = [ + "serde", +] + +[[package]] +name = "bip0039" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568b6890865156d9043af490d4c4081c385dd68ea10acd6ca15733d511e6b51c" +dependencies = [ + "hmac", + "pbkdf2 0.12.2", + "rand", + "sha2 0.10.8", + "unicode-normalization", + "zeroize", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "blake2s_simd" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e90f7deecfac93095eb874a40febd69427776e24e1bd7f87f33ac62d6f0174df" +dependencies = [ + "arrayref", + "arrayvec", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "blake3" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bls12_381" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7bc6d6292be3a19e6379786dac800f551e5865a5bb51ebbe3064ab80433f403" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "borsh" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "brotli" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2 0.10.8", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +dependencies = [ + "serde", +] + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.25", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + +[[package]] +name = "cc" +version = "1.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "755717a7de9ec452bf7f3f1a3099085deabd7f2962b861dae91ecd7a365903d2" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead", + "chacha20", + "cipher", + "poly1305", + "zeroize", +] + +[[package]] +name = "chain" +version = "1.1.6" +dependencies = [ + "anyhow", + "chrono", + "clap", + "deadpool-diesel", + "diesel", + "futures", + "namada_core", + "namada_governance", + "namada_sdk", + "namada_token", + "orm", + "rlimit", + "serde_json", + "shared", + "subtle-encoding", + "tendermint-rpc", + "test_helpers", + "tokio", + "tokio-retry", + "tracing", + "vergen", +] + +[[package]] +name = "chrono" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + +[[package]] +name = "circular-queue" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d34327ead1c743a10db339de35fb58957564b99d248a67985c55638b22c59b5" +dependencies = [ + "version_check", +] + +[[package]] +name = "clap" +version = "4.5.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap-verbosity-flag" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34c77f67047557f62582784fd7482884697731b2932c7d37ced54bce2312e1e2" +dependencies = [ + "clap", + "log", +] + +[[package]] +name = "clap_builder" +version = "4.5.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + +[[package]] +name = "clru" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd0f76e066e64fdc5631e3bb46381254deab9ef1158292f27c8c57e3bf3fe59" + +[[package]] +name = "cobs" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" + +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58", + "coins-core", + "digest 0.10.7", + "hmac", + "k256", + "serde", + "sha2 0.10.8", + "thiserror 1.0.69", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec", + "coins-bip32", + "hmac", + "once_cell", + "pbkdf2 0.12.2", + "rand", + "sha2 0.10.8", + "thiserror 1.0.69", +] + +[[package]] +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.7", + "bech32 0.9.1", + "bs58", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2 0.10.8", + "sha3", + "thiserror 1.0.69", +] + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "const-crc32-nostd" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808ac43170e95b11dd23d78aa9eaac5bea45776a602955552c4e833f3f0f823d" + +[[package]] +name = "const-hex" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_panic" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core2" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "239fa3ae9b63c2dc74bd3fa852d4792b8b305ae64eeede946265b6af62f1fff3" +dependencies = [ + "memchr", +] + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ct-codecs" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek-ng" +version = "4.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core", + "subtle-ng", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.98", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "data-encoding" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f" + +[[package]] +name = "deadpool" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb84100978c1c7b37f09ed3ce3e5f843af02c2a2c431bae5b19230dad2c1b490" +dependencies = [ + "async-trait", + "deadpool-runtime", + "num_cpus", + "tokio", +] + +[[package]] +name = "deadpool-diesel" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8404d25ddc6cb0676d4a863bbd007613ee3fffb54db23e0e6341e1fe61c3e" +dependencies = [ + "deadpool", + "deadpool-sync", + "diesel", +] + +[[package]] +name = "deadpool-redis" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84930e585871d35b8e06d3e03d03e3a8a4c5dc71afa4376c7cd5f9223e1da1ea" +dependencies = [ + "deadpool", + "redis", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +dependencies = [ + "tokio", +] + +[[package]] +name = "deadpool-sync" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524bc3df0d57e98ecd022e21ba31166c2625e7d3e5bcc4510efaeeab4abcab04" +dependencies = [ + "deadpool-runtime", +] + +[[package]] +name = "debugless-unwrap" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f400d0750c0c069e8493f2256cb4da6f604b6d2eeb69a0ca8863acde352f8400" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivation-path" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5c37193a1db1d8ed868c03ec7b152175f26160a5b740e5e484143877e0adf0" + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive-getters" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74ef43543e701c01ad77d3a5922755c6a1d71b22d942cb8042be4994b380caff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "derive_more" +version = "0.99.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "deunicode" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" + +[[package]] +name = "diesel" +version = "2.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04001f23ba8843dc315804fa324000376084dfb1c30794ff68dd279e6e5696d5" +dependencies = [ + "bigdecimal", + "bitflags 2.8.0", + "byteorder", + "chrono", + "diesel_derives", + "itoa", + "num-bigint", + "num-integer", + "num-traits", + "pq-sys", + "serde_json", +] + +[[package]] +name = "diesel-derive-enum" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81c5131a2895ef64741dad1d483f358c2a229a3a2d1b256778cdc5e146db64d4" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "diesel_derives" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7f2c3de51e2ba6bf2a648285696137aaf0f5f487bcbea93972fe8a364e131a4" +dependencies = [ + "diesel_table_macro_syntax", + "dsl_auto_type", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "diesel_migrations" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a73ce704bad4231f001bff3314d91dce4aba0770cee8b233991859abc15c1f6" +dependencies = [ + "diesel", + "migrations_internals", + "migrations_macros", +] + +[[package]] +name = "diesel_table_macro_syntax" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25" +dependencies = [ + "syn 2.0.98", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + +[[package]] +name = "dsl_auto_type" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b" +dependencies = [ + "darling", + "either", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "dummy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac124e13ae9aa56acc4241f8c8207501d93afdd8d8e62f0c1f2e12f6508c65" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dur" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce5b6c91b5e394b75cd96c36393fc938496c030220207a0ccf34d6cd313d3b49" +dependencies = [ + "nom", + "rust_decimal", +] + +[[package]] +name = "duration-str" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c1a2e028bbf7921549873b291ddc0cfe08b673d9489da81ac28898cd5a0e6e0" +dependencies = [ + "chrono", + "rust_decimal", + "serde", + "thiserror 1.0.69", + "time", + "winnow 0.6.26", +] + +[[package]] +name = "dyn-clone" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "serdect", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-consensus" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8465edc8ee7436ffea81d21a019b16676ee3db267aa8d5a8d729581ecf998b" +dependencies = [ + "curve25519-dalek-ng", + "hex", + "rand_core", + "serde", + "sha2 0.9.9", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "embedded-io" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" + +[[package]] +name = "embedded-io" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" + +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enr" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" +dependencies = [ + "base64 0.21.7", + "bytes", + "hex", + "k256", + "log", + "rand", + "rlp", + "serde", + "sha3", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes", + "ctr", + "digest 0.10.7", + "hex", + "hmac", + "pbkdf2 0.11.0", + "rand", + "scrypt", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "thiserror 1.0.69", + "uuid 0.8.2", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror 1.0.69", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethbridge-bridge-contract" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccec11776e279f18dcef377c95932ac7e558358477870c972e3b5eba0f1cc661" +dependencies = [ + "ethbridge-bridge-events", + "ethbridge-structs", + "ethers", + "ethers-contract", +] + +[[package]] +name = "ethbridge-bridge-events" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f862616190f541d733357e234d65ba73fec0ddacd62e91abb26a0258048a6bb1" +dependencies = [ + "ethabi", + "ethbridge-structs", + "ethers", + "ethers-contract", +] + +[[package]] +name = "ethbridge-structs" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7b3e89a2332887bf096cd589ac5781a6664b4fb0881506aa99b2be32e8e086" +dependencies = [ + "ethabi", + "ethers", + "ethers-contract", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", +] + +[[package]] +name = "ethers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", +] + +[[package]] +name = "ethers-addressbook" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "ethers-contract" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" +dependencies = [ + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "ethers-contract-abigen" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" +dependencies = [ + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "ethers-etherscan", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "reqwest", + "serde", + "serde_json", + "syn 2.0.98", + "toml 0.8.19", + "walkdir", +] + +[[package]] +name = "ethers-contract-derive" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" +dependencies = [ + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.98", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec", + "bytes", + "cargo_metadata", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum", + "once_cell", + "open-fastrlp", + "rand", + "rlp", + "serde", + "serde_json", + "strum", + "syn 2.0.98", + "tempfile", + "thiserror 1.0.69", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-etherscan" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" +dependencies = [ + "chrono", + "ethers-core", + "reqwest", + "semver 1.0.25", + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-middleware" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-futures", + "url", +] + +[[package]] +name = "ethers-providers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" +dependencies = [ + "async-trait", + "auto_impl", + "base64 0.21.7", + "bytes", + "const-hex", + "enr", + "ethers-core", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http 0.2.12", + "instant", + "jsonwebtoken", + "once_cell", + "pin-project", + "reqwest", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", +] + +[[package]] +name = "ethers-signers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand", + "sha2 0.10.8", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-solc" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" +dependencies = [ + "cfg-if", + "const-hex", + "dirs", + "dunce", + "ethers-core", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.25", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror 1.0.69", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fake" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d391ba4af7f1d93f01fcf7b2f29e2bc9348e109dfdbf4dcbdc51dfa38dab0b6" +dependencies = [ + "deunicode", + "dummy", + "rand", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fd-lock" +version = "3.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5" +dependencies = [ + "cfg-if", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "bitvec", + "rand_core", + "subtle", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flex-error" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c606d892c9de11507fa0dcffc116434f94e105d0bbdc4e405b61519464c49d7b" +dependencies = [ + "eyre", + "paste", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "spin 0.9.8", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fpe" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c4b37de5ae15812a764c958297cfc50f5c010438f60c6ce75d11b802abd404" +dependencies = [ + "cbc", + "cipher", + "libm", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "frost-core" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1858230cabb6792a5020daf4b0074f57b7d1e2a520ac544c77f102babee62ff4" +dependencies = [ + "byteorder", + "const-crc32-nostd", + "debugless-unwrap", + "derive-getters", + "document-features", + "hex", + "itertools 0.14.0", + "postcard", + "rand_core", + "serde", + "serdect", + "thiserror 2.0.11", + "thiserror-nostd-notrait", + "visibility", + "zeroize", +] + +[[package]] +name = "frost-rerandomized" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3b10d9c1e9f298522510940b5b8c3d55040420517ec8d2bb86c4c2d1ae3ee" +dependencies = [ + "derive-getters", + "document-features", + "frost-core", + "hex", + "rand_core", +] + +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "governance" +version = "1.1.6" +dependencies = [ + "anyhow", + "chrono", + "clap", + "deadpool-diesel", + "diesel", + "futures", + "namada_governance", + "namada_sdk", + "orm", + "serde_json", + "shared", + "tendermint-rpc", + "tokio", + "tokio-retry", + "tracing", + "vergen", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "memuse", + "rand_core", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.7.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "h2" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.2.0", + "indexmap 2.7.1", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version 0.4.1", + "serde", + "spin 0.9.8", + "stable_deref_trait", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha512" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e806677ce663d0a199541030c816847b36e8dc095f70dae4a4f4ad63da5383" + +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.2.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2 0.4.7", + "http 1.2.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.32", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.32", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "hyper 1.6.0", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ibc" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-apps", + "ibc-clients", + "ibc-core", + "ibc-core-host-cosmos", + "ibc-derive", + "ibc-primitives", +] + +[[package]] +name = "ibc-app-nft-transfer" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-app-nft-transfer-types", + "ibc-core", + "serde-json-wasm", +] + +[[package]] +name = "ibc-app-nft-transfer-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "base64 0.22.1", + "borsh", + "derive_more 0.99.19", + "displaydoc", + "http 1.2.0", + "ibc-app-transfer-types", + "ibc-core", + "ibc-proto", + "mime", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", + "serde-json-wasm", +] + +[[package]] +name = "ibc-app-transfer" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-app-transfer-types", + "ibc-core", + "serde-json-wasm", +] + +[[package]] +name = "ibc-app-transfer-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-core", + "ibc-proto", + "parity-scale-codec", + "primitive-types", + "scale-info", + "schemars", + "serde", + "uint", +] + +[[package]] +name = "ibc-apps" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-app-nft-transfer", + "ibc-app-transfer", +] + +[[package]] +name = "ibc-client-tendermint" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "derive_more 0.99.19", + "ibc-client-tendermint-types", + "ibc-core-client", + "ibc-core-commitment-types", + "ibc-core-handler-types", + "ibc-core-host", + "ibc-primitives", + "serde", + "tendermint", + "tendermint-light-client-verifier", +] + +[[package]] +name = "ibc-client-tendermint-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "displaydoc", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "serde", + "tendermint", + "tendermint-light-client-verifier", + "tendermint-proto", +] + +[[package]] +name = "ibc-client-wasm-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "base64 0.22.1", + "displaydoc", + "ibc-core-client", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "serde", +] + +[[package]] +name = "ibc-clients" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-client-tendermint", + "ibc-client-wasm-types", +] + +[[package]] +name = "ibc-core" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-core-channel", + "ibc-core-client", + "ibc-core-commitment-types", + "ibc-core-connection", + "ibc-core-handler", + "ibc-core-host", + "ibc-core-router", + "ibc-derive", + "ibc-primitives", +] + +[[package]] +name = "ibc-core-channel" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-core-channel-types", + "ibc-core-client", + "ibc-core-commitment-types", + "ibc-core-connection", + "ibc-core-handler-types", + "ibc-core-host", + "ibc-core-router", + "ibc-primitives", +] + +[[package]] +name = "ibc-core-channel-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-connection-types", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", + "sha2 0.10.8", + "subtle-encoding", + "tendermint", +] + +[[package]] +name = "ibc-core-client" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-core-client-context", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-handler-types", + "ibc-core-host", + "ibc-primitives", +] + +[[package]] +name = "ibc-core-client-context" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "derive_more 0.99.19", + "displaydoc", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-handler-types", + "ibc-core-host-types", + "ibc-primitives", + "subtle-encoding", + "tendermint", +] + +[[package]] +name = "ibc-core-client-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-core-commitment-types", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", + "subtle-encoding", + "tendermint", +] + +[[package]] +name = "ibc-core-commitment-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "ics23", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", + "subtle-encoding", +] + +[[package]] +name = "ibc-core-connection" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-client-wasm-types", + "ibc-core-client", + "ibc-core-connection-types", + "ibc-core-handler-types", + "ibc-core-host", + "ibc-primitives", + "prost 0.13.4", +] + +[[package]] +name = "ibc-core-connection-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", + "subtle-encoding", + "tendermint", +] + +[[package]] +name = "ibc-core-handler" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "ibc-core-channel", + "ibc-core-client", + "ibc-core-commitment-types", + "ibc-core-connection", + "ibc-core-handler-types", + "ibc-core-host", + "ibc-core-router", + "ibc-primitives", +] + +[[package]] +name = "ibc-core-handler-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-core-channel-types", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-connection-types", + "ibc-core-host-types", + "ibc-core-router-types", + "ibc-primitives", + "ibc-proto", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", + "subtle-encoding", + "tendermint", +] + +[[package]] +name = "ibc-core-host" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "derive_more 0.99.19", + "displaydoc", + "ibc-core-channel-types", + "ibc-core-client-context", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-connection-types", + "ibc-core-handler-types", + "ibc-core-host-types", + "ibc-primitives", + "subtle-encoding", +] + +[[package]] +name = "ibc-core-host-cosmos" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "derive_more 0.99.19", + "displaydoc", + "ibc-app-transfer-types", + "ibc-client-tendermint", + "ibc-core-client-context", + "ibc-core-client-types", + "ibc-core-commitment-types", + "ibc-core-connection-types", + "ibc-core-handler-types", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "serde", + "sha2 0.10.8", + "subtle-encoding", + "tendermint", +] + +[[package]] +name = "ibc-core-host-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-primitives", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", +] + +[[package]] +name = "ibc-core-router" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "derive_more 0.99.19", + "displaydoc", + "ibc-core-channel-types", + "ibc-core-host-types", + "ibc-core-router-types", + "ibc-primitives", + "subtle-encoding", +] + +[[package]] +name = "ibc-core-router-types" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-core-host-types", + "ibc-primitives", + "ibc-proto", + "parity-scale-codec", + "scale-info", + "schemars", + "serde", + "subtle-encoding", + "tendermint", +] + +[[package]] +name = "ibc-derive" +version = "0.8.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "ibc-middleware-module" +version = "0.1.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=module/v0.1.0#3d3b436f7c58000c7498d68e88c15a955433a619" +dependencies = [ + "ibc-core-channel-types", + "ibc-core-host-types", + "ibc-core-router", + "ibc-core-router-types", + "ibc-primitives", +] + +[[package]] +name = "ibc-middleware-module" +version = "0.1.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=orm/v0.4.0#8d341de14ff5e2a637699796cffbf0fbbaee001f" +dependencies = [ + "ibc-core-channel-types", + "ibc-core-host-types", + "ibc-core-router", + "ibc-core-router-types", + "ibc-primitives", +] + +[[package]] +name = "ibc-middleware-module" +version = "0.1.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=pfm/v0.9.0#3d3b436f7c58000c7498d68e88c15a955433a619" +dependencies = [ + "ibc-core-channel-types", + "ibc-core-host-types", + "ibc-core-router", + "ibc-core-router-types", + "ibc-primitives", +] + +[[package]] +name = "ibc-middleware-module-macros" +version = "0.1.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=module-macros/v0.1.0#3d3b436f7c58000c7498d68e88c15a955433a619" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "ibc-middleware-module-macros" +version = "0.1.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=orm/v0.4.0#8d341de14ff5e2a637699796cffbf0fbbaee001f" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "ibc-middleware-module-macros" +version = "0.1.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=pfm/v0.9.0#3d3b436f7c58000c7498d68e88c15a955433a619" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "ibc-middleware-overflow-receive" +version = "0.4.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=orm/v0.4.0#8d341de14ff5e2a637699796cffbf0fbbaee001f" +dependencies = [ + "ibc-app-transfer-types", + "ibc-core-channel-types", + "ibc-core-host-types", + "ibc-core-router", + "ibc-core-router-types", + "ibc-middleware-module 0.1.0 (git+https://github.com/heliaxdev/ibc-middleware?tag=orm/v0.4.0)", + "ibc-middleware-module-macros 0.1.0 (git+https://github.com/heliaxdev/ibc-middleware?tag=orm/v0.4.0)", + "ibc-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "ibc-middleware-packet-forward" +version = "0.9.0" +source = "git+https://github.com/heliaxdev/ibc-middleware?tag=pfm/v0.9.0#3d3b436f7c58000c7498d68e88c15a955433a619" +dependencies = [ + "borsh", + "dur", + "either", + "ibc-app-transfer-types", + "ibc-core-channel", + "ibc-core-channel-types", + "ibc-core-host-types", + "ibc-core-router", + "ibc-core-router-types", + "ibc-middleware-module 0.1.0 (git+https://github.com/heliaxdev/ibc-middleware?tag=pfm/v0.9.0)", + "ibc-middleware-module-macros 0.1.0 (git+https://github.com/heliaxdev/ibc-middleware?tag=pfm/v0.9.0)", + "ibc-primitives", + "serde", + "serde_json", +] + +[[package]] +name = "ibc-primitives" +version = "0.54.0" +source = "git+https://github.com/heliaxdev/cosmos-ibc-rs?rev=38489943c4e75206eaffeeeec6153c039c2499d1#38489943c4e75206eaffeeeec6153c039c2499d1" +dependencies = [ + "borsh", + "derive_more 0.99.19", + "displaydoc", + "ibc-proto", + "parity-scale-codec", + "prost 0.13.4", + "scale-info", + "schemars", + "serde", + "tendermint", + "time", +] + +[[package]] +name = "ibc-proto" +version = "0.47.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c852d22b782d2d793f4a646f968de419be635e02bc8798d5d74a6e44eef27733" +dependencies = [ + "base64 0.22.1", + "borsh", + "bytes", + "flex-error", + "ics23", + "informalsystems-pbjson", + "parity-scale-codec", + "prost 0.13.4", + "scale-info", + "schemars", + "serde", + "subtle-encoding", + "tendermint-proto", +] + +[[package]] +name = "ics23" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b17f1a5bd7d12ad30a21445cfa5f52fd7651cb3243ba866f9916b1ec112f12" +dependencies = [ + "anyhow", + "blake2", + "blake3", + "bytes", + "hex", + "informalsystems-pbjson", + "prost 0.13.4", + "ripemd", + "serde", + "sha2 0.10.8", + "sha3", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "if_chain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-num-traits" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "951641f13f873bff03d4bf19ae8bec531935ac0ac2cc775f84d7edfdcfed3f17" +dependencies = [ + "integer-sqrt", + "num-traits", + "uint", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "incrementalmerkletree" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5ad43a3f5795945459d577f6589cf62a476e92c79b75e70cd954364e14ce17b" +dependencies = [ + "serde", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "informalsystems-pbjson" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa4a0980c8379295100d70854354e78df2ee1c6ca0f96ffe89afeb3140e3a3d" +dependencies = [ + "base64 0.21.7", + "serde", +] + +[[package]] +name = "init-once" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0863329819ed5ecf33446da6cb9104d2f8943ff8530d2b6c51adbc6be4f0632" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "jubjub" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8499f7a74008aafbecb2a2e608a3e13e4dd3e84df198b604451efe93f2de6e61" +dependencies = [ + "bitvec", + "bls12_381", + "ff", + "group", + "rand_core", + "subtle", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "serdect", + "sha2 0.10.8", + "signature", +] + +[[package]] +name = "kdam" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "526586ea01a9a132b5f8d3a60f6d6b41b411550236f5ee057795f20b37316957" +dependencies = [ + "terminal_size", + "windows-sys 0.52.0", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "konst" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4381b9b00c55f251f2ebe9473aef7c117e96828def1a7cb3bd3f0f903c6894e9" +dependencies = [ + "const_panic", + "konst_kernel", + "typewit", +] + +[[package]] +name = "konst_kernel" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4b1eb7788f3824c629b1116a7a9060d6e898c358ebff59070093d51103dcc3c" +dependencies = [ + "typewit", +] + +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax 0.8.5", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.9", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.8.0", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" + +[[package]] +name = "masp_note_encryption" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9736dbd86140a9d6711b464297a87af9cc0ae485d73a956c595f1bc1f6a7920" +dependencies = [ + "borsh", + "chacha20", + "chacha20poly1305", + "cipher", + "rand_core", + "subtle", +] + +[[package]] +name = "masp_primitives" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb184254ca5cd5fb12e11b81a6a0d6b955d98c7263eae11057f669c31c7123c" +dependencies = [ + "aes", + "bip0039", + "bitvec", + "blake2b_simd", + "blake2s_simd", + "borsh", + "byteorder", + "ff", + "fpe", + "group", + "hex", + "incrementalmerkletree", + "lazy_static", + "masp_note_encryption", + "memuse", + "nam-bls12_381", + "nam-jubjub", + "nam-num-traits", + "nonempty 0.11.0", + "rand", + "rand_core", + "sha2 0.10.8", + "subtle", + "zcash_encoding", +] + +[[package]] +name = "masp_proofs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "833eb23ccc5e4781636f6a7b2e720f60f31e53e534d1abb2b0ac5e86eb099c14" +dependencies = [ + "bellman", + "blake2b_simd", + "directories", + "getrandom 0.2.15", + "group", + "itertools 0.14.0", + "lazy_static", + "masp_primitives", + "minreq", + "nam-bls12_381", + "nam-jubjub", + "nam-redjubjub", + "rand_core", + "tracing", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memuse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d97bbf43eb4f088f8ca469930cde17fa036207c9a5e02ccc5107c4e8b17c964" + +[[package]] +name = "memzero" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c0d11ac30a033511ae414355d80f70d9f29a44a49140face477117a1ee90db" + +[[package]] +name = "metrics" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884adb57038347dfbaf2d5065887b6cf4312330dc8e94bc30a1a839bd79d3261" +dependencies = [ + "ahash 0.8.11", + "portable-atomic", +] + +[[package]] +name = "metrics-exporter-prometheus" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f0c8427b39666bf970460908b213ec09b3b350f20c0c2eabcbba51704a08e6" +dependencies = [ + "base64 0.22.1", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "indexmap 2.7.1", + "ipnet", + "metrics", + "metrics-util", + "quanta", + "thiserror 1.0.69", + "tokio", + "tracing", +] + +[[package]] +name = "metrics-util" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4259040465c955f9f2f1a4a8a16dc46726169bca0f88e8fb2dbeced487c3e828" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", + "hashbrown 0.14.5", + "metrics", + "num_cpus", + "quanta", + "sketches-ddsketch", +] + +[[package]] +name = "migrations_internals" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd01039851e82f8799046eabbb354056283fb265c8ec0996af940f4e85a380ff" +dependencies = [ + "serde", + "toml 0.8.19", +] + +[[package]] +name = "migrations_macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb161cc72176cb37aa47f1fc520d3ef02263d67d661f44f05d05a079e1237fd" +dependencies = [ + "migrations_internals", + "proc-macro2", + "quote", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +dependencies = [ + "adler2", +] + +[[package]] +name = "minreq" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0c420feb01b9fb5061f8c8f452534361dd783756dcf38ec45191ce55e7a161" +dependencies = [ + "log", + "once_cell", + "rustls", + "rustls-webpki", + "webpki-roots", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.2.0", + "httparse", + "memchr", + "mime", + "spin 0.9.8", + "version_check", +] + +[[package]] +name = "multimap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" + +[[package]] +name = "nam-bls12_381" +version = "0.8.1-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e768b0e2383163f2f4bbce1112d6454b2cb515950b0a9177733f0d71254d2c68" +dependencies = [ + "ff", + "group", + "pairing", + "rand_core", + "subtle", +] + +[[package]] +name = "nam-indexmap" +version = "2.7.1-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b40876708764895b63bb5a1e9f102d3813cb16baeb9f12932b7c8f2df4248e" +dependencies = [ + "borsh", + "equivalent", + "hashbrown 0.15.2", + "serde", +] + +[[package]] +name = "nam-jubjub" +version = "0.10.1-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdced0f5975d8f80cb82a84d464481acb7b586d22f447dda86947d6a572997b9" +dependencies = [ + "bitvec", + "ff", + "group", + "nam-bls12_381", + "rand_core", + "subtle", +] + +[[package]] +name = "nam-num-traits" +version = "0.2.20-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "687832a07242b76ab2760bc95180240954bf77e06bf8d9e825473c373146dc4a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "nam-reddsa" +version = "0.5.2-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1d102b4311bf60c03405350e976d17f5df155d2cb588f6401995a29ae8c1565" +dependencies = [ + "blake2b_simd", + "byteorder", + "frost-rerandomized", + "group", + "hex", + "jubjub", + "pasta_curves", + "rand_core", + "serde", + "thiserror 2.0.11", + "zeroize", +] + +[[package]] +name = "nam-redjubjub" +version = "0.7.1-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e457988762db7daad8d79f8a837a07295f5cc178d9236ba77db7339072ffb61e" +dependencies = [ + "nam-reddsa", + "rand_core", + "serde", + "thiserror 1.0.69", + "zeroize", +] + +[[package]] +name = "nam-sparse-merkle-tree" +version = "0.3.2-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fae108a0f6aabf789e34d6d447c1184608d1c70c087f957b720042226a47ab63" +dependencies = [ + "borsh", + "cfg-if", + "ics23", + "itertools 0.14.0", + "sha2 0.10.8", +] + +[[package]] +name = "nam-tiny-hderive" +version = "0.3.1-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dfd77f274636f722e966c394b381a70233ed4c25150864a4c53d398028a6818" +dependencies = [ + "base58", + "hmac", + "k256", + "memzero", + "sha2 0.10.8", +] + +[[package]] +name = "namada_account" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "namada_core", + "namada_macros", + "namada_storage", + "serde", +] + +[[package]] +name = "namada_controller" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "namada_core", + "smooth-operator 0.7.2", + "thiserror 1.0.69", +] + +[[package]] +name = "namada_core" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "bech32 0.8.1", + "borsh", + "chrono", + "data-encoding", + "ed25519-consensus", + "ethabi", + "ethbridge-structs", + "eyre", + "ibc", + "ics23", + "impl-num-traits", + "k256", + "lazy_static", + "masp_primitives", + "nam-indexmap", + "nam-sparse-merkle-tree", + "namada_macros", + "num-integer", + "num-rational", + "num-traits", + "num256", + "num_enum", + "primitive-types", + "prost-types 0.13.4", + "rand", + "rand_core", + "rayon", + "ripemd", + "serde", + "serde_json", + "sha2 0.9.9", + "smooth-operator 0.7.2", + "tendermint", + "tendermint-proto", + "thiserror 1.0.69", + "tiny-keccak", + "tokio", + "tracing", + "uint", + "usize-set", + "wasmtimer", + "zeroize", +] + +[[package]] +name = "namada_ethereum_bridge" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "ethers", + "eyre", + "itertools 0.12.1", + "konst", + "namada_core", + "namada_events", + "namada_macros", + "namada_parameters", + "namada_proof_of_stake", + "namada_state", + "namada_storage", + "namada_systems", + "namada_trans_token", + "namada_tx", + "namada_vote_ext", + "namada_vp_env", + "serde", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_events" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "namada_core", + "namada_macros", + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_gas" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "namada_core", + "namada_events", + "namada_macros", + "serde", + "thiserror 1.0.69", +] + +[[package]] +name = "namada_governance" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "itertools 0.12.1", + "konst", + "namada_account", + "namada_core", + "namada_events", + "namada_macros", + "namada_state", + "namada_systems", + "namada_tx", + "namada_vp_env", + "serde", + "serde_json", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_ibc" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "data-encoding", + "dur", + "ibc", + "ibc-derive", + "ibc-middleware-module 0.1.0 (git+https://github.com/heliaxdev/ibc-middleware?tag=module/v0.1.0)", + "ibc-middleware-module-macros 0.1.0 (git+https://github.com/heliaxdev/ibc-middleware?tag=module-macros/v0.1.0)", + "ibc-middleware-overflow-receive", + "ibc-middleware-packet-forward", + "ics23", + "konst", + "masp_primitives", + "namada_core", + "namada_events", + "namada_gas", + "namada_macros", + "namada_state", + "namada_systems", + "namada_tx", + "namada_vp", + "primitive-types", + "prost 0.13.4", + "serde", + "serde_json", + "sha2 0.9.9", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_io" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "async-trait", + "kdam", + "namada_core", + "tendermint-rpc", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "namada_macros" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "data-encoding", + "proc-macro2", + "quote", + "sha2 0.9.9", + "syn 1.0.109", +] + +[[package]] +name = "namada_merkle_tree" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "eyre", + "ics23", + "nam-sparse-merkle-tree", + "namada_core", + "namada_macros", + "prost 0.13.4", + "thiserror 1.0.69", +] + +[[package]] +name = "namada_parameters" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "namada_core", + "namada_macros", + "namada_state", + "namada_systems", + "namada_tx", + "namada_vp_env", + "smooth-operator 0.7.2", + "thiserror 1.0.69", +] + +[[package]] +name = "namada_proof_of_stake" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "itertools 0.12.1", + "konst", + "namada_account", + "namada_controller", + "namada_core", + "namada_events", + "namada_macros", + "namada_state", + "namada_systems", + "namada_tx", + "namada_vp_env", + "once_cell", + "serde", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_replay_protection" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "namada_core", +] + +[[package]] +name = "namada_sdk" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "async-trait", + "bech32 0.8.1", + "bimap", + "borsh", + "circular-queue", + "clap", + "data-encoding", + "duration-str", + "either", + "ethbridge-bridge-contract", + "ethers", + "eyre", + "fd-lock", + "futures", + "init-once", + "itertools 0.12.1", + "lazy_static", + "masp_primitives", + "masp_proofs", + "namada_account", + "namada_core", + "namada_ethereum_bridge", + "namada_events", + "namada_gas", + "namada_governance", + "namada_ibc", + "namada_io", + "namada_macros", + "namada_parameters", + "namada_proof_of_stake", + "namada_state", + "namada_storage", + "namada_token", + "namada_tx", + "namada_vm", + "namada_vote_ext", + "namada_vp", + "namada_wallet", + "num-traits", + "num256", + "owo-colors", + "paste", + "patricia_tree", + "prost 0.13.4", + "rand", + "rand_core", + "rayon", + "regex", + "reqwest", + "rustversion", + "serde", + "serde_json", + "sha2 0.9.9", + "smooth-operator 0.7.2", + "tempfile", + "tendermint-rpc", + "thiserror 1.0.69", + "tiny-bip39", + "tokio", + "toml 0.5.11", + "tracing", + "xorf", + "zeroize", +] + +[[package]] +name = "namada_shielded_token" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "async-trait", + "borsh", + "eyre", + "flume", + "futures", + "itertools 0.12.1", + "lazy_static", + "masp_primitives", + "masp_proofs", + "namada_account", + "namada_controller", + "namada_core", + "namada_events", + "namada_gas", + "namada_io", + "namada_macros", + "namada_state", + "namada_systems", + "namada_tx", + "namada_vp_env", + "namada_wallet", + "rand", + "rand_core", + "rayon", + "ripemd", + "serde", + "serde_json", + "sha2 0.9.9", + "smooth-operator 0.7.2", + "tempfile", + "thiserror 1.0.69", + "tracing", + "typed-builder", + "xorf", +] + +[[package]] +name = "namada_state" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "clru", + "itertools 0.12.1", + "namada_core", + "namada_events", + "namada_gas", + "namada_macros", + "namada_merkle_tree", + "namada_replay_protection", + "namada_storage", + "namada_systems", + "namada_tx", + "patricia_tree", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_storage" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "itertools 0.12.1", + "namada_core", + "namada_gas", + "namada_macros", + "namada_merkle_tree", + "namada_replay_protection", + "regex", + "serde", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_systems" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "namada_core", + "namada_events", + "namada_storage", +] + +[[package]] +name = "namada_token" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "namada_core", + "namada_events", + "namada_macros", + "namada_shielded_token", + "namada_storage", + "namada_systems", + "namada_trans_token", + "namada_tx", + "namada_tx_env", + "serde", +] + +[[package]] +name = "namada_trans_token" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "konst", + "namada_core", + "namada_events", + "namada_state", + "namada_systems", + "namada_tx", + "namada_tx_env", + "namada_vp_env", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_tx" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "ark-bls12-381", + "bitflags 2.8.0", + "borsh", + "data-encoding", + "either", + "konst", + "masp_primitives", + "namada_account", + "namada_core", + "namada_events", + "namada_gas", + "namada_macros", + "num-derive 0.4.2", + "num-traits", + "prost 0.13.4", + "prost-types 0.13.4", + "rand_core", + "serde", + "serde_json", + "sha2 0.9.9", + "thiserror 1.0.69", + "tonic-build", +] + +[[package]] +name = "namada_tx_env" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "namada_core", + "namada_events", + "namada_storage", +] + +[[package]] +name = "namada_vm" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "clru", + "namada_account", + "namada_core", + "namada_events", + "namada_gas", + "namada_parameters", + "namada_state", + "namada_token", + "namada_tx", + "namada_vp", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", + "wasmparser", +] + +[[package]] +name = "namada_vote_ext" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "borsh", + "namada_core", + "namada_macros", + "namada_tx", + "serde", +] + +[[package]] +name = "namada_vp" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "namada_core", + "namada_events", + "namada_gas", + "namada_state", + "namada_tx", + "namada_vp_env", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "namada_vp_env" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "derivative", + "masp_primitives", + "namada_core", + "namada_events", + "namada_gas", + "namada_storage", + "namada_tx", + "smooth-operator 0.7.2", +] + +[[package]] +name = "namada_wallet" +version = "0.47.0" +source = "git+https://github.com/anoma/namada?tag=libs-v0.47.0#269272f7b4b9a067b6df390ffedc75162aded1ef" +dependencies = [ + "bimap", + "borsh", + "data-encoding", + "derivation-path", + "fd-lock", + "itertools 0.12.1", + "masp_primitives", + "nam-tiny-hderive", + "namada_core", + "namada_ibc", + "namada_macros", + "orion", + "rand", + "rand_core", + "serde", + "slip10_ed25519", + "smooth-operator 0.7.2", + "thiserror 1.0.69", + "tiny-bip39", + "toml 0.5.11", + "zeroize", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "native-tls" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dab59f8e050d5df8e4dd87d9206fb6f65a483e20ac9fda365ade4fab353196c" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonempty" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" + +[[package]] +name = "nonempty" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "549e471b99ccaf2f89101bec68f4d244457d5a95a9c3d0672e9564124397741d" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num256" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9b5179e82f0867b23e0b9b822493821f9345561f271364f409c8e4a058367d" +dependencies = [ + "lazy_static", + "num", + "num-derive 0.3.3", + "num-traits", + "serde", + "serde_derive", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "openssl" +version = "0.10.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" +dependencies = [ + "bitflags 2.8.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "orion" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6624905ddd92e460ff0685567539ed1ac985b2dee4c92c7edcd64fce905b00c" +dependencies = [ + "ct-codecs", + "getrandom 0.2.15", + "subtle", + "zeroize", +] + +[[package]] +name = "orm" +version = "1.1.6" +dependencies = [ + "anyhow", + "bigdecimal", + "chrono", + "clap", + "deadpool-diesel", + "diesel", + "diesel-derive-enum", + "diesel_migrations", + "serde", + "serde_json", + "shared", + "tendermint-rpc", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "pairing" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fec4625e73cf41ef4bb6846cafa6d44736525f442ba45e407c4a000a13996f" +dependencies = [ + "group", +] + +[[package]] +name = "parameters" +version = "1.1.6" +dependencies = [ + "anyhow", + "chrono", + "clap", + "deadpool-diesel", + "diesel", + "diesel_migrations", + "futures", + "namada_core", + "namada_parameters", + "namada_sdk", + "orm", + "serde_json", + "shared", + "smooth-operator 0.7.0", + "tendermint-rpc", + "tokio", + "tokio-retry", + "tracing", + "vergen", +] + +[[package]] +name = "parity-scale-codec" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306800abfa29c7f16596b5970a588435e3d5b3149683d00c12b699cc19f895ee" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d830939c76d294956402033aee57a6da7b438f2294eb94864c37b0569053a42c" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "pasta_curves" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e57598f73cc7e1b2ac63c79c517b31a0877cd7c402cdcaa311b5208de7a095" +dependencies = [ + "ff", + "group", + "rand", + "static_assertions", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "patricia_tree" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f2f4539bffe53fc4b4da301df49d114b845b077bd5727b7fe2bd9d8df2ae68" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac", + "password-hash 0.4.2", + "sha2 0.10.8", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac", + "password-hash 0.5.0", +] + +[[package]] +name = "peg" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "295283b02df346d1ef66052a757869b2876ac29a6bb0ac3f5f7cd44aebe40e8f" +dependencies = [ + "peg-macros", + "peg-runtime", +] + +[[package]] +name = "peg-macros" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdad6a1d9cf116a059582ce415d5f5566aabcd4008646779dab7fdc2a9a9d426" +dependencies = [ + "peg-runtime", + "proc-macro2", + "quote", +] + +[[package]] +name = "peg-runtime" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3aeb8f54c078314c2065ee649a7241f46b9d8e418e1a9581ba0546657d7aa3a" + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" +dependencies = [ + "memchr", + "thiserror 2.0.11", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.7.1", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.1", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "pos" +version = "1.1.6" +dependencies = [ + "anyhow", + "chrono", + "clap", + "deadpool-diesel", + "diesel", + "diesel_migrations", + "futures", + "namada_core", + "namada_sdk", + "orm", + "shared", + "tendermint-rpc", + "tokio", + "tracing", + "vergen", +] + +[[package]] +name = "postcard" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8" +dependencies = [ + "cobs", + "embedded-io 0.4.0", + "embedded-io 0.6.1", + "heapless", + "serde", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "pq-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b51d65ebe1cb1f40641b15abae017fed35ccdda46e3dab1ff8768f625a3222" +dependencies = [ + "libc", + "vcpkg", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" +dependencies = [ + "proc-macro2", + "syn 2.0.98", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +dependencies = [ + "bitflags 2.8.0", + "lazy_static", + "num-traits", + "rand", + "rand_chacha", + "rand_xorshift", + "regex-syntax 0.8.5", + "unarray", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive 0.12.6", +] + +[[package]] +name = "prost" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" +dependencies = [ + "bytes", + "prost-derive 0.13.4", +] + +[[package]] +name = "prost-build" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" +dependencies = [ + "bytes", + "heck 0.5.0", + "itertools 0.12.1", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost 0.12.6", + "prost-types 0.12.6", + "regex", + "syn 2.0.98", + "tempfile", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "prost-derive" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost 0.12.6", +] + +[[package]] +name = "prost-types" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" +dependencies = [ + "prost 0.13.4", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quanta" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bd1fe6824cea6538803de3ff1bc0cf3949024db3d43c9643024bfb33a807c0e" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi 0.11.0+wasi-snapshot-preview1", + "web-sys", + "winapi", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core", +] + +[[package]] +name = "raw-cpuid" +version = "11.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6928fa44c097620b706542d428957635951bade7143269085389d42c8a4927e" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redis" +version = "0.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f49cdc0bb3f412bf8e7d1bd90fe1d9eb10bc5c399ba90973c14662a27b3f8ba" +dependencies = [ + "async-trait", + "bytes", + "combine", + "futures-util", + "itoa", + "percent-encoding", + "pin-project-lite", + "ryu", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration", + "tokio", + "tokio-native-tls", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "rewards" +version = "1.1.6" +dependencies = [ + "anyhow", + "chrono", + "clap", + "clap-verbosity-flag", + "deadpool-diesel", + "diesel", + "futures", + "namada_sdk", + "orm", + "shared", + "tendermint-rpc", + "tokio", + "tokio-retry", + "tracing", + "tracing-subscriber", + "vergen", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.13.1", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rlimit" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7043b63bd0cd1aaa628e476b80e6d4023a3b50eb32789f2728908107bd0c793a" +dependencies = [ + "libc", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rlp-derive", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rust_decimal" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.25", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.8.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "ryu" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.98", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac", + "pbkdf2 0.11.0", + "salsa20", + "sha2 0.10.8", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.8.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "seeder" +version = "1.1.6" +dependencies = [ + "anyhow", + "clap", + "deadpool-diesel", + "diesel", + "orm", + "rand", + "shared", + "tokio", + "tracing", + "vergen", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-json-wasm" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_html_form" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2de91cf02bbc07cde38891769ccd5d4f073d22a40683aa4bc7a95781aaa2c4" +dependencies = [ + "form_urlencoded", + "indexmap 2.7.1", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_json" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serdect" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha256" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" +dependencies = [ + "async-trait", + "bytes", + "hex", + "sha2 0.10.8", + "tokio", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared" +version = "1.1.6" +dependencies = [ + "anyhow", + "async-stream", + "bigdecimal", + "bimap", + "clap", + "clap-verbosity-flag", + "fake", + "futures", + "futures-core", + "futures-util", + "namada_core", + "namada_governance", + "namada_ibc", + "namada_proof_of_stake", + "namada_sdk", + "namada_tx", + "rand", + "serde", + "serde_json", + "subtle-encoding", + "tendermint", + "tendermint-rpc", + "thiserror 1.0.69", + "tokio", + "tokio-retry", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.11", + "time", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[package]] +name = "sketches-ddsketch" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slip10_ed25519" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be0ff28bf14f9610a342169084e87a4f435ad798ec528dc7579a3678fa9dc9a" +dependencies = [ + "hmac-sha512", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "smooth-operator" +version = "0.7.0" +source = "git+https://github.com/heliaxdev/smooth-operator?tag=v0.7.0#0e182707f5e5bb9c6e0efa2d235dc9efd715d0a1" +dependencies = [ + "smooth-operator-impl 0.7.0", +] + +[[package]] +name = "smooth-operator" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dece39b9b4d19edc6399498b056d1511135b70b5adf7822affdedf5715598" +dependencies = [ + "smooth-operator-impl 0.7.2", +] + +[[package]] +name = "smooth-operator-impl" +version = "0.7.0" +source = "git+https://github.com/heliaxdev/smooth-operator?tag=v0.7.0#0e182707f5e5bb9c6e0efa2d235dc9efd715d0a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "smooth-operator-impl" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "867851a695e22b0d1fc85f2f84dba29fef7e5d571f12fb23253e0b213bf190f7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "solang-parser" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror 1.0.69", + "unicode-xid", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "subtle-encoding" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcb1ed7b8330c5eed5441052651dd7a12c75e2ed88f2ec024ae1fa3a5e59945" +dependencies = [ + "zeroize", +] + +[[package]] +name = "subtle-ng" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" + +[[package]] +name = "svm-rs" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" +dependencies = [ + "dirs", + "fs2", + "hex", + "once_cell", + "reqwest", + "semver 1.0.25", + "serde", + "serde_json", + "sha2 0.10.8", + "thiserror 1.0.69", + "url", + "zip", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +dependencies = [ + "cfg-if", + "fastrand", + "getrandom 0.3.1", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "tendermint" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d9d6ffeb83b1de47c307c6e0d2dff56c6256989299010ad03cd80a8491e97" +dependencies = [ + "bytes", + "digest 0.10.7", + "ed25519", + "ed25519-consensus", + "flex-error", + "futures", + "k256", + "num-traits", + "once_cell", + "prost 0.13.4", + "prost-types 0.13.4", + "ripemd", + "serde", + "serde_bytes", + "serde_json", + "serde_repr", + "sha2 0.10.8", + "signature", + "subtle", + "subtle-encoding", + "tendermint-proto", + "time", + "zeroize", +] + +[[package]] +name = "tendermint-config" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de111ea653b2adaef627ac2452b463c77aa615c256eaaddf279ec5a1cf9775f" +dependencies = [ + "flex-error", + "serde", + "serde_json", + "tendermint", + "toml 0.8.19", + "url", +] + +[[package]] +name = "tendermint-light-client-verifier" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2674adbf0dc51aa0c8eaf8462c7d6692ec79502713e50ed5432a442002be90" +dependencies = [ + "derive_more 0.99.19", + "flex-error", + "serde", + "tendermint", + "time", +] + +[[package]] +name = "tendermint-proto" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ed14abe3b0502a3afe21ca74ca5cdd6c7e8d326d982c26f98a394445eb31d6e" +dependencies = [ + "bytes", + "flex-error", + "prost 0.13.4", + "prost-types 0.13.4", + "serde", + "serde_bytes", + "subtle-encoding", + "time", +] + +[[package]] +name = "tendermint-rpc" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f96a2b8a0d3d0b59e4024b1a6bdc1589efc6af4709d08a480a20cc4ba90f63" +dependencies = [ + "async-trait", + "bytes", + "flex-error", + "futures", + "getrandom 0.2.15", + "peg", + "pin-project", + "rand", + "reqwest", + "semver 1.0.25", + "serde", + "serde_bytes", + "serde_json", + "subtle", + "subtle-encoding", + "tendermint", + "tendermint-config", + "tendermint-proto", + "thiserror 1.0.69", + "time", + "tokio", + "tracing", + "url", + "uuid 1.13.1", + "walkdir", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "terminal_size" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" +dependencies = [ + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "test_helpers" +version = "1.1.6" +dependencies = [ + "anyhow", + "clap", + "deadpool-diesel", + "diesel", + "orm", + "serde", + "shared", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "thiserror-nostd-notrait" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8444e638022c44d2a9337031dee8acb732bcc7fbf52ac654edc236b26408b61" +dependencies = [ + "thiserror-nostd-notrait-impl", +] + +[[package]] +name = "thiserror-nostd-notrait-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585e5ef40a784ce60b49c67d762110688d211d395d39e096be204535cf64590e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-bip39" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a30fd743a02bf35236f6faf99adb03089bb77e91c998dac2c2ad76bb424f668c" +dependencies = [ + "once_cell", + "pbkdf2 0.12.2", + "rand", + "rustc-hash", + "sha2 0.10.8", + "thiserror 1.0.69", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-retry" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" +dependencies = [ + "pin-project", + "rand", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" +dependencies = [ + "indexmap 2.7.1", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.7.1", +] + +[[package]] +name = "tonic-build" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4ef6dd70a610078cb4e338a0f79d06bc759ff1b22d2120c2ff02ae264ba9c2" +dependencies = [ + "prettyplease", + "proc-macro2", + "prost-build", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 1.0.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "async-compression", + "bitflags 2.8.0", + "bytes", + "futures-core", + "http 1.2.0", + "http-body 1.0.1", + "http-body-util", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "transactions" +version = "1.1.6" +dependencies = [ + "anyhow", + "chrono", + "clap", + "clap-verbosity-flag", + "deadpool-diesel", + "diesel", + "diesel_migrations", + "futures", + "namada_core", + "namada_sdk", + "orm", + "serde_json", + "shared", + "tendermint-rpc", + "tokio", + "tracing", + "vergen", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http 0.2.12", + "httparse", + "log", + "rand", + "rustls", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typed-builder" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06fbd5b8de54c5f7c91f6fe4cebb949be2125d7758e630bb58b1d831dbce600" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9534daa9fd3ed0bd911d462a37f172228077e7abf18c18a5f67199d959205f8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typewit" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb77c29baba9e4d3a6182d51fa75e3215c7fd1dab8f4ea9d107c716878e55fc0" +dependencies = [ + "typewit_proc_macros", +] + +[[package]] +name = "typewit_proc_macros" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36a83ea2b3c704935a01b4642946aadd445cea40b10935e3f8bd8052b8193d6" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna 1.0.3", + "percent-encoding", +] + +[[package]] +name = "usize-set" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12fbfdf92a2a7f550e532818381f9e8367cac2115671edb024120836f33985e9" +dependencies = [ + "borsh", + "serde", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + +[[package]] +name = "uuid" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" + +[[package]] +name = "validator" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b92f40481c04ff1f4f61f304d61793c7b56ff76ac1469f1beb199b1445b253bd" +dependencies = [ + "idna 0.4.0", + "lazy_static", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_derive", +] + +[[package]] +name = "validator_derive" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc44ca3088bb3ba384d9aecf40c6a23a676ce23e09bdaca2073d99c207f864af" +dependencies = [ + "if_chain", + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "validator_types", +] + +[[package]] +name = "validator_types" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "111abfe30072511849c5910134e8baf8dc05de4c0e5903d681cbd5c9c4d611e3" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "vergen" +version = "8.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2990d9ea5967266ea0ccf413a4aa5c42a93dbcfda9cb49a97de6931726b12566" +dependencies = [ + "anyhow", + "cfg-if", + "rustversion", + "time", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "visibility" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.98", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasmparser" +version = "0.107.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29e3ac9b780c7dda0cac7a52a5d6d2d6707cc6e3451c9db209b6c758f40d7acb" +dependencies = [ + "indexmap 1.9.3", + "semver 1.0.25", +] + +[[package]] +name = "wasmtimer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webserver" +version = "1.1.6" +dependencies = [ + "anyhow", + "axum", + "axum-extra", + "axum-macros", + "axum-prometheus", + "bigdecimal", + "chrono", + "clap", + "deadpool-diesel", + "deadpool-redis", + "diesel", + "futures", + "lazy_static", + "namada_core", + "namada_parameters", + "namada_sdk", + "orm", + "serde", + "serde_json", + "sha256", + "shared", + "strum", + "strum_macros", + "subtle-encoding", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tower 0.4.13", + "tower-http", + "tracing", + "tracing-subscriber", + "validator", + "vergen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.1", + "send_wrapper 0.6.0", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "xorf" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf24c008fe464f5d8f58b8d16a1ab7e930bd73b2a6933ff8704c414b2bed7f92" +dependencies = [ + "libm", + "rand", + "serde", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure", +] + +[[package]] +name = "zcash_encoding" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3654116ae23ab67dd1f849b01f8821a8a156f884807ff665eac109bf28306c4d" +dependencies = [ + "core2", + "nonempty 0.7.0", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq 0.1.5", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2 0.11.0", + "sha1", + "time", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe 7.2.1", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index 86e3f36f4..c1fd0402e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,14 +40,14 @@ axum-extra = { version = "0.9.3", features = ["query"] } chrono = { version = "0.4.30", features = ["serde"] } async-trait = "0.1.73" anyhow = "1.0.75" -namada_core = { git = "https://github.com/anoma/namada", tag = "v1.0.0" } -namada_sdk = { git = "https://github.com/anoma/namada", tag = "v1.0.0", default-features = false, features = ["std", "async-send", "download-params"] } -namada_tx = { git = "https://github.com/anoma/namada", tag = "v1.0.0" } -namada_governance = { git = "https://github.com/anoma/namada", tag = "v1.0.0" } -namada_ibc = { git = "https://github.com/anoma/namada", tag = "v1.0.0" } -namada_token = { git = "https://github.com/anoma/namada", tag = "v1.0.0" } -namada_parameters = { git = "https://github.com/anoma/namada", tag = "v1.0.0" } -namada_proof_of_stake = { git = "https://github.com/anoma/namada", tag = "v1.0.0" } +namada_core = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0" } +namada_sdk = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0", default-features = false, features = ["std", "async-send", "download-params"] } +namada_tx = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0" } +namada_governance = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0" } +namada_ibc = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0" } +namada_token = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0" } +namada_parameters = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0" } +namada_proof_of_stake = { git = "https://github.com/anoma/namada", tag = "libs-v0.47.0" } tendermint = "0.38.0" tendermint-config = "0.38.0" tendermint-rpc = { version = "0.38.0", features = ["http-client"] } @@ -86,3 +86,5 @@ rand = "0.8.5" bigdecimal = "0.4.5" strum = "0.26.3" strum_macros = "0.26.3" +sha256 = "1.5.0" +rlimit = "0.10.2" diff --git a/Dockerfile b/Dockerfile index d4af324f1..87dbb3904 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -FROM lukemathwalker/cargo-chef:latest-rust-1.81-bookworm AS chef -RUN apt-get update && apt-get install -y protobuf-compiler build-essential clang-tools-14 +FROM lukemathwalker/cargo-chef:latest-rust-1.82-bookworm AS chef +RUN apt-get update && apt-get install -y protobuf-compiler build-essential clang-tools-14 FROM chef AS planner WORKDIR /app @@ -15,7 +15,7 @@ ARG PACKAGE RUN cargo build --release --bin ${PACKAGE} FROM debian:bookworm-slim AS runtime -RUN apt-get update && apt-get install -y libpq5 ca-certificates +RUN apt-get update && apt-get install -y libpq5 ca-certificates curl WORKDIR /app ARG PACKAGE COPY --from=builder /app/target/release/${PACKAGE} ./ diff --git a/README.md b/README.md index daf8980c3..3698684ec 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,139 @@ -# Namada Interface Indexer +# 🟡 Namada Indexer -A set of microservices that crawler data from a namada node, store them in a postgres database and serve them via a REST api. +## Status -> 🔧 This is currently being worked on. Don't expect things to work! 🔧 +- 🔧 - This project is a work in progress. +- 🚧 - Functionality is not guaranteed at this stage. +- ⚠️ - Use at your own risk. + +## About + +This repository, **Namada Indexer**, is distinct from and incomparable to the similarly named [Namada MASP Indexer](https://github.com/anoma/namada-masp-indexer). + +Note that: `Namada Indexer != Namada MASP Indexer && Namada MASP Indexer != Namada Indexer`. + +The **Namada Indexer** is a collection of microservices that crawls data from a Namada Node, stores it in a PostgreSQL database, and makes it accessible via a REST API. + +The primary goal of the indexer is to retrieve and store the data necessary for [Namadillo](https://github.com/anoma/namada-interface) (the Namada Interface) to operate. Consequently, the indexer does not store historical data, except for the `Transactions Service`, which indexes all transactions starting from block 1 and is not used by Namadillo. + +## Namadillo Integration + +When using this project as a backend for [Namadillo](https://github.com/anoma/namada-interface), always ensure you check out the latest tag. The `main` branch may contain an incompatible set of APIs. + +## Contribution + +We welcome contributions to this project! If you'd like to help, feel free to pick an issue labeled as `bug` or `good-first-issue`. If you want to propose a new feature, please open an issue first so we can discuss it. + +- For **new features**, target the `main` branch. +- For **bug fixes**, check out the latest maintenance branch (e.g., `1.0.0-maint`) and target your changes there. ## Architecture -The indexer is composed of a set microservices and a webserver, each one of these lives in his own crate. Each microservice is responsible of indexing some data from the chain and store them in the postgres database. Right now, there are 4 microservices: +The Namada Indexer is composed of a set of microservices, with each component residing in its own crate. Each microservice is responsible for indexing specific data from the blockchain and storing it in the PostgreSQL database. + +### Microservices & Containers +- `namada/chain-indexer`: Processes blocks sequentially and extracts information from transactions (e.g., balances). -- `chain`: goes block by block and fetches information from transactions (e.g balances) -- `pos`: fetches the validator set each new epoch -- `rewards`: fetches PoS rewards each new epoch -- `governance`: fetches new proposal and the corresponding votes -- `parameters`: fetches the chain parameters +- `namada/governance-indexer`: Tracks new proposals and their corresponding votes. -The `webserver` is responsible to serve the data via a REST API, which are described in the `swagger.yml` file in the project root. +- `namada/parameters-indexer`: Retrieves the chain parameters. -![Namada indexer architecture](docs/architecture.png "Architecture") +- `namada/pos-indexer`: Retrieves the validator set at the start of each new epoch. -## How to run +- `namada/rewards-indexer`: Fetches Proof-of-Stake rewards for each new epoch. + +- `namada/transactions-indexer`: Processes transactions starting from block height 0 (or the last successfully processed block height). + +- `namada/webserver-indexer`: The `webserver` serves indexed data via a REST API, enabling external applications and users to access blockchain data in a structured and accessible way. It listens on port `5001`. + +- `docker.dragonflydb.io/dragonflydb/dragonfly`: This container runs a DragonflyDB instance, an advanced in-memory key-value store that acts as a caching layer. It listens on port `6379` and stores frequently accessed or temporary data, improving system performance by reducing the need for repeated database queries. + +- `postgres:16-alpine`: This container runs a PostgreSQL instance, serving as the primary database for storing indexed data fetched by the microservices. It listens on port `5433` and provides a reliable and scalable storage backend for the project. + +

+ Architecture +

+ + +# 🚀 Getting Started + +Follow these instructions to set up the project locally. The steps below will guide you through the process of getting a local copy up and running. + +It is strongly recommended to change the default username and password for your PostgreSQL database for security purposes. Update these credentials in both the `.env` file and the `docker-compose.yml` file to reflect the changes. + +## 🐳 Installation with Docker ### Prerequisites -- Create the `.env` file in the root of the project. You can use the `.env_sample` file as a reference: +Before starting, ensure you have the necessary tools and dependencies installed. Below are the steps to set up the required environment. + +- **Packages**: Install prerequisite packages from the APT repository. ```sh -cp .env_sample .env +apt-get install -y curl apt-transport-https ca-certificates software-properties-common git nano just build-essential ``` -- Set the `TENDERMINT_URL` with the Namada RPC url: - - [Either create a local chain](https://docs.namada.net/operators/networks/local-network) - - Or use a Public RPC +- **Docker**: Follow the official instructions provided by Docker to install it: [Install Docker Engine](https://docs.docker.com/engine/install/). -### With docker +- **Just**: Refer to the official documentation to install `just`: [Just Installation Guide](https://github.com/casey/just). -- Install [just](https://github.com/casey/just) -- Run `just docker-up` +### Usage +Ensure you have the latest repository cloned to maintain compatibility with other Namada interfaces. Use the following commands to clone the repository and navigate into its directory. -### Without docker +```sh +git clone https://github.com/anoma/namada-indexer.git +cd namada-indexer +``` + +Create the `.env` file in the root of the project. You can use the `.env.sample` file as a reference. + +```sh +cp .env.sample .env +``` +- The `TENDERMINT_URL` variable must point to a Namada RPC URL, which can be either public or local. For a public RPC URL, refer to the [Namada Ecosystem Repository](https://github.com/Luminara-Hub/namada-ecosystem/tree/main/user-and-dev-tools/mainnet). If running the Namada Node locally, use the preconfigured `http://host.docker.internal:26657`. +- When running locally, ensure that CometBFT allows RPC calls by setting the the configuration in your `config.toml` file. + +Build the required Docker containers for the project. +```sh +docker compose build +``` + +Launch the Namada Indexer using the `just` command, which orchestrates the Docker containers. +```sh +# Run the Docker containers in the foreground, displaying all logs and keeping the terminal active until stopped. +just docker-up -- Install rust/cargo -- Update the `.env` values to match your setup, for example: - ```env - DATABASE_URL=postgres://postgres:password@0.0.0.0:5433/namada-indexer - TENDERMINT_URL=http://127.0.0.1:27657 - CACHE_URL=redis://redis@0.0.0.0:6379 - PORT=5001 - ``` -- Use the `run.sh` script inside each package. Keep in mind that PoS package have to be run always while other service might not +# Run the Docker containers in detached mode, starting them in the background without showing logs in the terminal. +just docker-up-d +``` + +## Installation without Docker + +If you prefer not to use Docker, you can follow the instructions below to set up and run the services manually. + +- Install **Rust** and **Cargo** on your system. Refer to the [official Rust installation guide](https://www.rust-lang.org/tools/install). + +- Update the `.env` file with values that match your setup. + +- Use the `run.sh` script located inside each package to start the services. + - The **PoS** package must always be running. + - Other services can be run as needed based on your requirements. -## Testing via seeder +## REST API +The API endpoints are described in the `swagger.yml` file located in the project root. A hosted HTML version of the API documentation is available at [Namada Interface Indexer REST API](https://anoma.github.io/namada-indexer). -Instead of fetching data from a running network, for testing porpuses it's also possible to populate the databse with some random data. +## Populating the Database for Testing -- `cargo build` -- `cd seeder && cargo run -- --database-url postgres://postgres:password@0.0.0.0:5433/namada-indexer` +Instead of fetching data from a running network, you can populate the database with random data for testing purposes. Build the project using the following command. -It's possible to only run the webserver and have access to the data via API. +```sh +cargo build +# Run the seeder script to populate the database +cd seeder && cargo run -- --database-url postgres://postgres:password@0.0.0.0:5433/namada-indexer +``` + +After populating the database, you can run the webserver to access the data via the API. To query your PostgreSQL database, ensure the PostgreSQL client is installed. + +```sh +apt-get install -y postgresql-client +``` \ No newline at end of file diff --git a/chain/Cargo.toml b/chain/Cargo.toml index 313cf1c1b..352d3e3e1 100644 --- a/chain/Cargo.toml +++ b/chain/Cargo.toml @@ -32,6 +32,7 @@ deadpool-diesel.workspace = true diesel.workspace = true orm.workspace = true futures.workspace = true +rlimit.workspace = true [build-dependencies] vergen = { version = "8.0.0", features = ["build", "git", "gitcl"] } diff --git a/chain/src/config.rs b/chain/src/config.rs index c6bcb878a..a5d8c072c 100644 --- a/chain/src/config.rs +++ b/chain/src/config.rs @@ -34,6 +34,12 @@ pub struct AppConfig { #[clap(long, env, default_value = "5")] pub initial_query_retry_attempts: usize, + #[clap( + long, + help = "Crawl from given height and do not update crawler_state" + )] + pub backfill_from: Option, + #[clap(flatten)] pub log: LogConfig, } diff --git a/chain/src/main.rs b/chain/src/main.rs index 855085647..10a22f0ff 100644 --- a/chain/src/main.rs +++ b/chain/src/main.rs @@ -19,6 +19,7 @@ use clap::Parser; use deadpool_diesel::postgres::Object; use namada_sdk::time::DateTimeUtc; use orm::migrations::run_migrations; +use repository::pgf as namada_pgf_repository; use shared::block::Block; use shared::block_result::BlockResult; use shared::checksums::Checksums; @@ -29,10 +30,10 @@ use shared::id::Id; use shared::token::Token; use shared::utils::BalanceChange; use shared::validator::ValidatorSet; -use tendermint_rpc::endpoint::block::Response as TendermintBlockResponse; use tendermint_rpc::HttpClient; -use tokio_retry::strategy::{jitter, ExponentialBackoff}; +use tendermint_rpc::endpoint::block::Response as TendermintBlockResponse; use tokio_retry::Retry; +use tokio_retry::strategy::{ExponentialBackoff, jitter}; #[tokio::main] async fn main() -> Result<(), MainError> { @@ -63,18 +64,107 @@ async fn main() -> Result<(), MainError> { .context_db_interact_error() .into_db_error()?; - initial_query( - &client, - &conn, - checksums.clone(), - config.initial_query_retry_time, - config.initial_query_retry_attempts, - ) - .await?; + rlimit::increase_nofile_limit(10240).unwrap(); + rlimit::increase_nofile_limit(u64::MAX).unwrap(); - let crawler_state = db_service::get_chain_crawler_state(&conn) - .await - .into_db_error()?; + // See if we can start from existing crawler_state + let crawler_state = match ( + config.backfill_from, + db_service::try_get_chain_crawler_state(&conn) + .await + .into_db_error()?, + ) { + (Some(height), _) => { + tracing::warn!("Backfilling from block height {}", height); + Some(ChainCrawlerState { + last_processed_block: height, + last_processed_epoch: 0, + first_block_in_epoch: 0, + timestamp: 0, + }) + } + (None, Some(crawler_state)) => { + tracing::info!( + "Found chain crawler state, attempting initial crawl at block \ + {}...", + crawler_state.last_processed_block + ); + + // Try to run crawler_fn with the last processed block + let crawl_result = crawling_fn( + crawler_state.last_processed_block, + client.clone(), + conn.clone(), + checksums.clone(), + true, + ) + .await; + + match crawl_result { + Err(MainError::RpcError) => { + // If there was an RpcError, it likely means the block was + // pruned from the node. We need to do + // an initial_query in that case. + tracing::error!( + "Failed to query block {}, starting from \ + initial_query ...", + crawler_state.last_processed_block, + ); + None + } + Err(_) => { + // If any other type of error occurred, we should not + // increment last_processed_block but + // crawl from there without initial_query + tracing::info!( + "Initial crawl had an error (not RpcError), \ + continuing from block {}...", + crawler_state.last_processed_block + ); + Some(crawler_state) + } + Ok(_) => { + // If the crawl was successful, increment last_processed + // block and continue from there. + let next_block = crawler_state.last_processed_block + 1; + tracing::info!( + "Initial crawl was successful, continuing from block \ + {}...", + next_block + ); + Some(ChainCrawlerState { + last_processed_block: next_block, + ..crawler_state + }) + } + } + } + (None, None) => { + tracing::info!( + "No chain crawler state found, starting from initial_query..." + ); + None + } + }; + + // Handle cases where we need to perform initial query + let crawler_state = match crawler_state { + Some(state) => state, + None => { + initial_query( + &client, + &conn, + checksums.clone(), + config.initial_query_retry_time, + config.initial_query_retry_attempts, + ) + .await?; + + db_service::get_chain_crawler_state(&conn) + .await + .into_db_error()? + } + }; crawl( move |block_height| { @@ -83,6 +173,7 @@ async fn main() -> Result<(), MainError> { client.clone(), conn.clone(), checksums.clone(), + config.backfill_from.is_none(), ) }, crawler_state.last_processed_block, @@ -96,6 +187,7 @@ async fn crawling_fn( client: Arc, conn: Arc, checksums: Checksums, + should_update_crawler_state: bool, ) -> Result<(), MainError> { let should_process = can_process(block_height, client.clone()).await?; @@ -164,9 +256,25 @@ async fn crawling_fn( token: Token::Native(native_token.clone()), }); + let pgf_receipient_addresses = if first_block_in_epoch.eq(&block_height) { + conn.interact(move |conn| { + namada_pgf_repository::get_pgf_receipients_balance_changes( + conn, + &native_token, + ) + }) + .await + .context_db_interact_error() + .and_then(identity) + .into_db_error()? + } else { + HashSet::default() + }; + let all_balance_changed_addresses = addresses .iter() .chain(block_proposer_address.iter()) + .chain(pgf_receipient_addresses.iter()) .chain(validators_addresses.iter()) .chain(native_addresses.iter()) .cloned() @@ -362,10 +470,12 @@ async fn crawling_fn( revealed_pks, )?; - repository::crawler_state::upsert_crawler_state( - transaction_conn, - crawler_state, - )?; + if should_update_crawler_state { + repository::crawler_state::upsert_crawler_state( + transaction_conn, + crawler_state, + )?; + } anyhow::Ok(()) }) diff --git a/chain/src/repository/mod.rs b/chain/src/repository/mod.rs index c5b0567b4..c33a98c69 100644 --- a/chain/src/repository/mod.rs +++ b/chain/src/repository/mod.rs @@ -2,6 +2,7 @@ pub mod balance; pub mod block; pub mod crawler_state; pub mod gov; +pub mod pgf; pub mod pos; pub mod revealed_pk; mod utils; diff --git a/chain/src/repository/pgf.rs b/chain/src/repository/pgf.rs new file mode 100644 index 000000000..ff9844070 --- /dev/null +++ b/chain/src/repository/pgf.rs @@ -0,0 +1,27 @@ +use std::collections::HashSet; + +use anyhow::Context; +use diesel::{PgConnection, QueryDsl, RunQueryDsl, SelectableHelper}; +use orm::pgf::PublicGoodFundingPaymentDb; +use orm::schema::public_good_funding; +use shared::id::Id; +use shared::token::Token; +use shared::utils::BalanceChange; + +pub fn get_pgf_receipients_balance_changes( + transaction_conn: &mut PgConnection, + native_token: &Id, +) -> anyhow::Result> { + public_good_funding::table + .select(PublicGoodFundingPaymentDb::as_select()) + .load(transaction_conn) + .map(|data| { + data.into_iter() + .map(|payment| BalanceChange { + address: Id::Account(payment.receipient), + token: Token::Native(native_token.clone()), + }) + .collect::>() + }) + .context("Failed to update governance votes in db") +} diff --git a/chain/src/services/db.rs b/chain/src/services/db.rs index 4793c1bb4..6e07e25ee 100644 --- a/chain/src/services/db.rs +++ b/chain/src/services/db.rs @@ -1,6 +1,6 @@ use anyhow::Context; use deadpool_diesel::postgres::Object; -use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl}; +use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl}; use orm::crawler_state::{ ChainCrawlerStateDb, CrawlerNameDb, EpochCrawlerStateDb, }; @@ -9,10 +9,10 @@ use shared::block::{BlockHeight, Epoch}; use shared::crawler_state::{ChainCrawlerState, EpochCrawlerState}; use shared::error::ContextDbInteractError; -pub async fn get_chain_crawler_state( +pub async fn try_get_chain_crawler_state( conn: &Object, -) -> anyhow::Result { - let crawler_state: ChainCrawlerStateDb = conn +) -> anyhow::Result> { + let crawler_state: Option = conn .interact(move |conn| { crawler_state::table .filter(crawler_state::name.eq(CrawlerNameDb::Chain)) @@ -23,17 +23,34 @@ pub async fn get_chain_crawler_state( crawler_state::dsl::timestamp, )) .first(conn) + .optional() }) .await .context_db_interact_error()? .context("Failed to read chain crawler state from the db")?; - Ok(ChainCrawlerState { - last_processed_block: crawler_state.last_processed_block as BlockHeight, - last_processed_epoch: crawler_state.last_processed_epoch as Epoch, - first_block_in_epoch: crawler_state.first_block_in_epoch as BlockHeight, - timestamp: crawler_state.timestamp.and_utc().timestamp(), - }) + match crawler_state { + Some(crawler_state) => Ok(Some(ChainCrawlerState { + last_processed_block: crawler_state.last_processed_block + as BlockHeight, + last_processed_epoch: crawler_state.last_processed_epoch as Epoch, + first_block_in_epoch: crawler_state.first_block_in_epoch + as BlockHeight, + timestamp: crawler_state.timestamp.and_utc().timestamp(), + })), + None => Ok(None), + } +} + +pub async fn get_chain_crawler_state( + conn: &Object, +) -> anyhow::Result { + if let Some(crawler_state) = try_get_chain_crawler_state(conn).await? { + Ok(crawler_state) + } else { + Err(anyhow::format_err!("Chain crawler state not found")) + .context_db_interact_error() + } } pub async fn get_pos_crawler_state( diff --git a/chain/src/services/namada.rs b/chain/src/services/namada.rs index d666a5d09..8abc5a3b2 100644 --- a/chain/src/services/namada.rs +++ b/chain/src/services/namada.rs @@ -1,7 +1,7 @@ use std::collections::HashSet; use std::str::FromStr; -use anyhow::{anyhow, Context}; +use anyhow::{Context, anyhow}; use futures::{StreamExt, TryStreamExt}; use namada_core::chain::{ BlockHeight as NamadaSdkBlockHeight, Epoch as NamadaSdkEpoch, @@ -9,8 +9,8 @@ use namada_core::chain::{ use namada_sdk::address::{Address as NamadaSdkAddress, InternalAddress}; use namada_sdk::collections::HashMap; use namada_sdk::hash::Hash; -use namada_sdk::ibc::storage::{ibc_trace_key_prefix, is_ibc_trace_key}; use namada_sdk::ibc::IbcTokenHash; +use namada_sdk::ibc::storage::{ibc_trace_key_prefix, is_ibc_trace_key}; use namada_sdk::queries::RPC; use namada_sdk::rpc::{ bonds_and_unbonds, query_proposal_by_id, query_storage_value, @@ -77,7 +77,7 @@ pub async fn query_balance( ) -> anyhow::Result { Ok(futures::stream::iter(balance_changes) .filter_map(|balance_change| async move { - tracing::info!( + tracing::debug!( "Fetching balance change for {} ...", balance_change.address ); @@ -782,3 +782,18 @@ pub(super) fn to_block_height( ) -> NamadaSdkBlockHeight { NamadaSdkBlockHeight::from(block_height as u64) } + +pub async fn get_pgf_receipients( + client: &HttpClient, + native_token: Id, +) -> HashSet { + let payments = rpc::query_pgf_fundings(client).await.unwrap_or_default(); + + payments + .into_iter() + .map(|payment| BalanceChange { + address: Id::Account(payment.detail.target()), + token: Token::Native(native_token.clone()), + }) + .collect::>() +} diff --git a/docker-compose-db.yml b/docker-compose-db.yml index 8e3710daf..8f00eba5f 100644 --- a/docker-compose-db.yml +++ b/docker-compose-db.yml @@ -3,7 +3,7 @@ services: image: postgres:16-alpine command: ["postgres", "-c", "listen_addresses=0.0.0.0", "-c", "max_connections=200", "-p", "5433"] expose: - - "5433" # Publishes 5432 to other containers but NOT to host machine + - "5433" ports: - "5433:5433" environment: @@ -12,10 +12,11 @@ services: PGUSER: postgres POSTGRES_DB: namada-indexer healthcheck: - test: ["CMD-SHELL", "pg_isready", "-d", "namada-indexer"] + test: ["CMD-SHELL", "pg_isready -U postgres -d namada-indexer -h localhost -p 5433"] interval: 5s timeout: 5s retries: 5 + restart: unless-stopped dragonfly: image: docker.dragonflydb.io/dragonflydb/dragonfly @@ -26,7 +27,7 @@ services: - "6379:6379" healthcheck: test: ["CMD-SHELL", "redis-cli ping | grep PONG"] - interval: 3s - timeout: 3s + interval: 5s + timeout: 5s retries: 5 - + restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml index 9b87d7f8c..935e13e3e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,10 @@ x-defaults: &defaults - restart: on-failure + restart: unless-stopped depends_on: - - postgres + postgres: + condition: service_healthy + dragonfly: + condition: service_healthy build: &build context: . dockerfile: Dockerfile @@ -15,6 +18,8 @@ x-defaults: &defaults command: "./service \ --tendermint-url ${TENDERMINT_URL} \ --database-url ${DATABASE_URL}" + extra_hosts: + - "host.docker.internal:host-gateway" include: - docker-compose-db.yml @@ -80,10 +85,6 @@ services: webserver: image: namada/webserver-indexer - restart: on-failure - depends_on: - - postgres - - dragonfly build: context: . dockerfile: Dockerfile @@ -96,7 +97,8 @@ services: <<: *env-vars healthcheck: test: curl --fail http://localhost:5001/health || exit 1 - interval: 15s - timeout: 10s - retries: 3 - start_period: 10s + interval: 5s + timeout: 5s + retries: 5 + restart: unless-stopped + diff --git a/docs/README.md b/docs/README.md index 6cf189077..a73af11d8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,49 +1,47 @@ -# Namada Indexer +# 🟡 Namada Indexer -## Goal +## Architecture -Main purpose of the Namada Indexer is to retrieve and store information required for the Namada Interface(Namadillo) to operate. -Because of this, the Namada Indexer does not store historical data. -Exception to this rule is the `Transactions Service` which is not used by the Namadillo and it indexes all transactions starting from block 1. - -### Overview: +An overview of the Namada Indexer's system design and how data flows through its components. ![Namada indexer architecture](architecture.png "Architecture") -### Flow: +## Data Flow + +This diagram illustrates the high-level flow of data within the Namada Indexer. ![High Level Flow](high_level_flow.png "High Level Flow") ## Components Namada Indexer consists of the following services: - - Chain Service -- PoS Service -- Parameters Service - Governance Service +- Parameters Service +- PoS Service - Rewards Service - Transactions Service -- Webserver +- Webserver Service -### SRC(Service, Responsibility, Collaborator) cards for each service: +## SRC Cards for Each Service + +An overview of each service with its **Service**, **Responsibility**, and **Collaborator** details. ![Cards](cards.png "Cards") + ## Database -We use PostgreSQL and diesel as ORM. You can find the schema in the [schema.rs](../orm/src/schema.rs) file. +The Namada Indexer utilizes PostgreSQL with Diesel as the ORM. The database schema is defined in the [schema.rs](../orm/src/schema.rs) file. -![DB](db.png "DB") +![Database Schema](db.png "DB") -## Service communication/orchestration +## Service Communication/Orchestration -At this point only by checking the state of the database. In the future we might use a simple message broker like Redis streams. +Currently, service communication is achieved by checking the database state. In the future, a message broker like Redis Streams might be introduced. ## API -For the API documentation, please refer to the [swagger.yml](../swagger.yml) file. -We generate the client using [OpenApi generator](https://github.com/OpenAPITools/openapi-generator). -You can find the published versions [here](https://www.npmjs.com/package/@namada/indexer-client). +API documentation is available in the [swagger.yml](../swagger.yml) file. The client is generated using the [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator), and the published versions can be found on [npm](https://www.npmjs.com/package/@namada/indexer-client). -Graphs/cards thanks to [excalidraw <3](docs_indexer_2024_09_20.excalidraw). +Graphs and cards are created with ❤️ using [Excalidraw](https://excalidraw.com/). diff --git a/docs/architecture.png b/docs/architecture.png index 43f14213f..e035bceeb 100644 Binary files a/docs/architecture.png and b/docs/architecture.png differ diff --git a/docs/architecture_indexer_2024_12_23.excalidraw b/docs/architecture_indexer_2024_12_23.excalidraw new file mode 100644 index 000000000..62598ba41 --- /dev/null +++ b/docs/architecture_indexer_2024_12_23.excalidraw @@ -0,0 +1,1926 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "68huOF7AF1KuXkqpKRVzp", + "type": "diamond", + "x": 489.642857142857, + "y": 167.14285714285722, + "width": 247.00000000000009, + "height": 136.99999999999994, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a1", + "roundness": { + "type": 2 + }, + "seed": 666017116, + "version": 198, + "versionNonce": 2061010383, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "FToIX8KvPBdJAykSMXUc9" + }, + { + "id": "JWIIwxFJM5g21BunPhuLh", + "type": "arrow" + } + ], + "updated": 1734980044421, + "link": null, + "locked": false + }, + { + "id": "FToIX8KvPBdJAykSMXUc9", + "type": "text", + "x": 568.0528913225445, + "y": 222.89285714285722, + "width": 90.679931640625, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "a2", + "roundness": null, + "seed": 2089431524, + "version": 97, + "versionNonce": 753064164, + "isDeleted": false, + "boundElements": [], + "updated": 1734977345443, + "link": null, + "locked": false, + "text": "database", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "68huOF7AF1KuXkqpKRVzp", + "originalText": "database", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "BS_69A_tOS7AnKOQFRC_X", + "type": "ellipse", + "x": 871.19888, + "y": 392, + "width": 110.99999999999997, + "height": 98, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aB", + "roundness": { + "type": 2 + }, + "seed": 545108068, + "version": 1178, + "versionNonce": 71861775, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "zispCXNhPG547uDdDqebS" + }, + { + "id": "f48GnBV_R7ZjB7BNDAuYo", + "type": "arrow" + }, + { + "id": "dbcIdkPJ5FUqP8B3XI0tv", + "type": "arrow" + } + ], + "updated": 1734980023134, + "link": null, + "locked": false + }, + { + "id": "zispCXNhPG547uDdDqebS", + "type": "text", + "x": 894.254479584088, + "y": 415.85176772185923, + "width": 64.39994812011719, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aC", + "roundness": null, + "seed": 1706165220, + "version": 1005, + "versionNonce": 1485499439, + "isDeleted": false, + "boundElements": [], + "updated": 1734980023134, + "link": null, + "locked": false, + "text": "transa\nctions", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "BS_69A_tOS7AnKOQFRC_X", + "originalText": "transactions", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "l2YcxxTkANZFLp4ADZp_Z", + "type": "ellipse", + "x": 740.4803109999999, + "y": 391, + "width": 110.99999999999997, + "height": 98, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aH", + "roundness": { + "type": 2 + }, + "seed": 524075108, + "version": 1239, + "versionNonce": 2027729839, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "efrxPbHCHsIbga71xH7s4" + }, + { + "id": "zlOgx2Gt7218yVV8dpPYm", + "type": "arrow" + }, + { + "id": "ttLta4_vMAgUxeiPYiG-J", + "type": "arrow" + } + ], + "updated": 1734980018767, + "link": null, + "locked": false + }, + { + "id": "efrxPbHCHsIbga71xH7s4", + "type": "text", + "x": 763.8859166876035, + "y": 414.8517677218592, + "width": 63.69993591308594, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aI", + "roundness": null, + "seed": 1510937572, + "version": 1080, + "versionNonce": 831022543, + "isDeleted": false, + "boundElements": [], + "updated": 1734980018767, + "link": null, + "locked": false, + "text": "reward\ns", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "l2YcxxTkANZFLp4ADZp_Z", + "originalText": "rewards", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "7lkSMQXal7i_L5xS9-2C8", + "type": "ellipse", + "x": 475.33380099999994, + "y": 390.769841, + "width": 110.99999999999997, + "height": 98, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aJ", + "roundness": { + "type": 2 + }, + "seed": 590289116, + "version": 1267, + "versionNonce": 1010080993, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "2-1JfC9FlVDsDugb0hfsW" + }, + { + "id": "ZnocgoBP3Ub6faV0YdtfO", + "type": "arrow" + }, + { + "id": "ARODZ_d7sPkRMfjF7b8uT", + "type": "arrow" + } + ], + "updated": 1734980009898, + "link": null, + "locked": false + }, + { + "id": "2-1JfC9FlVDsDugb0hfsW", + "type": "text", + "x": 497.8493996685606, + "y": 414.62160872185916, + "width": 65.47994995117188, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aK", + "roundness": null, + "seed": 2014289244, + "version": 1126, + "versionNonce": 338712769, + "isDeleted": false, + "boundElements": [], + "updated": 1734980009898, + "link": null, + "locked": false, + "text": "parame\nters", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "7lkSMQXal7i_L5xS9-2C8", + "originalText": "parameters", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "i1Sm7mclRA6JqmaDoOcVB", + "type": "ellipse", + "x": 342.760546, + "y": 391, + "width": 110.99999999999997, + "height": 98, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aL", + "roundness": { + "type": 2 + }, + "seed": 1725157340, + "version": 1363, + "versionNonce": 869161775, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "Jx8LZ4DPnMP185wdT4_ZV" + }, + { + "id": "pukTCiRs9jX5IUIIRwffy", + "type": "arrow" + }, + { + "id": "MGPFPKZ2gqtcgydgZawgi", + "type": "arrow" + } + ], + "updated": 1734980039752, + "link": null, + "locked": false + }, + { + "id": "Jx8LZ4DPnMP185wdT4_ZV", + "type": "text", + "x": 366.46613948057234, + "y": 414.8517677218592, + "width": 63.09996032714844, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aM", + "roundness": null, + "seed": 1946514524, + "version": 1206, + "versionNonce": 2014512961, + "isDeleted": false, + "boundElements": [], + "updated": 1734979991003, + "link": null, + "locked": false, + "text": "govern\nance", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "i1Sm7mclRA6JqmaDoOcVB", + "originalText": "governance", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "CLIHX46rsqSJui-5m_Re3", + "type": "ellipse", + "x": 210.187291, + "y": 392, + "width": 110.99999999999997, + "height": 98, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aN", + "roundness": { + "type": 2 + }, + "seed": 1609609316, + "version": 1353, + "versionNonce": 321802703, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "-RPRZYqWP2RXgBIMVn8Rh" + }, + { + "id": "5E-TLufR0EL_pH1uB38-c", + "type": "arrow" + }, + { + "id": "hPiZdlQYCxPWM-HkmFaqf", + "type": "arrow" + } + ], + "updated": 1734980012512, + "link": null, + "locked": false + }, + { + "id": "-RPRZYqWP2RXgBIMVn8Rh", + "type": "text", + "x": 241.27288936338485, + "y": 428.3517677218592, + "width": 48.33995056152344, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aO", + "roundness": null, + "seed": 1053098980, + "version": 1206, + "versionNonce": 1749106671, + "isDeleted": false, + "boundElements": [], + "updated": 1734980012512, + "link": null, + "locked": false, + "text": "chain", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CLIHX46rsqSJui-5m_Re3", + "originalText": "chain", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "y8eDsQuozIhgLypBuwwcI", + "type": "rectangle", + "x": 1174.4907035386238, + "y": 406.9695845864901, + "width": 114.28571428571445, + "height": 72.85714285714289, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aQ", + "roundness": { + "type": 3 + }, + "seed": 632117212, + "version": 576, + "versionNonce": 697109084, + "isDeleted": false, + "boundElements": [ + { + "id": "k9Dzo0Q0rzUH7mSg0rsRe", + "type": "text" + } + ], + "updated": 1734978075494, + "link": null, + "locked": false + }, + { + "id": "k9Dzo0Q0rzUH7mSg0rsRe", + "type": "text", + "x": 1183.7435994388052, + "y": 430.89815601506155, + "width": 95.77992248535156, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aQV", + "roundness": null, + "seed": 266793316, + "version": 575, + "versionNonce": 817061596, + "isDeleted": false, + "boundElements": [], + "updated": 1734978075494, + "link": null, + "locked": false, + "text": "webserver", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "y8eDsQuozIhgLypBuwwcI", + "originalText": "webserver", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "7d0VlLRU_78eoxL8dgTKk", + "type": "rectangle", + "x": 522.1349206349204, + "y": 624.6825396825399, + "width": 91.42857142857143, + "height": 60.000000000000114, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aX", + "roundness": { + "type": 3 + }, + "seed": 710111460, + "version": 274, + "versionNonce": 1328008292, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "-qL2F3Cy0j6mu2aJdrhix" + } + ], + "updated": 1734977581935, + "link": null, + "locked": false + }, + { + "id": "-qL2F3Cy0j6mu2aJdrhix", + "type": "text", + "x": 532.389230152917, + "y": 629.68253968254, + "width": 70.91995239257812, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aY", + "roundness": null, + "seed": 536589412, + "version": 287, + "versionNonce": 1891147748, + "isDeleted": false, + "boundElements": [], + "updated": 1734977581935, + "link": null, + "locked": false, + "text": "namada\nnode", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "7d0VlLRU_78eoxL8dgTKk", + "originalText": "namada node", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "4v6TjujUjEMAD_HboWrG-", + "type": "ellipse", + "x": 478.1428576349207, + "y": 575.3968248253968, + "width": 275.7142857142858, + "height": 239.99999999999994, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ad", + "roundness": { + "type": 2 + }, + "seed": 688338020, + "version": 261, + "versionNonce": 1770692335, + "isDeleted": false, + "boundElements": [ + { + "id": "hPiZdlQYCxPWM-HkmFaqf", + "type": "arrow" + }, + { + "id": "pukTCiRs9jX5IUIIRwffy", + "type": "arrow" + }, + { + "id": "ZnocgoBP3Ub6faV0YdtfO", + "type": "arrow" + }, + { + "id": "ttLta4_vMAgUxeiPYiG-J", + "type": "arrow" + }, + { + "id": "dbcIdkPJ5FUqP8B3XI0tv", + "type": "arrow" + }, + { + "id": "ubQXI2B8UjfrthUHFsFm5", + "type": "arrow" + } + ], + "updated": 1734980062163, + "link": null, + "locked": false + }, + { + "id": "P8o6ftdfIeyvfdOCF8n3H", + "type": "rectangle", + "x": 546.4206349206349, + "y": 715.3968253968251, + "width": 91.42857142857143, + "height": 60.000000000000114, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ae", + "roundness": { + "type": 3 + }, + "seed": 88255580, + "version": 344, + "versionNonce": 1384688868, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "1k6cbDg-0_0rh402QlKbw" + } + ], + "updated": 1734977579803, + "link": null, + "locked": false + }, + { + "id": "1k6cbDg-0_0rh402QlKbw", + "type": "text", + "x": 556.6749444386315, + "y": 720.3968253968252, + "width": 70.91995239257812, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "af", + "roundness": null, + "seed": 157597916, + "version": 358, + "versionNonce": 103379044, + "isDeleted": false, + "boundElements": [], + "updated": 1734977579803, + "link": null, + "locked": false, + "text": "namada\nnode", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "P8o6ftdfIeyvfdOCF8n3H", + "originalText": "namada node", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "gymNv5aLtxULUjGRr3Ttm", + "type": "rectangle", + "x": 637.8492063492063, + "y": 635.3968253968252, + "width": 91.42857142857143, + "height": 60.000000000000114, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ag", + "roundness": { + "type": 3 + }, + "seed": 1158038116, + "version": 308, + "versionNonce": 1652010844, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "-waEcGKyT569zTNVoVhsB" + } + ], + "updated": 1734977340624, + "link": null, + "locked": false + }, + { + "id": "-waEcGKyT569zTNVoVhsB", + "type": "text", + "x": 648.1035158672029, + "y": 640.3968253968253, + "width": 70.91995239257812, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ah", + "roundness": null, + "seed": 1331189220, + "version": 322, + "versionNonce": 520184796, + "isDeleted": false, + "boundElements": [], + "updated": 1734977340624, + "link": null, + "locked": false, + "text": "namada\nnode", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "gymNv5aLtxULUjGRr3Ttm", + "originalText": "namada node", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "5E-TLufR0EL_pH1uB38-c", + "type": "arrow", + "x": 314.8785824432192, + "y": 383.0519243186002, + "width": 168.82776676313006, + "height": 117.36938463606043, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ai", + "roundness": { + "type": 2 + }, + "seed": 849670116, + "version": 119, + "versionNonce": 895043503, + "isDeleted": false, + "boundElements": [], + "updated": 1734980036661, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 168.82776676313006, + -117.36938463606043 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "CLIHX46rsqSJui-5m_Re3", + "focus": -0.3808105918968803, + "gap": 24.458019919368596, + "fixedPoint": null + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "MGPFPKZ2gqtcgydgZawgi", + "type": "arrow", + "x": 414.79410484453274, + "y": 373.73564812918073, + "width": 119.76938721895942, + "height": 85.62453701806959, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aj", + "roundness": { + "type": 2 + }, + "seed": 1680371428, + "version": 160, + "versionNonce": 1874662145, + "isDeleted": false, + "boundElements": [], + "updated": 1734980041639, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 119.76938721895942, + -85.62453701806959 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "i1Sm7mclRA6JqmaDoOcVB", + "focus": -0.8635091609637222, + "gap": 18.95615989540712, + "fixedPoint": null + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "ARODZ_d7sPkRMfjF7b8uT", + "type": "arrow", + "x": 539.1341102450606, + "y": 380.5684191483963, + "width": 37.57223896128869, + "height": 64.17159375157087, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ak", + "roundness": { + "type": 2 + }, + "seed": 979970396, + "version": 169, + "versionNonce": 915202209, + "isDeleted": false, + "boundElements": [], + "updated": 1734980048416, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 37.57223896128869, + -64.17159375157087 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "7lkSMQXal7i_L5xS9-2C8", + "focus": -0.4219484681932926, + "gap": 10.671747352263672, + "fixedPoint": null + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "zlOgx2Gt7218yVV8dpPYm", + "type": "arrow", + "x": 776.6562393648793, + "y": 371.3322238207799, + "width": 85.94989015853002, + "height": 77.36396985252594, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "al", + "roundness": { + "type": 2 + }, + "seed": 1467318108, + "version": 117, + "versionNonce": 1513673711, + "isDeleted": false, + "boundElements": [], + "updated": 1734980018767, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -85.94989015853002, + -77.36396985252594 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "l2YcxxTkANZFLp4ADZp_Z", + "focus": 0.732741947007611, + "gap": 21.912672417458666, + "fixedPoint": null + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "f48GnBV_R7ZjB7BNDAuYo", + "type": "arrow", + "x": 900.8789917993316, + "y": 372.60506451650724, + "width": 163.1303356303565, + "height": 108.43571018779033, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "am", + "roundness": { + "type": 2 + }, + "seed": 355406428, + "version": 155, + "versionNonce": 514223823, + "isDeleted": false, + "boundElements": [], + "updated": 1734980023335, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -163.1303356303565, + -108.43571018779033 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "BS_69A_tOS7AnKOQFRC_X", + "focus": 0.8352783710602282, + "gap": 23.382263704504417, + "fixedPoint": null + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "hPiZdlQYCxPWM-HkmFaqf", + "type": "arrow", + "x": 483.71824932731477, + "y": 613.3175364042062, + "width": 165.74172283918642, + "height": 118.1104075593035, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ao", + "roundness": { + "type": 2 + }, + "seed": 498179428, + "version": 102, + "versionNonce": 1126113519, + "isDeleted": false, + "boundElements": [], + "updated": 1734980012649, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -165.74172283918642, + -118.1104075593035 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4v6TjujUjEMAD_HboWrG-", + "focus": -0.36541015407325217, + "gap": 23.44155948266274, + "fixedPoint": null + }, + "endBinding": { + "elementId": "CLIHX46rsqSJui-5m_Re3", + "focus": 0.2690950396322337, + "gap": 23.391956581743756, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "pukTCiRs9jX5IUIIRwffy", + "type": "arrow", + "x": 523.9820732534574, + "y": 577.186028732905, + "width": 79.01262837984848, + "height": 89.2402912684181, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ap", + "roundness": { + "type": 2 + }, + "seed": 196096484, + "version": 157, + "versionNonce": 2067493697, + "isDeleted": false, + "boundElements": [], + "updated": 1734980039754, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -79.01262837984848, + -89.2402912684181 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4v6TjujUjEMAD_HboWrG-", + "focus": 0.07265170924351613, + "gap": 23.742545354293895, + "fixedPoint": null + }, + "endBinding": { + "elementId": "i1Sm7mclRA6JqmaDoOcVB", + "focus": -0.0604465619727798, + "gap": 15.006168558774448, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "ZnocgoBP3Ub6faV0YdtfO", + "type": "arrow", + "x": 572.1738192832776, + "y": 559.5520122548542, + "width": 33.799321210725, + "height": 63.067485103398894, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aq", + "roundness": { + "type": 2 + }, + "seed": 1016921060, + "version": 196, + "versionNonce": 1226192431, + "isDeleted": false, + "boundElements": [], + "updated": 1734980033560, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -33.799321210725, + -63.067485103398894 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4v6TjujUjEMAD_HboWrG-", + "focus": 0.19048256009598497, + "gap": 21.29603400245, + "fixedPoint": null + }, + "endBinding": { + "elementId": "7lkSMQXal7i_L5xS9-2C8", + "focus": 0.37222063076386264, + "gap": 8.116665965992695, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "ttLta4_vMAgUxeiPYiG-J", + "type": "arrow", + "x": 697.5065602032803, + "y": 576.1147343661119, + "width": 64.74712030696196, + "height": 76.32500651558246, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ar", + "roundness": { + "type": 2 + }, + "seed": 1759772892, + "version": 146, + "versionNonce": 1975486575, + "isDeleted": false, + "boundElements": [], + "updated": 1734980050635, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 64.74712030696196, + -76.32500651558246 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4v6TjujUjEMAD_HboWrG-", + "focus": -0.11484832284530161, + "gap": 19.429301990385824, + "fixedPoint": null + }, + "endBinding": { + "elementId": "l2YcxxTkANZFLp4ADZp_Z", + "focus": -0.2450737270096781, + "gap": 18.21879039428945, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "dbcIdkPJ5FUqP8B3XI0tv", + "type": "arrow", + "x": 743.5009299377889, + "y": 616.0475581526969, + "width": 144.96220882947637, + "height": 118.20668564395686, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "as", + "roundness": { + "type": 2 + }, + "seed": 1762481380, + "version": 166, + "versionNonce": 89066543, + "isDeleted": false, + "boundElements": [], + "updated": 1734980053873, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 144.96220882947637, + -118.20668564395686 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4v6TjujUjEMAD_HboWrG-", + "focus": 0.14972448551653647, + "gap": 17.953700927369027, + "fixedPoint": null + }, + "endBinding": { + "elementId": "BS_69A_tOS7AnKOQFRC_X", + "focus": -0.384730584384291, + "gap": 17.648574642281375, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "YZJZy0dDz-cWfU-CakUt6", + "type": "rectangle", + "x": 1174.4907038243387, + "y": 500.6481561579185, + "width": 114.28571428571445, + "height": 72.85714285714289, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "at", + "roundness": { + "type": 3 + }, + "seed": 913744996, + "version": 613, + "versionNonce": 421208924, + "isDeleted": false, + "boundElements": [ + { + "id": "zylTfKzUG3K4a8ieBFmDZ", + "type": "text" + } + ], + "updated": 1734978075494, + "link": null, + "locked": false + }, + { + "id": "zylTfKzUG3K4a8ieBFmDZ", + "type": "text", + "x": 1183.7435997245202, + "y": 524.5767275864899, + "width": 95.77992248535156, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "au", + "roundness": null, + "seed": 946632676, + "version": 616, + "versionNonce": 420894684, + "isDeleted": false, + "boundElements": [], + "updated": 1734978075494, + "link": null, + "locked": false, + "text": "webserver", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "YZJZy0dDz-cWfU-CakUt6", + "originalText": "webserver", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "XmIbl7VDnKg0dzj8EmncE", + "type": "rectangle", + "x": 1174.4907038243382, + "y": 594.3267278722043, + "width": 114.28571428571445, + "height": 72.85714285714289, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "av", + "roundness": { + "type": 3 + }, + "seed": 32682588, + "version": 611, + "versionNonce": 1287060572, + "isDeleted": false, + "boundElements": [ + { + "id": "dly-jW2w_OfVeneZ3BXOS", + "type": "text" + } + ], + "updated": 1734978075494, + "link": null, + "locked": false + }, + { + "id": "dly-jW2w_OfVeneZ3BXOS", + "type": "text", + "x": 1183.7435997245198, + "y": 618.2552993007757, + "width": 95.77992248535156, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "aw", + "roundness": null, + "seed": 1042548444, + "version": 614, + "versionNonce": 2110722268, + "isDeleted": false, + "boundElements": [], + "updated": 1734978075494, + "link": null, + "locked": false, + "text": "webserver", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "XmIbl7VDnKg0dzj8EmncE", + "originalText": "webserver", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "L8fSbwz2nL-jzqGyKAnbz", + "type": "ellipse", + "x": 1134.4907036814814, + "y": 364.2195844436327, + "width": 194.28571428571422, + "height": 345.7142857142857, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ax", + "roundness": { + "type": 2 + }, + "seed": 595940964, + "version": 383, + "versionNonce": 1810928988, + "isDeleted": false, + "boundElements": [ + { + "id": "A8NiSa0PSJl1VTnT8TSRT", + "type": "arrow" + } + ], + "updated": 1734978075494, + "link": null, + "locked": false + }, + { + "id": "RDA13bKmJnVbkoNdUuBSF", + "type": "rectangle", + "x": 977.0776842949573, + "y": 248.6817362883261, + "width": 121.5370705244122, + "height": 110.92224231464729, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "ay", + "roundness": { + "type": 3 + }, + "seed": 398348772, + "version": 1050, + "versionNonce": 268717412, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "k6B7QbkVu6n0vI4NbbRkJ" + }, + { + "id": "A8NiSa0PSJl1VTnT8TSRT", + "type": "arrow" + }, + { + "id": "JWIIwxFJM5g21BunPhuLh", + "type": "arrow" + } + ], + "updated": 1734978056529, + "link": null, + "locked": false + }, + { + "id": "k6B7QbkVu6n0vI4NbbRkJ", + "type": "text", + "x": 1003.0862555679056, + "y": 279.1428574456497, + "width": 69.51992797851562, + "height": 50, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "az", + "roundness": null, + "seed": 22410076, + "version": 992, + "versionNonce": 2056982620, + "isDeleted": false, + "boundElements": [], + "updated": 1734977946928, + "link": null, + "locked": false, + "text": "caching\nlayer", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "RDA13bKmJnVbkoNdUuBSF", + "originalText": "caching layer", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "A8NiSa0PSJl1VTnT8TSRT", + "type": "arrow", + "x": 1124.378678309127, + "y": 503.98271846715727, + "width": 72.1340710007114, + "height": 122.66295894151801, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0I", + "roundness": { + "type": 2 + }, + "seed": 297503196, + "version": 395, + "versionNonce": 995829021, + "isDeleted": false, + "boundElements": [], + "updated": 1734988600024, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -72.1340710007114, + -122.66295894151801 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "L8fSbwz2nL-jzqGyKAnbz", + "focus": -0.6243969292043248, + "gap": 11.840810463501128, + "fixedPoint": null + }, + "endBinding": { + "elementId": "RDA13bKmJnVbkoNdUuBSF", + "focus": 0.3318236473555469, + "gap": 21.7157809226659, + "fixedPoint": null + }, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "JWIIwxFJM5g21BunPhuLh", + "type": "arrow", + "x": 953.6952013467586, + "y": 297.3905507016871, + "width": 200.26409215102012, + "height": 63.359981670634056, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0J", + "roundness": { + "type": 2 + }, + "seed": 1446662876, + "version": 337, + "versionNonce": 1418361011, + "isDeleted": false, + "boundElements": [], + "updated": 1734988589585, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -200.26409215102012, + -63.359981670634056 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "RDA13bKmJnVbkoNdUuBSF", + "focus": -0.26606396078543637, + "gap": 23.38248294819863, + "fixedPoint": null + }, + "endBinding": { + "elementId": "68huOF7AF1KuXkqpKRVzp", + "focus": -0.6714888358318173, + "gap": 9.552932331872746, + "fixedPoint": null + }, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "xMri3czONYJe6xH3RyNW8", + "type": "ellipse", + "x": 607.9070559835981, + "y": 391.9999999841271, + "width": 110.99999999999997, + "height": 98, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0K", + "roundness": { + "type": 2 + }, + "seed": 1320545473, + "version": 1340, + "versionNonce": 1886514063, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "9_7bwT37JuhXIq9YYWdt6" + }, + { + "id": "ubQXI2B8UjfrthUHFsFm5", + "type": "arrow" + }, + { + "id": "m8QtZvgvuqlBET_tgJa_Y", + "type": "arrow" + } + ], + "updated": 1734980067267, + "link": null, + "locked": false + }, + { + "id": "9_7bwT37JuhXIq9YYWdt6", + "type": "text", + "x": 646.2926345105571, + "y": 428.3517677059863, + "width": 33.739990234375, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0L", + "roundness": null, + "seed": 230468769, + "version": 1187, + "versionNonce": 990024481, + "isDeleted": false, + "boundElements": [], + "updated": 1734980008946, + "link": null, + "locked": false, + "text": "pos", + "fontSize": 20, + "fontFamily": 5, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "xMri3czONYJe6xH3RyNW8", + "originalText": "pos", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "id": "ubQXI2B8UjfrthUHFsFm5", + "type": "arrow", + "x": 639.1382089835978, + "y": 564.7698409841271, + "width": 22, + "height": 64.00000000000006, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0M", + "roundness": { + "type": 2 + }, + "seed": 880304673, + "version": 40, + "versionNonce": 64416015, + "isDeleted": false, + "boundElements": [], + "updated": 1734980062163, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 22, + -64.00000000000006 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "4v6TjujUjEMAD_HboWrG-", + "focus": -0.1512534538943968, + "gap": 12.205766246673818, + "fixedPoint": null + }, + "endBinding": { + "elementId": "xMri3czONYJe6xH3RyNW8", + "focus": -0.31512309150821904, + "gap": 10.804790031199445, + "fixedPoint": null + }, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + }, + { + "id": "m8QtZvgvuqlBET_tgJa_Y", + "type": "arrow", + "x": 659.1382089835978, + "y": 378.76984098412703, + "width": 21, + "height": 59, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "index": "b0N", + "roundness": { + "type": 2 + }, + "seed": 2050264865, + "version": 44, + "versionNonce": 1175313217, + "isDeleted": false, + "boundElements": [], + "updated": 1734980071118, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -21, + -59 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "xMri3czONYJe6xH3RyNW8", + "focus": 0.30735909523803223, + "gap": 13.34982978325499, + "fixedPoint": null + }, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "elbowed": false + } + ], + "appState": { + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/governance/Cargo.toml b/governance/Cargo.toml index 8a369efe1..f73e7cb2c 100644 --- a/governance/Cargo.toml +++ b/governance/Cargo.toml @@ -27,6 +27,7 @@ deadpool-diesel.workspace = true diesel.workspace = true orm.workspace = true tokio-retry.workspace = true +serde_json.workspace = true [build-dependencies] vergen = { version = "8.0.0", features = ["build", "git", "gitcl"] } diff --git a/governance/run.sh b/governance/run.sh index c966e9f4b..f65885b61 100755 --- a/governance/run.sh +++ b/governance/run.sh @@ -1,4 +1,5 @@ . ../.env export TENDERMINT_URL export DATABASE_URL -cargo run -- --sleep-for 15 + +SLEEP_FOR=1 cargo run -- --sleep-for 15 diff --git a/governance/src/main.rs b/governance/src/main.rs index 4b61d07f1..00902ceba 100644 --- a/governance/src/main.rs +++ b/governance/src/main.rs @@ -1,3 +1,4 @@ +use std::collections::BTreeSet; use std::convert::identity; use std::sync::Arc; use std::time::Duration; @@ -9,11 +10,15 @@ use governance::config::AppConfig; use governance::repository; use governance::services::namada as namada_service; use governance::state::AppState; +use namada_governance::storage::proposal::{AddRemove, PGFAction, PGFTarget}; use namada_sdk::time::DateTimeUtc; use orm::migrations::run_migrations; +use shared::balance::Amount as NamadaAmount; use shared::crawler; use shared::crawler_state::{CrawlerName, IntervalCrawlerState}; use shared::error::{AsDbError, AsRpcError, ContextDbInteractError, MainError}; +use shared::id::Id; +use shared::pgf::{PaymentKind, PaymentRecurrence, PgfAction, PgfPayment}; use tendermint_rpc::HttpClient; use tokio::sync::{Mutex, MutexGuard}; use tokio::time::Instant; @@ -76,20 +81,21 @@ async fn crawling_fn( let timestamp = Utc::now().naive_utc(); update_crawler_timestamp(&conn, timestamp).await?; - tracing::warn!( + tracing::trace!( "Not enough time has passed since last crawl, skipping..." ); return Err(MainError::NoAction); } - tracing::info!("Starting to update proposals..."); + tracing::debug!("Querying governance proposals..."); - tracing::info!("Query epoch..."); let epoch = namada_service::query_last_epoch(&client) .await .into_rpc_error()?; + tracing::debug!("Fetched epoch is {} ...", epoch); + let running_governance_proposals = conn .interact(move |conn| { repository::governance::get_all_running_proposals(conn) @@ -99,7 +105,7 @@ async fn crawling_fn( .and_then(identity) .into_db_error()?; - tracing::info!( + tracing::debug!( "Got {} proposals to be tallied...", running_governance_proposals.len() ); @@ -111,14 +117,109 @@ async fn crawling_fn( ) .await .map_err(|_| MainError::RpcError)?; - tracing::info!( + tracing::debug!( "Got {} proposals statuses updates...", proposals_statuses.len() ); + let pgf_payments = conn + .interact(move |conn| { + repository::governance::get_all_pgf_executed_proposals_data( + conn, epoch, + ) + }) + .await + .context_db_interact_error() + .and_then(identity) + .into_db_error()? + .into_iter() + .filter_map(|(id, data)| { + if let Some(data) = data { + if let Ok(fundings) = + serde_json::from_str::>(&data) + { + Some((id, fundings)) + } else { + None + } + } else { + None + } + }) + .flat_map(|(id, data)| { + data.into_iter() + .map(|action| match action { + PGFAction::Retro(target) => match target { + PGFTarget::Internal(inner) => PgfPayment { + proposal_id: id, + recurrence: PaymentRecurrence::Retro, + kind: PaymentKind::Native, + receipient: Id::from(inner.target), + amount: NamadaAmount::from(inner.amount), + action: None, + }, + PGFTarget::Ibc(inner) => PgfPayment { + proposal_id: id, + recurrence: PaymentRecurrence::Retro, + kind: PaymentKind::Ibc, + receipient: Id::Account(inner.target), + amount: NamadaAmount::from(inner.amount), + action: None, + }, + }, + PGFAction::Continuous(add_remove) => match add_remove { + AddRemove::Add(target) => match target { + PGFTarget::Internal(inner) => PgfPayment { + proposal_id: id, + recurrence: PaymentRecurrence::Continuous, + kind: PaymentKind::Native, + receipient: Id::from(inner.target), + amount: NamadaAmount::from(inner.amount), + action: Some(PgfAction::Add), + }, + PGFTarget::Ibc(inner) => PgfPayment { + proposal_id: id, + recurrence: PaymentRecurrence::Continuous, + kind: PaymentKind::Ibc, + receipient: Id::Account(inner.target), + amount: NamadaAmount::from(inner.amount), + action: Some(PgfAction::Add), + }, + }, + AddRemove::Remove(target) => match target { + PGFTarget::Internal(inner) => PgfPayment { + proposal_id: id, + recurrence: PaymentRecurrence::Continuous, + kind: PaymentKind::Native, + receipient: Id::from(inner.target), + amount: NamadaAmount::from(inner.amount), + action: Some(PgfAction::Remove), + }, + PGFTarget::Ibc(inner) => PgfPayment { + proposal_id: id, + recurrence: PaymentRecurrence::Continuous, + kind: PaymentKind::Ibc, + receipient: Id::Account(inner.target), + amount: NamadaAmount::from(inner.amount), + action: Some(PgfAction::Remove), + }, + }, + }, + }) + .collect::>() + }) + .collect::>(); + tracing::debug!("Got {} pgf payments...", pgf_payments.len()); + let timestamp = DateTimeUtc::now().0.timestamp(); let crawler_state = IntervalCrawlerState { timestamp }; + tracing::info!( + proposals_statuses = proposals_statuses.len(), + pgf_payments = pgf_payments.len(), + "Queried governance proposals successfully" + ); + conn.interact(move |conn| { conn.build_transaction().read_write().run( |transaction_conn: &mut diesel::prelude::PgConnection| { @@ -130,6 +231,8 @@ async fn crawling_fn( )?; } + repository::pgf::update_pgf(transaction_conn, pgf_payments)?; + repository::crawler_state::upsert_crawler_state( transaction_conn, (CrawlerName::Governance, crawler_state).into(), @@ -144,6 +247,8 @@ async fn crawling_fn( .and_then(identity) .into_db_error()?; + tracing::info!(sleep_for = sleep_for, "Inserted governance into database"); + // Once we are done processing, we reset the instant *instant = Instant::now(); @@ -151,8 +256,6 @@ async fn crawling_fn( } fn can_process(instant: &MutexGuard, sleep_for: u64) -> bool { - tracing::info!("Attempting to process goverance data"); - let time_elapsed = instant.elapsed().as_secs(); time_elapsed >= sleep_for } diff --git a/governance/src/repository/governance.rs b/governance/src/repository/governance.rs index 9ed813703..dab607e69 100644 --- a/governance/src/repository/governance.rs +++ b/governance/src/repository/governance.rs @@ -5,7 +5,8 @@ use diesel::{ RunQueryDsl, }; use orm::governance_proposal::{ - GovernanceProposalResultDb, GovernanceProposalUpdateStatusDb, + GovernanceProposalKindDb, GovernanceProposalResultDb, + GovernanceProposalUpdateStatusDb, }; use orm::schema::governance_proposals; use shared::utils::GovernanceProposalShort; @@ -41,6 +42,37 @@ pub fn get_all_running_proposals( .collect::, _>>() } +pub fn get_all_pgf_executed_proposals_data( + conn: &mut PgConnection, + current_epoch: u32, +) -> anyhow::Result)>> { + governance_proposals::table + .filter( + governance_proposals::dsl::result + .eq(GovernanceProposalResultDb::Passed) + .and( + governance_proposals::dsl::activation_epoch + .eq(current_epoch as i32), + ) + .and( + governance_proposals::dsl::kind + .eq(GovernanceProposalKindDb::PgfFunding), + ), + ) + .select(( + governance_proposals::dsl::id, + governance_proposals::dsl::data, + )) + .load_iter::<(i32, Option), DefaultLoadingMode>(conn) + .context("Failed to get governance proposal ids from db")? + .map(|result| { + let (id, data) = + result.context("Failed to deserialize proposal from db")?; + anyhow::Ok((id as u64, data)) + }) + .collect::)>, _>>() +} + pub fn update_proposal_status( transaction_conn: &mut PgConnection, proposal_id: u64, diff --git a/governance/src/repository/mod.rs b/governance/src/repository/mod.rs index 48712ecaf..83438f839 100644 --- a/governance/src/repository/mod.rs +++ b/governance/src/repository/mod.rs @@ -1,2 +1,3 @@ pub mod crawler_state; pub mod governance; +pub mod pgf; diff --git a/governance/src/repository/pgf.rs b/governance/src/repository/pgf.rs new file mode 100644 index 000000000..4d4216062 --- /dev/null +++ b/governance/src/repository/pgf.rs @@ -0,0 +1,54 @@ +use anyhow::Context; +use diesel::query_dsl::methods::FilterDsl; +use diesel::{ + BoolExpressionMethods, ExpressionMethods, PgConnection, RunQueryDsl, +}; +use orm::pgf::{PaymentRecurrenceDb, PublicGoodFundingPaymentInsertDb}; +use orm::schema::public_good_funding; +use shared::pgf::{PaymentRecurrence, PgfPayment}; + +pub fn update_pgf( + transaction_conn: &mut PgConnection, + pgf_payments: Vec, +) -> anyhow::Result<()> { + diesel::insert_into(public_good_funding::table) + .values::>( + pgf_payments + .clone() + .into_iter() + .filter(|payment| { + matches!(payment.recurrence, PaymentRecurrence::Retro) + || (matches!( + payment.recurrence, + PaymentRecurrence::Continuous + ) && matches!( + payment.action, + Some(shared::pgf::PgfAction::Add) + )) + }) + .map(PublicGoodFundingPaymentInsertDb::from_pgf_payment) + .collect::>(), + ) + .on_conflict_do_nothing() + .execute(transaction_conn) + .context("Failed to update balance_changes in db")?; + + for payment in pgf_payments.into_iter().filter(|payment| { + matches!(payment.recurrence, PaymentRecurrence::Continuous) + && matches!(payment.action, Some(shared::pgf::PgfAction::Remove)) + }) { + diesel::delete( + public_good_funding::table.filter( + public_good_funding::dsl::receipient + .eq(payment.receipient.to_string()) + .and( + public_good_funding::dsl::payment_recurrence + .eq(PaymentRecurrenceDb::Continuous), + ), + ), + ) + .execute(transaction_conn)?; + } + + anyhow::Ok(()) +} diff --git a/governance/src/services/namada.rs b/governance/src/services/namada.rs index 3a9d48401..ca09b292d 100644 --- a/governance/src/services/namada.rs +++ b/governance/src/services/namada.rs @@ -1,11 +1,22 @@ use anyhow::Context; use futures::StreamExt; +use namada_sdk::queries::RPC; use namada_sdk::rpc; -use shared::block::Epoch; +use shared::block::{BlockHeight, Epoch}; +use shared::id::Id; use shared::proposal::{GovernanceProposalResult, GovernanceProposalStatus}; use shared::utils::GovernanceProposalShort; use tendermint_rpc::HttpClient; +pub async fn query_latest_block_height( + client: &HttpClient, +) -> anyhow::Result { + let block = rpc::query_block(client) + .await + .with_context(|| "Failed to query Namada's epoch epoch".to_string())?; + Ok(block.map(|block| block.height.0 as u32).unwrap_or(0_u32)) +} + pub async fn query_last_epoch(client: &HttpClient) -> anyhow::Result { let epoch = rpc::query_epoch(client) .await @@ -13,6 +24,15 @@ pub async fn query_last_epoch(client: &HttpClient) -> anyhow::Result { Ok(epoch.0 as Epoch) } +pub async fn get_native_token(client: &HttpClient) -> anyhow::Result { + let native_token = RPC + .shell() + .native_token(client) + .await + .context("Failed to query native token")?; + Ok(Id::from(native_token)) +} + pub async fn get_governance_proposals_updates( client: &HttpClient, proposal_data: Vec, diff --git a/justfile b/justfile index 848dd62c8..93d33be86 100644 --- a/justfile +++ b/justfile @@ -1,23 +1,34 @@ +RUST_STABLE := trim(read("rust-stable-version")) +RUST_NIGTHLY := trim(read("rust-nightly-version")) + +devs: + rustup toolchain install {{ RUST_STABLE }} --no-self-update --component clippy,rustfmt + rustup toolchain install {{ RUST_NIGTHLY }} --no-self-update --component clippy,rustfmt + +toolchains: + @echo {{ RUST_STABLE }} + @echo {{ RUST_NIGTHLY }} + build: - cargo build --all + cargo +{{ RUST_STABLE }} build --all check: - cargo check --all + cargo +{{ RUST_STABLE }} check --all fmt: - cargo +nightly-2024-06-14 fmt --all + cargo +{{ RUST_NIGTHLY }} fmt --all fmt-check: - cargo +nightly-2024-06-14 fmt --all --check + cargo +{{ RUST_NIGTHLY }} fmt --all --check test: - cargo test + cargo +{{ RUST_STABLE }} test clippy: - cargo clippy + cargo +{{ RUST_STABLE }} clippy clippy-fix: - cargo clippy --all --fix --allow-dirty --allow-staged + cargo +{{ RUST_STABLE }} clippy --all --fix --allow-dirty --allow-staged docker-up: docker compose up @@ -26,7 +37,7 @@ docker-up-d: docker compose up -d clean: - cargo clean + cargo +{{ RUST_STABLE }} clean run-chain: (cd chain && ./run.sh) diff --git a/orm/migrations/2024-04-18-102935_init_balances/up.sql b/orm/migrations/2024-04-18-102935_init_balances/up.sql index ad2b14c1c..e7a85f861 100644 --- a/orm/migrations/2024-04-18-102935_init_balances/up.sql +++ b/orm/migrations/2024-04-18-102935_init_balances/up.sql @@ -9,9 +9,7 @@ CREATE TABLE balance_changes ( CONSTRAINT fk_balances_token FOREIGN KEY(token) REFERENCES token(address) ON DELETE CASCADE ); -ALTER TABLE balance_changes ADD UNIQUE (owner, token, height); - -CREATE INDEX index_balance_changes_owner_token_height ON balance_changes (owner, token, height); +CREATE UNIQUE INDEX index_balance_changes_owner_token_height ON balance_changes (owner, token, height); CREATE VIEW balances AS SELECT diff --git a/orm/migrations/2024-11-29-091248_public_good_funding/down.sql b/orm/migrations/2024-11-29-091248_public_good_funding/down.sql new file mode 100644 index 000000000..03471130a --- /dev/null +++ b/orm/migrations/2024-11-29-091248_public_good_funding/down.sql @@ -0,0 +1,5 @@ +-- This file should undo anything in `up.sql` +DROP TABLE IF EXISTS public_good_funding; + +DROP TYPE PAYMENT_KIND; +DROP TYPE PAYMENT_RECURRENCE; \ No newline at end of file diff --git a/orm/migrations/2024-11-29-091248_public_good_funding/up.sql b/orm/migrations/2024-11-29-091248_public_good_funding/up.sql new file mode 100644 index 000000000..887a72569 --- /dev/null +++ b/orm/migrations/2024-11-29-091248_public_good_funding/up.sql @@ -0,0 +1,22 @@ +CREATE TYPE PAYMENT_RECURRENCE AS ENUM ( + 'continuous', + 'retro' +); + +CREATE TYPE PAYMENT_KIND AS ENUM ( + 'ibc', + 'native' +); + +CREATE TABLE public_good_funding ( + id SERIAL PRIMARY KEY, + proposal_id INT NOT NULL, + payment_recurrence PAYMENT_RECURRENCE NOT NULL, + payment_kind PAYMENT_KIND NOT NULL, + receipient VARCHAR NOT NULL, + amount NUMERIC(78, 0) NOT NULL, + CONSTRAINT fk_proposal_id FOREIGN KEY(proposal_id) REFERENCES governance_proposals(id) ON DELETE CASCADE +); + +CREATE INDEX index_public_good_funding_receipient ON public_good_funding (receipient); +CREATE UNIQUE INDEX index_public_good_funding_receipient_proposal_id ON public_good_funding (receipient, proposal_id); \ No newline at end of file diff --git a/orm/migrations/2025-01-27-130323_gas_estimation_ibc/down.sql b/orm/migrations/2025-01-27-130323_gas_estimation_ibc/down.sql new file mode 100644 index 000000000..f368ee9dd --- /dev/null +++ b/orm/migrations/2025-01-27-130323_gas_estimation_ibc/down.sql @@ -0,0 +1,3 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE gas_estimations DROP COLUMN ibc_unshielding_transfer; +ALTER TABLE gas_estimations DROP COLUMN ibc_shielding_transfer; \ No newline at end of file diff --git a/orm/migrations/2025-01-27-130323_gas_estimation_ibc/up.sql b/orm/migrations/2025-01-27-130323_gas_estimation_ibc/up.sql new file mode 100644 index 000000000..a3bc64595 --- /dev/null +++ b/orm/migrations/2025-01-27-130323_gas_estimation_ibc/up.sql @@ -0,0 +1,3 @@ +-- Your SQL goes here +ALTER TABLE gas_estimations ADD COLUMN ibc_unshielding_transfer INT NOT NULL; +ALTER TABLE gas_estimations ADD COLUMN ibc_shielding_transfer INT NOT NULL; \ No newline at end of file diff --git a/orm/src/balances.rs b/orm/src/balances.rs index 046f69dd8..d0730f624 100644 --- a/orm/src/balances.rs +++ b/orm/src/balances.rs @@ -3,6 +3,9 @@ use std::str::FromStr; use bigdecimal::BigDecimal; use diesel::{Insertable, Queryable, Selectable}; use shared::balance::Balance; +use shared::block::BlockHeight; +use shared::id::Id; +use shared::pgf::PgfPayment; use shared::token::Token; use crate::schema::balance_changes; @@ -44,4 +47,18 @@ impl BalanceChangesInsertDb { height: balance.height as i32, } } + + pub fn from_pgf_retro( + payment: PgfPayment, + token: Id, + block_height: BlockHeight, + ) -> Self { + Self { + owner: payment.receipient.to_string(), + height: block_height as i32, + token: token.to_string(), + raw_amount: BigDecimal::from_str(&payment.amount.to_string()) + .expect("Invalid amount"), + } + } } diff --git a/orm/src/gas.rs b/orm/src/gas.rs index a32257a35..374387905 100644 --- a/orm/src/gas.rs +++ b/orm/src/gas.rs @@ -42,6 +42,8 @@ pub struct GasEstimationDb { pub shielded_transfer: i32, pub shielding_transfer: i32, pub unshielding_transfer: i32, + pub ibc_unshielding_transfer: i32, + pub ibc_shielding_transfer: i32, pub ibc_msg_transfer: i32, pub bond: i32, pub redelegation: i32, @@ -65,6 +67,8 @@ impl From for GasEstimationInsertDb { shielding_transfer: value.shielding_transfer as i32, unshielding_transfer: value.unshielding_transfer as i32, ibc_msg_transfer: value.ibc_msg_transfer as i32, + ibc_unshielding_transfer: value.ibc_unshielding_transfer as i32, + ibc_shielding_transfer: value.ibc_shielding_transfer as i32, bond: value.bond as i32, redelegation: value.redelegation as i32, unbond: value.unbond as i32, diff --git a/orm/src/lib.rs b/orm/src/lib.rs index 4cce8ef60..2427200c7 100644 --- a/orm/src/lib.rs +++ b/orm/src/lib.rs @@ -10,6 +10,7 @@ pub mod helpers; pub mod ibc; pub mod migrations; pub mod parameters; +pub mod pgf; pub mod pos_rewards; pub mod revealed_pk; pub mod schema; diff --git a/orm/src/migrations.rs b/orm/src/migrations.rs index c51a4d1b1..08028694f 100644 --- a/orm/src/migrations.rs +++ b/orm/src/migrations.rs @@ -1,7 +1,7 @@ -use deadpool_diesel::postgres::Object; use deadpool_diesel::InteractError; +use deadpool_diesel::postgres::Object; use diesel_migrations::{ - embed_migrations, EmbeddedMigrations, MigrationHarness, + EmbeddedMigrations, MigrationHarness, embed_migrations, }; pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations"); diff --git a/orm/src/pgf.rs b/orm/src/pgf.rs new file mode 100644 index 000000000..9f3cf19de --- /dev/null +++ b/orm/src/pgf.rs @@ -0,0 +1,68 @@ +use std::str::FromStr; + +use bigdecimal::BigDecimal; +use diesel::{Insertable, Queryable}; +use serde::{Deserialize, Serialize}; +use shared::pgf::{PaymentKind, PaymentRecurrence, PgfPayment}; + +use crate::schema::public_good_funding; + +#[derive(Debug, Clone, Serialize, Deserialize, diesel_derive_enum::DbEnum)] +#[ExistingTypePath = "crate::schema::sql_types::PaymentRecurrence"] +pub enum PaymentRecurrenceDb { + Continuous, + Retro, +} + +#[derive(Debug, Clone, Serialize, Deserialize, diesel_derive_enum::DbEnum)] +#[ExistingTypePath = "crate::schema::sql_types::PaymentKind"] +pub enum PaymentKindDb { + Ibc, + Native, +} + +impl From for PaymentRecurrenceDb { + fn from(value: PaymentRecurrence) -> Self { + match value { + PaymentRecurrence::Continuous => Self::Continuous, + PaymentRecurrence::Retro => Self::Retro, + } + } +} + +impl From for PaymentKindDb { + fn from(value: PaymentKind) -> Self { + match value { + PaymentKind::Native => Self::Native, + PaymentKind::Ibc => Self::Ibc, + } + } +} + +#[derive(Insertable, Clone, Queryable, diesel::Selectable, Debug)] +#[diesel(table_name = public_good_funding)] +#[diesel(check_for_backend(diesel::pg::Pg))] +pub struct PublicGoodFundingPaymentDb { + pub payment_recurrence: PaymentRecurrenceDb, + pub proposal_id: i32, + pub payment_kind: PaymentKindDb, + pub receipient: String, + pub amount: BigDecimal, +} + +pub type PublicGoodFundingPaymentInsertDb = PublicGoodFundingPaymentDb; + +impl PublicGoodFundingPaymentInsertDb { + pub fn from_pgf_payment(pgf_payment: PgfPayment) -> Self { + Self { + proposal_id: pgf_payment.proposal_id as i32, + payment_recurrence: PaymentRecurrenceDb::from( + pgf_payment.recurrence, + ), + payment_kind: PaymentKindDb::from(pgf_payment.kind), + receipient: pgf_payment.receipient.to_string(), + amount: BigDecimal::from_str(&pgf_payment.amount.to_string()) + .expect("Invalid amount"), + } + } +} diff --git a/orm/src/schema.rs b/orm/src/schema.rs index 672b7e4bb..091acef1b 100644 --- a/orm/src/schema.rs +++ b/orm/src/schema.rs @@ -49,6 +49,22 @@ pub mod sql_types { #[diesel(postgres_type(name = "ibc_status"))] pub struct IbcStatus; + #[derive( + diesel::query_builder::QueryId, + std::fmt::Debug, + diesel::sql_types::SqlType, + )] + #[diesel(postgres_type(name = "payment_kind"))] + pub struct PaymentKind; + + #[derive( + diesel::query_builder::QueryId, + std::fmt::Debug, + diesel::sql_types::SqlType, + )] + #[diesel(postgres_type(name = "payment_recurrence"))] + pub struct PaymentRecurrence; + #[derive( diesel::query_builder::QueryId, std::fmt::Debug, @@ -186,6 +202,8 @@ diesel::table! { reveal_pk -> Int4, tx_size -> Int4, signatures -> Int4, + ibc_unshielding_transfer -> Int4, + ibc_shielding_transfer -> Int4, } } @@ -277,6 +295,21 @@ diesel::table! { } } +diesel::table! { + use diesel::sql_types::*; + use super::sql_types::PaymentRecurrence; + use super::sql_types::PaymentKind; + + public_good_funding (id) { + id -> Int4, + proposal_id -> Int4, + payment_recurrence -> PaymentRecurrence, + payment_kind -> PaymentKind, + receipient -> Varchar, + amount -> Numeric, + } +} + diesel::table! { revealed_pk (id) { id -> Int4, @@ -365,6 +398,7 @@ diesel::joinable!(governance_votes -> governance_proposals (proposal_id)); diesel::joinable!(ibc_token -> token (address)); diesel::joinable!(inner_transactions -> wrapper_transactions (wrapper_id)); diesel::joinable!(pos_rewards -> validators (validator_id)); +diesel::joinable!(public_good_funding -> governance_proposals (proposal_id)); diesel::joinable!(transaction_history -> inner_transactions (inner_tx_id)); diesel::joinable!(unbonds -> validators (validator_id)); diesel::joinable!(wrapper_transactions -> blocks (block_height)); @@ -384,6 +418,7 @@ diesel::allow_tables_to_appear_in_same_query!( ibc_token, inner_transactions, pos_rewards, + public_good_funding, revealed_pk, token, transaction_history, diff --git a/orm/src/transactions.rs b/orm/src/transactions.rs index 2892e18c1..d207be660 100644 --- a/orm/src/transactions.rs +++ b/orm/src/transactions.rs @@ -78,7 +78,7 @@ impl From for TransactionKindDb { TransactionKind::RevealPk(_) => Self::RevealPk, TransactionKind::BecomeValidator(_) => Self::BecomeValidator, TransactionKind::UnjailValidator(_) => Self::UnjailValidator, - TransactionKind::Unknown => Self::Unknown, + TransactionKind::Unknown(_) => TransactionKindDb::Unknown, } } } diff --git a/parameters/src/main.rs b/parameters/src/main.rs index ca197d7e0..324a1dbbc 100644 --- a/parameters/src/main.rs +++ b/parameters/src/main.rs @@ -78,13 +78,15 @@ async fn crawling_fn( let timestamp = Utc::now().naive_utc(); update_crawler_timestamp(&conn, timestamp).await?; - tracing::warn!( - "Not enough time has passed since last crawl, skipping..." + tracing::trace!( + "Not enough time has passed since last crawl, waiting..." ); return Err(MainError::NoAction); } + tracing::debug!("Querying parameters..."); + let parameters = namada_service::get_parameters(&client) .await .into_rpc_error()?; @@ -100,6 +102,8 @@ async fn crawling_fn( let timestamp = DateTimeUtc::now().0.timestamp(); let crawler_state = IntervalCrawlerState { timestamp }; + tracing::info!("Queried parameters successfully",); + conn.interact(move |conn| { conn.build_transaction() .read_write() @@ -136,6 +140,8 @@ async fn crawling_fn( .and_then(identity) .into_db_error()?; + tracing::info!(sleep_for = sleep_for, "Inserted parameters into database"); + // Once we are done processing, we reset the instant *instant = Instant::now(); @@ -143,8 +149,6 @@ async fn crawling_fn( } fn can_process(instant: &MutexGuard, sleep_for: u64) -> bool { - tracing::info!("Attempting to process parameters data"); - let time_elapsed = instant.elapsed().as_secs(); time_elapsed >= sleep_for } diff --git a/parameters/src/repository/parameters.rs b/parameters/src/repository/parameters.rs index 1c769ef9f..301409e7b 100644 --- a/parameters/src/repository/parameters.rs +++ b/parameters/src/repository/parameters.rs @@ -19,6 +19,8 @@ pub fn upsert_chain_parameters( .eq(excluded(chain_parameters::max_block_time)), chain_parameters::cubic_slashing_window_length .eq(excluded(chain_parameters::cubic_slashing_window_length)), + chain_parameters::checksums + .eq(excluded(chain_parameters::checksums)), )) .execute(transaction_conn) .context("Failed to update chain_parameters state in db")?; diff --git a/pos/run.sh b/pos/run.sh index df0434ec7..4bf5e11d9 100755 --- a/pos/run.sh +++ b/pos/run.sh @@ -1,4 +1,8 @@ . ../.env export TENDERMINT_URL export DATABASE_URL + +echo $TENDERMINT_URL +echo $DATABASE_URL + cargo run diff --git a/pos/src/main.rs b/pos/src/main.rs index 76f7842c1..98e774d28 100644 --- a/pos/src/main.rs +++ b/pos/src/main.rs @@ -59,9 +59,9 @@ async fn crawling_fn( let timestamp = Utc::now().naive_utc(); update_crawler_timestamp(&conn, timestamp).await?; - tracing::warn!( - "Epoch {} was not processed, retry...", - epoch_to_process + tracing::trace!( + epoch = epoch_to_process, + "Epoch does not exist yet, waiting...", ); return Err(MainError::NoAction); @@ -73,9 +73,9 @@ async fn crawling_fn( .into_rpc_error()?; tracing::info!( - "Processing epoch {} with {} validators...", - epoch_to_process, - validators_set.validators.len() + epoch = epoch_to_process, + validators = validators_set.validators.len(), + "Queried validators successfully...", ); let timestamp = DateTimeUtc::now().0.timestamp(); @@ -112,14 +112,17 @@ async fn crawling_fn( .await .context_db_interact_error() .and_then(identity) - .into_db_error() + .into_db_error()?; + + tracing::info!(epoch = epoch_to_process, "Updated validators in database"); + + Ok(()) } async fn can_process( epoch: u32, client: Arc, ) -> Result { - tracing::info!("Attempting to process epoch: {}...", epoch); let current_epoch = namada_service::get_current_epoch(&client.clone()) .await .map_err(|e| { diff --git a/rewards/src/main.rs b/rewards/src/main.rs index 74a108c0c..cb161d85d 100644 --- a/rewards/src/main.rs +++ b/rewards/src/main.rs @@ -38,7 +38,7 @@ async fn main() -> Result<(), MainError> { .context_db_interact_error() .into_db_error()?; - tracing::info!("Query epoch..."); + tracing::debug!("Querying epoch..."); let mut epoch; loop { @@ -73,31 +73,45 @@ async fn crawling_fn( let timestamp = Utc::now().naive_utc(); update_crawler_timestamp(&conn, timestamp).await?; - tracing::warn!( - "Epoch {} was not processed, retry...", - epoch_to_process + tracing::trace!( + epoch = epoch_to_process, + "Epoch does not exist yet, waiting...", ); return Err(MainError::NoAction); } - tracing::info!("Starting to update pos rewards..."); - // TODO: change this by querying all the pairs in the database let delegations_pairs = namada_service::query_delegation_pairs(&client) .await .into_rpc_error()?; - let rewards = namada_service::query_rewards(&client, delegations_pairs) + + tracing::info!( + epoch = epoch_to_process, + delegations = delegations_pairs.len(), + "Querying rewards..." + ); + + let rewards = namada_service::query_rewards(&client, &delegations_pairs) .await .into_rpc_error()?; let non_zero_rewards = rewards - .into_iter() + .iter() .filter(|reward| !reward.amount.is_zero()) - .collect(); + .cloned() + .collect::>(); let timestamp = DateTimeUtc::now().0.timestamp(); let crawler_state = IntervalCrawlerState { timestamp }; + tracing::info!( + epoch = epoch_to_process, + delegations = delegations_pairs.len(), + rewards = rewards.len(), + non_zero_rewards = non_zero_rewards.len(), + "Queried rewards successfully", + ); + conn.interact(move |conn| { conn.build_transaction().read_write().run( |transaction_conn: &mut diesel::prelude::PgConnection| { @@ -120,6 +134,11 @@ async fn crawling_fn( .and_then(identity) .into_db_error()?; + tracing::info!( + epoch = epoch_to_process, + "Inserted rewards into database; waiting for next epoch" + ); + Ok(()) } @@ -127,7 +146,6 @@ async fn can_process( epoch: u32, client: Arc, ) -> Result { - tracing::info!("Attempting to process epoch: {}...", epoch); let current_epoch = namada_service::get_current_epoch(&client.clone()) .await .map_err(|e| { diff --git a/rewards/src/services/namada.rs b/rewards/src/services/namada.rs index 03a73eade..94301ebea 100644 --- a/rewards/src/services/namada.rs +++ b/rewards/src/services/namada.rs @@ -40,7 +40,7 @@ pub async fn query_delegation_pairs( pub async fn query_rewards( client: &HttpClient, - delegation_pairs: HashSet, + delegation_pairs: &HashSet, ) -> anyhow::Result> { let mut all_rewards: Vec = Vec::new(); @@ -151,7 +151,7 @@ async fn process_batch( ); Some(Reward { - delegation_pair: delegation, + delegation_pair: delegation.clone(), amount: Amount::from(reward), }) }) diff --git a/rust-nightly-version b/rust-nightly-version new file mode 100644 index 000000000..e0cc4933b --- /dev/null +++ b/rust-nightly-version @@ -0,0 +1 @@ +nightly-2025-02-05 diff --git a/rust-stable-version b/rust-stable-version new file mode 100644 index 000000000..71fae54fb --- /dev/null +++ b/rust-stable-version @@ -0,0 +1 @@ +1.82.0 diff --git a/rust-toolchain.toml b/rust-toolchain.toml index e6656d38a..bc68cdfea 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,2 @@ [toolchain] -channel = "1.79.0" -components = ["rustc", "cargo", "rust-std", "rust-docs", "rls", "rust-src", "rust-analysis", "clippy", "rustfmt"] -targets = [] +channel = "1.82.0" \ No newline at end of file diff --git a/rustfmt.toml b/rustfmt.toml index 6bfc04d34..eff38b95e 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -58,6 +58,6 @@ unstable_features = false use_field_init_shorthand = false use_small_heuristics = "Default" use_try_shorthand = false -version = "Two" +style_edition = "2024" where_single_line = false wrap_comments = true diff --git a/shared/src/block.rs b/shared/src/block.rs index c690c033e..c0033fd62 100644 --- a/shared/src/block.rs +++ b/shared/src/block.rs @@ -1,10 +1,10 @@ use std::collections::{BTreeMap, HashSet}; use std::str::FromStr; +use namada_ibc::IbcMessage; use namada_ibc::apps::transfer::types::packet::PacketData; use namada_ibc::core::channel::types::msgs::{MsgRecvPacket, PacketMsg}; use namada_ibc::core::handler::types::msgs::MsgEnvelope; -use namada_ibc::IbcMessage; use namada_sdk::address::{Address, InternalAddress}; use namada_sdk::borsh::BorshDeserialize; use namada_sdk::token::Transfer; @@ -734,7 +734,7 @@ impl Block { vec![] } } - TransactionKind::Unknown => vec![], + TransactionKind::Unknown(_) => vec![], }) .collect::>() } diff --git a/shared/src/block_result.rs b/shared/src/block_result.rs index 42d47989a..7ad5e44b6 100644 --- a/shared/src/block_result.rs +++ b/shared/src/block_result.rs @@ -1,6 +1,8 @@ -use std::collections::BTreeMap; +use std::collections::{BTreeMap, HashMap}; +use std::fmt; use std::str::FromStr; +use namada_sdk::events::extend::{IndexedMaspData, MaspTxRef}; use namada_tx::data::TxResult; use tendermint_rpc::endpoint::block_results::Response as TendermintBlockResultResponse; @@ -108,7 +110,7 @@ impl BatchResults { } } -#[derive(Debug, Clone, Default)] +#[derive(Clone)] pub struct TxApplied { pub code: TxEventStatusCode, pub gas: u64, @@ -116,6 +118,27 @@ pub struct TxApplied { pub height: u64, pub batch: BatchResults, pub info: String, + pub masp_refs: HashMap>, +} + +impl fmt::Debug for TxApplied { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("TxApplied") + .field("code", &self.code) + .field("gas", &self.gas) + .field("hash", &self.hash) + .field("height", &self.height) + .field("batch", &self.batch) + .field("info", &self.info) + .field("masp_refs_len", &self.masp_refs.len()) + .finish() + } +} + +#[derive(Debug, Clone)] +pub enum MaspRef { + Native(String), + Ibc(String), } #[derive(Debug, Clone, Default)] @@ -189,6 +212,19 @@ impl TxAttributesType { .map(|height| u64::from_str(height).unwrap()) .unwrap() .to_owned(), + masp_refs: attributes + .get("masp_data_refs") + .map(|data| { + if let Ok(data) = + serde_json::from_str::(data) + { + let refs = data.masp_refs.0.to_vec(); + HashMap::from_iter([(data.tx_index.0 as u64, refs)]) + } else { + HashMap::default() + } + }) + .unwrap_or_default(), batch: attributes .get("batch") .map(|batch_result| { @@ -323,4 +359,23 @@ impl BlockResult { }); exit_status.unwrap_or(TransactionExitStatus::Rejected) } + + pub fn masp_refs(&self, wrapper_hash: &Id, index: u64) -> Vec { + self.end_events + .iter() + .filter_map(|event| { + if let Some(TxAttributesType::TxApplied(data)) = + &event.attributes + { + Some(data.clone()) + } else { + None + } + }) + .find(|attributes| attributes.hash.eq(wrapper_hash)) + .map(|event| { + event.masp_refs.get(&index).cloned().unwrap_or_default() + }) + .unwrap_or_default() + } } diff --git a/shared/src/checksums.rs b/shared/src/checksums.rs index 27389744c..e1130c870 100644 --- a/shared/src/checksums.rs +++ b/shared/src/checksums.rs @@ -1,9 +1,13 @@ use bimap::BiMap; use namada_sdk::tx::{ - TX_BECOME_VALIDATOR_WASM, TX_BOND_WASM, TX_CHANGE_COMMISSION_WASM, - TX_CHANGE_METADATA_WASM, TX_CLAIM_REWARDS_WASM, TX_IBC_WASM, - TX_INIT_PROPOSAL, TX_REDELEGATE_WASM, TX_REVEAL_PK, TX_TRANSFER_WASM, - TX_UNBOND_WASM, TX_VOTE_PROPOSAL, TX_WITHDRAW_WASM, + TX_BECOME_VALIDATOR_WASM, TX_BOND_WASM, TX_BRIDGE_POOL_WASM, + TX_CHANGE_COMMISSION_WASM, TX_CHANGE_CONSENSUS_KEY_WASM, + TX_CHANGE_METADATA_WASM, TX_CLAIM_REWARDS_WASM, + TX_DEACTIVATE_VALIDATOR_WASM, TX_IBC_WASM, TX_INIT_ACCOUNT_WASM, + TX_INIT_PROPOSAL, TX_REACTIVATE_VALIDATOR_WASM, TX_REDELEGATE_WASM, + TX_RESIGN_STEWARD, TX_REVEAL_PK, TX_TRANSFER_WASM, TX_UNBOND_WASM, + TX_UNJAIL_VALIDATOR_WASM, TX_UPDATE_ACCOUNT_WASM, + TX_UPDATE_STEWARD_COMMISSION, TX_VOTE_PROPOSAL, TX_WITHDRAW_WASM, }; use serde::{Deserialize, Serialize}; @@ -44,6 +48,15 @@ impl Checksums { TX_CHANGE_COMMISSION_WASM.to_string(), TX_IBC_WASM.to_string(), TX_BECOME_VALIDATOR_WASM.to_string(), + TX_INIT_ACCOUNT_WASM.to_string(), + TX_UNJAIL_VALIDATOR_WASM.to_string(), + TX_DEACTIVATE_VALIDATOR_WASM.to_string(), + TX_REACTIVATE_VALIDATOR_WASM.to_string(), + TX_UPDATE_ACCOUNT_WASM.to_string(), + TX_BRIDGE_POOL_WASM.to_string(), + TX_CHANGE_CONSENSUS_KEY_WASM.to_string(), + TX_RESIGN_STEWARD.to_string(), + TX_UPDATE_STEWARD_COMMISSION.to_string(), ] } } diff --git a/shared/src/crawler.rs b/shared/src/crawler.rs index beddd92bd..2fe8402e7 100644 --- a/shared/src/crawler.rs +++ b/shared/src/crawler.rs @@ -1,14 +1,14 @@ -use std::sync::atomic::{self, AtomicBool}; use std::sync::Arc; +use std::sync::atomic::{self, AtomicBool}; use async_stream::stream; use futures::pin_mut; -use futures_core::stream::Stream; use futures_core::Future; +use futures_core::stream::Stream; use futures_util::stream::StreamExt; use tokio::signal; -use tokio_retry::strategy::{jitter, FixedInterval}; use tokio_retry::RetryIf; +use tokio_retry::strategy::{FixedInterval, jitter}; use crate::error::MainError; diff --git a/shared/src/gas.rs b/shared/src/gas.rs index 6399b683e..61719f807 100644 --- a/shared/src/gas.rs +++ b/shared/src/gas.rs @@ -57,28 +57,28 @@ impl GasEstimation { self.transparent_transfer += 1 } - pub fn increase_shielded_transfer(&mut self) { - self.shielded_transfer += 1 + pub fn increase_shielded_transfer(&mut self, notes: u64) { + self.shielded_transfer += notes } - pub fn increase_shielding_transfer(&mut self) { - self.shielding_transfer += 1 + pub fn increase_shielding_transfer(&mut self, notes: u64) { + self.shielding_transfer += notes } - pub fn increase_unshielding_transfer(&mut self) { - self.unshielding_transfer += 1 + pub fn increase_unshielding_transfer(&mut self, notes: u64) { + self.unshielding_transfer += notes } - pub fn increase_mixed_transfer(&mut self) { - self.mixed_transfer += 1 + pub fn increase_mixed_transfer(&mut self, notes: u64) { + self.mixed_transfer += notes } - pub fn increase_ibc_shielding_transfer(&mut self) { - self.ibc_shielding_transfer += 1 + pub fn increase_ibc_shielding_transfer(&mut self, notes: u64) { + self.ibc_shielding_transfer += notes } - pub fn increase_ibc_unshielding_transfer(&mut self) { - self.ibc_unshielding_transfer += 1 + pub fn increase_ibc_unshielding_transfer(&mut self, notes: u64) { + self.ibc_unshielding_transfer += notes } pub fn increase_ibc_msg_transfer(&mut self) { diff --git a/shared/src/genesis.rs b/shared/src/genesis.rs index 7dc076784..7e2bc1d10 100644 --- a/shared/src/genesis.rs +++ b/shared/src/genesis.rs @@ -1,5 +1,5 @@ use serde::{Deserialize, Serialize}; -use tendermint::{chain, consensus, validator, AppHash, Time}; +use tendermint::{AppHash, Time, chain, consensus, validator}; use tendermint_rpc::dialect::LatestDialect; use tendermint_rpc::request::RequestMessage; use tendermint_rpc::{ diff --git a/shared/src/lib.rs b/shared/src/lib.rs index 9d0f5ad46..e495659e8 100644 --- a/shared/src/lib.rs +++ b/shared/src/lib.rs @@ -12,6 +12,7 @@ pub mod header; pub mod id; pub mod log_config; pub mod parameters; +pub mod pgf; pub mod proposal; pub mod public_key; pub mod rewards; diff --git a/shared/src/log_config.rs b/shared/src/log_config.rs index 4999e5056..7ad06e846 100644 --- a/shared/src/log_config.rs +++ b/shared/src/log_config.rs @@ -17,7 +17,7 @@ impl Display for LogFormat { } } -#[derive(clap::Parser)] +#[derive(clap::Parser, Clone)] pub struct LogConfig { #[command(flatten)] pub verbosity: Verbosity, diff --git a/shared/src/pgf.rs b/shared/src/pgf.rs new file mode 100644 index 000000000..c5e9698b8 --- /dev/null +++ b/shared/src/pgf.rs @@ -0,0 +1,35 @@ +use serde::Serialize; + +use crate::balance::Amount; +use crate::id::Id; + +#[derive(Serialize, Debug, Clone)] +#[serde(untagged)] +pub enum PaymentRecurrence { + Continuous, + Retro, +} + +#[derive(Serialize, Debug, Clone)] +#[serde(untagged)] +pub enum PaymentKind { + Ibc, + Native, +} + +#[derive(Serialize, Debug, Clone)] +#[serde(untagged)] +pub enum PgfAction { + Add, + Remove, +} + +#[derive(Debug, Clone)] +pub struct PgfPayment { + pub proposal_id: u64, + pub recurrence: PaymentRecurrence, + pub kind: PaymentKind, + pub receipient: Id, + pub amount: Amount, + pub action: Option, +} diff --git a/shared/src/proposal.rs b/shared/src/proposal.rs index 04d7e0510..7ce906998 100644 --- a/shared/src/proposal.rs +++ b/shared/src/proposal.rs @@ -1,12 +1,12 @@ use std::collections::BTreeSet; use fake::Fake; +use namada_governance::ProposalType; use namada_governance::storage::proposal::{ AddRemove, PGFAction, PGFIbcTarget, PGFInternalTarget, PGFTarget, StorageProposal, }; use namada_governance::utils::TallyType as NamadaTallyType; -use namada_governance::ProposalType; use namada_ibc::core::host::types::identifiers::{ChannelId, PortId}; use namada_sdk::token::Amount; use rand::distributions::{Distribution, Standard}; diff --git a/shared/src/transaction.rs b/shared/src/transaction.rs index a6360f100..5a87b1098 100644 --- a/shared/src/transaction.rs +++ b/shared/src/transaction.rs @@ -4,6 +4,7 @@ use std::fmt::Display; use namada_governance::{InitProposalData, VoteProposalData}; use namada_sdk::address::Address; use namada_sdk::borsh::BorshDeserialize; +use namada_sdk::events::extend::MaspTxRef; use namada_sdk::key::common::PublicKey; use namada_sdk::token::Transfer; use namada_sdk::uint::Uint; @@ -11,7 +12,7 @@ use namada_tx::data::pos::{ BecomeValidator, Bond, ClaimRewards, CommissionChange, MetaDataChange, Redelegation, Unbond, Withdraw, }; -use namada_tx::data::{compute_inner_tx_hash, TxType}; +use namada_tx::data::{TxType, compute_inner_tx_hash}; use namada_tx::either::Either; use namada_tx::{Section, Tx}; use serde::Serialize; @@ -30,6 +31,39 @@ pub struct RevealPkData { pub public_key: PublicKey, } +// Capture details for unknown transactions so we can store them in the db +#[derive(Serialize, Debug, Clone)] +pub struct UnknownTransaction { + #[serde(skip_serializing_if = "Option::is_none")] + pub id: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(skip_serializing_if = "Option::is_none")] + #[serde(serialize_with = "serialize_optional_bytes_to_hex")] + pub data: Option>, +} + +fn serialize_optional_bytes_to_hex( + bytes: &Option>, + serializer: S, +) -> Result +where + S: serde::Serializer, +{ + bytes + .as_ref() + .map(|b| { + let mut s = String::with_capacity(2 + (b.len() * 2)); // "0x" + 2 chars per byte + s.push_str("0x"); + for byte in b { + use std::fmt::Write; + write!(s, "{:02x}", byte).unwrap(); + } + s + }) + .serialize(serializer) +} + #[derive(Serialize, Debug, Clone)] #[serde(untagged)] pub enum TransactionKind { @@ -56,7 +90,7 @@ pub enum TransactionKind { ReactivateValidator(Option
), DeactivateValidator(Option
), UnjailValidator(Option
), - Unknown, + Unknown(Option), } impl TransactionKind { @@ -65,6 +99,7 @@ impl TransactionKind { } pub fn from( + id: &str, tx_kind_name: &str, data: &[u8], masp_address: &Address, @@ -74,7 +109,11 @@ impl TransactionKind { if let Ok(transfer) = Transfer::try_from_slice(data) { utils::transfer_to_tx_kind(transfer, masp_address) } else { - TransactionKind::Unknown + TransactionKind::Unknown(Some(UnknownTransaction { + id: Some(id.to_string()), + name: Some(tx_kind_name.to_string()), + data: Some(data.to_vec()), + })) } } "tx_bond" => { @@ -232,7 +271,11 @@ impl TransactionKind { } _ => { tracing::warn!("Unknown transaction kind: {}", tx_kind_name); - TransactionKind::Unknown + TransactionKind::Unknown(Some(UnknownTransaction { + id: Some(id.to_string()), + name: Some(tx_kind_name.to_string()), + data: Some(data.to_vec()), + })) } } } @@ -274,9 +317,8 @@ pub struct Transaction { } #[derive(Debug, Clone)] -pub struct Transaction2 { - pub wrapper: WrapperTransaction, - pub inners: InnerTransaction, +pub struct MaspSectionData { + pub total_notes: u64, } #[derive(Debug, Clone)] @@ -300,6 +342,7 @@ pub struct InnerTransaction { pub memo: Option, pub data: Option, pub extra_sections: HashMap>, + pub notes: u64, pub exit_code: TransactionExitStatus, } @@ -359,6 +402,8 @@ impl Transaction { let gas_used = block_results .gas_used(&wrapper_tx_id) .map(|gas| gas.parse::().unwrap()); + let masp_refs = + block_results.masp_refs(&wrapper_tx_id, index as u64); let fee = Fee { gas: Uint::from(wrapper.gas_limit).to_string(), @@ -421,15 +466,24 @@ impl Transaction { checksums.get_name_by_id(&id) { TransactionKind::from( + &id, &tx_kind_name, &tx_data, masp_address, ) } else { - TransactionKind::Unknown + TransactionKind::Unknown(Some(UnknownTransaction { + id: Some(id), + name: None, + data: Some(tx_data.clone()), + })) } } else { - TransactionKind::Unknown + TransactionKind::Unknown(Some(UnknownTransaction { + id: None, + name: None, + data: Some(tx_data.clone()), + })) }; let encoded_tx_data = if !tx_data.is_empty() { @@ -459,6 +513,28 @@ impl Transaction { acc }); + let notes = masp_refs.clone().into_iter().map(|masp_ref| { + match masp_ref { + MaspTxRef::MaspSection(masp_tx_id) => { + transaction + .get_masp_section(&masp_tx_id) + .map(|bundle| bundle.clone().into_data().sapling_bundle().map(|bundle| bundle.shielded_spends.len() + bundle.shielded_outputs.len()).unwrap_or_default()).unwrap_or_default() as u64 + }, + MaspTxRef::IbcData(hash) => { + transaction.get_data_section(&hash).map(|section| match namada_sdk::ibc::decode_message::(§ion) { + Ok(namada_ibc::IbcMessage::Envelope(msg_envelope)) => { + if let Some(bundle) = namada_sdk::ibc::extract_masp_tx_from_envelope(&msg_envelope) { + bundle.clone().into_data().sapling_bundle().map(|bundle| bundle.shielded_spends.len() + bundle.shielded_outputs.len()).unwrap_or_default() as u64 + } else { + 0 + } + }, + _ => 0, + }).unwrap_or_default() + }, + } + }).sum::(); + let inner_tx = InnerTransaction { tx_id: inner_tx_id, index, @@ -466,6 +542,7 @@ impl Transaction { memo, data: encoded_tx_data, extra_sections, + notes, exit_code: inner_tx_status, kind: tx_kind, }; diff --git a/shared/src/validator.rs b/shared/src/validator.rs index da5e6a7d9..b24277d12 100644 --- a/shared/src/validator.rs +++ b/shared/src/validator.rs @@ -1,8 +1,8 @@ use std::collections::HashSet; +use fake::Fake; use fake::faker::company::en::{CatchPhrase, CompanyName}; use fake::faker::internet::en::{DomainSuffix, SafeEmail, Username}; -use fake::Fake; use namada_proof_of_stake::types::ValidatorState as NamadaValidatorState; use rand::distributions::{Distribution, Standard}; diff --git a/swagger.yml b/swagger.yml index 6771f4984..3c59fcf5d 100644 --- a/swagger.yml +++ b/swagger.yml @@ -380,6 +380,20 @@ paths: application/json: schema: $ref: "#/components/schemas/Proposal" + /api/v1/gov/proposal/{id}/data: + get: + summary: Get a governance proposal data by proposal id + parameters: + - in: path + name: id + schema: + type: integer + minimum: 0 + required: true + description: Proposal id + responses: + '200': + description: A Governance proposal data. /api/v1/gov/proposal/{id}/votes: get: summary: Get all the votes for a governance proposal @@ -540,6 +554,11 @@ paths: type: integer minimum: 1 maximum: 100 + - in: query + name: token + schema: + type: string + required: true - in: query name: unbond schema: @@ -815,7 +834,7 @@ paths: ] timestamp: type: number - last_processed_block_height: + last_processed_block_height: type: number /api/v1/chain/history: get: diff --git a/test_helpers/src/db.rs b/test_helpers/src/db.rs index ae9f162b8..b156b3700 100644 --- a/test_helpers/src/db.rs +++ b/test_helpers/src/db.rs @@ -3,7 +3,7 @@ use std::sync::atomic::AtomicU32; use std::{env, thread}; use deadpool_diesel::postgres::Pool; -use diesel::{sql_query, Connection, PgConnection, RunQueryDsl}; +use diesel::{Connection, PgConnection, RunQueryDsl, sql_query}; use orm::migrations::run_migrations; use shared::error::{AsDbError, ContextDbInteractError}; diff --git a/transactions/src/config.rs b/transactions/src/config.rs index 16b32ac28..05209b4a8 100644 --- a/transactions/src/config.rs +++ b/transactions/src/config.rs @@ -23,6 +23,12 @@ pub struct AppConfig { #[clap(long, env, default_value_t = 1)] pub from_block_height: u32, + #[clap( + long, + help = "Crawl from given height and do not update crawler_state" + )] + pub backfill_from: Option, + #[clap(long, env)] pub database_url: String, diff --git a/transactions/src/main.rs b/transactions/src/main.rs index adb125816..15e55d906 100644 --- a/transactions/src/main.rs +++ b/transactions/src/main.rs @@ -54,12 +54,18 @@ async fn main() -> Result<(), MainError> { let crawler_state = db_service::get_crawler_state(&conn).await; - let next_block = std::cmp::max( - crawler_state - .map(|cs| cs.last_processed_block + 1) - .unwrap_or(1), - config.from_block_height, - ); + let next_block = match config.backfill_from { + Some(height) => { + tracing::warn!("Backfilling from block height {}", height); + height + } + None => std::cmp::max( + crawler_state + .map(|cs| cs.last_processed_block + 1) + .unwrap_or(1), + config.from_block_height, + ), + }; crawl( move |block_height| { @@ -68,6 +74,7 @@ async fn main() -> Result<(), MainError> { client.clone(), conn.clone(), checksums.clone(), + config.backfill_from.is_none(), ) }, next_block, @@ -81,6 +88,7 @@ async fn crawling_fn( client: Arc, conn: Arc, checksums: Checksums, + should_update_crawler_state: bool, ) -> Result<(), MainError> { let should_process = can_process(block_height, client.clone()).await?; @@ -190,10 +198,13 @@ async fn crawling_fn( transaction_conn, inner_txs, )?; - transaction_repo::insert_crawler_state( - transaction_conn, - crawler_state, - )?; + + if should_update_crawler_state { + transaction_repo::insert_crawler_state( + transaction_conn, + crawler_state, + )?; + } transaction_repo::insert_ibc_sequence( transaction_conn, diff --git a/transactions/src/repository/transactions.rs b/transactions/src/repository/transactions.rs index 723c853f5..b0f7ef9b3 100644 --- a/transactions/src/repository/transactions.rs +++ b/transactions/src/repository/transactions.rs @@ -35,6 +35,16 @@ pub fn insert_inner_transactions( .map(InnerTransactionInsertDb::from) .collect::>(), ) + .on_conflict(inner_transactions::id) + .do_update() + .set(( + // Allow updating transactions kind + data so that if the indexer + // is updated with new transaction type support, we can + // easily go back & reindex any old transactions + // that were previously marked as "unknown". + inner_transactions::kind.eq(excluded(inner_transactions::kind)), + inner_transactions::data.eq(excluded(inner_transactions::data)), + )) .execute(transaction_conn) .context("Failed to insert inner transactions in db")?; @@ -51,6 +61,7 @@ pub fn insert_wrapper_transactions( .map(WrapperTransactionInsertDb::from) .collect::>(), ) + .on_conflict_do_nothing() .execute(transaction_conn) .context("Failed to insert wrapper transactions in db")?; diff --git a/transactions/src/services/tx.rs b/transactions/src/services/tx.rs index 2c534a2dc..0efb28eb0 100644 --- a/transactions/src/services/tx.rs +++ b/transactions/src/services/tx.rs @@ -128,9 +128,12 @@ pub fn get_gas_estimates( && inner_tx.wrapper_id.eq(&wrapper_tx.tx_id) }) .for_each(|tx| match tx.kind { - TransactionKind::TransparentTransfer(_) - | TransactionKind::MixedTransfer(_) => { - gas_estimate.increase_mixed_transfer() + TransactionKind::TransparentTransfer(_) => { + gas_estimate.increase_transparent_transfer(); + } + TransactionKind::MixedTransfer(_) => { + let notes = tx.notes; + gas_estimate.increase_mixed_transfer(notes) } TransactionKind::IbcMsgTransfer(_) => { gas_estimate.increase_ibc_msg_transfer() @@ -155,16 +158,24 @@ pub fn get_gas_estimates( gas_estimate.increase_reveal_pk() } TransactionKind::ShieldedTransfer(_) => { - gas_estimate.increase_shielded_transfer() + let notes = tx.notes; + gas_estimate.increase_shielded_transfer(notes); } TransactionKind::ShieldingTransfer(_) => { - gas_estimate.increase_shielding_transfer() + let notes = tx.notes; + gas_estimate.increase_shielding_transfer(notes) } TransactionKind::UnshieldingTransfer(_) => { - gas_estimate.increase_ibc_unshielding_transfer() + let notes = tx.notes; + gas_estimate.increase_unshielding_transfer(notes) } TransactionKind::IbcShieldingTransfer(_) => { - gas_estimate.increase_ibc_shielding_transfer() + let notes = tx.notes; + gas_estimate.increase_ibc_shielding_transfer(notes) + } + TransactionKind::IbcUnshieldingTransfer(_) => { + let notes = tx.notes; + gas_estimate.increase_ibc_unshielding_transfer(notes) } _ => (), }); diff --git a/webserver/Cargo.toml b/webserver/Cargo.toml index 5968f2f1a..ecd86ee16 100644 --- a/webserver/Cargo.toml +++ b/webserver/Cargo.toml @@ -51,6 +51,8 @@ shared.workspace = true strum.workspace = true strum_macros.workspace = true axum-prometheus = "0.7.0" +sha256.workspace = true +subtle-encoding.workspace = true [build-dependencies] vergen = { version = "8.0.0", features = ["build", "git", "gitcl"] } diff --git a/webserver/Dockerfile b/webserver/Dockerfile index fb2ab99d1..39a59f769 100644 --- a/webserver/Dockerfile +++ b/webserver/Dockerfile @@ -19,7 +19,7 @@ FROM debian:bookworm-slim AS runtime WORKDIR /app COPY --from=builder /app/target/release/webserver /app/webserver -RUN apt-get update && apt-get install -y libpq5 +RUN apt-get update && apt-get install -y libpq5 curl WORKDIR /app diff --git a/webserver/src/app.rs b/webserver/src/app.rs index 7151795d8..1a822957b 100644 --- a/webserver/src/app.rs +++ b/webserver/src/app.rs @@ -10,9 +10,9 @@ use axum_prometheus::PrometheusMetricLayer; use lazy_static::lazy_static; use namada_sdk::tendermint_rpc::HttpClient; use serde_json::json; +use tower::ServiceBuilder; use tower::buffer::BufferLayer; use tower::limit::RateLimitLayer; -use tower::ServiceBuilder; use tower_http::cors::{Any, CorsLayer}; use tower_http::trace::TraceLayer; @@ -22,7 +22,7 @@ use crate::handler::{ balance as balance_handlers, block as block_handlers, chain as chain_handlers, crawler_state as crawler_state_handlers, gas as gas_handlers, governance as gov_handlers, ibc as ibc_handler, - pk as pk_handlers, pos as pos_handlers, + pgf as pgf_service, pk as pk_handlers, pos as pos_handlers, transaction as transaction_handlers, }; use crate::state::common::CommonState; @@ -85,6 +85,10 @@ impl ApplicationServer { "/gov/proposal/:id", get(gov_handlers::get_governance_proposal_by_id), ) + .route( + "/gov/proposal/:id/data", + get(gov_handlers::get_proposal_data_by_proposal_id), + ) .route( "/gov/proposal/:id/votes", get(gov_handlers::get_governance_proposal_votes), @@ -136,6 +140,14 @@ impl ApplicationServer { get(chain_handlers::get_last_processed_epoch), ) .route("/ibc/:tx_id/status", get(ibc_handler::get_ibc_status)) + .route( + "/pgf/payments", + get(pgf_service::get_pgf_continuous_payments), + ) + .route( + "/pgf/paymenents/:proposal_id", + get(pgf_service::get_pgf_payment_by_proposal_id), + ) .route( "/crawlers/timestamps", get(crawler_state_handlers::get_crawlers_timestamps), diff --git a/webserver/src/appstate.rs b/webserver/src/appstate.rs index 66515e213..874f15796 100644 --- a/webserver/src/appstate.rs +++ b/webserver/src/appstate.rs @@ -7,11 +7,11 @@ use deadpool_redis::{Config, Connection, Pool as CachePool}; #[derive(Clone)] pub struct AppState { db: DbPool, - cache: CachePool, + cache: Option, } impl AppState { - pub fn new(db_url: String, cache_url: String) -> Self { + pub fn new(db_url: String, cache_url: Option) -> Self { let max_pool_size = env::var("DATABASE_POOL_SIZE") .unwrap_or_else(|_| 16.to_string()) .parse::() @@ -35,27 +35,33 @@ impl AppState { } }; - let cache_pool = Config::from_url(cache_url) - .create_pool(Some(deadpool_redis::Runtime::Tokio1)); - let cache_pool = match cache_pool { - Ok(pool) => pool, - Err(e) => { - tracing::info!("Error building redis pool: {}", e.to_string()); - exit(1); + let cache = cache_url.map(|url| { + let cache_pool = Config::from_url(url) + .create_pool(Some(deadpool_redis::Runtime::Tokio1)); + + match cache_pool { + Ok(pool) => pool, + Err(e) => { + tracing::info!( + "Error building redis pool: {}", + e.to_string() + ); + exit(1); + } } - }; + }); - Self { - db: pool, - cache: cache_pool, - } + Self { db: pool, cache } } pub async fn get_db_connection(&self) -> Object { self.db.get().await.unwrap() } - pub async fn get_cache_connection(&self) -> Connection { - self.cache.get().await.unwrap() + pub async fn get_cache_connection(&self) -> Option { + match &self.cache { + None => None, + Some(cache) => Some(cache.get().await.unwrap()), + } } } diff --git a/webserver/src/config.rs b/webserver/src/config.rs index 171efd986..475695faf 100644 --- a/webserver/src/config.rs +++ b/webserver/src/config.rs @@ -1,3 +1,5 @@ +use shared::log_config::LogConfig; + #[derive(clap::ValueEnum, Clone, Debug, Copy)] pub enum CargoEnv { Development, @@ -10,7 +12,7 @@ pub struct AppConfig { pub port: u16, #[clap(long, env)] - pub cache_url: String, + pub cache_url: Option, #[clap(long, env)] pub database_url: String, @@ -20,4 +22,7 @@ pub struct AppConfig { #[clap(long, env)] pub tendermint_url: String, + + #[clap(flatten)] + pub log: LogConfig, } diff --git a/webserver/src/dto/gas.rs b/webserver/src/dto/gas.rs index 24e75770e..20c394fb9 100644 --- a/webserver/src/dto/gas.rs +++ b/webserver/src/dto/gas.rs @@ -33,6 +33,7 @@ pub struct GasEstimateQuery { pub signatures: Option, #[validate(range(min = 1, max = 100000))] pub tx_size: Option, + pub token: String, } impl GasEstimateQuery { diff --git a/webserver/src/dto/mod.rs b/webserver/src/dto/mod.rs index 8229c698e..207e96440 100644 --- a/webserver/src/dto/mod.rs +++ b/webserver/src/dto/mod.rs @@ -1,5 +1,6 @@ pub mod crawler_state; pub mod gas; pub mod governance; +pub mod pgf; pub mod pos; pub mod transaction; diff --git a/webserver/src/dto/pgf.rs b/webserver/src/dto/pgf.rs new file mode 100644 index 000000000..9c87a87a4 --- /dev/null +++ b/webserver/src/dto/pgf.rs @@ -0,0 +1,8 @@ +use serde::{Deserialize, Serialize}; +use validator::Validate; + +#[derive(Clone, Serialize, Deserialize, Validate)] +pub struct PgfQueryParams { + #[validate(range(min = 1, max = 10000))] + pub page: Option, +} diff --git a/webserver/src/error/api.rs b/webserver/src/error/api.rs index 4a826564f..e18d55e12 100644 --- a/webserver/src/error/api.rs +++ b/webserver/src/error/api.rs @@ -8,6 +8,7 @@ use super::crawler_state::CrawlerStateError; use super::gas::GasError; use super::governance::GovernanceError; use super::ibc::IbcError; +use super::pgf::PgfError; use super::pos::PoSError; use super::revealed_pk::RevealedPkError; use super::transaction::TransactionError; @@ -33,6 +34,8 @@ pub enum ApiError { #[error(transparent)] IbcError(#[from] IbcError), #[error(transparent)] + PgfError(#[from] PgfError), + #[error(transparent)] CrawlerStateError(#[from] CrawlerStateError), } @@ -48,6 +51,7 @@ impl IntoResponse for ApiError { ApiError::RevealedPkError(error) => error.into_response(), ApiError::GasError(error) => error.into_response(), ApiError::IbcError(error) => error.into_response(), + ApiError::PgfError(error) => error.into_response(), ApiError::CrawlerStateError(error) => error.into_response(), } } diff --git a/webserver/src/error/governance.rs b/webserver/src/error/governance.rs index 5d6252477..50ed5b5b8 100644 --- a/webserver/src/error/governance.rs +++ b/webserver/src/error/governance.rs @@ -10,6 +10,8 @@ pub enum GovernanceError { TooShortPattern(usize), #[error("Proposal {0} not found")] NotFound(u64), + #[error("Proposal {0} has no associated data")] + DataNotFound(u64), #[error("Database error: {0}")] Database(String), #[error("Unknown error: {0}")] @@ -21,6 +23,7 @@ impl IntoResponse for GovernanceError { let status_code = match self { GovernanceError::TooShortPattern(_) => StatusCode::BAD_REQUEST, GovernanceError::NotFound(_) => StatusCode::NOT_FOUND, + GovernanceError::DataNotFound(_) => StatusCode::NOT_FOUND, GovernanceError::Unknown(_) | GovernanceError::Database(_) => { StatusCode::INTERNAL_SERVER_ERROR } diff --git a/webserver/src/error/mod.rs b/webserver/src/error/mod.rs index e41db3de2..9b21bf09a 100644 --- a/webserver/src/error/mod.rs +++ b/webserver/src/error/mod.rs @@ -6,6 +6,7 @@ pub mod crawler_state; pub mod gas; pub mod governance; pub mod ibc; +pub mod pgf; pub mod pos; pub mod revealed_pk; pub mod transaction; diff --git a/webserver/src/error/pgf.rs b/webserver/src/error/pgf.rs new file mode 100644 index 000000000..c85f19a2f --- /dev/null +++ b/webserver/src/error/pgf.rs @@ -0,0 +1,25 @@ +use axum::http::StatusCode; +use axum::response::{IntoResponse, Response}; +use thiserror::Error; + +use crate::response::api::ApiErrorResponse; + +#[derive(Error, Debug)] +pub enum PgfError { + #[error("Database error: {0}")] + Database(String), + #[error("Unknown error: {0}")] + Unknown(String), +} + +impl IntoResponse for PgfError { + fn into_response(self) -> Response { + let status_code = match self { + PgfError::Unknown(_) | PgfError::Database(_) => { + StatusCode::INTERNAL_SERVER_ERROR + } + }; + + ApiErrorResponse::send(status_code.as_u16(), Some(self.to_string())) + } +} diff --git a/webserver/src/handler/balance.rs b/webserver/src/handler/balance.rs index e7e05f963..5003599b2 100644 --- a/webserver/src/handler/balance.rs +++ b/webserver/src/handler/balance.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, State}; use axum::http::HeaderMap; -use axum::Json; use axum_macros::debug_handler; use crate::error::api::ApiError; diff --git a/webserver/src/handler/block.rs b/webserver/src/handler/block.rs index ed4bb01b3..dca4b45ab 100644 --- a/webserver/src/handler/block.rs +++ b/webserver/src/handler/block.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, State}; use axum::http::HeaderMap; -use axum::Json; use axum_macros::debug_handler; use crate::error::api::ApiError; diff --git a/webserver/src/handler/chain.rs b/webserver/src/handler/chain.rs index 72a12105e..e4961e1d8 100644 --- a/webserver/src/handler/chain.rs +++ b/webserver/src/handler/chain.rs @@ -1,11 +1,11 @@ use std::convert::Infallible; use std::time::Duration; +use axum::Json; use axum::extract::State; use axum::http::HeaderMap; -use axum::response::sse::{Event, KeepAlive}; use axum::response::Sse; -use axum::Json; +use axum::response::sse::{Event, KeepAlive}; use futures::Stream; use tokio_stream::StreamExt; diff --git a/webserver/src/handler/crawler_state.rs b/webserver/src/handler/crawler_state.rs index a36034357..d41cc5f30 100644 --- a/webserver/src/handler/crawler_state.rs +++ b/webserver/src/handler/crawler_state.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::State; use axum::http::HeaderMap; -use axum::Json; use axum_extra::extract::Query; use strum::VariantArray; @@ -41,7 +41,7 @@ pub async fn get_crawlers_timestamps( || CrawlersTimestamps { name: variant.to_string(), timestamp: 0, - last_processed_block_height: 1, + last_processed_block_height: None, }, |ct| ct.clone(), ) diff --git a/webserver/src/handler/gas.rs b/webserver/src/handler/gas.rs index 5b559792d..97079bd60 100644 --- a/webserver/src/handler/gas.rs +++ b/webserver/src/handler/gas.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, Query, State}; use axum::http::HeaderMap; -use axum::Json; use axum_macros::debug_handler; use crate::dto::gas::GasEstimateQuery; @@ -50,6 +50,7 @@ pub async fn get_gas_estimate( let gas = state .gas_service .estimate_gas( + query.token, query.bond.unwrap_or(0), query.redelegate.unwrap_or(0), query.claim_rewards.unwrap_or(0), diff --git a/webserver/src/handler/governance.rs b/webserver/src/handler/governance.rs index 8430099b1..617f60cd1 100644 --- a/webserver/src/handler/governance.rs +++ b/webserver/src/handler/governance.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, Query, State}; use axum::http::HeaderMap; -use axum::Json; use axum_macros::debug_handler; use crate::dto::governance::{ProposalQueryParams, ProposalVotesQueryparams}; @@ -64,6 +64,25 @@ pub async fn get_governance_proposal_by_id( } } +#[debug_handler] +pub async fn get_proposal_data_by_proposal_id( + _headers: HeaderMap, + Path(proposal_id): Path, + State(state): State, +) -> Result { + let proposal = state.gov_service.find_proposal_data(proposal_id).await?; + + if let Some(data) = proposal { + if let Some(data) = data { + Ok(data) + } else { + Err(GovernanceError::DataNotFound(proposal_id).into()) + } + } else { + Err(GovernanceError::NotFound(proposal_id).into()) + } +} + #[debug_handler] pub async fn get_governance_proposal_votes( _headers: HeaderMap, diff --git a/webserver/src/handler/ibc.rs b/webserver/src/handler/ibc.rs index ecf8ff83d..1d40cb4e0 100644 --- a/webserver/src/handler/ibc.rs +++ b/webserver/src/handler/ibc.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, State}; use axum::http::HeaderMap; -use axum::Json; use axum_macros::debug_handler; use crate::error::api::ApiError; diff --git a/webserver/src/handler/mod.rs b/webserver/src/handler/mod.rs index f48188102..79aef8369 100644 --- a/webserver/src/handler/mod.rs +++ b/webserver/src/handler/mod.rs @@ -5,6 +5,7 @@ pub mod crawler_state; pub mod gas; pub mod governance; pub mod ibc; +pub mod pgf; pub mod pk; pub mod pos; pub mod transaction; diff --git a/webserver/src/handler/pgf.rs b/webserver/src/handler/pgf.rs new file mode 100644 index 000000000..f97ecdef1 --- /dev/null +++ b/webserver/src/handler/pgf.rs @@ -0,0 +1,42 @@ +use axum::Json; +use axum::extract::{Path, State}; +use axum::http::HeaderMap; +use axum_extra::extract::Query; +use axum_macros::debug_handler; + +use crate::dto::pgf::PgfQueryParams; +use crate::error::api::ApiError; +use crate::response::pgf::PgfPayment; +use crate::response::utils::PaginatedResponse; +use crate::state::common::CommonState; + +#[debug_handler] +pub async fn get_pgf_continuous_payments( + _headers: HeaderMap, + Query(query): Query, + State(state): State, +) -> Result>>, ApiError> { + let page = query.page.unwrap_or(1); + + let (pgf_payments, total_pages, total_items) = + state.pgf_service.get_all_pgf_payments(page).await?; + + let response = + PaginatedResponse::new(pgf_payments, page, total_pages, total_items); + + Ok(Json(response)) +} + +#[debug_handler] +pub async fn get_pgf_payment_by_proposal_id( + _headers: HeaderMap, + Path(proposal_id): Path, + State(state): State, +) -> Result>, ApiError> { + let pgf_payment = state + .pgf_service + .find_pfg_payment_by_proposal_id(proposal_id) + .await?; + + Ok(Json(pgf_payment)) +} diff --git a/webserver/src/handler/pk.rs b/webserver/src/handler/pk.rs index daef882c5..c76ae88bc 100644 --- a/webserver/src/handler/pk.rs +++ b/webserver/src/handler/pk.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, State}; use axum::http::HeaderMap; -use axum::Json; use axum_macros::debug_handler; use crate::error::api::ApiError; diff --git a/webserver/src/handler/pos.rs b/webserver/src/handler/pos.rs index a6b8e4c37..3dae99357 100644 --- a/webserver/src/handler/pos.rs +++ b/webserver/src/handler/pos.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, State}; use axum::http::HeaderMap; -use axum::Json; use axum_extra::extract::Query; use axum_macros::debug_handler; diff --git a/webserver/src/handler/transaction.rs b/webserver/src/handler/transaction.rs index 6ff02c081..9676afcb1 100644 --- a/webserver/src/handler/transaction.rs +++ b/webserver/src/handler/transaction.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::extract::{Path, State}; use axum::http::HeaderMap; -use axum::Json; use axum_extra::extract::Query; use axum_macros::debug_handler; diff --git a/webserver/src/main.rs b/webserver/src/main.rs index 19dad7ffb..5047deea2 100644 --- a/webserver/src/main.rs +++ b/webserver/src/main.rs @@ -7,9 +7,7 @@ use webserver::config::AppConfig; async fn main() -> anyhow::Result<()> { let config = AppConfig::parse(); - tracing_subscriber::fmt() - .with_max_level(tracing::Level::INFO) - .init(); + config.log.init(); ApplicationServer::serve(config) .await diff --git a/webserver/src/repository/gas.rs b/webserver/src/repository/gas.rs index 6ef41d6fb..42d8a3455 100644 --- a/webserver/src/repository/gas.rs +++ b/webserver/src/repository/gas.rs @@ -32,6 +32,7 @@ pub trait GasRepositoryTrait { #[allow(clippy::too_many_arguments)] async fn find_gas_estimates( &self, + token: String, bond: u64, redelegate: u64, claim_rewards: u64, @@ -99,6 +100,7 @@ impl GasRepositoryTrait for GasRepository { #[allow(clippy::too_many_arguments)] async fn find_gas_estimates( &self, + token: String, bond: u64, redelegate: u64, claim_rewards: u64, @@ -155,6 +157,7 @@ impl GasRepositoryTrait for GasRepository { .on(gas_estimations::dsl::wrapper_id .eq(wrapper_transactions::dsl::id)), ) + .filter(wrapper_transactions::dsl::fee_token.eq(token)) .limit(100) .select(( min(wrapper_transactions::dsl::gas_used) diff --git a/webserver/src/repository/mod.rs b/webserver/src/repository/mod.rs index 448aefb63..5d6ace094 100644 --- a/webserver/src/repository/mod.rs +++ b/webserver/src/repository/mod.rs @@ -4,6 +4,7 @@ pub mod chain; pub mod gas; pub mod governance; pub mod ibc; +pub mod pgf; pub mod pos; pub mod revealed_pk; pub mod tranasaction; diff --git a/webserver/src/repository/pgf.rs b/webserver/src/repository/pgf.rs new file mode 100644 index 000000000..e88ad323f --- /dev/null +++ b/webserver/src/repository/pgf.rs @@ -0,0 +1,69 @@ +use axum::async_trait; +use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl, SelectableHelper}; +use orm::pgf::PublicGoodFundingPaymentDb; +use orm::schema::public_good_funding; + +use super::utils::{Paginate, PaginatedResponseDb}; +use crate::appstate::AppState; + +#[derive(Clone)] +pub struct PgfRepo { + pub(crate) app_state: AppState, +} + +#[async_trait] +pub trait PgfRepoTrait { + fn new(app_state: AppState) -> Self; + + async fn get_pgf_continuous_payments( + &self, + page: i64, + ) -> Result, String>; + + async fn find_pgf_payment_by_proposal_id( + &self, + proposal_id: i32, + ) -> Result, String>; +} + +#[async_trait] +impl PgfRepoTrait for PgfRepo { + fn new(app_state: AppState) -> Self { + Self { app_state } + } + + async fn get_pgf_continuous_payments( + &self, + page: i64, + ) -> Result, String> { + let conn = self.app_state.get_db_connection().await; + + conn.interact(move |conn| { + public_good_funding::table + .select(PublicGoodFundingPaymentDb::as_select()) + .order(public_good_funding::columns::proposal_id.desc()) + .paginate(page) + .load_and_count_pages(conn) + }) + .await + .map_err(|e| e.to_string())? + .map_err(|e| e.to_string()) + } + + async fn find_pgf_payment_by_proposal_id( + &self, + proposal_id: i32, + ) -> Result, String> { + let conn = self.app_state.get_db_connection().await; + + conn.interact(move |conn| { + public_good_funding::table + .find(proposal_id) + .select(PublicGoodFundingPaymentDb::as_select()) + .first(conn) + .ok() + }) + .await + .map_err(|e| e.to_string()) + } +} diff --git a/webserver/src/repository/pos.rs b/webserver/src/repository/pos.rs index e623b045f..23c2ee883 100644 --- a/webserver/src/repository/pos.rs +++ b/webserver/src/repository/pos.rs @@ -13,7 +13,7 @@ use orm::pos_rewards::PoSRewardDb; use orm::schema::{bonds, crawler_state, pos_rewards, unbonds, validators}; use orm::unbond::UnbondDb; use orm::validators::{ - validator_sort_by, ValidatorDb, ValidatorSortByDb, ValidatorStateDb, + ValidatorDb, ValidatorSortByDb, ValidatorStateDb, validator_sort_by, }; use super::utils::{Paginate, PaginatedResponseDb}; diff --git a/webserver/src/response/api.rs b/webserver/src/response/api.rs index 63a9741c4..316acfe2a 100644 --- a/webserver/src/response/api.rs +++ b/webserver/src/response/api.rs @@ -1,6 +1,6 @@ +use axum::Json; use axum::http::StatusCode; use axum::response::{IntoResponse, Response}; -use axum::Json; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)] diff --git a/webserver/src/response/crawler_state.rs b/webserver/src/response/crawler_state.rs index 03761b08d..9ff756d76 100644 --- a/webserver/src/response/crawler_state.rs +++ b/webserver/src/response/crawler_state.rs @@ -5,5 +5,5 @@ use serde::{Deserialize, Serialize}; pub struct CrawlersTimestamps { pub name: String, pub timestamp: i64, - pub last_processed_block_height: i32, + pub last_processed_block_height: Option, } diff --git a/webserver/src/response/governance.rs b/webserver/src/response/governance.rs index 2ee122940..4162d1f9d 100644 --- a/webserver/src/response/governance.rs +++ b/webserver/src/response/governance.rs @@ -7,6 +7,8 @@ use orm::governance_proposal::{ }; use orm::governance_votes::{GovernanceProposalVoteDb, GovernanceVoteKindDb}; use serde::{Deserialize, Serialize}; +use sha256::digest; +use subtle_encoding::hex; use super::utils::{epoch_progress, time_between_epochs}; @@ -183,12 +185,20 @@ impl Proposal { TallyType::LessOneHalfOverOneThirdNay } }, - data: value.data, + data: match value.kind { + GovernanceProposalKindDb::DefaultWithWasm => { + value.data.map(|data| { + let hex_decoded_bytes = + hex::decode(data).unwrap_or_default(); + digest(hex_decoded_bytes) + }) + } + _ => value.data, + }, author: value.author, start_epoch: value.start_epoch.to_string(), end_epoch: value.end_epoch.to_string(), activation_epoch: value.activation_epoch.to_string(), - start_time: start_time.to_string(), end_time: end_time.to_string(), current_time: time_now.to_string(), diff --git a/webserver/src/response/mod.rs b/webserver/src/response/mod.rs index 980eb325d..8215c6410 100644 --- a/webserver/src/response/mod.rs +++ b/webserver/src/response/mod.rs @@ -6,6 +6,7 @@ pub mod crawler_state; pub mod gas; pub mod governance; pub mod ibc; +pub mod pgf; pub mod pos; pub mod revealed_pk; pub mod transaction; diff --git a/webserver/src/response/pgf.rs b/webserver/src/response/pgf.rs new file mode 100644 index 000000000..9d2f2ee07 --- /dev/null +++ b/webserver/src/response/pgf.rs @@ -0,0 +1,44 @@ +use orm::pgf::{PaymentKindDb, PaymentRecurrenceDb}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub enum PaymentRecurrence { + Retro, + Continuous, +} + +impl From for PaymentRecurrence { + fn from(value: PaymentRecurrenceDb) -> Self { + match value { + PaymentRecurrenceDb::Continuous => Self::Continuous, + PaymentRecurrenceDb::Retro => Self::Retro, + } + } +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub enum PaymentKind { + Native, + Ibc, +} + +impl From for PaymentKind { + fn from(value: PaymentKindDb) -> Self { + match value { + PaymentKindDb::Ibc => Self::Ibc, + PaymentKindDb::Native => Self::Native, + } + } +} + +#[derive(Clone, Debug, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct PgfPayment { + pub payment_recurrence: PaymentRecurrence, + pub proposal_id: i32, + pub payment_kind: PaymentKind, + pub receipient: String, + pub amount: String, +} diff --git a/webserver/src/service/crawler_state.rs b/webserver/src/service/crawler_state.rs index a9fe00512..7fd74df57 100644 --- a/webserver/src/service/crawler_state.rs +++ b/webserver/src/service/crawler_state.rs @@ -49,9 +49,7 @@ impl CrawlerStateService { .map(|crawler| CrawlersTimestamps { name: crawler.name.to_string(), timestamp: crawler.timestamp.and_utc().timestamp(), - last_processed_block_height: crawler - .last_processed_block - .unwrap_or(1), + last_processed_block_height: crawler.last_processed_block, }) .collect::>() }) diff --git a/webserver/src/service/gas.rs b/webserver/src/service/gas.rs index 82b197d65..02d1a1ceb 100644 --- a/webserver/src/service/gas.rs +++ b/webserver/src/service/gas.rs @@ -52,6 +52,7 @@ impl GasService { #[allow(clippy::too_many_arguments)] pub async fn estimate_gas( &self, + token: String, bond: u64, redelegate: u64, claim_rewards: u64, @@ -70,6 +71,7 @@ impl GasService { let (min, max, avg, count) = self .gas_repo .find_gas_estimates( + token, bond, redelegate, claim_rewards, diff --git a/webserver/src/service/governance.rs b/webserver/src/service/governance.rs index fb12653ed..02dcf626f 100644 --- a/webserver/src/service/governance.rs +++ b/webserver/src/service/governance.rs @@ -68,6 +68,19 @@ impl GovernanceService { )) } + pub async fn find_proposal_data( + &self, + proposal_id: u64, + ) -> Result>, GovernanceError> { + let db_proposal = self + .governance_repo + .find_governance_proposals_by_id(proposal_id as i32) + .await + .map_err(GovernanceError::Database)?; + + Ok(db_proposal.map(|proposal| proposal.data)) + } + pub async fn find_all_governance_proposals( &self, status: Option, diff --git a/webserver/src/service/mod.rs b/webserver/src/service/mod.rs index 1178a89f7..6e61b6107 100644 --- a/webserver/src/service/mod.rs +++ b/webserver/src/service/mod.rs @@ -5,6 +5,7 @@ pub mod crawler_state; pub mod gas; pub mod governance; pub mod ibc; +pub mod pgf; pub mod pos; pub mod revealed_pk; pub mod transaction; diff --git a/webserver/src/service/pgf.rs b/webserver/src/service/pgf.rs new file mode 100644 index 000000000..984489b19 --- /dev/null +++ b/webserver/src/service/pgf.rs @@ -0,0 +1,65 @@ +use crate::appstate::AppState; +use crate::error::pgf::PgfError; +use crate::repository::pgf::{PgfRepo, PgfRepoTrait}; +use crate::response::pgf::{PaymentKind, PaymentRecurrence, PgfPayment}; + +#[derive(Clone)] +pub struct PgfService { + pgf_repo: PgfRepo, +} + +impl PgfService { + pub fn new(app_state: AppState) -> Self { + Self { + pgf_repo: PgfRepo::new(app_state.clone()), + } + } + + pub async fn get_all_pgf_payments( + &self, + page: u64, + ) -> Result<(Vec, u64, u64), PgfError> { + let (payments, total_pages, total_items) = self + .pgf_repo + .get_pgf_continuous_payments(page as i64) + .await + .map_err(PgfError::Database)?; + + let payments = payments + .into_iter() + .map(|payment| PgfPayment { + payment_recurrence: PaymentRecurrence::from( + payment.payment_recurrence, + ), + proposal_id: payment.proposal_id, + payment_kind: PaymentKind::from(payment.payment_kind), + receipient: payment.receipient, + amount: payment.amount.to_string(), + }) + .collect(); + + Ok((payments, total_pages as u64, total_items as u64)) + } + + pub async fn find_pfg_payment_by_proposal_id( + &self, + proposal_id: u64, + ) -> Result, PgfError> { + let payment = self + .pgf_repo + .find_pgf_payment_by_proposal_id(proposal_id as i32) + .await + .map_err(PgfError::Database)? + .map(|payment| PgfPayment { + payment_recurrence: PaymentRecurrence::from( + payment.payment_recurrence, + ), + proposal_id: payment.proposal_id, + payment_kind: PaymentKind::from(payment.payment_kind), + receipient: payment.receipient, + amount: payment.amount.to_string(), + }); + + Ok(payment) + } +} diff --git a/webserver/src/state/common.rs b/webserver/src/state/common.rs index f4a9363bd..01a24bb48 100644 --- a/webserver/src/state/common.rs +++ b/webserver/src/state/common.rs @@ -9,6 +9,7 @@ use crate::service::crawler_state::CrawlerStateService; use crate::service::gas::GasService; use crate::service::governance::GovernanceService; use crate::service::ibc::IbcService; +use crate::service::pgf::PgfService; use crate::service::pos::PosService; use crate::service::revealed_pk::RevealedPkService; use crate::service::transaction::TransactionService; @@ -23,6 +24,7 @@ pub struct CommonState { pub revealed_pk_service: RevealedPkService, pub gas_service: GasService, pub transaction_service: TransactionService, + pub pgf_service: PgfService, pub crawler_state_service: CrawlerStateService, pub ibc_service: IbcService, pub client: HttpClient, @@ -39,6 +41,7 @@ impl CommonState { chain_service: ChainService::new(data.clone()), revealed_pk_service: RevealedPkService::new(data.clone()), gas_service: GasService::new(data.clone()), + pgf_service: PgfService::new(data.clone()), transaction_service: TransactionService::new(data.clone()), crawler_state_service: CrawlerStateService::new(data.clone()), ibc_service: IbcService::new(data.clone()),