text: /*
   * Copyright (c) 2015 Cryptonomex, Inc., and contributors.
   *
   * The MIT License
   *
   * Permission is hereby granted, free of charge, to any person obtaining a copy
   * of this software and associated documentation files (the "Software"), to deal
   * in the Software without restriction, including without limitation the rights
   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   * copies of the Software, and to permit persons to whom the Software is
   * furnished to do so, subject to the following conditions:
   *
   * The above copyright notice and this permission notice shall be included in
   * all copies or substantial portions of the Software.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
   * THE SOFTWARE.
   */
  #pragma once
  #include <graphene/chain/protocol/base.hpp>
  #include <graphene/chain/protocol/account.hpp>
  #include <graphene/chain/protocol/assert.hpp>
  #include <graphene/chain/protocol/asset_ops.hpp>
  #include <graphene/chain/protocol/balance.hpp>
  #include <graphene/chain/protocol/custom.hpp>
  #include <graphene/chain/protocol/committee_member.hpp>
  #include <graphene/chain/protocol/confidential.hpp>
  #include <graphene/chain/protocol/fba.hpp>
  #include <graphene/chain/protocol/market.hpp>
  #include <graphene/chain/protocol/proposal.hpp>
  #include <graphene/chain/protocol/transfer.hpp>
  #include <graphene/chain/protocol/vesting.hpp>
  #include <graphene/chain/protocol/withdraw_permission.hpp>
  #include <graphene/chain/protocol/witness.hpp>
  #include <graphene/chain/protocol/worker.hpp>
  #include <graphene/chain/protocol/contract_ops.hpp>   //liruigang20180913 contract
  
  namespace graphene { namespace chain {
  
     /**
      * @ingroup operations
      *
      * Defines the set of valid operations as a discriminated union type.
      */
     typedef fc::static_variant<
  			transfer_operation, //0
  			limit_order_create_operation, //1
  			limit_order_cancel_operation, //2
  			call_order_update_operation, //3
  			fill_order_operation, //4           // VIRTUAL
  			account_create_operation, //5
  			account_update_operation, //6
  			account_whitelist_operation, //7
  			account_upgrade_operation, //8
  			account_transfer_operation, //9
  			asset_create_operation, //10
  			asset_update_operation, //11
  			asset_update_bitasset_operation, //12
  			asset_update_feed_producers_operation, //13
  			asset_issue_operation, //14
  			asset_reserve_operation, //15
  			asset_fund_fee_pool_operation, //16
  			asset_settle_operation, //17
  			asset_global_settle_operation, //18
  			asset_publish_feed_operation, //19
  			witness_create_operation, //20
  			witness_update_operation, //21
  			proposal_create_operation, //22
  			proposal_update_operation, //23
  			proposal_delete_operation, //24
  			withdraw_permission_create_operation, //25
  			withdraw_permission_update_operation, //26
  			withdraw_permission_claim_operation, //27
  			withdraw_permission_delete_operation, //28
  			committee_member_create_operation, //29
  			committee_member_update_operation, //30
  			committee_member_update_global_parameters_operation, //31
  			vesting_balance_create_operation, //32
  			vesting_balance_withdraw_operation, //33
  			worker_create_operation, //34
  			custom_operation, //35
  			assert_operation, //36
  			balance_claim_operation, //37
  			override_transfer_operation, //38
  			transfer_to_blind_operation, //39
  			blind_transfer_operation, //40
  			transfer_from_blind_operation, //41
  			asset_settle_cancel_operation, //42 // VIRTUAL
  			asset_claim_fees_operation, //43
  			fba_distribute_operation, //44       // VIRTUAL
  			bid_collateral_operation, //45
  			execute_bid_operation, //46          // VIRTUAL
  			asset_claim_pool_operation, //47
  			asset_update_issuer_operation, //48
  			contract_deploy_operation, //49     //liruigang20180913 contract
  			contract_call_operation //50     //liruigang20180913 contract
           > operation;
  
     /// @} // operations group
  
     /**
      *  Appends required authorites to the result vector.  The authorities appended are not the
      *  same as those returned by get_required_auth 
      *
      *  @return a set of required authorities for @ref op
      */
     void operation_get_required_authorities( const operation& op, 
                                              flat_set<account_id_type>& active,
                                              flat_set<account_id_type>& owner,
                                              vector<authority>&  other );
  
     void operation_validate( const operation& op );
  
     /**
      *  @brief necessary to support nested operations inside the proposal_create_operation
      */
     struct op_wrapper
     {
        public:
           op_wrapper(const operation& op = operation()):op(op){}
           operation op;
     };
  
  } } // graphene::chain
  
  FC_REFLECT_TYPENAME( graphene::chain::operation )
  FC_REFLECT( graphene::chain::op_wrapper, (op) )
  