From 367e498264188f2e33b841b232ef60ed4632c1f9 Mon Sep 17 00:00:00 2001 From: Alexey Vavilin Date: Fri, 23 Dec 2022 11:54:07 +0300 Subject: [PATCH 1/8] Version 1.40.0 --- api/derive/Cargo.toml | 2 +- api/info/Cargo.toml | 2 +- api/test/Cargo.toml | 2 +- ton_client/Cargo.toml | 2 +- ton_sdk/Cargo.toml | 2 +- toncli/Cargo.toml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/api/derive/Cargo.toml b/api/derive/Cargo.toml index dca7e01fd..1ac7e83fc 100644 --- a/api/derive/Cargo.toml +++ b/api/derive/Cargo.toml @@ -2,7 +2,7 @@ authors = [ 'TON Labs LTD ' ] edition = '2018' name = 'api_derive' -version = '1.39.0' +version = '1.40.0' [dependencies] quote = '1.0' diff --git a/api/info/Cargo.toml b/api/info/Cargo.toml index a62f8d225..5642b3f83 100644 --- a/api/info/Cargo.toml +++ b/api/info/Cargo.toml @@ -2,7 +2,7 @@ authors = [ 'TON Labs LTD ' ] edition = '2018' name = 'api_info' -version = '1.39.0' +version = '1.40.0' [dependencies] serde = '1.0.115' diff --git a/api/test/Cargo.toml b/api/test/Cargo.toml index 5c695077c..19b85ed71 100644 --- a/api/test/Cargo.toml +++ b/api/test/Cargo.toml @@ -2,7 +2,7 @@ authors = [ 'TON Labs LTD ' ] edition = '2018' name = 'api_test' -version = '1.39.0' +version = '1.40.0' [dependencies] serde = '1.0.115' diff --git a/ton_client/Cargo.toml b/ton_client/Cargo.toml index d286b69e1..2207a8774 100644 --- a/ton_client/Cargo.toml +++ b/ton_client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = 'ton_client' -version = '1.39.0' +version = '1.40.0' authors = [ 'TON Labs LTD ' ] edition = '2018' license = 'Apache-2.0' diff --git a/ton_sdk/Cargo.toml b/ton_sdk/Cargo.toml index e7f32ad94..0bcfcd0a7 100644 --- a/ton_sdk/Cargo.toml +++ b/ton_sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = 'ton_sdk' -version = '1.39.0' +version = '1.40.0' edition = '2018' license = 'Apache-2.0' authors = [ 'TON Labs LTD ' ] diff --git a/toncli/Cargo.toml b/toncli/Cargo.toml index af83eb01e..4a2735458 100644 --- a/toncli/Cargo.toml +++ b/toncli/Cargo.toml @@ -9,7 +9,7 @@ license = 'Apache-2.0' name = 'toncli' readme = 'README.md' repository = 'https://github.com/tonlabs/ever-sdk' -version = '1.39.0' +version = '1.40.0' [dependencies] base64 = '0.13.0' From 8c15c92002107f292437a3aef1940d3ca1a8075c Mon Sep 17 00:00:00 2001 From: Alexey Vavilin Date: Fri, 23 Dec 2022 12:15:45 +0300 Subject: [PATCH 2/8] get_signature_data --- CHANGELOG.md | 6 + Cargo.lock | 194 +++++++++++------------ ton_client/Cargo.toml | 12 +- ton_client/src/abi/decode_message.rs | 50 +++++- ton_client/src/abi/mod.rs | 5 +- ton_client/src/abi/tests.rs | 14 +- ton_client/src/json_interface/modules.rs | 4 + ton_sdk/Cargo.toml | 8 +- 8 files changed, 179 insertions(+), 114 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2deeaa843..5b1d24e1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this project will be documented in this file. +## [1.40.0] – 2022-12-23 + +### New + +- `abi.get_signature_data` function that returns signature from message and hash to verify the signature + ## [1.39.0] – 2022-12-07 ### Improvement diff --git a/Cargo.lock b/Cargo.lock index 5b4c21e1b..169ce2c96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ "gimli", ] @@ -69,13 +69,13 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61" [[package]] name = "api_derive" -version = "1.39.0" +version = "1.40.0" dependencies = [ "api_info", "quote", @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "api_info" -version = "1.39.0" +version = "1.40.0" dependencies = [ "serde", "serde_derive", @@ -94,7 +94,7 @@ dependencies = [ [[package]] name = "api_test" -version = "1.39.0" +version = "1.40.0" dependencies = [ "api_derive", "api_info", @@ -137,9 +137,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6e93155431f3931513b243d371981bb2770112b370c82745a1d19d2f99364" +checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" dependencies = [ "proc-macro2", "quote", @@ -154,9 +154,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" -version = "0.3.66" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" dependencies = [ "addr2line", "cc", @@ -280,9 +280,9 @@ checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" [[package]] name = "cc" -version = "1.0.77" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" dependencies = [ "jobserver", ] @@ -366,9 +366,9 @@ dependencies = [ [[package]] name = "cookie" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "344adc371239ef32293cb1c4fe519592fcf21206c79c02854320afcdf3ab4917" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" dependencies = [ "percent-encoding", "time 0.3.17", @@ -501,9 +501,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.83" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf07d07d6531bfcdbe9b8b739b104610c6508dcc4d63b410585faf338241daf" +checksum = "5add3fc1717409d029b20c5b6903fc0c0b02fa6741d820054f4a2efa5e5816fd" dependencies = [ "cc", "cxxbridge-flags", @@ -513,9 +513,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.83" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2eb5b96ecdc99f72657332953d4d9c50135af1bac34277801cc3937906ebd39" +checksum = "b4c87959ba14bc6fbc61df77c3fcfe180fc32b93538c4f1031dd802ccb5f2ff0" dependencies = [ "cc", "codespan-reporting", @@ -528,15 +528,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.83" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac040a39517fd1674e0f32177648334b0f4074625b5588a64519804ba0553b12" +checksum = "69a3e162fde4e594ed2b07d0f83c6c67b745e7f28ce58c6df5e6b6bef99dfb59" [[package]] name = "cxxbridge-macro" -version = "1.0.83" +version = "1.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1362b0ddcfc4eb0a1f57b68bd77dd99f0e826958a96abd0ae9bd092e114ffed6" +checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6" dependencies = [ "proc-macro2", "quote", @@ -884,9 +884,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.2" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +checksum = "dec7af912d60cdbd3677c1af9352ebae6fb8394d165568a2234df0fa00f87793" [[package]] name = "graphql-parser" @@ -928,9 +928,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.19" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" dependencies = [ "libc", ] @@ -1159,9 +1159,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec947b7a4ce12e3b87e353abae7ce124d025b6c7d6c5aea5cc0bcf92e9510ded" +checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" [[package]] name = "itertools" @@ -1174,9 +1174,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" @@ -1215,9 +1215,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.138" +version = "0.2.139" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "libsecp256k1" @@ -1269,9 +1269,9 @@ dependencies = [ [[package]] name = "link-cplusplus" -version = "1.0.7" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" dependencies = [ "cc", ] @@ -1371,9 +1371,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.5.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", ] @@ -1503,9 +1503,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" dependencies = [ "hermit-abi", "libc", @@ -1513,9 +1513,9 @@ dependencies = [ [[package]] name = "object" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "239da7f290cfa979f43f85a8efeee9a8a76d0827c356d37f9d3d7254d6b537fb" dependencies = [ "memchr", ] @@ -1534,9 +1534,9 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openssl" -version = "0.10.44" +version = "0.10.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d971fd5722fec23977260f6e81aa67d2f22cadbdc2aa049f1022d9a3be1566" +checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" dependencies = [ "bitflags", "cfg-if 1.0.0", @@ -1566,9 +1566,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.79" +version = "0.9.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5454462c0eced1e97f2ec09036abc8da362e66802f66fd20f86854d9d8cbcbc4" +checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" dependencies = [ "autocfg", "cc", @@ -1776,15 +1776,15 @@ dependencies = [ [[package]] name = "proc-macro-hack" -version = "0.5.19" +version = "0.5.20+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" dependencies = [ "unicode-ident", ] @@ -1807,9 +1807,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" dependencies = [ "proc-macro2", ] @@ -1991,9 +1991,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "salsa20" @@ -2022,9 +2022,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "scrypt" @@ -2072,9 +2072,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.149" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256b9932320c590e707b94576e3cc1f7c9024d0ee6612dfbcf1cb106cbe8e055" +checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" dependencies = [ "serde_derive", ] @@ -2091,9 +2091,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.149" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4eae9b04cbffdfd550eb462ed33bc6a1b68c935127d008b27444d08380f94e4" +checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" dependencies = [ "proc-macro2", "quote", @@ -2102,9 +2102,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" dependencies = [ "indexmap", "itoa", @@ -2114,9 +2114,9 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" +checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" dependencies = [ "proc-macro2", "quote", @@ -2250,9 +2250,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.105" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" dependencies = [ "proc-macro2", "quote", @@ -2302,18 +2302,18 @@ checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -2483,8 +2483,8 @@ dependencies = [ [[package]] name = "ton_abi" -version = "2.3.45" -source = "git+https://github.com/tonlabs/ton-labs-abi.git?tag=2.3.45#2b78c0c81ce678f417968ade7b3424e885ca7c58" +version = "2.3.52" +source = "git+https://github.com/tonlabs/ton-labs-abi.git?tag=2.3.52#3c49c2b2b358dfa54bf2d6581246bfb3d5e301ba" dependencies = [ "base64 0.10.1", "byteorder", @@ -2500,13 +2500,13 @@ dependencies = [ "serde_json", "sha2 0.10.6", "ton_block", - "ton_types 1.12.4", + "ton_types 1.12.5", ] [[package]] name = "ton_api" -version = "0.2.160" -source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.160#5d34f0936038e35e53ca12cb889687a0461e8ea3" +version = "0.2.165" +source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.165#742b96d606a7355aae6a9e17d46c4bd6b6f09463" dependencies = [ "byteorder", "extfmt", @@ -2520,13 +2520,13 @@ dependencies = [ "serde_json", "ton_block", "ton_tl_codegen", - "ton_types 1.12.4", + "ton_types 1.12.5", ] [[package]] name = "ton_block" -version = "1.9.10" -source = "git+https://github.com/tonlabs/ton-labs-block.git?tag=1.9.10#c6cd729eb72994f743c7f246882fdddcbc8a0ba4" +version = "1.9.16" +source = "git+https://github.com/tonlabs/ton-labs-block.git?tag=1.9.16#74264000379aac8e4692e33273907c7c812f5bae" dependencies = [ "base64 0.13.1", "crc 3.0.0", @@ -2538,13 +2538,13 @@ dependencies = [ "num", "num-traits", "sha2 0.10.6", - "ton_types 1.12.4", + "ton_types 1.12.5", ] [[package]] name = "ton_block_json" -version = "0.7.75" -source = "git+https://github.com/tonlabs/ton-labs-block-json.git?tag=0.7.75#1f3552c8dfaf9c62d2b41719cca678323997e361" +version = "0.7.81" +source = "git+https://github.com/tonlabs/ton-labs-block-json.git?tag=0.7.81#7da15e420f20203cac04727efb04872d46d78417" dependencies = [ "base64 0.13.1", "failure", @@ -2556,12 +2556,12 @@ dependencies = [ "serde_json", "ton_api", "ton_block", - "ton_types 1.12.4", + "ton_types 1.12.5", ] [[package]] name = "ton_client" -version = "1.39.0" +version = "1.40.0" dependencies = [ "aes", "api_derive", @@ -2615,7 +2615,7 @@ dependencies = [ "ton_block_json", "ton_executor", "ton_sdk", - "ton_types 1.12.4", + "ton_types 1.12.5", "ton_vm", "wasm-bindgen", "wasm-bindgen-futures", @@ -2626,20 +2626,20 @@ dependencies = [ [[package]] name = "ton_executor" -version = "1.15.139" -source = "git+https://github.com/tonlabs/ton-labs-executor.git?tag=1.15.139#c0d93736e74cd4c869f825ccbf1e3b7e0bd215c1" +version = "1.15.148" +source = "git+https://github.com/tonlabs/ton-labs-executor.git?tag=1.15.148#0ae2c5ce971e6ae6f97e5b27c9163a31495dd854" dependencies = [ "failure", "lazy_static", "log", "ton_block", - "ton_types 1.12.4", + "ton_types 1.12.5", "ton_vm", ] [[package]] name = "ton_sdk" -version = "1.39.0" +version = "1.40.0" dependencies = [ "api_derive", "api_info", @@ -2658,14 +2658,14 @@ dependencies = [ "sha2 0.9.9", "ton_abi", "ton_block", - "ton_types 1.12.4", + "ton_types 1.12.5", "ton_vm", ] [[package]] name = "ton_tl_codegen" version = "0.0.2" -source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.160#5d34f0936038e35e53ca12cb889687a0461e8ea3" +source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.165#742b96d606a7355aae6a9e17d46c4bd6b6f09463" dependencies = [ "crc 1.8.1", "failure", @@ -2699,8 +2699,8 @@ dependencies = [ [[package]] name = "ton_types" -version = "1.12.4" -source = "git+https://github.com/tonlabs/ton-labs-types.git?tag=1.12.4#71dbffc60d0d4cdc23d181dfbfb70701b06efe80" +version = "1.12.5" +source = "git+https://github.com/tonlabs/ton-labs-types.git?tag=1.12.5#fde26ee51b96462b8b61f339dccbfed5b482ab29" dependencies = [ "base64 0.13.1", "crc 1.8.1", @@ -2719,8 +2719,8 @@ dependencies = [ [[package]] name = "ton_vm" -version = "1.8.79" -source = "git+https://github.com/tonlabs/ton-labs-vm.git?tag=1.8.79#2c3cb7469e358288bff4462e92ed30937af0272b" +version = "1.8.92" +source = "git+https://github.com/tonlabs/ton-labs-vm.git?tag=1.8.92#6267376cab849da92f1713e97f5d9e6b3c81309a" dependencies = [ "diffy", "ed25519", @@ -2735,13 +2735,13 @@ dependencies = [ "sha2 0.10.6", "similar", "ton_block", - "ton_types 1.12.4", + "ton_types 1.12.5", "zstd", ] [[package]] name = "toncli" -version = "1.39.0" +version = "1.40.0" dependencies = [ "api_info", "assert_cmd", @@ -2837,9 +2837,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" diff --git a/ton_client/Cargo.toml b/ton_client/Cargo.toml index 2207a8774..ab4552d93 100644 --- a/ton_client/Cargo.toml +++ b/ton_client/Cargo.toml @@ -20,12 +20,12 @@ api_derive = { path = '../api/derive' } api_info = { path = '../api/info' } ton_sdk = { default-features = false, path = '../ton_sdk' } -ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.45' } -ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.10' } -ton_block_json = { git = 'https://github.com/tonlabs/ton-labs-block-json.git', tag = '0.7.75' } -ton_executor = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-executor.git', tag = '1.15.139' } -ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.4' } -ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.79' } +ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.52' } +ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.16' } +ton_block_json = { git = 'https://github.com/tonlabs/ton-labs-block-json.git', tag = '0.7.81' } +ton_executor = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-executor.git', tag = '1.15.148' } +ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.5' } +ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.92' } lockfree = { git = 'https://github.com/tonlabs/lockfree.git', package = 'lockfree' } sodalite = { features = [ 'rand' ], git = 'https://github.com/tonlabs/sodalite.git' } diff --git a/ton_client/src/abi/decode_message.rs b/ton_client/src/abi/decode_message.rs index 6021364e3..93a0c66dd 100644 --- a/ton_client/src/abi/decode_message.rs +++ b/ton_client/src/abi/decode_message.rs @@ -159,8 +159,7 @@ pub async fn decode_message_body( context: Arc, params: ParamsOfDecodeMessageBody, ) -> ClientResult { - let abi = params.abi.json_string()?; - let abi = AbiContract::load(abi.as_bytes()).map_err(|x| Error::invalid_json(x))?; + let abi = params.abi.abi()?; let (_, body) = deserialize_cell_from_boc(&context, ¶ms.body, "message body").await?; let body = slice_from_cell(body)?; decode_body(abi, body, params.is_internal, params.allow_partial, params.function_name, params.data_layout) @@ -170,8 +169,7 @@ async fn prepare_decode( context: &ClientContext, params: &ParamsOfDecodeMessage, ) -> ClientResult<(AbiContract, ton_block::Message)> { - let abi = params.abi.json_string()?; - let abi = AbiContract::load(abi.as_bytes()).map_err(|x| Error::invalid_json(x))?; + let abi = params.abi.abi()?; let message = deserialize_object_from_boc(context, ¶ms.message, "message") .await .map_err(|x| Error::invalid_message_for_decode(x))?; @@ -327,4 +325,48 @@ fn find_abi_function<'a>(abi: &'a AbiContract, name: &str) -> ClientResult, + params: ParamsOfGetSignatureData, +) -> ClientResult { + let abi = params.abi.abi()?; + let message: ton_block::Message = deserialize_object_from_boc(&context, ¶ms.message, "message").await?.object; + if let Some(body) = message.body() { + let address = message.dst() + .ok_or_else(|| Error::invalid_message_for_decode( + "Message has no destination address", + ))?; + let (signature, hash) = abi.get_signature_data(body, Some(address)) + .map_err(|err| Error::invalid_message_for_decode(err))?; + Ok(ResultOfGetSignatureData { + signature: hex::encode(&signature), + hash: base64::encode(&hash), + }) + } else { + Err(Error::invalid_message_for_decode( + "The message body is empty", + )) + } } \ No newline at end of file diff --git a/ton_client/src/abi/mod.rs b/ton_client/src/abi/mod.rs index 1f797f0b2..89f114ebe 100644 --- a/ton_client/src/abi/mod.rs +++ b/ton_client/src/abi/mod.rs @@ -33,8 +33,9 @@ use serde::{Deserialize, Deserializer}; pub use decode_boc::{decode_boc, ParamsOfDecodeBoc, ResultOfDecodeBoc}; pub use decode_data::{decode_account_data, ParamsOfDecodeAccountData, ResultOfDecodeAccountData}; pub use decode_message::{ - decode_message, decode_message_body, DecodedMessageBody, MessageBodyType, - ParamsOfDecodeMessage, ParamsOfDecodeMessageBody, DataLayout + decode_message, decode_message_body, get_signature_data, DecodedMessageBody, MessageBodyType, + ParamsOfDecodeMessage, ParamsOfDecodeMessageBody, DataLayout, ParamsOfGetSignatureData, + ResultOfGetSignatureData }; pub use encode_account::{ encode_account, ParamsOfEncodeAccount, ResultOfEncodeAccount, StateInitParams, StateInitSource, diff --git a/ton_client/src/abi/tests.rs b/ton_client/src/abi/tests.rs index 6e721ecfc..0695028f8 100644 --- a/ton_client/src/abi/tests.rs +++ b/ton_client/src/abi/tests.rs @@ -208,7 +208,7 @@ fn encode_v2() { assert_eq!(unsigned_body_encoded.body, unsigned_body); assert_eq!(unsigned_body_encoded.data_to_sign, unsigned.data_to_sign); - let signature = client.sign_detached(&unsigned.data_to_sign.unwrap(), &keys); + let signature = client.sign_detached(unsigned.data_to_sign.as_deref().unwrap(), &keys); assert_eq!(signature, "5bbfb7f184f2cb5f019400b9cd497eeaa41f3d5885619e9f7d4fab8dd695f4b3a02159a1422996c1dd7d1be67898bc79c6adba6c65a18101ac5f0a2a2bb8910b"); let signed: ResultOfAttachSignature = client .request( @@ -223,6 +223,18 @@ fn encode_v2() { .unwrap(); assert_eq!(signed.message, signed_message); + let sign: ResultOfGetSignatureData = client + .request( + "abi.get_signature_data", + ParamsOfGetSignatureData { + abi: abi.clone(), + message: signed.message.clone(), + }, + ) + .unwrap(); + assert_eq!(sign.signature, signature); + assert_eq!(sign.hash, unsigned.data_to_sign.as_deref().unwrap()); + let signed_body = extract_body(signed.message); let signed: ResultOfAttachSignatureToMessageBody = client diff --git a/ton_client/src/json_interface/modules.rs b/ton_client/src/json_interface/modules.rs index de7952ccf..780136d1a 100644 --- a/ton_client/src/json_interface/modules.rs +++ b/ton_client/src/json_interface/modules.rs @@ -382,6 +382,10 @@ fn register_abi(handlers: &mut RuntimeHandlers) { crate::abi::calc_function_id, crate::abi::function_id::calc_function_id_api, ); + module.register_async_fn( + crate::abi::get_signature_data, + crate::abi::decode_message::get_signature_data_api, + ); module.register(); } diff --git a/ton_sdk/Cargo.toml b/ton_sdk/Cargo.toml index 0bcfcd0a7..4bf25c429 100644 --- a/ton_sdk/Cargo.toml +++ b/ton_sdk/Cargo.toml @@ -6,10 +6,10 @@ license = 'Apache-2.0' authors = [ 'TON Labs LTD ' ] [dependencies] -ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.45' } -ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.10' } -ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.4' } -ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.79' } +ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.52' } +ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.16' } +ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.5' } +ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.92' } api_info = { path = '../api/info' } api_derive = { path = '../api/derive' } From 42f83851d79adf65f37d8d20f659df1d07bd3a29 Mon Sep 17 00:00:00 2001 From: Alexey Vavilin Date: Tue, 27 Dec 2022 18:07:01 +0300 Subject: [PATCH 3/8] Expand localhost:with http protocol --- CHANGELOG.md | 5 +++++ ton_client/src/net/endpoint.rs | 20 +++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b1d24e1b..326651066 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ All notable changes to this project will be documented in this file. - `abi.get_signature_data` function that returns signature from message and hash to verify the signature +### Improvement + +- local endpoints with port specified are expanded with `http` protocol instead of `https` (e.g. +`localhost:8033` in expanded to `http://localhost:8033/graphql`) + ## [1.39.0] – 2022-12-07 ### Improvement diff --git a/ton_client/src/net/endpoint.rs b/ton_client/src/net/endpoint.rs index c9f8d0b2a..16fd85e0c 100644 --- a/ton_client/src/net/endpoint.rs +++ b/ton_client/src/net/endpoint.rs @@ -72,8 +72,9 @@ impl Endpoint { fn expand_address(base_url: &str) -> String { let mut base_url = base_url.trim_end_matches("/").to_lowercase(); if !base_url.starts_with(HTTP_PROTOCOL) && !base_url.starts_with(HTTPS_PROTOCOL) { + let stripped_url = base_url.split_once(&['/', ':']).map(|x| x.0).unwrap_or(&base_url); let protocol = - if base_url == "localhost" || base_url == "127.0.0.1" || base_url == "0.0.0.0" { + if stripped_url == "localhost" || stripped_url == "127.0.0.1" || stripped_url == "0.0.0.0" { HTTP_PROTOCOL } else { HTTPS_PROTOCOL @@ -227,3 +228,20 @@ impl Endpoint { self.remp_enabled.load(Ordering::Relaxed) } } + +#[test] +fn test_expand_address() { + assert_eq!(Endpoint::expand_address("localhost"), "http://localhost/graphql"); + assert_eq!(Endpoint::expand_address("localhost:8033"), "http://localhost:8033/graphql"); + assert_eq!(Endpoint::expand_address("0.0.0.0:8033/graphql"), "http://0.0.0.0:8033/graphql"); + assert_eq!(Endpoint::expand_address("127.0.0.1/graphql"), "http://127.0.0.1/graphql"); + assert_eq!(Endpoint::expand_address("http://localhost/graphql"), "http://localhost/graphql"); + assert_eq!(Endpoint::expand_address("https://localhost"), "https://localhost/graphql"); + + assert_eq!(Endpoint::expand_address("devnet.evercloud.dev"), "https://devnet.evercloud.dev/graphql"); + assert_eq!(Endpoint::expand_address("devnet.evercloud.dev:8033"), "https://devnet.evercloud.dev:8033/graphql"); + assert_eq!(Endpoint::expand_address("devnet.evercloud.dev:8033/graphql"), "https://devnet.evercloud.dev:8033/graphql"); + assert_eq!(Endpoint::expand_address("devnet.evercloud.dev/graphql"), "https://devnet.evercloud.dev/graphql"); + assert_eq!(Endpoint::expand_address("http://devnet.evercloud.dev/graphql"), "http://devnet.evercloud.dev/graphql"); + assert_eq!(Endpoint::expand_address("https://devnet.evercloud.dev"), "https://devnet.evercloud.dev/graphql"); +} \ No newline at end of file From 1950fe381b40405b035654bd67a13b4f5087a1c0 Mon Sep 17 00:00:00 2001 From: Ivan Suvorov Date: Wed, 11 Jan 2023 13:52:34 +0300 Subject: [PATCH 4/8] Up versions --- Cargo.lock | 199 ++++++++++++++--------------------- ton_client/Cargo.toml | 12 +-- ton_client/src/abi/tests.rs | 2 +- ton_client/src/boc/encode.rs | 10 +- ton_client/src/boc/tests.rs | 2 +- ton_sdk/Cargo.toml | 8 +- 6 files changed, 97 insertions(+), 136 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 169ce2c96..8dacb269a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -105,9 +105,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "983cd8b9d4b02a6dc6ffa557262eb5858a27a0038ffffe21a0f133eaa819a164" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" [[package]] name = "arrayref" @@ -129,7 +129,7 @@ checksum = "c98233c6673d8601ab23e77eb38f999c51100d46c5703b17288c57fddf3a1ffe" dependencies = [ "bstr", "doc-comment", - "predicates 2.1.4", + "predicates 2.1.5", "predicates-core", "predicates-tree", "wait-timeout", @@ -137,9 +137,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" +checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" dependencies = [ "proc-macro2", "quote", @@ -436,9 +436,9 @@ dependencies = [ [[package]] name = "crc-catalog" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" +checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484" [[package]] name = "crunchy" @@ -501,9 +501,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5add3fc1717409d029b20c5b6903fc0c0b02fa6741d820054f4a2efa5e5816fd" +checksum = "51d1075c37807dcf850c379432f0df05ba52cc30f279c5cfc43cc221ce7f8579" dependencies = [ "cc", "cxxbridge-flags", @@ -513,9 +513,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c87959ba14bc6fbc61df77c3fcfe180fc32b93538c4f1031dd802ccb5f2ff0" +checksum = "5044281f61b27bc598f2f6647d480aed48d2bf52d6eb0b627d84c0361b17aa70" dependencies = [ "cc", "codespan-reporting", @@ -528,15 +528,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69a3e162fde4e594ed2b07d0f83c6c67b745e7f28ce58c6df5e6b6bef99dfb59" +checksum = "61b50bc93ba22c27b0d31128d2d130a0a6b3d267ae27ef7e4fae2167dfe8781c" [[package]] name = "cxxbridge-macro" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6" +checksum = "39e61fda7e62115119469c7b3591fd913ecca96fb766cfd3f2e2502ab7bc87a5" dependencies = [ "proc-macro2", "quote", @@ -1159,9 +1159,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "itertools" @@ -1387,7 +1387,7 @@ dependencies = [ "libc", "log", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys", ] [[package]] @@ -1513,18 +1513,18 @@ dependencies = [ [[package]] name = "object" -version = "0.30.0" +version = "0.30.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239da7f290cfa979f43f85a8efeee9a8a76d0827c356d37f9d3d7254d6b537fb" +checksum = "2b8c786513eb403643f2a88c244c2aaa270ef2153f55094587d0c48a3cf22a83" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" [[package]] name = "opaque-debug" @@ -1621,7 +1621,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-sys", ] [[package]] @@ -1650,9 +1650,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8bed3549e0f9b0a2a78bf7c0018237a2cdf085eecbbc048e52612438e4e9d0" +checksum = "0f6e86fb9e7026527a0d46bc308b841d73170ef8f443e1807f6ef88526a816d4" dependencies = [ "thiserror", "ucd-trie", @@ -1660,9 +1660,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc078600d06ff90d4ed238f0119d84ab5d43dbaad278b0e33a8820293b32344" +checksum = "96504449aa860c8dcde14f9fba5c58dc6658688ca1fe363589d6327b8662c603" dependencies = [ "pest", "pest_generator", @@ -1670,9 +1670,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a1af60b1c4148bb269006a750cff8e2ea36aff34d2d96cf7be0b14d1bed23c" +checksum = "798e0220d1111ae63d66cb66a5dcb3fc2d986d520b98e49e1852bfdb11d7c5e7" dependencies = [ "pest", "pest_meta", @@ -1683,9 +1683,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fec8605d59fc2ae0c6c1aefc0c7c7a9769732017c0ce07f7a9cfffa7b4404f20" +checksum = "984298b75898e30a843e278a9f2452c31e349a073a0ce6fd950a12a74464e065" dependencies = [ "once_cell", "pest", @@ -1737,9 +1737,9 @@ dependencies = [ [[package]] name = "predicates" -version = "2.1.4" +version = "2.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54fc5dc63ed3bbf19494623db4f3af16842c0d975818e469022d09e53f0aa05" +checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" dependencies = [ "difflib", "itertools", @@ -1907,9 +1907,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -2006,12 +2006,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "windows-sys", ] [[package]] @@ -2072,9 +2071,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.151" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] @@ -2091,9 +2090,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.151" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", @@ -2405,9 +2404,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.23.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" +checksum = "1d9f76183f91ecfb55e1d7d5602bd1d979e38a3a522fe900241cf195624d67ae" dependencies = [ "autocfg", "bytes", @@ -2418,7 +2417,7 @@ dependencies = [ "pin-project-lite", "socket2", "tokio-macros", - "windows-sys 0.42.0", + "windows-sys", ] [[package]] @@ -2483,8 +2482,8 @@ dependencies = [ [[package]] name = "ton_abi" -version = "2.3.52" -source = "git+https://github.com/tonlabs/ton-labs-abi.git?tag=2.3.52#3c49c2b2b358dfa54bf2d6581246bfb3d5e301ba" +version = "2.3.54" +source = "git+https://github.com/tonlabs/ton-labs-abi.git?tag=2.3.54#9f74516f372373a1800e164e42b6912ee0d411e5" dependencies = [ "base64 0.10.1", "byteorder", @@ -2500,13 +2499,13 @@ dependencies = [ "serde_json", "sha2 0.10.6", "ton_block", - "ton_types 1.12.5", + "ton_types 1.12.6", ] [[package]] name = "ton_api" -version = "0.2.165" -source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.165#742b96d606a7355aae6a9e17d46c4bd6b6f09463" +version = "0.2.167" +source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.167#428777b6540f47e44bfe7c7330aa0328db3a413b" dependencies = [ "byteorder", "extfmt", @@ -2520,13 +2519,13 @@ dependencies = [ "serde_json", "ton_block", "ton_tl_codegen", - "ton_types 1.12.5", + "ton_types 1.12.6", ] [[package]] name = "ton_block" -version = "1.9.16" -source = "git+https://github.com/tonlabs/ton-labs-block.git?tag=1.9.16#74264000379aac8e4692e33273907c7c812f5bae" +version = "1.9.18" +source = "git+https://github.com/tonlabs/ton-labs-block.git?tag=1.9.18#92e30b957192b566b81f622da337f0705a5fc65a" dependencies = [ "base64 0.13.1", "crc 3.0.0", @@ -2538,13 +2537,13 @@ dependencies = [ "num", "num-traits", "sha2 0.10.6", - "ton_types 1.12.5", + "ton_types 1.12.6", ] [[package]] name = "ton_block_json" -version = "0.7.81" -source = "git+https://github.com/tonlabs/ton-labs-block-json.git?tag=0.7.81#7da15e420f20203cac04727efb04872d46d78417" +version = "0.7.83" +source = "git+https://github.com/tonlabs/ton-labs-block-json.git?tag=0.7.83#ad93ae1a98b77bd14ca7b19f503bf3907461e151" dependencies = [ "base64 0.13.1", "failure", @@ -2556,7 +2555,7 @@ dependencies = [ "serde_json", "ton_api", "ton_block", - "ton_types 1.12.5", + "ton_types 1.12.6", ] [[package]] @@ -2615,7 +2614,7 @@ dependencies = [ "ton_block_json", "ton_executor", "ton_sdk", - "ton_types 1.12.5", + "ton_types 1.12.6", "ton_vm", "wasm-bindgen", "wasm-bindgen-futures", @@ -2626,14 +2625,14 @@ dependencies = [ [[package]] name = "ton_executor" -version = "1.15.148" -source = "git+https://github.com/tonlabs/ton-labs-executor.git?tag=1.15.148#0ae2c5ce971e6ae6f97e5b27c9163a31495dd854" +version = "1.15.154" +source = "git+https://github.com/tonlabs/ton-labs-executor.git?tag=1.15.154#39891cf0c01ddc298a6b7e4c470ea1326e53c679" dependencies = [ "failure", "lazy_static", "log", "ton_block", - "ton_types 1.12.5", + "ton_types 1.12.6", "ton_vm", ] @@ -2658,14 +2657,14 @@ dependencies = [ "sha2 0.9.9", "ton_abi", "ton_block", - "ton_types 1.12.5", + "ton_types 1.12.6", "ton_vm", ] [[package]] name = "ton_tl_codegen" version = "0.0.2" -source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.165#742b96d606a7355aae6a9e17d46c4bd6b6f09463" +source = "git+https://github.com/tonlabs/ton-labs-tl.git?tag=0.2.167#428777b6540f47e44bfe7c7330aa0328db3a413b" dependencies = [ "crc 1.8.1", "failure", @@ -2699,8 +2698,8 @@ dependencies = [ [[package]] name = "ton_types" -version = "1.12.5" -source = "git+https://github.com/tonlabs/ton-labs-types.git?tag=1.12.5#fde26ee51b96462b8b61f339dccbfed5b482ab29" +version = "1.12.6" +source = "git+https://github.com/tonlabs/ton-labs-types.git?tag=1.12.6#8e218813db6bacc138dbbec7ab4ccbf84220da31" dependencies = [ "base64 0.13.1", "crc 1.8.1", @@ -2719,8 +2718,8 @@ dependencies = [ [[package]] name = "ton_vm" -version = "1.8.92" -source = "git+https://github.com/tonlabs/ton-labs-vm.git?tag=1.8.92#6267376cab849da92f1713e97f5d9e6b3c81309a" +version = "1.8.96" +source = "git+https://github.com/tonlabs/ton-labs-vm.git?tag=1.8.96#f95aa63eac1e1682dcc81fcdabe352415ffdfde7" dependencies = [ "diffy", "ed25519", @@ -2735,7 +2734,7 @@ dependencies = [ "sha2 0.10.6", "similar", "ton_block", - "ton_types 1.12.5", + "ton_types 1.12.6", "zstd", ] @@ -2784,9 +2783,9 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" @@ -3082,19 +3081,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows-sys" version = "0.42.0" @@ -3102,12 +3088,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_x86_64_msvc", ] [[package]] @@ -3116,48 +3102,24 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - [[package]] name = "windows_aarch64_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - [[package]] name = "windows_i686_gnu" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - [[package]] name = "windows_i686_msvc" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - [[package]] name = "windows_x86_64_gnu" version = "0.42.0" @@ -3170,12 +3132,6 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - [[package]] name = "windows_x86_64_msvc" version = "0.42.0" @@ -3248,10 +3204,11 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.4+zstd.1.5.2" +version = "2.0.5+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa202f2ef00074143e219d15b62ffc317d17cc33909feac471c044087cad7b0" +checksum = "edc50ffce891ad571e9f9afe5039c4837bede781ac4bb13052ed7ae695518596" dependencies = [ "cc", "libc", + "pkg-config", ] diff --git a/ton_client/Cargo.toml b/ton_client/Cargo.toml index ab4552d93..11a008fbc 100644 --- a/ton_client/Cargo.toml +++ b/ton_client/Cargo.toml @@ -20,12 +20,12 @@ api_derive = { path = '../api/derive' } api_info = { path = '../api/info' } ton_sdk = { default-features = false, path = '../ton_sdk' } -ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.52' } -ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.16' } -ton_block_json = { git = 'https://github.com/tonlabs/ton-labs-block-json.git', tag = '0.7.81' } -ton_executor = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-executor.git', tag = '1.15.148' } -ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.5' } -ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.92' } +ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.54' } +ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.18' } +ton_block_json = { git = 'https://github.com/tonlabs/ton-labs-block-json.git', tag = '0.7.83' } +ton_executor = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-executor.git', tag = '1.15.154' } +ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.6' } +ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.96' } lockfree = { git = 'https://github.com/tonlabs/lockfree.git', package = 'lockfree' } sodalite = { features = [ 'rand' ], git = 'https://github.com/tonlabs/sodalite.git' } diff --git a/ton_client/src/abi/tests.rs b/ton_client/src/abi/tests.rs index 0695028f8..8f669c4c0 100644 --- a/ton_client/src/abi/tests.rs +++ b/ton_client/src/abi/tests.rs @@ -1075,7 +1075,7 @@ fn test_init_data() { fn test_decode_boc() { let mut builder = BuilderData::new(); builder.append_u32(0).unwrap(); - builder.append_reference(123u64.write_to_new_cell().unwrap()); + builder.checked_append_reference(123u64.write_to_new_cell().unwrap().into_cell().unwrap()).unwrap(); builder.append_bit_one().unwrap(); let boc = serialize_cell_to_base64(&builder.into_cell().unwrap(), "").unwrap(); diff --git a/ton_client/src/boc/encode.rs b/ton_client/src/boc/encode.rs index a346d4906..3ae6c0e75 100644 --- a/ton_client/src/boc/encode.rs +++ b/ton_client/src/boc/encode.rs @@ -108,7 +108,9 @@ pub async fn encode_boc( BuildResult::Complete(cell) => { if let Some(prev) = stack.pop() { builder = prev; - builder.result.append_reference_cell(cell); + builder.result.checked_append_reference(cell).map_err( + |err| Error::serialization_error(err, "encoded cell"), + )?; } else { return Ok(ResultOfEncodeBoc { boc: serialize_cell_to_boc(&context, cell, "encoded cell", params.boc_cache) @@ -156,11 +158,13 @@ impl<'a> Builder<'a> { append_bitstring(&mut self.result, &value)?; } BuilderOp::CellBoc { boc } => { - self.result.append_reference_cell( + self.result.checked_append_reference( deserialize_cell_from_boc(context, boc, "CellBoc") .await? .1, - ); + ).map_err( + |err| Error::serialization_error(err, "encode_boc"), + )?; } BuilderOp::Cell { ref builder } => { return Ok(BuildResult::Nested { diff --git a/ton_client/src/boc/tests.rs b/ton_client/src/boc/tests.rs index d52310794..3af0ba890 100644 --- a/ton_client/src/boc/tests.rs +++ b/ton_client/src/boc/tests.rs @@ -118,7 +118,7 @@ async fn test_encode_boc() { .append_builder(&burner_address) .unwrap(); let inner_cell = inner_builder.into_cell().unwrap(); - builder.append_reference_cell(inner_cell.clone()); + builder.checked_append_reference(inner_cell.clone()).unwrap(); let cell = builder.into_cell().unwrap(); let boc = serialize_cell_to_base64(&cell, "cell").unwrap(); diff --git a/ton_sdk/Cargo.toml b/ton_sdk/Cargo.toml index 4bf25c429..af1f4a5ed 100644 --- a/ton_sdk/Cargo.toml +++ b/ton_sdk/Cargo.toml @@ -6,10 +6,10 @@ license = 'Apache-2.0' authors = [ 'TON Labs LTD ' ] [dependencies] -ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.52' } -ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.16' } -ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.5' } -ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.92' } +ton_abi = { git = 'https://github.com/tonlabs/ton-labs-abi.git', tag = '2.3.54' } +ton_block = { git = 'https://github.com/tonlabs/ton-labs-block.git', tag = '1.9.18' } +ton_types = { git = 'https://github.com/tonlabs/ton-labs-types.git', tag = '1.12.6' } +ton_vm = { default-features = false, git = 'https://github.com/tonlabs/ton-labs-vm.git', tag = '1.8.96' } api_info = { path = '../api/info' } api_derive = { path = '../api/derive' } From 56f2d8d8a569125233118e1018d4ed73187a486e Mon Sep 17 00:00:00 2001 From: Sergei Voronezhskii Date: Wed, 11 Jan 2023 18:02:06 +0300 Subject: [PATCH 5/8] SDK-4305: fix build arm64 filename --- ton_client/build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ton_client/build.js b/ton_client/build.js index c2ad7407d..776c526ae 100644 --- a/ton_client/build.js +++ b/ton_client/build.js @@ -26,7 +26,7 @@ main(async () => { }, darwin: { x64: [['lib{}.dylib', '']], - arm64: [['lib{}.dylib', '_arm64']] + arm64: [['lib{}.dylib', '']] }, }; for (const [src, dstSuffix] of platformNames[platform][arch] || []) { From 73a54ddee28b543a3c44446f7d7a157ccd5e42df Mon Sep 17 00:00:00 2001 From: Sergei Voronezhskii Date: Wed, 11 Jan 2023 19:26:04 +0300 Subject: [PATCH 6/8] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 326651066..1fc341ad0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. -## [1.40.0] – 2022-12-23 +## [1.40.0] – 2023-01-11 ### New From d2229214b9ae3f4c506a1447a5b2cbdf64bb0e43 Mon Sep 17 00:00:00 2001 From: tonjen Date: Wed, 11 Jan 2023 16:56:56 +0000 Subject: [PATCH 7/8] Update docs --- docs/reference/types-and-methods/mod_abi.md | 58 ++++++++++++ .../reference/types-and-methods/mod_client.md | 4 +- docs/reference/types-and-methods/modules.md | 2 + tools/api.json | 88 ++++++++++++++++++- 4 files changed, 150 insertions(+), 2 deletions(-) diff --git a/docs/reference/types-and-methods/mod_abi.md b/docs/reference/types-and-methods/mod_abi.md index 580e876cf..8bf3a3f90 100644 --- a/docs/reference/types-and-methods/mod_abi.md +++ b/docs/reference/types-and-methods/mod_abi.md @@ -34,6 +34,8 @@ Provides message encoding and decoding according to the ABI specification. [calc_function_id](mod\_abi.md#calc_function_id) – Calculates contract function ID by contract ABI +[get_signature_data](mod\_abi.md#get_signature_data) – Extracts signature from message body and calculates hash to verify the signature + ## Types [AbiErrorCode](mod\_abi.md#abierrorcode) @@ -151,6 +153,10 @@ Provides message encoding and decoding according to the ABI specification. [ResultOfCalcFunctionId](mod\_abi.md#resultofcalcfunctionid) +[ParamsOfGetSignatureData](mod\_abi.md#paramsofgetsignaturedata) + +[ResultOfGetSignatureData](mod\_abi.md#resultofgetsignaturedata) + # Functions ## encode_message_body @@ -771,6 +777,36 @@ function calc_function_id( - `function_id`: _number_ – Contract function ID +## get_signature_data + +Extracts signature from message body and calculates hash to verify the signature + +```ts +type ParamsOfGetSignatureData = { + abi: Abi, + message: string +} + +type ResultOfGetSignatureData = { + signature: string, + hash: string +} + +function get_signature_data( + params: ParamsOfGetSignatureData, +): Promise; +``` +### Parameters +- `abi`: _[Abi](mod\_abi.md#abi)_ – Contract ABI used to decode. +- `message`: _string_ – Message BOC encoded in `base64`. + + +### Result + +- `signature`: _string_ – Signature from the message in `hex`. +- `hash`: _string_ – Hash to verify the signature in `base64`. + + # Types ## AbiErrorCode ```ts @@ -1718,3 +1754,25 @@ type ResultOfCalcFunctionId = { - `function_id`: _number_ – Contract function ID +## ParamsOfGetSignatureData +```ts +type ParamsOfGetSignatureData = { + abi: Abi, + message: string +} +``` +- `abi`: _[Abi](mod\_abi.md#abi)_ – Contract ABI used to decode. +- `message`: _string_ – Message BOC encoded in `base64`. + + +## ResultOfGetSignatureData +```ts +type ResultOfGetSignatureData = { + signature: string, + hash: string +} +``` +- `signature`: _string_ – Signature from the message in `hex`. +- `hash`: _string_ – Hash to verify the signature in `base64`. + + diff --git a/docs/reference/types-and-methods/mod_client.md b/docs/reference/types-and-methods/mod_client.md index 3fb6451d6..34d323c4c 100644 --- a/docs/reference/types-and-methods/mod_client.md +++ b/docs/reference/types-and-methods/mod_client.md @@ -194,7 +194,8 @@ enum ClientErrorCode { CanNotParseNumber = 32, InternalError = 33, InvalidHandle = 34, - LocalStorageError = 35 + LocalStorageError = 35, + InvalidData = 36 } ``` One of the following value: @@ -234,6 +235,7 @@ One of the following value: - `InternalError = 33` - `InvalidHandle = 34` - `LocalStorageError = 35` +- `InvalidData = 36` ## ClientError diff --git a/docs/reference/types-and-methods/modules.md b/docs/reference/types-and-methods/modules.md index 166ddc30a..b848bf27c 100644 --- a/docs/reference/types-and-methods/modules.md +++ b/docs/reference/types-and-methods/modules.md @@ -159,6 +159,8 @@ Where: [calc_function_id](mod\_abi.md#calc_function_id) – Calculates contract function ID by contract ABI +[get_signature_data](mod\_abi.md#get_signature_data) – Extracts signature from message body and calculates hash to verify the signature + ## [boc](mod\_boc.md) – BOC manipulation module. [parse_message](mod\_boc.md#parse_message) – Parses message boc into a JSON diff --git a/tools/api.json b/tools/api.json index d717e2c8e..a46c1a656 100644 --- a/tools/api.json +++ b/tools/api.json @@ -1,5 +1,5 @@ { - "version": "1.39.0", + "version": "1.40.0", "modules": [ { "name": "client", @@ -254,6 +254,13 @@ "value": "35", "summary": null, "description": null + }, + { + "name": "InvalidData", + "type": "Number", + "value": "36", + "summary": null, + "description": null } ], "summary": null, @@ -7126,6 +7133,47 @@ ], "summary": null, "description": null + }, + { + "name": "ParamsOfGetSignatureData", + "type": "Struct", + "struct_fields": [ + { + "name": "abi", + "type": "Ref", + "ref_name": "abi.Abi", + "summary": "Contract ABI used to decode.", + "description": null + }, + { + "name": "message", + "type": "String", + "summary": "Message BOC encoded in `base64`.", + "description": null + } + ], + "summary": null, + "description": null + }, + { + "name": "ResultOfGetSignatureData", + "type": "Struct", + "struct_fields": [ + { + "name": "signature", + "type": "String", + "summary": "Signature from the message in `hex`.", + "description": null + }, + { + "name": "hash", + "type": "String", + "summary": "Hash to verify the signature in `base64`.", + "description": null + } + ], + "summary": null, + "description": null } ], "functions": [ @@ -7698,6 +7746,44 @@ ] }, "errors": null + }, + { + "name": "get_signature_data", + "summary": "Extracts signature from message body and calculates hash to verify the signature", + "description": null, + "params": [ + { + "name": "context", + "type": "Generic", + "generic_name": "Arc", + "generic_args": [ + { + "type": "Ref", + "ref_name": "ClientContext" + } + ], + "summary": null, + "description": null + }, + { + "name": "params", + "type": "Ref", + "ref_name": "abi.ParamsOfGetSignatureData", + "summary": null, + "description": null + } + ], + "result": { + "type": "Generic", + "generic_name": "ClientResult", + "generic_args": [ + { + "type": "Ref", + "ref_name": "abi.ResultOfGetSignatureData" + } + ] + }, + "errors": null } ] }, From bf37e4268e4cb36c408d87269d14e4ddbaf7f5b9 Mon Sep 17 00:00:00 2001 From: tonjen Date: Wed, 11 Jan 2023 17:01:12 +0000 Subject: [PATCH 8/8] Update trusted blocks --- ton_client/src/proofs/trusted_key_blocks.bin | Bin 293992 -> 317320 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ton_client/src/proofs/trusted_key_blocks.bin b/ton_client/src/proofs/trusted_key_blocks.bin index f60121230a013b9b6234d671442ee2e1d10389d6..8ab90277ed898f06dbd478b7b7ca57da5557fec3 100644 GIT binary patch delta 23555 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 delta 42 ycmeBJFZ|+%-~EvBtn%vJK!H{>!aFs