adding API call to get potential address sigs: Fix #337

This commit is contained in:
Daniel Larimer 2015-09-23 18:22:38 -04:00
parent 2afe62f8ab
commit 738abf03af
3 changed files with 41 additions and 0 deletions

View file

@ -92,6 +92,7 @@ class database_api_impl : public std::enable_shared_from_this<database_api_impl>
std::string get_transaction_hex(const signed_transaction& trx)const;
set<public_key_type> get_required_signatures( const signed_transaction& trx, const flat_set<public_key_type>& available_keys )const;
set<public_key_type> get_potential_signatures( const signed_transaction& trx )const;
set<address> get_potential_address_signatures( const signed_transaction& trx )const;
bool verify_authority( const signed_transaction& trx )const;
bool verify_account_authority( const string& name_or_id, const flat_set<public_key_type>& signers )const;
processed_transaction validate_transaction( const signed_transaction& trx )const;
@ -1213,6 +1214,10 @@ set<public_key_type> database_api::get_potential_signatures( const signed_transa
{
return my->get_potential_signatures( trx );
}
set<address> database_api::get_potential_address_signatures( const signed_transaction& trx )const
{
return my->get_potential_address_signatures( trx );
}
set<public_key_type> database_api_impl::get_potential_signatures( const signed_transaction& trx )const
{
@ -1242,6 +1247,31 @@ set<public_key_type> database_api_impl::get_potential_signatures( const signed_t
return result;
}
set<address> database_api_impl::get_potential_address_signatures( const signed_transaction& trx )const
{
set<address> result;
trx.get_required_signatures(
_db.get_chain_id(),
flat_set<public_key_type>(),
[&]( account_id_type id )
{
const auto& auth = id(_db).active;
for( const auto& k : auth.get_addresses() )
result.insert(k);
return &auth;
},
[&]( account_id_type id )
{
const auto& auth = id(_db).owner;
for( const auto& k : auth.get_addresses() )
result.insert(k);
return &auth;
},
_db.get_global_properties().parameters.max_authority_depth
);
return result;
}
bool database_api::verify_authority( const signed_transaction& trx )const
{
return my->verify_authority( trx );

View file

@ -416,6 +416,7 @@ class database_api
* to get the minimum subset.
*/
set<public_key_type> get_potential_signatures( const signed_transaction& trx )const;
set<address> get_potential_address_signatures( const signed_transaction& trx )const;
/**
* @return true of the @ref trx has all of the required signatures, otherwise throws an exception
@ -536,6 +537,7 @@ FC_API(graphene::app::database_api,
(get_transaction_hex)
(get_required_signatures)
(get_potential_signatures)
(get_potential_address_signatures)
(verify_authority)
(verify_account_authority)
(validate_transaction)

View file

@ -83,6 +83,15 @@ namespace graphene { namespace chain {
result.push_back(k.first);
return result;
}
vector<address> get_addresses() const
{
vector<address> result;
result.reserve( address_auths.size() );
for( const auto& k : address_auths )
result.push_back(k.first);
return result;
}
friend bool operator == ( const authority& a, const authority& b )
{