From a32075897f75725ab933b4c691e5cc658d1c735c Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Mon, 7 Sep 2015 10:19:51 -0400 Subject: [PATCH] adding verify_account_authority api --- libraries/app/api.cpp | 26 ++++++++++++++++++++++ libraries/app/include/graphene/app/api.hpp | 6 +++++ libraries/chain/db_block.cpp | 2 +- libraries/chain/db_management.cpp | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/libraries/app/api.cpp b/libraries/app/api.cpp index 798dc460..5fc139fe 100644 --- a/libraries/app/api.cpp +++ b/libraries/app/api.cpp @@ -1223,6 +1223,32 @@ namespace graphene { namespace app { _db.get_global_properties().parameters.max_authority_depth ); return true; } + + bool database_api::verify_account_authority( const string& name_or_id, const flat_set& keys )const + { + FC_ASSERT( name_or_id.size() > 0); + const account_object* account = nullptr; + if (std::isdigit(name_or_id[0])) + account = _db.find(fc::variant(name_or_id).as()); + else + { + const auto& idx = _db.get_index_type().indices().get(); + auto itr = idx.find(name_or_id); + if (itr != idx.end()) + account = &*itr; + } + FC_ASSERT( account, "no such account" ); + + + /// reuse trx.verify_authority by creating a dummy transfer + signed_transaction trx; + transfer_operation op; + op.from = account->id; + trx.operations.emplace_back(op); + + return verify_authority( trx ); + } + vector database_api::get_blinded_balances( const flat_set& commitments )const { vector result; result.reserve(commitments.size()); diff --git a/libraries/app/include/graphene/app/api.hpp b/libraries/app/include/graphene/app/api.hpp index 8b184d36..ed495010 100644 --- a/libraries/app/include/graphene/app/api.hpp +++ b/libraries/app/include/graphene/app/api.hpp @@ -342,6 +342,11 @@ namespace graphene { namespace app { */ bool verify_authority( const signed_transaction& trx )const; + /** + * @return true if the signers have enough authority to authorize an account + */ + bool verify_account_authority( const string& name_or_id, const flat_set& signers )const; + /** * @return the set of blinded balance objects by commitment ID @@ -586,6 +591,7 @@ FC_API(graphene::app::database_api, (get_required_signatures) (get_potential_signatures) (verify_authority) + (verify_account_authority) (get_blinded_balances) (get_required_fees) (set_subscribe_callback) diff --git a/libraries/chain/db_block.cpp b/libraries/chain/db_block.cpp index c40b7c29..fa93b8ed 100644 --- a/libraries/chain/db_block.cpp +++ b/libraries/chain/db_block.cpp @@ -83,7 +83,7 @@ const signed_transaction& database::get_recent_transaction(const transaction_id_ */ bool database::push_block(const signed_block& new_block, uint32_t skip) { - + idump((new_block.block_num())(new_block.id())); bool result; with_skip_flags(skip, [&]() { diff --git a/libraries/chain/db_management.cpp b/libraries/chain/db_management.cpp index 375c92ff..99fb0811 100644 --- a/libraries/chain/db_management.cpp +++ b/libraries/chain/db_management.cpp @@ -82,8 +82,8 @@ void database::wipe(const fc::path& data_dir, bool include_blocks) void database::open( const fc::path& data_dir, std::function genesis_loader ) - elog( "Open Database" ); { + elog( "Open Database" ); try { object_database::open(data_dir);