BitShares-Core  6.1.0
BitShares blockchain implementation and command-line interface software
hardfork_visitor.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Contributors
3  *
4  * The MIT License
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24 #pragma once
25 
27 
28 #include <graphene/chain/hardfork.hpp>
29 
30 #include <fc/reflect/typelist.hpp>
31 
32 #include <type_traits>
33 #include <functional>
34 
35 namespace graphene { namespace chain {
36 
45  using result_type = bool;
69 
71  explicit hardfork_visitor(const fc::time_point_sec& head_block_time) : now(head_block_time) {}
72 
75  template<typename Op>
76  std::enable_if_t<operation::tag<Op>::value < protocol::operation::tag<first_unforked_op>::value, bool>
77  visit() { return true; }
78  template<typename Op>
79  std::enable_if_t<fc::typelist::contains<BSIP_40_ops, Op>(), bool>
80  visit() { return HARDFORK_BSIP_40_PASSED(now); }
81  template<typename Op>
82  std::enable_if_t<fc::typelist::contains<hf2103_ops, Op>(), bool>
83  visit() { return HARDFORK_CORE_2103_PASSED(now); }
84  template<typename Op>
85  std::enable_if_t<fc::typelist::contains<liquidity_pool_ops, Op>(), bool>
86  visit() { return HARDFORK_LIQUIDITY_POOL_PASSED(now); }
87  template<typename Op>
88  std::enable_if_t<fc::typelist::contains<samet_fund_ops, Op>(), bool>
89  visit() { return HARDFORK_CORE_2351_PASSED(now); }
90  template<typename Op>
91  std::enable_if_t<fc::typelist::contains<credit_offer_ops, Op>(), bool>
92  visit() { return HARDFORK_CORE_2362_PASSED(now); }
94 
96  template<class W, class Op=typename W::type>
97  std::enable_if_t<fc::typelist::contains<protocol::operation::list, Op>(), bool>
98  operator()(W) { return visit<Op>(); }
100  template<class Op>
101  std::enable_if_t<fc::typelist::contains<protocol::operation::list, Op>(), bool>
102  operator()(const Op&) { return visit<Op>(); }
104  bool visit(protocol::operation::tag_type tag) const {
105  return fc::typelist::runtime::dispatch(protocol::operation::list(), (size_t)tag, *this);
106  }
108  bool visit(const protocol::operation& op) const {
109  return visit(op.which());
110  }
111 };
112 
113 } } // namespace graphene::chain
Defines a template for manipulating and storing compile-time lists of types.
Definition: api.cpp:48
fc::static_variant< transfer_operation, limit_order_create_operation, limit_order_cancel_operation, call_order_update_operation, fill_order_operation, account_create_operation, account_update_operation, account_whitelist_operation, account_upgrade_operation, account_transfer_operation, asset_create_operation, asset_update_operation, asset_update_bitasset_operation, asset_update_feed_producers_operation, asset_issue_operation, asset_reserve_operation, asset_fund_fee_pool_operation, asset_settle_operation, asset_global_settle_operation, asset_publish_feed_operation, witness_create_operation, witness_update_operation, proposal_create_operation, proposal_update_operation, proposal_delete_operation, withdraw_permission_create_operation, withdraw_permission_update_operation, withdraw_permission_claim_operation, withdraw_permission_delete_operation, committee_member_create_operation, committee_member_update_operation, committee_member_update_global_parameters_operation, vesting_balance_create_operation, vesting_balance_withdraw_operation, worker_create_operation, custom_operation, assert_operation, balance_claim_operation, override_transfer_operation, transfer_to_blind_operation, blind_transfer_operation, transfer_from_blind_operation, asset_settle_cancel_operation, asset_claim_fees_operation, fba_distribute_operation, bid_collateral_operation, execute_bid_operation, asset_claim_pool_operation, asset_update_issuer_operation, htlc_create_operation, htlc_redeem_operation, htlc_redeemed_operation, htlc_extend_operation, htlc_refund_operation, custom_authority_create_operation, custom_authority_update_operation, custom_authority_delete_operation, ticket_create_operation, ticket_update_operation, liquidity_pool_create_operation, liquidity_pool_delete_operation, liquidity_pool_deposit_operation, liquidity_pool_withdraw_operation, liquidity_pool_exchange_operation, samet_fund_create_operation, samet_fund_delete_operation, samet_fund_update_operation, samet_fund_borrow_operation, samet_fund_repay_operation, credit_offer_create_operation, credit_offer_delete_operation, credit_offer_update_operation, credit_offer_accept_operation, credit_deal_repay_operation, credit_deal_expired_operation >
Accept a creadit offer and create a credit deal.
Updates an existing ticket.
Definition: ticket.hpp:66
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
tag_type which() const
fc::static_variant< transfer_operation, limit_order_create_operation, limit_order_cancel_operation, call_order_update_operation, fill_order_operation, account_create_operation, account_update_operation, account_whitelist_operation, account_upgrade_operation, account_transfer_operation, asset_create_operation, asset_update_operation, asset_update_bitasset_operation, asset_update_feed_producers_operation, asset_issue_operation, asset_reserve_operation, asset_fund_fee_pool_operation, asset_settle_operation, asset_global_settle_operation, asset_publish_feed_operation, witness_create_operation, witness_update_operation, proposal_create_operation, proposal_update_operation, proposal_delete_operation, withdraw_permission_create_operation, withdraw_permission_update_operation, withdraw_permission_claim_operation, withdraw_permission_delete_operation, committee_member_create_operation, committee_member_update_operation, committee_member_update_global_parameters_operation, vesting_balance_create_operation, vesting_balance_withdraw_operation, worker_create_operation, custom_operation, assert_operation, balance_claim_operation, override_transfer_operation, transfer_to_blind_operation, blind_transfer_operation, transfer_from_blind_operation, asset_settle_cancel_operation, asset_claim_fees_operation, fba_distribute_operation, bid_collateral_operation, execute_bid_operation, asset_claim_pool_operation, asset_update_issuer_operation, htlc_create_operation, htlc_redeem_operation, htlc_redeemed_operation, htlc_extend_operation, htlc_refund_operation, custom_authority_create_operation, custom_authority_update_operation, custom_authority_delete_operation, ticket_create_operation, ticket_update_operation, liquidity_pool_create_operation, liquidity_pool_delete_operation, liquidity_pool_deposit_operation, liquidity_pool_withdraw_operation, liquidity_pool_exchange_operation, samet_fund_create_operation, samet_fund_delete_operation, samet_fund_update_operation, samet_fund_borrow_operation, samet_fund_repay_operation, credit_offer_create_operation, credit_offer_delete_operation, credit_offer_update_operation, credit_offer_accept_operation, credit_deal_repay_operation, credit_deal_expired_operation >::tag_type
int64_t tag_type
A credit deal expired without being fully repaid.
hardfork_visitor(const fc::time_point_sec &head_block_time)
The actual list type.
Definition: typelist.hpp:17
The hardfork_visitor struct checks whether a given operation type has been hardforked in or not...
Return dispatch(list< Types... >, std::size_t index, Callable c)
Index into the typelist for a type T, and invoke the callable with an argument wrapper<T>() ...
Definition: typelist.hpp:243
Create a new credit offerA credit offer is a fund that can be used by other accounts who provide cert...