peerplays_migrated/libraries/chain/include/graphene/chain/nft_object.hpp
2020-07-07 18:40:58 +00:00

102 lines
3.3 KiB
C++

#pragma once
#include <graphene/chain/protocol/types.hpp>
#include <graphene/db/object.hpp>
#include <graphene/db/generic_index.hpp>
namespace graphene { namespace chain {
using namespace graphene::db;
class nft_metadata_object : public abstract_object<nft_metadata_object>
{
public:
static const uint8_t space_id = protocol_ids;
static const uint8_t type_id = nft_metadata_type;
account_id_type owner;
std::string name;
std::string symbol;
std::string base_uri;
optional<account_id_type> revenue_partner;
optional<double> revenue_split;
};
class nft_object : public abstract_object<nft_object>
{
public:
static const uint8_t space_id = protocol_ids;
static const uint8_t type_id = nft_object_type;
nft_metadata_id_type nft_metadata_id;
account_id_type owner;
account_id_type approved;
vector<account_id_type> approved_operators;
std::string token_uri;
};
struct by_name;
struct by_symbol;
using nft_metadata_multi_index_type = multi_index_container<
nft_metadata_object,
indexed_by<
ordered_unique< tag<by_id>,
member<object, object_id_type, &object::id>
>,
ordered_unique< tag<by_name>,
member<nft_metadata_object, std::string, &nft_metadata_object::name>
>,
ordered_unique< tag<by_symbol>,
member<nft_metadata_object, std::string, &nft_metadata_object::symbol>
>
>
>;
using nft_metadata_index = generic_index<nft_metadata_object, nft_metadata_multi_index_type>;
struct by_metadata;
struct by_metadata_and_owner;
struct by_owner;
struct by_owner_and_id;
using nft_multi_index_type = multi_index_container<
nft_object,
indexed_by<
ordered_unique< tag<by_id>,
member<object, object_id_type, &object::id>
>,
ordered_non_unique< tag<by_metadata>,
member<nft_object, nft_metadata_id_type, &nft_object::nft_metadata_id>
>,
ordered_non_unique< tag<by_metadata_and_owner>,
composite_key<nft_object,
member<nft_object, nft_metadata_id_type, &nft_object::nft_metadata_id>,
member<nft_object, account_id_type, &nft_object::owner>
>
>,
ordered_non_unique< tag<by_owner>,
member<nft_object, account_id_type, &nft_object::owner>
>,
ordered_unique< tag<by_owner_and_id>,
composite_key<nft_object,
member<nft_object, account_id_type, &nft_object::owner>,
member<object, object_id_type, &object::id>
>
>
>
>;
using nft_index = generic_index<nft_object, nft_multi_index_type>;
} } // graphene::chain
FC_REFLECT_DERIVED( graphene::chain::nft_metadata_object, (graphene::db::object),
(owner)
(name)
(symbol)
(base_uri)
(revenue_partner)
(revenue_split) )
FC_REFLECT_DERIVED( graphene::chain::nft_object, (graphene::db::object),
(nft_metadata_id)
(owner)
(approved)
(approved_operators)
(token_uri) )