From 1857e5f80339ee77e467ed3a470683c391cc646f Mon Sep 17 00:00:00 2001 From: David Lindner Date: Mon, 19 Jul 2021 14:27:45 -0700 Subject: [PATCH 1/4] Implemented logic for transfering Hbar from existing account to created account --- .gitignore | 1 + Cargo.lock | 1082 +++++++++++++++++++++++++++++++++++- Cargo.toml | 5 + examples/transfer_hbars.rs | 295 ++++++++++ 4 files changed, 1370 insertions(+), 13 deletions(-) create mode 100644 examples/transfer_hbars.rs diff --git a/.gitignore b/.gitignore index c403c34..ddbac2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target .idea/ +.env diff --git a/Cargo.lock b/Cargo.lock index 271e287..105bc18 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,28 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "aes" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "495ee669413bfbe9e8cace80f4d3d78e6d8c8d99579f97fb93bde351b185f2d4" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", + "ctr", + "opaque-debug", +] + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + [[package]] name = "anyhow" version = "1.0.42" @@ -40,42 +62,251 @@ dependencies = [ "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 = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" + [[package]] name = "autocfg" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "base-x" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" + [[package]] name = "base64" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "base64ct" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0d27fb6b6f1e43147af148af49d49329413ba781aa0d5e10979831c210173b5" + [[package]] name = "bitflags" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-modes" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" +dependencies = [ + "block-padding", + "cipher", +] + +[[package]] +name = "block-padding" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" + +[[package]] +name = "bumpalo" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" +[[package]] +name = "cc" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2" + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cipher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cloudabi" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "const-oid" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c32f031ea41b4291d695026c023b95d59db2d8a2c7640800ed56bc8f510f22" + +[[package]] +name = "const_fn" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7" + +[[package]] +name = "cpufeatures" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c99696f6c9dd7f35d486b9d04d7e6e202aa3e8c40d553f2fdf5e7e0c6a71ef" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-mac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" +dependencies = [ + "generic-array", + "subtle", +] + +[[package]] +name = "ctr" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a232f92a03f37dd7d7dd2adc67166c77e9cd88de5b019b9a9eecfaeaf7bfd481" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "639891fde0dbea823fc3d798a0fdf9d2f9440a42d64a78ab3488b0ca025117b3" +dependencies = [ + "byteorder", + "digest", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "der" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f215f706081a44cb702c71c39a52c05da637822e9c1645a50b7202689e982d" +dependencies = [ + "const-oid", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + +[[package]] +name = "ed25519" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d0860415b12243916284c67a9be413e044ee6668247b99ba26d94b2bc06c8f6" +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 = "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 = "fixedbitset" version = "0.2.0" @@ -88,6 +319,27 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + [[package]] name = "futures-channel" version = "0.3.15" @@ -121,13 +373,34 @@ version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" dependencies = [ - "autocfg", + "autocfg 1.0.1", "futures-core", "futures-task", "pin-project-lite", "pin-utils", ] +[[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", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + [[package]] name = "getrandom" version = "0.2.3" @@ -136,7 +409,7 @@ checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.10.2+wasi-snapshot-preview1", ] [[package]] @@ -173,13 +446,51 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "hedera-crypto" +version = "0.0.0" +source = "git+ssh://git@github.com/launchbadge/hedera-crypto-rust.git?branch=main#81be8d2b25e63cbd5a3031acc86485e029d05b67" +dependencies = [ + "aes", + "byteorder", + "cipher", + "const-oid", + "crypto-mac", + "ctr", + "ed25519-dalek", + "hex", + "hmac", + "itertools", + "json", + "libmath", + "num-bigint", + "once_cell", + "openssl", + "pbkdf2", + "pkcs8", + "rand 0.6.5", + "rand_core 0.6.3", + "regex", + "serde", + "serde_json", + "serde_repr", + "sha2", + "stream-ciphers", + "thiserror", +] + [[package]] name = "hedera-proto" version = "0.1.0" dependencies = [ "anyhow", + "dotenv", + "hedera-crypto", + "pretty_env_logger", "prost", "serde", + "serde_json", + "time", "tokio", "tonic", "tonic-build", @@ -194,6 +505,22 @@ dependencies = [ "libc", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac", + "digest", +] + [[package]] name = "http" version = "0.2.4" @@ -228,6 +555,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" +[[package]] +name = "humantime" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" +dependencies = [ + "quick-error", +] + [[package]] name = "hyper" version = "0.14.10" @@ -270,7 +606,7 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" dependencies = [ - "autocfg", + "autocfg 1.0.1", "hashbrown", ] @@ -298,6 +634,12 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +[[package]] +name = "json" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" + [[package]] name = "lazy_static" version = "1.4.0" @@ -310,6 +652,15 @@ version = "0.2.98" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320cfe77175da3a483efed4bc0adc1968ca050b098ce4f2f1c13a56626128790" +[[package]] +name = "libmath" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfd3416934a853ae80d5c3b006f632dfcbaf320300c5167e88a469e9ac214502" +dependencies = [ + "rand 0.3.23", +] + [[package]] name = "lock_api" version = "0.4.4" @@ -371,6 +722,36 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-bigint" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +dependencies = [ + "autocfg 1.0.1", + "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 1.0.1", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg 1.0.1", +] + [[package]] name = "num_cpus" version = "1.13.0" @@ -387,6 +768,39 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "openssl" +version = "0.10.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "549430950c79ae24e6d02e0b7404534ecf311d94cc9f861e9e4020187d13d885" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-sys", +] + +[[package]] +name = "openssl-sys" +version = "0.9.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a7907e3bfa08bb85105209cdfcb6c63d109f8f6c1ed6ca318fff5c1853fbc1d" +dependencies = [ + "autocfg 1.0.1", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "parking_lot" version = "0.11.1" @@ -412,6 +826,30 @@ dependencies = [ "winapi", ] +[[package]] +name = "password-hash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1a5d4e9c205d2c1ae73b84aab6240e98218c0e72e63b50422cfb2d1ca952282" +dependencies = [ + "base64ct", + "rand_core 0.6.3", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +dependencies = [ + "base64ct", + "crypto-mac", + "hmac", + "password-hash", + "sha2", +] + [[package]] name = "percent-encoding" version = "2.1.0" @@ -460,12 +898,64 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs5" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727618486cdd56950adcae6a7d29e26e5547a275aa8cc278cf9f9f33b029649b" +dependencies = [ + "aes", + "block-modes", + "der", + "hmac", + "pbkdf2", + "scrypt", + "sha2", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d156817ae0125e8aa5067710b0db24f0984830614f99875a70aa5e3b74db69" +dependencies = [ + "base64ct", + "der", + "pkcs5", + "rand_core 0.6.3", + "spki", + "zeroize", +] + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + [[package]] name = "ppv-lite86" version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +[[package]] +name = "pretty_env_logger" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" +dependencies = [ + "env_logger", + "log", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + [[package]] name = "proc-macro2" version = "1.0.27" @@ -527,7 +1017,13 @@ dependencies = [ ] [[package]] -name = "quote" +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.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" @@ -535,6 +1031,61 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +dependencies = [ + "libc", + "rand 0.4.6", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg", + "rand_xorshift", + "winapi", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", +] + [[package]] name = "rand" version = "0.8.4" @@ -542,9 +1093,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" dependencies = [ "libc", - "rand_chacha", - "rand_core", - "rand_hc", + "rand_chacha 0.3.1", + "rand_core 0.6.3", + "rand_hc 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.3.1", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] @@ -554,7 +1125,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.6.3", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[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]] @@ -563,7 +1158,25 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom", + "getrandom 0.2.3", +] + +[[package]] +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +dependencies = [ + "rand_core 0.3.1", +] + +[[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]] @@ -572,7 +1185,69 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" dependencies = [ - "rand_core", + "rand_core 0.6.3", +] + +[[package]] +name = "rand_isaac" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rand_jitter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +dependencies = [ + "libc", + "rand_core 0.4.2", + "winapi", +] + +[[package]] +name = "rand_os" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "winapi", +] + +[[package]] +name = "rand_pcg" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.4.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", ] [[package]] @@ -584,6 +1259,23 @@ dependencies = [ "bitflags", ] +[[package]] +name = "regex" +version = "1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" + [[package]] name = "remove_dir_all" version = "0.5.3" @@ -593,12 +1285,63 @@ dependencies = [ "winapi", ] +[[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 = "salsa20" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7c5f10864beba947e1a1b43f3ef46c8cc58d1c2ae549fa471713e8ff60787a" +dependencies = [ + "cipher", +] + [[package]] name = "scopeguard" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scrypt" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879588d8f90906e73302547e20fffefdd240eb3e0e744e142321f5d49dea0518" +dependencies = [ + "hmac", + "pbkdf2", + "salsa20", + "sha2", +] + +[[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.126" @@ -619,6 +1362,47 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + +[[package]] +name = "sha2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b362ae5752fd2137731f9fa25fd4d9058af34666ca1966fb969119cc35719f12" +dependencies = [ + "block-buffer", + "cfg-if", + "cpufeatures", + "digest", + "opaque-debug", +] + [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -628,6 +1412,12 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c19772be3c4dd2ceaacf03cb41d5885f2a02c4d8804884918e3a258480803335" + [[package]] name = "slab" version = "0.4.3" @@ -650,6 +1440,85 @@ dependencies = [ "winapi", ] +[[package]] +name = "spki" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "987637c5ae6b3121aba9d513f869bd2bff11c4cc086c22473befd6649c0bd521" +dependencies = [ + "der", +] + +[[package]] +name = "standback" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" +dependencies = [ + "version_check", +] + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1", + "syn", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "stream-ciphers" +version = "0.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d1311a1ce232fbb580d37704006f500be69ab2e21c2f8edf0b4def6083409d" + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + [[package]] name = "syn" version = "1.0.73" @@ -661,6 +1530,18 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "synstructure" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "474aaa926faa1603c40b7885a9eaea29b444d1cb2850cb7c0e37bb1a4182f4fa" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + [[package]] name = "tempfile" version = "3.2.0" @@ -669,19 +1550,86 @@ checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ "cfg-if", "libc", - "rand", + "rand 0.8.4", "redox_syscall", "remove_dir_all", "winapi", ] +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +dependencies = [ + "const_fn", + "libc", + "standback", + "stdweb", + "time-macros", + "version_check", + "winapi", +] + +[[package]] +name = "time-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" +dependencies = [ + "proc-macro-hack", + "time-macros-impl", +] + +[[package]] +name = "time-macros-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "standback", + "syn", +] + [[package]] name = "tokio" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98c8b05dc14c75ea83d63dd391100353789f5f24b8b3866542a5e85c8be8e985" dependencies = [ - "autocfg", + "autocfg 1.0.1", "bytes", "libc", "memchr", @@ -794,7 +1742,7 @@ dependencies = [ "futures-util", "indexmap", "pin-project", - "rand", + "rand 0.8.4", "slab", "tokio", "tokio-stream", @@ -865,6 +1813,12 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +[[package]] +name = "typenum" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" + [[package]] name = "unicode-segmentation" version = "1.8.0" @@ -877,6 +1831,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" + [[package]] name = "want" version = "0.3.0" @@ -887,12 +1853,72 @@ dependencies = [ "try-lock", ] +[[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 = "wasm-bindgen" +version = "0.2.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f" + [[package]] name = "which" version = "4.1.0" @@ -919,8 +1945,38 @@ 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 = "zeroize" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeafe61337cb2c879d328b74aa6cd9d794592c82da6be559fdf11493f02a2d18" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] diff --git a/Cargo.toml b/Cargo.toml index 9809ee8..271a21c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ tonic = { version="0.5.0", features=["prost"] } serde = { version="1.0.126", features=["derive"] } prost = "0.8.0" tokio = { version="1.8.0", features=["full"] } +serde_json = "1.0.64" [build-dependencies] tonic-build = "0.5.0" @@ -16,3 +17,7 @@ anyhow = "1.0.41" [dev-dependencies] anyhow = "1.0.41" +hedera-crypto = { git = "ssh://git@github.com/launchbadge/hedera-crypto-rust.git", branch='main' } +time = "0.2.27" +dotenv = "0.15.0" +pretty_env_logger = "0.4.0" diff --git a/examples/transfer_hbars.rs b/examples/transfer_hbars.rs new file mode 100644 index 0000000..b7a84bc --- /dev/null +++ b/examples/transfer_hbars.rs @@ -0,0 +1,295 @@ +use std::time::Duration; +use hedera_crypto::PrivateKey; +use hedera_proto::services; +use hedera_proto::services::crypto_service_client::CryptoServiceClient; +use prost::Message; +use std::env; +use std::str::FromStr; +use time::OffsetDateTime; +use tonic::transport::Channel; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + + let _ = dotenv::dotenv(); + + // https://docs.hedera.com/guides/testnet/testnet-nodes#testnet-nodes + let channel = Channel::builder("tcp://0.testnet.hedera.com:50211".parse()?) + .connect() + .await?; + + let mut client = CryptoServiceClient::new(channel); + + let my_account_id = &env::var("TESTNET_ID")?[4..10]; + let my_account_private_key = PrivateKey::from_str(&env::var("TESTNET_PRIVATE_KEY")?)?; + let my_account_public_key = my_account_private_key.public_key().to_bytes(); + + // Generated Keypair for New Account + let new_account_private_key = PrivateKey::generate(); + let new_account_public_key= new_account_private_key.public_key().to_bytes(); + + // Define and populate the structs for create account + let node_account_id = services::AccountId { + shard_num: 0, + realm_num: 0, + account_num: 3, + }; + + let account_id = services::AccountId { + shard_num: 0, + realm_num: 0, + account_num: my_account_id.parse::()?, + }; + + // 90 day duration + let duration = services::Duration { seconds: 7776000 }; + + let data = services::transaction_body::Data::CryptoCreateAccount( + services::CryptoCreateTransactionBody { + key: Some(services::Key { + key: Some(services::key::Key::Ed25519(new_account_public_key.to_vec())), + }), + auto_renew_period: Some(duration), + ..Default::default() + }, + ); + + let now = OffsetDateTime::now_utc(); + let now_in_seconds = now.unix_timestamp() as i64; + let now_in_nanos = now.nanosecond() as i32; + + let transaction_id = services::TransactionId { + transaction_valid_start: Some(services::Timestamp { + seconds: now_in_seconds, + nanos: now_in_nanos, + }), + account_id: Some(account_id.clone()), + scheduled: false, + }; + + let new_account = services::TransactionBody { + transaction_id: Some(transaction_id.clone()), + node_account_id: Some(node_account_id.clone()), + transaction_fee: 200000000, + transaction_valid_duration: Some(services::Duration { seconds: 120 }), + memo: String::new(), + data: Some(data), + ..Default::default() + }; + + // serialize account struct + let account_bytes = new_account.encode_to_vec(); + + // sign the bytes + let signature = my_account_private_key.sign(&account_bytes); + + // creates signed transaction so the account can be created + let sig_pair = vec![services::SignaturePair { + pub_key_prefix: my_account_public_key.to_vec(), + signature: Some(services::signature_pair::Signature::Ed25519( + signature.to_vec(), + )), + }]; + + let signed_transaction = services::SignedTransaction { + body_bytes: account_bytes, + sig_map: Some(services::SignatureMap { sig_pair: sig_pair }), + }; + + // construct a transaction + let transaction = services::Transaction { + signed_transaction_bytes: signed_transaction.encode_to_vec(), + ..Default::default() + }; + + // get response to creating the account + let response = client.create_account(transaction).await?; + + // view account + let t_response = Some(response); + println!("{:#?}", t_response); + + let query = services::Query { + query: Some(services::query::Query::TransactionGetReceipt( + services::TransactionGetReceiptQuery { + header: None, + transaction_id: Some(transaction_id.clone()), + include_duplicates: false, + }, + )), + }; + + // wait for consensus + tokio::time::sleep(Duration::from_secs(15)).await; + + // query the receipt + let response= client.get_transaction_receipts(query).await?; + + let new_account_num = match response.into_inner().response { + Some(services::response::Response::TransactionGetReceipt(response)) => { + //response.receipt, + match response.receipt { + Some(response) => { + match response.account_id { + Some(response) => response.account_num, + _ => unreachable!(), + } + } + _ => unreachable!(), + } + } + _ => unreachable!(), + }; + + let new_account_id = services::AccountId { + shard_num: 0, + realm_num: 0, + account_num: new_account_num as i64, + }; + + println!("New Account number Account Number = 0.0.{:#?} ", new_account_num); + + // check the new account's balance + let query = services::Query { + query: Some(services::query::Query::CryptogetAccountBalance( + services::CryptoGetAccountBalanceQuery { + header: None, + balance_source: Some( + services::crypto_get_account_balance_query::BalanceSource::AccountId( + services::AccountId { + account_num: new_account_num as i64, + shard_num: 0, + realm_num: 0, + }, + ), + ), + }, + )), + }; + + let response = client.crypto_get_balance(query).await?; + + let response = match response.into_inner().response { + Some(services::response::Response::CryptogetAccountBalance(response)) => response, + _ => unreachable!(), + }; + println!("The new account's balance is: {} tℏ", response.balance); + + // transfer hbar + let transfer_transaction_data = services::transaction_body::Data::CryptoTransfer( + services::CryptoTransferTransactionBody { + transfers: Some(services::TransferList { + account_amounts: vec![ + services::AccountAmount { + account_id: Some(account_id.clone()), + amount: -1000, + }, + services::AccountAmount { + account_id: Some(new_account_id.clone()), + amount: 1000, + }], + }), + token_transfers: Vec::new(), + } + ); + + let transfer_transaction_id = services::TransactionId { + transaction_valid_start: Some(services::Timestamp { + seconds: now_in_seconds + 1, + nanos: now_in_nanos, + }), + account_id: Some(account_id.clone()), + scheduled: false, + }; + + let transfer_transaction_body = services::TransactionBody { + transaction_id: Some(transfer_transaction_id.clone()), + node_account_id: Some(node_account_id.clone()), + transaction_fee: 200000000, + transaction_valid_duration: Some(services::Duration { seconds: 120 }), + memo: String::new(), + data: Some(transfer_transaction_data), + ..Default::default() + }; + + let transfer_account_bytes = transfer_transaction_body.encode_to_vec(); + + let transfer_signature = my_account_private_key.sign(&transfer_account_bytes); + let receive_signature = new_account_private_key.sign(&transfer_account_bytes); + + let transfer_sig_pair = vec![ + services::SignaturePair { + pub_key_prefix: my_account_public_key.to_vec(), + signature: Some(services::signature_pair::Signature::Ed25519( + transfer_signature.to_vec(), + )), + }, + services::SignaturePair { + pub_key_prefix: new_account_public_key.to_vec(), + signature: Some(services::signature_pair::Signature::Ed25519( + receive_signature.to_vec(), + )), + }]; + + let transfer_signed_transaction = services::SignedTransaction { + body_bytes: transfer_account_bytes, + sig_map: Some(services::SignatureMap { sig_pair: transfer_sig_pair.clone() }), + }; + + let transfer_transaction = services::Transaction { + signed_transaction_bytes: transfer_signed_transaction.encode_to_vec(), + ..Default::default() + }; + + let transfer_response = client.crypto_transfer(transfer_transaction).await?; + + println!("Transfer Hbar Response: {:#?}", Some(transfer_response)); + + // Query Receipt for Hbar transfer to new account + let transfer_query = services::Query { + query: Some(services::query::Query::TransactionGetReceipt( + services::TransactionGetReceiptQuery { + header: None, + transaction_id: Some(transfer_transaction_id.clone()), + include_duplicates: false, + }, + )), + }; + + // wait for consensus + tokio::time::sleep(Duration::from_secs(15)).await; + + println!("Transfer Hbar receipt: {:#?}", &transfer_query); + + // Query the new account's balance + let new_account_balance_query = services::Query { + query: Some(services::query::Query::CryptogetAccountBalance( + services::CryptoGetAccountBalanceQuery { + header: None, + balance_source: Some( + services::crypto_get_account_balance_query::BalanceSource::AccountId( + services::AccountId { + account_num: new_account_num, + shard_num: 0, + realm_num: 0, + }, + ), + ), + }, + )), + }; + + let new_account_balance_response = client.crypto_get_balance(new_account_balance_query).await?; + + // wait for consensus + tokio::time::sleep(Duration::from_secs(15)).await; + + let new_account_balance_response = match new_account_balance_response.into_inner().response { + Some(services::response::Response::CryptogetAccountBalance(response)) => response, + _ => unreachable!(), + }; + + println!("The new account balance after transfer is: {} tℏ", new_account_balance_response.balance); + + Ok(()) +} \ No newline at end of file From a18ec9bd452628c6b45611aa1cfb31069f80cc4b Mon Sep 17 00:00:00 2001 From: David Lindner Date: Mon, 19 Jul 2021 15:31:44 -0700 Subject: [PATCH 2/4] Ripped out create_account stuff --- examples/transfer_hbars.rs | 143 ++++++------------------------------- 1 file changed, 23 insertions(+), 120 deletions(-) diff --git a/examples/transfer_hbars.rs b/examples/transfer_hbars.rs index b7a84bc..76f8ef4 100644 --- a/examples/transfer_hbars.rs +++ b/examples/transfer_hbars.rs @@ -20,13 +20,14 @@ async fn main() -> anyhow::Result<()> { let mut client = CryptoServiceClient::new(channel); - let my_account_id = &env::var("TESTNET_ID")?[4..10]; + let account_id = &env::var("TESTNET_ID")?[4..10]; + let new_account_id = 2139523; + let my_account_private_key = PrivateKey::from_str(&env::var("TESTNET_PRIVATE_KEY")?)?; let my_account_public_key = my_account_private_key.public_key().to_bytes(); - // Generated Keypair for New Account - let new_account_private_key = PrivateKey::generate(); - let new_account_public_key= new_account_private_key.public_key().to_bytes(); + let new_account_private_key = [41, 107, 201, 102, 6, 19, 57, 84, 38, 112, 7, 118, 113, 57, 127, 150, 187, 146, 121, 192, 178, 52, 183, 23, 119, 175, 244, 207, 154, 79, 229, 203]; + let new_account_public_key = [240, 217, 84, 212, 186, 42, 57, 229, 27, 90, 0, 28, 194, 215, 60, 221, 97, 227, 1, 218, 42, 166, 79, 167, 218, 107, 73, 148, 174, 231, 5, 245]; // Define and populate the structs for create account let node_account_id = services::AccountId { @@ -35,119 +36,21 @@ async fn main() -> anyhow::Result<()> { account_num: 3, }; - let account_id = services::AccountId { + let my_account_id = services::AccountId { shard_num: 0, realm_num: 0, - account_num: my_account_id.parse::()?, - }; - - // 90 day duration - let duration = services::Duration { seconds: 7776000 }; - - let data = services::transaction_body::Data::CryptoCreateAccount( - services::CryptoCreateTransactionBody { - key: Some(services::Key { - key: Some(services::key::Key::Ed25519(new_account_public_key.to_vec())), - }), - auto_renew_period: Some(duration), - ..Default::default() - }, - ); - - let now = OffsetDateTime::now_utc(); - let now_in_seconds = now.unix_timestamp() as i64; - let now_in_nanos = now.nanosecond() as i32; - - let transaction_id = services::TransactionId { - transaction_valid_start: Some(services::Timestamp { - seconds: now_in_seconds, - nanos: now_in_nanos, - }), - account_id: Some(account_id.clone()), - scheduled: false, - }; - - let new_account = services::TransactionBody { - transaction_id: Some(transaction_id.clone()), - node_account_id: Some(node_account_id.clone()), - transaction_fee: 200000000, - transaction_valid_duration: Some(services::Duration { seconds: 120 }), - memo: String::new(), - data: Some(data), - ..Default::default() - }; - - // serialize account struct - let account_bytes = new_account.encode_to_vec(); - - // sign the bytes - let signature = my_account_private_key.sign(&account_bytes); - - // creates signed transaction so the account can be created - let sig_pair = vec![services::SignaturePair { - pub_key_prefix: my_account_public_key.to_vec(), - signature: Some(services::signature_pair::Signature::Ed25519( - signature.to_vec(), - )), - }]; - - let signed_transaction = services::SignedTransaction { - body_bytes: account_bytes, - sig_map: Some(services::SignatureMap { sig_pair: sig_pair }), - }; - - // construct a transaction - let transaction = services::Transaction { - signed_transaction_bytes: signed_transaction.encode_to_vec(), - ..Default::default() - }; - - // get response to creating the account - let response = client.create_account(transaction).await?; - - // view account - let t_response = Some(response); - println!("{:#?}", t_response); - - let query = services::Query { - query: Some(services::query::Query::TransactionGetReceipt( - services::TransactionGetReceiptQuery { - header: None, - transaction_id: Some(transaction_id.clone()), - include_duplicates: false, - }, - )), - }; - - // wait for consensus - tokio::time::sleep(Duration::from_secs(15)).await; - - // query the receipt - let response= client.get_transaction_receipts(query).await?; - - let new_account_num = match response.into_inner().response { - Some(services::response::Response::TransactionGetReceipt(response)) => { - //response.receipt, - match response.receipt { - Some(response) => { - match response.account_id { - Some(response) => response.account_num, - _ => unreachable!(), - } - } - _ => unreachable!(), - } - } - _ => unreachable!(), + account_num: account_id.parse::()?, }; let new_account_id = services::AccountId { shard_num: 0, realm_num: 0, - account_num: new_account_num as i64, + account_num: new_account_id, }; - println!("New Account number Account Number = 0.0.{:#?} ", new_account_num); + let now = OffsetDateTime::now_utc(); + let now_in_seconds = now.unix_timestamp() as i64; + let now_in_nanos = now.nanosecond() as i32; // check the new account's balance let query = services::Query { @@ -157,7 +60,7 @@ async fn main() -> anyhow::Result<()> { balance_source: Some( services::crypto_get_account_balance_query::BalanceSource::AccountId( services::AccountId { - account_num: new_account_num as i64, + account_num: new_account_id.account_num, shard_num: 0, realm_num: 0, }, @@ -173,15 +76,15 @@ async fn main() -> anyhow::Result<()> { Some(services::response::Response::CryptogetAccountBalance(response)) => response, _ => unreachable!(), }; - println!("The new account's balance is: {} tℏ", response.balance); + println!("The new account's balance before transfer is: {} tℏ", response.balance); - // transfer hbar + // Transfer hbar let transfer_transaction_data = services::transaction_body::Data::CryptoTransfer( services::CryptoTransferTransactionBody { transfers: Some(services::TransferList { account_amounts: vec![ services::AccountAmount { - account_id: Some(account_id.clone()), + account_id: Some(my_account_id.clone()), amount: -1000, }, services::AccountAmount { @@ -193,17 +96,17 @@ async fn main() -> anyhow::Result<()> { } ); - let transfer_transaction_id = services::TransactionId { + let transaction_id = services::TransactionId { transaction_valid_start: Some(services::Timestamp { - seconds: now_in_seconds + 1, + seconds: now_in_seconds, nanos: now_in_nanos, }), - account_id: Some(account_id.clone()), + account_id: Some(my_account_id.clone()), scheduled: false, }; let transfer_transaction_body = services::TransactionBody { - transaction_id: Some(transfer_transaction_id.clone()), + transaction_id: Some(transaction_id.clone()), node_account_id: Some(node_account_id.clone()), transaction_fee: 200000000, transaction_valid_duration: Some(services::Duration { seconds: 120 }), @@ -215,7 +118,7 @@ async fn main() -> anyhow::Result<()> { let transfer_account_bytes = transfer_transaction_body.encode_to_vec(); let transfer_signature = my_account_private_key.sign(&transfer_account_bytes); - let receive_signature = new_account_private_key.sign(&transfer_account_bytes); + let receive_signature = PrivateKey::from_bytes(&new_account_private_key)?.sign(&transfer_account_bytes); let transfer_sig_pair = vec![ services::SignaturePair { @@ -250,7 +153,7 @@ async fn main() -> anyhow::Result<()> { query: Some(services::query::Query::TransactionGetReceipt( services::TransactionGetReceiptQuery { header: None, - transaction_id: Some(transfer_transaction_id.clone()), + transaction_id: Some(transaction_id.clone()), include_duplicates: false, }, )), @@ -269,7 +172,7 @@ async fn main() -> anyhow::Result<()> { balance_source: Some( services::crypto_get_account_balance_query::BalanceSource::AccountId( services::AccountId { - account_num: new_account_num, + account_num: new_account_id.account_num, shard_num: 0, realm_num: 0, }, @@ -289,7 +192,7 @@ async fn main() -> anyhow::Result<()> { _ => unreachable!(), }; - println!("The new account balance after transfer is: {} tℏ", new_account_balance_response.balance); + println!("The new account's balance after transfer is: {} tℏ", new_account_balance_response.balance); Ok(()) } \ No newline at end of file From 364dad70f3554e5e6cd091224857f274d281a3a8 Mon Sep 17 00:00:00 2001 From: David Lindner Date: Fri, 23 Jul 2021 08:18:46 -0700 Subject: [PATCH 3/4] cleaned up code, added comments --- examples/transfer_hbars.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/examples/transfer_hbars.rs b/examples/transfer_hbars.rs index 76f8ef4..2de0bb6 100644 --- a/examples/transfer_hbars.rs +++ b/examples/transfer_hbars.rs @@ -20,16 +20,18 @@ async fn main() -> anyhow::Result<()> { let mut client = CryptoServiceClient::new(channel); + // Hedera testnet account ID let account_id = &env::var("TESTNET_ID")?[4..10]; - let new_account_id = 2139523; + //Operator keypair let my_account_private_key = PrivateKey::from_str(&env::var("TESTNET_PRIVATE_KEY")?)?; let my_account_public_key = my_account_private_key.public_key().to_bytes(); + // Generated testnet ID and receiver account keypair + let new_account_id = 2139523; let new_account_private_key = [41, 107, 201, 102, 6, 19, 57, 84, 38, 112, 7, 118, 113, 57, 127, 150, 187, 146, 121, 192, 178, 52, 183, 23, 119, 175, 244, 207, 154, 79, 229, 203]; let new_account_public_key = [240, 217, 84, 212, 186, 42, 57, 229, 27, 90, 0, 28, 194, 215, 60, 221, 97, 227, 1, 218, 42, 166, 79, 167, 218, 107, 73, 148, 174, 231, 5, 245]; - // Define and populate the structs for create account let node_account_id = services::AccountId { shard_num: 0, realm_num: 0, @@ -78,7 +80,7 @@ async fn main() -> anyhow::Result<()> { }; println!("The new account's balance before transfer is: {} tℏ", response.balance); - // Transfer hbar + // transfer hbar let transfer_transaction_data = services::transaction_body::Data::CryptoTransfer( services::CryptoTransferTransactionBody { transfers: Some(services::TransferList { @@ -115,11 +117,14 @@ async fn main() -> anyhow::Result<()> { ..Default::default() }; + // serialize account body let transfer_account_bytes = transfer_transaction_body.encode_to_vec(); + // sign bytes for both transfer and receive accounts let transfer_signature = my_account_private_key.sign(&transfer_account_bytes); let receive_signature = PrivateKey::from_bytes(&new_account_private_key)?.sign(&transfer_account_bytes); + // add signature pairs for both transfer and receive accounts let transfer_sig_pair = vec![ services::SignaturePair { pub_key_prefix: my_account_public_key.to_vec(), @@ -139,6 +144,7 @@ async fn main() -> anyhow::Result<()> { sig_map: Some(services::SignatureMap { sig_pair: transfer_sig_pair.clone() }), }; + // construct the transaction let transfer_transaction = services::Transaction { signed_transaction_bytes: transfer_signed_transaction.encode_to_vec(), ..Default::default() @@ -148,7 +154,7 @@ async fn main() -> anyhow::Result<()> { println!("Transfer Hbar Response: {:#?}", Some(transfer_response)); - // Query Receipt for Hbar transfer to new account + // query Receipt for Hbar transfer to new account let transfer_query = services::Query { query: Some(services::query::Query::TransactionGetReceipt( services::TransactionGetReceiptQuery { @@ -164,7 +170,7 @@ async fn main() -> anyhow::Result<()> { println!("Transfer Hbar receipt: {:#?}", &transfer_query); - // Query the new account's balance + // query the new account's balance let new_account_balance_query = services::Query { query: Some(services::query::Query::CryptogetAccountBalance( services::CryptoGetAccountBalanceQuery { @@ -182,6 +188,7 @@ async fn main() -> anyhow::Result<()> { )), }; + // query the new account's balance let new_account_balance_response = client.crypto_get_balance(new_account_balance_query).await?; // wait for consensus From 30963bcd534559daab10217d445249c564762f8b Mon Sep 17 00:00:00 2001 From: David Lindner Date: Fri, 23 Jul 2021 10:25:02 -0700 Subject: [PATCH 4/4] Resolve conflicts with main toml --- Cargo.lock | 91 ++++++++++++++++++++++++++++++++++-------------------- Cargo.toml | 1 + 2 files changed, 59 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 105bc18..469cee6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -164,6 +164,19 @@ 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", + "time 0.1.44", + "winapi", +] + [[package]] name = "cipher" version = "0.3.0" @@ -205,9 +218,9 @@ dependencies = [ [[package]] name = "crypto-mac" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ "generic-array", "subtle", @@ -267,9 +280,9 @@ checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] name = "ed25519" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d0860415b12243916284c67a9be413e044ee6668247b99ba26d94b2bc06c8f6" +checksum = "4620d40f6d2601794401d6dd95a5cf69b6c157852539470eeda433a99b3c0efc" dependencies = [ "signature", ] @@ -409,7 +422,7 @@ checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ "cfg-if", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi 0.10.0+wasi-snapshot-preview1", ] [[package]] @@ -449,7 +462,7 @@ dependencies = [ [[package]] name = "hedera-crypto" version = "0.0.0" -source = "git+ssh://git@github.com/launchbadge/hedera-crypto-rust.git?branch=main#81be8d2b25e63cbd5a3031acc86485e029d05b67" +source = "git+ssh://git@github.com/launchbadge/hedera-crypto-rust.git?branch=main#78df4281717a9bbc38f823e60104f8270655a832" dependencies = [ "aes", "byteorder", @@ -484,13 +497,14 @@ name = "hedera-proto" version = "0.1.0" dependencies = [ "anyhow", + "chrono", "dotenv", "hedera-crypto", "pretty_env_logger", "prost", "serde", "serde_json", - "time", + "time 0.2.27", "tokio", "tonic", "tonic-build", @@ -566,9 +580,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.14.10" +version = "0.14.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7728a72c4c7d72665fde02204bcbd93b247721025b222ef78606f14513e0fd03" +checksum = "0b61cf2d1aebcf6e6352c97b81dc2244ca29194be1b276f5d8ad5c6330fffb11" dependencies = [ "bytes", "futures-channel", @@ -612,9 +626,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec" +checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" dependencies = [ "cfg-if", ] @@ -828,9 +842,9 @@ dependencies = [ [[package]] name = "password-hash" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1a5d4e9c205d2c1ae73b84aab6240e98218c0e72e63b50422cfb2d1ca952282" +checksum = "fd482dfb8cfba5a93ec0f91e1c0f66967cb2fdc1a8dba646c4f9202c5d05d785" dependencies = [ "base64ct", "rand_core 0.6.3", @@ -868,18 +882,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4" +checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f" +checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389" dependencies = [ "proc-macro2", "quote", @@ -916,9 +930,9 @@ dependencies = [ [[package]] name = "pkcs8" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d156817ae0125e8aa5067710b0db24f0984830614f99875a70aa5e3b74db69" +checksum = "87bb2d5c68b7505a3a89eb2f3583a4d56303863005226c2ef99319930a262be4" dependencies = [ "base64ct", "der", @@ -958,9 +972,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612" dependencies = [ "unicode-xid", ] @@ -1302,9 +1316,9 @@ checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" [[package]] name = "salsa20" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7c5f10864beba947e1a1b43f3ef46c8cc58d1c2ae549fa471713e8ff60787a" +checksum = "ecbd2eb639fd7cab5804a0837fe373cc2172d15437e804c054a9fb885cb923b0" dependencies = [ "cipher", ] @@ -1521,9 +1535,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.73" +version = "1.0.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7" +checksum = "1873d832550d4588c3dbc20f01361ab00bfe741048f71e3fecf145a7cc18b29c" dependencies = [ "proc-macro2", "quote", @@ -1585,6 +1599,17 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + [[package]] name = "time" version = "0.2.27" @@ -1625,9 +1650,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c8b05dc14c75ea83d63dd391100353789f5f24b8b3866542a5e85c8be8e985" +checksum = "4b7b349f11a7047e6d1276853e612d152f5e8a352c61917887cc2169e2366b4c" dependencies = [ "autocfg 1.0.1", "bytes", @@ -1722,9 +1747,9 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db9a497663a9a779693ef67b6e6aef8345b3d3ff8d50ef92eae6c88cb1e386" +checksum = "d12faebbe071b06f486be82cc9318350814fdd07fcb28f3690840cd770599283" dependencies = [ "proc-macro2", "prost-build", @@ -1861,9 +1886,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-bindgen" @@ -1962,9 +1987,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "zeroize" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeafe61337cb2c879d328b74aa6cd9d794592c82da6be559fdf11493f02a2d18" +checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd" dependencies = [ "zeroize_derive", ] diff --git a/Cargo.toml b/Cargo.toml index 271a21c..24cc40f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ tonic = { version="0.5.0", features=["prost"] } serde = { version="1.0.126", features=["derive"] } prost = "0.8.0" tokio = { version="1.8.0", features=["full"] } +chrono = { version="0.4.19", optional = true } serde_json = "1.0.64" [build-dependencies]