diff --git a/Cargo.lock b/Cargo.lock index 0f8d288..0fe38b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ version = 3 [[package]] name = "admin" version = "0.2.0" -source = "git+https://github.com/securesecrets/shade#ae81bce8e1cb42df40b28aa811e9f701a4d78738" +source = "git+https://github.com/securesecrets/shade#93ec008bc7184af9c31fdb26d9242dce64702952" dependencies = [ "secret-cosmwasm-std", "shade-protocol", @@ -24,15 +24,15 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[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 = "base16ct" @@ -125,25 +125,24 @@ dependencies = [ [[package]] name = "borsh" -version = "1.5.1" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" dependencies = [ "cfg_aliases", ] [[package]] name = "borsh-derive" -version = "1.5.1" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" +checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.77", - "syn_derive", + "syn 2.0.98", ] [[package]] @@ -173,15 +172,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "cc" -version = "1.1.15" +version = "1.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" dependencies = [ "shlex", ] @@ -219,18 +218,18 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "const_format" -version = "0.2.32" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.32" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ "proc-macro2", "quote", @@ -240,25 +239,25 @@ dependencies = [ [[package]] name = "contract-derive" version = "0.1.0" -source = "git+https://github.com/securesecrets/shade#ae81bce8e1cb42df40b28aa811e9f701a4d78738" +source = "git+https://github.com/securesecrets/shade#93ec008bc7184af9c31fdb26d9242dce64702952" dependencies = [ "syn 1.0.109", ] [[package]] name = "cosmwasm-derive" -version = "1.5.7" +version = "1.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd85de6467cd1073688c86b39833679ae6db18cf4771471edd9809f15f1679f1" +checksum = "343f5ce9f8f83dc2b3c03cb51ac2d39315ac4defd200d544e5a190726e01d2d5" dependencies = [ "syn 1.0.109", ] [[package]] name = "cosmwasm-schema" -version = "1.5.7" +version = "1.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b4cd28147a66eba73720b47636a58097a979ad8c8bfdb4ed437ebcbfe362576" +checksum = "7d538047f2bab028d3242ff974e64985565cd29faa09af7410d4278bb66e3c99" dependencies = [ "cosmwasm-schema-derive", "schemars 0.8.21", @@ -269,9 +268,9 @@ dependencies = [ [[package]] name = "cosmwasm-schema-derive" -version = "1.5.7" +version = "1.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9acd45c63d41bc9b16bc6dc7f6bd604a8c2ad29ce96c8f3c96d7fc8ef384392e" +checksum = "a098a0ba9dee2e998e2c7e6a842b517de338d39553802cf70493b2473ac55aa2" dependencies = [ "proc-macro2", "quote", @@ -280,18 +279,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" @@ -401,9 +400,9 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" [[package]] name = "ecdsa" @@ -460,9 +459,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "eris_staking_derivatives_oracle" @@ -516,9 +515,9 @@ checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -531,9 +530,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -541,15 +540,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -558,32 +557,32 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-timer" @@ -593,9 +592,9 @@ checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -652,9 +651,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -687,12 +686,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -706,9 +705,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "k256" @@ -724,9 +723,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.158" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "lido_staking_derivatives_oracle" @@ -836,9 +835,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -881,9 +880,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -929,34 +928,11 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -1021,7 +997,7 @@ dependencies = [ [[package]] name = "query_auth" version = "0.1.0" -source = "git+https://github.com/securesecrets/shade#ae81bce8e1cb42df40b28aa811e9f701a4d78738" +source = "git+https://github.com/securesecrets/shade#93ec008bc7184af9c31fdb26d9242dce64702952" dependencies = [ "schemars 0.7.6", "secret-cosmwasm-std", @@ -1038,9 +1014,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1099,7 +1075,7 @@ checksum = "46aef80f842736de545ada6ec65b81ee91504efd6853f4b96de7414c42ae7443" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -1169,15 +1145,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "schemars" @@ -1223,7 +1199,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals 0.29.1", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -1336,6 +1312,18 @@ dependencies = [ "serde", ] +[[package]] +name = "secret-toolkit" +version = "0.10.0" +source = "git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0#9e139bedab9eeb60f2bdbf9d4f1d2bb069886ea9" +dependencies = [ + "secret-toolkit-serialization 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", + "secret-toolkit-snip20 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", + "secret-toolkit-snip721 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", + "secret-toolkit-storage 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", + "secret-toolkit-utils 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", +] + [[package]] name = "secret-toolkit" version = "0.10.0" @@ -1343,11 +1331,11 @@ source = "git+https://github.com/securesecrets/secret-toolkit#9e139bedab9eeb60f2 dependencies = [ "secret-toolkit-crypto", "secret-toolkit-permit", - "secret-toolkit-serialization", - "secret-toolkit-snip20", - "secret-toolkit-snip721", - "secret-toolkit-storage", - "secret-toolkit-utils", + "secret-toolkit-serialization 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", + "secret-toolkit-snip20 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", + "secret-toolkit-snip721 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", + "secret-toolkit-storage 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", + "secret-toolkit-utils 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", "secret-toolkit-viewing-key", ] @@ -1377,6 +1365,17 @@ dependencies = [ "serde", ] +[[package]] +name = "secret-toolkit-serialization" +version = "0.10.0" +source = "git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0#9e139bedab9eeb60f2bdbf9d4f1d2bb069886ea9" +dependencies = [ + "bincode2", + "schemars 0.8.21", + "secret-cosmwasm-std", + "serde", +] + [[package]] name = "secret-toolkit-serialization" version = "0.10.0" @@ -1388,6 +1387,17 @@ dependencies = [ "serde", ] +[[package]] +name = "secret-toolkit-snip20" +version = "0.10.0" +source = "git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0#9e139bedab9eeb60f2bdbf9d4f1d2bb069886ea9" +dependencies = [ + "schemars 0.8.21", + "secret-cosmwasm-std", + "secret-toolkit-utils 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", + "serde", +] + [[package]] name = "secret-toolkit-snip20" version = "0.10.0" @@ -1395,7 +1405,18 @@ source = "git+https://github.com/securesecrets/secret-toolkit#9e139bedab9eeb60f2 dependencies = [ "schemars 0.8.21", "secret-cosmwasm-std", - "secret-toolkit-utils", + "secret-toolkit-utils 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", + "serde", +] + +[[package]] +name = "secret-toolkit-snip721" +version = "0.10.0" +source = "git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0#9e139bedab9eeb60f2bdbf9d4f1d2bb069886ea9" +dependencies = [ + "schemars 0.8.21", + "secret-cosmwasm-std", + "secret-toolkit-utils 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", "serde", ] @@ -1406,7 +1427,18 @@ source = "git+https://github.com/securesecrets/secret-toolkit#9e139bedab9eeb60f2 dependencies = [ "schemars 0.8.21", "secret-cosmwasm-std", - "secret-toolkit-utils", + "secret-toolkit-utils 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", + "serde", +] + +[[package]] +name = "secret-toolkit-storage" +version = "0.10.0" +source = "git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0#9e139bedab9eeb60f2bdbf9d4f1d2bb069886ea9" +dependencies = [ + "secret-cosmwasm-std", + "secret-cosmwasm-storage", + "secret-toolkit-serialization 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", "serde", ] @@ -1417,7 +1449,18 @@ source = "git+https://github.com/securesecrets/secret-toolkit#9e139bedab9eeb60f2 dependencies = [ "secret-cosmwasm-std", "secret-cosmwasm-storage", - "secret-toolkit-serialization", + "secret-toolkit-serialization 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", + "serde", +] + +[[package]] +name = "secret-toolkit-utils" +version = "0.10.0" +source = "git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0#9e139bedab9eeb60f2bdbf9d4f1d2bb069886ea9" +dependencies = [ + "schemars 0.8.21", + "secret-cosmwasm-std", + "secret-cosmwasm-storage", "serde", ] @@ -1442,22 +1485,22 @@ dependencies = [ "secret-cosmwasm-std", "secret-cosmwasm-storage", "secret-toolkit-crypto", - "secret-toolkit-utils", + "secret-toolkit-utils 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", "serde", "subtle", ] [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -1473,13 +1516,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -1501,14 +1544,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -1608,7 +1651,7 @@ dependencies = [ [[package]] name = "shade-protocol" version = "0.1.0" -source = "git+https://github.com/securesecrets/shade#ae81bce8e1cb42df40b28aa811e9f701a4d78738" +source = "git+https://github.com/securesecrets/shade#93ec008bc7184af9c31fdb26d9242dce64702952" dependencies = [ "base64 0.12.3", "chrono", @@ -1737,7 +1780,7 @@ dependencies = [ "schemars 0.8.21", "secret-cosmwasm-std", "secret-cosmwasm-storage", - "secret-toolkit", + "secret-toolkit 0.10.0 (git+https://github.com/securesecrets/secret-toolkit)", "secret-toolkit-crypto", "serde", "shade-toolkit", @@ -1822,9 +1865,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -1842,36 +1885,24 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "syn_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -1893,9 +1924,9 @@ checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "toml_datetime", @@ -1904,9 +1935,9 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "uint" @@ -1922,15 +1953,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "version_check" @@ -1974,13 +2005,24 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "winnow" -version = "0.6.18" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" dependencies = [ "memchr", ] +[[package]] +name = "x_token_oracle" +version = "0.2.0" +dependencies = [ + "cosmwasm-schema", + "secret-cosmwasm-std", + "secret-toolkit 0.10.0 (git+https://github.com/scrtlabs/secret-toolkit?tag=v0.10.0)", + "shade-oracles", + "shade-toolkit", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -1999,7 +2041,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a0940ef..59e7858 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ members = [ "contracts/mock_ojo", "contracts/oracle_router", "contracts/derivative_oracle", + "contracts/x_token_oracle", "contracts/mock_derivative", "contracts/shade_staking_derivatives_oracle", "contracts/shadeswap_market_oracle", diff --git a/contracts/x_token_oracle/Cargo.toml b/contracts/x_token_oracle/Cargo.toml new file mode 100644 index 0000000..6438991 --- /dev/null +++ b/contracts/x_token_oracle/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "x_token_oracle" +version = "0.2.0" +authors = ["Jackson Swenson "] +edition = "2021" + +exclude = [ + # Those files are rust-optimizer artifacts. You might want to commit them for convenience but they should not be part of the source code publication. + "contract.wasm", + "hash.txt", +] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["cdylib", "rlib"] + +[features] +default = [] +# for quicker tests, cargo test --lib + +[dependencies] +cosmwasm-schema = { workspace = true } +cosmwasm-std = { workspace = true } +shade-oracles = { path = "../../packages/shade_oracles", features = ["core"] } +shade-toolkit = { workspace = true } +secret-toolkit = { git = "https://github.com/scrtlabs/secret-toolkit", tag = "v0.10.0" } diff --git a/contracts/x_token_oracle/src/contract.rs b/contracts/x_token_oracle/src/contract.rs new file mode 100644 index 0000000..eb7e847 --- /dev/null +++ b/contracts/x_token_oracle/src/contract.rs @@ -0,0 +1,222 @@ +use cosmwasm_std::{entry_point, QuerierWrapper, StdError, Uint128, Uint256}; +use cosmwasm_std::{to_binary, Addr, Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; + +use secret_toolkit::snip20::token_info_query; +use shade_oracles::better_secret_math::common::exp10; +use shade_oracles::core::{pad_query_result, validate_admin, AdminPermissions}; +use shade_oracles::interfaces::common::{OraclePrice, OracleQuery, PriceResponse}; +use shade_oracles::interfaces::providers::ReferenceData; +use shade_oracles::ssp::{Item, Map}; +use shade_toolkit::{Contract, Query, BLOCK_SIZE}; + +use crate::{money_market, msg::*}; + +// Storage +const CONFIG: Item = Item::new("config"); +const KEY_VAULT_MAP: Map = Map::new("key_vault_map"); + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn instantiate( + deps: DepsMut, + _env: Env, + _info: MessageInfo, + msg: InstantiateMsg, +) -> StdResult { + CONFIG.save( + deps.storage, + &Config { + admin_auth: msg.admin_auth.validate(deps.api)?, + router: msg.router.validate(deps.api)?, + money_market: msg.money_market.validate(deps.api)?, + enabled: true, + }, + )?; + + Ok(Response::default()) +} + +fn require_enabled(config: &Config) -> StdResult<()> { + if !config.enabled { + return Err(StdError::generic_err("Contract is disabled")); + } + Ok(()) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn execute( + deps: DepsMut, + _env: Env, + info: MessageInfo, + msg: ExecuteMsg, +) -> StdResult { + let mut config = CONFIG.load(deps.storage)?; + match msg { + ExecuteMsg::UpdateConfig { + router, + money_market, + admin_auth, + enabled, + } => { + validate_admin( + &deps.querier, + AdminPermissions::OraclesAdmin, + info.sender, + &config.admin_auth, + )?; + let mut resp = Response::default(); + if let Some(router) = router { + config.router = router.validate(deps.api)?; + resp = resp.add_attribute("router", config.router.address.clone()); + } + if let Some(admin_auth) = admin_auth { + config.admin_auth = admin_auth.validate(deps.api)?; + resp = resp.add_attribute("admin_auth", config.admin_auth.address.clone()); + } + if let Some(money_market) = money_market { + config.money_market = money_market.validate(deps.api)?; + resp = resp.add_attribute("money_market", config.money_market.address.clone()); + } + if let Some(enabled) = enabled { + config.enabled = enabled; + resp = resp.add_attribute("enabled", config.enabled.to_string()); + } + CONFIG.save(deps.storage, &config)?; + Ok(resp.add_attribute("action", "update_config")) + } + ExecuteMsg::RegisterVault(key_config) => { + validate_admin( + &deps.querier, + AdminPermissions::OraclesAdmin, + info.sender, + &config.admin_auth, + )?; + KEY_VAULT_MAP.save( + deps.storage, + key_config.key, + &deps.api.addr_validate(&key_config.vault)?, + )?; + Ok(Response::default().add_attribute("action", "register_vault")) + } + ExecuteMsg::RegisterVaults(key_configs) => { + validate_admin( + &deps.querier, + AdminPermissions::OraclesAdmin, + info.sender, + &config.admin_auth, + )?; + for KeyConfig { key, vault } in key_configs { + KEY_VAULT_MAP.save(deps.storage, key, &deps.api.addr_validate(&vault)?)?; + } + Ok(Response::default().add_attribute("action", "register_vaults")) + } + } +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { + let config = CONFIG.load(deps.storage)?; + require_enabled(&config)?; + pad_query_result( + match msg { + QueryMsg::GetPrice { key } => to_binary(&query_price(&deps, &env, &config, key)?), + QueryMsg::GetPrices { keys } => { + let mut results = vec![]; + for key in keys { + results.push(query_price(&deps, &env, &config, key)?); + } + to_binary(&results) + } + QueryMsg::GetConfig {} => to_binary(&config), + }, + BLOCK_SIZE, + ) +} + +fn query_price(deps: &Deps, env: &Env, config: &Config, key: String) -> StdResult { + const RATE_SUFFIX: &str = " Rate"; + + let is_rate = key.ends_with(RATE_SUFFIX); + let load_key = if is_rate { + key[..key.len() - RATE_SUFFIX.len()].to_string() + } else { + key.clone() + }; + let vault_addr = KEY_VAULT_MAP + .may_load(deps.storage, load_key.clone()) + .map_err(|_| StdError::generic_err("Key not found"))? + .ok_or_else(|| StdError::generic_err("Key not found"))?; + + let vault = query_vault(&config.money_market, &vault_addr, &deps.querier)?; + + let x_token_info = token_info_query( + deps.querier, + 255, + vault.x_token.code_hash, + vault.x_token.address.to_string(), + )?; + + let total_supply = match x_token_info.total_supply { + Some(supply) => supply, + None => return Err(StdError::generic_err("No total supply")), + }; + + if total_supply.is_zero() { + return Ok(OraclePrice { + key, + data: ReferenceData { + rate: Uint256::zero(), + last_updated_base: env.block.time.seconds(), + last_updated_quote: env.block.time.seconds(), + }, + }); + } + + let backing_balance = vault.loanable + + vault.lent_amount + + (vault.lifetime_interest_owed - vault.lifetime_interest_paid); + + let exchange_rate = (Uint256::from(backing_balance) * Uint256::from(exp10(18).as_u128())) + / Uint256::from(total_supply); + + if is_rate { + Ok(OraclePrice { + key, + data: ReferenceData { + rate: exchange_rate, + last_updated_base: env.block.time.seconds(), + last_updated_quote: env.block.time.seconds(), + }, + }) + } else { + let underlying_price = + query_router_price(&config.router, &deps.querier, vault.oracle_key.clone())?; + Ok(OraclePrice { + key, + data: ReferenceData { + rate: exchange_rate * underlying_price.data.rate + / Uint256::from(exp10(18).as_u128()), + last_updated_base: underlying_price.data.last_updated_base, + last_updated_quote: underlying_price.data.last_updated_quote, + }, + }) + } +} + +pub fn query_router_price( + router: &Contract, + querier: &QuerierWrapper, + key: impl Into, +) -> StdResult { + OracleQuery::GetPrice { key: key.into() }.query(querier, router) +} + +pub fn query_vault( + money_market: &Contract, + vault: &Addr, + querier: &QuerierWrapper, +) -> StdResult { + money_market::QueryMsg::GetVault { + token: vault.to_string(), + } + .query(querier, money_market) +} diff --git a/contracts/x_token_oracle/src/lib.rs b/contracts/x_token_oracle/src/lib.rs new file mode 100644 index 0000000..d7c2250 --- /dev/null +++ b/contracts/x_token_oracle/src/lib.rs @@ -0,0 +1,3 @@ +pub mod contract; +pub mod money_market; +pub mod msg; diff --git a/contracts/x_token_oracle/src/money_market.rs b/contracts/x_token_oracle/src/money_market.rs new file mode 100644 index 0000000..098204e --- /dev/null +++ b/contracts/x_token_oracle/src/money_market.rs @@ -0,0 +1,62 @@ +use cosmwasm_schema::cw_serde; +use cosmwasm_std::{ + entry_point, Addr, Decimal, QuerierWrapper, StdError, Storage, Uint128, Uint256, +}; +use cosmwasm_std::{ + to_binary, Binary, ContractInfo, Deps, DepsMut, Env, MessageInfo, Response, StdResult, +}; + +use shade_oracles::better_secret_math::common::exp10; +use shade_oracles::core::{pad_query_result, validate_admin, AdminPermissions, ResponseStatus}; +use shade_oracles::interfaces::common::{OraclePrice, OracleQuery, PriceResponse}; +use shade_oracles::interfaces::providers::ReferenceData; +use shade_oracles::ssp::{Item, Map}; +use shade_toolkit::{Contract, Query, RawContract, BLOCK_SIZE}; + +#[cw_serde] +pub enum QueryMsg { + GetVault { token: String }, +} + +impl Query for QueryMsg { + const BLOCK_SIZE: usize = BLOCK_SIZE; +} + +#[cw_serde] +pub struct VaultState { + pub token: ContractInfo, + pub x_token: ContractInfo, + pub decimals: u8, + pub oracle_key: String, + pub interest: Interest, + pub loanable: Uint128, + pub lent_amount: Uint128, + pub lifetime_interest_paid: Uint128, + pub lifetime_interest_owed: Uint128, + pub interest_per_utoken: Decimal, + pub last_interest_accrued: u64, + pub max_supply: Uint128, + pub max_borrow: Uint128, + pub dao_interest_fee: Decimal, + pub flash_loan_interest: Decimal, + pub dao_flash_loan_interest_fee: Decimal, + pub status: VaultStatus, +} + +#[cw_serde] +pub struct Interest { + pub base: Decimal, + pub slope1: Decimal, + pub slope2: Decimal, + pub optimal_utilization: Decimal, +} + +#[cw_serde] +pub struct VaultStatus { + pub supply_enabled: bool, + pub borrow_enabled: bool, + pub repay_enabled: bool, + pub liquidation_enabled: bool, + pub interest_accrual_enabled: bool, + pub flash_loan_enabled: bool, +} diff --git a/contracts/x_token_oracle/src/msg.rs b/contracts/x_token_oracle/src/msg.rs new file mode 100644 index 0000000..1c0e07f --- /dev/null +++ b/contracts/x_token_oracle/src/msg.rs @@ -0,0 +1,48 @@ +use cosmwasm_schema::cw_serde; +use cosmwasm_std::Decimal256; + +use cosmwasm_std::Addr; +use shade_oracles::impl_msg_callbacks; +use shade_toolkit::{Contract, RawContract}; + +impl_msg_callbacks!(); + +#[cw_serde] +pub struct Config { + pub router: Contract, + pub admin_auth: Contract, + pub money_market: Contract, + pub enabled: bool, +} + +#[cw_serde] +pub struct KeyConfig { + pub key: String, + pub vault: String, +} + +#[cw_serde] +pub struct InstantiateMsg { + pub router: RawContract, + pub admin_auth: RawContract, + pub money_market: RawContract, +} + +#[cw_serde] +pub enum ExecuteMsg { + UpdateConfig { + router: Option, + admin_auth: Option, + money_market: Option, + enabled: Option, + }, + RegisterVault(KeyConfig), + RegisterVaults(Vec), +} + +#[cw_serde] +pub enum QueryMsg { + GetPrice { key: String }, + GetPrices { keys: Vec }, + GetConfig {}, +}