@@ -203,6 +203,14 @@ td::Result<block::PublicKey> public_key_from_bytes(td::Slice bytes) {
203
203
return key_bytes;
204
204
}
205
205
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
+
206
214
td::Result<ton::RestrictedWallet::InitData> to_init_data (const tonlib_api::rwallet_initialAccountState& rwallet_state) {
207
215
TRY_RESULT (init_key_bytes, get_public_key (rwallet_state.init_public_key_ ));
208
216
TRY_RESULT (key_bytes, get_public_key (rwallet_state.public_key_ ));
@@ -495,6 +503,23 @@ class AccountState {
495
503
initial_account_state,
496
504
td::overloaded (
497
505
[](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
+ },
498
523
[&](tonlib_api::rwallet_initialAccountState& rwallet) {
499
524
for (auto revision : ton::SmartContractCode::get_revisions (ton::SmartContractCode::RestrictedWallet)) {
500
525
auto r_init_data = to_init_data (rwallet);
0 commit comments