plebble
diff.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_5be98661b464a5d857a59dc71f31d27ce8d4c8f8f678e03cca8653a2a3372b9f
18 #define USGOV_5be98661b464a5d857a59dc71f31d27ce8d4c8f8f678e03cca8653a2a3372b9f
19 
20 #include <vector>
21 #include <cassert>
22 #include <unordered_map>
23 #include <thread>
24 #include <us/gov/socket.h>
25 #include <us/gov/auth.h>
26 #include <map>
27 #include <set>
28 #include <us/gov/crypto/hash.h>
29 #include <us/gov/crypto/ec.h>
30 #include "app.h"
31 #include "signed_data.h"
32 
33 namespace us { namespace gov {
34 namespace engine {
35  using namespace std;
36  using socket::datagram;
37  struct peer_t;
38  using crypto::ripemd160;
42  struct diff;
43 
44  static constexpr char streams_version{'5'};
45 
46  struct local_deltas final: map<int,app::local_delta*>, signed_data {
47  local_deltas(): id(0) {}
48  local_deltas(const local_deltas& other)=delete;
49  virtual ~local_deltas();
50  void hash_data_to_sign(crypto::ec::sigmsg_hasher_t&) const override;
51  void hash_data(ripemd160&) const override;
52  void dump(ostream&) const;
53  void to_stream(ostream&) const override;
54  static local_deltas* from_stream(istream&);
55  static local_deltas* from_stream_prev(istream&);
56  static local_deltas* load(istream& is);
57  void save(ostream&) const;
58 
59  uint64_t id;
60  };
61 
62  struct pow_t final:map<pubkey_t::hash_t, uint64_t> {
63  uint64_t sum() const;
64  void dump(ostream&os) const;
65  };
66 
67  struct diff final: map<int,app::delta*> {
68  typedef map<int,app::delta*> b;
71 
72  diff() {}
73  diff(const diff&)=delete;
74  ~diff() { for (auto& i:*this) delete i.second; }
75 
76  void dump(ostream&) const;
77  uint64_t add(int appid, app::local_delta* g);
78  bool add(local_deltas*);
79  void close();
80  static hash_t hash(const string&);
81  const hash_t& hash() const;
82  void to_stream(ostream&) const;
83  static diff* create(istream&);
84 
86  mutable bool h{false};
88  uint64_t id;
89  mutex mx;
92  };
93 
94  typedef diff base;
95 
96 }}
97 }
98 
99 #endif
100 
us::gov::engine::local_deltas::id
uint64_t id
Definition: diff.h:59
us::gov::engine::app::delta::create
static delta * create(int id)
us::gov::engine::keys
crypto::ec::keys keys
Definition: diff.h:39
app.h
us::gov::engine::signed_data::pubkey
pubkey_t pubkey
Definition: signed_data.h:51
us::gov::engine::local_deltas::local_deltas
local_deltas()
Definition: diff.h:47
us::gov::engine::diff::proof_of_work
pow_t proof_of_work
Definition: diff.h:90
us::gov::engine::local_deltas::hash_data
void hash_data(ripemd160 &) const override
Definition: diff.cpp:43
us::gov::engine::signed_data::to_stream
virtual void to_stream(ostream &) const
us::gov::engine::local_deltas::save
void save(ostream &) const
Definition: diff.cpp:90
us::gov::cash::hash_t
hasher_t::value_type hash_t
Definition: app.h:55
diff.h
us::gov::engine::app::local_delta::create_prev
static local_delta * create_prev(int appid, istream &)
us::gov::engine::diff::dump
void dump(ostream &) const
us::gov::engine::pow_t
Definition: diff.h:62
us::gov::crypto::sha256::write
void write(const unsigned char *data, size_t len)
us::gov::engine::app::local_delta
Definition: app.h:47
c
us::gov::engine::diff c
Definition: diff.cpp:29
us::gov::dfs::peer_t
relay::peer_t peer_t
Definition: daemon.h:31
us
Definition: daemon.h:22
us::gov::engine::diff::add
bool add(local_deltas *)
us::gov::crypto::ripemd160::value_type
Definition: ripemd160.h:38
unlikely
#define unlikely(x)
Definition: likely.h:30
us::gov::engine::diff::diff
diff()
Definition: diff.h:72
us::gov::engine::app::delta
Definition: app.h:67
likely.h
us::gov::engine::local_deltas
Definition: diff.h:46
us::gov::engine::diff
Definition: diff.h:67
us::gov::engine::diff::mx_proof_of_work
mutex mx_proof_of_work
Definition: diff.h:91
us::gov::engine::diff::hash_t
app::hash_t hash_t
Definition: diff.h:70
us::gov::engine::streams_version
static constexpr char streams_version
Definition: diff.h:44
us::gov::engine::diff::hash
const hash_t & hash() const
us::gov::crypto::ec::keys::pub_t
Definition: ec.h:44
us::gov::engine::diff::close
void close()
us::gov::crypto::sha256
Definition: sha256.h:33
us::gov::engine::app::delta::create_prev
static delta * create_prev(int id, istream &)
us::gov::engine::diff::hash
static hash_t hash(const string &)
us::gov::engine::diff::b
map< int, app::delta * > b
Definition: diff.h:68
us::gov::engine::diff::add
uint64_t add(int appid, app::local_delta *g)
us::gov::engine::local_deltas::local_deltas
local_deltas(const local_deltas &other)=delete
us::gov::engine::diff::diff
diff(const diff &)=delete
us::gov::engine::diff::hash_cached
hash_t hash_cached
Definition: diff.h:85
us::gov::engine::local_deltas::to_stream
void to_stream(ostream &) const override
Definition: diff.cpp:65
us::gov::engine::diff::mx
mutex mx
Definition: diff.h:89
us::gov::engine::diff::prev
hash_t prev
Definition: diff.h:87
us::gov::engine::local_deltas::~local_deltas
virtual ~local_deltas()
Definition: diff.cpp:31
us::gov::engine::signed_data::signature
string signature
Definition: signed_data.h:52
us::gov::cash::hasher_t
ripemd160 hasher_t
Definition: app.h:54
us::gov::crypto::ripemd160
Definition: ripemd160.h:34
us::gov::engine::local_deltas::dump
void dump(ostream &) const
Definition: diff.cpp:51
us::gov::engine::diff::~diff
~diff()
Definition: diff.h:74
c
Definition: client.cpp:417
us::gov::engine::signed_data
Definition: signed_data.h:29
signed_data.h
us::gov::engine::app::local_delta::create
static local_delta * create(int id)
us::vcs::version
static void version(ostream &os)
Definition: vcs.h:36
us::gov::engine::diff::hasher_t
app::hasher_t hasher_t
Definition: diff.h:69
us::gov::engine::pow_t::sum
uint64_t sum() const
Definition: diff.cpp:339
us::gov::engine
Definition: hmi.h:32
std
Definition: app.h:380
us::gov::engine::signed_data::from_stream_prev
static void from_stream_prev(signed_data &, istream &)
auth.h
us::gov::engine::local_deltas::load
static local_deltas * load(istream &is)
Definition: diff.cpp:76
us::gov::engine::diff::id
uint64_t id
Definition: diff.h:88
socket.h
us::gov::engine::pow_t::dump
void dump(ostream &os) const
Definition: diff.cpp:347
hash.h
us::gov::crypto::ec::keys::pub_t::hash
const hash_t & hash() const
Definition: ec.cpp:105
us::gov::engine::diff::create
static diff * create(istream &)
us::gov::crypto::ec::keys
Definition: ec.h:43
base58.h
us::gov::engine::diff::to_stream
void to_stream(ostream &) const
us::gov::engine::base
diff base
Definition: diff.h:94
us::gov::crypto::ripemd160::write
void write(const vector< unsigned char > &)
us::gov::engine::local_deltas::from_stream_prev
static local_deltas * from_stream_prev(istream &)
Definition: diff.cpp:130
us::gov::engine::local_deltas::from_stream
static local_deltas * from_stream(istream &)
Definition: diff.cpp:95
us::gov::engine::pubkeyh_t
pubkey_t::hash_t pubkeyh_t
Definition: diff.h:41
us::gov::engine::signed_data::from_stream
static void from_stream(signed_data &, istream &)
gov.h
ec.h
us::gov::engine::pubkey_t
keys::pub_t pubkey_t
Definition: diff.h:40
log
#define log
Definition: gov.h:83
us::gov::engine::local_deltas::hash_data_to_sign
void hash_data_to_sign(crypto::ec::sigmsg_hasher_t &) const override
Definition: diff.cpp:35