BitShares-Core  6.1.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 
25 #include <graphene/chain/hardfork.hpp>
26 
27 using namespace fc;
28 namespace graphene { namespace chain { namespace detail {
29 
30 // TODO: Review all of these, especially no-ops
32 {
33  flat_set<account_id_type>& _impacted;
35 
36  get_impacted_account_visitor( flat_set<account_id_type>& impact, bool ignore_custom_op_required_auths )
37  : _impacted( impact ), _ignore_custom_op_reqd_auths( ignore_custom_op_required_auths )
38  {}
39 
40  using result_type = void;
41 
42  void operator()( const transfer_operation& op )
43  {
44  _impacted.insert( op.to );
45  _impacted.insert( op.fee_payer() ); // from
46  }
48  {
49  _impacted.insert( op.fee_payer() ); // issuer
50  }
52  {
53  _impacted.insert( op.fee_payer() ); // issuer
54  }
56  {
57  _impacted.insert( op.fee_payer() ); // seller
58  }
60  {
61  _impacted.insert( op.fee_payer() ); // fee_paying_account
62  }
64  {
65  _impacted.insert( op.fee_payer() ); // funding_account
66  }
68  {
69  _impacted.insert( op.fee_payer() ); // bidder
70  }
71  void operator()( const fill_order_operation& op )
72  {
73  _impacted.insert( op.fee_payer() ); // account_id
74  }
76  {
77  _impacted.insert( op.fee_payer() ); // bidder
78  }
80  {
81  _impacted.insert( op.fee_payer() ); // registrar
82  _impacted.insert( op.referrer );
83  add_authority_accounts( _impacted, op.owner );
84  add_authority_accounts( _impacted, op.active );
85  }
87  {
88  _impacted.insert( op.fee_payer() ); // account
89  if( op.owner )
90  add_authority_accounts( _impacted, *(op.owner) );
91  if( op.active )
92  add_authority_accounts( _impacted, *(op.active) );
93  }
95  {
96  _impacted.insert( op.fee_payer() ); // authorizing_account
97  _impacted.insert( op.account_to_list );
98  }
100  {
101  _impacted.insert( op.fee_payer() ); // account_to_upgrade
102  }
104  {
105  _impacted.insert( op.fee_payer() ); // account_id
106  }
108  {
109  _impacted.insert( op.fee_payer() ); // issuer
110  }
112  {
113  _impacted.insert( op.fee_payer() ); // issuer
114  if( op.new_issuer )
115  _impacted.insert( *(op.new_issuer) );
116  }
118  {
119  _impacted.insert( op.fee_payer() ); // issuer
120  _impacted.insert( op.new_issuer );
121  }
123  {
124  _impacted.insert( op.fee_payer() ); // issuer
125  }
127  {
128  _impacted.insert( op.fee_payer() ); // issuer
129  }
131  {
132  _impacted.insert( op.fee_payer() ); // issuer
133  _impacted.insert( op.issue_to_account );
134  }
136  {
137  _impacted.insert( op.fee_payer() ); // payer
138  }
140  {
141  _impacted.insert( op.fee_payer() ); // from_account
142  }
144  {
145  _impacted.insert( op.fee_payer() ); // account
146  }
148  {
149  _impacted.insert( op.fee_payer() ); // issuer
150  }
152  {
153  _impacted.insert( op.fee_payer() ); // publisher
154  }
156  {
157  _impacted.insert( op.fee_payer() ); // witness_account
158  }
160  {
161  _impacted.insert( op.fee_payer() ); // witness_account
162  }
164  {
165  _impacted.insert( op.fee_payer() ); // fee_paying_account
166  vector<authority> other;
167  for( const auto& proposed_op : op.proposed_ops )
168  operation_get_required_authorities( proposed_op.op, _impacted, _impacted, other,
169  _ignore_custom_op_reqd_auths );
170  for( const auto& o : other )
171  add_authority_accounts( _impacted, o );
172  }
174  {
175  _impacted.insert( op.fee_payer() ); // fee_paying_account
176  }
178  {
179  _impacted.insert( op.fee_payer() ); // fee_paying_account
180  }
182  {
183  _impacted.insert( op.fee_payer() ); // withdraw_from_account
184  _impacted.insert( op.authorized_account );
185  }
187  {
188  _impacted.insert( op.fee_payer() ); // withdraw_from_account
189  _impacted.insert( op.authorized_account );
190  }
192  {
193  _impacted.insert( op.fee_payer() ); // withdraw_to_account
194  _impacted.insert( op.withdraw_from_account );
195  }
197  {
198  _impacted.insert( op.fee_payer() ); // withdraw_from_account
199  _impacted.insert( op.authorized_account );
200  }
202  {
203  _impacted.insert( op.fee_payer() ); // committee_member_account
204  }
206  {
207  _impacted.insert( op.fee_payer() ); // committee_member_account
208  }
210  {
211  _impacted.insert( op.fee_payer() ); // account_id_type()
212  }
214  {
215  _impacted.insert( op.fee_payer() ); // creator
216  _impacted.insert( op.owner );
217  }
219  {
220  _impacted.insert( op.fee_payer() ); // owner
221  }
223  {
224  _impacted.insert( op.fee_payer() ); // owner
225  }
226  void operator()( const custom_operation& op )
227  {
228  _impacted.insert( op.fee_payer() ); // payer
229  if( !_ignore_custom_op_reqd_auths )
230  _impacted.insert( op.required_auths.begin(), op.required_auths.end() );
231  }
232  void operator()( const assert_operation& op )
233  {
234  _impacted.insert( op.fee_payer() ); // fee_paying_account
235  }
237  {
238  _impacted.insert( op.fee_payer() ); // deposit_to_account
239  }
241  {
242  _impacted.insert( op.to );
243  _impacted.insert( op.from );
244  _impacted.insert( op.fee_payer() ); // issuer
245  }
247  {
248  _impacted.insert( op.fee_payer() ); // from
249  for( const auto& out : op.outputs )
250  add_authority_accounts( _impacted, out.owner );
251  }
253  {
254  _impacted.insert( op.fee_payer() ); // GRAPHENE_TEMP_ACCOUNT
255  for( const auto& in : op.inputs )
256  add_authority_accounts( _impacted, in.owner );
257  for( const auto& out : op.outputs )
258  add_authority_accounts( _impacted, out.owner );
259  }
261  {
262  _impacted.insert( op.fee_payer() ); // GRAPHENE_TEMP_ACCOUNT
263  _impacted.insert( op.to );
264  for( const auto& in : op.inputs )
265  add_authority_accounts( _impacted, in.owner );
266  }
268  {
269  _impacted.insert( op.fee_payer() ); // account
270  }
272  {
273  _impacted.insert( op.fee_payer() ); // account_id
274  }
276  {
277  _impacted.insert( op.fee_payer() );
278  _impacted.insert( op.to );
279  }
281  {
282  _impacted.insert( op.fee_payer() );
283  }
285  {
286  _impacted.insert( op.from );
287  if ( op.to != op.redeemer )
288  _impacted.insert( op.to );
289  }
291  {
292  _impacted.insert( op.fee_payer() );
293  }
295  {
296  _impacted.insert( op.fee_payer() );
297  }
299  {
300  _impacted.insert( op.fee_payer() ); // account
301  add_authority_accounts( _impacted, op.auth );
302  }
304  {
305  _impacted.insert( op.fee_payer() ); // account
306  if ( op.new_auth )
307  add_authority_accounts(_impacted, *op.new_auth);
308  }
310  {
311  _impacted.insert( op.fee_payer() ); // account
312  }
314  {
315  _impacted.insert( op.fee_payer() ); // account
316  }
318  {
319  _impacted.insert( op.fee_payer() ); // account
320  }
322  {
323  _impacted.insert( op.fee_payer() ); // account
324  }
326  {
327  _impacted.insert( op.fee_payer() ); // account
328  }
330  {
331  _impacted.insert( op.fee_payer() ); // account
332  }
334  {
335  _impacted.insert( op.fee_payer() ); // account
336  }
338  {
339  _impacted.insert( op.fee_payer() ); // account
340  }
342  {
343  _impacted.insert( op.fee_payer() ); // owner_account
344  }
346  {
347  _impacted.insert( op.fee_payer() ); // owner_account
348  }
350  {
351  _impacted.insert( op.fee_payer() ); // owner_account
352  }
354  {
355  _impacted.insert( op.fee_payer() ); // borrower
356  }
358  {
359  _impacted.insert( op.fee_payer() ); // account
360  }
362  {
363  _impacted.insert( op.fee_payer() ); // owner_account
364  }
366  {
367  _impacted.insert( op.fee_payer() ); // owner_account
368  }
370  {
371  _impacted.insert( op.fee_payer() ); // owner_account
372  }
374  {
375  _impacted.insert( op.fee_payer() ); // borrower
376  }
378  {
379  _impacted.insert( op.fee_payer() ); // account
380  }
382  {
383  _impacted.insert( op.offer_owner );
384  _impacted.insert( op.borrower );
385  }
386 };
387 
388 } // namespace detail
389 
390 // Declared in impacted.hpp
391 void operation_get_impacted_accounts( const operation& op, flat_set<account_id_type>& result,
392  bool ignore_custom_op_required_auths )
393 {
394  detail::get_impacted_account_visitor vtor( result, ignore_custom_op_required_auths );
395  op.visit( vtor );
396 }
397 
398 // Declared in impacted.hpp, although only used in this file
399 void transaction_get_impacted_accs( const transaction& tx, flat_set<account_id_type>& result,
400  bool ignore_custom_op_required_auths )
401 {
402  for( const auto& op : tx.operations )
403  operation_get_impacted_accounts( op, result, ignore_custom_op_required_auths );
404 }
405 
406 static void get_relevant_accounts( const object* obj, flat_set<account_id_type>& accounts,
407  bool ignore_custom_op_required_auths ) {
408  FC_ASSERT( obj != nullptr, "Internal error: get_relevant_accounts called with nullptr" ); // This should not happen
409  if( obj->id.space() == protocol_ids )
410  {
411  switch( (object_type)obj->id.type() )
412  {
413  case null_object_type:
414  case base_object_type:
415  return;
416  case account_object_type:
417  accounts.insert( account_id_type(obj->id) );
418  break;
419  case asset_object_type:{
420  const auto* aobj = dynamic_cast<const asset_object*>(obj);
421  accounts.insert( aobj->issuer );
422  break;
423  } case force_settlement_object_type:{
424  const auto* aobj = dynamic_cast<const force_settlement_object*>(obj);
425  accounts.insert( aobj->owner );
426  break;
427  } case committee_member_object_type:{
428  const auto* aobj = dynamic_cast<const committee_member_object*>(obj);
429  accounts.insert( aobj->committee_member_account );
430  break;
431  } case witness_object_type:{
432  const auto* aobj = dynamic_cast<const witness_object*>(obj);
433  accounts.insert( aobj->witness_account );
434  break;
435  } case limit_order_object_type:{
436  const auto* aobj = dynamic_cast<const limit_order_object*>(obj);
437  accounts.insert( aobj->seller );
438  break;
439  } case call_order_object_type:{
440  const auto* aobj = dynamic_cast<const call_order_object*>(obj);
441  accounts.insert( aobj->borrower );
442  break;
443  } case custom_object_type:
444  break;
445  case proposal_object_type:{
446  const auto* aobj = dynamic_cast<const proposal_object*>(obj);
447  transaction_get_impacted_accs( aobj->proposed_transaction, accounts,
448  ignore_custom_op_required_auths );
449  break;
450  } case operation_history_object_type:{
451  const auto* aobj = dynamic_cast<const operation_history_object*>(obj);
452  operation_get_impacted_accounts( aobj->op, accounts,
453  ignore_custom_op_required_auths );
454  break;
455  } case withdraw_permission_object_type:{
456  const auto* aobj = dynamic_cast<const withdraw_permission_object*>(obj);
457  accounts.insert( aobj->withdraw_from_account );
458  accounts.insert( aobj->authorized_account );
459  break;
460  } case vesting_balance_object_type:{
461  const auto* aobj = dynamic_cast<const vesting_balance_object*>(obj);
462  accounts.insert( aobj->owner );
463  break;
464  } case worker_object_type:{
465  const auto* aobj = dynamic_cast<const worker_object*>(obj);
466  accounts.insert( aobj->worker_account );
467  break;
468  } case balance_object_type:
470  break;
471  case htlc_object_type:{
472  const auto* htlc_obj = dynamic_cast<const htlc_object*>(obj);
473  accounts.insert( htlc_obj->transfer.from );
474  accounts.insert( htlc_obj->transfer.to );
475  break;
476  } case custom_authority_object_type:{
477  const auto* cust_auth_obj = dynamic_cast<const custom_authority_object*>( obj );
478  accounts.insert( cust_auth_obj->account );
479  add_authority_accounts( accounts, cust_auth_obj->auth );
480  break;
481  } case ticket_object_type:{
482  const auto* aobj = dynamic_cast<const ticket_object*>( obj );
483  accounts.insert( aobj->account );
484  break;
485  } case liquidity_pool_object_type:
486  // no account info in the object although it does have an owner
487  break;
488  case samet_fund_object_type:{
489  const auto* aobj = dynamic_cast<const samet_fund_object*>( obj );
490  accounts.insert( aobj->owner_account );
491  break;
492  } case credit_offer_object_type:{
493  const auto* aobj = dynamic_cast<const credit_offer_object*>( obj );
494  accounts.insert( aobj->owner_account );
495  break;
496  } case credit_deal_object_type:{
497  const auto* aobj = dynamic_cast<const credit_deal_object*>( obj );
498  accounts.insert( aobj->offer_owner );
499  accounts.insert( aobj->borrower );
500  break;
501  }
502  // Do not have a default fallback so that there will be a compiler warning when a new type is added
503  }
504  }
505  else if( obj->id.space() == implementation_ids )
506  {
507  switch( (impl_object_type)obj->id.type() )
508  {
509  case impl_global_property_object_type:
510  break;
511  case impl_dynamic_global_property_object_type:
512  break;
513  case impl_reserved0_object_type:
514  break;
515  case impl_asset_dynamic_data_object_type:
516  break;
517  case impl_asset_bitasset_data_object_type:
518  break;
519  case impl_account_balance_object_type:{
520  const auto* aobj = dynamic_cast<const account_balance_object*>(obj);
521  accounts.insert( aobj->owner );
522  break;
523  } case impl_account_statistics_object_type:{
524  const auto* aobj = dynamic_cast<const account_statistics_object*>(obj);
525  accounts.insert( aobj->owner );
526  break;
527  } case impl_transaction_history_object_type:{
528  const auto* aobj = dynamic_cast<const transaction_history_object*>(obj);
529  transaction_get_impacted_accs( aobj->trx, accounts,
530  ignore_custom_op_required_auths );
531  break;
532  } case impl_blinded_balance_object_type:{
533  const auto* aobj = dynamic_cast<const blinded_balance_object*>(obj);
534  for( const auto& a : aobj->owner.account_auths )
535  accounts.insert( a.first );
536  break;
537  } case impl_block_summary_object_type:
538  break;
539  case impl_account_history_object_type: {
540  const auto* aobj = dynamic_cast<const account_history_object*>(obj);
541  accounts.insert( aobj->account );
542  break;
543  } case impl_chain_property_object_type:
544  break;
545  case impl_witness_schedule_object_type:
546  break;
547  case impl_budget_record_object_type:
548  break;
549  case impl_special_authority_object_type:
550  break;
551  case impl_buyback_object_type:
552  break;
553  case impl_fba_accumulator_object_type:
554  break;
555  case impl_collateral_bid_object_type:{
556  const auto* aobj = dynamic_cast<const collateral_bid_object*>(obj);
557  accounts.insert( aobj->bidder );
558  break;
559  } case impl_credit_deal_summary_object_type:{
560  const auto* aobj = dynamic_cast<const credit_deal_summary_object*>(obj);
561  accounts.insert( aobj->offer_owner );
562  accounts.insert( aobj->borrower );
563  break;
564  }
565  // Do not have a default fallback so that there will be a compiler warning when a new type is added
566  }
567  }
568 } // end get_relevant_accounts( const object* obj, flat_set<account_id_type>& accounts )
569 
570 void database::notify_applied_block( const signed_block& block )
571 {
572  GRAPHENE_TRY_NOTIFY( applied_block, block )
573 }
574 
575 void database::notify_on_pending_transaction( const signed_transaction& tx )
576 {
577  GRAPHENE_TRY_NOTIFY( on_pending_transaction, tx )
578 }
579 
580 void database::notify_changed_objects()
581 { try {
582  if( _undo_db.enabled() )
583  {
584  const auto& head_undo = _undo_db.head();
585  auto chain_time = head_block_time();
586 
587  // New
588  if( !new_objects.empty() )
589  {
590  vector<object_id_type> new_ids;
591  new_ids.reserve(head_undo.new_ids.size());
592  flat_set<account_id_type> new_accounts_impacted;
593  for( const auto& item : head_undo.new_ids )
594  {
595  new_ids.push_back(item);
596  auto* obj = find_object(item);
597  if(obj != nullptr)
598  get_relevant_accounts(obj, new_accounts_impacted,
599  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
600  }
601 
602  if( !new_ids.empty() )
603  GRAPHENE_TRY_NOTIFY( new_objects, new_ids, new_accounts_impacted)
604  }
605 
606  // Changed
607  if( !changed_objects.empty() )
608  {
609  vector<object_id_type> changed_ids;
610  changed_ids.reserve(head_undo.old_values.size());
611  flat_set<account_id_type> changed_accounts_impacted;
612  for( const auto& item : head_undo.old_values )
613  {
614  changed_ids.push_back(item.first);
615  get_relevant_accounts(item.second.get(), changed_accounts_impacted,
616  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
617  }
618 
619  if( !changed_ids.empty() )
620  GRAPHENE_TRY_NOTIFY( changed_objects, changed_ids, changed_accounts_impacted)
621  }
622 
623  // Removed
624  if( !removed_objects.empty() )
625  {
626  vector<object_id_type> removed_ids;
627  removed_ids.reserve( head_undo.removed.size() );
628  vector<const object*> removed;
629  removed.reserve( head_undo.removed.size() );
630  flat_set<account_id_type> removed_accounts_impacted;
631  for( const auto& item : head_undo.removed )
632  {
633  removed_ids.emplace_back( item.first );
634  auto* obj = item.second.get();
635  removed.emplace_back( obj );
636  get_relevant_accounts(obj, removed_accounts_impacted,
637  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
638  }
639 
640  if( !removed_ids.empty() )
641  GRAPHENE_TRY_NOTIFY( removed_objects, removed_ids, removed, removed_accounts_impacted )
642  }
643  }
644 } catch( const graphene::chain::plugin_exception& e ) {
645  elog( "Caught plugin exception: ${e}", ("e", e.to_detail_string() ) );
646  throw;
647 } FC_CAPTURE_AND_LOG( (0) ) }
648 
649 } } // namespace graphene::chain
void operator()(const asset_claim_pool_operation &op)
Definition: db_notify.cpp:51
void operator()(const asset_update_bitasset_operation &op)
Definition: db_notify.cpp:122
account_id_type fee_payer() const
Definition: custom.hpp:51
Tracks the balance of a single account/asset pairThis object is indexed on owner and asset_type so th...
A credit offer is a fund that can be used by other accounts who provide certain collateral.
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:93
get_impacted_account_visitor(flat_set< account_id_type > &impact, bool ignore_custom_op_required_auths)
Definition: db_notify.cpp:36
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:430
void operator()(const asset_create_operation &op)
Definition: db_notify.cpp:107
void operator()(const credit_offer_update_operation &op)
Definition: db_notify.cpp:369
Manage an account&#39;s membership statusThis operation is used to upgrade an account to a member...
Definition: account.hpp:235
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:103
account_id_type authorized_account
The account authorized to make withdrawals from withdraw_from_account.
account_id_type borrower
The account who repays to the credit offer.
void operator()(const account_update_operation &op)
Definition: db_notify.cpp:86
account_id_type fee_payer() const
Definition: market.hpp:166
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:290
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:252
A credit deal describes the details of a borrower&#39;s borrowing of funds from a credit offer...
void operator()(const withdraw_permission_delete_operation &op)
Definition: db_notify.cpp:196
void operator()(const limit_order_create_operation &op)
Definition: db_notify.cpp:55
tracks a blinded balance commitment
void operator()(const proposal_update_operation &op)
Definition: db_notify.cpp:173
Definition: api.cpp:48
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:94
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:529
The proposal_delete_operation deletes an existing transaction proposalThis operation allows the early...
Definition: proposal.hpp:156
Update an existing account.
Definition: account.hpp:136
account_id_type fee_payer() const
Definition: htlc.hpp:198
void operator()(const asset_publish_feed_operation &op)
Definition: db_notify.cpp:151
void operator()(const asset_reserve_operation &op)
Definition: db_notify.cpp:135
void operator()(const balance_claim_operation &op)
Definition: db_notify.cpp:236
tracks debt and call price information
void operator()(const proposal_create_operation &op)
Definition: db_notify.cpp:163
void operator()(const samet_fund_borrow_operation &op)
Definition: db_notify.cpp:353
void operator()(const fill_order_operation &op)
Definition: db_notify.cpp:71
A credit deal summary describes the summary of a borrower&#39;s borrowing of funds from a credit offer...
optional< authority > active
New active authority. This can be updated by the current active authority.
Definition: account.hpp:158
Schedules a market-issued asset for automatic settlementHolders of market-issued assests may request ...
Definition: asset_ops.hpp:267
void operator()(const custom_authority_update_operation &op)
Definition: db_notify.cpp:303
account_id_type fee_payer() const
Definition: ticket.hpp:78
optional< authority > owner
New owner authority. If set, this operation requires owner authority to execute.
Definition: account.hpp:156
void operator()(const credit_deal_repay_operation &op)
Definition: db_notify.cpp:377
groups operations that should be applied atomically
Definition: transaction.hpp:69
void operator()(const vesting_balance_create_operation &op)
Definition: db_notify.cpp:213
void operator()(const liquidity_pool_delete_operation &op)
Definition: db_notify.cpp:325
account_id_type offer_owner
Owner of the credit offer.
visitor::result_type visit(visitor &v)
void transaction_get_impacted_accs(const transaction &tx, flat_set< account_id_type > &result, bool ignore_custom_op_required_auths)
Definition: db_notify.cpp:399
Accept a creadit offer and create a credit deal.
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:462
Create a new SameT Fund objectA SameT Fund is a fund which can be used by a borrower and have to be r...
Definition: samet_fund.hpp:36
void operator()(const committee_member_update_operation &op)
Definition: db_notify.cpp:205
void operator()(const witness_update_operation &op)
Definition: db_notify.cpp:159
#define FC_CAPTURE_AND_LOG(...)
Definition: exception.hpp:438
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:317
void operator()(const asset_issue_operation &op)
Definition: db_notify.cpp:130
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:209
void operator()(const liquidity_pool_deposit_operation &op)
Definition: db_notify.cpp:329
void operator()(const account_upgrade_operation &op)
Definition: db_notify.cpp:99
void operator()(const samet_fund_create_operation &op)
Definition: db_notify.cpp:341
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:280
void operator()(const asset_update_operation &op)
Definition: db_notify.cpp:111
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:513
Claim a balance in a graphene::chain::balance_object.
Definition: balance.hpp:40
void operator()(const liquidity_pool_exchange_operation &op)
Definition: db_notify.cpp:337
Transfers an amount of one asset from one account to another.
Definition: transfer.hpp:45
object_id_type id
Definition: object.hpp:69
account_id_type fee_payer() const
Definition: ticket.hpp:58
assert that some conditions are true.This operation performs no changes to the database state...
Definition: assert.hpp:93
void operator()(const credit_offer_create_operation &op)
Definition: db_notify.cpp:361
Converts blinded/stealth balance to a public account balance.
void operator()(const worker_create_operation &op)
Definition: db_notify.cpp:222
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:267
void operator()(const assert_operation &op)
Definition: db_notify.cpp:232
void operator()(const asset_global_settle_operation &op)
Definition: db_notify.cpp:147
a node in a linked list of operation_history_objectsAccount history is important for users and wallet...
account_id_type fee_payer() const
who will pay the fee
Definition: htlc.hpp:82
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:226
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:398
#define FC_ASSERT(TEST,...)
Checks a condition and throws an assert_exception if the test is FALSE.
Definition: exception.hpp:345
optional< authority > new_auth
Change to the authentication for the custom authority.
adds a signature to a transaction
A credit deal expired without being fully repaid.
account_id_type fee_payer() const
Who is to pay the fee.
Definition: htlc.hpp:116
void operator()(const samet_fund_update_operation &op)
Definition: db_notify.cpp:349
void operator()(const ticket_create_operation &op)
Definition: db_notify.cpp:313
Update options common to all assetsThere are a number of options which all assets in the network use...
Definition: asset_ops.hpp:351
void operator()(const vesting_balance_withdraw_operation &op)
Definition: db_notify.cpp:218
void operator()(const credit_deal_expired_operation &op)
Definition: db_notify.cpp:381
bids of collateral for debt after a black swan
void operator()(const asset_update_feed_producers_operation &op)
Definition: db_notify.cpp:126
void operator()(const account_create_operation &op)
Definition: db_notify.cpp:79
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:601
This operation is used to whitelist and blacklist accounts, primarily for transacting in whitelisted ...
Definition: account.hpp:197
void operator()(const htlc_create_operation &op)
Definition: db_notify.cpp:275
void operator()(const liquidity_pool_create_operation &op)
Definition: db_notify.cpp:321
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:246
account_id_type fee_payer() const
Definition: market.hpp:213
void operator()(const custom_authority_create_operation &op)
Definition: db_notify.cpp:298
void operator()(const credit_offer_accept_operation &op)
Definition: db_notify.cpp:373
void operator()(const custom_authority_delete_operation &op)
Definition: db_notify.cpp:309
void operator()(const committee_member_create_operation &op)
Definition: db_notify.cpp:201
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:260
void operator()(const withdraw_permission_create_operation &op)
Definition: db_notify.cpp:181
void operator()(const bid_collateral_operation &op)
Definition: db_notify.cpp:67
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
account_id_type fee_payer() const
Definition: assert.hpp:103
#define GRAPHENE_TRY_NOTIFY(signal,...)
Definition: exceptions.hpp:92
account_id_type fee_payer() const
Definition: fba.hpp:40
account_id_type fee_payer() const
Who is to pay the fee.
Definition: htlc.hpp:179
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:240
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:333
void operator()(const transfer_operation &op)
Definition: db_notify.cpp:42
void operator()(const withdraw_permission_update_operation &op)
Definition: db_notify.cpp:186
authority auth
Authentication requirements for the custom authority.
A SameT Fund is a fund which can be used by a borrower and have to be repaid in the same transaction...
void operator()(const limit_order_cancel_operation &op)
Definition: db_notify.cpp:59
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:143
void operator()(const call_order_update_operation &op)
Definition: db_notify.cpp:63
void operator()(const witness_create_operation &op)
Definition: db_notify.cpp:155
void operator()(const samet_fund_delete_operation &op)
Definition: db_notify.cpp:345
Update issuer of an assetAn issuer has general administrative power of an asset and in some cases als...
Definition: asset_ops.hpp:565
Used by committee_members to update the global parameters of the blockchain.This operation allows the...
void operator()(const samet_fund_repay_operation &op)
Definition: db_notify.cpp:357
void operator()(const asset_fund_fee_pool_operation &op)
Definition: db_notify.cpp:139
void operator()(const fba_distribute_operation &op)
Definition: db_notify.cpp:271
void operator()(const withdraw_permission_claim_operation &op)
Definition: db_notify.cpp:191
void operator()(const execute_bid_operation &op)
Definition: db_notify.cpp:75
transfers the account to another account while clearing the white listIn theory an account can be tra...
Definition: account.hpp:267
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 operator()(const credit_offer_delete_operation &op)
Definition: db_notify.cpp:365
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
void operation_get_impacted_accounts(const operation &op, flat_set< account_id_type > &result, bool ignore_custom_op_required_auths)
Definition: db_notify.cpp:391
void operator()(const asset_update_issuer_operation &op)
Definition: db_notify.cpp:117
account_id_type fee_payer() const
Definition: transfer.hpp:64
account_id_type to
Account to transfer asset to.
Definition: transfer.hpp:56
Create a new worker object.
Definition: worker.hpp:79
void operator()(const proposal_delete_operation &op)
Definition: db_notify.cpp:177
void operator()(const htlc_redeemed_operation &op)
Definition: db_notify.cpp:284
Create a new withdrawal permissionThis operation creates a withdrawal permission, which allows some a...
account_id_type account_to_list
The account being opined about.
Definition: account.hpp:212
Converts public account balance to a blinded or stealth balance.
void operator()(const htlc_refund_operation &op)
Definition: db_notify.cpp:294
allows global settling of bitassets (black swan or prediction markets)
Definition: asset_ops.hpp:238
an offer to sell an amount of an asset at a specified exchange rate by a certain timeThe objects are ...
optional< account_id_type > new_issuer
If the asset is to be given a new issuer, specify his ID here.
Definition: asset_ops.hpp:375
Create a new credit offerA credit offer is a fund that can be used by other accounts who provide cert...
tracks the approval of a partially approved transaction
void operator()(const asset_claim_fees_operation &op)
Definition: db_notify.cpp:47