Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
 
Loading...
Searching...
No Matches
registry_store.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <memory>
5#include <optional>
6#include <string>
7#include <vector>
8
9#include "address.hpp"
10#include "pt.hpp"
11#include "format_hash.hpp"
12#include "parser.hpp"
13#include "sqlite/wal.hpp"
14
15namespace dcn::registry
16{
18 using ConnectorRecordHandle = std::shared_ptr<const ConnectorRecord>;
19 using TransformationRecordHandle = std::shared_ptr<const TransformationRecord>;
20 using ConditionRecordHandle = std::shared_ptr<const ConditionRecord>;
21
23 {
25 ConnectorRecord record;
26 evmc::bytes32 format_hash{};
27 std::vector<ScalarLabel> canonical_scalar_labels;
28 };
29
31 {
33 TransformationRecord record;
34 };
35
37 {
39 ConditionRecord record;
40 };
41
42 using NameCursor = std::string;
43
44 inline std::string serializeNameCursor(const NameCursor & cursor)
45 {
46 return cursor;
47 }
48
50 {
51 std::vector<std::string> entries;
52 std::optional<std::string> next_after;
53 bool has_more = false;
54 };
55
57 {
58 public:
59 virtual ~IRegistryStore() = default;
60
61 virtual bool hasConnector(const std::string & name) const = 0;
62
63 virtual std::optional<ConnectorRecordHandle> getConnectorRecordHandle(const std::string & name) const = 0;
64
65 virtual std::optional<evmc::bytes32> getConnectorFormatHash(const std::string & name) const = 0;
66
67 virtual bool addConnector(
68 const chain::Address & address,
69 const ConnectorRecord & record,
70 const evmc::bytes32 & format_hash,
71 const std::vector<ScalarLabel> & canonical_scalar_labels) = 0;
72
73 virtual bool addConnectorsBatch(
74 const std::vector<ConnectorBatchItem> & items,
75 bool all_or_nothing = true) = 0;
76
77 virtual std::size_t getFormatConnectorNamesCount(const evmc::bytes32 & format_hash) const = 0;
78
80 const evmc::bytes32 & format_hash,
81 const std::optional<NameCursor> & after,
82 std::size_t limit) const = 0;
83
84 virtual std::size_t getFormatsCount() const = 0;
85
87 const std::optional<evmc::bytes32> & after,
88 std::size_t limit) const = 0;
89
90 virtual std::optional<std::vector<ScalarLabel>> getScalarLabelsByFormatHash(
91 const evmc::bytes32 & format_hash) const = 0;
92
93 virtual bool hasTransformation(const std::string & name) const = 0;
94
95 virtual std::optional<TransformationRecordHandle> getTransformationRecordHandle(
96 const std::string & name) const = 0;
97
98 virtual bool addTransformation(
99 const chain::Address & address,
100 const TransformationRecord & record) = 0;
101
103 const std::vector<TransformationBatchItem> & items,
104 bool all_or_nothing = true) = 0;
105
106 virtual bool hasCondition(const std::string & name) const = 0;
107 virtual std::optional<ConditionRecordHandle> getConditionRecordHandle(
108 const std::string & name) const = 0;
109
110 virtual bool addCondition(
111 const chain::Address & address,
112 const ConditionRecord & record) = 0;
113
114 virtual bool addConditionsBatch(
115 const std::vector<ConditionBatchItem> & items,
116 bool all_or_nothing = true) = 0;
117
119 const chain::Address & owner,
120 const std::optional<NameCursor> & after,
121 std::size_t limit) const = 0;
122
124 const chain::Address & owner,
125 const std::optional<NameCursor> & after,
126 std::size_t limit) const = 0;
127
129 const chain::Address & owner,
130 const std::optional<NameCursor> & after,
131 std::size_t limit) const = 0;
132
133 virtual std::size_t getAccountsCount() const = 0;
134
136 const std::optional<chain::Address> & after,
137 std::size_t limit) const = 0;
138
140 };
141}
142
143namespace dcn::parse
144{
145 Result<registry::NameCursor> parseNameCursor(const std::string & name_token);
146 Result<evmc::bytes32> parseFormatCursorHex(const std::string & cursor_token);
147}
Definition registry_store.hpp:57
virtual bool addConnector(const chain::Address &address, const ConnectorRecord &record, const evmc::bytes32 &format_hash, const std::vector< ScalarLabel > &canonical_scalar_labels)=0
virtual bool addCondition(const chain::Address &address, const ConditionRecord &record)=0
virtual std::size_t getAccountsCount() const =0
virtual bool checkpointWal(storage::sqlite::WalCheckpointMode mode) const =0
virtual std::size_t getFormatsCount() const =0
virtual std::optional< TransformationRecordHandle > getTransformationRecordHandle(const std::string &name) const =0
virtual std::optional< ConnectorRecordHandle > getConnectorRecordHandle(const std::string &name) const =0
virtual std::optional< ConditionRecordHandle > getConditionRecordHandle(const std::string &name) const =0
virtual bool addTransformation(const chain::Address &address, const TransformationRecord &record)=0
virtual bool hasConnector(const std::string &name) const =0
virtual NameCursorPage getFormatsCursor(const std::optional< evmc::bytes32 > &after, std::size_t limit) const =0
virtual bool hasTransformation(const std::string &name) const =0
virtual NameCursorPage getAccountsCursor(const std::optional< chain::Address > &after, std::size_t limit) const =0
virtual bool addTransformationsBatch(const std::vector< TransformationBatchItem > &items, bool all_or_nothing=true)=0
virtual NameCursorPage getOwnedConnectorsCursor(const chain::Address &owner, const std::optional< NameCursor > &after, std::size_t limit) const =0
virtual std::size_t getFormatConnectorNamesCount(const evmc::bytes32 &format_hash) const =0
virtual NameCursorPage getOwnedConditionsCursor(const chain::Address &owner, const std::optional< NameCursor > &after, std::size_t limit) const =0
virtual bool addConditionsBatch(const std::vector< ConditionBatchItem > &items, bool all_or_nothing=true)=0
virtual NameCursorPage getFormatConnectorNamesCursor(const evmc::bytes32 &format_hash, const std::optional< NameCursor > &after, std::size_t limit) const =0
virtual ~IRegistryStore()=default
virtual bool hasCondition(const std::string &name) const =0
virtual std::optional< evmc::bytes32 > getConnectorFormatHash(const std::string &name) const =0
virtual bool addConnectorsBatch(const std::vector< ConnectorBatchItem > &items, bool all_or_nothing=true)=0
virtual NameCursorPage getOwnedTransformationsCursor(const chain::Address &owner, const std::optional< NameCursor > &after, std::size_t limit) const =0
virtual std::optional< std::vector< ScalarLabel > > getScalarLabelsByFormatHash(const evmc::bytes32 &format_hash) const =0
std::string name
Definition ingestion.cpp:29
evmc::address Address
Definition address.hpp:18
Definition hex.hpp:28
Result< evmc::bytes32 > parseFormatCursorHex(const std::string &cursor_token)
Definition sqlite_registry_store.cpp:1728
Result< registry::NameCursor > parseNameCursor(const std::string &name_token)
Definition sqlite_registry_store.cpp:1697
Definition registry.hpp:23
std::shared_ptr< const ConditionRecord > ConditionRecordHandle
Definition registry_store.hpp:20
std::string NameCursor
Definition registry_store.hpp:42
std::string serializeNameCursor(const NameCursor &cursor)
Definition registry_store.hpp:44
std::shared_ptr< const TransformationRecord > TransformationRecordHandle
Definition registry_store.hpp:19
dcn::chain::ScalarLabel ScalarLabel
Definition registry.hpp:24
std::shared_ptr< const ConnectorRecord > ConnectorRecordHandle
Definition registry_store.hpp:18
WalCheckpointMode
Definition wal.hpp:9
Definition format_hash.hpp:26
Definition registry_store.hpp:37
chain::Address address
Definition registry_store.hpp:38
ConditionRecord record
Definition registry_store.hpp:39
Definition registry_store.hpp:23
ConnectorRecord record
Definition registry_store.hpp:25
chain::Address address
Definition registry_store.hpp:24
evmc::bytes32 format_hash
Definition registry_store.hpp:26
std::vector< ScalarLabel > canonical_scalar_labels
Definition registry_store.hpp:27
Definition registry_store.hpp:50
bool has_more
Definition registry_store.hpp:53
std::vector< std::string > entries
Definition registry_store.hpp:51
std::optional< std::string > next_after
Definition registry_store.hpp:52
Definition registry_store.hpp:31
TransformationRecord record
Definition registry_store.hpp:33
chain::Address address
Definition registry_store.hpp:32