Skip to content
This repository was archived by the owner on May 16, 2024. It is now read-only.

Commit 2dc4783

Browse files
committed
Add guess_type_by_init_state for wallet v3
1 parent d08f300 commit 2dc4783

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

tonlib/tonlib/TonlibClient.cpp

+25
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,14 @@ td::Result<block::PublicKey> public_key_from_bytes(td::Slice bytes) {
203203
return key_bytes;
204204
}
205205

206+
td::Result<ton::WalletV3::InitData> to_init_data(const tonlib_api::wallet_v3_initialAccountState& wallet_state) {
207+
TRY_RESULT(key_bytes, get_public_key(wallet_state.public_key_));
208+
ton::WalletV3::InitData init_data;
209+
init_data.public_key = td::SecureString(key_bytes.key);
210+
init_data.wallet_id = static_cast<td::uint32>(wallet_state.wallet_id_);
211+
return std::move(init_data);
212+
}
213+
206214
td::Result<ton::RestrictedWallet::InitData> to_init_data(const tonlib_api::rwallet_initialAccountState& rwallet_state) {
207215
TRY_RESULT(init_key_bytes, get_public_key(rwallet_state.init_public_key_));
208216
TRY_RESULT(key_bytes, get_public_key(rwallet_state.public_key_));
@@ -495,6 +503,23 @@ class AccountState {
495503
initial_account_state,
496504
td::overloaded(
497505
[](auto& x) {},
506+
[&](tonlib_api::wallet_v3_initialAccountState& v3wallet) {
507+
for (auto revision : ton::SmartContractCode::get_revisions(ton::SmartContractCode::WalletV3)) {
508+
auto init_data = to_init_data(v3wallet);
509+
if (init_data.is_error()) {
510+
continue;
511+
}
512+
auto wallet = ton::WalletV3::create(init_data.move_as_ok(), revision);
513+
if (!(wallet->get_address(ton::masterchainId) == address_ ||
514+
wallet->get_address(ton::basechainId) == address_)) {
515+
continue;
516+
}
517+
wallet_type_ = WalletType::WalletV3;
518+
wallet_revision_ = revision;
519+
set_new_state(wallet->get_state());
520+
break;
521+
}
522+
},
498523
[&](tonlib_api::rwallet_initialAccountState& rwallet) {
499524
for (auto revision : ton::SmartContractCode::get_revisions(ton::SmartContractCode::RestrictedWallet)) {
500525
auto r_init_data = to_init_data(rwallet);

0 commit comments

Comments
 (0)