diff --git a/terra/Cargo.lock b/terra/Cargo.lock index 71c364d3c..6a66afc0e 100644 --- a/terra/Cargo.lock +++ b/terra/Cargo.lock @@ -4,11 +4,11 @@ version = 3 [[package]] name = "addr2line" -version = "0.15.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03345e98af8f3d786b6d9f656ccfa6ac316d954e92bc4841f0bba20789d5fb5a" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli", + "gimli 0.26.1", ] [[package]] @@ -17,6 +17,44 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e" + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "arrayref" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.0.1" @@ -25,16 +63,16 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "backtrace" -version = "0.3.59" +version = "0.3.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4717cfcbfaa661a0fd48f8453951837ae7e8f81e481fbb136e3202d72805a744" +checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" dependencies = [ "addr2line", "cc", - "cfg-if", + "cfg-if 1.0.0", "libc", "miniz_oxide", - "object 0.24.0", + "object 0.27.1", "rustc-demangle", ] @@ -55,10 +93,34 @@ dependencies = [ ] [[package]] -name = "bitflags" -version = "1.2.1" +name = "bincode" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blake3" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 0.1.10", + "constant_time_eq", + "crypto-mac 0.8.0", + "digest 0.9.0", +] [[package]] name = "block-buffer" @@ -67,7 +129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ "block-padding", - "generic-array", + "generic-array 0.14.4", ] [[package]] @@ -76,6 +138,67 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +[[package]] +name = "borsh" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a7111f797cc721407885a323fb071636aee57f750b1a4ddc27397eba168a74" +dependencies = [ + "borsh-derive", + "hashbrown 0.9.1", +] + +[[package]] +name = "borsh-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307f3740906bac2c118a8122fe22681232b244f1369273e45f1156b45c43d2dd" +dependencies = [ + "borsh-derive-internal", + "borsh-schema-derive-internal", + "proc-macro-crate", + "proc-macro2", + "syn", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2104c73179359431cc98e016998f2f23bc7a05bc53e79741bcba705f30047bc" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae29eb8418fcd46f723f8691a2ac06857d31179d33d2f2d91eb13967de97c728" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bs58" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" + +[[package]] +name = "bv" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340" +dependencies = [ + "feature-probe", + "serde", +] + [[package]] name = "byteorder" version = "1.4.3" @@ -84,9 +207,15 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cc" -version = "1.0.68" +version = "1.0.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787" +checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "cfg-if" @@ -102,9 +231,15 @@ checksum = "591ff76ca0691bd91c1b0b5b987e5cf93b21ec810ad96665c5a569c60846dd93" [[package]] name = "const-oid" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdab415d6744056100f40250a66bc430c1a46f7a02e20bc11c94c79a0f0464df" +checksum = "9d6f2aa4d0537bcc1c74df8755072bd31c1ef1a3a1b85a68e8404a8c353b7b8b" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] name = "cosmwasm-crypto" @@ -112,7 +247,7 @@ version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec9bdd1f4da5fc0d085251b0322661c5aaf773ab299e3e205fb18130b7f6ba3" dependencies = [ - "digest", + "digest 0.9.0", "ed25519-zebra", "k256", "rand_core 0.5.1", @@ -177,9 +312,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed00c67cb5d0a7d64a44f6ad2668db7e7530311dd53ea79bcd4fb022c64911c8" +checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" dependencies = [ "libc", ] @@ -203,7 +338,7 @@ dependencies = [ "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", - "gimli", + "gimli 0.24.0", "log", "regalloc", "smallvec", @@ -250,7 +385,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -259,28 +394,28 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" +checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52fb27eab85b17fbb9f6fd667089e07d6a2eb8743d02639ee7f6a7a7729c9c94" +checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "crossbeam-utils", "lazy_static", "memoffset", @@ -289,12 +424,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feb231f0d4d6af81aed15928e58ecf5816aa62a2393e2c82f46973e92a9a278" +checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" dependencies = [ - "autocfg", - "cfg-if", + "cfg-if 1.0.0", "lazy_static", ] @@ -312,26 +446,49 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d12477e115c0d570c12a2dfd859f80b55b60ddb5075df210d3af06d133a69f45" +checksum = "f83bd3bb4314701c568e340cd8cf78c975aa0ca79e03d3f6d1677d5b0c9c0c03" dependencies = [ - "generic-array", + "generic-array 0.14.4", "rand_core 0.6.3", "subtle", "zeroize", ] +[[package]] +name = "crypto-mac" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" +dependencies = [ + "generic-array 0.14.4", + "subtle", +] + [[package]] name = "crypto-mac" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array", + "generic-array 0.14.4", "subtle", ] +[[package]] +name = "curve25519-dalek" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" +dependencies = [ + "byteorder", + "digest 0.8.1", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + [[package]] name = "curve25519-dalek" version = "3.2.0" @@ -339,7 +496,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ "byteorder", - "digest", + "digest 0.9.0", "rand_core 0.5.1", "subtle", "zeroize", @@ -479,20 +636,29 @@ dependencies = [ [[package]] name = "der" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2adca118c71ecd9ae094d4b68257b3fdfcb711a612b9eec7b5a0d27a5a70a5b4" +checksum = "28e98c534e9c8a0483aa01d6f6913bc063de254311bd267c9cf535e9b70e15b2" dependencies = [ "const-oid", ] +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + [[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.4", ] [[package]] @@ -503,9 +669,9 @@ checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" [[package]] name = "dynasm" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc2d9a5e44da60059bd38db2d05cbb478619541b8c79890547861ec1e3194f0" +checksum = "ab1096ebdaa974cd6a41a743e94dfa00cce9bfbf4690bcc73fdec6a903938ccc" dependencies = [ "bitflags", "byteorder", @@ -518,13 +684,13 @@ dependencies = [ [[package]] name = "dynasmrt" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42276e3f205fe63887cca255aa9a65a63fb72764c30b9a6252a7c7e46994f689" +checksum = "c20c69d1e16ae47889b47c301c790f48615cd9bfbdf586e3f6d4fde64af3d259" dependencies = [ "byteorder", "dynasm", - "memmap2", + "memmap2 0.5.0", ] [[package]] @@ -545,7 +711,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a128b76af6dd4b427e34a6fd43dc78dbfe73672ec41ff615a2414c1a0ad0409" dependencies = [ - "curve25519-dalek", + "curve25519-dalek 3.2.0", "hex", "rand_core 0.5.1", "serde", @@ -567,7 +733,7 @@ checksum = "beca177dcb8eb540133e7680baff45e7cc4d93bf22002676cec549f82343721b" dependencies = [ "crypto-bigint", "ff", - "generic-array", + "generic-array 0.14.4", "group", "pkcs8", "rand_core 0.6.3", @@ -577,9 +743,9 @@ dependencies = [ [[package]] name = "enumset" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e76129da36102af021b8e5000dab2c1c30dbef85c1e482beeff8da5dde0e0b0" +checksum = "6216d2c19a6fb5f29d1ada1dc7bc4367a8cbf0fa4af5cf12e07b5bbdde6b5b2c" dependencies = [ "enumset_derive", ] @@ -596,12 +762,31 @@ dependencies = [ "syn", ] +[[package]] +name = "env_logger" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "fallible-iterator" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" +[[package]] +name = "feature-probe" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da" + [[package]] name = "ff" version = "0.10.1" @@ -618,12 +803,22 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + [[package]] name = "generic-array" version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ + "serde", "typenum", "version_check", ] @@ -634,7 +829,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] @@ -645,7 +840,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "wasi 0.10.2+wasi-snapshot-preview1", ] @@ -661,6 +856,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4" + [[package]] name = "group" version = "0.10.0" @@ -677,12 +878,21 @@ name = "hashbrown" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] @@ -699,10 +909,16 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ - "crypto-mac", - "digest", + "crypto-mac 0.11.1", + "digest 0.9.0", ] +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "ident_case" version = "1.0.1" @@ -711,20 +927,29 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "indexmap" -version = "1.6.2" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.11.2", "serde", ] [[package]] -name = "itoa" -version = "0.4.7" +name = "itertools" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "k256" @@ -732,7 +957,7 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "903ae2481bcdfdb7b68e0a9baa4b7c9aff600b9ae2e8e5bb5833b8c91ab851ea" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "ecdsa", "elliptic-curve", "sha2", @@ -752,23 +977,23 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "leb128" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.95" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "789da6d93f1b866ffe175afc5322a4d76c038605a1c3319bb57b06967ca98a36" +checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119" [[package]] name = "libloading" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" +checksum = "afe203d669ec979b7128619bae5a63b7b42e9203c1b29146079ee05e2f604b52" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "winapi", ] @@ -778,7 +1003,7 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -817,6 +1042,14 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +[[package]] +name = "memmap2" +version = "0.1.0" +source = "git+https://github.com/certusone/wormhole#dac68d093c96c20f86d5b897ffc4667a34478111" +dependencies = [ + "libc", +] + [[package]] name = "memmap2" version = "0.2.3" @@ -826,6 +1059,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memmap2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4647a11b578fead29cdbb34d4adef8dd3dc35b876c9c6d5240d83f205abfe96e" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.6.4" @@ -847,9 +1089,29 @@ dependencies = [ [[package]] name = "more-asserts" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] [[package]] name = "num_cpus" @@ -861,12 +1123,6 @@ dependencies = [ "libc", ] -[[package]] -name = "object" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5b3dd1c072ee7963717671d1ca129f1048fda25edea6b752bfc71ac8854170" - [[package]] name = "object" version = "0.25.3" @@ -878,6 +1134,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "object" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9" +dependencies = [ + "memchr", +] + [[package]] name = "opaque-debug" version = "0.3.0" @@ -908,9 +1173,18 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] [[package]] name = "proc-macro-error" @@ -938,9 +1212,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.27" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ "unicode-xid", ] @@ -965,15 +1239,60 @@ dependencies = [ "syn", ] +[[package]] +name = "pyth-bridge" +version = "0.1.0" +dependencies = [ + "bigint", + "cosmwasm-std", + "cosmwasm-storage", + "cosmwasm-vm", + "cw20", + "cw20-base", + "cw20-wrapped", + "generic-array 0.14.4", + "hex", + "k256", + "lazy_static", + "pyth-client", + "schemars", + "serde", + "serde_derive", + "serde_json", + "sha3", + "solana-program", + "terraswap", + "thiserror", + "wormhole", +] + +[[package]] +name = "pyth-client" +version = "0.2.2" +source = "git+https://github.com/pyth-network/pyth-client-rs?branch=v2#0d2689fdd4ffba09d7d77f5a52b09e16912983ec" + [[package]] name = "quote" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + [[package]] name = "rand" version = "0.8.4" @@ -981,9 +1300,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", - "rand_chacha", + "rand_chacha 0.3.1", "rand_core 0.6.3", - "rand_hc", + "rand_hc 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -1014,6 +1343,15 @@ dependencies = [ "getrandom 0.2.3", ] +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + [[package]] name = "rand_hc" version = "0.3.1" @@ -1068,6 +1406,23 @@ dependencies = [ "smallvec", ] +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + [[package]] name = "region" version = "2.2.0" @@ -1114,9 +1469,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.19" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410f7acf3cb3a44527c5d9546bad4bf4e6c460915d5f9f2fc524498bfe8f70ce" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -1124,6 +1479,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + [[package]] name = "rustversion" version = "1.0.5" @@ -1138,9 +1502,9 @@ checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" [[package]] name = "schemars" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7a48d098c2a7fdf5740b19deb1181b4fb8a9e68e03ae517c14cde04b5725409" +checksum = "271ac0c667b8229adf70f0f957697c96fafd7486ab7481e15dc5e45e3e6a4368" dependencies = [ "dyn-clone", "schemars_derive", @@ -1150,9 +1514,9 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9ea2a613fe4cd7118b2bb101a25d8ae6192e1975179b67b2f17afd11e70ac8" +checksum = "6ebda811090b257411540779860bc09bf321bc587f58d2c5864309d1566214e7" dependencies = [ "proc-macro2", "quote", @@ -1173,10 +1537,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] -name = "serde" -version = "1.0.126" +name = "semver" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.130" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] @@ -1201,9 +1580,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.126" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2", "quote", @@ -1223,9 +1602,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "063bf466a64011ac24040a49009724ee60a57da1b437617ceb32e53ad61bfb19" dependencies = [ "itoa", "ryu", @@ -1234,14 +1613,14 @@ dependencies = [ [[package]] name = "sha2" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12" +checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ "block-buffer", - "cfg-if", + "cfg-if 1.0.0", "cpufeatures", - "digest", + "digest 0.9.0", "opaque-debug", ] @@ -1252,26 +1631,116 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" dependencies = [ "block-buffer", - "digest", + "digest 0.9.0", "keccak", "opaque-debug", ] [[package]] name = "signature" -version = "1.3.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19772be3c4dd2ceaacf03cb41d5885f2a02c4d8804884918e3a258480803335" +checksum = "f2807892cfa58e081aa1f1111391c7a0649d4fa127a4ffbe34bcbfb35a1171a4" dependencies = [ - "digest", + "digest 0.9.0", "rand_core 0.6.3", ] [[package]] name = "smallvec" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" + +[[package]] +name = "solana-frozen-abi" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b81e60d88b1fe0322bba6f3fe6b0d7299df2f2ededa8d95ec77b934fabb967b" +dependencies = [ + "bs58", + "bv", + "generic-array 0.14.4", + "log", + "memmap2 0.1.0", + "rustc_version", + "serde", + "serde_derive", + "sha2", + "solana-frozen-abi-macro", + "solana-logger", + "thiserror", +] + +[[package]] +name = "solana-frozen-abi-macro" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f617daa0187bcc4665d63fcf9454c998e9cdad6a33181f6214558d738230bfe2" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + +[[package]] +name = "solana-logger" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3e2b14bdcbb7b41de9ef5a541ac501ba3fbd07999cbcf7ea9006b3ae28b67b" +dependencies = [ + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "solana-program" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c5d59f9d358c09db6461fae1fde6075a456685d856c004ef21af092a830e4e7" +dependencies = [ + "bincode", + "blake3", + "borsh", + "borsh-derive", + "bs58", + "bv", + "curve25519-dalek 2.1.3", + "hex", + "itertools", + "lazy_static", + "log", + "num-derive", + "num-traits", + "rand 0.7.3", + "rustc_version", + "rustversion", + "serde", + "serde_bytes", + "serde_derive", + "sha2", + "sha3", + "solana-frozen-abi", + "solana-frozen-abi-macro", + "solana-logger", + "solana-sdk-macro", + "thiserror", +] + +[[package]] +name = "solana-sdk-macro" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27426b2a09676929c5e49df96967bbcffff003183c11a3c3ef11d78bac4aaaa" +dependencies = [ + "bs58", + "proc-macro2", + "quote", + "rustversion", + "syn", +] [[package]] name = "spki" @@ -1302,15 +1771,15 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "subtle" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.72" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e8cdbefb79a9a5a65e0db8b47b723ee907b7c7f8496c76a1770b5c310bab82" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ "proc-macro2", "quote", @@ -1329,14 +1798,23 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", - "rand", + "rand 0.8.4", "redox_syscall", "remove_dir_all", "winapi", ] +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + [[package]] name = "terra-cosmwasm" version = "2.2.0" @@ -1364,18 +1842,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.25" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6" +checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.25" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d" +checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", @@ -1393,7 +1871,7 @@ dependencies = [ "cw20", "cw20-base", "cw20-wrapped", - "generic-array", + "generic-array 0.14.4", "hex", "k256", "lazy_static", @@ -1407,12 +1885,21 @@ dependencies = [ ] [[package]] -name = "tracing" -version = "0.1.28" +name = "toml" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f96e095c0c82419687c20ddf5cb3eadb61f4e1405923c9dc8e53a1adacbda8" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" dependencies = [ - "cfg-if", + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +dependencies = [ + "cfg-if 1.0.0", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1420,9 +1907,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.16" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98863d0dd09fa59a1b79c6750ad80dbda6b75f4e71c437a6a1a8cb91a8bcbd77" +checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ "proc-macro2", "quote", @@ -1431,18 +1918,18 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46125608c26121c81b0c6d693eab5a420e416da7e43c426d2e8f7df8da8a3acf" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" dependencies = [ "lazy_static", ] [[package]] name = "typenum" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" [[package]] name = "uint" @@ -1486,7 +1973,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f52e455a01d0fac439cd7a96ba9b519bdc84e923a5b96034054697ebb17cd75" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "indexmap", "loupe", "more-asserts", @@ -1532,7 +2019,7 @@ dependencies = [ "cranelift-codegen", "cranelift-entity", "cranelift-frontend", - "gimli", + "gimli 0.24.0", "loupe", "more-asserts", "rayon", @@ -1583,7 +2070,7 @@ dependencies = [ "backtrace", "lazy_static", "loupe", - "memmap2", + "memmap2 0.2.3", "more-asserts", "rustc-demangle", "serde", @@ -1601,7 +2088,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aa390d123ebe23d5315c39f6063fcc18319661d03c8000f23d0fe1c011e8135" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "leb128", "libloading", "loupe", @@ -1623,7 +2110,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dffe8015f08915eb4939ebc8e521cde8246f272f5197ea60d46214ac5aef285" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "leb128", "loupe", "region", @@ -1680,7 +2167,7 @@ checksum = "469a12346a4831e7dac639b9646d8c9b24c7d2cf0cf458b77f489edb35060c1f" dependencies = [ "backtrace", "cc", - "cfg-if", + "cfg-if 1.0.0", "indexmap", "libc", "loupe", @@ -1727,6 +2214,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -1743,7 +2239,7 @@ dependencies = [ "cw20", "cw20-base", "cw20-wrapped", - "generic-array", + "generic-array 0.14.4", "getrandom 0.2.3", "hex", "k256", @@ -1757,6 +2253,6 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.3.0" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +checksum = "d68d9dcec5f9b43a30d38c49f91dfedfaac384cb8f085faca366c26207dd1619" diff --git a/terra/Cargo.toml b/terra/Cargo.toml index 97a55debf..5d20239f5 100644 --- a/terra/Cargo.toml +++ b/terra/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["contracts/cw20-wrapped", "contracts/wormhole", "contracts/token-bridge"] +members = ["contracts/cw20-wrapped", "contracts/wormhole", "contracts/token-bridge", "contracts/pyth-bridge"] [profile.release] opt-level = 3 @@ -11,3 +11,6 @@ codegen-units = 1 panic = 'abort' incremental = false overflow-checks = true + +[patch.crates-io] +memmap2 = { git = "https://github.com/certusone/wormhole", package = "memmap2" } \ No newline at end of file diff --git a/terra/build.sh b/terra/build.sh index cd899640c..c564a0414 100755 --- a/terra/build.sh +++ b/terra/build.sh @@ -3,4 +3,4 @@ docker run --rm -v "$(pwd)":/code \ --mount type=volume,source="$(basename "$(pwd)")_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/workspace-optimizer:0.10.7 + cosmwasm/workspace-optimizer:0.12.1 diff --git a/terra/contracts/pyth-bridge/Cargo.toml b/terra/contracts/pyth-bridge/Cargo.toml new file mode 100644 index 000000000..4c76b0dbe --- /dev/null +++ b/terra/contracts/pyth-bridge/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "pyth-bridge" +version = "0.1.0" +authors = ["Wormhole Contributors "] +edition = "2018" +description = "Pyth price receiver" + +[lib] +crate-type = ["cdylib", "rlib"] + +[features] +backtraces = ["cosmwasm-std/backtraces"] +# use library feature to disable all init/handle/query exports +library = [] + +[dependencies] +cosmwasm-std = { version = "0.16.0" } +cosmwasm-storage = { version = "0.16.0" } +schemars = "0.8.1" +serde = { version = "1.0.103", default-features = false, features = ["derive"] } +serde_derive = { version = "1.0.103"} +cw20 = "0.8.0" +cw20-base = { version = "0.8.0", features = ["library"] } +cw20-wrapped = { path = "../cw20-wrapped", features = ["library"] } +terraswap = "2.4.0" +wormhole = { path = "../wormhole", features = ["library"] } +thiserror = { version = "1.0.20" } +k256 = { version = "0.9.4", default-features = false, features = ["ecdsa"] } +sha3 = { version = "0.9.1", default-features = false } +generic-array = { version = "0.14.4" } +hex = "0.4.2" +lazy_static = "1.4.0" +bigint = "4" +pyth-client = {git = "https://github.com/pyth-network/pyth-client-rs", branch = "v2"} +solana-program = "=1.7.0" + +[dev-dependencies] +cosmwasm-vm = { version = "0.16.0", default-features = false } +serde_json = "1.0" diff --git a/terra/contracts/pyth-bridge/src/contract.rs b/terra/contracts/pyth-bridge/src/contract.rs new file mode 100644 index 000000000..10ffca43c --- /dev/null +++ b/terra/contracts/pyth-bridge/src/contract.rs @@ -0,0 +1,176 @@ +use cosmwasm_std::{ + entry_point, + to_binary, + Binary, + CosmosMsg, + Deps, + DepsMut, + Env, + MessageInfo, + QueryRequest, + Response, + StdError, + StdResult, + WasmMsg, + WasmQuery, +}; + +use crate::{ + msg::{ + ExecuteMsg, + InstantiateMsg, + MigrateMsg, + QueryMsg, + }, + state::{ + config, + config_read, + price_info, + price_info_read, + ConfigInfo, + UpgradeContract, + }, + types::PriceAttestation, +}; +use wormhole::{ + byte_utils::get_string_from_32, + error::ContractError, + msg::QueryMsg as WormholeQueryMsg, + state::{ + vaa_archive_add, + vaa_archive_check, + GovernancePacket, + ParsedVAA, + }, +}; + +// Chain ID of Terra +const CHAIN_ID: u16 = 3; + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn migrate(_deps: DepsMut, _env: Env, _msg: MigrateMsg) -> StdResult { + Ok(Response::new()) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn instantiate( + deps: DepsMut, + _env: Env, + _info: MessageInfo, + msg: InstantiateMsg, +) -> StdResult { + // Save general wormhole info + let state = ConfigInfo { + gov_chain: msg.gov_chain, + gov_address: msg.gov_address.as_slice().to_vec(), + wormhole_contract: msg.wormhole_contract, + pyth_emitter: msg.pyth_emitter.as_slice().to_vec(), + }; + config(deps.storage).save(&state)?; + + Ok(Response::default()) +} + +pub fn parse_vaa(deps: DepsMut, block_time: u64, data: &Binary) -> StdResult { + let cfg = config_read(deps.storage).load()?; + let vaa: ParsedVAA = deps.querier.query(&QueryRequest::Wasm(WasmQuery::Smart { + contract_addr: cfg.wormhole_contract.clone(), + msg: to_binary(&WormholeQueryMsg::VerifyVAA { + vaa: data.clone(), + block_time, + })?, + }))?; + Ok(vaa) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult { + match msg { + ExecuteMsg::SubmitVaa { data } => submit_vaa(deps, env, info, &data), + } +} + +fn submit_vaa( + mut deps: DepsMut, + env: Env, + _info: MessageInfo, + data: &Binary, +) -> StdResult { + let state = config_read(deps.storage).load()?; + + let vaa = parse_vaa(deps.branch(), env.block.time.seconds(), data)?; + let data = vaa.payload; + + if vaa_archive_check(deps.storage, vaa.hash.as_slice()) { + return ContractError::VaaAlreadyExecuted.std_err(); + } + vaa_archive_add(deps.storage, vaa.hash.as_slice())?; + + // check if vaa is from governance + if state.gov_chain == vaa.emitter_chain && state.gov_address == vaa.emitter_address { + return handle_governance_payload(deps, env, &data); + } + + let message = + PriceAttestation::deserialize(&data[..]).map_err(|_| ContractError::InvalidVAA.std())?; + if vaa.emitter_address != state.pyth_emitter { + return ContractError::InvalidVAA.std_err(); + } + + // Update price + price_info(deps.storage).save(&message.product_id.to_bytes()[..], &data)?; + + Ok(Response::new() + .add_attribute("action", "price_update") + .add_attribute("price_feed", message.product_id.to_string())) +} + +fn handle_governance_payload(deps: DepsMut, env: Env, data: &Vec) -> StdResult { + let gov_packet = GovernancePacket::deserialize(&data)?; + let module = get_string_from_32(&gov_packet.module)?; + + if module != "PythBridge" { + return Err(StdError::generic_err("this is not a valid module")); + } + + if gov_packet.chain != 0 && gov_packet.chain != CHAIN_ID { + return Err(StdError::generic_err( + "the governance VAA is for another chain", + )); + } + + match gov_packet.action { + 2u8 => handle_upgrade_contract(deps, env, &gov_packet.payload), + _ => ContractError::InvalidVAAAction.std_err(), + } +} + +fn handle_upgrade_contract(_deps: DepsMut, env: Env, data: &Vec) -> StdResult { + let UpgradeContract { new_contract } = UpgradeContract::deserialize(&data)?; + + Ok(Response::new() + .add_message(CosmosMsg::Wasm(WasmMsg::Migrate { + contract_addr: env.contract.address.to_string(), + new_code_id: new_contract, + msg: to_binary(&MigrateMsg {})?, + })) + .add_attribute("action", "contract_upgrade")) +} + +#[cfg_attr(not(feature = "library"), entry_point)] +pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { + match msg { + QueryMsg::PriceInfo { product_id } => { + to_binary(&query_price_info(deps, product_id.as_slice())?) + } + } +} + +pub fn query_price_info(deps: Deps, address: &[u8]) -> StdResult { + match price_info_read(deps.storage).load(address) { + Ok(data) => PriceAttestation::deserialize(&data[..]).map_err(|_| { + StdError::parse_err("PriceAttestation", "failed to decode price attestation") + }), + Err(_) => ContractError::AssetNotFound.std_err(), + } +} diff --git a/terra/contracts/pyth-bridge/src/lib.rs b/terra/contracts/pyth-bridge/src/lib.rs new file mode 100644 index 000000000..2642d1d69 --- /dev/null +++ b/terra/contracts/pyth-bridge/src/lib.rs @@ -0,0 +1,7 @@ +#[cfg(test)] +extern crate lazy_static; + +pub mod contract; +pub mod msg; +pub mod state; +pub mod types; \ No newline at end of file diff --git a/terra/contracts/pyth-bridge/src/msg.rs b/terra/contracts/pyth-bridge/src/msg.rs new file mode 100644 index 000000000..ed0b1e0a8 --- /dev/null +++ b/terra/contracts/pyth-bridge/src/msg.rs @@ -0,0 +1,38 @@ +use cosmwasm_std::{ + Binary, +}; +use schemars::JsonSchema; +use serde::{ + Deserialize, + Serialize, +}; + +type HumanAddr = String; + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] +pub struct InstantiateMsg { + // governance contract details + pub gov_chain: u16, + pub gov_address: Binary, + + pub wormhole_contract: HumanAddr, + pub pyth_emitter: Binary, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum ExecuteMsg { + SubmitVaa { + data: Binary, + }, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub struct MigrateMsg {} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] +#[serde(rename_all = "snake_case")] +pub enum QueryMsg { + PriceInfo { product_id: Binary }, +} diff --git a/terra/contracts/pyth-bridge/src/state.rs b/terra/contracts/pyth-bridge/src/state.rs new file mode 100644 index 000000000..30b1b58a7 --- /dev/null +++ b/terra/contracts/pyth-bridge/src/state.rs @@ -0,0 +1,67 @@ +use schemars::JsonSchema; +use serde::{ + Deserialize, + Serialize, +}; + +use cosmwasm_std::{ + StdResult, + Storage, +}; +use cosmwasm_storage::{ + bucket, + bucket_read, + singleton, + singleton_read, + Bucket, + ReadonlyBucket, + ReadonlySingleton, + Singleton, +}; + +use wormhole::byte_utils::ByteUtils; + +type HumanAddr = String; + +pub static CONFIG_KEY: &[u8] = b"config"; +pub static PRICE_INFO_KEY: &[u8] = b"price_info"; + +// Guardian set information +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] +pub struct ConfigInfo { + // governance contract details + pub gov_chain: u16, + pub gov_address: Vec, + + pub wormhole_contract: HumanAddr, + pub pyth_emitter: Vec, +} + +pub fn config(storage: &mut dyn Storage) -> Singleton { + singleton(storage, CONFIG_KEY) +} + +pub fn config_read(storage: &dyn Storage) -> ReadonlySingleton { + singleton_read(storage, CONFIG_KEY) +} + +pub fn price_info(storage: &mut dyn Storage) -> Bucket> { + bucket(storage, PRICE_INFO_KEY) +} + +pub fn price_info_read(storage: &dyn Storage) -> ReadonlyBucket> { + bucket_read(storage, PRICE_INFO_KEY) +} + + +pub struct UpgradeContract { + pub new_contract: u64, +} + +impl UpgradeContract { + pub fn deserialize(data: &Vec) -> StdResult { + let data = data.as_slice(); + let new_contract = data.get_u64(24); + Ok(UpgradeContract { new_contract }) + } +} diff --git a/terra/contracts/pyth-bridge/src/types/mod.rs b/terra/contracts/pyth-bridge/src/types/mod.rs new file mode 100644 index 000000000..098f594f0 --- /dev/null +++ b/terra/contracts/pyth-bridge/src/types/mod.rs @@ -0,0 +1,235 @@ +pub mod pyth_extensions; + +use std::{ + convert::{ + TryInto, + }, + io::Read, + mem, +}; + +use solana_program::{ + clock::UnixTimestamp, + pubkey::Pubkey, +}; + +use self::pyth_extensions::{ + P2WCorpAction, + P2WEma, + P2WPriceStatus, + P2WPriceType, +}; + +// Constants and values common to every p2w custom-serialized message + +/// Precedes every message implementing the p2w serialization format +pub const P2W_MAGIC: &'static [u8] = b"P2WH"; + +/// Format version used and understood by this codebase +pub const P2W_FORMAT_VERSION: u16 = 1; + +pub const PUBKEY_LEN: usize = 32; + +/// Decides the format of following bytes +#[repr(u8)] +pub enum PayloadId { + PriceAttestation = 1, +} + +// On-chain data types + +#[derive(Clone, Default, Debug, Eq, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)] +pub struct PriceAttestation { + pub product_id: Pubkey, + pub price_id: Pubkey, + pub price_type: P2WPriceType, + pub price: i64, + pub expo: i32, + pub twap: P2WEma, + pub twac: P2WEma, + pub confidence_interval: u64, + pub status: P2WPriceStatus, + pub corp_act: P2WCorpAction, + pub timestamp: UnixTimestamp, +} + +impl PriceAttestation { + /// Serialize this attestation according to the Pyth-over-wormhole serialization format + pub fn serialize(&self) -> Vec { + // A nifty trick to get us yelled at if we forget to serialize a field + #[deny(warnings)] + let PriceAttestation { + product_id, + price_id, + price_type, + price, + expo, + twap, + twac, + confidence_interval, + status, + corp_act, + timestamp, + } = self; + + // magic + let mut buf = P2W_MAGIC.to_vec(); + + // version + buf.extend_from_slice(&P2W_FORMAT_VERSION.to_be_bytes()[..]); + + // payload_id + buf.push(PayloadId::PriceAttestation as u8); + + // product_id + buf.extend_from_slice(&product_id.to_bytes()[..]); + + // price_id + buf.extend_from_slice(&price_id.to_bytes()[..]); + + // price_type + buf.push(price_type.clone() as u8); + + // price + buf.extend_from_slice(&price.to_be_bytes()[..]); + + // exponent + buf.extend_from_slice(&expo.to_be_bytes()[..]); + + // twap + buf.append(&mut twap.serialize()); + + // twac + buf.append(&mut twac.serialize()); + + // confidence_interval + buf.extend_from_slice(&confidence_interval.to_be_bytes()[..]); + + // status + buf.push(status.clone() as u8); + + // corp_act + buf.push(corp_act.clone() as u8); + + // timestamp + buf.extend_from_slice(×tamp.to_be_bytes()[..]); + + buf + } + pub fn deserialize(mut bytes: impl Read) -> Result> { + use P2WCorpAction::*; + use P2WPriceStatus::*; + use P2WPriceType::*; + + println!("Using {} bytes for magic", P2W_MAGIC.len()); + let mut magic_vec = vec![0u8; P2W_MAGIC.len()]; + + bytes.read_exact(magic_vec.as_mut_slice())?; + + if magic_vec.as_slice() != P2W_MAGIC { + return Err(format!( + "Invalid magic {:02X?}, expected {:02X?}", + magic_vec, P2W_MAGIC, + ) + .into()); + } + + let mut version_vec = vec![0u8; mem::size_of_val(&P2W_FORMAT_VERSION)]; + bytes.read_exact(version_vec.as_mut_slice())?; + let version = u16::from_be_bytes(version_vec.as_slice().try_into()?); + + if version != P2W_FORMAT_VERSION { + return Err(format!( + "Unsupported format version {}, expected {}", + version, P2W_FORMAT_VERSION + ) + .into()); + } + + let mut payload_id_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(payload_id_vec.as_mut_slice())?; + + if PayloadId::PriceAttestation as u8 != payload_id_vec[0] { + return Err(format!( + "Invalid Payload ID {}, expected {}", + payload_id_vec[0], + PayloadId::PriceAttestation as u8, + ) + .into()); + } + + let mut product_id_vec = vec![0u8; PUBKEY_LEN]; + bytes.read_exact(product_id_vec.as_mut_slice())?; + let product_id = Pubkey::new(product_id_vec.as_slice()); + + let mut price_id_vec = vec![0u8; PUBKEY_LEN]; + bytes.read_exact(price_id_vec.as_mut_slice())?; + let price_id = Pubkey::new(price_id_vec.as_slice()); + + let mut price_type_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(price_type_vec.as_mut_slice())?; + let price_type = match price_type_vec[0] { + a if a == Price as u8 => Price, + a if a == P2WPriceType::Unknown as u8 => P2WPriceType::Unknown, + other => { + return Err(format!("Invalid price_type value {}", other).into()); + } + }; + + let mut price_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(price_vec.as_mut_slice())?; + let price = i64::from_be_bytes(price_vec.as_slice().try_into()?); + + let mut expo_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(expo_vec.as_mut_slice())?; + let expo = i32::from_be_bytes(expo_vec.as_slice().try_into()?); + + let twap = P2WEma::deserialize(&mut bytes)?; + let twac = P2WEma::deserialize(&mut bytes)?; + + println!("twac OK"); + let mut confidence_interval_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(confidence_interval_vec.as_mut_slice())?; + let confidence_interval = u64::from_be_bytes(confidence_interval_vec.as_slice().try_into()?); + + let mut status_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(status_vec.as_mut_slice())?; + let status = match status_vec[0] { + a if a == P2WPriceStatus::Unknown as u8 => P2WPriceStatus::Unknown, + a if a == Trading as u8 => Trading, + a if a == Halted as u8 => Halted, + a if a == Auction as u8 => Auction, + other => { + return Err(format!("Invalid status value {}", other).into()); + } + }; + + + let mut corp_act_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(corp_act_vec.as_mut_slice())?; + let corp_act = match corp_act_vec[0] { + a if a == NoCorpAct as u8 => NoCorpAct, + other => { + return Err(format!("Invalid corp_act value {}", other).into()); + } + }; + + let mut timestamp_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(timestamp_vec.as_mut_slice())?; + let timestamp = UnixTimestamp::from_be_bytes(timestamp_vec.as_slice().try_into()?); + + Ok(Self { + product_id, + price_id, + price_type, + price, + expo, + twap, + twac, + confidence_interval, + status, + corp_act, + timestamp, + }) + } +} diff --git a/terra/contracts/pyth-bridge/src/types/pyth_extensions.rs b/terra/contracts/pyth-bridge/src/types/pyth_extensions.rs new file mode 100644 index 000000000..3aa0ca235 --- /dev/null +++ b/terra/contracts/pyth-bridge/src/types/pyth_extensions.rs @@ -0,0 +1,155 @@ +//! This module contains 1:1 (or close) copies of selected Pyth types +//! with quick and dirty enhancements. + +use std::{convert::TryInto, io::Read, mem}; + +use pyth_client::{ + CorpAction, + Ema, + PriceStatus, + PriceType, +}; + +/// 1:1 Copy of pyth_client::PriceType with derived additional traits. +#[derive(Clone, Debug, Eq, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)] +#[repr(u8)] +pub enum P2WPriceType { + Unknown, + Price, +} + +impl From<&PriceType> for P2WPriceType { + fn from(pt: &PriceType) -> Self { + match pt { + PriceType::Unknown => Self::Unknown, + PriceType::Price => Self::Price, + } + } +} + +impl Default for P2WPriceType { + fn default() -> Self { + Self::Price + } +} + +/// 1:1 Copy of pyth_client::PriceStatus with derived additional traits. +#[derive(Clone, Debug, Eq, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)] +pub enum P2WPriceStatus { + Unknown, + Trading, + Halted, + Auction, +} + +impl From<&PriceStatus> for P2WPriceStatus { + fn from(ps: &PriceStatus) -> Self { + match ps { + PriceStatus::Unknown => Self::Unknown, + PriceStatus::Trading => Self::Trading, + PriceStatus::Halted => Self::Halted, + PriceStatus::Auction => Self::Auction, + } + } +} + +impl Default for P2WPriceStatus { + fn default() -> Self { + Self::Trading + } +} + +/// 1:1 Copy of pyth_client::CorpAction with derived additional traits. +#[derive(Clone, Debug, Eq, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)] +pub enum P2WCorpAction { + NoCorpAct, +} + +impl Default for P2WCorpAction { + fn default() -> Self { + Self::NoCorpAct + } +} + +impl From<&CorpAction> for P2WCorpAction { + fn from(ca: &CorpAction) -> Self { + match ca { + CorpAction::NoCorpAct => P2WCorpAction::NoCorpAct, + } + } +} + +/// 1:1 Copy of pyth_client::Ema with all-pub fields. +#[derive(Clone, Default, Debug, Eq, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)] +#[repr(C)] +pub struct P2WEma { + pub val: i64, + pub numer: i64, + pub denom: i64, +} + +/// CAUTION: This impl may panic and requires an unsafe cast +impl From<&Ema> for P2WEma { + fn from(ema: &Ema) -> Self { + let our_size = mem::size_of::(); + let upstream_size = mem::size_of::(); + if our_size == upstream_size { + unsafe { std::mem::transmute_copy(ema) } + } else { + dbg!(our_size); + dbg!(upstream_size); + // Because of private upstream fields it's impossible to + // complain about type-level changes at compile-time + panic!("P2WEma sizeof mismatch") + } + } +} + +/// CAUTION: This impl may panic and requires an unsafe cast +impl Into for &P2WEma { + fn into(self) -> Ema { + let our_size = mem::size_of::(); + let upstream_size = mem::size_of::(); + if our_size == upstream_size { + unsafe { std::mem::transmute_copy(self) } + } else { + dbg!(our_size); + dbg!(upstream_size); + // Because of private upstream fields it's impossible to + // complain about type-level changes at compile-time + panic!("P2WEma sizeof mismatch") + } + } +} + +impl P2WEma { + pub fn serialize(&self) -> Vec { + let mut v = vec![]; + // val + v.extend(&self.val.to_be_bytes()[..]); + + // numer + v.extend(&self.numer.to_be_bytes()[..]); + + // denom + v.extend(&self.denom.to_be_bytes()[..]); + + v + } + + pub fn deserialize(mut bytes: impl Read) -> Result> { + let mut val_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(val_vec.as_mut_slice())?; + let val = i64::from_be_bytes(val_vec.as_slice().try_into()?); + + let mut numer_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(numer_vec.as_mut_slice())?; + let numer = i64::from_be_bytes(numer_vec.as_slice().try_into()?); + + let mut denom_vec = vec![0u8; mem::size_of::()]; + bytes.read_exact(denom_vec.as_mut_slice())?; + let denom = i64::from_be_bytes(denom_vec.as_slice().try_into()?); + + Ok(Self { val, numer, denom }) + } +}