void wallet_db::store_account( const account_data& account ) { try { FC_ASSERT( is_open() ); FC_ASSERT( account.name != string() ); FC_ASSERT( account.owner_key != public_key_type() ); owallet_account_record account_record = lookup_account( account.owner_address() ); if( !account_record.valid() ) account_record = wallet_account_record(); account_data& temp = *account_record; temp = account; store_and_reload_record( *account_record ); set<public_key_type> account_public_keys; account_public_keys.insert( account_record->owner_key ); for( const auto& active_key_item : account_record->active_key_history ) { const public_key_type& active_key = active_key_item.second; if( active_key == public_key_type() ) continue; account_public_keys.insert( active_key ); } if( account.is_delegate() ) { for( const auto& item : account.delegate_info->signing_key_history ) { const public_key_type& signing_key = item.second; if( signing_key == public_key_type() ) continue; account_public_keys.insert( signing_key ); } } for( const public_key_type& account_public_key : account_public_keys ) { const address account_address = address( account_public_key ); owallet_key_record key_record = lookup_key( account_address ); if( !key_record.valid() ) { key_data key; key.account_address = account_address; key.public_key = account_public_key; store_key( key ); } else if( key_record->has_private_key() ) { if( !account_record->is_my_account ) { account_record->is_my_account = true; store_and_reload_record( *account_record ); } if( key_record->account_address != account_record->owner_address() ) { key_record->account_address = account_record->owner_address(); store_key( *key_record ); } } } } FC_CAPTURE_AND_RETHROW( (account) ) }
wallet_account_record wallet_db::store_account( const account_data& account ) { try { FC_ASSERT( is_open() ); FC_ASSERT( account.name != string() ); FC_ASSERT( account.owner_key != public_key_type() ); owallet_account_record account_record = lookup_account( account.owner_address() ); if( !account_record.valid() ) account_record = wallet_account_record(); account_data& temp = *account_record; temp = account; store_and_reload_record( *account_record ); const auto index_key = [ & ]( const public_key_type& account_public_key ) { const address account_address = address( account_public_key ); owallet_key_record key_record = lookup_key( account_address ); if( !key_record.valid() ) { key_data key; key.account_address = account_address; key.public_key = account_public_key; store_key( key ); } else if( key_record->has_private_key() ) { if( key_record->account_address != account_record->owner_address() ) { key_record->account_address = account_record->owner_address(); store_key( *key_record ); } } }; account_record->scan_public_keys( index_key ); return *account_record; } FC_CAPTURE_AND_RETHROW( (account) ) }