MidlePayQml 0.0.4
MiddlePay QML module
qoutputs.hpp
1 #pragma once
2 
3 #include <QByteArray>
4 #include <QDataStream>
5 #include <QJsonValue>
6 #include<QJsonObject>
7 #include<QJsonArray>
8 #include"block/carray.hpp"
9 #include"block/qunlock_conditions.hpp"
10 #include"block/qfeatures.hpp"
11 #include"block/qnative_tokens.hpp"
12 #include"block/qtoken_scheme.hpp"
13 namespace qiota{
14 namespace qblocks{
15 
16 class Output
17 {
18 public:
19  enum types : quint8 { Basic_typ=3,NFT_typ=6,Foundry_typ=5,Alias_typ=4 };
20  Output(types typ,const quint64& amount_m, const pvector<const Unlock_Condition> & unlock_conditions_m,
21  const pvector<const Feature>& features_m={},
22  const pvector<const Native_Token>& native_tokens_m={},
23  const pvector<const Feature>& immutable_features_m={});
24 
25  Output(types typ,const QJsonValue& val);
26  Output(types typ):type_m(typ){};
27 
28  template<class from_type> static std::shared_ptr<Output> from_(from_type& val);
29 
30 
31  static std::shared_ptr<Output> Basic(const quint64& amount_m, const pvector<const Unlock_Condition> & unlock_conditions_m,
32  const pvector<const Native_Token> & native_tokens_m={},
33  const pvector<const Feature> & features_m={});
34  static std::shared_ptr<Output> NFT(const quint64& amount_m, const pvector<const Unlock_Condition> &unlock_conditions_m,
35  const pvector<const Native_Token> &native_tokens_m={},
36  const pvector<const Feature> &immutable_features_m={},
37  const pvector<const Feature> &features_m={});
38  static std::shared_ptr<Output> Foundry(const quint64& amount_m, const pvector<const Unlock_Condition> & unlock_conditions_m,
39  const std::shared_ptr<Token_Scheme> &token_scheme_m, const quint32& serial_number_m,
40  const pvector<const Native_Token>& native_tokens_m={},
41  const pvector<const Feature>& immutable_features_m={},
42  const pvector<const Feature>& features_m={}
43  );
44  static std::shared_ptr<Output> Alias(const quint64& amount_m, const pvector<const Unlock_Condition> & unlock_conditions_m,
45  const fl_array<quint16> &state_metadata_m="", const quint32& foundry_counter_m=0,
46  const quint32& state_index_m=0,
47  const pvector<const Native_Token>& native_tokens_m={},
48  const pvector<const Feature>& immutable_features_m={},
49  const pvector<const Feature>& features_m={});
50 
51 
52 
53  virtual void serialize(QDataStream &out)const;
54  virtual QJsonObject get_Json(void) const;
55  virtual void set_id(const c_array& id);
56  virtual c_array get_id(void)const{return c_array(32,0);};
57  virtual void consume(void);
58  quint64 min_deposit_of_output(const quint64 &wkey, const quint64 &wdata, const quint64 &v_byte_cost)const;
59 
60 
62  {
63  const auto found=std::find_if(unlock_conditions_.begin(),unlock_conditions_.end(),
64  [typ](const auto& it){return (it->type()==typ);});
65  return (found==unlock_conditions_.end())?nullptr:*found;
66  }
67 
69  {
70  const auto found=std::find_if(features_.begin(),features_.end(),
71  [typ](const auto& it){return (it->type()==typ);});
72  return (found==features_.end())?nullptr:*found;
73  }
75  {
76  const auto found=std::find_if(immutable_features_.begin(),immutable_features_.end(),
77  [typ](const auto& it){return (it->type()==typ);});
78  return (found==immutable_features_.end())?nullptr:*found;
79  }
80 
81 
82  quint64 amount_;
87  types type(void)const{return type_m;}
88  QBLOCK_EXPORT const static QHash<types,QString > typesstr;
89 private:
90  const types type_m;
91 
92 
93 };
94 
95 class Basic_Output :public Output
96 {
97 public:
98  Basic_Output(const quint64& amount_m, const pvector<const Unlock_Condition> & unlock_conditions_m,
99  const pvector<const Native_Token> & native_tokens_m={},
100  const pvector<const Feature> & features_m={}
101  );
104  void serialize(QDataStream &out)const;
105  QJsonObject get_Json(void) const;
106 
107 
108 };
109 class NFT_Output :public Output
110 {
111 public:
112  NFT_Output(const quint64& amount_m, const pvector<const Unlock_Condition> &unlock_conditions_m,
113  const pvector<const Native_Token> &native_tokens_m={},
114  const pvector<const Feature> &immutable_features_m={},
115  const pvector<const Feature> &features_m={});
116  NFT_Output(const QJsonValue& val);
118  void serialize(QDataStream &out)const;
119 
120  QJsonObject get_Json(void) const;
121  void set_id(const c_array& outputid){if(nft_id_==c_array(32,0))nft_id_=outputid.hash<QCryptographicHash::Blake2b_256>();};
122  c_array get_id(void)const{return nft_id_;}
123 
124 private:
125  NFT_ID nft_id_;
126 
127 
128 };
129 
130 class Foundry_Output :public Output
131 {
132 public:
133  Foundry_Output(const quint64& amount_m, const pvector<const Unlock_Condition> & unlock_conditions_m,
134  const std::shared_ptr<Token_Scheme> &token_scheme_m, const quint32& serial_number_m,
135  const pvector<const Native_Token>& native_tokens_m={},
136  const pvector<const Feature>& immutable_features_m={},
137  const pvector<const Feature>& features_m={});
140  void serialize(QDataStream &out)const;
141  c_array get_id(void)const{
142  c_array var;
143  var=unlock_conditions_.front()->address()->addr();
144  var.append(serial_number_);
145  var.append(token_scheme_->type());
146  return var;
147  }
148  void consume(void);
149  QJsonObject get_Json(void) const;
151  quint32 serial_number_;
152 private:
153 
154 
155 };
156 
157 class Alias_Output :public Output
158 {
159 public:
160  Alias_Output(const quint64& amount_m, const pvector<const Unlock_Condition> & unlock_conditions_m,
161  const fl_array<quint16> &state_metadata_m="", const quint32& foundry_counter_m=0,
162  const quint32& state_index_m=0,
163  const pvector<const Native_Token>& native_tokens_m={},
164  const pvector<const Feature>& immutable_features_m={},
165  const pvector<const Feature>& features_m={}
166  );
169  void serialize(QDataStream &out)const;
170 
171  QJsonObject get_Json(void) const;
172  void set_id(const c_array& outputid){if(alias_id_==c_array(32,0))alias_id_=outputid.hash<QCryptographicHash::Blake2b_256>();};
173  c_array get_id(void)const{return alias_id_;}
176 private:
177  Alias_ID alias_id_;
178 
179 
180 };
181 
182 };
183 
184 };
Definition: qoutputs.hpp:158
Alias_Output(const QJsonValue &val)
void serialize(QDataStream &out) const
c_array get_id(void) const
Definition: qoutputs.hpp:173
void set_id(const c_array &outputid)
Definition: qoutputs.hpp:172
fl_array< quint16 > state_metadata_
Definition: qoutputs.hpp:175
Alias_Output(QDataStream &in)
Alias_Output(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const fl_array< quint16 > &state_metadata_m="", const quint32 &foundry_counter_m=0, const quint32 &state_index_m=0, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &immutable_features_m={}, const pvector< const Feature > &features_m={})
quint32 foundry_counter_
Definition: qoutputs.hpp:174
quint32 state_index_
Definition: qoutputs.hpp:174
QJsonObject get_Json(void) const
Definition: qoutputs.hpp:96
Basic_Output(const QJsonValue &val)
Basic_Output(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &features_m={})
QJsonObject get_Json(void) const
void serialize(QDataStream &out) const
Basic_Output(QDataStream &in)
types
Definition: qfeatures.hpp:13
Definition: qoutputs.hpp:131
c_array get_id(void) const
Definition: qoutputs.hpp:141
QJsonObject get_Json(void) const
Foundry_Output(QDataStream &in)
std::shared_ptr< Token_Scheme > token_scheme_
Definition: qoutputs.hpp:150
Foundry_Output(const QJsonValue &val)
Foundry_Output(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const std::shared_ptr< Token_Scheme > &token_scheme_m, const quint32 &serial_number_m, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &immutable_features_m={}, const pvector< const Feature > &features_m={})
quint32 serial_number_
Definition: qoutputs.hpp:151
void serialize(QDataStream &out) const
Definition: qoutputs.hpp:110
void serialize(QDataStream &out) const
void set_id(const c_array &outputid)
Definition: qoutputs.hpp:121
QJsonObject get_Json(void) const
NFT_Output(QDataStream &in)
c_array get_id(void) const
Definition: qoutputs.hpp:122
NFT_Output(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &immutable_features_m={}, const pvector< const Feature > &features_m={})
NFT_Output(const QJsonValue &val)
Definition: qoutputs.hpp:17
Output(types typ, const QJsonValue &val)
static std::shared_ptr< Output > from_(from_type &val)
Output(types typ)
Definition: qoutputs.hpp:26
static std::shared_ptr< Output > Foundry(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const std::shared_ptr< Token_Scheme > &token_scheme_m, const quint32 &serial_number_m, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &immutable_features_m={}, const pvector< const Feature > &features_m={})
quint64 min_deposit_of_output(const quint64 &wkey, const quint64 &wdata, const quint64 &v_byte_cost) const
pvector< const Native_Token > native_tokens_
Definition: qoutputs.hpp:86
QBLOCK_EXPORT static const QHash< types, QString > typesstr
Definition: qoutputs.hpp:88
static std::shared_ptr< Output > NFT(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &immutable_features_m={}, const pvector< const Feature > &features_m={})
virtual QJsonObject get_Json(void) const
types
Definition: qoutputs.hpp:19
@ Foundry_typ
Definition: qoutputs.hpp:19
@ NFT_typ
Definition: qoutputs.hpp:19
@ Basic_typ
Definition: qoutputs.hpp:19
@ Alias_typ
Definition: qoutputs.hpp:19
virtual c_array get_id(void) const
Definition: qoutputs.hpp:56
virtual void serialize(QDataStream &out) const
pvector< const Unlock_Condition > unlock_conditions_
Definition: qoutputs.hpp:83
virtual void consume(void)
std::shared_ptr< const Feature > get_feature_(const Feature::types &typ) const
Definition: qoutputs.hpp:68
std::shared_ptr< const Unlock_Condition > get_unlock_(const Unlock_Condition::types &typ) const
Definition: qoutputs.hpp:61
virtual void set_id(const c_array &id)
types type(void) const
Definition: qoutputs.hpp:87
static std::shared_ptr< Output > Alias(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const fl_array< quint16 > &state_metadata_m="", const quint32 &foundry_counter_m=0, const quint32 &state_index_m=0, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &immutable_features_m={}, const pvector< const Feature > &features_m={})
std::shared_ptr< const Feature > get_immutable_feature_(const Feature::types &typ) const
Definition: qoutputs.hpp:74
quint64 amount_
Definition: qoutputs.hpp:82
pvector< const Feature > features_
Definition: qoutputs.hpp:84
Output(types typ, const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const pvector< const Feature > &features_m={}, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &immutable_features_m={})
pvector< const Feature > immutable_features_
Definition: qoutputs.hpp:85
static std::shared_ptr< Output > Basic(const quint64 &amount_m, const pvector< const Unlock_Condition > &unlock_conditions_m, const pvector< const Native_Token > &native_tokens_m={}, const pvector< const Feature > &features_m={})
types
Definition: qunlock_conditions.hpp:13
Byte Array that takes care of storing the objects in serialized form.
Definition: carray.hpp:28
void append(const obj_type &obj)
Append obj data to the end. For objects that implement QDataStream & operator <<.
Definition: carray.hpp:62
c_array hash(void) const
Get the hash of the data.
Definition: carray.hpp:71
T find_if(T... args)
Definition: qbigint.hpp:7