From 6f7feb59c724a504d4c52ee64033b34a0b6506d0 Mon Sep 17 00:00:00 2001 From: OmicronTau Date: Thu, 26 Aug 2021 11:41:12 +0000 Subject: [PATCH] Add guess_type_by_init_state for wallet v3 --- tonlib/tonlib/TonlibClient.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tonlib/tonlib/TonlibClient.cpp b/tonlib/tonlib/TonlibClient.cpp index b82a6373..6e0e8c3d 100644 --- a/tonlib/tonlib/TonlibClient.cpp +++ b/tonlib/tonlib/TonlibClient.cpp @@ -203,6 +203,14 @@ td::Result public_key_from_bytes(td::Slice bytes) { return key_bytes; } +td::Result to_init_data(const tonlib_api::wallet_v3_initialAccountState& wallet_state) { + TRY_RESULT(key_bytes, get_public_key(wallet_state.public_key_)); + ton::WalletV3::InitData init_data; + init_data.public_key = td::SecureString(key_bytes.key); + init_data.wallet_id = static_cast(wallet_state.wallet_id_); + return std::move(init_data); +} + td::Result to_init_data(const tonlib_api::rwallet_initialAccountState& rwallet_state) { TRY_RESULT(init_key_bytes, get_public_key(rwallet_state.init_public_key_)); TRY_RESULT(key_bytes, get_public_key(rwallet_state.public_key_)); @@ -495,6 +503,23 @@ class AccountState { initial_account_state, td::overloaded( [](auto& x) {}, + [&](tonlib_api::wallet_v3_initialAccountState& v3wallet) { + for (auto revision : ton::SmartContractCode::get_revisions(ton::SmartContractCode::WalletV3)) { + auto init_data = to_init_data(v3wallet); + if (init_data.is_error()) { + continue; + } + auto wallet = ton::WalletV3::create(init_data.move_as_ok(), revision); + if (!(wallet->get_address(ton::masterchainId) == address_ || + wallet->get_address(ton::basechainId) == address_)) { + continue; + } + wallet_type_ = WalletType::WalletV3; + wallet_revision_ = revision; + set_new_state(wallet->get_state()); + break; + } + }, [&](tonlib_api::rwallet_initialAccountState& rwallet) { for (auto revision : ton::SmartContractCode::get_revisions(ton::SmartContractCode::RestrictedWallet)) { auto r_init_data = to_init_data(rwallet);