void wallet_db::store_key( const key_data& key ) { try { FC_ASSERT( is_open() ); FC_ASSERT( key.public_key != public_key_type() ); owallet_key_record key_record = lookup_key( key.get_address() ); if( !key_record.valid() ) key_record = wallet_key_record(); key_data& temp = *key_record; temp = key; store_and_reload_record( *key_record, true ); if( key_record->has_private_key() ) { owallet_account_record account_record = lookup_account( key.public_key ); if( !account_record.valid() ) account_record = lookup_account( key.account_address ); if( account_record.valid() ) { if( key_record->account_address != account_record->owner_address() ) { key_record->account_address = account_record->owner_address(); store_and_reload_record( *key_record, true ); } } } } FC_CAPTURE_AND_RETHROW( (key) ) }
void wallet_db::store_key( const key_data& key_to_store ) { auto key_itr = keys.find( key_to_store.get_address() ); if( key_itr != keys.end() ) { key_data& old_data = key_itr->second; old_data = key_to_store; if( key_to_store.has_private_key()) { auto oacct = lookup_account( key_to_store.account_address ); FC_ASSERT(oacct.valid(), "expecting an account to existing at this point"); oacct->is_my_account = true; store_record( *oacct ); cache_account( *oacct ); ilog( "WALLET: storing private key for ${key} under account '${account_name}' address: (${account})", ("key",key_to_store.public_key) ("account",key_to_store.account_address) ("account_name",get_account_name(key_to_store.account_address)) ); } else { /* ilog( "WALLET: storing public key ${key} under account named '${account_name}' address: (${account})", ("key",key_to_store.public_key) ("account",key_to_store.account_address) ("account_name",get_account_name(key_to_store.account_address)) ); */ } ilog( "storing key" ); store_record( key_itr->second, true ); } else { auto r = wallet_key_record( key_to_store, new_wallet_record_index() ); store_record( keys[key_to_store.get_address()] = r, true ); auto key = key_to_store.public_key; auto bts_addr = key_to_store.get_address(); btc_to_bts_address[ address(key) ] = bts_addr; btc_to_bts_address[ address(pts_address(key,false,56) )] = bts_addr; btc_to_bts_address[ address(pts_address(key,true,56) ) ] = bts_addr; btc_to_bts_address[ address(pts_address(key,false,0) ) ] = bts_addr; btc_to_bts_address[ address(pts_address(key,true,0) ) ] = bts_addr; ilog( "indexing key ${k}", ("k",address(pts_address(key,false,56) ) ) ); ilog( "indexing key ${k}", ("k",address(pts_address(key,true,56) ) ) ); } }
void wallet_db::import_key( const fc::sha512& password, const string& account_name, const private_key_type& private_key, bool move_existing ) { try { FC_ASSERT( is_open() ); owallet_account_record account_record = lookup_account( account_name ); FC_ASSERT( account_record.valid(), "Account name not found!" ); const public_key_type public_key = private_key.get_public_key(); owallet_key_record key_record = lookup_key( address( public_key ) ); if( !key_record.valid() ) key_record = wallet_key_record(); else if( !move_existing ) FC_ASSERT( key_record->account_address == account_record->owner_address() ); key_record->account_address = account_record->owner_address(); key_record->public_key = public_key; key_record->encrypt_private_key( password, private_key ); store_key( *key_record ); } FC_CAPTURE_AND_RETHROW( (account_name)(move_existing) ) }