From 072b47779fcb219f468977bd7e727b4a83d9bd44 Mon Sep 17 00:00:00 2001 From: Austin Abell Date: Sat, 4 Sep 2021 09:09:24 -0400 Subject: [PATCH] feat: implement callback_result annotation (#554) --- CHANGELOG.md | 2 + examples/callback-results/.cargo/config.toml | 2 + examples/callback-results/Cargo.lock | 3427 +++++++++++++++++ examples/callback-results/Cargo.toml | 22 + examples/callback-results/build.sh | 7 + .../res/callback_results.wasm | Bin 0 -> 104452 bytes examples/callback-results/src/lib.rs | 67 + examples/callback-results/tests/general.rs | 50 + .../res/cross_contract_high_level.wasm | Bin 244783 -> 244783 bytes examples/cross-contract-high-level/src/lib.rs | 10 +- .../core_impl/code_generator/attr_sig_info.rs | 88 +- .../code_generator/item_impl_info.rs | 40 +- .../code_generator/item_trait_info.rs | 4 +- .../src/core_impl/info_extractor/arg_info.rs | 13 +- near-sdk/src/types/vm_types.rs | 9 + 15 files changed, 3694 insertions(+), 47 deletions(-) create mode 100644 examples/callback-results/.cargo/config.toml create mode 100644 examples/callback-results/Cargo.lock create mode 100644 examples/callback-results/Cargo.toml create mode 100755 examples/callback-results/build.sh create mode 100755 examples/callback-results/res/callback_results.wasm create mode 100644 examples/callback-results/src/lib.rs create mode 100644 examples/callback-results/tests/general.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 640e8284f..4fe55545d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog ## [unreleased] +- Introduce `#[callback_result]` annotation, which acts like `#[callback]` except that it returns `Result` to allow error handling. [PR 554](https://github.com/near/near-sdk-rs/pull/554) + - Adds `#[callback_unwrap]` to replace `callback` - mock: Update `method_names` field of `AddKeyWithFunctionCall` to a `Vec` from `Vec>`. [PR 555](https://github.com/near/near-sdk-rs/pull/555) - Method names were changed to be strings in `4.0.0-pre.2` but this one was missed - env: Update the register used for temporary `env` methods to `u64::MAX - 2` from `0`. [PR 557](https://github.com/near/near-sdk-rs/pull/489). diff --git a/examples/callback-results/.cargo/config.toml b/examples/callback-results/.cargo/config.toml new file mode 100644 index 000000000..dadf1d355 --- /dev/null +++ b/examples/callback-results/.cargo/config.toml @@ -0,0 +1,2 @@ +[target.wasm32-unknown-unknown] +rustflags = ["-C", "link-arg=-s"] diff --git a/examples/callback-results/Cargo.lock b/examples/callback-results/Cargo.lock new file mode 100644 index 000000000..2258195ab --- /dev/null +++ b/examples/callback-results/Cargo.lock @@ -0,0 +1,3427 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" + +[[package]] +name = "addr2line" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" +dependencies = [ + "gimli 0.23.0", +] + +[[package]] +name = "adler" +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.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1" + +[[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 = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-trait" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +dependencies = [ + "addr2line", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object 0.23.0", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bincode" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" +dependencies = [ + "byteorder", + "serde", +] + +[[package]] +name = "bindgen" +version = "0.54.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c0bb6167449588ff70803f4127f0684f9063097eca5016f37eb52b92c2cf36" +dependencies = [ + "bitflags", + "cexpr", + "cfg-if 0.1.10", + "clang-sys", + "clap", + "env_logger", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which 3.1.1", +] + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "bitvec" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5011ffc90248764d7005b0e10c7294f5aa1bd87d9dd7248f4ad475b347c294d" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a5720225ef5daecf08657f23791354e1685a8c91a4c60c7f3d3b2892f978f4" +dependencies = [ + "crypto-mac", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "blake3" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9ff35b701f3914bdb8fad3368d822c766ef2858b2583198e41639b936f09d3f" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if 0.1.10", + "constant_time_eq", + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "block-padding", + "generic-array 0.14.4", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "borsh" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5a26c53ddf60281f18e7a29b20db7ba3db82a9d81b9650bfaa02d646f50d364" +dependencies = [ + "borsh-derive", + "hashbrown", +] + +[[package]] +name = "borsh-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b637a47728b78a78cd7f4b85bf06d71ef4221840e059a38f048be2422bf673b2" +dependencies = [ + "borsh-derive-internal", + "borsh-schema-derive-internal", + "proc-macro-crate", + "proc-macro2", + "syn", +] + +[[package]] +name = "borsh-derive-internal" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d813fa25eb0bed78c36492cff4415f38c760d6de833d255ba9095bd8ebb7d725" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "borsh-schema-derive-internal" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf78ee4a98c8cb9eba1bac3d3e2a1ea3d7673c719ce691e67b5cbafc472d3b7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + +[[package]] +name = "byte-slice-cast" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c1bf4a04a88c54f589125563643d773f3254b5c38571395e2b591c693bbc81" + +[[package]] +name = "byteorder" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae44d1a3d5a19df61dd0c8beb138458ac2a53a7ac09eba97d55592540004306b" + +[[package]] +name = "bytes" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" + +[[package]] +name = "c2-chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb6b83fa00a7c53f420893670940c8fdfaa89f9dd9adb52062cca39482a31ab6" +dependencies = [ + "cipher", + "ppv-lite86", +] + +[[package]] +name = "cached" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2afe73808fbaac302e39c9754bfc3c4b4d0f99c9c240b9f4e4efc841ad1b74" +dependencies = [ + "async-mutex", + "async-trait", + "cached_proc_macro", + "cached_proc_macro_types", + "futures", + "hashbrown", + "once_cell", +] + +[[package]] +name = "cached_proc_macro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf857ae42d910aede5c5186e62684b0d7a597ce2fe3bd14448ab8f7ef439848c" +dependencies = [ + "async-mutex", + "cached_proc_macro_types", + "darling 0.10.2", + "quote", + "syn", +] + +[[package]] +name = "cached_proc_macro_types" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" + +[[package]] +name = "callback-results" +version = "0.1.0" +dependencies = [ + "near-sdk", + "near-sdk-sim", +] + +[[package]] +name = "cc" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cexpr" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +dependencies = [ + "libc", + "num-integer", + "num-traits", + "serde", + "time", + "winapi", +] + +[[package]] +name = "cipher" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "clang-sys" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" +dependencies = [ + "glob", + "libc", + "libloading 0.5.2", +] + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "concat-with" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ae45936bbf9bddd6a0268c0ea5d3814a72403f4b69a1c318aae2ce90444ad55" + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "cpuid-bool" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" + +[[package]] +name = "cranelift-bforest" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f065f6889758f817f61a230220d1811ba99a9762af2fb69ae23048314f75ff2" +dependencies = [ + "cranelift-entity 0.67.0", +] + +[[package]] +name = "cranelift-bforest" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9221545c0507dc08a62b2d8b5ffe8e17ac580b0a74d1813b496b8d70b070fbd0" +dependencies = [ + "cranelift-entity 0.68.0", +] + +[[package]] +name = "cranelift-codegen" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "510aa2ab4307644100682b94e449940a0ea15c5887f1d4b9678b8dd5ef31e736" +dependencies = [ + "byteorder", + "cranelift-bforest 0.67.0", + "cranelift-codegen-meta 0.67.0", + "cranelift-codegen-shared 0.67.0", + "cranelift-entity 0.67.0", + "gimli 0.21.0", + "log", + "regalloc 0.0.30", + "serde", + "smallvec", + "target-lexicon 0.11.2", + "thiserror", +] + +[[package]] +name = "cranelift-codegen" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9936ea608b6cd176f107037f6adbb4deac933466fc7231154f96598b2d3ab1" +dependencies = [ + "byteorder", + "cranelift-bforest 0.68.0", + "cranelift-codegen-meta 0.68.0", + "cranelift-codegen-shared 0.68.0", + "cranelift-entity 0.68.0", + "gimli 0.22.0", + "log", + "regalloc 0.0.31", + "smallvec", + "target-lexicon 0.11.2", + "thiserror", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4cb0c7e87c60d63b35f9670c15479ee4a5e557dd127efab88b2f9b2ca83c9a0" +dependencies = [ + "cranelift-codegen-shared 0.67.0", + "cranelift-entity 0.67.0", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef2b2768568306540f4c8db3acce9105534d34c4a1e440529c1e702d7f8c8d7" +dependencies = [ + "cranelift-codegen-shared 0.68.0", + "cranelift-entity 0.68.0", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60636227098693e06de8d6d88beea2a7d32ecf8a8030dacdb57c68e06f381826" + +[[package]] +name = "cranelift-codegen-shared" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6759012d6d19c4caec95793f052613e9d4113e925e7f14154defbac0f1d4c938" + +[[package]] +name = "cranelift-entity" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6156db73e0c9f65f80c512988d63ec736be0dee3dd66bf951e3e28aed9dc02d3" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-entity" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86badbce14e15f52a45b666b38abe47b204969dd7f8fb7488cb55dd46b361fa6" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e09cd158c9a820a4cc14a34076811da225cce1d31dc6d03c5ef85b91aef560b9" +dependencies = [ + "cranelift-codegen 0.67.0", + "log", + "smallvec", + "target-lexicon 0.11.2", +] + +[[package]] +name = "cranelift-frontend" +version = "0.68.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b608bb7656c554d0a4cf8f50c7a10b857e80306f6ff829ad6d468a7e2323c8d8" +dependencies = [ + "cranelift-codegen 0.68.0", + "log", + "smallvec", + "target-lexicon 0.11.2", +] + +[[package]] +name = "cranelift-native" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7054533ae1fc2048c1a6110bdf8f4314b77c60329ec6a7df79d2cfb84e3dcc1c" +dependencies = [ + "cranelift-codegen 0.67.0", + "raw-cpuid", + "target-lexicon 0.11.2", +] + +[[package]] +name = "cranelift-wasm" +version = "0.67.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aee0e0b68eba99f99a4923212d97aca9e44655ca8246f07fffe11236109b0d0" +dependencies = [ + "cranelift-codegen 0.67.0", + "cranelift-entity 0.67.0", + "cranelift-frontend 0.67.0", + "log", + "serde", + "thiserror", + "wasmparser 0.59.0", +] + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", + "lazy_static", + "memoffset 0.6.1", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "lazy_static", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[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 = "curve25519-dalek" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f627126b946c25a4638eec0ea634fc52506dea98db118aae985118ce7c3d723f" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core 0.10.2", + "darling_macro 0.10.2", +] + +[[package]] +name = "darling" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06d4a9551359071d1890820e3571252b91229e0712e7c36b08940e603c5a8fc" +dependencies = [ + "darling_core 0.12.2", + "darling_macro 0.12.2", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.9.3", + "syn", +] + +[[package]] +name = "darling_core" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b443e5fb0ddd56e0c9bfa47dc060c5306ee500cb731f2b91432dd65589a77684" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core 0.10.2", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0220073ce504f12a70efc4e7cdaea9e9b1b324872e7ad96a208056d7a638b81" +dependencies = [ + "darling_core 0.12.2", + "quote", + "syn", +] + +[[package]] +name = "derive_more" +version = "0.99.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.3", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.4", +] + +[[package]] +name = "dynasm" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7d1242462849390bb2ad38aeed769499f1afc7383affa2ab0c1baa894c0200" +dependencies = [ + "bitflags", + "byteorder", + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dynasmrt" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dd4d1d5ca12258cef339a57a7643e8b233a42dea9bb849630ddd9dd7726aa9" +dependencies = [ + "byteorder", + "dynasm", + "memmap2", +] + +[[package]] +name = "easy-ext" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80581ee1c96b68c603eee514af47f075b39829304bde1a04381c826f3e06a9b4" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "ed25519" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c66a534cbb46ab4ea03477eae19d5c22c01da8258030280b7bd9d8433fb6ef" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand 0.7.3", + "serde", + "sha2", + "zeroize", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "elastic-array" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d63720ea2bc2e1b79f7aa044d9dc0b825f9ccb6930b32120f8fb9e873aa84bc" +dependencies = [ + "heapsize", +] + +[[package]] +name = "enumset" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd795df6708a599abf1ee10eacc72efd052b7a5f70fdf0715e4d5151a6db9c3" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e19c52f9ec503c8a68dc04daf71a04b07e690c32ab1a8b68e33897f255269d47" +dependencies = [ + "darling 0.12.2", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "errno" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067" +dependencies = [ + "gcc", + "libc", +] + +[[package]] +name = "ethbloom" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "779864b9c7f7ead1f092972c3257496c6a84b46dba2ce131dd8a282cb2cc5972" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-rlp", + "impl-serde", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f64b5df66a228d85e4b17e5d6c6aa43b0310898ffe8a85988c4c032357aaabfd" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-rlp", + "impl-serde", + "primitive-types", + "uint", +] + +[[package]] +name = "event-listener" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fixed-hash" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" +dependencies = [ + "byteorder", + "rand 0.8.3", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "fs_extra" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" + +[[package]] +name = "funty" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" + +[[package]] +name = "futures" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9052a1a50244d8d5aa9bf55cbc2fb6f357c86cc52e46c62ed390a7180cf150" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d31b7ec7efab6eefc7c57233bb10b847986139d88cc2f5a02a1ae6871a1846" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79e5145dde8da7d1b3892dad07a9c98fc04bc39892b1ecc9692cf53e2b780a65" + +[[package]] +name = "futures-executor" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e59fdc009a4b3096bf94f740a0f2424c082521f20a9b08c5c07c48d90fd9b9" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28be053525281ad8259d47e4de5de657b25e7bac113458555bb4b70bc6870500" + +[[package]] +name = "futures-macro" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c287d25add322d9f9abdcdc5927ca398917996600182178774032e9f8258fedd" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf5c69029bda2e743fddd0582d1083951d65cc9539aebf8812f36c3491342d6" + +[[package]] +name = "futures-task" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13de07eb8ea81ae445aca7b69f5f7bf15d7bf4912d8ca37d6645c77ae8a58d86" +dependencies = [ + "once_cell", +] + +[[package]] +name = "futures-util" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "632a8cd0f2a4b3fdea1657f08bde063848c3bd00f9bbf6e256b8be78802e624b" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", +] + +[[package]] +name = "gcc" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" + +[[package]] +name = "generic-array" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.10.2+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcc8e0c9bce37868955864dbecd2b1ab2bdf967e6f28066d65aaac620444b65c" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" +dependencies = [ + "fallible-iterator", + "indexmap", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + +[[package]] +name = "heapsize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" +dependencies = [ + "winapi", +] + +[[package]] +name = "heck" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" + +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de910d521f7cc3135c4de8db1cb910e0b5ed1dc6f57c381cd07e8e661ce10094" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "impl-codec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df170efa359aebdd5cb7fe78edcc67107748e4737bdca8a8fb40d15ea7a877ed" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[package]] +name = "impl-serde" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b47ca4d2b6931707a55fce5cf66aff80e2178c8b63bbb4ecb5695cbc870ddf6f" +dependencies = [ + "serde", +] + +[[package]] +name = "indexmap" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b" +dependencies = [ + "autocfg", + "hashbrown", + "serde", +] + +[[package]] +name = "instant" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "itoa" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" + +[[package]] +name = "jemalloc-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d3b9f3f5c9b31aa0f5ed3260385ac205db665baa41d49bb8338008ae94ede45" +dependencies = [ + "cc", + "fs_extra", + "libc", +] + +[[package]] +name = "jemallocator" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43ae63fcfc45e99ab3d1b29a46782ad679e98436c3169d15a167a1108a724b69" +dependencies = [ + "jemalloc-sys", + "libc", +] + +[[package]] +name = "jobserver" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +dependencies = [ + "libc", +] + +[[package]] +name = "keccak" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" + +[[package]] +name = "lazy-static-include" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c942ea960c2d8678d32cb14aa56d5c37f21107b54aa281c944e4d03690c55d1" +dependencies = [ + "lazy_static", + "slash-formatter", + "syn", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "leb128" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3576a87f2ba00f6f106fdfcd16db1d698d648a26ad8e0573cad8537c3c362d2a" + +[[package]] +name = "libc" +version = "0.2.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c" + +[[package]] +name = "libloading" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" +dependencies = [ + "cc", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + +[[package]] +name = "librocksdb-sys" +version = "6.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb5b56f651c204634b936be2f92dbb42c36867e00ff7fe2405591f3b9fa66f09" +dependencies = [ + "bindgen", + "cc", + "glob", + "libc", +] + +[[package]] +name = "lock_api" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "lock_api" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "memmap2" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04e3e85b970d650e2ae6d70592474087051c11c54da7f7b4949725c5735fbcc6" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memory_units" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "more-asserts" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238" + +[[package]] +name = "near-crypto" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb14bec070cfd808438712cda5d54703001b9cf1196c8afaeadc9514e06d00a3" +dependencies = [ + "arrayref", + "blake2", + "borsh", + "bs58", + "c2-chacha", + "curve25519-dalek", + "derive_more", + "ed25519-dalek", + "lazy_static", + "libc", + "parity-secp256k1", + "rand 0.7.3", + "rand_core 0.5.1", + "serde", + "serde_json", + "subtle", + "thiserror", +] + +[[package]] +name = "near-metrics" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7b9dcbc960db15fcec85bcb29a78b57e4005b7b1a0afc70a26a97453862528e" +dependencies = [ + "lazy_static", + "log", + "prometheus", +] + +[[package]] +name = "near-pool" +version = "0.1.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde79472f7cfc0675733b65f79f9e50c20bfbb9806298ab2872916869a45dccd" +dependencies = [ + "borsh", + "near-crypto", + "near-primitives", + "rand 0.7.3", +] + +[[package]] +name = "near-primitives" +version = "0.1.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75ed2263518ca67a3c158c144813832fd96f48ab239494bb9d7793d315f31417" +dependencies = [ + "base64", + "borsh", + "bs58", + "byteorder", + "chrono", + "derive_more", + "easy-ext", + "hex", + "jemallocator", + "lazy_static", + "near-crypto", + "near-primitives-core", + "near-rpc-error-macro", + "near-vm-errors", + "num-rational", + "primitive-types", + "rand 0.7.3", + "reed-solomon-erasure", + "regex", + "serde", + "serde_json", + "sha2", + "smart-default", + "validator", +] + +[[package]] +name = "near-primitives-core" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2b3fb5acf3a494aed4e848446ef2d6ebb47dbe91c681105d4d1786c2ee63e52" +dependencies = [ + "base64", + "borsh", + "bs58", + "derive_more", + "hex", + "lazy_static", + "num-rational", + "serde", + "serde_json", + "sha2", +] + +[[package]] +name = "near-rpc-error-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffa8dbf8437a28ac40fcb85859ab0d0b8385013935b000c7a51ae79631dd74d9" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", +] + +[[package]] +name = "near-rpc-error-macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6111d713e90c7c551dee937f4a06cb9ea2672243455a4454cc7566387ba2d9" +dependencies = [ + "near-rpc-error-core", + "proc-macro2", + "quote", + "serde", + "serde_json", + "syn", +] + +[[package]] +name = "near-runtime" +version = "4.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4c0a4cd2ee5ccbc1fd5d492180ebf33ac1159d721b2e0c58c11953131fb449" +dependencies = [ + "borsh", + "byteorder", + "ethereum-types", + "hex", + "lazy_static", + "log", + "near-crypto", + "near-metrics", + "near-primitives", + "near-runtime-utils", + "near-store", + "near-vm-errors", + "near-vm-logic", + "near-vm-runner", + "num-bigint", + "num-rational", + "num-traits", + "rand 0.7.3", + "serde", + "serde_json", +] + +[[package]] +name = "near-runtime-utils" +version = "4.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a48d80c4ca1d4cf99bc16490e1e3d49826c150dfc4410ac498918e45c7d98e07" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "near-sdk" +version = "4.0.0-pre.2" +dependencies = [ + "base64", + "borsh", + "bs58", + "near-primitives-core", + "near-sdk-macros", + "near-sys", + "near-vm-logic", + "serde", + "serde_json", + "wee_alloc", +] + +[[package]] +name = "near-sdk-macros" +version = "4.0.0-pre.2" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "near-sdk-sim" +version = "4.0.0-pre.2" +dependencies = [ + "funty", + "lazy-static-include", + "near-crypto", + "near-pool", + "near-primitives", + "near-runtime", + "near-sdk", + "near-store", + "near-vm-logic", +] + +[[package]] +name = "near-store" +version = "0.1.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e880d1d9a4ca5a1ca1ea0366fd80e295465f90cd0c1209f45d6d0b7a443ed4" +dependencies = [ + "borsh", + "byteorder", + "cached", + "derive_more", + "elastic-array", + "lazy_static", + "near-crypto", + "near-primitives", + "num_cpus", + "rand 0.7.3", + "rocksdb", + "serde", + "serde_json", + "strum", +] + +[[package]] +name = "near-sys" +version = "0.1.0" + +[[package]] +name = "near-vm-errors" +version = "4.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e281d8730ed8cb0e3e69fb689acee6b93cdb43824cd69a8ffd7e1bfcbd1177d7" +dependencies = [ + "borsh", + "hex", + "near-rpc-error-macro", + "serde", +] + +[[package]] +name = "near-vm-logic" +version = "4.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11cb28a2d07f37680efdaf860f4c9802828c44fc50c08009e7884de75d982c5" +dependencies = [ + "base64", + "borsh", + "bs58", + "byteorder", + "near-primitives-core", + "near-runtime-utils", + "near-vm-errors", + "serde", + "sha2", + "sha3", +] + +[[package]] +name = "near-vm-runner" +version = "4.0.0-pre.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93a66e94e12ec66a29674cc4efa975c280415aa0c944d7294cedbdb0c3858b48" +dependencies = [ + "anyhow", + "borsh", + "cached", + "log", + "near-primitives", + "near-vm-errors", + "near-vm-logic", + "parity-wasm", + "pwasm-utils", + "tracing", + "wasmer", + "wasmer-compiler-singlepass", + "wasmer-runtime-core-near", + "wasmer-runtime-near", + "wasmer-types", + "wasmtime", +] + +[[package]] +name = "nix" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", + "void", +] + +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] +name = "num-bigint" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9a41747ae4633fce5adffb4d2e81ffc5e89593cb19917f8fb2cc5ff76507bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[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" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693" +dependencies = [ + "crc32fast", + "indexmap", + "wasmparser 0.57.0", +] + +[[package]] +name = "object" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" +dependencies = [ + "crc32fast", + "indexmap", +] + +[[package]] +name = "object" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" + +[[package]] +name = "once_cell" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "page_size" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eebde548fbbf1ea81a99b128872779c437752fb99f217c45245e1a61dcd9edcd" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "parity-scale-codec" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75c823fdae1bb5ff5708ee61a62697e6296175dc671710876871c853f48592b3" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "serde", +] + +[[package]] +name = "parity-secp256k1" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fca4f82fccae37e8bbdaeb949a4a218a1bbc485d11598f193d2a908042e5fc1" +dependencies = [ + "arrayvec", + "cc", + "cfg-if 0.1.10", + "rand 0.7.3", +] + +[[package]] +name = "parity-wasm" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865" + +[[package]] +name = "parking_lot" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" +dependencies = [ + "lock_api 0.3.4", + "parking_lot_core 0.7.2", +] + +[[package]] +name = "parking_lot" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +dependencies = [ + "instant", + "lock_api 0.4.2", + "parking_lot_core 0.8.2", +] + +[[package]] +name = "parking_lot_core" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" +dependencies = [ + "cfg-if 0.1.10", + "cloudabi", + "libc", + "redox_syscall 0.1.57", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall 0.1.57", + "smallvec", + "winapi", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project-lite" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "primitive-types" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2415937401cb030a2a0a4d922483f945fa068f52a7dbb22ce0fe5f2b6f6adace" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "uint", +] + +[[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" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "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-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "prometheus" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8425533e7122f0c3cc7a37e6244b16ad3a2cc32ae7ac6276e2a75da0d9c200d" +dependencies = [ + "cfg-if 1.0.0", + "fnv", + "lazy_static", + "parking_lot 0.11.1", + "protobuf", + "regex", + "thiserror", +] + +[[package]] +name = "protobuf" +version = "2.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f72884896d22e0da0e5b266cb9a780b791f6c3b2f5beab6368d6cd4f0dbb86" + +[[package]] +name = "pwasm-utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f7a12f176deee919f4ba55326ee17491c8b707d0987aed822682c821b660192" +dependencies = [ + "byteorder", + "log", + "parity-wasm", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "991431c3519a3f36861882da93630ce66b52918dcf1b8e2fd66b397fc96f28df" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e" +dependencies = [ + "libc", + "rand_chacha 0.3.0", + "rand_core 0.6.1", + "rand_hc 0.3.0", +] + +[[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]] +name = "rand_chacha" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.1", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5" +dependencies = [ + "getrandom 0.2.2", +] + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" +dependencies = [ + "rand_core 0.6.1", +] + +[[package]] +name = "raw-cpuid" +version = "7.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "beb71f708fe39b2c5e98076204c3cc094ee5a4c12c4cdb119a2b72dc34164f41" +dependencies = [ + "bitflags", + "cc", + "rustc_version", +] + +[[package]] +name = "rayon" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "redox_syscall" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9" +dependencies = [ + "bitflags", +] + +[[package]] +name = "reed-solomon-erasure" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a415a013dd7c5d4221382329a5a3482566da675737494935cbbbcdec04662f9d" +dependencies = [ + "smallvec", +] + +[[package]] +name = "regalloc" +version = "0.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2041c2d34f6ff346d6f428974f03d8bf12679b0c816bb640dc5eb1d48848d8d1" +dependencies = [ + "log", + "rustc-hash", + "smallvec", +] + +[[package]] +name = "regalloc" +version = "0.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "571f7f397d61c4755285cd37853fe8e03271c243424a907415909379659381c5" +dependencies = [ + "log", + "rustc-hash", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9251239e129e16308e70d853559389de218ac275b515068abc96829d05b948a" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eb417147ba9860a96cfe72a0b93bf88fee1744b5636ec99ab20c1aa9376581" + +[[package]] +name = "region" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0" +dependencies = [ + "bitflags", + "libc", + "mach", + "winapi", +] + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "rlp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e54369147e3e7796c9b885c7304db87ca3d09a0a98f72843d532868675bbfba8" +dependencies = [ + "bytes", + "rustc-hex", +] + +[[package]] +name = "rocksdb" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d83c02c429044d58474eaf5ae31e062d0de894e21125b47437ec0edc1397e6" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +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.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-bench" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d733da87e79faaac25616e33d26299a41143fd4cd42746cbb0e91d8feea243fd" +dependencies = [ + "byteorder", + "serde", +] + +[[package]] +name = "serde_bytes" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea1c6153794552ea7cf7cf63b1231a25de00ec90db326ba6264440fa08e31486" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de" +dependencies = [ + "block-buffer", + "cfg-if 1.0.0", + "cpuid-bool", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha3" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" +dependencies = [ + "block-buffer", + "digest 0.9.0", + "keccak", + "opaque-debug", +] + +[[package]] +name = "shlex" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" + +[[package]] +name = "signature" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0242b8e50dd9accdd56170e94ca1ebd223b098eb9c83539a6e367d0f36ae68" + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" + +[[package]] +name = "slash-formatter" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55a065b7c425d213cbefcaaa4b62dd936183fa41c806a74767c72dd659ff4ad0" +dependencies = [ + "concat-with", +] + +[[package]] +name = "smallvec" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" + +[[package]] +name = "smart-default" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7318c509b5ba57f18533982607f24070a55d353e90d4cae30c467cdb2ad5ac5c" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8bc6b87a5112aeeab1f4a9f7ab634fe6cbefc4850006df31267f4cfb9e3149" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "subtle" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2" + +[[package]] +name = "syn" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4211ce9909eb971f111059df92c45640aad50a619cf55cd76476be803c4c68e6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "tap" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36474e732d1affd3a6ed582781b3683df3d0563714c59c39591e8ff707cf078e" + +[[package]] +name = "target-lexicon" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab0e7238dcc7b40a7be719a25365910f6807bd864f4cce6b2e6b873658e2b19d" + +[[package]] +name = "target-lexicon" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "422045212ea98508ae3d28025bc5aaa2bd4a9cdaecd442a08da2ee620ee9ea95" + +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "rand 0.8.3", + "redox_syscall 0.2.5", + "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 = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thiserror" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cc616c6abf8c8928e2fdcc0dbfab37175edd8fb49a4641066ad1364fdab146" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +dependencies = [ + "once_cell", +] + +[[package]] +name = "time" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01ebdc2bb4498ab1ab5f5b73c5803825e60199229ccba0698170e3be0e7f959f" +dependencies = [ + "cfg-if 1.0.0", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41768be5b9f3489491825f56f01f25290aa1d3e7cc97e182d4d34360493ba6fa" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "typenum" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" + +[[package]] +name = "uint" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11fe9a9348741cf134085ad57c249508345fe16411b3d7fb4ff2da2f1d6382e" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "url" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "validator" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d6937c33ec6039d8071bcf72933146b5bbe378d645d8fa59bdadabfc2a249" +dependencies = [ + "idna", + "lazy_static", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_types", +] + +[[package]] +name = "validator_types" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.2+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" + +[[package]] +name = "wasmer" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a70cfae554988d904d64ca17ab0e7cd652ee5c8a0807094819c1ea93eb9d6866" +dependencies = [ + "cfg-if 0.1.10", + "indexmap", + "more-asserts", + "target-lexicon 0.11.2", + "thiserror", + "wasmer-compiler", + "wasmer-compiler-cranelift", + "wasmer-derive", + "wasmer-engine", + "wasmer-engine-jit", + "wasmer-engine-native", + "wasmer-types", + "wasmer-vm", + "wat", + "winapi", +] + +[[package]] +name = "wasmer-compiler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b7732a9cab472bd921d5a0c422f45b3d03f62fa2c40a89e0770cef6d47e383e" +dependencies = [ + "enumset", + "serde", + "serde_bytes", + "smallvec", + "target-lexicon 0.11.2", + "thiserror", + "wasmer-types", + "wasmer-vm", + "wasmparser 0.65.0", +] + +[[package]] +name = "wasmer-compiler-cranelift" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48cb9395f094e1d81534f4c5e330ed4cdb424e8df870d29ad585620284f5fddb" +dependencies = [ + "cranelift-codegen 0.68.0", + "cranelift-frontend 0.68.0", + "gimli 0.22.0", + "more-asserts", + "rayon", + "serde", + "smallvec", + "tracing", + "wasmer-compiler", + "wasmer-types", + "wasmer-vm", +] + +[[package]] +name = "wasmer-compiler-singlepass" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "426ae6ef0f606ca815510f3e2ef6f520e217514bfb7a664defe180b9a9e75d07" +dependencies = [ + "byteorder", + "dynasm", + "dynasmrt", + "lazy_static", + "more-asserts", + "rayon", + "serde", + "smallvec", + "wasmer-compiler", + "wasmer-types", + "wasmer-vm", +] + +[[package]] +name = "wasmer-derive" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b86dcd2c3efdb8390728a2b56f762db07789aaa5aa872a9dc776ba3a7912ed" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "wasmer-engine" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efe4667d6bd888f26ae8062a63a9379fa697415b4b4e380f33832e8418fd71b5" +dependencies = [ + "backtrace", + "bincode", + "lazy_static", + "memmap2", + "more-asserts", + "rustc-demangle", + "serde", + "serde_bytes", + "target-lexicon 0.11.2", + "thiserror", + "wasmer-compiler", + "wasmer-types", + "wasmer-vm", +] + +[[package]] +name = "wasmer-engine-jit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26770be802888011b4a3072f2a282fc2faa68aa48c71b3db6252a3937a85f3da" +dependencies = [ + "bincode", + "cfg-if 0.1.10", + "region", + "serde", + "serde_bytes", + "wasmer-compiler", + "wasmer-engine", + "wasmer-types", + "wasmer-vm", + "winapi", +] + +[[package]] +name = "wasmer-engine-native" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb4083a6c69f2cd4b000b82a80717f37c6cc2e536aee3a8ffe9af3edc276a8b" +dependencies = [ + "bincode", + "cfg-if 0.1.10", + "leb128", + "libloading 0.6.7", + "serde", + "tempfile", + "tracing", + "wasmer-compiler", + "wasmer-engine", + "wasmer-object", + "wasmer-types", + "wasmer-vm", + "which 4.0.2", +] + +[[package]] +name = "wasmer-object" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf8e0c12b82ff81ebecd30d7e118be5fec871d6de885a90eeb105df0a769a7b" +dependencies = [ + "object 0.22.0", + "thiserror", + "wasmer-compiler", + "wasmer-types", +] + +[[package]] +name = "wasmer-runtime-core-near" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2390b0b8cf58615c2f8b454d9535e1aed1d14c510cc1ce1af806a1992ad53300" +dependencies = [ + "bincode", + "blake3", + "cc", + "digest 0.8.1", + "errno", + "hex", + "indexmap", + "lazy_static", + "libc", + "nix", + "page_size", + "parking_lot 0.10.2", + "rustc_version", + "serde", + "serde-bench", + "serde_bytes", + "serde_derive", + "smallvec", + "target-lexicon 0.10.0", + "wasmparser 0.51.4", + "winapi", +] + +[[package]] +name = "wasmer-runtime-near" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6660e86bc7697fa29bab902214d5b33d394a990826c401b10816bcd285f938f" +dependencies = [ + "lazy_static", + "memmap", + "serde", + "serde_derive", + "wasmer-runtime-core-near", + "wasmer-singlepass-backend-near", +] + +[[package]] +name = "wasmer-singlepass-backend-near" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3f23543ef8f59667be4945c22eb4b1a50a79ff340555f6f23354223d2695541" +dependencies = [ + "bincode", + "byteorder", + "dynasm", + "dynasmrt", + "lazy_static", + "libc", + "nix", + "serde", + "serde_derive", + "smallvec", + "wasmer-runtime-core-near", +] + +[[package]] +name = "wasmer-types" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f4ac28c2951cd792c18332f03da523ed06b170f5cf6bb5b1bdd7e36c2a8218" +dependencies = [ + "cranelift-entity 0.68.0", + "serde", + "thiserror", +] + +[[package]] +name = "wasmer-vm" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7635ba0b6d2fd325f588d69a950ad9fa04dddbf6ad08b6b2a183146319bf6ae" +dependencies = [ + "backtrace", + "cc", + "cfg-if 0.1.10", + "indexmap", + "libc", + "memoffset 0.6.1", + "more-asserts", + "region", + "serde", + "thiserror", + "wasmer-types", + "winapi", +] + +[[package]] +name = "wasmparser" +version = "0.51.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" + +[[package]] +name = "wasmparser" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32fddd575d477c6e9702484139cf9f23dcd554b06d185ed0f56c857dd3a47aa6" + +[[package]] +name = "wasmparser" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a950e6a618f62147fd514ff445b2a0b53120d382751960797f85f058c7eda9b9" + +[[package]] +name = "wasmparser" +version = "0.65.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc2fe6350834b4e528ba0901e7aa405d78b89dc1fa3145359eb4de0e323fcf" + +[[package]] +name = "wasmtime" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "373b87ebd6721f4121e28eeaaa41943548c48bcca04ac9bb063004207e5e7d70" +dependencies = [ + "anyhow", + "backtrace", + "bincode", + "cfg-if 0.1.10", + "lazy_static", + "libc", + "log", + "region", + "rustc-demangle", + "serde", + "smallvec", + "target-lexicon 0.11.2", + "wasmparser 0.59.0", + "wasmtime-environ", + "wasmtime-jit", + "wasmtime-profiling", + "wasmtime-runtime", + "winapi", +] + +[[package]] +name = "wasmtime-cranelift" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c01df908e54d40bed80326ade122825d464888991beafd950d186f1be309c2" +dependencies = [ + "cranelift-codegen 0.67.0", + "cranelift-entity 0.67.0", + "cranelift-frontend 0.67.0", + "cranelift-wasm", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-debug" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28962772f96fadb79dc7be5ade135ca55d2b0017a012f4869e2476a03abbe733" +dependencies = [ + "anyhow", + "gimli 0.21.0", + "more-asserts", + "object 0.21.1", + "target-lexicon 0.11.2", + "thiserror", + "wasmparser 0.59.0", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c0d7401bf253b7b1f426afd70d285bb23ea9a1c7605d6af788c95db5084edf5" +dependencies = [ + "anyhow", + "cfg-if 0.1.10", + "cranelift-codegen 0.67.0", + "cranelift-entity 0.67.0", + "cranelift-wasm", + "gimli 0.21.0", + "indexmap", + "log", + "more-asserts", + "serde", + "thiserror", + "wasmparser 0.59.0", +] + +[[package]] +name = "wasmtime-jit" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c838a108318e7c5a2201addb3d3b27a6ef3d142f0eb0addc815b9c2541e5db5" +dependencies = [ + "anyhow", + "cfg-if 0.1.10", + "cranelift-codegen 0.67.0", + "cranelift-entity 0.67.0", + "cranelift-frontend 0.67.0", + "cranelift-native", + "cranelift-wasm", + "gimli 0.21.0", + "log", + "more-asserts", + "object 0.21.1", + "region", + "serde", + "target-lexicon 0.11.2", + "thiserror", + "wasmparser 0.59.0", + "wasmtime-cranelift", + "wasmtime-debug", + "wasmtime-environ", + "wasmtime-obj", + "wasmtime-profiling", + "wasmtime-runtime", + "winapi", +] + +[[package]] +name = "wasmtime-obj" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc8422b0acce519b74c3ae5db59167c611ea92220e5c334ad406e977277e0f23" +dependencies = [ + "anyhow", + "more-asserts", + "object 0.21.1", + "target-lexicon 0.11.2", + "wasmtime-debug", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-profiling" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33f2689bf523f843555e57e24d59abf0c5013007366b866081d73a15e510b4b2" +dependencies = [ + "anyhow", + "cfg-if 0.1.10", + "lazy_static", + "libc", + "serde", + "target-lexicon 0.11.2", + "wasmtime-environ", + "wasmtime-runtime", +] + +[[package]] +name = "wasmtime-runtime" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7353f5e79390048128e44b5ceda7255723b2066de4026df9a168b0b2593df71" +dependencies = [ + "backtrace", + "cc", + "cfg-if 0.1.10", + "indexmap", + "lazy_static", + "libc", + "log", + "memoffset 0.5.6", + "more-asserts", + "region", + "thiserror", + "wasmtime-environ", + "winapi", +] + +[[package]] +name = "wast" +version = "35.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db5ae96da18bb5926341516fd409b5a8ce4e4714da7f0a1063d3b20ac9f9a1e1" +dependencies = [ + "leb128", +] + +[[package]] +name = "wat" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b0fa059022c5dabe129f02b429d67086400deb8277f89c975555dacc1dadbcc" +dependencies = [ + "wast", +] + +[[package]] +name = "wee_alloc" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "memory_units", + "winapi", +] + +[[package]] +name = "which" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" +dependencies = [ + "libc", +] + +[[package]] +name = "which" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87c14ef7e1b8b8ecfc75d5eca37949410046e66f15d185c01d70824f1f8111ef" +dependencies = [ + "libc", + "thiserror", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "wyz" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" + +[[package]] +name = "zeroize" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] diff --git a/examples/callback-results/Cargo.toml b/examples/callback-results/Cargo.toml new file mode 100644 index 000000000..cdc28f7cb --- /dev/null +++ b/examples/callback-results/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "callback-results" +version = "0.1.0" +authors = ["Near Inc "] +edition = "2018" + +[lib] +crate-type = ["cdylib", "rlib"] + +[dependencies] +near-sdk = { path = "../../near-sdk" } + +[dev-dependencies] +near-sdk-sim = { path = "../../near-sdk-sim" } + +[profile.release] +codegen-units = 1 +# Tell `rustc` to optimize for small code size. +opt-level = "z" +lto = true +debug = false +panic = "abort" diff --git a/examples/callback-results/build.sh b/examples/callback-results/build.sh new file mode 100755 index 000000000..0101a4dff --- /dev/null +++ b/examples/callback-results/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash +TARGET="${CARGO_TARGET_DIR:-target}" +set -e +cd "`dirname $0`" +cargo build --target wasm32-unknown-unknown --release +cp $TARGET/wasm32-unknown-unknown/release/callback_results.wasm ./res/ + diff --git a/examples/callback-results/res/callback_results.wasm b/examples/callback-results/res/callback_results.wasm new file mode 100755 index 0000000000000000000000000000000000000000..0fc9094b76115ec3b351b80256b0ab4e9f8ae87b GIT binary patch literal 104452 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 z zO^y>NwwI`;_M`%X!V&$B7q*L6IVl99XJ0w=AT-AuG@V){YKxfJhwWHm=X}u}PoE-q zc!^VOmdXlKl%HYW0gLxL>s_2Wt-lCk0y8(n8prI?Yz-u_RSr6dDk8%o=}808YxJP5 z1X;l%O-ey)NK@IEF|vuo!*N6p>|UgXW39zF1F-}=Gcz+T zDlsuDBhi_e5EUJcnzEc}x$dIE(8#ceu(&9eBg+})a&u9fjT_H#T%3;My5p&Z`y*^e zSdSn5@%S0=`)@-5*a!@62jG~1@)J=>3p}-Oq=|7WZ@3S_@rbXqdw{-dLSrG2ICXAF zswdTzT9}%hnvt5CYEPQx$OrziW=k1Gz-yT^i{p&Qhi0)Kis8)o(I2(Vf?rNysUtrp zOTzyp&Lk;Ba+Vi6Gd<`Fj$6gsxMoQ67@k%<3v%4<8LPA1fB0x+;^@%7t5!n*)iSSE* zghxO8{3(Dx3J2gv{Xl;dw&6!Oqdy80?c6{C{86|ievZM8oP6}6r$_?1<)Dw}I3>?a z3@cZW+l|3h=y5qRJrYKhTPk7QI(+QtQDHQ$@^dm6eXbX6j7Eq~sN4*U%)+dEXBx(1 zeug76&z+4*80F9lYAeHt%qf(zOA0eRIYot1#@M0)r-T6uvY9{>CKZ&pJyM2KDlT&8 zcydaeDN5%`E~lrℜT3Nt~xAVGyBUCvo0IWA|QN~ z{&gJ7d;YYlV_#X9T<2;dC9jtBe&>2f?Y-n+0`6nG`P2jWNbe-m?%v#>PBRa8i17LIq;P23YE8`ll# zyP?4}uWI4$2vgZjlv8gmyMX*OhvniIjh_}S#Ct!VFhm8er%!k>-YNY6MnE->K%=8m+F;y+czAD?^<|ugLn#4{6B`L!I&Rstv}}farthDe9rKKqAX?1 zY(x1Y0rz$YrakbaaY%ne8^lxo6P|%ZJ^Q1)#4{R-2uToq^0UKo+-VS8Txl6aC52gF zy1|9cvNXu3J+(eBKu43j^>^D^$HZNZvb0iXCYn0Vm7_{uGa>xs5p!}#`4Bh2wK5&W zj?5g->>58CHv;v(h6WJ-(E7Rq;Aw-f@^|4TsGZdz_b6kwGr#^T+w;&&JXd7>HbTe z-vF-aWc=(mFWX+;>6umoQ_i3M@ND~= z2j2a`NW-BERRez=ermrEx_#ibhd!P?p!}PGD}~^YUQ4Axv0~JV7q^TXBvfBJJL}`y z2Q6sPCH%`Cy9Wh+^u-@1BQFm6W?4<*5wyVz>YQ#4|(>{*1e7#e1Ax%;cGA6 zw$M0qL+Tqp_RQ=z^vibbedn7GdpLE# zg%|S%58D?#?z;_!ieafW+n(=H{p>Jz?V~l3=gtjVp7ge9-t-Q`AIO^bW+>1WrB=&-hULrJGY zBUU=HZ_9CsBY*k*rmw}(2_s#XmY><1Q8;qQ<-~wjuC5!|ZcgocJzxE3!HV*jgw*?(fk6O9vXvwEJ@f7jyEFAfS!nIGQc({8KBr=(rJ zaLf5CccgT9DDIwCpYKk|7^u7SK&xL;=8o6Dz)$UUOTqXznx869zooWU%!GEUSKTrv zcF(30JKwq`f6t_MtgX2*`+p33?XC_nV-lZ!xxi)58MA+KPjj=pN5*tI_LB4Kbw|bo zjSAlN*izHjEsmd_UiS2jWBn>8e%~h4J$7{JmanE=+Bi1z`C}O+zkW8hbMgLZ=9gQH z>oy{B`_h?1#)Um{+q$QdE5}v7v8vmaVb6_Az4&`!+v8u1bI;mwN9TJwj{j=#^R0jW z^p^4K+NK{rKjzl)Z+9*~vgylL#@}>9@2q!Cn-lsa?U=lC?H?1egKpUI%cBt!tG;j3-Tijf#FJk=biUcu`zJ1Y z_Vr(S-gtQ8`DxMaZ6kG)@?yCafsVvUZzgjWb6zT%^h(dFgwsbJo75|&X5S~Z$0o(f zL(7|A4w$?rIP}|ZQU^@_(RFDI1!bHm7MG1Cgp-aGVUzuakipPm-FIlE?BN&D>y6RVC+ zYvDL;D5x<{-&8R&XrQkD^bbEx4;`=fOh3@#rShi?Pfnjd@ypiZhn|@J%zY_gv3K5( zHg)IO*$az@rn$bI*7mVw^U``epLG6Qo9EMhOf%=5`0UHH?_Ydp(8LcqrC%KL$kGWL z#-u;nHPqi)0K2u_-4e>GiLJ-NCx_NVkWt`v1U`g(WA#mn!6-R@3xlvm#LYHaOF z$A_uQLk1-6bNIzP|J#w;%Z}T)!*i;qMP@w7Ro{PZn=|7mckX&;`-2(P()qNpzZ}lk z@YOf*Pekc653M^lXw3Yi%sq>r$-8HHac0zv2M3owzdrL?|Kv#%PJW#E$jqL<#fI3j z_PzeIXF&YGtn%k0#2D1NG-BUk;gZba>Zi?z-rhaeJrlraU+6z8T*JZTzuw zz=0Vzl$j9lmAG zj6If|XGU$_d~!$soGBR}ebn|#PtK1?@A{vRp33=fV9m^><4)%IO{h(NI;Ums^1L}m z+EowBbsHuRmCnu2HLZ^ijXD2(uI0|f3H-NT<&L=U_^o@ob;*mE5PWe>+1R{S@}eT= zk6)7alwtnW&vReP>y=eB{T<=wyx4x$xOs2%$Y1Dp*BjHeP0N38f5HPVuedvZ-|zeS ze;u`pp%r5xi%-yfF9=Eoj_+X#dySBYo;P?6+ zuRj}TC|vFejqdzZpThfRTsbjj_^iVD3oftza_xq~6OKPB19hJkhE(qSVby6{QR&*e zUP&DW6|Gui*lx<0Q`E0T(5yj~TZ;~~E_nC8wP%awr`A^Oe4}0Qp~T9=#~U;Ay=*dHHx&~+`;b@bN(j~aJnxNg6=>h`w^SGzVv{_*YH;qSVv zX%+4}M+xqCOQ#-=I34F+FwUiW^?`i%Vb6a13nw3S>&DF9bY{|r?pq(9cwfi!R!_^? zUq72wB754-@r*zCeu?MdHSc}1V8|v<=JnU3p7lHB>ATB4|FhApO03VMoH+W}@RAt? zcUzs0SC#BGm5sV~Xj{pTZ?`;sRs5#p!)qh9z-@ZzvKwnAbsjseG<;O;59emwUiyk- zPVR|4yGmPCE?d|8MvZ0o%5-nc)hwk-AG zFJt--yH@u5>$bq!@1x3h{5-B_(vvgFH$*)3{E~YfDxWcZcyVmS`{n$vsRxof7-uhx z_RPQGbl=&LHBW?(@ORDbS9^D#M^-#Od*qxl%l??-vx_(1k$t76`J81FL#z6j2hS z|Dt=x1pnVFF8#P7dvi*7WuMjUcjw)mS!wAPxYba$rgFrxo~gB~4pwgc?f%589mRQT zOSmO{&&JOa@8O=h`Llv~r>FKGKKiM3^FDDM?s#V0NAp%J*PZRq%YXjMA1^GtB`JA+ z&lO$YK37{hKiadoZ^l14x1z5T|%QKzM zEN51o;sJ{DEU744n&~W;oNmaKPH6RVpkALLk;scxq0@y0hxVzcpumw|ROpoQp(Un7 z?h@#UXOKn~TD!VJ@|?51iaLj?zGE80qWrpYrQp;OXkQ~j=@B`&r<6_dwNy3}nn0=8 z0l-m#mRnN|mlWoZUY{xVp##K1wXmch12Qo*4%85rqi}{(ORPj`A*FrZ)jrbP4oGbls;(m;6?zmf}4s^G&D`b6iP)IxzJcP5rv+E^167cHC6hrt^*&dObfkYc*4oBR!t-uaK_KJF44jdHHd#4VOqm! z@lPR)CU6mvQPDB6aq$U>j*QGKXLgDDmx0dCc4?uyr=oR1#=r5G`Zx0Y@6Phy<_~1! zq1E)I_BL)J8uI|~PC9=rybIwQe8LA2j_?WZRr^UxUyCs5g|u)Np?-esfnYit{$Knl zt9TUjH~s*^|Mh?5#qdA*gONO?9Yq%SMh(I^M6YWw5ml#m^unI zuAVU)Gl#?Fa?A#ABo%$B1E!`z4|?*`P6{vbz~<-l`F;`KN!J1$46!h8j9+KP)`$th zTTBqXku40?&VmHIlRmD%QOpg*yNGu;Y(q{MbW#u|Ua6I-0K;+V_)h$AbTLzoGR9tx zZ&apQ4@^=Vw+!Ei$G!*H=&3MziF*Ry$$sjcN@4Tdfp5fH-@ub-Haouv_5sXvY%-J5 zkK#LNHMMxMbd$~}9p5e@j`*n-r(%=E*}Bw^D@lNT8fi5hB-wxQiRt10uAb`8^!!6n zx38Z6AD7=i=l2B49|_p^0dds#|A~$ddlc9o;hN?qQif?b>5q3AKPar&cRX0148T*X zL+Sg5wg)MF6vQCS_K+$mdg#V-RW@XqA{g@^pSTsPPf@Ycr5J>$XI-w6V%W;dTsasB zWSQ{f6hQ39;x z8~L-)L}uzo9*9-YW2!(=!HSR+48m_PendZ-ZEy(QhvGL3KjI0LZa99vX>M*1CVef@a$V=uSvNJDI1D#c>PHZ(clAE(raBI!68DyX5Z5`aYrX z`_&sixybaRZM7)xlfUuaF!TK<#H$IdnuVYBbp7s^Lq|-HveLkNg0sRXdrz{oxUu0QxMy9R<^OIu?vf0YQ$S$*7No&5`%lZs zD9H|kH7B?yjgpb_q_nZahNKM~He}eivB;z4pQGm2!g~-V`qjd}<9(b@_z%3(T&2bH zAat^YYGDh)gdZ(zZ4mZr5cY2n4rma*8DZjKT6s={ee0ivFxgDC_)>&@;a!9!tX5op=+6a z?Kg9;=&nHDtuvGBx$FHD==qVK|Iue4<0_z9Os#;vlw{?3(-EIfM6 z(1fCI?pyK2l^_=0pR};sJBvLZaaTiF_~PnatKU6zYfXo%F)Vy;bFVgQEHUR}ul8l( zyPk{fb$Ld@b17E`vT&c9_Pu}NXl-@g)e$WG^1Dac_Zaxun~SfGW8wSW>h{XPNAm8e zxthwt)f+M@gYq|j`tsE*7XI~#=_&fzr1qU;!*caxweXhU!B*p zIH>IR6P{~pS$O%5b2}b+^~B@LudQd{Rh6D4hti(B^yIb8EPUv}Czjt+Jn*Hx*S4{6 zUaMxiE?qF)apKxe7JeZz(mB4{)^~ruwwHxB&!2mE-|3s~Z+ZOy3mf|M?zPvJdN%C( zQ5HUOw>#(lprEIQT|dsk0dI4Qe%gN9)y(T>S@_%b&F{`Ko!dF@`gbgRU`a}m`M}O) z_g}xr!XeIfrzf>}@xAA-UtwYDb8z#u2d~#LYTJgRUww6*W)Awx*!{547ptWAr0SxW26P9+&qXja--c{W><|V;{zr+GPpO&$qtHtgBdyI5)Mw%d~&d zF*ahbUhXt2`S(uK_Wr~v+Ji}7c6dA_XXM@fJk4Sp_syNf?X!O1Kk32ev+(e;^AFtr zSi!nvo+J;BTbx(9ZEm^wr&PXzh0EH0Hv7@D#7|>he{jPUelrWF zKC7y=H-Ml!cQbx~x9Fz2@|T!f_V9@A)&SW8eGui5G;kEZleC#`PapJb3xA z@Er@=2Cm;YVnpdH-wGF5xc%DxFPy(?(^7+Yg@r?^Cq8aF-{r6*>cEAd1BzVv^||%7 z2m9cBGld`WTl?tc2W?-D7h5Xv7yD#z@({=$BQzNE9{K`n}5s?a! znA7qEs(B*9!a{rJ6lRZdjB1R^dLm7Mqa5Ommj5@vNpeA07{`qWw{Zw^$!xbbQz|R3 zBTGCi^dBsOCCK;mmn1s;uyd-MpAjv^hJ#eIM$mH>1X z!CS^xYMl1WDa?YcLe=)O9XakKwlqW=Y5%E|0Yd<7pH&j#3)W>3HVzLi2v6GU+^CPT z3q0W&B{}(7uy$Ys6TE)->F}F`-(>uz;3wg4s9IJO!h!f{VUnGwY-z3~#1bM&bEQhD zvS*VuVco^p1os@uqCJmJ{957{QU3qRZgh^FOCbEwZz_JN_)WvFNsOrDVsE5^kNp_z zospKTL;vJYD{l|V3q^U}(+_yp;%r#VQ(aoP4Z^Jv4sP6cs#eNbkU3L1e^D5v&=t`J z@h4_{g1O7#qHUr?ry8LuG1;&wu|mjF1$w1J4mBu)=;k>*?cOrTET@!k7T;-PY4J*a zC63jEJ?I{V>XC^BI9;@jwV^$pG}hfkC9X_tqo9vg{gZ#j9zrJKC%$3oYb|^R@ew}Z*Fj8#Z!P{pgYb`PcxqT!*fgd?SE&u$t{!J3I!i}c zv5H@4Rc}-A_LI@+)udd+Y7b&z`%^ z>6*9b85t9w)TiID;nS+`LgcoWU)lHe!9!=y;eO8m7Ms*((BNUir)N2aC+O9YEA3XHQ zr$g7g`tH7ihlY(BJ#q5%wA=4m{_G1c?%K0&|3}SRx0#yy>u=YtSNRvr`us#dvo3{2 z9Xq8}&U^ZqS9boups9n-(0sw>fT~Tg!PcsiVmlMB3)jWyj3RF|7@J#Cnzb;FH;THB z7PDv)jiP{2=cm()Rs$c(Y1%0*{aQm3cP8A zE>!fG`ijlOzQzPoZ~emS&D)y7n}>>$EwEYDGTp+}?X0bqtkQ?;`xu3Qw&tqmLp^>~ zAGY_?S6$avo$&j?U#z}Uj5jYxZCSO$RP|1;1kqwhFby{O89dg`;uPIvbJe1@9WAZR zBXm`F7&fiONI^PhV9nO9>^wz%!~yB_wE zA5q_^(OJ&a7hdep(P*+*TegWyOnTzUV;`I2SFC)(Xz6ofcFyvDwFO1~X+?e6)YGG0bFH(0$CPU{kLN9b2|BkJ5E+HXxv#(P9{C>R~Ri z-X!-j^wC=kw-|W6P1IK{&FDPTWT|?5x_yw7@y#eh@`;@VZc$Ty4fU-V#hiM49)9XqSTm%q1g$fGYUOf>e= z3F+M}gDt`O8y0Sz>bzN(Xl&k}x_b2`Q}u_v%42`JVr_Ry-rwAoTTR$b5$Sp9HF!5ghkB< zj_6nQdS3&t8?WyWBP<9A(PjBfuv9&r(8)hUX9h_dsvcN$%;YcniyptpMhqEU0^koe z*+(rH=hsRU^+t0$qtPt-8+%s0)6G(C_)~VQvgI_gRgq*nzmJUz2HU0e5k0jq$^JC| zXyGwXH&_QxX;{{J)5o}X9vD!E$D+i~1-B=;UG+`Z4 zOmn0XuP3igM;&bagC{LW7U?8zr9PdTc0&!4 zoq?mB@0}XWeG-_$oji3*#3{$v?@m8D?(kQq#z|b*_zV25@mw*?$Dt6T1pMQNS|eK7 zc&AY?zz>qHE8n@pRBMvi%(vC?W^fICZ?UWyFU2Fd&IER6v|uhvqRcuI5?F-xydWfk zx#$G2SiZ9$!tVpZdL-am3a!C^QFx-L2VXM6DFl^C;GjZ* z!X1S~z^2vFi66@Auxo+mP5dpqVDvL(@PgTD7%p@`X*?evz@t9Bl@BuW**e|;kc4)E zPPFOZH$pJ*&3NEj>?C#)It%>;-e`g!3Ns%nmI-#g6mEgdyg~dF%?G4LDo-#OECL_V z{3cxl!g@Z~?1%eqkU&g8B)|}pOoFgRgokk>RVNDjl6XDGzY)lZck<~HXUGva9S=8K zDFUPfz}`;K^Q(pSE&TcJrgqjaF#>H9gdY3=U|oP0OB3$eiblDDphvrV2`2srLK+Xk zwApAm&7bD))pH_RsSAcaYXi#Xg!`>q`M72YVkF8MBnIhu(~WS!8Dqvs<%&7gfareoS{9f0OPOdPh5TdXq^o tcGj&Dxp-Zai4Wjg>-lCVr8z4>4+_{a=D92><{9 literal 0 HcmV?d00001 diff --git a/examples/callback-results/src/lib.rs b/examples/callback-results/src/lib.rs new file mode 100644 index 000000000..18501d1d8 --- /dev/null +++ b/examples/callback-results/src/lib.rs @@ -0,0 +1,67 @@ +use near_sdk::require; +use near_sdk::{env, ext_contract, near_bindgen, Promise, PromiseError}; + +const A_VALUE: u8 = 8; + +#[near_bindgen] +pub struct Callback; + +// One can provide a name, e.g. `ext` to use for generated methods. +#[ext_contract(ext)] +pub trait ExtCrossContract { + fn a() -> Promise; + fn b(fail: bool) -> String; + fn c(value: u8) -> u8; + fn handle_callbacks( + #[callback_result] a: Result, + #[callback_result] b: Result, + #[callback_result] c: Result, + ) -> (bool, bool, bool); +} + +#[near_bindgen] +impl Callback { + /// Call functions a, b, and c asynchronously and handle results with `handle_callbacks`. + pub fn call_all(fail_b: bool, c_value: u8) -> Promise { + let gas_per_promise = env::prepaid_gas() / 5; + ext::a(env::current_account_id(), 0, gas_per_promise) + .and(ext::b(fail_b, env::current_account_id(), 0, gas_per_promise)) + .and(ext::c(c_value, env::current_account_id(), 0, gas_per_promise)) + .then(ext::handle_callbacks(env::current_account_id(), 0, gas_per_promise)) + } + + /// Calls function c with a value that will always succeed + pub fn a() -> Promise { + ext::c(A_VALUE, env::current_account_id(), 0, env::prepaid_gas() / 2) + } + + /// Returns a static string if fail is false, return + #[private] + pub fn b(fail: bool) -> &'static str { + if fail { + env::panic_str("failed within function b"); + } + "Some string" + } + + /// Panics if value is 0, returns the value passed in otherwise. + #[private] + pub fn c(value: u8) -> u8 { + require!(value > 0, "Value must be positive"); + value + } + + /// Receives the callbacks from the other promises called. + #[private] + pub fn handle_callbacks( + #[callback_unwrap] a: u8, + #[callback_result] b: Result, + #[callback_result] c: Result, + ) -> (bool, bool) { + require!(a == A_VALUE, "Promise returned incorrect value"); + if let Ok(s) = b.as_ref() { + require!(s == "Some string"); + } + (b.is_err(), c.is_err()) + } +} diff --git a/examples/callback-results/tests/general.rs b/examples/callback-results/tests/general.rs new file mode 100644 index 000000000..0b3f2b988 --- /dev/null +++ b/examples/callback-results/tests/general.rs @@ -0,0 +1,50 @@ +use near_sdk_sim::{call, deploy, init_simulator, ContractAccount, UserAccount}; +extern crate callback_results; +// Note: the struct xxxxxxContract is created by #[near_bindgen] from near-sdk +use callback_results::CallbackContract; + +near_sdk_sim::lazy_static_include::lazy_static_include_bytes! { + CONTRACT_BYTES => "res/callback_results.wasm", +} + +fn init() -> (UserAccount, ContractAccount) { + let mut genesis = near_sdk_sim::runtime::GenesisConfig::default(); + genesis.gas_limit = u64::MAX; + genesis.gas_price = 0; + let master_account = init_simulator(Some(genesis)); + let contract_account = deploy! { + contract: CallbackContract, + contract_id: "contract", + bytes: &CONTRACT_BYTES, + signer_account: master_account + }; + (master_account, contract_account) +} + +#[test] +fn callback_sim() { + let (master_account, contract) = init(); + + // Call function a only to ensure it has correct behaviour + let res = call!(master_account, contract.a()); + assert_eq!(res.unwrap_json::(), 8); + + // Following tests the function call where the `call_all` function always succeeds and handles + // the result of the async calls made from within the function with callbacks. + + // No failures + let res = call!(master_account, contract.call_all(false, 1)); + assert_eq!(res.unwrap_json::<(bool, bool)>(), (false, false)); + + // Fail b + let res = call!(master_account, contract.call_all(true, 1)); + assert_eq!(res.unwrap_json::<(bool, bool)>(), (true, false)); + + // Fail c + let res = call!(master_account, contract.call_all(false, 0)); + assert_eq!(res.unwrap_json::<(bool, bool)>(), (false, true)); + + // Fail both b and c + let res = call!(master_account, contract.call_all(true, 0)); + assert_eq!(res.unwrap_json::<(bool, bool)>(), (true, true)); +} diff --git a/examples/cross-contract-high-level/res/cross_contract_high_level.wasm b/examples/cross-contract-high-level/res/cross_contract_high_level.wasm index 911b05c20dd99a1ee08860799b1719c1a4dff989..306ccbe4bbab6aa9d3e834669b4d750840452352 100755 GIT binary patch delta 171 zcmZ4ggKzy0zJ@J~9J?5WrgQFMRAy9a*WJaqU3V8#^`Uwz1_lNZAeLtnVBiAM)@Xch zAYTE9Ve) -> PromiseOrValue>; fn merge( &self, - #[callback] + #[callback_unwrap] #[serializer(borsh)] data0: Vec, - #[callback] + #[callback_unwrap] #[serializer(borsh)] data1: Vec, ) -> Vec; @@ -98,10 +96,10 @@ impl CrossContract { #[private] pub fn merge( &self, - #[callback] + #[callback_unwrap] #[serializer(borsh)] data0: Vec, - #[callback] + #[callback_unwrap] #[serializer(borsh)] data1: Vec, ) -> Vec { diff --git a/near-sdk-macros/src/core_impl/code_generator/attr_sig_info.rs b/near-sdk-macros/src/core_impl/code_generator/attr_sig_info.rs index 9913d46bb..dd688e37d 100644 --- a/near-sdk-macros/src/core_impl/code_generator/attr_sig_info.rs +++ b/near-sdk-macros/src/core_impl/code_generator/attr_sig_info.rs @@ -11,7 +11,7 @@ impl AttrSigInfo { /// (e.g. for a promise input) or deserialization (e.g. for a method input). /// Each argument is getting converted to a field in a struct. Specifically argument: /// `ATTRIBUTES ref mut binding @ SUBPATTERN : TYPE` is getting converted to: - /// `binding: SUBTYPE,` where `TYPE` is one of the following: `& SUBTYPE`, `&mut SUBTYPE`, `SUBTYPE`, + /// `binding: SUBTYPE,` where `TYPE` is one of the following: `& SUBTYPE`, `&mut SUBTYPE`, /// and `SUBTYPE` is one of the following: `[T; n]`, path like /// `std::collections::HashMap`, or tuple `(SUBTYPE0, SUBTYPE1, ...)`. /// # Example @@ -160,36 +160,52 @@ impl AttrSigInfo { result } - /// Create code that deserializes arguments that were decorated with `#[callback]` + /// Create code that deserializes arguments that were decorated with `#[callback*]` pub fn callback_deserialization(&self) -> TokenStream2 { - self - .args + self.args .iter() - .filter(|arg| matches!(arg.bindgen_ty, BindgenArgType::CallbackArg)) + .filter(|arg| { + matches!( + arg.bindgen_ty, + BindgenArgType::CallbackArg | BindgenArgType::CallbackResultArg + ) + }) .enumerate() .fold(TokenStream2::new(), |acc, (idx, arg)| { let idx = idx as u64; - let ArgInfo { mutability, ident, ty, .. } = arg; - let error_msg = format!("Callback computation {} was not successful", idx); - let read_data = quote! { - let data: Vec = match near_sdk::env::promise_result(#idx) { - near_sdk::PromiseResult::Successful(x) => x, - _ => near_sdk::env::panic_str(#error_msg) - }; - }; - let invocation = match arg.serializer_ty { - SerializerType::JSON => quote! { - near_sdk::serde_json::from_slice(&data).expect("Failed to deserialize callback using JSON") - }, - SerializerType::Borsh => quote! { - near_sdk::borsh::BorshDeserialize::try_from_slice(&data).expect("Failed to deserialize callback using Borsh") - }, - }; - quote! { - #acc - #read_data - let #mutability #ident: #ty = #invocation; - } + let ArgInfo { mutability, ident, ty, bindgen_ty, serializer_ty, .. } = arg; + match &bindgen_ty { + BindgenArgType::CallbackArg => { + let error_msg = format!("Callback computation {} was not successful", idx); + let read_data = quote! { + let data: Vec = match near_sdk::env::promise_result(#idx) { + near_sdk::PromiseResult::Successful(x) => x, + _ => near_sdk::env::panic_str(#error_msg) + }; + }; + let invocation = deserialize_data(serializer_ty); + quote! { + #acc + #read_data + let #mutability #ident: #ty = #invocation; + } + } + BindgenArgType::CallbackResultArg => { + let deserialize = deserialize_data(serializer_ty); + let result = quote! { + match near_sdk::env::promise_result(#idx) { + near_sdk::PromiseResult::Successful(data) => Ok(#deserialize), + near_sdk::PromiseResult::NotReady => Err(near_sdk::PromiseError::NotReady), + near_sdk::PromiseResult::Failed => Err(near_sdk::PromiseError::Failed), + } + }; + quote! { + #acc + let #mutability #ident: #ty = #result; + } + } + _ => unreachable!() + } }) } @@ -201,14 +217,7 @@ impl AttrSigInfo { .filter(|arg| matches!(arg.bindgen_ty, BindgenArgType::CallbackArgVec)) .fold(TokenStream2::new(), |acc, arg| { let ArgInfo { mutability, ident, ty, .. } = arg; - let invocation = match arg.serializer_ty { - SerializerType::JSON => quote! { - near_sdk::serde_json::from_slice(&data).expect("Failed to deserialize callback using JSON") - }, - SerializerType::Borsh => quote! { - near_sdk::borsh::BorshDeserialize::try_from_slice(&data).expect("Failed to deserialize callback using Borsh") - }, - }; + let invocation = deserialize_data(&arg.serializer_ty); quote! { #acc let #mutability #ident: #ty = (0..near_sdk::env::promise_results_count()) @@ -223,3 +232,14 @@ impl AttrSigInfo { }) } } + +pub fn deserialize_data(ty: &SerializerType) -> TokenStream2 { + match ty { + SerializerType::JSON => quote! { + near_sdk::serde_json::from_slice(&data).expect("Failed to deserialize callback using JSON") + }, + SerializerType::Borsh => quote! { + near_sdk::borsh::BorshDeserialize::try_from_slice(&data).expect("Failed to deserialize callback using Borsh") + }, + } +} diff --git a/near-sdk-macros/src/core_impl/code_generator/item_impl_info.rs b/near-sdk-macros/src/core_impl/code_generator/item_impl_info.rs index 794f419bd..d1aebfcea 100644 --- a/near-sdk-macros/src/core_impl/code_generator/item_impl_info.rs +++ b/near-sdk-macros/src/core_impl/code_generator/item_impl_info.rs @@ -280,7 +280,7 @@ mod tests { fn callback_args() { let impl_type: Type = syn::parse_str("Hello").unwrap(); let mut method: ImplItemMethod = parse_quote! { - #[private] pub fn method(&self, #[callback] x: &mut u64, y: String, #[callback] z: Vec) { } + #[private] pub fn method(&self, #[callback_unwrap] x: &mut u64, y: String, #[callback_unwrap] z: Vec) { } }; let method_info = ImplItemMethodInfo::new(&mut method, impl_type).unwrap(); let actual = method_info.method_wrapper(); @@ -324,7 +324,7 @@ mod tests { fn callback_args_only() { let impl_type: Type = syn::parse_str("Hello").unwrap(); let mut method: ImplItemMethod = parse_quote! { - #[private] pub fn method(&self, #[callback] x: &mut u64, #[callback] y: String) { } + #[private] pub fn method(&self, #[callback_unwrap] x: &mut u64, #[callback_unwrap] y: String) { } }; let method_info = ImplItemMethodInfo::new(&mut method, impl_type).unwrap(); let actual = method_info.method_wrapper(); @@ -356,6 +356,40 @@ mod tests { assert_eq!(expected.to_string(), actual.to_string()); } + #[test] + fn callback_args_results() { + let impl_type: Type = syn::parse_str("Hello").unwrap(); + let mut method: ImplItemMethod = parse_quote! { + #[private] pub fn method(&self, #[callback_result] x: &mut Result, #[callback_result] y: Result) { } + }; + let method_info = ImplItemMethodInfo::new(&mut method, impl_type).unwrap(); + let actual = method_info.method_wrapper(); + let expected = quote!( + #[cfg(target_arch = "wasm32")] + #[no_mangle] + pub extern "C" fn method() { + near_sdk::env::setup_panic_hook(); + if near_sdk::env::current_account_id() != near_sdk::env::predecessor_account_id() { + near_sdk::env::panic_str("Method method is private"); + } + let mut x: Result = match near_sdk::env::promise_result(0u64) { + near_sdk::PromiseResult::Successful(data) => Ok(near_sdk::serde_json::from_slice(&data).expect("Failed to deserialize callback using JSON")), + near_sdk::PromiseResult::NotReady => Err(near_sdk::PromiseError::NotReady), + near_sdk::PromiseResult::Failed => Err(near_sdk::PromiseError::Failed), + }; + let y: Result = match near_sdk::env::promise_result(1u64) { + near_sdk::PromiseResult::Successful(data) => Ok(near_sdk::serde_json::from_slice(&data).expect("Failed to deserialize callback using JSON")), + near_sdk::PromiseResult::NotReady => Err(near_sdk::PromiseError::NotReady), + near_sdk::PromiseResult::Failed => Err(near_sdk::PromiseError::Failed), + }; + let contract: Hello = near_sdk::env::state_read().unwrap_or_default(); + contract.method(&mut x, y, ); + } + ); + + assert_eq!(expected.to_string(), actual.to_string()); + } + #[test] fn callback_args_vec() { let impl_type: Type = syn::parse_str("Hello").unwrap(); @@ -541,7 +575,7 @@ mod tests { fn callback_args_mixed_serialization() { let impl_type: Type = syn::parse_str("Hello").unwrap(); let mut method: ImplItemMethod = parse_quote! { - #[private] pub fn method(&self, #[callback] #[serializer(borsh)] x: &mut u64, #[serializer(borsh)] y: String, #[callback] #[serializer(json)] z: Vec) { } + #[private] pub fn method(&self, #[callback_unwrap] #[serializer(borsh)] x: &mut u64, #[serializer(borsh)] y: String, #[callback_unwrap] #[serializer(json)] z: Vec) { } }; let method_info = ImplItemMethodInfo::new(&mut method, impl_type).unwrap(); let actual = method_info.method_wrapper(); diff --git a/near-sdk-macros/src/core_impl/code_generator/item_trait_info.rs b/near-sdk-macros/src/core_impl/code_generator/item_trait_info.rs index 5eb5e510e..1ff020d27 100644 --- a/near-sdk-macros/src/core_impl/code_generator/item_trait_info.rs +++ b/near-sdk-macros/src/core_impl/code_generator/item_trait_info.rs @@ -36,10 +36,10 @@ mod tests { fn merge_sort(&self, arr: Vec) -> PromiseOrValue>; fn merge( &self, - #[callback] + #[callback_unwrap] #[serializer(borsh)] data0: Vec, - #[callback] + #[callback_unwrap] #[serializer(borsh)] data1: Vec, ) -> Vec; diff --git a/near-sdk-macros/src/core_impl/info_extractor/arg_info.rs b/near-sdk-macros/src/core_impl/info_extractor/arg_info.rs index 332786365..8ef2ac994 100644 --- a/near-sdk-macros/src/core_impl/info_extractor/arg_info.rs +++ b/near-sdk-macros/src/core_impl/info_extractor/arg_info.rs @@ -9,6 +9,8 @@ pub enum BindgenArgType { Regular, /// An argument that we read from a single `env::promise_result()`. CallbackArg, + /// An argument that we read from a single `env::promise_result()` which handles the error. + CallbackResultArg, /// An argument that we read from all `env::promise_result()`. CallbackArgVec, } @@ -71,9 +73,12 @@ impl ArgInfo { for attr in &mut original.attrs { let attr_str = attr.path.to_token_stream().to_string(); match attr_str.as_str() { - "callback" => { + "callback" | "callback_unwrap" => { bindgen_ty = BindgenArgType::CallbackArg; } + "callback_result" => { + bindgen_ty = BindgenArgType::CallbackResultArg; + } "callback_vec" => { bindgen_ty = BindgenArgType::CallbackArgVec; } @@ -89,7 +94,11 @@ impl ArgInfo { original.attrs.retain(|attr| { let attr_str = attr.path.to_token_stream().to_string(); - attr_str != "callback" && attr_str != "callback_vec" && attr_str != "serializer" + attr_str != "callback" + && attr_str != "callback_vec" + && attr_str != "serializer" + && attr_str != "callback_result" + && attr_str != "callback_unwrap" }); Ok(Self { diff --git a/near-sdk/src/types/vm_types.rs b/near-sdk/src/types/vm_types.rs index 06ad7a688..23d1d4824 100644 --- a/near-sdk/src/types/vm_types.rs +++ b/near-sdk/src/types/vm_types.rs @@ -26,3 +26,12 @@ impl From for VmPromiseResult { } } } + +/// All error variants which can occur with promise results. +#[non_exhaustive] +pub enum PromiseError { + /// Promise result failed. + Failed, + /// Current version of the protocol never returns this variant. + NotReady, +}