plebble
app.h
Go to the documentation of this file.
1 /*
2 -------------------------------------------------------------------------------
3  PLEBBLE
4 -------------------------------------------------------------------------------
5  Copyright (C) 2019-2020 KATLAS Technology. (http://katlastechnology.com)
6  Copyright (C) 2017-2020 Marcos Mayorga. (mm@mm-studios.com)
7 
8  This file is part of our Plebble(R) Platform.
9 
10  The code below cannot be copied, used for any purpose other than the one
11  agreed and/or distributed without the express permission of
12  KATLAS Technology.
13 -------------------------------------------------------------------------------
14 
15 
16 */
17 #ifndef USGOV_49e5fff0395fac385e48353d91ae777f7b0ba92baa74a883f127855ad412c9e0
18 #define USGOV_49e5fff0395fac385e48353d91ae777f7b0ba92baa74a883f127855ad412c9e0
19 
20 #include <us/gov/auth.h>
21 #include <us/gov/engine.h>
22 #include <vector>
23 #include <thread>
24 #include <unordered_map>
25 #include <unordered_set>
26 #include <map>
27 #include <us/gov/socket/datagram.h>
28 #include <us/gov/crypto/crypto.h>
29 #include <us/gov/engine/diff.h>
30 #include <us/gov/engine/app.h>
31 #include "protocol.h"
32 #include "tx.h"
33 #include <chrono>
34 #include <cassert>
35 #include <map>
36 #include <atomic>
37 #include <mutex>
38 #include <us/gov/engine/evidence.h>
39 #include <us/gov/dfs/fileattr_t.h>
40 #include <us/gov/config.h>
41 
42 namespace us { namespace gov {
43 namespace cash {
44 
45  using namespace std;
46  using socket::datagram;
48  using crypto::ripemd160;
49  using crypto::ec;
50  using engine::peer_t;
51 
56  typedef tx::cash_t cash_t;
58 
59  static const hash_t min_locking_program(10000);
60 
61  struct tx;
62  struct map_tx;
63  struct file_tx;
64  struct ttx;
65  struct app final:engine::app {
66  typedef engine::app b;
67 
74  local_delta& operator =(int zero);
77  bool operator == (const local_delta& other) const;
78  bool operator != (const local_delta& other) const;
79 
80  ~local_delta() override;
81  int app_id() const override;
82  void to_stream(ostream&) const override;
83  void from_stream(istream&) override;
84  void from_stream_prev(istream&) override;
86  void hash_data(crypto::ripemd160&) const override;
87 
88  struct accounts_t;
89 
90  struct safe_deposit_box final {
94  virtual ~safe_deposit_box();
95  cash_t charge(const cash_t&tax); //charges tax plus storage costs
97 
98  void print_kv_b64(ostream& os) const;
99  hash_t file_hash(const string& path) const;
100  void merge(const safe_deposit_box&other);
101  void on_destroy(accounts_t& ledger);
104 
105  cash_t value; //gas
106 
107  struct m_t: map<string,string> {
108  m_t();
109  m_t(const m_t&);
110  m_t& operator=(const m_t&)=delete;
111  void dump(const string& prefix, ostream& os) const;
112  void to_stream(ostream& os) const;
113  void from_stream(istream& is);
114  void from_stream_prev(istream& is);
117  void merge(const m_t&other);
118  };
119  m_t* m{0};
120 
122 
123  struct f_t final: map<hash_t,fileattr_t> {
124  f_t();
125  f_t(const f_t&);
126  f_t& operator=(const f_t&)=delete;
127  void dump(const string& prefix, ostream& os) const;
128  void to_stream(ostream& os) const;
129  void from_stream(istream& is);
130  void from_stream_prev(istream& is);
133  uint32_t total_mib() const;
134  void list_files(const string&path, ostream&os) const;
135  void get_files(vector<pair<dfs::hash_t,fileattr_t>>& v) const;
136  void get_files(vector<pair<dfs::hash_t,uint32_t>>& v) const;
137  void get_files(const hash_t& a, vector<pair<hash_t,pair<dfs::hash_t,fileattr_t>>>& v) const;
138  void get_files(set<dfs::hash_t>& v) const;
139  hash_t file_hash(const string& path) const;
140  void diff(const f_t& newer,vector<pair<hash_t,uint32_t>>& old_files,vector<pair<hash_t,uint32_t>>& new_files) const;
141  void merge(const f_t&other);
142  };
143  f_t* f{0};
144 
145  struct t_t final: map<hash_t,cash_t> {
146  t_t();
147  t_t(const t_t&);
148  t_t& operator=(const t_t&)=delete;
149  void dump(const string& prefix, const hash_t& addr, ostream& os) const;
150  void to_stream(ostream& os) const;
151  void from_stream(istream& is);
152  void from_stream_prev(istream& is);
155  bool burn(const hash_t& token, const cash_t&);
156  cash_t get_value(const hash_t&token) const;
157  void set_supply(const hash_t&token, const cash_t& supply);
158  void merge(const t_t&other);
159  void on_destroy(accounts_t& ledger);
160  };
161  t_t* t{0};
162 
163  bool burn(const hash_t& token, const cash_t& amount, cash_t& fee);
164  void add(const hash_t& token, const cash_t&);
165  bool store(const string& key, const string& value);
166  bool store(const string& path, const hash_t& key, const uint32_t& sz);
167  void dump(ostream& os) const;
168  void to_stream(ostream& os) const;
169 
170  bool from_stream(istream& is);
171  bool from_stream_prev(istream& is);
172 
173  void diff_files(const safe_deposit_box& newer,vector<pair<hash_t,uint32_t>>& old_files,vector<pair<hash_t,uint32_t>>& new_files) const;
174  void get_files(const hash_t&a, vector<pair<hash_t,pair<dfs::hash_t,fileattr_t>>>&) const;
176  void get_files(vector<pair<dfs::hash_t,uint32_t>>&) const;
177  void get_files(set<dfs::hash_t>&) const;
178 
179  void set_supply(const hash_t&token, const cash_t& supply);
180 
181  };
182 
184 
185  struct account_t {
187  account_t(const hash_t& locking_program, const box_t&);
188  void on_destroy(accounts_t& ledger);
189  void merge(const account_t&other);
190  void dump(const hash_t& addr, int detail, ostream& os) const;
191  void list_files(const string&path, ostream&os) const;
192  void print_data(const hash_t& addr, ostream& os) const;
193  void to_stream(ostream& os) const;
194  bool from_stream(istream& is);
195  bool from_stream_prev(istream& is);
198  cash_t get_value(const hash_t& token) const;
199  cash_t input_eligible(const hash_t& coin) const; //not eligible if account contains data, or not enough gas
200  cash_t input_eligible2(const hash_t& coin) const; //not eligible only if not enough gas
201  hash_t file_hash(const string& path) const;
202 
205  };
207 
208  struct batch_t final: unordered_map<hash_t,batch_item> {
209  void add(const hash_t& address, const batch_item& bi);
210  };
211 
212  struct accounts_t final: map<hash_t,account_t> {
215  account_t merge() const;
216  void add(const batch_t& batch);
218  void to_stream(ostream& os) const;
219  static accounts_t* from_stream(istream& is);
220  static accounts_t* from_stream_prev(istream& is);
221  void dump(int detail, ostream& os) const;
222  bool pay(const hash_t& k, const cash_t& amount);
223  bool withdraw(const hash_t& k, const cash_t& amount);
226  cash_t sum() const;
227  void list_files(const hash_t& addr, const string&path, ostream&os) const;
228  void print_data(const hash_t& addr, ostream& os) const;
229  void print_kv_b64(const hash_t& addr, ostream& os) const;
232  void get_files(vector<pair<dfs::hash_t,uint32_t>>& v) const;
233  void get_files(set<dfs::hash_t>& v) const;
234  hash_t file_hash(const hash_t& addr, const string& path) const;
235  };
236 
238  cash_t fees{0};
239 
240  mutable hash_t hash{0};
241  const hash_t& get_hash() const;
243  };
244 
246 
247  struct delta final: engine::app::delta {
250  delta();
251  delta(const delta&)=delete;
252  delta& operator = (const delta&)=delete;
253  ~delta() override;
254  uint64_t merge(engine::app::local_delta* other0) override;
255  void end_merge() override;
256  void to_stream(ostream& os) const override;
257  static delta* from_stream(istream& is);
258  static delta* from_stream_prev(istream& is);
261  };
262 
263  struct query_accounts_t final:vector<hash_t> {
264  void add(const hash_t& addr);
265  datagram* get_datagram(uint16_t seq) const;
267  static query_accounts_t from_string(const string&);
268  };
269 
270  struct db_t final {
272  db_t();
273  db_t(const db_t&)=delete;
274  db_t& operator = (const db_t&)=delete;
275  db_t(db_t&& other);
276  ~db_t();
277  bool add_(const hash_t&, const cash_t& amount);
278  bool withdraw_(const hash_t& k, const cash_t& amount);
279  void dump(int detail, ostream& os) const;
280  cash_t budget() const;
281  void tax_accounts(const cash_t& amount);
282 
284  void clear();
285  void to_stream(ostream&) const;
286  void from_stream(istream&);
287  void from_stream_prev(istream&);
288  void print_data(const hash_t& addr, ostream& os) const;
289  void print_kv_b64(const hash_t& addr, ostream& os) const;
290  void list_files(const hash_t& addr, const string&path, ostream&os) const;
291  hash_t file_hash(const hash_t& addr, const string& path) const;
292 
293  mutable mutex mx;
294  accounts_t* accounts{0};
296  };
297 
298  #if CFG_COUNTERS==1
299  struct counters_t final {
300  uint32_t tx_rejected_bad_amounts{0};
301  uint32_t tx_rejected_state{0};
302  uint32_t tx_rejected_could_not_unlock_input{0};
303  uint32_t tx_rejected_locking_program_mismatch{0};
304  uint32_t tx_processed{0};
305  void dump(ostream&os) const;
306  };
307  static counters_t counters;
308  #endif
309 
313 
314 
315  constexpr static const char* name={"cash"};
316 
317  static bool unlock(const hash_t& address, const hash_t& locking_program, const string& locking_program_input, const tx&);
318  static bool unlock(const hash_t& address, const hash_t& locking_program, const map_tx& t);
319  static bool unlock(const hash_t& address, const hash_t& locking_program, const file_tx& t);
320  static bool unlock(const hash_t& address, const hash_t& locking_program, const ttx& t);
321 
322  static constexpr int id() { return 30; }
323 
325  app(const app&)=delete;
326  app& operator = (const app&)=delete;
327  ~app() override;
329  bool process_query(peer_t *, datagram*) override;
330  static evidence* evidence_from_stream(uint8_t evid, istream&is); // const override;
331 
332  string get_name() const override { return name; }
333  bool process(const evidence&) override;
334  bool process(const tx&, const tx::section_t&, local_delta::batch_t&, cash_t& fee);
335  bool process(const tx&, const tx::sections_t&, local_delta::batch_t&, cash_t& fee);
336  bool process(const tx&);
337  bool process(const map_tx&);
338  bool process(const file_tx&);
339  bool process(const ttx&);
340  void report_wallet(const tx& t, const string& feedback) const;
341 
342  void save_db(ostream&) const override;
343  bool load_db(istream&) override;
344  bool load_db_prev(istream&) override;
345  void clear() override;
349  bool account_state(const local_delta::batch_t& batch, const hash_t& address, account_t& acc) const;
350  bool checksig(const size_t& this_index, const string& locking_program_input, const tx&) const;
351  static bool check_amounts(const tx&);
352  int get_id() const override { return id(); }
353  bool shell_command(istream&, ostream&) override;
354  void import(const engine::app::delta&, const engine::pow_t&) override;
355  void update_ledger(const delta& g, vector<pair<hash_t,uint32_t>>& old_files, vector<pair<hash_t,uint32_t>>& new_files);
357 
358  //cryptoeconomics
360  void tax_accounts(const cash_t& amount);
361  void process_profit(cash_t& profit);
362  void pay_subsidy(const cash_t& amount, const engine::pow_t& w);
363 
364  void get_files(vector<pair<hash_t,uint32_t>>&) const;
365  void get_files(vector<pair<hash_t,fileattr_t>>&) const;
366  void get_files(set<hash_t>&) const;
367  void file_hash(peer_t *c, datagram*d) const;
368 
370  local_delta* pool{0};
371  mutex mx_pool;
372 
373  vector<pair<hash_t,uint32_t>> old_files;
374  vector<pair<hash_t,uint32_t>> new_files;
375  };
376 
377 }}
378 }
379 
380 namespace std {
381  template <>
382  struct hash<us::gov::cash::app::local_delta> {
384  };
385 }
386 
387 #endif
388 
us::gov::cash::app::db_t::max_subsidy
cash_t max_subsidy
Definition: app.h:295
us::gov::cash::app::local_delta::safe_deposit_box::f_t::dump
void dump(const string &prefix, ostream &os) const
us::gov::cash::app::local_delta::accounts_t::get_files
void get_files(vector< pair< dfs::hash_t, safe_deposit_box::fileattr_t >> &v) const
us::gov::cash::app::process_profit
void process_profit(cash_t &profit)
us::gov::cash::app::local_delta::batch_t::add
void add(const hash_t &address, const batch_item &bi)
us::gov::cash::app::process
bool process(const file_tx &)
us::gov::cash::app::local_delta::safe_deposit_box::f_t::hash_data
void hash_data(crypto::ripemd160 &) const
us::gov::cash::app::check_amounts
static bool check_amounts(const tx &)
us::gov::cash::app::local_delta::safe_deposit_box::f_t::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const
us::gov::cash::app::unlock
static bool unlock(const hash_t &address, const hash_t &locking_program, const map_tx &t)
evidence.h
us::gov::dfs::fileattr_t
Definition: fileattr_t.h:28
us::gov::cash::app::app
app(engine::daemon &)
us::gov::cash::app::db_t::cash_in_circulation
cash_t cash_in_circulation() const
us::gov::cash::app::local_delta::account_t::account_t
account_t()
us::gov::cash::app::local_delta::safe_deposit_box::fileattr_t
us::gov::dfs::fileattr_t fileattr_t
Definition: app.h:121
us::gov::cash::app::local_delta::local_delta
local_delta()
us::gov::cash::app::local_delta::safe_deposit_box::m_t::from_stream_prev
void from_stream_prev(istream &is)
us::gov::cash::app::update_ledger
void update_ledger(const delta &g, vector< pair< hash_t, uint32_t >> &old_files, vector< pair< hash_t, uint32_t >> &new_files)
us::gov::cash::app::db_t::file_hash
hash_t file_hash(const hash_t &addr, const string &path) const
us::gov::cash::app::local_delta::account_t::box
box_t box
Definition: app.h:204
us::gov::cash::app::local_delta::safe_deposit_box::get_files
void get_files(vector< pair< dfs::hash_t, fileattr_t >> &) const
us::gov::cash::tx::cash_t
int64_t cash_t
Definition: tx.h:47
us::gov::cash::app::local_delta::safe_deposit_box::t_t::set_supply
void set_supply(const hash_t &token, const cash_t &supply)
us::gov::cash::app::local_delta::safe_deposit_box::t_t::to_stream
void to_stream(ostream &os) const
fileattr_t.h
us::gov::cash::app::local_delta::safe_deposit_box::get_files
void get_files(set< dfs::hash_t > &) const
us::gov::cash::app::local_delta::safe_deposit_box::set_supply
void set_supply(const hash_t &token, const cash_t &supply)
us::gov::cash::app::local_delta::safe_deposit_box::t_t::t_t
t_t(const t_t &)
us::gov::cash::app::local_delta::account_t::input_eligible2
cash_t input_eligible2(const hash_t &coin) const
us::gov::cash::hash_t
hasher_t::value_type hash_t
Definition: app.h:55
diff.h
us::gov::cash::app::local_delta::account_t::merge
void merge(const account_t &other)
us::gov::cash::app::local_delta::app_id
int app_id() const override
us::gov::cash::app::local_delta::accounts_t::pay
bool pay(const hash_t &k, const cash_t &amount)
us::gov::cash::app::app
app(const app &)=delete
us::gov::cash::app::local_delta::account_t::from_stream_prev
bool from_stream_prev(istream &is)
us::gov::cash::app::box_t
local_delta::box_t box_t
Definition: app.h:245
us::gov::cash::app::process
bool process(const tx &, const tx::section_t &, local_delta::batch_t &, cash_t &fee)
us::gov::cash::app::local_delta::safe_deposit_box::from_stream
bool from_stream(istream &is)
us::gov::engine::pow_t
Definition: diff.h:62
us::gov::cash::app::local_delta::safe_deposit_box::~safe_deposit_box
virtual ~safe_deposit_box()
us::gov::cash::app::local_delta::hash_data
void hash_data(crypto::ripemd160 &) const override
us::gov::cash::app::local_delta::safe_deposit_box::on_destroy
void on_destroy(accounts_t &ledger)
us::gov::cash::app::local_delta::local_delta
local_delta(const local_delta &)
us::gov::cash::app::mx_pool
mutex mx_pool
Definition: app.h:371
us::gov::cash::app::local_delta::safe_deposit_box::f_t::diff
void diff(const f_t &newer, vector< pair< hash_t, uint32_t >> &old_files, vector< pair< hash_t, uint32_t >> &new_files) const
us::gov::cash::app::local_delta::safe_deposit_box::safe_deposit_box
safe_deposit_box(const cash_t &v)
us::gov::cash::evidence
engine::evidence evidence
Definition: app.h:57
protocol.h
us::gov::engine::app::local_delta
Definition: app.h:47
us::gov::cash::app::local_delta::safe_deposit_box::m_t::dump
void dump(const string &prefix, ostream &os) const
us::gov::engine::majority_merger
Definition: app.h:116
us::gov::dfs::peer_t
relay::peer_t peer_t
Definition: daemon.h:31
us
Definition: daemon.h:22
us::gov::cash::app::local_delta::accounts_t::from_stream_prev
static accounts_t * from_stream_prev(istream &is)
us::gov::cash::app::local_delta::b
engine::app::local_delta b
Definition: app.h:73
us::gov::cash::app::local_delta::accounts_t
Definition: app.h:212
us::gov::crypto::ripemd160::value_type
Definition: ripemd160.h:38
us::gov::cash::app::db_t::list_files
void list_files(const hash_t &addr, const string &path, ostream &os) const
us::gov::cash::pubkey_t
keys::pub_t pubkey_t
Definition: app.h:53
us::gov::engine::app::delta
Definition: app.h:67
us::gov::cash::app::delta::b
engine::app::delta b
Definition: app.h:248
us::gov::cash::app::old_files
vector< pair< hash_t, uint32_t > > old_files
Definition: app.h:373
us::gov::cash::app::local_delta::safe_deposit_box::f_t::from_stream
void from_stream(istream &is)
us::gov::cash::app::db_t::budget
cash_t budget() const
us::gov::cash::app::delta
Definition: app.h:247
us::gov::cash::app::get_name
string get_name() const override
Definition: app.h:332
us::gov::engine::local_deltas
Definition: diff.h:46
us::gov::cash::app::fileattr_t
local_delta::safe_deposit_box::fileattr_t fileattr_t
Definition: app.h:312
us::gov::cash::app::local_delta::box_t
safe_deposit_box box_t
Definition: app.h:183
us::gov::cash::app::local_delta::safe_deposit_box::m_t::m_t
m_t()
us::gov::cash::app::db_t::from_stream_prev
void from_stream_prev(istream &)
us::gov::cash::app::delta::to_stream
void to_stream(ostream &os) const override
us::gov::cash::app::local_delta::safe_deposit_box::f_t::get_files
void get_files(const hash_t &a, vector< pair< hash_t, pair< dfs::hash_t, fileattr_t >>> &v) const
us::gov::cash::app::db
db_t db
Definition: app.h:369
us::gov::cash::app::local_delta::accounts_t::~accounts_t
~accounts_t()
us::gov::cash::app
Definition: app.h:65
us::gov::cash::app::accounts_t
local_delta::accounts_t accounts_t
Definition: app.h:311
us::gov::cash::app::local_delta::safe_deposit_box::diff_files
void diff_files(const safe_deposit_box &newer, vector< pair< hash_t, uint32_t >> &old_files, vector< pair< hash_t, uint32_t >> &new_files) const
us::gov::cash::app::process
bool process(const ttx &)
us::gov::cash::app::local_delta::~local_delta
~local_delta() override
us::gov::cash::app::search_kv
void search_kv(peer_t *, datagram *)
us::gov::cash::app::query_accounts_t::get_datagram
datagram * get_datagram(uint16_t seq) const
us::gov::cash::app::delta::delta
delta()
us::gov::cash::app::local_delta::safe_deposit_box::f_t::from_stream_prev
void from_stream_prev(istream &is)
us::gov::cash::ttx
Definition: ttx.h:46
us::gov::cash::app::local_delta::account_t::list_files
void list_files(const string &path, ostream &os) const
us::gov::cash::tx::section_t
Definition: tx.h:132
us::gov::cash::app::local_delta::safe_deposit_box::store
bool store(const string &key, const string &value)
us::gov::crypto::ec::keys::pub_t
Definition: ec.h:44
us::gov::cash::app::local_delta::safe_deposit_box::f_t::operator=
f_t & operator=(const f_t &)=delete
us::gov::cash::app::local_delta::safe_deposit_box::m_t::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const
us::gov::cash::app::local_delta::safe_deposit_box::t_t::t_t
t_t()
us::gov::cash::app::account_t
local_delta::account_t account_t
Definition: app.h:310
us::gov::cash::app::process
bool process(const tx &)
us::gov::cash::app::local_delta::safe_deposit_box::t_t::on_destroy
void on_destroy(accounts_t &ledger)
us::gov::cash::app::account_state
bool account_state(const local_delta::batch_t &batch, const hash_t &address, account_t &acc) const
us::gov::cash::app::query_accounts_t::add
void add(const hash_t &addr)
us::gov::cash::app::local_delta::accounts_t::dump
void dump(int detail, ostream &os) const
us::gov::cash::app::local_delta::account_t::hash_data
void hash_data(crypto::ripemd160 &) const
us::gov::cash::app::save_db
void save_db(ostream &) const override
us::gov::cash::app::local_delta::safe_deposit_box::from_stream_prev
bool from_stream_prev(istream &is)
us::gov::cash::app::local_delta::safe_deposit_box::m_t::to_stream
void to_stream(ostream &os) const
us::gov::cash::map_tx
Definition: map_tx.h:46
us::gov::socket::datagram
Definition: datagram.h:44
us::gov::cash::app::id
static constexpr int id()
Definition: app.h:322
us::gov::crypto::sha256
Definition: sha256.h:33
us::gov::cash::app::local_delta::safe_deposit_box::f_t::get_files
void get_files(vector< pair< dfs::hash_t, uint32_t >> &v) const
us::gov::engine::peer_t
Definition: peer_t.h:27
us::gov::cash::app::local_delta::account_t::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const
us::gov::cash::cash_t
tx::cash_t cash_t
Definition: app.h:56
us::gov::cash::app::db_t::accounts_t
local_delta::accounts_t accounts_t
Definition: app.h:271
us::gov::cash::app::query_accounts_t
Definition: app.h:263
us::gov::cash::app::db_t::clear
void clear()
us::gov::cash::app::~app
~app() override
us::gov::cash::app::local_delta::safe_deposit_box::f_t
Definition: app.h:123
us::gov::cash::app::get_files
void get_files(vector< pair< hash_t, fileattr_t >> &) const
us::gov::cash::app::unlock
static bool unlock(const hash_t &address, const hash_t &locking_program, const file_tx &t)
us::gov::cash::app::local_delta::safe_deposit_box::f_t::total_mib
uint32_t total_mib() const
us::gov::cash::app::db_t
Definition: app.h:270
us::gov::cash::app::query_accounts_t::from_string
static query_accounts_t from_string(const string &)
us::gov::cash::app::process
bool process(const evidence &) override
us::gov::cash::app::charge_ledger
cash_t charge_ledger()
us::gov::cash::app::report_wallet
void report_wallet(const tx &t, const string &feedback) const
us::gov::cash::app::local_delta::safe_deposit_box::operator=
safe_deposit_box & operator=(const safe_deposit_box &other)
us::gov::cash::file_tx
Definition: file_tx.h:46
us::gov::cash::app::local_delta::safe_deposit_box::f_t::file_hash
hash_t file_hash(const string &path) const
us::gov::engine::app
Definition: app.h:43
us::gov::cash::app::local_delta::safe_deposit_box::hash_data
void hash_data(crypto::ripemd160 &) const
us::gov::cash::app::local_delta::account_t::to_stream
void to_stream(ostream &os) const
us::gov::cash::app::local_delta::accounts_t::accounts_t
accounts_t()
us::gov::cash::app::local_delta
Definition: app.h:72
us::gov::cash::app::local_delta::batch_t
Definition: app.h:208
us::gov::cash::app::local_delta::safe_deposit_box::safe_deposit_box
safe_deposit_box(const safe_deposit_box &other)
us::gov::cash::app::local_delta::safe_deposit_box::maintenance_fee
cash_t maintenance_fee() const
us::gov::cash::app::db_t::mx
mutex mx
Definition: app.h:293
us::gov::cash::app::local_delta::compute_hash
hash_t compute_hash() const
us::gov::cash::app::delta::m
engine::majority_merger< local_delta > * m
Definition: app.h:260
us::gov::cash::app::local_delta::safe_deposit_box::m_t::merge
void merge(const m_t &other)
us::gov::cash::app::db_t::tax_accounts
void tax_accounts(const cash_t &amount)
us::gov::cash::app::local_delta::safe_deposit_box::f_t::f_t
f_t(const f_t &)
us::gov::cash::app::db_t::db_t
db_t()
us::gov::cash::app::local_delta::account_t::input_eligible
cash_t input_eligible(const hash_t &coin) const
us::gov::cash::app::local_delta::safe_deposit_box::m_t::m_t
m_t(const m_t &)
us::gov::cash::app::local_delta::safe_deposit_box::m_t::hash_data
void hash_data(crypto::ripemd160 &) const
us::gov::cash::app::db_t::add_
bool add_(const hash_t &, const cash_t &amount)
us::gov::cash::app::local_delta::from_stream
void from_stream(istream &) override
us::gov::cash::app::local_delta::accounts_t::print_kv_b64
void print_kv_b64(const hash_t &addr, ostream &os) const
us::gov::cash::app::local_delta::accounts_t::withdraw
bool withdraw(const hash_t &k, const cash_t &amount)
us::gov::cash::app::local_delta::to_stream
void to_stream(ostream &) const override
us::gov::cash::app::pay_services
cash_t pay_services() const
us::gov::cash::app::local_delta::account_t::print_data
void print_data(const hash_t &addr, ostream &os) const
us::gov::cash::app::load_db
bool load_db(istream &) override
us::gov::cash::app::unlock
static bool unlock(const hash_t &address, const hash_t &locking_program, const string &locking_program_input, const tx &)
app.h
us::gov::cash::app::local_delta::safe_deposit_box::m_t::operator=
m_t & operator=(const m_t &)=delete
us::gov::engine::daemon
Definition: daemon.h:71
datagram.h
us::gov::cash::app::local_delta::account_t::on_destroy
void on_destroy(accounts_t &ledger)
us::gov::cash::app::local_delta::safe_deposit_box::t_t::hash_data
void hash_data(crypto::ripemd160 &) const
us::gov::cash::app::local_delta::batch_item
account_t batch_item
Definition: app.h:206
us::gov::cash::app::delta::from_stream_prev
static delta * from_stream_prev(istream &is)
us::gov::cash::app::delta::end_merge
void end_merge() override
us::gov::cash::hasher_t
ripemd160 hasher_t
Definition: app.h:54
us::gov::crypto::ripemd160
Definition: ripemd160.h:34
us::gov::cash::app::local_delta::accounts_t::get_files
void get_files(vector< pair< dfs::hash_t, uint32_t >> &v) const
us::gov::cash::app::local_delta::safe_deposit_box::to_stream
void to_stream(ostream &os) const
us::gov::cash::app::local_delta::safe_deposit_box::t_t::get_value
cash_t get_value(const hash_t &token) const
us::gov::cash::app::local_delta::safe_deposit_box::value
cash_t value
Definition: app.h:105
us::gov::cash::app::delta::~delta
~delta() override
us::gov::cash::app::local_delta::safe_deposit_box::get_files
void get_files(vector< pair< dfs::hash_t, uint32_t >> &) const
c
Definition: client.cpp:417
us::gov::cash::app::local_delta::account_t
Definition: app.h:185
us::gov::cash::app::pay_subsidy
void pay_subsidy(const cash_t &amount, const engine::pow_t &w)
us::gov::cash::app::local_delta::safe_deposit_box::t_t::from_stream
void from_stream(istream &is)
us::gov::cash::app::process_tx
bool process_tx(peer_t *, datagram *)
us::gov::cash::app::local_delta::safe_deposit_box::charge
cash_t charge(const cash_t &tax)
us::gov::cash::app::local_delta::accounts_t::print_data
void print_data(const hash_t &addr, ostream &os) const
us::gov::cash::app::local_delta::safe_deposit_box::f_t::f_t
f_t()
us::gov::cash::app::local_delta::safe_deposit_box::store
bool store(const string &path, const hash_t &key, const uint32_t &sz)
us::gov::cash::app::local_delta::safe_deposit_box::get_files
void get_files(const hash_t &a, vector< pair< hash_t, pair< dfs::hash_t, fileattr_t >>> &) const
us::gov::cash::keys
crypto::ec::keys keys
Definition: app.h:52
us::gov::cash::app::tax_accounts
void tax_accounts(const cash_t &amount)
std::hash< us::gov::cash::app::local_delta >::operator()
size_t operator()(const us::gov::cash::app::local_delta &) const
us::gov::cash::app::local_delta::safe_deposit_box::burn
bool burn(const hash_t &token, const cash_t &amount, cash_t &fee)
us::gov::cash::tx::sections_t
Definition: tx.h:150
us::gov::cash::app::db_t::db_t
db_t(db_t &&other)
us::gov::cash::app::db_t::print_data
void print_data(const hash_t &addr, ostream &os) const
us::gov::cash::app::local_delta::accounts_t::merge
account_t merge() const
us::gov::cash::app::local_delta::accounts_t::sum
cash_t sum() const
us::gov::cash::app::local_delta::account_t::dump
void dump(const hash_t &addr, int detail, ostream &os) const
us::gov::cash::app::process
bool process(const map_tx &)
us::gov::cash::app::db_t::withdraw_
bool withdraw_(const hash_t &k, const cash_t &amount)
us::gov::cash::app::local_delta::safe_deposit_box::add
void add(const hash_t &token, const cash_t &)
us::gov::cash::app::local_delta::accounts_t::get_balance
cash_t get_balance() const
us::gov::cash::app::local_delta::accounts_t::file_hash
hash_t file_hash(const hash_t &addr, const string &path) const
us::gov::cash::app::db_t::dump
void dump(int detail, ostream &os) const
std
Definition: app.h:380
us::gov::cash::app::db_t::from_stream
void from_stream(istream &)
us::gov::cash::app::delta::delta
delta(const delta &)=delete
us::gov::cash::app::local_delta::accounts
accounts_t accounts
Definition: app.h:237
us::gov::cash::app::process_query
bool process_query(peer_t *, datagram *) override
auth.h
us::gov::crypto::ec
Definition: ec.h:34
us::gov::cash::app::db_t::print_kv_b64
void print_kv_b64(const hash_t &addr, ostream &os) const
us::gov::cash::app::local_delta::safe_deposit_box::print_kv_b64
void print_kv_b64(ostream &os) const
us::gov::cash::app::db_t::~db_t
~db_t()
us::gov::cash::app::local_delta::safe_deposit_box::f_t::get_files
void get_files(set< dfs::hash_t > &v) const
us::gov::cash::app::local_delta::safe_deposit_box::f_t::get_files
void get_files(vector< pair< dfs::hash_t, fileattr_t >> &v) const
us::gov::cash::app::local_delta::safe_deposit_box::file_hash
hash_t file_hash(const string &path) const
us::gov::cash::app::get_files
void get_files(set< hash_t > &) const
us::gov::cash::tx
Definition: tx.h:45
us::gov::cash::app::local_delta::safe_deposit_box::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const
us::gov::cash::app::local_delta::safe_deposit_box::dump
void dump(ostream &os) const
us::gov::cash::app::clear
void clear() override
us::gov::crypto::ec::keys
Definition: ec.h:43
us::gov::cash::app::local_delta::safe_deposit_box::merge
void merge(const safe_deposit_box &other)
config.h
us::gov::cash::min_locking_program
static const hash_t min_locking_program(10000)
us::gov::cash::app::cash_query
void cash_query(peer_t *, datagram *)
us::gov::cash::app::local_delta::account_t::from_stream
bool from_stream(istream &is)
us::gov::cash::app::local_delta::safe_deposit_box::t_t::operator=
t_t & operator=(const t_t &)=delete
engine.h
us::gov::cash::app::local_delta::accounts_t::add
void add(const batch_t &batch)
us::gov::cash::app::local_delta::safe_deposit_box::m_t
Definition: app.h:107
us::gov::cash::app::local_delta::accounts_t::get_files
void get_files(set< dfs::hash_t > &v) const
us::gov::cash::app::local_delta::get_hash
const hash_t & get_hash() const
us::gov::cash::app::local_delta::safe_deposit_box
Definition: app.h:90
us::gov::cash::app::local_delta::safe_deposit_box::f_t::list_files
void list_files(const string &path, ostream &os) const
us::gov::cash::app::local_delta::accounts_t::hash_data
void hash_data(crypto::ripemd160 &) const
us::gov::cash::app::query_accounts_t::from_datagram
static query_accounts_t from_datagram(datagram *)
us::gov::cash::app::local_delta::accounts_t::from_stream
static accounts_t * from_stream(istream &is)
us::gov::cash::app::db_t::to_stream
void to_stream(ostream &) const
us::gov::cash::app::local_delta::account_t::file_hash
hash_t file_hash(const string &path) const
us::gov::cash::app::get_id
int get_id() const override
Definition: app.h:352
us::gov::cash::app::local_delta::account_t::get_value
cash_t get_value(const hash_t &token) const
us::gov::cash::app::delta::from_stream
static delta * from_stream(istream &is)
us::gov::relay::evidence
Definition: evidence.h:31
us::gov::cash::app::local_delta::safe_deposit_box::t_t::merge
void merge(const t_t &other)
us::gov::cash::app::process
bool process(const tx &, const tx::sections_t &, local_delta::batch_t &, cash_t &fee)
us::gov::cash::app::local_delta::safe_deposit_box::t_t::burn
bool burn(const hash_t &token, const cash_t &)
us::gov::cash::app::delta::accounts_t
local_delta::accounts_t accounts_t
Definition: app.h:249
us::gov::cash::app::delta::g
local_delta g
Definition: app.h:259
us::gov::cash::app::local_delta::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const override
us::gov::cash::app::local_delta::account_t::locking_program
hash_t locking_program
Definition: app.h:203
us::gov::cash::app::local_delta::safe_deposit_box::m_t::from_stream
void from_stream(istream &is)
us.pair
Definition: pair.java:19
us::gov::cash::app::local_delta::safe_deposit_box::t_t::dump
void dump(const string &prefix, const hash_t &addr, ostream &os) const
crypto.h
us::gov::cash::app::shell_command
bool shell_command(istream &, ostream &) override
us::gov::cash::app::local_delta::accounts_t::list_files
void list_files(const hash_t &addr, const string &path, ostream &os) const
us::gov::cash::app::create_local_delta
engine::app::local_delta * create_local_delta() override
us::gov::cash::app::delta::merge
uint64_t merge(engine::app::local_delta *other0) override
us::gov::cash::app::evidence_from_stream
static evidence * evidence_from_stream(uint8_t evid, istream &is)
us::gov::cash::app::local_delta::safe_deposit_box::f_t::to_stream
void to_stream(ostream &os) const
us::gov::cash::app::unlock
static bool unlock(const hash_t &address, const hash_t &locking_program, const ttx &t)
us::gov::cash::app::local_delta::account_t::account_t
account_t(const hash_t &locking_program, const box_t &)
us::gov::cash::app::checksig
bool checksig(const size_t &this_index, const string &locking_program_input, const tx &) const
us::gov::cash::app::db_t::db_t
db_t(const db_t &)=delete
us::gov::cash::app::local_delta::safe_deposit_box::t_t::from_stream_prev
void from_stream_prev(istream &is)
us::gov::cash::app::local_delta::safe_deposit_box::t_t
Definition: app.h:145
us::gov::cash::app::get_files
void get_files(vector< pair< hash_t, uint32_t >> &) const
us::gov::cash::app::local_delta::safe_deposit_box::t_t::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const
us::gov::cash::app::load_db_prev
bool load_db_prev(istream &) override
us::gov::cash::app::local_delta::accounts_t::get_files
void get_files(vector< pair< hash_t, pair< dfs::hash_t, safe_deposit_box::fileattr_t >>> &v) const
us::gov::cash::app::local_delta::from_stream_prev
void from_stream_prev(istream &) override
us::gov::cash::app::local_delta::safe_deposit_box::f_t::merge
void merge(const f_t &other)
us::gov::cash::app::local_delta::accounts_t::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const
us::gov::cash::app::new_files
vector< pair< hash_t, uint32_t > > new_files
Definition: app.h:374
us::gov::cash::app::b
engine::app b
Definition: app.h:66
tx.h
us::gov::cash::app::file_hash
void file_hash(peer_t *c, datagram *d) const
us::gov::cash::app::local_delta::accounts_t::to_stream
void to_stream(ostream &os) const