BitShares-Core  5.0.0
BitShares blockchain implementation and command-line interface software
db_notify.cpp
Go to the documentation of this file.
1 #include <fc/container/flat.hpp>
2 
6 
23 #include <graphene/chain/hardfork.hpp>
24 
25 using namespace fc;
26 namespace graphene { namespace chain { namespace detail {
27 
28 // TODO: Review all of these, especially no-ops
30 {
31  flat_set<account_id_type>& _impacted;
33 
34  get_impacted_account_visitor( flat_set<account_id_type>& impact, bool ignore_custom_operation_required_auths )
35  : _impacted( impact ), _ignore_custom_op_reqd_auths( ignore_custom_operation_required_auths )
36  {}
37 
38  using result_type = void;
39 
40  void operator()( const transfer_operation& op )
41  {
42  _impacted.insert( op.to );
43  _impacted.insert( op.fee_payer() ); // from
44  }
46  {
47  _impacted.insert( op.fee_payer() ); // issuer
48  }
50  {
51  _impacted.insert( op.fee_payer() ); // issuer
52  }
54  {
55  _impacted.insert( op.fee_payer() ); // seller
56  }
58  {
59  _impacted.insert( op.fee_payer() ); // fee_paying_account
60  }
62  {
63  _impacted.insert( op.fee_payer() ); // funding_account
64  }
66  {
67  _impacted.insert( op.fee_payer() ); // bidder
68  }
69  void operator()( const fill_order_operation& op )
70  {
71  _impacted.insert( op.fee_payer() ); // account_id
72  }
74  {
75  _impacted.insert( op.fee_payer() ); // bidder
76  }
78  {
79  _impacted.insert( op.fee_payer() ); // registrar
80  _impacted.insert( op.referrer );
81  add_authority_accounts( _impacted, op.owner );
82  add_authority_accounts( _impacted, op.active );
83  }
85  {
86  _impacted.insert( op.fee_payer() ); // account
87  if( op.owner )
88  add_authority_accounts( _impacted, *(op.owner) );
89  if( op.active )
90  add_authority_accounts( _impacted, *(op.active) );
91  }
93  {
94  _impacted.insert( op.fee_payer() ); // authorizing_account
95  _impacted.insert( op.account_to_list );
96  }
98  {
99  _impacted.insert( op.fee_payer() ); // account_to_upgrade
100  }
102  {
103  _impacted.insert( op.fee_payer() ); // account_id
104  }
106  {
107  _impacted.insert( op.fee_payer() ); // issuer
108  }
110  {
111  _impacted.insert( op.fee_payer() ); // issuer
112  if( op.new_issuer )
113  _impacted.insert( *(op.new_issuer) );
114  }
116  {
117  _impacted.insert( op.fee_payer() ); // issuer
118  _impacted.insert( op.new_issuer );
119  }
121  {
122  _impacted.insert( op.fee_payer() ); // issuer
123  }
125  {
126  _impacted.insert( op.fee_payer() ); // issuer
127  }
129  {
130  _impacted.insert( op.fee_payer() ); // issuer
131  _impacted.insert( op.issue_to_account );
132  }
134  {
135  _impacted.insert( op.fee_payer() ); // payer
136  }
138  {
139  _impacted.insert( op.fee_payer() ); // from_account
140  }
142  {
143  _impacted.insert( op.fee_payer() ); // account
144  }
146  {
147  _impacted.insert( op.fee_payer() ); // issuer
148  }
150  {
151  _impacted.insert( op.fee_payer() ); // publisher
152  }
154  {
155  _impacted.insert( op.fee_payer() ); // witness_account
156  }
158  {
159  _impacted.insert( op.fee_payer() ); // witness_account
160  }
162  {
163  _impacted.insert( op.fee_payer() ); // fee_paying_account
164  vector<authority> other;
165  for( const auto& proposed_op : op.proposed_ops )
166  operation_get_required_authorities( proposed_op.op, _impacted, _impacted, other, _ignore_custom_op_reqd_auths );
167  for( auto& o : other )
168  add_authority_accounts( _impacted, o );
169  }
171  {
172  _impacted.insert( op.fee_payer() ); // fee_paying_account
173  }
175  {
176  _impacted.insert( op.fee_payer() ); // fee_paying_account
177  }
179  {
180  _impacted.insert( op.fee_payer() ); // withdraw_from_account
181  _impacted.insert( op.authorized_account );
182  }
184  {
185  _impacted.insert( op.fee_payer() ); // withdraw_from_account
186  _impacted.insert( op.authorized_account );
187  }
189  {
190  _impacted.insert( op.fee_payer() ); // withdraw_to_account
191  _impacted.insert( op.withdraw_from_account );
192  }
194  {
195  _impacted.insert( op.fee_payer() ); // withdraw_from_account
196  _impacted.insert( op.authorized_account );
197  }
199  {
200  _impacted.insert( op.fee_payer() ); // committee_member_account
201  }
203  {
204  _impacted.insert( op.fee_payer() ); // committee_member_account
205  }
207  {
208  _impacted.insert( op.fee_payer() ); // account_id_type()
209  }
211  {
212  _impacted.insert( op.fee_payer() ); // creator
213  _impacted.insert( op.owner );
214  }
216  {
217  _impacted.insert( op.fee_payer() ); // owner
218  }
220  {
221  _impacted.insert( op.fee_payer() ); // owner
222  }
223  void operator()( const custom_operation& op )
224  {
225  _impacted.insert( op.fee_payer() ); // payer
226  if( !_ignore_custom_op_reqd_auths )
227  _impacted.insert( op.required_auths.begin(), op.required_auths.end() );
228  }
229  void operator()( const assert_operation& op )
230  {
231  _impacted.insert( op.fee_payer() ); // fee_paying_account
232  }
234  {
235  _impacted.insert( op.fee_payer() ); // deposit_to_account
236  }
238  {
239  _impacted.insert( op.to );
240  _impacted.insert( op.from );
241  _impacted.insert( op.fee_payer() ); // issuer
242  }
244  {
245  _impacted.insert( op.fee_payer() ); // from
246  for( const auto& out : op.outputs )
247  add_authority_accounts( _impacted, out.owner );
248  }
250  {
251  _impacted.insert( op.fee_payer() ); // GRAPHENE_TEMP_ACCOUNT
252  for( const auto& in : op.inputs )
253  add_authority_accounts( _impacted, in.owner );
254  for( const auto& out : op.outputs )
255  add_authority_accounts( _impacted, out.owner );
256  }
258  {
259  _impacted.insert( op.fee_payer() ); // GRAPHENE_TEMP_ACCOUNT
260  _impacted.insert( op.to );
261  for( const auto& in : op.inputs )
262  add_authority_accounts( _impacted, in.owner );
263  }
265  {
266  _impacted.insert( op.fee_payer() ); // account
267  }
269  {
270  _impacted.insert( op.fee_payer() ); // account_id
271  }
273  {
274  _impacted.insert( op.fee_payer() );
275  _impacted.insert( op.to );
276  }
278  {
279  _impacted.insert( op.fee_payer() );
280  }
282  {
283  _impacted.insert( op.from );
284  if ( op.to != op.redeemer )
285  _impacted.insert( op.to );
286  }
288  {
289  _impacted.insert( op.fee_payer() );
290  }
292  {
293  _impacted.insert( op.fee_payer() );
294  }
296  {
297  _impacted.insert( op.fee_payer() ); // account
298  add_authority_accounts( _impacted, op.auth );
299  }
301  {
302  _impacted.insert( op.fee_payer() ); // account
303  if ( op.new_auth )
304  add_authority_accounts(_impacted, *op.new_auth);
305  }
307  {
308  _impacted.insert( op.fee_payer() ); // account
309  }
311  {
312  _impacted.insert( op.fee_payer() ); // account
313  }
315  {
316  _impacted.insert( op.fee_payer() ); // account
317  }
319  {
320  _impacted.insert( op.fee_payer() ); // account
321  }
323  {
324  _impacted.insert( op.fee_payer() ); // account
325  }
327  {
328  _impacted.insert( op.fee_payer() ); // account
329  }
331  {
332  _impacted.insert( op.fee_payer() ); // account
333  }
335  {
336  _impacted.insert( op.fee_payer() ); // account
337  }
338 };
339 
340 } // namespace detail
341 
342 void operation_get_impacted_accounts( const operation& op, flat_set<account_id_type>& result,
343  bool ignore_custom_operation_required_auths )
344 {
346  ignore_custom_operation_required_auths );
347  op.visit( vtor );
348 }
349 
350 void transaction_get_impacted_accounts( const transaction& tx, flat_set<account_id_type>& result,
351  bool ignore_custom_operation_required_auths )
352 {
353  for( const auto& op : tx.operations )
354  operation_get_impacted_accounts( op, result, ignore_custom_operation_required_auths );
355 }
356 
357 void get_relevant_accounts( const object* obj, flat_set<account_id_type>& accounts, bool ignore_custom_operation_required_auths ) {
358  if( obj->id.space() == protocol_ids )
359  {
360  switch( (object_type)obj->id.type() )
361  {
362  case null_object_type:
363  case base_object_type:
364  return;
365  case account_object_type:{
366  accounts.insert( obj->id );
367  break;
368  } case asset_object_type:{
369  const auto& aobj = dynamic_cast<const asset_object*>(obj);
370  FC_ASSERT( aobj != nullptr );
371  accounts.insert( aobj->issuer );
372  break;
373  } case force_settlement_object_type:{
374  const auto& aobj = dynamic_cast<const force_settlement_object*>(obj);
375  FC_ASSERT( aobj != nullptr );
376  accounts.insert( aobj->owner );
377  break;
378  } case committee_member_object_type:{
379  const auto& aobj = dynamic_cast<const committee_member_object*>(obj);
380  FC_ASSERT( aobj != nullptr );
381  accounts.insert( aobj->committee_member_account );
382  break;
383  } case witness_object_type:{
384  const auto& aobj = dynamic_cast<const witness_object*>(obj);
385  FC_ASSERT( aobj != nullptr );
386  accounts.insert( aobj->witness_account );
387  break;
388  } case limit_order_object_type:{
389  const auto& aobj = dynamic_cast<const limit_order_object*>(obj);
390  FC_ASSERT( aobj != nullptr );
391  accounts.insert( aobj->seller );
392  break;
393  } case call_order_object_type:{
394  const auto& aobj = dynamic_cast<const call_order_object*>(obj);
395  FC_ASSERT( aobj != nullptr );
396  accounts.insert( aobj->borrower );
397  break;
398  } case custom_object_type:{
399  break;
400  } case proposal_object_type:{
401  const auto& aobj = dynamic_cast<const proposal_object*>(obj);
402  FC_ASSERT( aobj != nullptr );
403  transaction_get_impacted_accounts( aobj->proposed_transaction, accounts,
404  ignore_custom_operation_required_auths );
405  break;
406  } case operation_history_object_type:{
407  const auto& aobj = dynamic_cast<const operation_history_object*>(obj);
408  FC_ASSERT( aobj != nullptr );
409  operation_get_impacted_accounts( aobj->op, accounts,
410  ignore_custom_operation_required_auths );
411  break;
412  } case withdraw_permission_object_type:{
413  const auto& aobj = dynamic_cast<const withdraw_permission_object*>(obj);
414  FC_ASSERT( aobj != nullptr );
415  accounts.insert( aobj->withdraw_from_account );
416  accounts.insert( aobj->authorized_account );
417  break;
418  } case vesting_balance_object_type:{
419  const auto& aobj = dynamic_cast<const vesting_balance_object*>(obj);
420  FC_ASSERT( aobj != nullptr );
421  accounts.insert( aobj->owner );
422  break;
423  } case worker_object_type:{
424  const auto& aobj = dynamic_cast<const worker_object*>(obj);
425  FC_ASSERT( aobj != nullptr );
426  accounts.insert( aobj->worker_account );
427  break;
428  } case balance_object_type:{
430  break;
431  } case htlc_object_type:{
432  const auto& htlc_obj = dynamic_cast<const htlc_object*>(obj);
433  FC_ASSERT( htlc_obj != nullptr );
434  accounts.insert( htlc_obj->transfer.from );
435  accounts.insert( htlc_obj->transfer.to );
436  break;
437  } case custom_authority_object_type:{
438  const auto* cust_auth_obj = dynamic_cast<const custom_authority_object*>( obj );
439  FC_ASSERT( cust_auth_obj != nullptr );
440  accounts.insert( cust_auth_obj->account );
441  add_authority_accounts( accounts, cust_auth_obj->auth );
442  break;
443  } case ticket_object_type:{
444  const auto* aobj = dynamic_cast<const ticket_object*>( obj );
445  FC_ASSERT( aobj != nullptr );
446  accounts.insert( aobj->account );
447  break;
448  } case liquidity_pool_object_type:{
449  // no account info in the object although it does have an owner
450  break;
451  }
452  }
453  }
454  else if( obj->id.space() == implementation_ids )
455  {
456  switch( (impl_object_type)obj->id.type() )
457  {
458  case impl_global_property_object_type:
459  break;
460  case impl_dynamic_global_property_object_type:
461  break;
462  case impl_reserved0_object_type:
463  break;
464  case impl_asset_dynamic_data_object_type:
465  break;
466  case impl_asset_bitasset_data_object_type:
467  break;
468  case impl_account_balance_object_type:{
469  const auto& aobj = dynamic_cast<const account_balance_object*>(obj);
470  FC_ASSERT( aobj != nullptr );
471  accounts.insert( aobj->owner );
472  break;
473  } case impl_account_statistics_object_type:{
474  const auto& aobj = dynamic_cast<const account_statistics_object*>(obj);
475  FC_ASSERT( aobj != nullptr );
476  accounts.insert( aobj->owner );
477  break;
478  } case impl_transaction_history_object_type:{
479  const auto& aobj = dynamic_cast<const transaction_history_object*>(obj);
480  FC_ASSERT( aobj != nullptr );
481  transaction_get_impacted_accounts( aobj->trx, accounts,
482  ignore_custom_operation_required_auths );
483  break;
484  } case impl_blinded_balance_object_type:{
485  const auto& aobj = dynamic_cast<const blinded_balance_object*>(obj);
486  FC_ASSERT( aobj != nullptr );
487  for( const auto& a : aobj->owner.account_auths )
488  accounts.insert( a.first );
489  break;
490  } case impl_block_summary_object_type:
491  break;
492  case impl_account_transaction_history_object_type: {
493  const auto& aobj = dynamic_cast<const account_transaction_history_object*>(obj);
494  FC_ASSERT( aobj != nullptr );
495  accounts.insert( aobj->account );
496  break;
497  } case impl_chain_property_object_type:
498  break;
499  case impl_witness_schedule_object_type:
500  break;
501  case impl_budget_record_object_type:
502  break;
503  case impl_special_authority_object_type:
504  break;
505  case impl_buyback_object_type:
506  break;
507  case impl_fba_accumulator_object_type:
508  break;
509  case impl_collateral_bid_object_type:{
510  const auto& aobj = dynamic_cast<const collateral_bid_object*>(obj);
511  FC_ASSERT( aobj != nullptr );
512  accounts.insert( aobj->bidder );
513  break;
514  }
515  }
516  }
517 } // end get_relevant_accounts( const object* obj, flat_set<account_id_type>& accounts )
518 
519 void database::notify_applied_block( const signed_block& block )
520 {
521  GRAPHENE_TRY_NOTIFY( applied_block, block )
522 }
523 
524 void database::notify_on_pending_transaction( const signed_transaction& tx )
525 {
526  GRAPHENE_TRY_NOTIFY( on_pending_transaction, tx )
527 }
528 
529 void database::notify_changed_objects()
530 { try {
531  if( _undo_db.enabled() )
532  {
533  const auto& head_undo = _undo_db.head();
534  auto chain_time = head_block_time();
535 
536  // New
537  if( !new_objects.empty() )
538  {
539  vector<object_id_type> new_ids; new_ids.reserve(head_undo.new_ids.size());
540  flat_set<account_id_type> new_accounts_impacted;
541  for( const auto& item : head_undo.new_ids )
542  {
543  new_ids.push_back(item);
544  auto obj = find_object(item);
545  if(obj != nullptr)
546  get_relevant_accounts(obj, new_accounts_impacted,
547  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
548  }
549 
550  if( new_ids.size() )
551  GRAPHENE_TRY_NOTIFY( new_objects, new_ids, new_accounts_impacted)
552  }
553 
554  // Changed
555  if( !changed_objects.empty() )
556  {
557  vector<object_id_type> changed_ids; changed_ids.reserve(head_undo.old_values.size());
558  flat_set<account_id_type> changed_accounts_impacted;
559  for( const auto& item : head_undo.old_values )
560  {
561  changed_ids.push_back(item.first);
562  get_relevant_accounts(item.second.get(), changed_accounts_impacted,
563  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
564  }
565 
566  if( changed_ids.size() )
567  GRAPHENE_TRY_NOTIFY( changed_objects, changed_ids, changed_accounts_impacted)
568  }
569 
570  // Removed
571  if( !removed_objects.empty() )
572  {
573  vector<object_id_type> removed_ids; removed_ids.reserve( head_undo.removed.size() );
574  vector<const object*> removed; removed.reserve( head_undo.removed.size() );
575  flat_set<account_id_type> removed_accounts_impacted;
576  for( const auto& item : head_undo.removed )
577  {
578  removed_ids.emplace_back( item.first );
579  auto obj = item.second.get();
580  removed.emplace_back( obj );
581  get_relevant_accounts(obj, removed_accounts_impacted,
582  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
583  }
584 
585  if( removed_ids.size() )
586  GRAPHENE_TRY_NOTIFY( removed_objects, removed_ids, removed, removed_accounts_impacted )
587  }
588  }
589 } catch( const graphene::chain::plugin_exception& e ) {
590  elog( "Caught plugin exception: ${e}", ("e", e.to_detail_string() ) );
591  throw;
592 } FC_CAPTURE_AND_LOG( (0) ) }
593 
594 } } // namespace graphene::chain
void operator()(const asset_claim_pool_operation &op)
Definition: db_notify.cpp:49
void operator()(const asset_update_bitasset_operation &op)
Definition: db_notify.cpp:120
account_id_type fee_payer() const
Definition: transfer.hpp:64
Tracks the balance of a single account/asset pairThis object is indexed on owner and asset_type so th...
account_id_type fee_payer() const
who will pay the fee
Definition: htlc.hpp:82
account_id_type fee_payer() const
Definition: fba.hpp:40
Create a committee_member object, as a bid to hold a committee_member seat on the network...
account_id_type fee_payer() const
Definition: worker.hpp:92
account_id_type withdraw_from_account
Must match withdraw_permission->withdraw_from_account.
Update a committee_member object.Currently the only field which can be updated is the url field...
Update the set of feed-producing accounts for a BitAssetBitAssets have price feeds selected by taking...
Definition: asset_ops.hpp:384
void operator()(const asset_create_operation &op)
Definition: db_notify.cpp:105
Manage an account&#39;s membership statusThis operation is used to upgrade an account to a member...
Definition: account.hpp:234
account_id_type from
Account to transfer asset from.
Definition: transfer.hpp:87
database object to store HTLCs
Definition: htlc_object.hpp:40
void operator()(const account_transfer_operation &op)
Definition: db_notify.cpp:101
account_id_type authorized_account
The account authorized to make withdrawals from withdraw_from_account.
void operator()(const account_update_operation &op)
Definition: db_notify.cpp:84
flat_set< account_id_type > required_auths
Definition: custom.hpp:47
vector< operation > operations
Definition: transaction.hpp:89
void add_authority_accounts(flat_set< account_id_type > &result, const authority &a)
Definition: authority.cpp:31
void operator()(const htlc_extend_operation &op)
Definition: db_notify.cpp:287
tracks the history of all logical operations on blockchain stateAll operations and virtual operations...
void operator()(const blind_transfer_operation &op)
Definition: db_notify.cpp:249
void operator()(const withdraw_permission_delete_operation &op)
Definition: db_notify.cpp:193
void operator()(const limit_order_create_operation &op)
Definition: db_notify.cpp:53
tracks a blinded balance commitment
void operator()(const proposal_update_operation &op)
Definition: db_notify.cpp:170
Definition: api.cpp:56
Delete an existing withdrawal permissionThis operation cancels a withdrawal permission, thus preventing any future withdrawals using that permission.
#define elog(FORMAT,...)
Definition: logger.hpp:129
void operator()(const account_whitelist_operation &op)
Definition: db_notify.cpp:92
Create a witness object, as a bid to hold a witness position on the network.Accounts which wish to be...
Definition: witness.hpp:37
used to transfer accumulated fees back to the issuer&#39;s balance.
Definition: asset_ops.hpp:482
The proposal_delete_operation deletes an existing transaction proposalThis operation allows the early...
Definition: proposal.hpp:156
Update an existing account.
Definition: account.hpp:135
void operator()(const asset_publish_feed_operation &op)
Definition: db_notify.cpp:149
account_id_type fee_payer() const
Definition: witness.hpp:47
void operator()(const asset_reserve_operation &op)
Definition: db_notify.cpp:133
void operator()(const balance_claim_operation &op)
Definition: db_notify.cpp:233
tracks debt and call price information
void operator()(const proposal_create_operation &op)
Definition: db_notify.cpp:161
account_id_type fee_payer() const
Definition: market.hpp:189
a node in a linked list of operation_history_objectsAccount history is important for users and wallet...
void get_relevant_accounts(const object *obj, flat_set< account_id_type > &accounts, bool ignore_custom_operation_required_auths)
Definition: db_notify.cpp:357
void operator()(const fill_order_operation &op)
Definition: db_notify.cpp:69
optional< authority > active
New active authority. This can be updated by the current active authority.
Definition: account.hpp:157
Schedules a market-issued asset for automatic settlementHolders of market-issued assests may request ...
Definition: asset_ops.hpp:226
void operator()(const custom_authority_update_operation &op)
Definition: db_notify.cpp:300
optional< authority > owner
New owner authority. If set, this operation requires owner authority to execute.
Definition: account.hpp:155
groups operations that should be applied atomically
Definition: transaction.hpp:68
void operator()(const vesting_balance_create_operation &op)
Definition: db_notify.cpp:210
get_impacted_account_visitor(flat_set< account_id_type > &impact, bool ignore_custom_operation_required_auths)
Definition: db_notify.cpp:34
void operator()(const liquidity_pool_delete_operation &op)
Definition: db_notify.cpp:322
visitor::result_type visit(visitor &v)
Updates an existing ticket.
Definition: ticket.hpp:66
Withdraw from an account which has published a withdrawal permissionThis operation is used to withdra...
provides a generic way to add higher level protocols on top of witness consensusThere is no validatio...
Definition: custom.hpp:38
Publish price feeds for market-issued assetsPrice feed providers use this operation to publish their ...
Definition: asset_ops.hpp:415
void operator()(const committee_member_update_operation &op)
Definition: db_notify.cpp:202
void operator()(const witness_update_operation &op)
Definition: db_notify.cpp:157
#define FC_CAPTURE_AND_LOG(...)
Definition: exception.hpp:437
Allows the issuer of an asset to transfer an asset from any account to any account if they have overr...
Definition: transfer.hpp:77
void operator()(const ticket_update_operation &op)
Definition: db_notify.cpp:314
void operator()(const asset_issue_operation &op)
Definition: db_notify.cpp:128
account_id_type fee_payer() const
Definition: custom.hpp:51
Tracks account custom authorities.
The proposal_create_operation creates a transaction proposal, for use in multi-sig scenariosCreates a...
Definition: proposal.hpp:70
void operator()(const committee_member_update_global_parameters_operation &op)
Definition: db_notify.cpp:206
void operator()(const liquidity_pool_deposit_operation &op)
Definition: db_notify.cpp:326
void operator()(const account_upgrade_operation &op)
Definition: db_notify.cpp:97
account_id_type authorized_account
The account authorized to make withdrawals. Must match permission_to_update->authorized_account.
void operator()(const htlc_redeem_operation &op)
Definition: db_notify.cpp:277
void operator()(const asset_update_operation &op)
Definition: db_notify.cpp:109
Grants another account authority to withdraw a limited amount of funds per interval.
used to take an asset out of circulation, returning to the issuer
Definition: asset_ops.hpp:466
Claim a balance in a balance_object.
Definition: balance.hpp:38
void operator()(const liquidity_pool_exchange_operation &op)
Definition: db_notify.cpp:334
account_id_type fee_payer() const
Definition: market.hpp:165
account_id_type fee_payer() const
Definition: market.hpp:212
Transfers an amount of one asset from one account to another.
Definition: transfer.hpp:45
object_id_type id
Definition: object.hpp:69
assert that some conditions are true.This operation performs no changes to the database state...
Definition: assert.hpp:93
Converts blinded/stealth balance to a public account balance.
void operator()(const worker_create_operation &op)
Definition: db_notify.cpp:219
account_id_type referrer
This account receives a portion of the fee split between registrar and referrer. Must be a member...
Definition: account.hpp:103
void operator()(const asset_settle_cancel_operation &op)
Definition: db_notify.cpp:264
void operator()(const assert_operation &op)
Definition: db_notify.cpp:229
account_id_type fee_payer() const
Who is to pay the fee.
Definition: htlc.hpp:116
void operator()(const asset_global_settle_operation &op)
Definition: db_notify.cpp:145
account_id_type fee_payer() const
Who is to pay the fee.
Definition: htlc.hpp:179
void transaction_get_impacted_accounts(const transaction &tx, flat_set< account_id_type > &result, bool ignore_custom_operation_required_auths)
Definition: db_notify.cpp:350
Update a witness object&#39;s URL and block signing key.
Definition: witness.hpp:55
Create a vesting balance.The chain allows a user to create a vesting balance. Normally, vesting balances are created automatically as part of cashback and worker operations. This operation allows vesting balances to be created manually as well.
Definition: vesting.hpp:74
tracks bitassets scheduled for force settlement at some point in the future.
void operator()(const custom_operation &op)
Definition: db_notify.cpp:223
instructs the blockchain to attempt to sell one asset for anotherThe blockchain will atempt to sell a...
Definition: market.hpp:48
Update options specific to BitAssetsBitAssets have some options which are not relevant to other asset...
Definition: asset_ops.hpp:353
#define FC_ASSERT(TEST,...)
Checks a condition and throws an assert_exception if the test is FALSE.
Definition: exception.hpp:345
account_id_type fee_payer() const
Definition: witness.hpp:72
optional< authority > new_auth
Change to the authentication for the custom authority.
adds a signature to a transaction
account_id_type fee_payer() const
Definition: assert.hpp:103
void operator()(const ticket_create_operation &op)
Definition: db_notify.cpp:310
account_id_type fee_payer() const
Definition: htlc.hpp:198
Update options common to all assetsThere are a number of options which all assets in the network use...
Definition: asset_ops.hpp:307
void operator()(const vesting_balance_withdraw_operation &op)
Definition: db_notify.cpp:215
bids of collateral for debt after a black swan
uint8_t space() const
Definition: object_id.hpp:47
account_id_type fee_payer() const
Definition: ticket.hpp:78
void operator()(const asset_update_feed_producers_operation &op)
Definition: db_notify.cpp:124
void operator()(const account_create_operation &op)
Definition: db_notify.cpp:77
account_id_type owner
Who is able to withdraw the balance.
Definition: vesting.hpp:80
Transfers BTS from the fee pool of a specified asset back to the issuer&#39;s balance.
Definition: asset_ops.hpp:554
This operation is used to whitelist and blacklist accounts, primarily for transacting in whitelisted ...
Definition: account.hpp:196
void operator()(const htlc_create_operation &op)
Definition: db_notify.cpp:272
void operator()(const liquidity_pool_create_operation &op)
Definition: db_notify.cpp:318
Withdraw from a vesting balance.Withdrawal from a not-completely-mature vesting balance will result i...
Definition: vesting.hpp:101
void operator()(const transfer_to_blind_operation &op)
Definition: db_notify.cpp:243
void operator()(const custom_authority_create_operation &op)
Definition: db_notify.cpp:295
void operator()(const custom_authority_delete_operation &op)
Definition: db_notify.cpp:306
void operator()(const committee_member_create_operation &op)
Definition: db_notify.cpp:198
Update an existing withdraw permissionThis oeration is used to update the settings for an existing wi...
void operator()(const transfer_from_blind_operation &op)
Definition: db_notify.cpp:257
void operator()(const withdraw_permission_create_operation &op)
Definition: db_notify.cpp:178
void operator()(const bid_collateral_operation &op)
Definition: db_notify.cpp:65
tracks the parameters of an assetAll assets have a globally unique symbol name that controls how they...
account_id_type to
Account to transfer asset to.
Definition: transfer.hpp:89
#define GRAPHENE_TRY_NOTIFY(signal,...)
Definition: exceptions.hpp:92
The proposal_update_operation updates an existing transaction proposalThis operation allows accounts ...
Definition: proposal.hpp:119
void operator()(const override_transfer_operation &op)
Definition: db_notify.cpp:237
Definition: api.hpp:15
Worker object contains the details of a blockchain worker. See The Blockchain Worker System for detai...
void operator()(const liquidity_pool_withdraw_operation &op)
Definition: db_notify.cpp:330
void operator()(const transfer_operation &op)
Definition: db_notify.cpp:40
void operator()(const withdraw_permission_update_operation &op)
Definition: db_notify.cpp:183
authority auth
Authentication requirements for the custom authority.
void operator()(const limit_order_cancel_operation &op)
Definition: db_notify.cpp:57
account_id_type fee_payer() const
Definition: asset_ops.hpp:455
account_id_type authorized_account
The account previously authorized to make withdrawals. Must match withdrawal_permission->authorized_a...
void operator()(const asset_settle_operation &op)
Definition: db_notify.cpp:141
void operator()(const call_order_update_operation &op)
Definition: db_notify.cpp:61
void operator()(const witness_create_operation &op)
Definition: db_notify.cpp:153
Update issuer of an assetAn issuer has general administrative power of an asset and in some cases als...
Definition: asset_ops.hpp:518
Used by committee_members to update the global parameters of the blockchain.This operation allows the...
void operator()(const asset_fund_fee_pool_operation &op)
Definition: db_notify.cpp:137
void operator()(const fba_distribute_operation &op)
Definition: db_notify.cpp:268
void operator()(const withdraw_permission_claim_operation &op)
Definition: db_notify.cpp:188
void operator()(const execute_bid_operation &op)
Definition: db_notify.cpp:73
transfers the account to another account while clearing the white listIn theory an account can be tra...
Definition: account.hpp:266
tracks information about a committee_member account.A committee_member is responsible for setting blo...
Transfers from blind to blind.
a ticket for governance voting
void operation_get_required_authorities(const operation &op, flat_set< account_id_type > &active, flat_set< account_id_type > &owner, vector< authority > &other, bool ignore_custom_operation_required_auths)
Definition: operations.cpp:103
account_id_type fee_payer() const
Definition: balance.hpp:48
void operator()(const asset_update_issuer_operation &op)
Definition: db_notify.cpp:115
account_id_type to
Account to transfer asset to.
Definition: transfer.hpp:56
Create a new worker object.
Definition: worker.hpp:78
void operator()(const proposal_delete_operation &op)
Definition: db_notify.cpp:174
void operator()(const htlc_redeemed_operation &op)
Definition: db_notify.cpp:281
account_id_type fee_payer() const
Definition: ticket.hpp:58
Create a new withdrawal permissionThis operation creates a withdrawal permission, which allows some a...
void operation_get_impacted_accounts(const operation &op, flat_set< account_id_type > &result, bool ignore_custom_operation_required_auths)
Definition: db_notify.cpp:342
account_id_type account_to_list
The account being opined about.
Definition: account.hpp:211
Converts public account balance to a blinded or stealth balance.
void operator()(const htlc_refund_operation &op)
Definition: db_notify.cpp:291
allows global settling of bitassets (black swan or prediction markets)
Definition: asset_ops.hpp:199
an offer to sell a amount of a asset at a specified exchange rate by a certain timeThis limit_order_o...
optional< account_id_type > new_issuer
If the asset is to be given a new issuer, specify his ID here.
Definition: asset_ops.hpp:331
tracks the approval of a partially approved transaction
void operator()(const asset_claim_fees_operation &op)
Definition: db_notify.cpp:45