From fe1cd530eae93b137d7ddbeecfabcd540288fd20 Mon Sep 17 00:00:00 2001 From: Ian Joiner <14581281+iajoiner@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:41:31 -0400 Subject: [PATCH] feat: bump PoSQL to 0.33.5 && switch to loading of verifier setup from file --- Cargo.lock | 363 ++++++++++++++++++++------------------------- Cargo.toml | 4 +- src/main.rs | 11 +- src/substrate.rs | 26 +--- verifier_setup.bin | Bin 0 -> 27312 bytes 5 files changed, 169 insertions(+), 235 deletions(-) create mode 100644 verifier_setup.bin diff --git a/Cargo.lock b/Cargo.lock index abee1b4..11594ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] @@ -73,9 +73,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" [[package]] name = "ark-bls12-381" @@ -585,9 +585,9 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -596,13 +596,13 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -613,13 +613,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -654,9 +654,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" @@ -742,12 +742,6 @@ 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 = "beef" version = "0.5.2" @@ -778,8 +772,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" dependencies = [ "bitcoin_hashes", - "serde", - "unicode-normalization", ] [[package]] @@ -969,22 +961,22 @@ checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" +checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -995,15 +987,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "cc" -version = "1.1.21" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" dependencies = [ "shlex", ] @@ -1150,9 +1142,9 @@ dependencies = [ [[package]] name = "critical-section" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64009896348fc5af4222e9cf7d7d82a95a256c634ebcf61c53e4ea461422242" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[package]] name = "crossbeam-deque" @@ -1262,7 +1254,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1310,7 +1302,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.11.1", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1332,7 +1324,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core 0.20.10", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1354,7 +1346,7 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1367,7 +1359,27 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.77", + "syn 2.0.82", +] + +[[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.82", ] [[package]] @@ -1685,7 +1697,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -1762,15 +1774,14 @@ version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" dependencies = [ - "rand", "rand_core 0.6.4", ] [[package]] name = "gimli" -version = "0.31.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "h2" @@ -1966,9 +1977,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1978,9 +1989,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -2264,7 +2275,7 @@ dependencies = [ "http 1.1.0", "jsonrpsee-core 0.23.2", "pin-project", - "rustls 0.23.13", + "rustls 0.23.15", "rustls-pki-types", "rustls-platform-verifier", "soketto 0.8.0", @@ -2493,9 +2504,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.158" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libm" @@ -2782,18 +2793,18 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" @@ -2862,17 +2873,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "password-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "paste" version = "1.0.15" @@ -2886,7 +2886,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", - "password-hash", ] [[package]] @@ -2922,22 +2921,22 @@ checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3019,12 +3018,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.22" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +checksum = "910d41a655dac3b764f1ade94821093d3610248694320cd072303a8eedcf221d" dependencies = [ "proc-macro2", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3085,18 +3084,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] [[package]] name = "proof-of-sql" -version = "0.28.10" +version = "0.33.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebb98863a7bf22a17fa8b6f3ad19b9bfc484921ea7d7bb522b262732acd00c1" +checksum = "19e62b4f98ce028082e7dfd89d8e3a5d025caee5dc169f78347b53a79aa73ed0" dependencies = [ "ahash", "ark-bls12-381", @@ -3116,7 +3115,7 @@ dependencies = [ "bytemuck", "chrono", "curve25519-dalek", - "derive_more", + "derive_more 0.99.18", "indexmap 2.6.0", "itertools 0.13.0", "merlin 2.0.1", @@ -3128,6 +3127,7 @@ dependencies = [ "serde", "serde_json", "snafu", + "sqlparser", "tiny-keccak", "tracing", "zerocopy", @@ -3135,9 +3135,9 @@ dependencies = [ [[package]] name = "proof-of-sql-parser" -version = "0.28.10" +version = "0.33.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fab33b18cc7296b8bc4fa0d15cd9db884b2994410237309e696ef641e5f0a50c" +checksum = "1567a03746bcbcb3772e5363b2c2fc1b5e5c737578365198c70474927264c454" dependencies = [ "arrayvec 0.7.6", "bigdecimal", @@ -3175,7 +3175,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.77", + "syn 2.0.82", "tempfile", ] @@ -3189,7 +3189,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -3293,18 +3293,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", @@ -3314,9 +3314,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -3325,9 +3325,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -3453,9 +3453,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.13" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ "log", "once_cell", @@ -3485,7 +3485,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.3", + "rustls-pemfile 2.2.0", "rustls-pki-types", "schannel", "security-framework", @@ -3502,19 +3502,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-platform-verifier" @@ -3527,7 +3526,7 @@ dependencies = [ "jni", "log", "once_cell", - "rustls 0.23.13", + "rustls 0.23.15", "rustls-native-certs 0.7.3", "rustls-platform-verifier-android", "rustls-webpki 0.102.8", @@ -3566,9 +3565,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ruzstd" @@ -3577,7 +3576,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" dependencies = [ "byteorder", - "derive_more", + "derive_more 0.99.18", "twox-hash", ] @@ -3614,7 +3613,7 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" dependencies = [ - "derive_more", + "derive_more 0.99.18", "parity-scale-codec", "primitive-types", "scale-bits", @@ -3641,7 +3640,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528464e6ae6c8f98e2b79633bf79ef939552e795e316579dab09c61670d56602" dependencies = [ - "derive_more", + "derive_more 0.99.18", "parity-scale-codec", "primitive-types", "scale-bits", @@ -3660,18 +3659,18 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "scale-info" -version = "2.11.3" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca070c12893629e2cc820a9761bedf6ce1dcddc9852984d1dc734b8bd9bd024" +checksum = "22760a375f81a31817aeaf6f5081e9ccb7ffd7f2da1809a6e3fc82b6656f10d5" dependencies = [ "bitvec", "cfg-if", - "derive_more", + "derive_more 1.0.0", "parity-scale-codec", "scale-info-derive", "serde", @@ -3679,9 +3678,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.11.3" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d35494501194174bda522a32605929eefc9ecf7e0a326c26db1fdd85881eb62" +checksum = "abc61ebe25a5c410c0e245028fc9934bf8fa4817199ef5a24a68092edfd34614" dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", @@ -3708,7 +3707,7 @@ dependencies = [ "proc-macro2", "quote", "scale-info", - "syn 2.0.77", + "syn 2.0.82", "thiserror", ] @@ -3720,7 +3719,7 @@ checksum = "8cd6ab090d823e75cfdb258aad5fe92e13f2af7d04b43a55d607d25fcc38c811" dependencies = [ "base58", "blake2", - "derive_more", + "derive_more 0.99.18", "either", "frame-metadata 15.1.0", "parity-scale-codec", @@ -3735,9 +3734,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ "windows-sys 0.59.0", ] @@ -3777,33 +3776,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "secp256k1" -version = "0.28.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" -dependencies = [ - "secp256k1-sys", -] - -[[package]] -name = "secp256k1-sys" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" -dependencies = [ - "cc", -] - -[[package]] -name = "secrecy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" -dependencies = [ - "zeroize", -] - [[package]] name = "security-framework" version = "2.11.1" @@ -3836,9 +3808,9 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.210" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" dependencies = [ "serde_derive", ] @@ -3854,20 +3826,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "itoa", "memchr", @@ -4025,7 +3997,7 @@ dependencies = [ "bs58", "chacha20", "crossbeam-queue", - "derive_more", + "derive_more 0.99.18", "ed25519-zebra", "either", "event-listener 4.0.3", @@ -4075,7 +4047,7 @@ dependencies = [ "async-lock", "base64 0.21.7", "blake2-rfc", - "derive_more", + "derive_more 0.99.18", "either", "event-listener 4.0.3", "fnv", @@ -4119,7 +4091,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4185,6 +4157,15 @@ dependencies = [ "lock_api", ] +[[package]] +name = "sqlparser" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7bbffee862a796d67959a89859d6b1046bb5016d63e23835ad0da182777bbe0" +dependencies = [ + "log", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4280,16 +4261,16 @@ dependencies = [ "scale-info", "scale-typegen", "subxt-metadata", - "syn 2.0.77", + "syn 2.0.82", "thiserror", "tokio", ] [[package]] name = "subxt-core" -version = "0.37.0" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59f41eb2e2eea6ed45649508cc735f92c27f1fcfb15229e75f8270ea73177345" +checksum = "3af3b36405538a36b424d229dc908d1396ceb0994c90825ce928709eac1a159a" dependencies = [ "base58", "blake2", @@ -4341,7 +4322,7 @@ dependencies = [ "quote", "scale-typegen", "subxt-codegen", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4357,28 +4338,6 @@ dependencies = [ "sp-crypto-hashing", ] -[[package]] -name = "subxt-signer" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" -dependencies = [ - "bip39", - "cfg-if", - "hex", - "hmac 0.12.1", - "parity-scale-codec", - "pbkdf2", - "regex", - "schnorrkel", - "secp256k1", - "secrecy", - "sha2 0.10.8", - "sp-crypto-hashing", - "subxt-core", - "zeroize", -] - [[package]] name = "sxt-proof-of-sql-sdk" version = "0.1.0" @@ -4393,7 +4352,6 @@ dependencies = [ "prost-build", "serde", "subxt", - "subxt-signer", "tokio", "tonic", "tonic-build", @@ -4412,9 +4370,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021" dependencies = [ "proc-macro2", "quote", @@ -4456,9 +4414,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -4479,22 +4437,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.64" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.64" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4523,9 +4481,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" dependencies = [ "backtrace", "bytes", @@ -4555,7 +4513,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4585,7 +4543,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.13", + "rustls 0.23.15", "rustls-pki-types", "tokio", ] @@ -4663,7 +4621,7 @@ dependencies = [ "pin-project", "prost", "rustls-native-certs 0.7.3", - "rustls-pemfile 2.1.3", + "rustls-pemfile 2.2.0", "rustls-pki-types", "tokio", "tokio-rustls 0.25.0", @@ -4684,7 +4642,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4739,7 +4697,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -4765,7 +4723,6 @@ checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ "cfg-if", "digest 0.10.7", - "rand", "static_assertions", ] @@ -4789,9 +4746,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" @@ -4801,9 +4758,9 @@ checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] @@ -4900,7 +4857,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", "wasm-bindgen-shared", ] @@ -4934,7 +4891,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5271,7 +5228,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] [[package]] @@ -5291,5 +5248,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.82", ] diff --git a/Cargo.toml b/Cargo.toml index 0847af3..b38bdda 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,8 +8,8 @@ ark-serialize = { version = "0.4.0", default-features = false } flexbuffers = { version = "2.0.0" } futures = { version = "0.3.31"} postcard = { version = "1.0.10", default-features = false } -proof-of-sql = { version = "0.28.10"} -proof-of-sql-parser = { version = "0.28.10" } +proof-of-sql = { version = "0.33.5"} +proof-of-sql-parser = { version = "0.33.5" } prost = "0.12" serde = { version = "1.0", features = ["serde_derive"] } subxt = "0.37.0" diff --git a/src/main.rs b/src/main.rs index 293392a..76778cd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ use proof_of_sql::{ sql::{parse::QueryExpr, proof::VerifiableQueryResult}, }; use prover::{prover_client::ProverClient, ProverContextRange, ProverQuery}; -use std::collections::HashMap; +use std::{collections::HashMap, path::Path}; mod prover { tonic::include_proto!("sxt.core"); @@ -18,16 +18,15 @@ mod prover { #[tokio::main] async fn main() -> Result<(), Box> { let sql = "SELECT * FROM ethereum.contract_evt_approvalforall;"; - let prover_uri = ""; - let substrate_node_url = ""; + let prover_uri = ""; + let substrate_node_url = ""; // Dory setup let sigma = 12; - let public_parameters = substrate::try_get_public_parameters(substrate_node_url).await?; - let verifier_setup = VerifierSetup::from(&public_parameters); + let verifier_setup = VerifierSetup::load_from_file(Path::new("verifier_setup.bin"))?; let dory_verifier_setup = DoryVerifierPublicSetup::new(&verifier_setup, sigma); // Accessor setup let accessor = substrate::query_commitments( - &["ETHEREUM".parse()?, "CONTRACT_EVT_APPROVALFORALL".parse()?], + &["ETHEREUM.CONTRACT_EVT_APPROVALFORALL".parse()?], substrate_node_url, ) .await?; diff --git a/src/substrate.rs b/src/substrate.rs index b66771a..d0ae5aa 100644 --- a/src/substrate.rs +++ b/src/substrate.rs @@ -1,5 +1,4 @@ use crate::sxt_chain_runtime::api::{ - commitments::storage::types::stored_public_parameters::StoredPublicParameters, runtime_types::{ bounded_collections::bounded_vec::BoundedVec, proof_of_sql_commitment_map::{ @@ -9,14 +8,13 @@ use crate::sxt_chain_runtime::api::{ }, storage, }; -use ark_serialize::{CanonicalDeserialize, Compress, Validate}; use futures::future::try_join_all; use proof_of_sql::{ base::{ commitment::{QueryCommitments, TableCommitment}, database::TableRef, }, - proof_primitive::dory::{DoryCommitment, PublicParameters}, + proof_primitive::dory::DoryCommitment, }; use proof_of_sql_parser::{Identifier, ResourceId}; use subxt::{OnlineClient, PolkadotConfig}; @@ -42,7 +40,7 @@ pub async fn query_commitments( resource_ids: &[ResourceId], url: &str, ) -> Result, Box> { - let api = OnlineClient::::from_url(url).await?; + let api = OnlineClient::::from_insecure_url(url).await?; // Create a collection of futures let futures = resource_ids.iter().map(|id| { @@ -75,23 +73,3 @@ pub async fn query_commitments( .collect::>(); Ok(results) } - -/// Obtain stored [`PublicParameters`] from the commitments pallet -pub async fn try_get_public_parameters( - url: &str, -) -> Result> { - let api = OnlineClient::::from_url(url).await?; - let public_parameters_query = storage().commitments().stored_public_parameters(); - let public_parameters_bytes: StoredPublicParameters = api - .storage() - .at_latest() - .await? - .fetch(&public_parameters_query) - .await? - .ok_or("Commitment not found")?; - Ok(PublicParameters::deserialize_with_mode( - &*public_parameters_bytes.data.0, - Compress::No, - Validate::No, - )?) -} diff --git a/verifier_setup.bin b/verifier_setup.bin new file mode 100644 index 0000000000000000000000000000000000000000..5d83d22c63b843669ae3f7cef4c69665f1de8aac GIT binary patch literal 27312 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