Prevent the wallet from complaining when creating a new account, it

was falsely reporting that someone else had registered your account
first.  I still don't think it's working correctly, but it's
better than it was.
This commit is contained in:
Eric Frias 2015-07-02 20:05:31 -04:00
parent 9cb9d2e07f
commit cc1348bf91
2 changed files with 31 additions and 11 deletions

View file

@ -325,7 +325,7 @@ class wallet_api
*
* The keys are printed in WIF format. You can import these keys into another wallet
* using \c import_key()
* @returns a map containing the private keys, indexed by their key_id
* @returns a map containing the private keys, indexed by their public key
*/
map<public_key_type, string> dump_private_keys();
@ -1017,7 +1017,9 @@ FC_API( graphene::wallet::wallet_api,
(whitelist_account)
(create_delegate)
(get_witness)
(get_delegate)
(list_witnesses)
(list_delegates)
(create_witness)
(vote_for_delegate)
(vote_for_witness)

View file

@ -25,6 +25,7 @@
#include <list>
#include <boost/range/adaptor/map.hpp>
#include <boost/range/algorithm_ext/insert.hpp>
#include <fc/io/fstream.hpp>
#include <fc/io/json.hpp>
@ -504,25 +505,37 @@ public:
return get_private_key(active_keys.front());
}
// imports the private key into the wallet, and associate it in some way (?) with the
// given account name.
// @returns true if the key matches a current active/owner/memo key for the named
// account, false otherwise (but it is stored either way)
bool import_key(string account_name_or_id, string wif_key)
{
auto opt_priv_key = wif_to_key(wif_key);
FC_ASSERT( opt_priv_key.valid() );
graphene::chain::public_key_type wif_pub_key = opt_priv_key->get_public_key();
fc::optional<fc::ecc::private_key> optional_private_key = wif_to_key(wif_key);
if (!optional_private_key)
FC_THROW("Invalid private key ${key}", ("key", wif_key));
graphene::chain::public_key_type wif_pub_key = optional_private_key->get_public_key();
account_object account = get_account( account_name_or_id );
// make a list of all current public keys for the named account
flat_set<public_key_type> all_keys_for_account;
boost::insert(all_keys_for_account, account.active.get_keys());
boost::insert(all_keys_for_account, account.owner.get_keys());
all_keys_for_account.insert(account.options.memo_key);
_keys[wif_pub_key] = wif_key;
auto acnt = get_account( account_name_or_id );
if( _wallet.update_account(acnt) )
if( _wallet.update_account(account) )
_remote_db->subscribe_to_objects([this](const fc::variant& v) {
_wallet.update_account(v.as<account_object>());
}, {acnt.id});
}, {account.id});
_wallet.extra_keys[acnt.id].insert(wif_pub_key);
_wallet.extra_keys[account.id].insert(wif_pub_key);
return false;
return all_keys_for_account.find(wif_pub_key) != all_keys_for_account.end();
}
bool load_wallet_file(string wallet_filename = "")
{
//
@ -2023,6 +2036,11 @@ witness_object wallet_api::get_witness(string owner_account)
return my->get_witness(owner_account);
}
delegate_object wallet_api::get_delegate(string owner_account)
{
return my->get_delegate(owner_account);
}
signed_transaction wallet_api::create_witness(string owner_account,
string url,
bool broadcast /* = false */)