BitShares-Core  4.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 
22 #include <graphene/chain/hardfork.hpp>
23 
24 using namespace fc;
25 namespace graphene { namespace chain { namespace detail {
26 
27 // TODO: Review all of these, especially no-ops
29 {
30  flat_set<account_id_type>& _impacted;
32 
33  get_impacted_account_visitor( flat_set<account_id_type>& impact, bool ignore_custom_operation_required_auths )
34  : _impacted( impact ), _ignore_custom_op_reqd_auths( ignore_custom_operation_required_auths )
35  {}
36 
37  using result_type = void;
38 
39  void operator()( const transfer_operation& op )
40  {
41  _impacted.insert( op.to );
42  _impacted.insert( op.fee_payer() ); // from
43  }
45  {
46  _impacted.insert( op.fee_payer() ); // issuer
47  }
49  {
50  _impacted.insert( op.fee_payer() ); // issuer
51  }
53  {
54  _impacted.insert( op.fee_payer() ); // seller
55  }
57  {
58  _impacted.insert( op.fee_payer() ); // fee_paying_account
59  }
61  {
62  _impacted.insert( op.fee_payer() ); // funding_account
63  }
65  {
66  _impacted.insert( op.fee_payer() ); // bidder
67  }
68  void operator()( const fill_order_operation& op )
69  {
70  _impacted.insert( op.fee_payer() ); // account_id
71  }
73  {
74  _impacted.insert( op.fee_payer() ); // bidder
75  }
77  {
78  _impacted.insert( op.fee_payer() ); // registrar
79  _impacted.insert( op.referrer );
80  add_authority_accounts( _impacted, op.owner );
81  add_authority_accounts( _impacted, op.active );
82  }
84  {
85  _impacted.insert( op.fee_payer() ); // account
86  if( op.owner )
87  add_authority_accounts( _impacted, *(op.owner) );
88  if( op.active )
89  add_authority_accounts( _impacted, *(op.active) );
90  }
92  {
93  _impacted.insert( op.fee_payer() ); // authorizing_account
94  _impacted.insert( op.account_to_list );
95  }
97  {
98  _impacted.insert( op.fee_payer() ); // account_to_upgrade
99  }
101  {
102  _impacted.insert( op.fee_payer() ); // account_id
103  }
105  {
106  _impacted.insert( op.fee_payer() ); // issuer
107  }
109  {
110  _impacted.insert( op.fee_payer() ); // issuer
111  if( op.new_issuer )
112  _impacted.insert( *(op.new_issuer) );
113  }
115  {
116  _impacted.insert( op.fee_payer() ); // issuer
117  _impacted.insert( op.new_issuer );
118  }
120  {
121  _impacted.insert( op.fee_payer() ); // issuer
122  }
124  {
125  _impacted.insert( op.fee_payer() ); // issuer
126  }
128  {
129  _impacted.insert( op.fee_payer() ); // issuer
130  _impacted.insert( op.issue_to_account );
131  }
133  {
134  _impacted.insert( op.fee_payer() ); // payer
135  }
137  {
138  _impacted.insert( op.fee_payer() ); // from_account
139  }
141  {
142  _impacted.insert( op.fee_payer() ); // account
143  }
145  {
146  _impacted.insert( op.fee_payer() ); // issuer
147  }
149  {
150  _impacted.insert( op.fee_payer() ); // publisher
151  }
153  {
154  _impacted.insert( op.fee_payer() ); // witness_account
155  }
157  {
158  _impacted.insert( op.fee_payer() ); // witness_account
159  }
161  {
162  _impacted.insert( op.fee_payer() ); // fee_paying_account
163  vector<authority> other;
164  for( const auto& proposed_op : op.proposed_ops )
165  operation_get_required_authorities( proposed_op.op, _impacted, _impacted, other, _ignore_custom_op_reqd_auths );
166  for( auto& o : other )
167  add_authority_accounts( _impacted, o );
168  }
170  {
171  _impacted.insert( op.fee_payer() ); // fee_paying_account
172  }
174  {
175  _impacted.insert( op.fee_payer() ); // fee_paying_account
176  }
178  {
179  _impacted.insert( op.fee_payer() ); // withdraw_from_account
180  _impacted.insert( op.authorized_account );
181  }
183  {
184  _impacted.insert( op.fee_payer() ); // withdraw_from_account
185  _impacted.insert( op.authorized_account );
186  }
188  {
189  _impacted.insert( op.fee_payer() ); // withdraw_to_account
190  _impacted.insert( op.withdraw_from_account );
191  }
193  {
194  _impacted.insert( op.fee_payer() ); // withdraw_from_account
195  _impacted.insert( op.authorized_account );
196  }
198  {
199  _impacted.insert( op.fee_payer() ); // committee_member_account
200  }
202  {
203  _impacted.insert( op.fee_payer() ); // committee_member_account
204  }
206  {
207  _impacted.insert( op.fee_payer() ); // account_id_type()
208  }
210  {
211  _impacted.insert( op.fee_payer() ); // creator
212  _impacted.insert( op.owner );
213  }
215  {
216  _impacted.insert( op.fee_payer() ); // owner
217  }
219  {
220  _impacted.insert( op.fee_payer() ); // owner
221  }
222  void operator()( const custom_operation& op )
223  {
224  _impacted.insert( op.fee_payer() ); // payer
225  if( !_ignore_custom_op_reqd_auths )
226  _impacted.insert( op.required_auths.begin(), op.required_auths.end() );
227  }
228  void operator()( const assert_operation& op )
229  {
230  _impacted.insert( op.fee_payer() ); // fee_paying_account
231  }
233  {
234  _impacted.insert( op.fee_payer() ); // deposit_to_account
235  }
237  {
238  _impacted.insert( op.to );
239  _impacted.insert( op.from );
240  _impacted.insert( op.fee_payer() ); // issuer
241  }
243  {
244  _impacted.insert( op.fee_payer() ); // from
245  for( const auto& out : op.outputs )
246  add_authority_accounts( _impacted, out.owner );
247  }
249  {
250  _impacted.insert( op.fee_payer() ); // GRAPHENE_TEMP_ACCOUNT
251  for( const auto& in : op.inputs )
252  add_authority_accounts( _impacted, in.owner );
253  for( const auto& out : op.outputs )
254  add_authority_accounts( _impacted, out.owner );
255  }
257  {
258  _impacted.insert( op.fee_payer() ); // GRAPHENE_TEMP_ACCOUNT
259  _impacted.insert( op.to );
260  for( const auto& in : op.inputs )
261  add_authority_accounts( _impacted, in.owner );
262  }
264  {
265  _impacted.insert( op.fee_payer() ); // account
266  }
268  {
269  _impacted.insert( op.fee_payer() ); // account_id
270  }
272  {
273  _impacted.insert( op.fee_payer() );
274  _impacted.insert( op.to );
275  }
277  {
278  _impacted.insert( op.fee_payer() );
279  }
281  {
282  _impacted.insert( op.from );
283  if ( op.to != op.redeemer )
284  _impacted.insert( op.to );
285  }
287  {
288  _impacted.insert( op.fee_payer() );
289  }
291  {
292  _impacted.insert( op.fee_payer() );
293  }
295  {
296  _impacted.insert( op.fee_payer() ); // account
297  add_authority_accounts( _impacted, op.auth );
298  }
300  {
301  _impacted.insert( op.fee_payer() ); // account
302  if ( op.new_auth )
303  add_authority_accounts(_impacted, *op.new_auth);
304  }
306  {
307  _impacted.insert( op.fee_payer() ); // account
308  }
310  {
311  _impacted.insert( op.fee_payer() ); // account
312  }
314  {
315  _impacted.insert( op.fee_payer() ); // account
316  }
317 };
318 
319 } // namespace detail
320 
321 void operation_get_impacted_accounts( const operation& op, flat_set<account_id_type>& result,
322  bool ignore_custom_operation_required_auths )
323 {
325  ignore_custom_operation_required_auths );
326  op.visit( vtor );
327 }
328 
329 void transaction_get_impacted_accounts( const transaction& tx, flat_set<account_id_type>& result,
330  bool ignore_custom_operation_required_auths )
331 {
332  for( const auto& op : tx.operations )
333  operation_get_impacted_accounts( op, result, ignore_custom_operation_required_auths );
334 }
335 
336 void get_relevant_accounts( const object* obj, flat_set<account_id_type>& accounts, bool ignore_custom_operation_required_auths ) {
337  if( obj->id.space() == protocol_ids )
338  {
339  switch( (object_type)obj->id.type() )
340  {
341  case null_object_type:
342  case base_object_type:
343  return;
344  case account_object_type:{
345  accounts.insert( obj->id );
346  break;
347  } case asset_object_type:{
348  const auto& aobj = dynamic_cast<const asset_object*>(obj);
349  FC_ASSERT( aobj != nullptr );
350  accounts.insert( aobj->issuer );
351  break;
352  } case force_settlement_object_type:{
353  const auto& aobj = dynamic_cast<const force_settlement_object*>(obj);
354  FC_ASSERT( aobj != nullptr );
355  accounts.insert( aobj->owner );
356  break;
357  } case committee_member_object_type:{
358  const auto& aobj = dynamic_cast<const committee_member_object*>(obj);
359  FC_ASSERT( aobj != nullptr );
360  accounts.insert( aobj->committee_member_account );
361  break;
362  } case witness_object_type:{
363  const auto& aobj = dynamic_cast<const witness_object*>(obj);
364  FC_ASSERT( aobj != nullptr );
365  accounts.insert( aobj->witness_account );
366  break;
367  } case limit_order_object_type:{
368  const auto& aobj = dynamic_cast<const limit_order_object*>(obj);
369  FC_ASSERT( aobj != nullptr );
370  accounts.insert( aobj->seller );
371  break;
372  } case call_order_object_type:{
373  const auto& aobj = dynamic_cast<const call_order_object*>(obj);
374  FC_ASSERT( aobj != nullptr );
375  accounts.insert( aobj->borrower );
376  break;
377  } case custom_object_type:{
378  break;
379  } case proposal_object_type:{
380  const auto& aobj = dynamic_cast<const proposal_object*>(obj);
381  FC_ASSERT( aobj != nullptr );
382  transaction_get_impacted_accounts( aobj->proposed_transaction, accounts,
383  ignore_custom_operation_required_auths );
384  break;
385  } case operation_history_object_type:{
386  const auto& aobj = dynamic_cast<const operation_history_object*>(obj);
387  FC_ASSERT( aobj != nullptr );
388  operation_get_impacted_accounts( aobj->op, accounts,
389  ignore_custom_operation_required_auths );
390  break;
391  } case withdraw_permission_object_type:{
392  const auto& aobj = dynamic_cast<const withdraw_permission_object*>(obj);
393  FC_ASSERT( aobj != nullptr );
394  accounts.insert( aobj->withdraw_from_account );
395  accounts.insert( aobj->authorized_account );
396  break;
397  } case vesting_balance_object_type:{
398  const auto& aobj = dynamic_cast<const vesting_balance_object*>(obj);
399  FC_ASSERT( aobj != nullptr );
400  accounts.insert( aobj->owner );
401  break;
402  } case worker_object_type:{
403  const auto& aobj = dynamic_cast<const worker_object*>(obj);
404  FC_ASSERT( aobj != nullptr );
405  accounts.insert( aobj->worker_account );
406  break;
407  } case balance_object_type:{
409  break;
410  } case htlc_object_type:{
411  const auto& htlc_obj = dynamic_cast<const htlc_object*>(obj);
412  FC_ASSERT( htlc_obj != nullptr );
413  accounts.insert( htlc_obj->transfer.from );
414  accounts.insert( htlc_obj->transfer.to );
415  break;
416  } case custom_authority_object_type:{
417  const auto* cust_auth_obj = dynamic_cast<const custom_authority_object*>( obj );
418  FC_ASSERT( cust_auth_obj != nullptr );
419  accounts.insert( cust_auth_obj->account );
420  add_authority_accounts( accounts, cust_auth_obj->auth );
421  break;
422  } case ticket_object_type:{
423  const auto* aobj = dynamic_cast<const ticket_object*>( obj );
424  FC_ASSERT( aobj != nullptr );
425  accounts.insert( aobj->account );
426  break;
427  }
428  }
429  }
430  else if( obj->id.space() == implementation_ids )
431  {
432  switch( (impl_object_type)obj->id.type() )
433  {
434  case impl_global_property_object_type:
435  break;
436  case impl_dynamic_global_property_object_type:
437  break;
438  case impl_reserved0_object_type:
439  break;
440  case impl_asset_dynamic_data_object_type:
441  break;
442  case impl_asset_bitasset_data_object_type:
443  break;
444  case impl_account_balance_object_type:{
445  const auto& aobj = dynamic_cast<const account_balance_object*>(obj);
446  FC_ASSERT( aobj != nullptr );
447  accounts.insert( aobj->owner );
448  break;
449  } case impl_account_statistics_object_type:{
450  const auto& aobj = dynamic_cast<const account_statistics_object*>(obj);
451  FC_ASSERT( aobj != nullptr );
452  accounts.insert( aobj->owner );
453  break;
454  } case impl_transaction_history_object_type:{
455  const auto& aobj = dynamic_cast<const transaction_history_object*>(obj);
456  FC_ASSERT( aobj != nullptr );
457  transaction_get_impacted_accounts( aobj->trx, accounts,
458  ignore_custom_operation_required_auths );
459  break;
460  } case impl_blinded_balance_object_type:{
461  const auto& aobj = dynamic_cast<const blinded_balance_object*>(obj);
462  FC_ASSERT( aobj != nullptr );
463  for( const auto& a : aobj->owner.account_auths )
464  accounts.insert( a.first );
465  break;
466  } case impl_block_summary_object_type:
467  break;
468  case impl_account_transaction_history_object_type: {
469  const auto& aobj = dynamic_cast<const account_transaction_history_object*>(obj);
470  FC_ASSERT( aobj != nullptr );
471  accounts.insert( aobj->account );
472  break;
473  } case impl_chain_property_object_type:
474  break;
475  case impl_witness_schedule_object_type:
476  break;
477  case impl_budget_record_object_type:
478  break;
479  case impl_special_authority_object_type:
480  break;
481  case impl_buyback_object_type:
482  break;
483  case impl_fba_accumulator_object_type:
484  break;
485  case impl_collateral_bid_object_type:{
486  const auto& aobj = dynamic_cast<const collateral_bid_object*>(obj);
487  FC_ASSERT( aobj != nullptr );
488  accounts.insert( aobj->bidder );
489  break;
490  }
491  }
492  }
493 } // end get_relevant_accounts( const object* obj, flat_set<account_id_type>& accounts )
494 
495 void database::notify_applied_block( const signed_block& block )
496 {
497  GRAPHENE_TRY_NOTIFY( applied_block, block )
498 }
499 
500 void database::notify_on_pending_transaction( const signed_transaction& tx )
501 {
502  GRAPHENE_TRY_NOTIFY( on_pending_transaction, tx )
503 }
504 
505 void database::notify_changed_objects()
506 { try {
507  if( _undo_db.enabled() )
508  {
509  const auto& head_undo = _undo_db.head();
510  auto chain_time = head_block_time();
511 
512  // New
513  if( !new_objects.empty() )
514  {
515  vector<object_id_type> new_ids; new_ids.reserve(head_undo.new_ids.size());
516  flat_set<account_id_type> new_accounts_impacted;
517  for( const auto& item : head_undo.new_ids )
518  {
519  new_ids.push_back(item);
520  auto obj = find_object(item);
521  if(obj != nullptr)
522  get_relevant_accounts(obj, new_accounts_impacted,
523  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
524  }
525 
526  if( new_ids.size() )
527  GRAPHENE_TRY_NOTIFY( new_objects, new_ids, new_accounts_impacted)
528  }
529 
530  // Changed
531  if( !changed_objects.empty() )
532  {
533  vector<object_id_type> changed_ids; changed_ids.reserve(head_undo.old_values.size());
534  flat_set<account_id_type> changed_accounts_impacted;
535  for( const auto& item : head_undo.old_values )
536  {
537  changed_ids.push_back(item.first);
538  get_relevant_accounts(item.second.get(), changed_accounts_impacted,
539  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
540  }
541 
542  if( changed_ids.size() )
543  GRAPHENE_TRY_NOTIFY( changed_objects, changed_ids, changed_accounts_impacted)
544  }
545 
546  // Removed
547  if( !removed_objects.empty() )
548  {
549  vector<object_id_type> removed_ids; removed_ids.reserve( head_undo.removed.size() );
550  vector<const object*> removed; removed.reserve( head_undo.removed.size() );
551  flat_set<account_id_type> removed_accounts_impacted;
552  for( const auto& item : head_undo.removed )
553  {
554  removed_ids.emplace_back( item.first );
555  auto obj = item.second.get();
556  removed.emplace_back( obj );
557  get_relevant_accounts(obj, removed_accounts_impacted,
558  MUST_IGNORE_CUSTOM_OP_REQD_AUTHS(chain_time));
559  }
560 
561  if( removed_ids.size() )
562  GRAPHENE_TRY_NOTIFY( removed_objects, removed_ids, removed, removed_accounts_impacted )
563  }
564  }
565 } FC_CAPTURE_AND_LOG( (0) ) }
566 
567 } } // namespace graphene::chain
void operator()(const asset_claim_pool_operation &op)
Definition: db_notify.cpp:48
void operator()(const asset_update_bitasset_operation &op)
Definition: db_notify.cpp:119
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:104
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:100
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:83
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:286
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:248
void operator()(const withdraw_permission_delete_operation &op)
Definition: db_notify.cpp:192
void operator()(const limit_order_create_operation &op)
Definition: db_notify.cpp:52
tracks a blinded balance commitment
void operator()(const proposal_update_operation &op)
Definition: db_notify.cpp:169
Definition: api.cpp:56
Delete an existing withdrawal permissionThis operation cancels a withdrawal permission, thus preventing any future withdrawals using that permission.
void operator()(const account_whitelist_operation &op)
Definition: db_notify.cpp:91
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:148
account_id_type fee_payer() const
Definition: witness.hpp:47
void operator()(const asset_reserve_operation &op)
Definition: db_notify.cpp:132
void operator()(const balance_claim_operation &op)
Definition: db_notify.cpp:232
tracks debt and call price information
void operator()(const proposal_create_operation &op)
Definition: db_notify.cpp:160
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:336
void operator()(const fill_order_operation &op)
Definition: db_notify.cpp:68
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:299
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:209
get_impacted_account_visitor(flat_set< account_id_type > &impact, bool ignore_custom_operation_required_auths)
Definition: db_notify.cpp:33
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:201
void operator()(const witness_update_operation &op)
Definition: db_notify.cpp:156
#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:313
void operator()(const asset_issue_operation &op)
Definition: db_notify.cpp:127
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:205
void operator()(const account_upgrade_operation &op)
Definition: db_notify.cpp:96
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:276
void operator()(const asset_update_operation &op)
Definition: db_notify.cpp:108
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
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:73
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:218
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:263
void operator()(const assert_operation &op)
Definition: db_notify.cpp:228
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:144
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:329
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:222
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:309
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:214
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:123
void operator()(const account_create_operation &op)
Definition: db_notify.cpp:76
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:271
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:242
void operator()(const custom_authority_create_operation &op)
Definition: db_notify.cpp:294
void operator()(const custom_authority_delete_operation &op)
Definition: db_notify.cpp:305
void operator()(const committee_member_create_operation &op)
Definition: db_notify.cpp:197
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:256
void operator()(const withdraw_permission_create_operation &op)
Definition: db_notify.cpp:177
void operator()(const bid_collateral_operation &op)
Definition: db_notify.cpp:64
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:236
Definition: api.hpp:15
Worker object contains the details of a blockchain worker. See The Blockchain Worker System for detai...
void operator()(const transfer_operation &op)
Definition: db_notify.cpp:39
void operator()(const withdraw_permission_update_operation &op)
Definition: db_notify.cpp:182
authority auth
Authentication requirements for the custom authority.
void operator()(const limit_order_cancel_operation &op)
Definition: db_notify.cpp:56
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:140
void operator()(const call_order_update_operation &op)
Definition: db_notify.cpp:60
void operator()(const witness_create_operation &op)
Definition: db_notify.cpp:152
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:136
void operator()(const fba_distribute_operation &op)
Definition: db_notify.cpp:267
void operator()(const withdraw_permission_claim_operation &op)
Definition: db_notify.cpp:187
void operator()(const execute_bid_operation &op)
Definition: db_notify.cpp:72
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:114
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:173
void operator()(const htlc_redeemed_operation &op)
Definition: db_notify.cpp:280
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:321
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:290
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:44