From 3ff0b7c5aed467ab98d03aed42a7b7289a30c57f Mon Sep 17 00:00:00 2001 From: IgorKoval Date: Sat, 5 Oct 2024 02:20:50 +0300 Subject: [PATCH] Option `--keys`/`--sign` can take private key as argument in `message`/`call` and another commands. --- CHANGELOG.md | 3 + Cargo.lock | 339 ++++++++++++++++++-------------------- Cargo.toml | 2 +- src/call.rs | 2 +- src/crypto.rs | 12 +- src/debug.rs | 27 +-- src/helpers.rs | 8 +- src/main.rs | 8 +- src/message.rs | 20 ++- src/run.rs | 2 +- tests/_network_test.rs | 2 +- tests/browser.rs | 2 +- tests/common/mod.rs | 228 ++++++++++++------------- tests/json_output_test.rs | 2 +- tests/mnemonic.rs | 2 +- tests/test_cli.rs | 4 +- 16 files changed, 328 insertions(+), 335 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c28929c0..9139b372 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. +## 0.41.0 +- Option `--keys`/`--sign` can take private key as argument in `message`/`call` and another commands. + ## 0.40.0 - Supported [ABI 2.7](https://github.com/everx-labs/ever-abi/blob/master/CHANGELOG.md#version-270) - Supported calling [TVM-Solidity getters](https://github.com/everx-labs/TVM-Solidity-Compiler/blob/master/API.md#getter). diff --git a/Cargo.lock b/Cargo.lock index 54413fe2..597aeeae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -168,9 +168,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "api_derive" @@ -196,9 +196,9 @@ dependencies = [ [[package]] name = "arrayref" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] name = "assert_cmd" @@ -218,13 +218,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -246,23 +246,23 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -408,15 +408,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" -version = "1.1.11" +version = "1.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fb8dd288a69fc53a1996d7ecfbf4a20d59065bff137ce7e56bbd620de191189" +checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1" dependencies = [ "jobserver", "libc", @@ -493,9 +493,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.15" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d8838454fda655dafd3accb2b6e2bea645b9e4078abe84a22ceb947235c5cc" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -503,9 +503,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -515,14 +515,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -602,9 +602,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -727,7 +727,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -853,7 +853,7 @@ dependencies = [ [[package]] name = "ever-cli" -version = "0.40.0" +version = "0.40.1" dependencies = [ "anyhow", "assert_cmd", @@ -925,7 +925,7 @@ version = "1.6.14" source = "git+https://github.com/everx-labs/ever-assembler.git?tag=1.6.14#0569ad4c246813f3b3f2db27b427c67afd23e8e9" dependencies = [ "anyhow", - "clap 4.5.15", + "clap 4.5.20", "ever_block", "ever_vm", "hex 0.4.3", @@ -1128,9 +1128,9 @@ checksum = "a48fe53466ab1f4ea6303bf9d7a0ca8060778590f09fd6c3304cc817aeb9935d" [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fiat-crypto" @@ -1179,9 +1179,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1194,9 +1194,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1204,15 +1204,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1221,38 +1221,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1304,9 +1304,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -1335,9 +1335,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -1363,9 +1363,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "heck" @@ -1498,9 +1498,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1541,7 +1541,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "httparse", @@ -1583,9 +1583,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", @@ -1596,16 +1596,15 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1652,12 +1651,12 @@ checksum = "4161ceaf2f41b6cd3f6502f5da085d4ad4393a51e0c70ed2fce1d5698d798fae" [[package]] name = "indexmap" -version = "2.4.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -1684,9 +1683,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "is_terminal_polyfill" @@ -1735,9 +1734,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libsecp256k1" @@ -1805,8 +1804,8 @@ dependencies = [ [[package]] name = "lockfree" -version = "0.5.1" -source = "git+https://github.com/everx-labs/lockfree.git#bfcb66587dc4ffed9e8e9248995ad2fe8dc3669e" +version = "0.5.2" +source = "git+https://github.com/everx-labs/lockfree.git#2a30df72944ed48255a97defcd387dd4962f3dd5" dependencies = [ "owned-alloc", ] @@ -1851,7 +1850,7 @@ checksum = "38b4faf00617defe497754acde3024865bc143d44a86799b24e191ecff91354f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -1862,11 +1861,11 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -1974,7 +1973,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -2035,18 +2034,18 @@ checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" [[package]] name = "object" -version = "0.36.3" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "opaque-debug" @@ -2077,7 +2076,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -2162,22 +2161,22 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -2204,9 +2203,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "pom" @@ -2216,9 +2215,9 @@ checksum = "60f6ce597ecdcc9a098e7fddacb1065093a3d66446fa16c675e7e71d1b5c28e6" [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "powerfmt" @@ -2278,9 +2277,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a" dependencies = [ "unicode-ident", ] @@ -2322,9 +2321,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -2402,18 +2401,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", @@ -2423,9 +2422,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -2434,9 +2433,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -2491,7 +2490,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", + "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", @@ -2506,7 +2505,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile 2.1.3", + "rustls-pemfile 2.2.0", "serde", "serde_json", "serde_urlencoded", @@ -2536,18 +2535,18 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -2567,19 +2566,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" [[package]] name = "ryu" @@ -2598,11 +2596,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2647,9 +2645,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -2663,29 +2661,29 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.207" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.207" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] name = "serde_json" -version = "1.0.124" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "indexmap", "itoa", @@ -2702,7 +2700,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -2898,9 +2896,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.74" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -2936,9 +2934,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -2973,22 +2971,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -3067,9 +3065,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -3091,7 +3089,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -3117,9 +3115,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", "pin-project-lite", @@ -3142,9 +3140,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -3187,27 +3185,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - [[package]] name = "tower-service" version = "0.3.3" @@ -3267,30 +3244,30 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "url" @@ -3385,7 +3362,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", "wasm-bindgen-shared", ] @@ -3419,7 +3396,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3678,7 +3655,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] @@ -3698,7 +3675,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.74", + "syn 2.0.79", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 72bdff18..a89d2609 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ license = 'Apache-2.0' name = 'ever-cli' readme = 'README.md' repository = 'https://github.com/everx-labs/ever-cli' -version = '0.40.0' +version = '0.40.1' [dependencies] anyhow = '1.0' diff --git a/src/call.rs b/src/call.rs index 19f3cb07..3f76ff6b 100644 --- a/src/call.rs +++ b/src/call.rs @@ -104,7 +104,7 @@ async fn build_json_from_params( } ParamType::Array(ref _x) => { let mut result_vec: Vec = vec![]; - for i in value.split(|c| c == ',' || c == '[' || c == ']') { + for i in value.split([',', '[', ']']) { if !i.is_empty() { result_vec.push(parse_integer_param(i)?) } diff --git a/src/crypto.rs b/src/crypto.rs index 7c04ec86..9d9194d3 100644 --- a/src/crypto.rs +++ b/src/crypto.rs @@ -20,7 +20,15 @@ use ever_client::crypto::{ }; pub fn load_keypair(keys: &str) -> Result { - if keys.find(' ').is_none() { + let is_private_key = + keys.chars().all(|ch: char| char::is_ascii_hexdigit(&ch)) && keys.len() == 128; + + if is_private_key { + Ok(KeyPair { + public: keys[64..].to_string(), + secret: keys[..64].to_string(), + }) + } else if keys.find(' ').is_none() { let keys = read_keys(keys)?; Ok(keys) } else { @@ -166,7 +174,7 @@ pub fn generate_keypair( if let Some(keys_path) = keys_path { let folder_path = keys_path .trim_end_matches(|c| c != '/') - .trim_end_matches(|c| c == '/'); + .trim_end_matches('/'); check_dir(folder_path)?; std::fs::write(keys_path, &keys_json) .map_err(|e| format!("failed to create file with keys: {}", e))?; diff --git a/src/debug.rs b/src/debug.rs index 87d9d7bc..095308ff 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -20,7 +20,6 @@ use crate::helpers::{ load_ton_address, now_ms, query_account_field, query_with_limit, wc_from_matches_or_config, CallbackType, }; -use crate::message::prepare_message; use crate::replay::{fetch, replay, CONFIG_ADDR, DUMP_ACCOUNT, DUMP_CONFIG, DUMP_NONE}; use crate::{ contract_data_from_matches_or_config_alias, print_args, unpack_alternative_params, FullConfig, @@ -709,25 +708,9 @@ async fn debug_call_command( }; let now = parse_now(matches)?; - let addr = account.get_addr().unwrap().to_string(); let params = load_params(¶ms.unwrap())?; - let message = if false { - prepare_message( - ton_client.clone(), - &addr, - abi.clone(), - method, - ¶ms, - None, - None, - full_config.config.is_json, - None, - ) - .await? - .message - } else { + let message = { let keys = contract_data.keys.map(|k| load_keypair(&k)).transpose()?; - let header = FunctionHeader { expire: Some((now / 1000) as u32 + full_config.config.lifetime), time: Some(now), @@ -1107,8 +1090,8 @@ async fn query_address(tr_id: &str, config: &Config) -> Result { 0 => Err("Transaction was not found".to_string()), _ => Ok(query_result[0]["account_addr"] .to_string() - .trim_start_matches(|c| c == '"') - .trim_end_matches(|c| c == '"') + .trim_start_matches('"') + .trim_end_matches('"') .to_string()), } } @@ -1183,8 +1166,8 @@ fn choose_transaction(transactions: Vec) -> Result { } Ok(transactions[chosen - 1] .transaction_id - .trim_start_matches(|c| c == '"') - .trim_end_matches(|c| c == '"') + .trim_start_matches('"') + .trim_end_matches('"') .to_string()) } diff --git a/src/helpers.rs b/src/helpers.rs index ea8a7963..63888b1c 100644 --- a/src/helpers.rs +++ b/src/helpers.rs @@ -355,7 +355,13 @@ pub async fn load_abi_str(abi_path: &str, config: &Config) -> Result Result { diff --git a/src/main.rs b/src/main.rs index 57da905a..d36622c0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -117,15 +117,17 @@ async fn main_internal() -> Result<(), String> { .takes_value(true) .help("Path or link to the contract ABI file or pure json ABI data. Can be specified in the config file."); + let key_help = "Private key in hex or seed phrase or path to the file with keypair used to sign the message. Can be specified in the config file file."; + let keys_arg = Arg::with_name("KEYS") .long("--keys") .takes_value(true) - .help("Seed phrase or path to the file with keypair used to sign the message. Can be specified in the config file."); + .help(key_help); let sign_arg = Arg::with_name("SIGN") .long("--sign") .takes_value(true) - .help("Seed phrase or path to the file with keypair used to sign the message. Can be specified in the config."); + .help(key_help); let method_opt_arg = Arg::with_name("METHOD") .takes_value(true) @@ -1216,7 +1218,7 @@ async fn command_parser(matches: &ArgMatches<'_>, is_json: bool) -> Result<(), S } return Ok(()); } - Err("invalid arguments".to_string()) + Err("Unknown command".to_string()) } fn genphrase_command(matches: &ArgMatches, config: &Config) -> Result<(), String> { diff --git a/src/message.rs b/src/message.rs index 9ab3dcbe..7ae55257 100644 --- a/src/message.rs +++ b/src/message.rs @@ -34,7 +34,7 @@ pub async fn prepare_message( abi: Abi, method: &str, params: &str, - header: Option, + header: FunctionHeader, keys: Option, is_json: bool, signature_id: Option, @@ -48,7 +48,7 @@ pub async fn prepare_message( abi, method, params, - header.clone(), + Some(header.clone()), keys, signature_id, )?; @@ -60,7 +60,7 @@ pub async fn prepare_message( Ok(EncodedMessage { message: msg.message, message_id: msg.message_id, - expire: header.and_then(|h| h.expire), + expire: header.expire, address: addr.to_owned(), }) } @@ -194,9 +194,17 @@ pub async fn generate_message( let abi = load_abi(abi, config).await?; - let expire_at = lifetime + timestamp.map(|ms| (ms / 1000) as u32).unwrap_or(now()); + let expire_at = { + let contract = abi.abi().unwrap(); + let headers = contract.header(); + if headers.iter().any(|param| param.name == "expire") { + Some(lifetime + timestamp.map(|ms| (ms / 1000) as u32).unwrap_or(now())) + } else { + None + } + }; let header = FunctionHeader { - expire: Some(expire_at), + expire: expire_at, time: timestamp, ..Default::default() }; @@ -207,7 +215,7 @@ pub async fn generate_message( abi, method, params, - Some(header), + header, keys, config.is_json, signature_id, diff --git a/src/run.rs b/src/run.rs index 9d3b0838..7bd68d66 100644 --- a/src/run.rs +++ b/src/run.rs @@ -168,7 +168,7 @@ async fn run( abi.clone(), &method, ¶ms, - Some(header), + header, None, config.is_json, None, diff --git a/tests/_network_test.rs b/tests/_network_test.rs index b6eb2b1e..ae9dea09 100644 --- a/tests/_network_test.rs +++ b/tests/_network_test.rs @@ -1,6 +1,6 @@ use assert_cmd::Command; mod common; -use common::{BIN_NAME, GIVER_V2_ABI, GIVER_V2_ADDR, GIVER_V2_KEY, NETWORK}; +use common::create::{BIN_NAME, GIVER_V2_ABI, GIVER_V2_ADDR, GIVER_V2_KEY, NETWORK}; #[test] fn test_network() -> Result<(), Box> { diff --git a/tests/browser.rs b/tests/browser.rs index 6539e31c..d8191bf1 100644 --- a/tests/browser.rs +++ b/tests/browser.rs @@ -6,7 +6,7 @@ use std::time::Duration; // use std::io::Write; use serde_json::json; mod common; -use common::{giver_v2, grep_address, BIN_NAME, NETWORK}; +use common::create::{giver_v2, grep_address, BIN_NAME, NETWORK}; fn get_debot_paths(name: &str) -> (String, String, String) { ( diff --git a/tests/common/mod.rs b/tests/common/mod.rs index be5f78f7..0837db6c 100644 --- a/tests/common/mod.rs +++ b/tests/common/mod.rs @@ -4,130 +4,136 @@ use predicates::prelude::*; use serde_json::{Map, Value}; use std::env; -pub const BIN_NAME: &str = "ever-cli"; -pub const GIVER_ADDR: &str = "0:841288ed3b55d9cdafa806807f02a0ae0c169aa5edfe88a789a6482429756a94"; -pub const GIVER_ABI: &str = "tests/samples/giver.abi.json"; -pub const GIVER_V2_ADDR: &str = - "0:ece57bcc6c530283becbbd8a3b24d3c5987cdddc3c8b7b33be6e4a6312490415"; -pub const GIVER_V2_ABI: &str = "tests/samples/giver_v2.abi.json"; -pub const GIVER_V2_KEY: &str = "tests/samples/giver_v2.key"; +#[allow(dead_code)] +pub mod create { + use super::*; -lazy_static! { - pub static ref NETWORK: String = - env::var("TON_NETWORK_ADDRESS").unwrap_or("http://127.0.0.1/".to_string()); -} + pub const BIN_NAME: &str = "ever-cli"; + pub const GIVER_ADDR: &str = + "0:841288ed3b55d9cdafa806807f02a0ae0c169aa5edfe88a789a6482429756a94"; + pub const GIVER_ABI: &str = "tests/samples/giver.abi.json"; + pub const GIVER_V2_ADDR: &str = + "0:ece57bcc6c530283becbbd8a3b24d3c5987cdddc3c8b7b33be6e4a6312490415"; + pub const GIVER_V2_ABI: &str = "tests/samples/giver_v2.abi.json"; + pub const GIVER_V2_KEY: &str = "tests/samples/giver_v2.key"; -pub fn get_config() -> Result, Box> { - let mut cmd = Command::cargo_bin(BIN_NAME)?; - let out = cmd - .arg("config") - .arg("--list") - .output() - .expect("Failed to get config."); + lazy_static! { + pub static ref NETWORK: String = + env::var("TON_NETWORK_ADDRESS").unwrap_or("http://127.0.0.1/".to_string()); + } - let mut out = String::from_utf8_lossy(&out.stdout).to_string(); - out.replace_range(..out.find('\n').unwrap_or(0), ""); - let parsed: Value = serde_json::from_str(&out)?; - let obj: Map = parsed.as_object().unwrap().clone(); - Ok(obj) -} + pub fn get_config() -> Result, Box> { + let mut cmd = Command::cargo_bin(BIN_NAME)?; + let out = cmd + .arg("config") + .arg("--list") + .output() + .expect("Failed to get config."); -pub fn set_config( - config: &[&str], - argument: &[&str], - config_path: Option<&str>, -) -> Result<(), Box> { - let mut cmd = Command::cargo_bin(BIN_NAME)?; - if config_path.is_some() { - cmd.arg("--config").arg(config_path.unwrap()); + let mut out = String::from_utf8_lossy(&out.stdout).to_string(); + out.replace_range(..out.find('\n').unwrap_or(0), ""); + let parsed: Value = serde_json::from_str(&out)?; + let obj: Map = parsed.as_object().unwrap().clone(); + Ok(obj) } - cmd.arg("config"); - for i in 0..config.len() { - cmd.arg(config[i]).arg(argument[i]); + + pub fn set_config( + config: &[&str], + argument: &[&str], + config_path: Option<&str>, + ) -> Result<(), Box> { + let mut cmd = Command::cargo_bin(BIN_NAME)?; + if config_path.is_some() { + cmd.arg("--config").arg(config_path.unwrap()); + } + cmd.arg("config"); + for i in 0..config.len() { + cmd.arg(config[i]).arg(argument[i]); + } + cmd.assert() + .success() + .stdout(predicate::str::contains("Succeeded")); + Ok(()) } - cmd.assert() - .success() - .stdout(predicate::str::contains("Succeeded")); - Ok(()) -} -pub fn giver(addr: &str) { - let mut cmd = Command::cargo_bin(BIN_NAME).unwrap(); - cmd.arg("call") - .arg("--abi") - .arg(GIVER_ABI) - .arg(GIVER_ADDR) - .arg("sendGrams") - .arg(format!(r#"{{"dest":"{}","amount":1000000000}}"#, addr)); - cmd.assert().success(); -} + pub fn giver(addr: &str) { + let mut cmd = Command::cargo_bin(BIN_NAME).unwrap(); + cmd.arg("call") + .arg("--abi") + .arg(GIVER_ABI) + .arg(GIVER_ADDR) + .arg("sendGrams") + .arg(format!(r#"{{"dest":"{}","amount":1000000000}}"#, addr)); + cmd.assert().success(); + } -pub fn giver_v2(addr: &str) { - let mut cmd = Command::cargo_bin(BIN_NAME).unwrap(); - cmd.arg("call") - .arg("--abi") - .arg(GIVER_V2_ABI) - .arg(GIVER_V2_ADDR) - .arg("--sign") - .arg(GIVER_V2_KEY) - .arg("sendTransaction") - .arg(format!( - r#"{{"dest":"{}","value":100000000000,"bounce":false}}"#, - addr - )); - cmd.assert().success(); -} + pub fn giver_v2(addr: &str) { + let mut cmd = Command::cargo_bin(BIN_NAME).unwrap(); + cmd.arg("call") + .arg("--abi") + .arg(GIVER_V2_ABI) + .arg(GIVER_V2_ADDR) + .arg("--sign") + .arg(GIVER_V2_KEY) + .arg("sendTransaction") + .arg(format!( + r#"{{"dest":"{}","value":100000000000,"bounce":false}}"#, + addr + )); + cmd.assert().success(); + } -pub fn grep_address(output: &[u8]) -> String { - let mut addr = String::from_utf8_lossy(output).to_string(); - addr.replace_range(..addr.find("0:").unwrap_or(0), ""); - addr.replace_range(addr.find("testnet").unwrap_or(addr.len()) - 1.., ""); - addr -} + pub fn grep_address(output: &[u8]) -> String { + let mut addr = String::from_utf8_lossy(output).to_string(); + addr.replace_range(..addr.find("0:").unwrap_or(0), ""); + addr.replace_range(addr.find("testnet").unwrap_or(addr.len()) - 1.., ""); + addr + } -pub fn grep_message_id(output: &[u8]) -> String { - let mut message_id = String::from_utf8_lossy(output).to_string(); - let index = message_id - .find("MessageId: ") - .map(|i| i + "MessageId: ".len()) - .unwrap_or(0); - message_id.replace_range(..index, ""); - if message_id.len() >= 64 { - message_id.replace_range(64.., ""); + pub fn grep_message_id(output: &[u8]) -> String { + let mut message_id = String::from_utf8_lossy(output).to_string(); + let index = message_id + .find("MessageId: ") + .map(|i| i + "MessageId: ".len()) + .unwrap_or(0); + message_id.replace_range(..index, ""); + if message_id.len() >= 64 { + message_id.replace_range(64.., ""); + } + message_id } - message_id -} -pub fn generate_key_and_address( - key_path: &str, - tvc_path: &str, - abi_path: &str, -) -> Result> { - let mut cmd = Command::cargo_bin(BIN_NAME)?; - let out = cmd - .arg("genaddr") - .arg("--genkey") - .arg(key_path) - .arg(tvc_path) - .arg("--abi") - .arg(abi_path) - .output() - .expect("Failed to generate address."); + pub fn generate_key_and_address( + key_path: &str, + tvc_path: &str, + abi_path: &str, + ) -> Result> { + let mut cmd = Command::cargo_bin(BIN_NAME)?; + let out = cmd + .arg("genaddr") + .arg("--genkey") + .arg(key_path) + .arg(tvc_path) + .arg("--abi") + .arg(abi_path) + .output() + .expect("Failed to generate address."); - Ok(grep_address(&out.stdout)) -} + Ok(grep_address(&out.stdout)) + } -pub fn generate_phrase_and_key(key_path: &str) -> Result> { - let mut cmd = Command::cargo_bin(BIN_NAME)?; - let out = cmd - .arg("genphrase") - .arg("--dump") - .arg(key_path) - .output() - .expect("Failed to generate a seed phrase."); - let mut seed = String::from_utf8_lossy(&out.stdout).to_string(); - seed.replace_range(..seed.find('"').unwrap_or(0) + 1, ""); - seed.replace_range(seed.find("Keypair").unwrap_or(seed.len()) - 2.., ""); + pub fn generate_phrase_and_key(key_path: &str) -> Result> { + let mut cmd = Command::cargo_bin(BIN_NAME)?; + let out = cmd + .arg("genphrase") + .arg("--dump") + .arg(key_path) + .output() + .expect("Failed to generate a seed phrase."); + let mut seed = String::from_utf8_lossy(&out.stdout).to_string(); + seed.replace_range(..seed.find('"').unwrap_or(0) + 1, ""); + seed.replace_range(seed.find("Keypair").unwrap_or(seed.len()) - 2.., ""); - Ok(seed) + Ok(seed) + } } diff --git a/tests/json_output_test.rs b/tests/json_output_test.rs index 0fe50a8a..110e35da 100644 --- a/tests/json_output_test.rs +++ b/tests/json_output_test.rs @@ -3,7 +3,7 @@ use serde_json::Value; use std::fs; mod common; -use common::{ +use common::create::{ generate_key_and_address, generate_phrase_and_key, giver_v2, BIN_NAME, GIVER_ABI, GIVER_ADDR, GIVER_V2_ADDR, GIVER_V2_KEY, NETWORK, }; diff --git a/tests/mnemonic.rs b/tests/mnemonic.rs index 6a94a570..299e43fb 100644 --- a/tests/mnemonic.rs +++ b/tests/mnemonic.rs @@ -3,7 +3,7 @@ use predicates::prelude::*; use std::process::Command; mod common; -use common::BIN_NAME; +use common::create::BIN_NAME; #[test] fn test_has_mnemonic_checks() -> Result<(), Box> { diff --git a/tests/test_cli.rs b/tests/test_cli.rs index 12a8f4b1..f07d4c7b 100644 --- a/tests/test_cli.rs +++ b/tests/test_cli.rs @@ -7,8 +7,8 @@ use std::thread::sleep; use std::time::{Duration, SystemTime}; mod common; -use crate::common::grep_message_id; -use common::{ +use crate::common::create::grep_message_id; +use common::create::{ generate_key_and_address, generate_phrase_and_key, giver_v2, grep_address, set_config, BIN_NAME, GIVER_ABI, GIVER_V2_ABI, GIVER_V2_ADDR, GIVER_V2_KEY, NETWORK, };