BitShares-Core  6.1.0
BitShares blockchain implementation and command-line interface software
database_api.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 Cryptonomex, Inc., and contributors.
3  *
4  * The MIT License
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #pragma once
25 
27 
29 
31 
42 
43 #include <fc/api.hpp>
44 #include <fc/variant_object.hpp>
45 
46 #include <boost/container/flat_set.hpp>
47 
48 #include <functional>
49 #include <map>
50 #include <memory>
51 #include <vector>
52 
53 namespace graphene { namespace app {
54 
55 using namespace graphene::chain;
56 using namespace graphene::market_history;
57 using std::string;
58 using std::vector;
59 using std::map;
60 
61 class database_api_impl;
62 
71 {
72  public:
73  database_api(graphene::chain::database& db, const application_options* app_options = nullptr );
74  ~database_api();
75 
77  // Objects //
79 
92  fc::variants get_objects( const vector<object_id_type>& ids,
93  optional<bool> subscribe = optional<bool>() )const;
94 
96  // Subscriptions //
98 
110  void set_subscribe_callback( std::function<void(const variant&)> cb, bool notify_remove_create );
129  void set_auto_subscription( bool enable );
138  void set_pending_transaction_callback( std::function<void(const variant& signed_transaction_object)> cb );
143  void set_block_applied_callback( std::function<void(const variant& block_id)> cb );
149  void cancel_all_subscriptions();
150 
152  // Blocks and transactions //
154 
162  optional<maybe_signed_block_header> get_block_header(
163  uint32_t block_num,
164  const optional<bool>& with_witness_signature = optional<bool>() )const;
165 
173  map<uint32_t, optional<maybe_signed_block_header>> get_block_header_batch(
174  const vector<uint32_t>& block_nums,
175  const optional<bool>& with_witness_signatures = optional<bool>() )const;
176 
182  optional<signed_block> get_block(uint32_t block_num)const;
183 
190  processed_transaction get_transaction( uint32_t block_num, uint32_t trx_in_block )const;
191 
200  optional<signed_transaction> get_recent_transaction_by_id( const transaction_id_type& txid )const;
201 
203  // Globals //
205 
209  chain_property_object get_chain_properties()const;
210 
214  global_property_object get_global_properties()const;
215 
220 
224  chain_id_type get_chain_id()const;
225 
229  dynamic_global_property_object get_dynamic_global_properties()const;
230 
240  object_id_type get_next_object_id( uint8_t space_id, uint8_t type_id, bool with_pending_transactions )const;
241 
243  // Keys //
245 
254  vector<flat_set<account_id_type>> get_key_references( vector<public_key_type> keys )const;
255 
263  bool is_public_key_registered(string public_key) const;
264 
266  // Accounts //
268 
275  account_id_type get_account_id_from_string(const std::string& name_or_id) const;
276 
287  vector<optional<account_object>> get_accounts( const vector<std::string>& account_names_or_ids,
288  optional<bool> subscribe = optional<bool>() )const;
289 
309  map<string, full_account, std::less<>> get_full_accounts(
310  const vector<string>& names_or_ids,
311  const optional<bool>& subscribe = optional<bool>() )const;
312 
319  vector<account_statistics_object> get_top_voters(uint32_t limit)const;
320 
326  optional<account_object> get_account_by_name( string name )const;
327 
333  vector<account_id_type> get_account_references( const std::string account_name_or_id )const;
334 
342  vector<optional<account_object>> lookup_account_names(const vector<string>& account_names)const;
343 
357  map<string, account_id_type, std::less<>> lookup_accounts( const string& lower_bound_name,
358  uint32_t limit,
359  const optional<bool>& subscribe = optional<bool>() )const;
360 
362  // Balances //
364 
371  vector<asset> get_account_balances( const std::string& account_name_or_id,
372  const flat_set<asset_id_type>& assets )const;
373 
375  vector<asset> get_named_account_balances(const std::string& name, const flat_set<asset_id_type>& assets)const;
376 
382  vector<balance_object> get_balance_objects( const vector<address>& addrs )const;
383 
390  vector<asset> get_vested_balances( const vector<balance_id_type>& objs )const;
391 
397  vector<vesting_balance_object> get_vesting_balances( const std::string account_name_or_id )const;
398 
402  uint64_t get_account_count()const;
403 
405  // Assets //
407 
413  asset_id_type get_asset_id_from_string(const std::string& symbol_or_id) const;
414 
425  vector<optional<extended_asset_object>> get_assets( const vector<std::string>& asset_symbols_or_ids,
426  optional<bool> subscribe = optional<bool>() )const;
427 
435  vector<extended_asset_object> list_assets(const string& lower_bound_symbol, uint32_t limit)const;
436 
444  vector<optional<extended_asset_object>> lookup_asset_symbols(const vector<string>& symbols_or_ids)const;
445 
450  uint64_t get_asset_count()const;
451 
460  vector<extended_asset_object> get_assets_by_issuer(const std::string& issuer_name_or_id,
461  asset_id_type start, uint32_t limit)const;
462 
464  // Markets / feeds //
466 
475  vector<limit_order_object> get_limit_orders(std::string a, std::string b, uint32_t limit)const;
476 
495  vector<limit_order_object> get_limit_orders_by_account(
496  const string& account_name_or_id,
497  const optional<uint32_t>& limit = optional<uint32_t>(),
498  const optional<limit_order_id_type>& start_id = optional<limit_order_id_type>() );
499 
524  vector<limit_order_object> get_account_limit_orders( const string& account_name_or_id,
525  const string &base,
526  const string &quote,
527  uint32_t limit = application_options::get_default().api_limit_get_account_limit_orders,
528  optional<limit_order_id_type> ostart_id = optional<limit_order_id_type>(),
529  optional<price> ostart_price = optional<price>());
530 
538  vector<call_order_object> get_call_orders(const std::string& a, uint32_t limit)const;
539 
548  vector<call_order_object> get_call_orders_by_account(const std::string& account_name_or_id,
549  asset_id_type start, uint32_t limit)const;
550 
558  vector<force_settlement_object> get_settle_orders(const std::string& a, uint32_t limit)const;
559 
569  vector<force_settlement_object> get_settle_orders_by_account( const std::string& account_name_or_id,
570  force_settlement_id_type start,
571  uint32_t limit )const;
572 
581  vector<collateral_bid_object> get_collateral_bids(const std::string& a, uint32_t limit, uint32_t start)const;
582 
591  vector<call_order_object> get_margin_positions( const std::string& account_name_or_id )const;
592 
602  void subscribe_to_market(std::function<void(const variant&)> callback,
603  const std::string& a, const std::string& b);
604 
610  void unsubscribe_from_market( const std::string& a, const std::string& b );
611 
618  market_ticker get_ticker( const string& base, const string& quote )const;
619 
626  market_volume get_24_volume( const string& base, const string& quote )const;
627 
636  order_book get_order_book( const string& base, const string& quote,
637  uint32_t limit = application_options::get_default().api_limit_get_order_book )const;
638 
646  vector<market_ticker> get_top_markets(uint32_t limit)const;
647 
662  vector<market_trade> get_trade_history( const string& base, const string& quote,
664  uint32_t limit = application_options::get_default().api_limit_get_trade_history )const;
665 
677  vector<market_trade> get_trade_history_by_sequence( const string& base, const string& quote,
678  int64_t start, fc::time_point_sec stop,
679  uint32_t limit = application_options::get_default().api_limit_get_trade_history_by_sequence )const;
680 
681 
683  // Liquidity pools //
685 
701  vector<extended_liquidity_pool_object> list_liquidity_pools(
702  const optional<uint32_t>& limit = optional<uint32_t>(),
703  const optional<liquidity_pool_id_type>& start_id = optional<liquidity_pool_id_type>(),
704  const optional<bool>& with_statistics = false )const;
705 
723  vector<extended_liquidity_pool_object> get_liquidity_pools_by_asset_a(
724  const std::string& asset_symbol_or_id,
725  const optional<uint32_t>& limit = optional<uint32_t>(),
726  const optional<liquidity_pool_id_type>& start_id = optional<liquidity_pool_id_type>(),
727  const optional<bool>& with_statistics = false )const;
728 
746  vector<extended_liquidity_pool_object> get_liquidity_pools_by_asset_b(
747  const std::string& asset_symbol_or_id,
748  const optional<uint32_t>& limit = optional<uint32_t>(),
749  const optional<liquidity_pool_id_type>& start_id = optional<liquidity_pool_id_type>(),
750  const optional<bool>& with_statistics = false )const;
751 
769  vector<extended_liquidity_pool_object> get_liquidity_pools_by_one_asset(
770  const std::string& asset_symbol_or_id,
771  const optional<uint32_t>& limit = optional<uint32_t>(),
772  const optional<liquidity_pool_id_type>& start_id = optional<liquidity_pool_id_type>(),
773  const optional<bool>& with_statistics = false )const;
774 
794  vector<extended_liquidity_pool_object> get_liquidity_pools_by_both_assets(
795  const std::string& asset_symbol_or_id_a,
796  const std::string& asset_symbol_or_id_b,
797  const optional<uint32_t>& limit = optional<uint32_t>(),
798  const optional<liquidity_pool_id_type>& start_id = optional<liquidity_pool_id_type>(),
799  const optional<bool>& with_statistics = false )const;
800 
815  vector<optional<extended_liquidity_pool_object>> get_liquidity_pools(
816  const vector<liquidity_pool_id_type>& ids,
817  const optional<bool>& subscribe = optional<bool>(),
818  const optional<bool>& with_statistics = false )const;
819 
834  vector<optional<extended_liquidity_pool_object>> get_liquidity_pools_by_share_asset(
835  const vector<std::string>& asset_symbols_or_ids,
836  const optional<bool>& subscribe = optional<bool>(),
837  const optional<bool>& with_statistics = false )const;
838 
856  vector<extended_liquidity_pool_object> get_liquidity_pools_by_owner(
857  const std::string& account_name_or_id,
858  const optional<uint32_t>& limit = optional<uint32_t>(),
859  const optional<asset_id_type>& start_id = optional<asset_id_type>(),
860  const optional<bool>& with_statistics = false )const;
861 
862 
866 
881  vector<samet_fund_object> list_samet_funds(
882  const optional<uint32_t>& limit = optional<uint32_t>(),
883  const optional<samet_fund_id_type>& start_id = optional<samet_fund_id_type>() )const;
884 
901  vector<samet_fund_object> get_samet_funds_by_owner(
902  const std::string& account_name_or_id,
903  const optional<uint32_t>& limit = optional<uint32_t>(),
904  const optional<samet_fund_id_type>& start_id = optional<samet_fund_id_type>() )const;
905 
922  vector<samet_fund_object> get_samet_funds_by_asset(
923  const std::string& asset_symbol_or_id,
924  const optional<uint32_t>& limit = optional<uint32_t>(),
925  const optional<samet_fund_id_type>& start_id = optional<samet_fund_id_type>() )const;
927 
928 
932 
947  vector<credit_offer_object> list_credit_offers(
948  const optional<uint32_t>& limit = optional<uint32_t>(),
949  const optional<credit_offer_id_type>& start_id = optional<credit_offer_id_type>() )const;
950 
967  vector<credit_offer_object> get_credit_offers_by_owner(
968  const std::string& account_name_or_id,
969  const optional<uint32_t>& limit = optional<uint32_t>(),
970  const optional<credit_offer_id_type>& start_id = optional<credit_offer_id_type>() )const;
971 
988  vector<credit_offer_object> get_credit_offers_by_asset(
989  const std::string& asset_symbol_or_id,
990  const optional<uint32_t>& limit = optional<uint32_t>(),
991  const optional<credit_offer_id_type>& start_id = optional<credit_offer_id_type>() )const;
992 
1007  vector<credit_deal_object> list_credit_deals(
1008  const optional<uint32_t>& limit = optional<uint32_t>(),
1009  const optional<credit_deal_id_type>& start_id = optional<credit_deal_id_type>() )const;
1010 
1027  vector<credit_deal_object> get_credit_deals_by_offer_id(
1028  const credit_offer_id_type& offer_id,
1029  const optional<uint32_t>& limit = optional<uint32_t>(),
1030  const optional<credit_deal_id_type>& start_id = optional<credit_deal_id_type>() )const;
1031 
1048  vector<credit_deal_object> get_credit_deals_by_offer_owner(
1049  const std::string& account_name_or_id,
1050  const optional<uint32_t>& limit = optional<uint32_t>(),
1051  const optional<credit_deal_id_type>& start_id = optional<credit_deal_id_type>() )const;
1052 
1069  vector<credit_deal_object> get_credit_deals_by_borrower(
1070  const std::string& account_name_or_id,
1071  const optional<uint32_t>& limit = optional<uint32_t>(),
1072  const optional<credit_deal_id_type>& start_id = optional<credit_deal_id_type>() )const;
1073 
1090  vector<credit_deal_object> get_credit_deals_by_debt_asset(
1091  const std::string& asset_symbol_or_id,
1092  const optional<uint32_t>& limit = optional<uint32_t>(),
1093  const optional<credit_deal_id_type>& start_id = optional<credit_deal_id_type>() )const;
1094 
1111  vector<credit_deal_object> get_credit_deals_by_collateral_asset(
1112  const std::string& asset_symbol_or_id,
1113  const optional<uint32_t>& limit = optional<uint32_t>(),
1114  const optional<credit_deal_id_type>& start_id = optional<credit_deal_id_type>() )const;
1116 
1117 
1119  // Witnesses //
1121 
1129  vector<optional<witness_object>> get_witnesses(const vector<witness_id_type>& witness_ids)const;
1130 
1136  fc::optional<witness_object> get_witness_by_account(const std::string& account_name_or_id)const;
1137 
1145  map<string, witness_id_type, std::less<>> lookup_witness_accounts( const string& lower_bound_name,
1146  uint32_t limit )const;
1147 
1151  uint64_t get_witness_count()const;
1152 
1154  // Committee members //
1156 
1164  vector<optional<committee_member_object>> get_committee_members(
1165  const vector<committee_member_id_type>& committee_member_ids)const;
1166 
1172  fc::optional<committee_member_object> get_committee_member_by_account( const string& account_name_or_id )const;
1173 
1181  map<string, committee_member_id_type, std::less<>> lookup_committee_member_accounts(
1182  const string& lower_bound_name,
1183  uint32_t limit )const;
1184 
1188  uint64_t get_committee_count()const;
1189 
1190 
1192  // Worker proposals //
1194 
1201  vector<worker_object> get_all_workers( const optional<bool>& is_expired = optional<bool>() )const;
1202 
1208  vector<worker_object> get_workers_by_account(const std::string& account_name_or_id)const;
1209 
1213  uint64_t get_worker_count()const;
1214 
1215 
1216 
1218  // Votes //
1220 
1233  vector<variant> lookup_vote_ids( const vector<vote_id_type>& votes )const;
1234 
1236  // Authority / validation //
1238 
1244  std::string get_transaction_hex(const signed_transaction& trx)const;
1245 
1251  std::string get_transaction_hex_without_sig( const transaction &trx ) const;
1252 
1262  set<public_key_type> get_required_signatures( const signed_transaction& trx,
1263  const flat_set<public_key_type>& available_keys )const;
1264 
1273  set<public_key_type> get_potential_signatures( const signed_transaction& trx )const;
1274 
1281  set<address> get_potential_address_signatures( const signed_transaction& trx )const;
1282 
1288  bool verify_authority( const signed_transaction& trx )const;
1289 
1296  bool verify_account_authority( const string& account_name_or_id,
1297  const flat_set<public_key_type>& signers )const;
1298 
1305  processed_transaction validate_transaction( const signed_transaction& trx )const;
1306 
1313  vector< fc::variant > get_required_fees( const vector<operation>& ops,
1314  const std::string& asset_symbol_or_id )const;
1315 
1317  // Proposed transactions //
1319 
1326  vector<proposal_object> get_proposed_transactions( const std::string account_name_or_id )const;
1327 
1329  // Blinded balances //
1331 
1337  vector<blinded_balance_object> get_blinded_balances( const flat_set<commitment_type>& commitments )const;
1338 
1340  // Withdrawals //
1342 
1352  vector<withdraw_permission_object> get_withdraw_permissions_by_giver( const std::string account_name_or_id,
1353  withdraw_permission_id_type start,
1354  uint32_t limit )const;
1355 
1365  vector<withdraw_permission_object> get_withdraw_permissions_by_recipient( const std::string account_name_or_id,
1366  withdraw_permission_id_type start,
1367  uint32_t limit )const;
1368 
1370  // HTLC //
1372 
1381  optional<htlc_object> get_htlc( htlc_id_type id, optional<bool> subscribe = optional<bool>() ) const;
1382 
1391  vector<htlc_object> get_htlc_by_from( const std::string account_name_or_id,
1392  htlc_id_type start,
1393  uint32_t limit ) const;
1394 
1403  vector<htlc_object> get_htlc_by_to( const std::string account_name_or_id,
1404  htlc_id_type start,
1405  uint32_t limit ) const;
1406 
1414  vector<htlc_object> list_htlcs(const htlc_id_type start, uint32_t limit) const;
1415 
1416 
1418  // Tickets //
1420 
1435  vector<ticket_object> list_tickets(
1436  const optional<uint32_t>& limit = optional<uint32_t>(),
1437  const optional<ticket_id_type>& start_id = optional<ticket_id_type>() )const;
1438 
1455  vector<ticket_object> get_tickets_by_account(
1456  const std::string& account_name_or_id,
1457  const optional<uint32_t>& limit = optional<uint32_t>(),
1458  const optional<ticket_id_type>& start_id = optional<ticket_id_type>() )const;
1459 
1460 private:
1461  std::shared_ptr< database_api_impl > my;
1462 };
1463 
1464 } }
1465 
1466 extern template class fc::api<graphene::app::database_api>;
1467 
1469  // Objects
1470  (get_objects)
1471 
1472  // Subscriptions
1473  (set_subscribe_callback)
1474  (set_auto_subscription)
1475  (set_pending_transaction_callback)
1476  (set_block_applied_callback)
1477  (cancel_all_subscriptions)
1478 
1479  // Blocks and transactions
1480  (get_block_header)
1481  (get_block_header_batch)
1482  (get_block)
1483  (get_transaction)
1484  (get_recent_transaction_by_id)
1485 
1486  // Globals
1487  (get_chain_properties)
1488  (get_global_properties)
1489  (get_config)
1490  (get_chain_id)
1491  (get_dynamic_global_properties)
1492  (get_next_object_id)
1493 
1494  // Keys
1495  (get_key_references)
1496  (is_public_key_registered)
1497 
1498  // Accounts
1499  (get_account_id_from_string)
1500  (get_accounts)
1501  (get_full_accounts)
1502  (get_top_voters)
1503  (get_account_by_name)
1504  (get_account_references)
1505  (lookup_account_names)
1506  (lookup_accounts)
1507  (get_account_count)
1508 
1509  // Balances
1510  (get_account_balances)
1511  (get_named_account_balances)
1512  (get_balance_objects)
1513  (get_vested_balances)
1514  (get_vesting_balances)
1515 
1516  // Assets
1517  (get_assets)
1518  (list_assets)
1519  (lookup_asset_symbols)
1520  (get_asset_count)
1521  (get_assets_by_issuer)
1522  (get_asset_id_from_string)
1523 
1524  // Markets / feeds
1525  (get_order_book)
1526  (get_limit_orders)
1527  (get_limit_orders_by_account)
1528  (get_account_limit_orders)
1529  (get_call_orders)
1530  (get_call_orders_by_account)
1531  (get_settle_orders)
1532  (get_settle_orders_by_account)
1533  (get_margin_positions)
1534  (get_collateral_bids)
1535  (subscribe_to_market)
1536  (unsubscribe_from_market)
1537  (get_ticker)
1538  (get_24_volume)
1539  (get_top_markets)
1540  (get_trade_history)
1541  (get_trade_history_by_sequence)
1542 
1543  // Liquidity pools
1544  (list_liquidity_pools)
1545  (get_liquidity_pools_by_asset_a)
1546  (get_liquidity_pools_by_asset_b)
1547  (get_liquidity_pools_by_one_asset)
1548  (get_liquidity_pools_by_both_assets)
1549  (get_liquidity_pools)
1550  (get_liquidity_pools_by_share_asset)
1551  (get_liquidity_pools_by_owner)
1552 
1553  // SameT Funds
1554  (list_samet_funds)
1555  (get_samet_funds_by_owner)
1556  (get_samet_funds_by_asset)
1557 
1558  // Credit offers and credit deals
1559  (list_credit_offers)
1560  (get_credit_offers_by_owner)
1561  (get_credit_offers_by_asset)
1562  (list_credit_deals)
1563  (get_credit_deals_by_offer_id)
1564  (get_credit_deals_by_offer_owner)
1565  (get_credit_deals_by_borrower)
1566  (get_credit_deals_by_debt_asset)
1567  (get_credit_deals_by_collateral_asset)
1568 
1569  // Witnesses
1570  (get_witnesses)
1571  (get_witness_by_account)
1572  (lookup_witness_accounts)
1573  (get_witness_count)
1574 
1575  // Committee members
1576  (get_committee_members)
1577  (get_committee_member_by_account)
1578  (lookup_committee_member_accounts)
1579  (get_committee_count)
1580 
1581  // workers
1582  (get_all_workers)
1583  (get_workers_by_account)
1584  (get_worker_count)
1585 
1586  // Votes
1587  (lookup_vote_ids)
1588 
1589  // Authority / validation
1590  (get_transaction_hex)
1591  (get_transaction_hex_without_sig)
1592  (get_required_signatures)
1593  (get_potential_signatures)
1594  (get_potential_address_signatures)
1596  (verify_account_authority)
1597  (validate_transaction)
1598  (get_required_fees)
1599 
1600  // Proposed transactions
1601  (get_proposed_transactions)
1602 
1603  // Blinded balances
1604  (get_blinded_balances)
1605 
1606  // Withdrawals
1607  (get_withdraw_permissions_by_giver)
1608  (get_withdraw_permissions_by_recipient)
1609 
1610  // HTLC
1611  (get_htlc)
1612  (get_htlc_by_from)
1613  (get_htlc_by_to)
1614  (list_htlcs)
1615 
1616  // Tickets
1617  (list_tickets)
1618  (get_tickets_by_account)
1619 )
Maintains global state information (committee_member list, current fees)This is an implementation det...
tracks the blockchain state in an extensible manner
Definition: database.hpp:70
static constexpr application_options get_default()
Definition: application.hpp:84
An order-perserving dictionary of variant&#39;s.
Definition: api.cpp:48
void verify_authority(const vector< operation > &ops, const flat_set< public_key_type > &sigs, const std::function< const authority *(account_id_type)> &get_active, const std::function< const authority *(account_id_type)> &get_owner, const custom_authority_lookup &get_custom, bool allow_non_immediate_owner, bool ignore_custom_operation_required_auths, uint32_t max_recursion=GRAPHENE_MAX_SIG_CHECK_DEPTH, bool allow_committee=false, const flat_set< account_id_type > &active_approvals=flat_set< account_id_type >(), const flat_set< account_id_type > &owner_approvals=flat_set< account_id_type >())
std::vector< variant > variants
Definition: variant.hpp:170
provides stack-based nullable value similar to boost::optional
Definition: optional.hpp:20
#define FC_API(CLASS, METHODS)
Definition: api.hpp:197
The database_api class implements the RPC API for the chain database.
fc::variant_object get_config()
Definition: get_config.cpp:31
Maintains global state information (committee_member list, current fees)This is an implementation det...
fc::ripemd160 transaction_id_type
Definition: types.hpp:306
captures the result of evaluating the operations contained in the transaction