diff --git a/.github/workflows/dispatch_to_docs.yml b/.github/workflows/dispatch_to_docs.yml index 766fac860..c013e3c60 100644 --- a/.github/workflows/dispatch_to_docs.yml +++ b/.github/workflows/dispatch_to_docs.yml @@ -2,16 +2,23 @@ name: Send event to rebuild docs on: push: - branches: [dev, master] + branches: [master] jobs: dispatch: runs-on: ubuntu-latest steps: - - name: Dispatch event to docs repo - uses: peter-evans/repository-dispatch@v2 - with: + - name: Wait for prod deploy to succeed + uses: lewagon/wait-on-check-action@v1.0.0 + with: + ref: master + check-name: GraphQL server + repo-token: ${{ secrets.GITHUB_TOKEN }} + wait-interval: 20 + - name: Dispatch event to docs repo + uses: peter-evans/repository-dispatch@v2 + with: token: ${{ secrets.DOCS_REPO_ACCESS_TOKEN }} repository: holaplex/marketplace-api-docs event-type: api_update - client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}' + diff --git a/.gitignore b/.gitignore index 21fb95e25..c73db7f5e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ /target .env.local -.DS_Store \ No newline at end of file +.DS_Store diff --git a/Cargo.lock b/Cargo.lock index 791b9cd95..a2ed76345 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,9 +31,9 @@ dependencies = [ [[package]] name = "actix-cors" -version = "0.6.0-beta.8" +version = "0.6.0-beta.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4f1bd0e31c745df129f0e94efd374d21f2a455bcc386c15d78ed9a9e7d4dd50" +checksum = "8debd30414af03e9411186aac95e0230b0bb1e91146f48015dfab5c049940223" dependencies = [ "actix-service", "actix-utils", @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.0.0-beta.19" +version = "3.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae58d21721388ea9b2cd0d4c11756b0f34424cdcd6e5cc74c3ce37b4641c8af0" +checksum = "08aac516b88cb8cfbfa834c76b58607ffac75946d947dcb6a9ffc5673e1e875d" dependencies = [ "actix-codec", "actix-rt", @@ -69,14 +69,14 @@ dependencies = [ "http", "httparse", "httpdate", - "itoa 1.0.1", + "itoa", "language-tags", "local-channel", "log", "mime", "percent-encoding", "pin-project-lite", - "rand 0.8.4", + "rand 0.8.5", "sha-1", "smallvec", "zstd", @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "actix-router" -version = "0.5.0-rc.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e0b59ad08167ffbb686ddb495846707231e96908b829b1fc218198ec581e2ad" +checksum = "eb60846b52c118f2f04a56cc90880a274271c489b2498623d58176f8ca21fa80" dependencies = [ "bytestring", "firestorm", @@ -108,31 +108,30 @@ dependencies = [ [[package]] name = "actix-rt" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf3f2183be1241ed4dd22611850b85d38de0b08a09f1f7bcccbd0809084b359" +checksum = "7ea16c295198e958ef31930a6ef37d0fb64e9ca3b6116e6b93a8bdae96ee1000" dependencies = [ - "actix-macros", "futures-core", "tokio", ] [[package]] name = "actix-server" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9e7472ac180abb0a8e592b653744345983a7a14f44691c8394a799d0df4dbbf" +checksum = "0da34f8e659ea1b077bb4637948b815cd3768ad5a188fdcd74ff4d84240cd824" dependencies = [ "actix-rt", "actix-service", "actix-utils", "futures-core", "futures-util", - "log", - "mio 0.8.0", + "mio", "num_cpus", "socket2", "tokio", + "tracing", ] [[package]] @@ -158,9 +157,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.0.0-beta.21" +version = "4.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "606fc29a9bde2907243086ceb93ce56df7584276c2c46abc64a524f645c63c5e" +checksum = "73170d019de2d82c0d826c1f315c3106134bd764e9247505ba6f0d78d22dfe9e" dependencies = [ "actix-codec", "actix-http", @@ -179,7 +178,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "itoa 1.0.1", + "itoa", "language-tags", "log", "mime", @@ -191,15 +190,15 @@ dependencies = [ "serde_urlencoded", "smallvec", "socket2", - "time 0.3.7", + "time 0.3.9", "url", ] [[package]] name = "actix-web-codegen" -version = "0.5.0-rc.1" +version = "0.5.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a793e4a7bd059e06e1bc1bd9943b57a47f806de3599d2437441682292c333e" +checksum = "4d0976042e6ddc82c7d0dedd64d39959bc26d9bba098b2f6c32a73fbef784eaf" dependencies = [ "actix-router", "proc-macro2", @@ -228,7 +227,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.4", + "getrandom 0.2.6", "once_cell", "version_check", ] @@ -832,9 +831,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.52" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84450d0b4a8bd1ba4144ce8ce718fbc5d071358b1e5384bace6536b3d1f2d5b3" +checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" [[package]] name = "arrayref" @@ -918,9 +917,9 @@ dependencies = [ [[package]] name = "async-global-executor" -version = "2.0.2" +version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" +checksum = "c026b7e44f1316b567ee750fea85103f87fcb80792b860e979f221259796ca0a" dependencies = [ "async-channel", "async-executor", @@ -964,9 +963,9 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" +checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" dependencies = [ "event-listener", ] @@ -1022,9 +1021,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" +checksum = "52580991739c5cdb36cde8b2a516371c0a3b70dda36d916cc08b82372916808c" dependencies = [ "async-channel", "async-global-executor", @@ -1049,15 +1048,15 @@ dependencies = [ [[package]] name = "async-task" -version = "4.0.3" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" +checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" dependencies = [ "proc-macro2", "quote", @@ -1083,15 +1082,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.63" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" +checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" dependencies = [ "addr2line", "cc", @@ -1174,9 +1173,9 @@ dependencies = [ [[package]] name = "blake3" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882e99e4a0cb2ae6cb6e442102e8e6b7131718d94110e64c3e6a34ea9b106f37" +checksum = "a08e53fc5a564bb15bfe6fae56bd71522205f1f91893f9c0116edad6496c183f" dependencies = [ "arrayref", "arrayvec 0.7.2", @@ -1198,9 +1197,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.0" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95" +checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" dependencies = [ "generic-array", ] @@ -1213,18 +1212,18 @@ checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] name = "block-padding" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5808df4b2412175c4db3afb115c83d8d0cd26ca4f30a042026cddef8580e526a" +checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78" dependencies = [ "generic-array", ] [[package]] name = "blocking" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046e47d4b2d391b1f6f8b407b1deb8dee56c1852ccd868becf2710f601b5f427" +checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc" dependencies = [ "async-channel", "async-task", @@ -1347,9 +1346,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.7.3" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f" +checksum = "0e851ca7c24871e7336801608a4797d7376545b6928a10d32d75685687141ead" dependencies = [ "bytemuck_derive", ] @@ -1415,18 +1414,18 @@ checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" [[package]] name = "cbc" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2c68b1d4a461fc5641967e1b255c976579a87ef000c043850ca1aff89faa128" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" dependencies = [ "cipher", ] [[package]] name = "cc" -version = "1.0.72" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" dependencies = [ "jobserver", ] @@ -1480,9 +1479,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.0.7" +version = "3.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12e8611f9ae4e068fa3e56931fded356ff745e70987ff76924a6e0ab1c8ef2e3" +checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123" dependencies = [ "atty", "bitflags", @@ -1497,9 +1496,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.0.6" +version = "3.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "517358c28fcef6607bf6f76108e02afad7e82297d132a6b846dcc1fc3efcd153" +checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16" dependencies = [ "heck 0.4.0", "proc-macro-error", @@ -1569,7 +1568,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" dependencies = [ "percent-encoding", - "time 0.3.7", + "time 0.3.9", "version_check", ] @@ -1581,9 +1580,9 @@ checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" [[package]] name = "core-foundation" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -1597,27 +1596,27 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "crossbeam-channel" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -1636,10 +1635,11 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.6" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97242a70df9b89a65d0b6df3c4bf5b9ce03c5b7309019777fbde37e7537f8762" +checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" dependencies = [ + "autocfg", "cfg-if 1.0.0", "crossbeam-utils", "lazy_static", @@ -1649,9 +1649,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcae03edb34f947e64acdb1c33ec169824e20657e9ecb61cef6c8c74dcb8120" +checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ "cfg-if 1.0.0", "lazy_static", @@ -1705,9 +1705,9 @@ dependencies = [ [[package]] name = "ctor" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" +checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" dependencies = [ "quote", "syn", @@ -1715,9 +1715,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" dependencies = [ "byteorder", "digest 0.9.0", @@ -1910,7 +1910,7 @@ version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" dependencies = [ - "block-buffer 0.10.0", + "block-buffer 0.10.2", "crypto-common", "subtle", ] @@ -1938,9 +1938,9 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "ed25519" -version = "1.3.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74e1069e39f1454367eb2de793ed062fac4c35c2934b76a81d90dd9abcd28816" +checksum = "3d5c4b5e5959dc2c2b89918d8e2cc40fcdd623cef026ed09d2f0ee05199dc8e4" dependencies = [ "signature", ] @@ -2002,9 +2002,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" [[package]] name = "executor-trait" @@ -2039,9 +2039,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2" +checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" dependencies = [ "instant", ] @@ -2084,9 +2084,9 @@ dependencies = [ [[package]] name = "flume" -version = "0.10.11" +version = "0.10.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b279436a715a9de95dcd26b151db590a71961cc06e54918b24fe0dd5b7d3fc4" +checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a" dependencies = [ "futures-core", "futures-sink", @@ -2133,9 +2133,9 @@ checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" [[package]] name = "futures" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4" +checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" dependencies = [ "futures-channel", "futures-core", @@ -2246,9 +2246,9 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4addc164932852d066774c405dbbdb7914742d2b39e39e1a7ca949c856d054d1" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" dependencies = [ "libc", "winapi", @@ -2269,9 +2269,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" dependencies = [ "cfg-if 1.0.0", "libc", @@ -2286,15 +2286,14 @@ checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" [[package]] name = "gloo-timers" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f16c88aa13d2656ef20d1c042086b8767bbe2bdb62526894275a1b062161b2e" +checksum = "4d12a7f4e95cfe710f1d624fb1210b7d961a5fb05c4fd942f4feab06e61f590e" dependencies = [ "futures-channel", "futures-core", "js-sys", "wasm-bindgen", - "web-sys", ] [[package]] @@ -2330,9 +2329,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.10" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9de88456263e249e241fcd211d3954e2c9b0ef7ccfc235a444eb367cae3689" +checksum = "62eeb471aa3e3c9197aa4bfeabfe02982f6dc96f750486c0bb0009ac58b26d2b" dependencies = [ "bytes", "fnv", @@ -2452,6 +2451,7 @@ dependencies = [ "graph_program", "holaplex-indexer-core", "holaplex-indexer-rabbitmq", + "hostname", "locked-voter", "metaplex", "metaplex-auction", @@ -2461,7 +2461,6 @@ dependencies = [ "mpl-candy-machine", "mpl-metaplex", "mpl-token-metadata", - "num_cpus", "reqwest", "serde", "serde_json", @@ -2501,7 +2500,8 @@ dependencies = [ "dotenv", "env_logger", "log", - "rand 0.8.4", + "num_cpus", + "rand 0.8.5", "serde_json", "solana-sdk", "strum 0.24.0", @@ -2537,6 +2537,7 @@ dependencies = [ "futures-util", "lapin", "log", + "rand 0.8.5", "rmp-serde", "serde", "solana-sdk", @@ -2551,6 +2552,7 @@ dependencies = [ "anyhow", "bs58 0.4.0", "holaplex-indexer-rabbitmq", + "hostname", "log", "reqwest", "serde", @@ -2566,6 +2568,17 @@ dependencies = [ "spl-token", ] +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi", +] + [[package]] name = "http" version = "0.2.6" @@ -2574,7 +2587,7 @@ checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" dependencies = [ "bytes", "fnv", - "itoa 1.0.1", + "itoa", ] [[package]] @@ -2590,9 +2603,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" +checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" [[package]] name = "httpdate" @@ -2608,9 +2621,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.16" +version = "0.14.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" +checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" dependencies = [ "bytes", "futures-channel", @@ -2621,7 +2634,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 0.4.8", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -2696,7 +2709,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1f03d4ab4d5dc9ec2d219f86c15d2a15fc08239d1cd3b2d6a19717c0a2f443" dependencies = [ - "block-padding 0.3.1", + "block-padding 0.3.2", "generic-array", ] @@ -2711,9 +2724,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" [[package]] name = "itertools" @@ -2724,12 +2737,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.1" @@ -2747,9 +2754,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" dependencies = [ "wasm-bindgen", ] @@ -2811,9 +2818,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "lapin" -version = "2.0.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0ed57ec20c679e1a88af72b412ca05c0d5bb7f21a86d48b325d166792c6ea6" +checksum = "afe666f160ceed00abc310aa2fa58295664cf892ebffc857bbf9b754c78122ce" dependencies = [ "amq-protocol", "async-global-executor-trait", @@ -2839,15 +2846,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.112" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" +checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" [[package]] name = "libloading" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afe203d669ec979b7128619bae5a63b7b42e9203c1b29146079ee05e2f604b52" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" dependencies = [ "cfg-if 1.0.0", "winapi", @@ -2949,14 +2956,20 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" dependencies = [ "cfg-if 1.0.0", "value-bag", ] +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + [[package]] name = "matches" version = "0.1.9" @@ -2977,9 +2990,9 @@ checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memmap2" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe3179b85e1fd8b14447cbebadb75e45a1002f541b925f0bfec366d56a81c56d" +checksum = "057a3db23999c867821a7a59feb06a578fcb03685e983dff90daf9e7d24ac08f" dependencies = [ "libc", ] @@ -3101,27 +3114,15 @@ dependencies = [ [[package]] name = "mio" -version = "0.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" -dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "mio" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" +checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" dependencies = [ "libc", "log", "miow", "ntapi", + "wasi 0.11.0+wasi-snapshot-preview1", "winapi", ] @@ -3150,13 +3151,14 @@ dependencies = [ [[package]] name = "mpl-auction-house" -version = "1.1.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576c926ff7459ac8812bbae0d0ef5a81ffca497e36fd381548f77af2ce15c680" +checksum = "aa20af5ab897705782a5c148ef7536b4ee6d7a64b6c8b7fdb1eaa6f53d4af732" dependencies = [ "anchor-lang 0.20.1", "anchor-spl 0.20.1", "arrayref", + "metaplex-token-metadata", "mpl-token-metadata", "solana-program", "spl-associated-token-account", @@ -3275,7 +3277,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99" dependencies = [ - "proc-macro-crate 1.1.0", + "proc-macro-crate 1.1.3", "proc-macro-error", "proc-macro2", "quote", @@ -3285,9 +3287,9 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" dependencies = [ "lazy_static", "libc", @@ -3303,20 +3305,19 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] name = "ntapi" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" dependencies = [ "winapi", ] @@ -3363,20 +3364,20 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "720d3ea1055e4e4574c0c0b0f8c3fd4f24c4cdaf465948206dea090b57b526ad" +checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.6" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d992b768490d7fe0d8586d9b5745f6c49f557da6d81dc982b1d167ad4edbb21" +checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" dependencies = [ - "proc-macro-crate 1.1.0", + "proc-macro-crate 1.1.3", "proc-macro2", "quote", "syn", @@ -3384,9 +3385,9 @@ dependencies = [ [[package]] name = "num_threads" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ba99ba6393e2c3734791401b66902d981cb03bf190af674ca69949b6d5fb15" +checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" dependencies = [ "libc", ] @@ -3402,9 +3403,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" [[package]] name = "opaque-debug" @@ -3487,7 +3488,7 @@ dependencies = [ "cbc", "cipher", "des", - "getrandom 0.2.4", + "getrandom 0.2.6", "hmac 0.12.1", "lazy_static", "rc2", @@ -3551,9 +3552,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255e53d8d0185d82828358fb5" +checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" [[package]] name = "pbkdf2" @@ -3659,9 +3660,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" +checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" dependencies = [ "thiserror", "toml", @@ -3724,9 +3725,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" +checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" dependencies = [ "proc-macro2", ] @@ -3752,19 +3753,18 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc 0.2.0", + "rand_hc", ] [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.3", - "rand_hc 0.3.1", ] [[package]] @@ -3802,7 +3802,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.4", + "getrandom 0.2.6", ] [[package]] @@ -3814,15 +3814,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core 0.6.3", -] - [[package]] name = "rayon" version = "1.5.1" @@ -3870,18 +3861,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "8ae183fc1b06c149f0c1793e1eb447c8b04bfe46d48e9e48bfb8d2d7ed64ecf0" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.5.4" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" dependencies = [ "aho-corasick", "memchr", @@ -3905,9 +3896,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.9" +version = "0.11.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" +checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" dependencies = [ "async-compression", "base64 0.13.0", @@ -3930,7 +3921,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls", - "rustls-pemfile", + "rustls-pemfile 0.3.0", "serde", "serde_json", "serde_urlencoded", @@ -3973,9 +3964,9 @@ dependencies = [ [[package]] name = "rmp-serde" -version = "1.0.0-beta.2" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d18f64792a930cdb215b849eb75d8d7ffaaf70c3b9bd594b5ccc5ab63b4f70" +checksum = "f3eedffbfcc6a428f230c04baf8f59bd73c1781361e4286111fe900849aaddaf" dependencies = [ "byteorder", "rmp", @@ -3999,9 +3990,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.2" +version = "0.20.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" +checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" dependencies = [ "log", "ring", @@ -4028,7 +4019,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pemfile 0.2.1", "schannel", "security-framework", ] @@ -4042,6 +4033,15 @@ dependencies = [ "base64 0.13.0", ] +[[package]] +name = "rustls-pemfile" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +dependencies = [ + "base64 0.13.0", +] + [[package]] name = "rustversion" version = "1.0.6" @@ -4100,9 +4100,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" +checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" dependencies = [ "bitflags", "core-foundation", @@ -4113,9 +4113,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.4.2" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", @@ -4123,15 +4123,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.4" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" +checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" [[package]] name = "serde" -version = "1.0.133" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a" +checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" dependencies = [ "serde_derive", ] @@ -4147,9 +4147,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.133" +version = "1.0.136" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537" +checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" dependencies = [ "proc-macro2", "quote", @@ -4158,33 +4158,33 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.75" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c059c05b48c5c0067d4b4b2b4f0732dd65feb52daf7e0ea09cd87e7dadc1af79" +checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" dependencies = [ "indexmap", - "itoa 1.0.1", + "itoa", "ryu", "serde", ] [[package]] name = "serde_urlencoded" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 0.4.8", + "itoa", "ryu", "serde", ] [[package]] name = "serde_with" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad6056b4cb69b6e43e3a0f055def223380baecc99da683884f205bf347f7c4b3" +checksum = "ec1e6ec4d8950e5b1e894eac0d360742f3b1407a6078a604a731c4b3f49cefbc" dependencies = [ "rustversion", "serde", @@ -4309,9 +4309,9 @@ dependencies = [ [[package]] name = "smartstring" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31aa6a31c0c2b21327ce875f7e8952322acfcfd0c27569a6e18a647281352c9b" +checksum = "e714dff2b33f2321fdcd475b71cec79781a692d846f37f415fb395a1d2bcd48e" dependencies = [ "static_assertions", ] @@ -4348,9 +4348,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" dependencies = [ "libc", "winapi", @@ -4371,9 +4371,9 @@ dependencies = [ [[package]] name = "solana-account-decoder" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b5eac3181f63bcb2f9d20eaaed7eb8866273a848ee79d4ef0727fc0a59f426" +checksum = "994e8a8e9aed70ebbce13783ee0b4645dd3d47fe9cd308fd31e528fe595d08b3" dependencies = [ "Inflector", "base64 0.12.3", @@ -4394,9 +4394,9 @@ dependencies = [ [[package]] name = "solana-address-lookup-table-program" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fabf475c4225c562174f04c04111ef0dbb7aa79da23a25029fc570130a255a9" +checksum = "861c1d66c733e1def5abca45808413a46202000bd10f3c9c5338ee565fdd5d75" dependencies = [ "bincode", "bytemuck", @@ -4414,9 +4414,9 @@ dependencies = [ [[package]] name = "solana-bloom" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df80d3bdc2a9be76bdcd049657300ad62b4da7132f12252a8f413b64f996b81d" +checksum = "e41b4f3c405805f247cb497960e49eee78796b1e0afc3a769c33813e37076f6d" dependencies = [ "bv", "fnv", @@ -4433,9 +4433,9 @@ dependencies = [ [[package]] name = "solana-bucket-map" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668a632d51fea52f46772dc2d4bf239e82b6914e81f2037b08f11ea99cb5b442" +checksum = "881def5f751dc2d3949a6953bbcd749a031f1161f2c73b93320800b755492f13" dependencies = [ "fs_extra", "log", @@ -4450,9 +4450,9 @@ dependencies = [ [[package]] name = "solana-compute-budget-program" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6576c37b7aa0b33180fd3846de6a3b978868f109345c4e1473b76a9b8a64a65" +checksum = "3f52cfd9f51573d9e974a2f6f91418cc745ec6d43a90d90b2fd095f66578888a" dependencies = [ "solana-program-runtime", "solana-sdk", @@ -4460,9 +4460,9 @@ dependencies = [ [[package]] name = "solana-config-program" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f5936a580565d51bd617915a4ac8ee62b6ed8c82d35d620b977b93b09a4f86e" +checksum = "137c7c8c532b94ac8ee8643d3369e47ad26a4823c96ecce7a76dc85cb4006331" dependencies = [ "bincode", "chrono", @@ -4474,9 +4474,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32bd264fcf01b5e7f6369247a9868164990c3744891901e6657319792ccab29b" +checksum = "f0a9783aac947e789852cbd6f4650521f8f6f744cba5fc0524a8bc104fa11e01" dependencies = [ "bs58 0.4.0", "bv", @@ -4494,9 +4494,9 @@ dependencies = [ [[package]] name = "solana-frozen-abi-macro" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e3c82d0b3a69f4cdf9db2959b461d087e1d0044b034eaee547234daafcb776" +checksum = "f32ebf882f69105e64e283966d9ce0dd22696aec8b8de9bb6b61ea26c7fc896a" dependencies = [ "proc-macro2", "quote", @@ -4521,9 +4521,9 @@ dependencies = [ [[package]] name = "solana-geyser-plugin-interface" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f23fe689f1f1173db3b895135a82f7e676fc07208822df61ededb05a45f4f4" +checksum = "d12be721a265ba5e3eda85cf3779f1db01811a49f286817b209163af329027ce" dependencies = [ "log", "solana-sdk", @@ -4533,9 +4533,9 @@ dependencies = [ [[package]] name = "solana-logger" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5620cd1844bf999141323d434092893b28624a6fef15000265ef372868b153" +checksum = "aa8b0587f360598ef3a9444e05dce63e701a5c008c54101f54707b5f5852ec09" dependencies = [ "env_logger", "lazy_static", @@ -4544,9 +4544,9 @@ dependencies = [ [[package]] name = "solana-measure" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0576dd0d57937d8f7fc65a8fa80757b9abfefef32fc30c57a94400d220188692" +checksum = "b9dac70ec308d0ad9d83750efbb5802b11e65e6de1def5b3b76095648926fdd9" dependencies = [ "log", "solana-sdk", @@ -4554,9 +4554,9 @@ dependencies = [ [[package]] name = "solana-metrics" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a399aeba86cae269b21b27b5940f43b431d802ddfa7e349bc2f7c7c0c12713" +checksum = "4e7689beb2716b7f97fb4b4fc0a25b379e838bf62dd8cb19df89e5249d961b3c" dependencies = [ "env_logger", "gethostname", @@ -4568,14 +4568,14 @@ dependencies = [ [[package]] name = "solana-program" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3894d193b164d62525746d9f06cc377d807f282a78c4f2153de69bbed4fef3" +checksum = "252118d7b708b0bec7e1ec5aeb3397843c8d9dbe8946f04fcebed06c5d3a32c7" dependencies = [ "base64 0.13.0", "bincode", "bitflags", - "blake3 1.3.0", + "blake3 1.3.1", "borsh", "borsh-derive", "bs58 0.4.0", @@ -4611,9 +4611,9 @@ dependencies = [ [[package]] name = "solana-program-runtime" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "429dffedf25c45f7a277c2deea8ebc039a06b07715da544ee01fc9f315a5d9b5" +checksum = "74ba8080c1313b7d25c0b2299ce2f7b72acc5fecd54140bb5bac9238774ce338" dependencies = [ "base64 0.13.0", "bincode", @@ -4635,9 +4635,9 @@ dependencies = [ [[package]] name = "solana-rayon-threadlimit" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bf35b1c40b029494fcb5758cea4e91891be0547193811e8c75cc03ab8e2cb9e" +checksum = "c4ed16e34600bd6a5e62587fb83d4bfb6a555315b031d699bc7ddbc36cc4ebc0" dependencies = [ "lazy_static", "num_cpus", @@ -4645,13 +4645,13 @@ dependencies = [ [[package]] name = "solana-runtime" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "074dad62b090b34c597cfa0a6d294f79262521362a275182dd012efe4f1cf756" +checksum = "2bf609aa4bc1486e7e9b1a83991df204f2977504da8651d9a2ee22ed1ce4969c" dependencies = [ "arrayref", "bincode", - "blake3 1.3.0", + "blake3 1.3.1", "bv", "bytemuck", "byteorder", @@ -4700,9 +4700,9 @@ dependencies = [ [[package]] name = "solana-sdk" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c292b183ccde17be94eba9f167d2d142df65ef89a99471fb6abdb0d128995848" +checksum = "4232f83293b76b7eddf1e7886a6a645177a1d1cf72ccd1f4d3b7f4f3d683119d" dependencies = [ "assert_matches", "base64 0.13.0", @@ -4751,9 +4751,9 @@ dependencies = [ [[package]] name = "solana-sdk-macro" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "918b805a36d7c9a82fec5fb8e425539d45cd7e827168b493a5d995ef988a3edf" +checksum = "6340ca326c8a919575e594a3ca71a380c233ae2615f62acd15c7af4f2aafb21d" dependencies = [ "bs58 0.4.0", "proc-macro2", @@ -4764,9 +4764,9 @@ dependencies = [ [[package]] name = "solana-stake-program" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c25ab417216af63ed8176c50dc620af56b66af10dedb4ad4b207b02f8f37712" +checksum = "4aee1faad18563bc529e83e0c0391082d2c6f342aecff402a0a56e5ee5f1c158" dependencies = [ "bincode", "log", @@ -4787,9 +4787,9 @@ dependencies = [ [[package]] name = "solana-transaction-status" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b040a594f9c422355a1bfa340621d07b6b2424f7bcee08ed8a22198ecbfe703" +checksum = "f26a8016fae6036700dc71ab4abc7934b20958b404be3f47bd97e3dc33cd74ca" dependencies = [ "Inflector", "base64 0.12.3", @@ -4814,9 +4814,9 @@ dependencies = [ [[package]] name = "solana-vote-program" -version = "1.9.14" +version = "1.9.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5b39403e24adcdf0d97b10edc39bfde6cd6967dadd2cb26ef9a58ffc1f0899" +checksum = "c9075f07f9c381bb91f5f3e0d48355e51a672e1b00685031ce394de87c14df37" dependencies = [ "bincode", "log", @@ -4958,9 +4958,9 @@ checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" [[package]] name = "syn" -version = "1.0.85" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7" +checksum = "704df27628939572cd88d33f171cd6f896f4eaca85252c6e0a72d8d8287ee86f" dependencies = [ "proc-macro2", "quote", @@ -4999,7 +4999,7 @@ dependencies = [ "cfg-if 1.0.0", "p12", "rustls-connector", - "rustls-pemfile", + "rustls-pemfile 0.2.1", ] [[package]] @@ -5018,18 +5018,18 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" dependencies = [ "winapi-util", ] [[package]] name = "textwrap" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80" +checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" [[package]] name = "thiserror" @@ -5064,11 +5064,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004cbc98f30fa233c61a38bc77e96a9106e65c88f2d3bef182ae952027e5753d" +checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" dependencies = [ - "itoa 1.0.1", + "itoa", "libc", "num_threads", "time-macros", @@ -5076,9 +5076,9 @@ dependencies = [ [[package]] name = "time-macros" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25eb0ca3468fc0acc11828786797f6ef9aa1555e4a211a60d64cc8e4d1be47d6" +checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" [[package]] name = "tinyvec" @@ -5097,19 +5097,20 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" +checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" dependencies = [ "bytes", "libc", "memchr", - "mio 0.7.14", + "mio", "num_cpus", "once_cell", - "parking_lot 0.11.2", + "parking_lot 0.12.0", "pin-project-lite", "signal-hook-registry", + "socket2", "tokio-macros", "winapi", ] @@ -5162,9 +5163,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.23.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" dependencies = [ "rustls", "tokio", @@ -5213,20 +5214,21 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] name = "tracing" -version = "0.1.29" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" dependencies = [ "cfg-if 1.0.0", + "log", "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" dependencies = [ "lazy_static", ] @@ -5260,9 +5262,9 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" [[package]] name = "unicode-xid" @@ -5293,9 +5295,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "uriparse" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e515b1ada404168e145ac55afba3c42f04cf972201a8552d42e2abb17c1b7221" +checksum = "0200d0fc04d809396c2ad43f3c95da3582a2556eba8d453c1087f4120ee352ff" dependencies = [ "fnv", "lazy_static", @@ -5396,11 +5398,17 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -5408,9 +5416,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" dependencies = [ "bumpalo", "lazy_static", @@ -5423,9 +5431,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -5435,9 +5443,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5445,9 +5453,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" dependencies = [ "proc-macro2", "quote", @@ -5458,15 +5466,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" [[package]] name = "web-sys" -version = "0.3.55" +version = "0.3.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" dependencies = [ "js-sys", "wasm-bindgen", @@ -5576,9 +5584,9 @@ checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" [[package]] name = "winreg" -version = "0.7.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ "winapi", ] @@ -5594,9 +5602,9 @@ dependencies = [ [[package]] name = "yansi" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "yasna" @@ -5606,18 +5614,18 @@ checksum = "346d34a236c9d3e5f3b9b74563f238f955bbd05fa0b8b4efa53c130c43982f4c" [[package]] name = "zeroize" -version = "1.5.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc222aec311c323c717f56060324f32b82da1ce1dd81d9a09aa6a9030bfe08db" +checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a90676969ab854bc7aa5119274d1a138dd796c65fd755f8d30df05acdb4fc4cc" +checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 2867dc55d..b4d03f441 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = ["crates/*"] +resolver = "2" [profile.release] opt-level = 3 diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index d00759773..1d836e64e 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -13,6 +13,19 @@ license = "AGPL-3.0-or-later" keywords = ["solana", "metaplex", "holaplex", "web3"] categories = ["cryptography::cryptocurrencies", "web-programming"] +[features] +assets = [ + "base64", + "cid", +] +db = [ + "diesel", + "diesel_migrations", + "diesel_full_text_search", +] +default = ["assets", "db", "solana"] +solana = ["solana-sdk"] + [dependencies] # Basic utilities anyhow = "1.0.45" @@ -21,6 +34,7 @@ clap = { version = "3.0.7", features = ["derive", "env"] } dotenv = "0.15.0" env_logger = "0.9.0" log = "0.4.14" +num_cpus = "1.13.1" rand = "0.8.4" serde_json = "1.0.70" strum = { version = "0.24.0", features = ["derive"] } @@ -31,14 +45,14 @@ ahash = "0.7.6" dashmap = "4.0.2" # ORM -diesel = { version = "1.4.8", features = ["postgres", "r2d2", "uuidv07", "chrono", "serde_json"] } -diesel_migrations = "1.4.0" -diesel_full_text_search = { version = "1.0.1", git = "https://github.com/diesel-rs/diesel_full_text_search", rev = "886fe85" } +diesel = { version = "1.4.8", features = ["postgres", "r2d2", "uuidv07", "chrono", "serde_json"], optional = true } +diesel_migrations = { version = "1.4.0", optional = true } +diesel_full_text_search = { version = "1.0.1", git = "https://github.com/diesel-rs/diesel_full_text_search", rev = "886fe85", optional = true } # Solana -solana-sdk = "1.8.3" +solana-sdk = { version = "1.9.4", optional = true } # Asset id -base64 = "0.13.0" -cid = "0.7.0" +base64 = { version = "0.13.0", optional = true } +cid = { version = "0.7.0", optional = true } url = "2.2.2" diff --git a/crates/core/src/db/mod.rs b/crates/core/src/db/mod.rs index bcc698eab..e666bb11b 100644 --- a/crates/core/src/db/mod.rs +++ b/crates/core/src/db/mod.rs @@ -97,6 +97,7 @@ pub fn connect(mode: ConnectMode) -> Result<(Pool, ConnectionType)> { let man = ConnectionManager::new(url); let pool = Pool::builder() + .max_size(num_cpus::get().try_into().unwrap_or(u32::MAX)) .min_idle(Some(1)) .idle_timeout(Some(std::time::Duration::from_secs(60))) .build(man) diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 6cd1f1548..b1c284ea2 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -10,19 +10,25 @@ #![feature(iter_intersperse)] // TODO: #[macro_use] is somewhat deprecated, but diesel still relies on it +#[cfg(feature = "db")] #[macro_use] extern crate diesel; +#[cfg(feature = "db")] #[macro_use] extern crate diesel_migrations; pub extern crate chrono; pub extern crate clap; +pub extern crate num_cpus; pub extern crate url; +#[cfg(feature = "assets")] pub mod assets; +#[cfg(feature = "db")] pub mod db; pub mod error; pub mod hash; +#[cfg(feature = "solana")] pub mod pubkeys; pub mod util; @@ -34,6 +40,7 @@ pub mod prelude { }; pub use chrono::{self, prelude::*}; + #[cfg(feature = "db")] pub use diesel::{ debug_query, dsl::{any, exists, not}, @@ -41,6 +48,7 @@ pub mod prelude { pg::Pg, query_dsl::{BelongingToDsl, GroupByDsl, JoinOnDsl, QueryDsl, RunQueryDsl, SaveChangesDsl}, }; + #[cfg(feature = "db")] pub use diesel_full_text_search::{TsQueryExtensions, TsVectorExtensions}; pub use log::{debug, error, info, trace, warn}; diff --git a/crates/geyser-rabbitmq/Cargo.toml b/crates/geyser-rabbitmq/Cargo.toml index 670614c3e..08081253a 100644 --- a/crates/geyser-rabbitmq/Cargo.toml +++ b/crates/geyser-rabbitmq/Cargo.toml @@ -13,12 +13,15 @@ license = "AGPL-3.0-or-later" keywords = ["solana", "metaplex", "holaplex", "web3", "rabbitmq"] categories = ["cryptography::cryptocurrencies", "web-programming"] +build = "build.rs" + [lib] crate_type = ["cdylib", "rlib"] [dependencies] anyhow = "1.0.52" bs58 = "0.4.0" +hostname = "0.3.1" log = "0.4.14" serde = { version = "1.0.133", features = ["derive"] } serde_json = "1.0.75" @@ -26,7 +29,7 @@ serde_with = "1.11.0" smol = "1.2.5" smol-executor-trait = "2.1.0" -solana-geyser-plugin-interface = "1.9.13" +solana-geyser-plugin-interface = "1.9.15" solana-logger = "1.9.4" solana-program = "1.9.4" solana-sdk = "1.9.4" @@ -38,5 +41,5 @@ reqwest = "0.11.6" package = "holaplex-indexer-rabbitmq" version = "=0.1.0" path = "../rabbitmq" -default_features = false +default-features = false features = ["producer", "geyser"] diff --git a/crates/geyser-rabbitmq/build.rs b/crates/geyser-rabbitmq/build.rs new file mode 100644 index 000000000..749ff70e6 --- /dev/null +++ b/crates/geyser-rabbitmq/build.rs @@ -0,0 +1,144 @@ +use std::{ + env, + fmt::Display, + process::{Command, Output}, + str, +}; + +fn run(c: &mut Command, name: impl Display) -> Output { + let output = c.output().unwrap(); + + if !output.status.success() { + str::from_utf8(&*output.stdout) + .map(|s| print!("{}", s)) + .ok(); + str::from_utf8(&*output.stderr) + .map(|s| eprint!("{}", s)) + .ok(); + println!( + "{} exited with code {}", + name, + output + .status + .code() + .map_or_else(|| "???".into(), |s| s.to_string()) + ); + } + + output +} + +fn main() { + for var in &["HOST", "TARGET", "PROFILE"] { + println!( + "cargo:rustc-env=META_BUILD_{}={}", + var, + env::var(var).unwrap() + ); + } + + println!( + "cargo:rustc-env=META_BUILD_PLATFORM=ptr{},{},{}", + env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap(), + env::var("CARGO_CFG_TARGET_ENDIAN").unwrap(), + env::var("CARGO_CFG_TARGET_FEATURE").unwrap(), + ); + + let toplevel = Command::new("git") + .arg("rev-parse") + .arg("--show-toplevel") + .output() + .unwrap(); + + if toplevel.status.success() { + let toplevel = str::from_utf8(&toplevel.stdout).unwrap().trim(); + + let rev = run( + Command::new("git") + .args(&["rev-parse", "--short", "HEAD"]) + .current_dir(toplevel), + "git rev-parse", + ); + + let status = run( + Command::new("git") + .args(&["status", "--porcelain"]) + .current_dir(toplevel), + "git status", + ); + + let ls_files = run( + Command::new("git") + .args(&["ls-files", "--full-name"]) + .current_dir(toplevel), + "git ls-files", + ); + + println!("cargo:rerun-if-changed={}/.git/index", toplevel); + + for file in str::from_utf8(&ls_files.stdout) + .unwrap() + .split('\n') + .map(|f| f.trim()) + { + println!("cargo:rerun-if-changed={}/{}", toplevel, file); + } + + for file in str::from_utf8(&status.stdout) + .unwrap() + .split('\n') + .map(|f| f.trim()) + .filter(|f| f.len() > 2) + .map(|f| f[2..].trim()) + { + println!("cargo:rerun-if-changed={}/{}", toplevel, file); + } + + println!( + "cargo:rustc-env=META_GIT_HEAD={}{}", + str::from_utf8(&rev.stdout).unwrap().trim(), + if status.stdout.is_empty() { + "" + } else { + "-DIRTY" + } + ); + + let branch = run( + Command::new("git").args(&["branch", "--show-current", "--format=%(refname:short)"]), + "git branch", + ); + + let remote = run( + Command::new("git").arg("config").arg(format!( + "branch.{}.remote", + str::from_utf8(&branch.stdout).unwrap().trim() + )), + "git config", + ); + + let remote_url = run( + Command::new("git") + .args(&["remote", "get-url"]) + .arg(str::from_utf8(&remote.stdout).unwrap().trim()), + "git remote", + ); + + println!( + "cargo:rustc-env=META_GIT_REMOTE={}", + str::from_utf8(&remote_url.stdout).unwrap().trim() + ); + + println!("cargo:rerun-if-changed={}/.git/config", toplevel); + } + + let ver = run( + Command::new(env::var("RUSTC").unwrap()).arg("--version"), + "rustc --version", + ); + + println!( + "cargo:rustc-env=META_RUSTC_VERSION={}", + str::from_utf8(&ver.stdout).unwrap().trim() + ); +} diff --git a/crates/geyser-rabbitmq/src/plugin.rs b/crates/geyser-rabbitmq/src/plugin.rs index cb42d0029..67be18ae1 100644 --- a/crates/geyser-rabbitmq/src/plugin.rs +++ b/crates/geyser-rabbitmq/src/plugin.rs @@ -78,8 +78,44 @@ impl GeyserPlugin for GeyserPluginRabbitMq { fn on_load(&mut self, cfg: &str) -> Result<()> { solana_logger::setup_with_default("info"); + let metrics = Metrics::new_rc(); + let version; + let host; + + { + let ver = env!("CARGO_PKG_VERSION"); + let git = option_env!("META_GIT_HEAD"); + // TODO + // let rem = option_env!("META_GIT_REMOTE"); + + { + use std::fmt::Write; + + let mut s = format!("v{}", ver); + + if let Some(git) = git { + write!(s, "+git.{}", git).unwrap(); + } + + version = s; + } + + // TODO + // let rustc_ver = env!("META_RUSTC_VERSION"); + // let build_host = env!("META_BUILD_HOST"); + // let target = env!("META_BUILD_TARGET"); + // let profile = env!("META_BUILD_PROFILE"); + // let platform = env!("META_BUILD_PLATFORM"); + + host = hostname::get() + .map_err(custom_err(&metrics.errs))? + .into_string() + .map_err(|_| anyhow!("Failed to parse system hostname")) + .map_err(custom_err(&metrics.errs))?; + } + let (amqp, jobs, metrics_conf, acct, ins) = Config::read(cfg) .and_then(Config::into_parts) .map_err(custom_err(&metrics.errs))?; @@ -105,9 +141,15 @@ impl GeyserPlugin for GeyserPluginRabbitMq { smol::block_on(async { self.producer = Some( - Sender::new(amqp, &jobs, startup_type, Arc::clone(&metrics)) - .await - .map_err(custom_err(&metrics.errs))?, + Sender::new( + amqp, + format!("geyser-rabbitmq-{}@{}", version, host), + &jobs, + startup_type, + Arc::clone(&metrics), + ) + .await + .map_err(custom_err(&metrics.errs))?, ); Ok(()) diff --git a/crates/geyser-rabbitmq/src/sender.rs b/crates/geyser-rabbitmq/src/sender.rs index 7a94d80d5..8365fdc72 100644 --- a/crates/geyser-rabbitmq/src/sender.rs +++ b/crates/geyser-rabbitmq/src/sender.rs @@ -23,6 +23,7 @@ struct Inner { background_count: AtomicUsize, amqp: config::Amqp, + name: String, startup_type: StartupType, producer: RwLock, metrics: Arc, @@ -31,14 +32,16 @@ struct Inner { impl Inner { async fn new( amqp: config::Amqp, + name: String, startup_type: StartupType, metrics: Arc, ) -> Result { - let producer = Self::create_producer(&amqp, startup_type).await?; + let producer = Self::create_producer(&amqp, name.as_ref(), startup_type).await?; Ok(Self { background_count: AtomicUsize::new(0), amqp, + name, startup_type, producer: RwLock::new(producer), metrics, @@ -47,11 +50,14 @@ impl Inner { async fn create_producer( amqp: &config::Amqp, + name: impl Into, startup_type: StartupType, ) -> Result { let conn = Connection::connect( &amqp.address, - ConnectionProperties::default().with_executor(smol_executor_trait::Smol), + ConnectionProperties::default() + .with_connection_name(name.into()) + .with_executor(smol_executor_trait::Smol), ) .await?; @@ -64,12 +70,12 @@ impl Inner { ) -> Result, indexer_rabbitmq::Error> { let mut prod = RwLockUpgradableReadGuard::upgrade(prod).await; - *prod = Self::create_producer(&self.amqp, self.startup_type).await?; + *prod = Self::create_producer(&self.amqp, self.name.as_ref(), self.startup_type).await?; Ok(RwLockWriteGuard::downgrade_to_upgradable(prod)) } - async fn send(self: Arc, msg: Message, backgrounded: bool) { + async fn send_internal(&self, msg: Message) { #[inline] fn log_err(counter: &'_ Counter) -> impl FnOnce(E) + '_ { |err| { @@ -95,6 +101,10 @@ impl Inner { match prod.write(&msg).await.map_err(log_err(&metrics.errs)) { Ok(()) | Err(()) => (), // Type-level assertion that we consumed the error } + } + + async fn send(self: Arc, msg: Message, backgrounded: bool) { + self.send_internal(msg).await; if backgrounded { assert!(self.background_count.fetch_sub(1, Ordering::SeqCst) > 0); @@ -113,6 +123,7 @@ pub struct Sender { impl Sender { pub async fn new( amqp: config::Amqp, + name: String, jobs: &config::Jobs, startup_type: StartupType, metrics: Arc, @@ -127,7 +138,7 @@ impl Sender { }); Ok(Self { - inner: Arc::new(Inner::new(amqp, startup_type, metrics).await?), + inner: Arc::new(Inner::new(amqp, name, startup_type, metrics).await?), executor, _stop: stop_tx, limit: jobs.limit, diff --git a/crates/graphql/src/main.rs b/crates/graphql/src/main.rs index 9b996e6ed..d51f2c276 100644 --- a/crates/graphql/src/main.rs +++ b/crates/graphql/src/main.rs @@ -8,7 +8,7 @@ )] #![warn(clippy::pedantic, clippy::cargo, missing_docs)] -use std::{future::Future, pin::Pin, sync::Arc}; +use std::sync::Arc; use actix_cors::Cors; use actix_web::{http, middleware, web, App, Error, HttpResponse, HttpServer}; @@ -34,61 +34,52 @@ struct Opts { asset_proxy_count: u8, } -fn graphiql(uri: String) -> impl Fn() -> HttpResponse + Clone { - move || { - let html = graphiql_source(&uri, None); - - HttpResponse::Ok() - .content_type("text/html; charset=utf-8") - .body(html) - } +struct GraphiqlData { + uri: String, } -fn redirect_version( +struct RedirectData { route: &'static str, - version: &'static str, -) -> impl Fn() -> HttpResponse + Clone { - move || { - HttpResponse::MovedPermanently() - .insert_header(("Location", version)) - .body(format!( - "API route {} deprecated, please use {}", - route, version - )) - } -} - -fn graphql( - db_pool: Arc, - shared: Arc, -) -> impl Fn( - web::Data>, - web::Json, -) -> Pin> + Send>> -+ Clone { - move |st: web::Data>, data: web::Json| { - let pool = Arc::clone(&db_pool); - let shared = Arc::clone(&shared); - - Box::pin(async move { - let ctx = AppContext::new(pool, shared); - let res = data.execute(&st, &ctx).await; - - let json = serde_json::to_string(&res)?; - - Ok(HttpResponse::Ok() - .content_type("application/json") - .body(json)) - }) - } + new_route: &'static str, } pub(crate) struct SharedData { + schema: Schema, + pub db: Arc, pub asset_proxy_endpoint: String, pub asset_proxy_count: u8, pub twitter_bearer_token: String, } +#[allow(clippy::unused_async)] +async fn graphiql(data: web::Data) -> HttpResponse { + let html = graphiql_source(&data.uri, None); + + HttpResponse::Ok() + .content_type("text/html; charset=utf-8") + .body(html) +} + +#[allow(clippy::unused_async)] +async fn redirect_version(data: web::Data) -> HttpResponse { + HttpResponse::MovedPermanently() + .insert_header(("Location", data.new_route)) + .body(format!( + "API route {} deprecated, please use {}", + data.route, data.new_route + )) +} + +async fn graphql( + data: web::Data, + req: web::Json, +) -> Result { + let ctx = AppContext::new(data.clone().into_inner()); + let resp = req.execute(&data.schema, &ctx).await; + + Ok(HttpResponse::Ok().json(&resp)) +} + fn main() { indexer_core::run(|| { let Opts { @@ -102,30 +93,37 @@ fn main() { info!("Listening on {}", addr); let twitter_bearer_token = twitter_bearer_token.unwrap_or_else(String::new); - let shared = Arc::new(SharedData { + + // TODO: db_ty indicates if any actions that mutate the database can be run + let (db, _db_ty) = + db::connect(db::ConnectMode::Read).context("Failed to connect to Postgres")?; + let db = Arc::new(db); + + let shared = web::Data::new(SharedData { + schema: schema::create(), + db, asset_proxy_endpoint, asset_proxy_count, twitter_bearer_token, }); - // TODO: db_ty indicates if any actions that mutate the database can be run - let (db_pool, _db_ty) = - db::connect(db::ConnectMode::Read).context("Failed to connect to Postgres")?; - let db_pool = Arc::new(db_pool); - let version_extension = "/v1"; - // Should look something like "/..." - let graphiql_uri = version_extension.to_owned(); - assert!(graphiql_uri.starts_with('/')); + let redirect_data = web::Data::new(RedirectData { + route: "/v0", + new_route: "/v1", + }); - let schema = Arc::new(schema::create()); + // Should look something like "/..." + let graphiql_data = web::Data::new(GraphiqlData { + uri: version_extension.to_owned(), + }); + assert!(graphiql_data.uri.starts_with('/')); actix_web::rt::System::new() .block_on( HttpServer::new(move || { App::new() - .app_data(actix_web::web::Data::new(schema.clone())) .wrap(middleware::Logger::default()) .wrap( Cors::default() @@ -140,14 +138,18 @@ fn main() { ) .service( web::resource(version_extension) - .route(web::post().to(graphql(db_pool.clone(), shared.clone()))), + .app_data(shared.clone()) + .route(web::post().to(graphql)), ) .service( - web::resource("/v0").to(redirect_version("/v0", version_extension)), + web::resource(redirect_data.route) + .app_data(redirect_data.clone()) + .to(redirect_version), ) .service( web::resource("/graphiql") - .route(web::get().to(graphiql(graphiql_uri.clone()))), + .app_data(graphiql_data.clone()) + .route(web::get().to(graphiql)), ) }) .bind(addr)? diff --git a/crates/graphql/src/schema/context.rs b/crates/graphql/src/schema/context.rs index dec751874..57c387eab 100644 --- a/crates/graphql/src/schema/context.rs +++ b/crates/graphql/src/schema/context.rs @@ -17,7 +17,6 @@ use super::prelude::*; #[derive(Clone)] pub struct AppContext { - pub db_pool: Arc, pub(crate) shared: Arc, // Data loaders @@ -43,8 +42,8 @@ pub struct AppContext { impl juniper::Context for AppContext {} impl AppContext { - pub(crate) fn new(db_pool: Arc, shared: Arc) -> AppContext { - let batcher = Batcher::new(db_pool.clone()); + pub(crate) fn new(shared: Arc) -> AppContext { + let batcher = Batcher::new(shared.db.clone()); let twitter_batcher = TwitterBatcher::new(shared.twitter_bearer_token.clone()); Self { @@ -65,7 +64,6 @@ impl AppContext { store_creator_loader: Loader::new(batcher.clone()), collection_loader: Loader::new(batcher), twitter_profile_loader: Loader::new(twitter_batcher), - db_pool, shared, } } diff --git a/crates/graphql/src/schema/objects/creator.rs b/crates/graphql/src/schema/objects/creator.rs index ef139dd87..90f05cbaf 100644 --- a/crates/graphql/src/schema/objects/creator.rs +++ b/crates/graphql/src/schema/objects/creator.rs @@ -41,7 +41,7 @@ impl CreatorCounts { #[graphql_object(Context = AppContext)] impl CreatorCounts { fn creations(&self, context: &AppContext) -> FieldResult { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let count: i64 = metadata_creators::table .filter(metadata_creators::creator_address.eq(&self.creator.address)) @@ -69,7 +69,7 @@ impl Creator { auction_houses: Vec>, ctx: &AppContext, ) -> FieldResult> { - let conn = ctx.db_pool.get()?; + let conn = ctx.shared.db.get()?; let rows = stats::collection(&conn, auction_houses, &self.address)?; rows.into_iter() @@ -79,7 +79,7 @@ impl Creator { } pub fn attribute_groups(&self, context: &AppContext) -> FieldResult> { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let metadata_attributes: Vec = attributes::table .inner_join( diff --git a/crates/graphql/src/schema/objects/denylist.rs b/crates/graphql/src/schema/objects/denylist.rs index 989201e21..c8fd8e547 100644 --- a/crates/graphql/src/schema/objects/denylist.rs +++ b/crates/graphql/src/schema/objects/denylist.rs @@ -11,7 +11,7 @@ pub struct Denylist; #[graphql_object(Context = AppContext)] impl Denylist { fn storefronts(&self, ctx: &AppContext) -> FieldResult>> { - let db = ctx.db_pool.get().context("Failed to connect to DB")?; + let db = ctx.shared.db.get().context("Failed to connect to DB")?; store_denylist::get_hard_banned(&db) .context("Failed to load denylist") @@ -19,7 +19,7 @@ impl Denylist { } fn listings(&self, ctx: &AppContext) -> FieldResult>> { - let db = ctx.db_pool.get().context("Failed to connect to DB")?; + let db = ctx.shared.db.get().context("Failed to connect to DB")?; listing_denylist::get_hard_banned(&db) .context("Failed to load denylist") diff --git a/crates/graphql/src/schema/objects/nft.rs b/crates/graphql/src/schema/objects/nft.rs index 392ea2207..5cb7a14a3 100644 --- a/crates/graphql/src/schema/objects/nft.rs +++ b/crates/graphql/src/schema/objects/nft.rs @@ -414,7 +414,7 @@ impl NftCount { #[graphql_object(Context = AppContext)] impl NftCount { fn total(&self, context: &AppContext) -> FieldResult { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let count = queries::nft_count::total(&conn, &self.creators)?; @@ -427,7 +427,7 @@ impl NftCount { context: &AppContext, auction_houses: Option>>, ) -> FieldResult { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let count = queries::nft_count::listed(&conn, &self.creators, auction_houses.as_deref())?; diff --git a/crates/graphql/src/schema/objects/profile.rs b/crates/graphql/src/schema/objects/profile.rs index 1fe81aa03..a810dc93e 100644 --- a/crates/graphql/src/schema/objects/profile.rs +++ b/crates/graphql/src/schema/objects/profile.rs @@ -65,7 +65,7 @@ pub struct TwitterUserProfileResponse { #[graphql_object(Context = AppContext)] impl Profile { fn wallet_address(&self, ctx: &AppContext) -> FieldResult> { - let db_conn = ctx.db_pool.get()?; + let db_conn = ctx.shared.db.get()?; let result: Vec = twitter_handle_name_services::table .select(twitter_handle_name_services::all_columns) .limit(1) diff --git a/crates/graphql/src/schema/objects/wallet.rs b/crates/graphql/src/schema/objects/wallet.rs index 6cc2969a3..3864a448f 100644 --- a/crates/graphql/src/schema/objects/wallet.rs +++ b/crates/graphql/src/schema/objects/wallet.rs @@ -38,7 +38,7 @@ impl WalletNftCount { #[graphql_object(Context = AppContext)] impl WalletNftCount { fn owned(&self, context: &AppContext) -> FieldResult { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let count = queries::nft_count::owned(&conn, &self.wallet, self.creators.as_deref())?; @@ -51,7 +51,7 @@ impl WalletNftCount { context: &AppContext, auction_houses: Option>>, ) -> FieldResult { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let count = queries::nft_count::offered( &conn, @@ -69,7 +69,7 @@ impl WalletNftCount { context: &AppContext, auction_houses: Option>>, ) -> FieldResult { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let count = queries::nft_count::wallet_listed( &conn, @@ -89,7 +89,8 @@ impl Wallet { } pub fn bids(&self, ctx: &AppContext) -> FieldResult> { - let db_conn = ctx.db_pool.get()?; + let db_conn = ctx.shared.db.get()?; + let rows: Vec = bids::table .select(bids::all_columns) .filter(bids::bidder_address.eq(&self.address)) @@ -138,7 +139,7 @@ pub struct ConnectionCounts { #[graphql_object(Context = AppContext)] impl ConnectionCounts { pub fn from_count(&self, ctx: &AppContext) -> FieldResult { - let db_conn = ctx.db_pool.get()?; + let db_conn = ctx.shared.db.get()?; let count: i64 = graph_connections::table .filter(graph_connections::from_account.eq(&self.address)) @@ -150,7 +151,7 @@ impl ConnectionCounts { } pub fn to_count(&self, ctx: &AppContext) -> FieldResult { - let db_conn = ctx.db_pool.get()?; + let db_conn = ctx.shared.db.get()?; let count: i64 = graph_connections::table .filter(graph_connections::to_account.eq(&self.address)) diff --git a/crates/graphql/src/schema/query_root.rs b/crates/graphql/src/schema/query_root.rs index c983c2aa5..d50622b10 100644 --- a/crates/graphql/src/schema/query_root.rs +++ b/crates/graphql/src/schema/query_root.rs @@ -99,7 +99,7 @@ impl QueryRoot { graphql_value!({ "Filters": "from: Vec, to: Vec" }), )); } - let conn = context.db_pool.get().context("failed to connect to db")?; + let conn = context.shared.db.get().context("failed to connect to db")?; let from: Vec = from .unwrap_or_else(Vec::new) .into_iter() @@ -124,7 +124,7 @@ impl QueryRoot { context: &AppContext, #[graphql(description = "Address of creator")] address: String, ) -> FieldResult { - let conn = context.db_pool.get().context("failed to connect to db")?; + let conn = context.shared.db.get().context("failed to connect to db")?; let twitter_handle = queries::twitter_handle_name_service::get(&conn, &address)?; @@ -156,7 +156,7 @@ impl QueryRoot { )); } - let conn = context.db_pool.get().context("failed to connect to db")?; + let conn = context.shared.db.get().context("failed to connect to db")?; let query_options = queries::metadatas::ListQueryOptions { owners: owners.map(|a| a.into_iter().map(Into::into).collect()), @@ -177,7 +177,7 @@ impl QueryRoot { context: &AppContext, #[graphql(description = "Address of the wallet")] address: PublicKey, ) -> FieldResult { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let twitter_handle = queries::twitter_handle_name_service::get(&conn, &address)?; @@ -186,7 +186,7 @@ impl QueryRoot { fn listings(&self, context: &AppContext) -> FieldResult> { let now = Local::now().naive_utc(); - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let rows: Vec = auction_caches::table .inner_join( @@ -219,7 +219,7 @@ impl QueryRoot { context: &AppContext, #[graphql(description = "Address of NFT")] address: String, ) -> FieldResult> { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let mut rows: Vec = metadatas::table .inner_join( metadata_jsons::table.on(metadatas::address.eq(metadata_jsons::metadata_address)), @@ -242,7 +242,7 @@ impl QueryRoot { } fn storefronts(&self, context: &AppContext) -> FieldResult> { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let rows: Vec = storefronts::table .filter(queries::store_denylist::owner_address_ok( storefronts::owner_address, @@ -260,7 +260,7 @@ impl QueryRoot { context: &AppContext, subdomain: String, ) -> FieldResult> { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let mut rows: Vec = storefronts::table .filter(storefronts::subdomain.eq(subdomain)) .select(StorefrontColumns::default()) @@ -277,7 +277,7 @@ impl QueryRoot { context: &AppContext, subdomain: String, ) -> FieldResult> { - let conn = context.db_pool.get()?; + let conn = context.shared.db.get()?; let mut rows: Vec = store_config_jsons::table .filter(store_config_jsons::subdomain.eq(subdomain)) .select(store_config_jsons::all_columns) diff --git a/crates/indexer/Cargo.toml b/crates/indexer/Cargo.toml index e5dd7c35c..5824d4400 100644 --- a/crates/indexer/Cargo.toml +++ b/crates/indexer/Cargo.toml @@ -44,7 +44,7 @@ required-features = ["http"] [dependencies] async-trait = "0.1.52" futures-util = "0.3.21" -num_cpus = "1.13.1" +hostname = "0.3.1" serde = { version = "1.0.130", features = ["derive"] } strum = { version = "0.24.0", features = ["derive"] } tokio = { version = "1.13.0", features = ["macros", "rt", "rt-multi-thread", "sync"] } @@ -95,4 +95,4 @@ path = "../core" [dependencies.indexer-rabbitmq] package = "holaplex-indexer-rabbitmq" version = "=0.1.0" -path = "../rabbitmq" \ No newline at end of file +path = "../rabbitmq" diff --git a/crates/indexer/src/bin/holaplex-indexer-geyser.rs b/crates/indexer/src/bin/holaplex-indexer-geyser.rs index 52e1ecd5c..b0103dcf7 100644 --- a/crates/indexer/src/bin/holaplex-indexer-geyser.rs +++ b/crates/indexer/src/bin/holaplex-indexer-geyser.rs @@ -22,7 +22,7 @@ struct Args { /// /// For example, `metadata,candy-machine` will ignore the Metaplex metadata /// and candy machine programs. - #[clap(long, env, use_delimiter(true))] + #[clap(long, env, use_value_delimiter(true))] ignore_on_startup: Option>, /// An optional suffix for the AMQP queue ID @@ -49,7 +49,7 @@ fn main() { let sender = queue_suffix.clone().unwrap_or_else(|| network.to_string()); - let conn = holaplex_indexer::amqp_connect(amqp_url).await?; + let conn = holaplex_indexer::amqp_connect(amqp_url, env!("CARGO_BIN_NAME")).await?; let client = Client::new_rc( db, &conn, @@ -60,7 +60,7 @@ fn main() { .context("Failed to construct Client")?; let queue_type = geyser::QueueType::new(network, startup, queue_suffix.as_deref()); - let consumer = geyser::Consumer::new(&conn, queue_type.clone()) + let consumer = geyser::Consumer::new(&conn, queue_type.clone(), "geyser-consumer") .await .context("Failed to create queue consumer")?; diff --git a/crates/indexer/src/bin/holaplex-indexer-http.rs b/crates/indexer/src/bin/holaplex-indexer-http.rs index 8b11823fe..888f1dc52 100644 --- a/crates/indexer/src/bin/holaplex-indexer-http.rs +++ b/crates/indexer/src/bin/holaplex-indexer-http.rs @@ -57,11 +57,11 @@ async fn run( bail!("Debug builds must specify a RabbitMQ queue suffix!"); } - let conn = holaplex_indexer::amqp_connect(amqp_url).await?; + let conn = holaplex_indexer::amqp_connect(amqp_url, env!("CARGO_BIN_NAME")).await?; let client = Client::new_rc(db, client).context("Failed to construct Client")?; let queue_type = http_indexer::QueueType::::new(&sender, queue_suffix.as_deref()); - let consumer = http_indexer::Consumer::new(&conn, queue_type.clone()) + let consumer = http_indexer::Consumer::new(&conn, queue_type.clone(), "http-consumer") .await .context("Failed to create queue consumer")?; diff --git a/crates/indexer/src/lib.rs b/crates/indexer/src/lib.rs index cab500ead..1516460f7 100644 --- a/crates/indexer/src/lib.rs +++ b/crates/indexer/src/lib.rs @@ -9,11 +9,11 @@ #![warn(clippy::pedantic, clippy::cargo, missing_docs)] pub mod db; -#[cfg(any(test, feature = "geyser"))] +#[cfg(feature = "geyser")] pub mod geyser; -#[cfg(any(test, feature = "http"))] +#[cfg(feature = "http")] pub mod http; -#[cfg(any(test, feature = "http"))] +#[cfg(feature = "http")] pub mod legacy_storefronts; pub(crate) mod util; @@ -47,7 +47,7 @@ mod runtime { #[derive(Debug, Parser)] struct Opts { /// The number of threads to use. Defaults to available core count. - #[clap(short = 'j')] + #[clap(short = 'j', env)] thread_count: Option, #[clap(flatten)] @@ -91,7 +91,7 @@ mod runtime { .context("Failed to initialize async runtime")? }; - let concurrency = thread_count.unwrap_or_else(num_cpus::get); + let concurrency = thread_count.unwrap_or_else(indexer_core::num_cpus::get); rt.block_on(f(extra, Params { concurrency }, db)) }) @@ -101,10 +101,24 @@ mod runtime { /// /// # Errors /// This function fails if a connection cannot be established - pub async fn amqp_connect(addr: impl AsRef) -> Result { + pub async fn amqp_connect( + addr: impl AsRef, + name: &'static str, + ) -> Result { lapin::Connection::connect( addr.as_ref(), lapin::ConnectionProperties::default() + .with_connection_name( + format!( + "{}@{}", + name, + hostname::get() + .context("Failed to get system hostname")? + .into_string() + .map_err(|_| anyhow!("Failed to parse system hostname"))?, + ) + .into(), + ) .with_executor(tokio_executor_trait::Tokio::current()) .with_reactor(tokio_reactor_trait::Tokio), ) diff --git a/crates/rabbitmq/Cargo.toml b/crates/rabbitmq/Cargo.toml index 55762d4f6..f4f7e0c8b 100644 --- a/crates/rabbitmq/Cargo.toml +++ b/crates/rabbitmq/Cargo.toml @@ -24,6 +24,7 @@ http-indexer = [] futures-util = "0.3.19" lapin = "2.0.3" log = "0.4.14" +rand = "0.8.5" rmp-serde = "1.0.0-beta.2" serde = { version = "1.0.133", features = ["derive"] } solana-sdk = { version = "1.9.4", optional = true } diff --git a/crates/rabbitmq/src/consumer.rs b/crates/rabbitmq/src/consumer.rs index c929f12d7..79049e328 100644 --- a/crates/rabbitmq/src/consumer.rs +++ b/crates/rabbitmq/src/consumer.rs @@ -36,10 +36,10 @@ where /// # Errors /// This function fails if the consumer cannot be created and configured /// successfully. - pub async fn new(conn: &Connection, ty: Q) -> Result { + pub async fn new(conn: &Connection, ty: Q, tag: impl AsRef) -> Result { let chan = conn.create_channel().await?; - let consumer = ty.info().init_consumer(&chan).await?; + let consumer = ty.info().init_consumer(&chan, tag).await?; Ok(Self { // chan, diff --git a/crates/rabbitmq/src/lib.rs b/crates/rabbitmq/src/lib.rs index 57cc3db7e..a3dc0818f 100644 --- a/crates/rabbitmq/src/lib.rs +++ b/crates/rabbitmq/src/lib.rs @@ -34,17 +34,18 @@ pub enum Error { InvalidQueueType(&'static str), } +#[allow(dead_code)] pub(crate) type Result = std::result::Result; -#[cfg(any(test, feature = "consumer"))] +#[cfg(feature = "consumer")] pub mod consumer; -#[cfg(any(test, feature = "consumer"))] +#[cfg(feature = "consumer")] pub mod dl_consumer; -#[cfg(any(test, feature = "geyser"))] +#[cfg(feature = "geyser")] pub mod geyser; -#[cfg(any(test, feature = "http-indexer"))] +#[cfg(feature = "http-indexer")] pub mod http_indexer; -#[cfg(any(test, feature = "producer"))] +#[cfg(feature = "producer")] pub mod producer; mod queue_type; mod serialize; diff --git a/crates/rabbitmq/src/queue_type.rs b/crates/rabbitmq/src/queue_type.rs index 407ecc2c6..e7e2af316 100644 --- a/crates/rabbitmq/src/queue_type.rs +++ b/crates/rabbitmq/src/queue_type.rs @@ -1,16 +1,22 @@ use std::time::Duration; -use lapin::{ - options::{ - BasicConsumeOptions, BasicPublishOptions, BasicQosOptions, ExchangeDeclareOptions, - QueueBindOptions, QueueDeclareOptions, +#[cfg(feature = "producer")] +use lapin::{options::BasicPublishOptions, publisher_confirm::PublisherConfirm, BasicProperties}; +#[cfg(feature = "consumer")] +use { + crate::Error, + lapin::{ + options::{BasicConsumeOptions, BasicQosOptions, QueueBindOptions, QueueDeclareOptions}, + types::AMQPValue, + Consumer, }, - publisher_confirm::PublisherConfirm, - types::{AMQPValue, FieldTable}, - BasicProperties, Channel, Consumer, ExchangeKind, + rand::prelude::*, +}; +#[cfg(any(feature = "producer", feature = "consumer"))] +use { + crate::Result, + lapin::{options::ExchangeDeclareOptions, types::FieldTable, Channel, ExchangeKind}, }; - -use crate::{Error, Result}; /// A trait representing an AMQP queue with a specific message type and AMQP /// configuration. @@ -28,6 +34,7 @@ pub enum Binding { Direct(String), } +#[cfg(feature = "consumer")] impl Binding { fn routing_key(&self) -> &str { match self { @@ -65,23 +72,15 @@ impl<'a> From<&'a QueueProps> for QueueInfo<'a> { } } +#[cfg(feature = "consumer")] pub const DLX_DEAD_KEY: &str = "dead"; +#[cfg(feature = "consumer")] pub const DLX_LIVE_KEY: &str = "live"; +#[cfg(feature = "consumer")] pub const DLX_TRIAGE_KEY: &str = "triage"; +#[cfg(any(feature = "producer", feature = "consumer"))] impl<'a> QueueInfo<'a> { - fn dl_exchange(self) -> String { - format!("dlx.{}", self.0.queue) - } - - fn dl_queue(self) -> String { - format!("dlq.{}", self.0.queue) - } - - fn dl_triage_queue(self) -> String { - format!("triage.dlq.{}", self.0.queue) - } - async fn exchange_declare(self, chan: &Channel) -> Result<()> { chan.exchange_declare( self.0.exchange.as_ref(), @@ -96,6 +95,42 @@ impl<'a> QueueInfo<'a> { Ok(()) } +} + +#[cfg(feature = "producer")] +impl<'a> QueueInfo<'a> { + pub(crate) async fn init_producer(self, chan: &Channel) -> Result<()> { + self.exchange_declare(chan).await?; + + Ok(()) + } + + pub(crate) async fn publish(self, chan: &Channel, data: &[u8]) -> Result { + chan.basic_publish( + self.0.exchange.as_ref(), + self.0.queue.as_ref(), + BasicPublishOptions::default(), + data, + BasicProperties::default(), + ) + .await + .map_err(Into::into) + } +} + +#[cfg(feature = "consumer")] +impl<'a> QueueInfo<'a> { + fn dl_exchange(self) -> String { + format!("dlx.{}", self.0.queue) + } + + fn dl_queue(self) -> String { + format!("dlq.{}", self.0.queue) + } + + fn dl_triage_queue(self) -> String { + format!("triage.dlq.{}", self.0.queue) + } async fn queue_declare(self, chan: &Channel) -> Result<()> { let mut queue_fields = FieldTable::default(); @@ -162,25 +197,11 @@ impl<'a> QueueInfo<'a> { Ok((exchg, self.dl_queue(), self.dl_triage_queue())) } - pub(crate) async fn init_producer(self, chan: &Channel) -> Result<()> { - self.exchange_declare(chan).await?; - - Ok(()) - } - - pub(crate) async fn publish(self, chan: &Channel, data: &[u8]) -> Result { - chan.basic_publish( - self.0.exchange.as_ref(), - self.0.queue.as_ref(), - BasicPublishOptions::default(), - data, - BasicProperties::default(), - ) - .await - .map_err(Into::into) - } - - pub(crate) async fn init_consumer(self, chan: &Channel) -> Result { + pub(crate) async fn init_consumer( + self, + chan: &Channel, + tag: impl AsRef, + ) -> Result { self.dl_exchange_declare(chan).await?; self.exchange_declare(chan).await?; self.queue_declare(chan).await?; @@ -199,7 +220,7 @@ impl<'a> QueueInfo<'a> { chan.basic_consume( self.0.queue.as_ref(), - self.0.queue.as_ref(), + &format!("{}-{:04x}", tag.as_ref(), rand::thread_rng().gen::()), BasicConsumeOptions::default(), FieldTable::default(), ) @@ -297,7 +318,7 @@ impl<'a> QueueInfo<'a> { let consumer = chan .basic_consume( triage_queue.as_ref(), - triage_queue.as_ref(), + &format!("dl-consumer-{:04x}", rand::thread_rng().gen::()), BasicConsumeOptions::default(), FieldTable::default(), ) @@ -317,6 +338,7 @@ impl<'a> QueueInfo<'a> { } } +#[cfg(feature = "consumer")] #[derive(Debug, Clone)] pub(crate) struct DlConsumerInfo { exchange: String, @@ -325,6 +347,7 @@ pub(crate) struct DlConsumerInfo { retry: RetryProps, } +#[cfg(feature = "consumer")] impl DlConsumerInfo { pub fn exchange(&self) -> &str { &self.exchange diff --git a/crates/rabbitmq/src/serialize.rs b/crates/rabbitmq/src/serialize.rs index 093456d8f..faa04f60a 100644 --- a/crates/rabbitmq/src/serialize.rs +++ b/crates/rabbitmq/src/serialize.rs @@ -1,9 +1,13 @@ -use std::io::{Read, Write}; +#[cfg(feature = "consumer")] +use std::io::Read; +#[cfg(feature = "producer")] +use std::io::Write; /// Serialize a message into a [`Write`] stream /// /// # Errors /// This function fails if an I/O error occurs or a wire format error occurs. +#[cfg(feature = "producer")] pub fn serialize( w: impl Write, msg: &M, @@ -19,6 +23,7 @@ pub fn serialize( /// /// # Errors /// This function fails if an I/O error occurs or a wire format error occurs. +#[cfg(feature = "consumer")] pub fn deserialize serde::Deserialize<'a>>( r: impl Read, ) -> Result { diff --git a/start-developing.sh b/start-developing.sh index a5a8a9ec9..eb1e71fb4 100755 --- a/start-developing.sh +++ b/start-developing.sh @@ -19,11 +19,29 @@ export DATABASE_URL docker-compose up -d db +function isready() { + PGPASSWORD="$DATABASE_PASSWD" pg_isready \ + -d "$DATABASE_NAME" -h localhost -p 5337 -U postgres -t 10 \ + || return 1 + + return 0 +} + +if ! isready; then + echo "Waiting for Postgres to come online..." + + for i in {0..10}; do + sleep 3 + isready || continue + break + done + + isready +fi + if ! command -v diesel >/dev/null; then echo $'Diesel CLI is missing - install it with:\n cargo install diesel_cli --no-default-features --features postgres' >&2 exit 1 fi -cd crates/core -diesel setup - +(cd crates/core && diesel setup)