hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
rocksdb_command_executor.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_ROCKSDB_COMMAND_EXECUTOR_HPP
7 #define IROHA_ROCKSDB_COMMAND_EXECUTOR_HPP
8 
9 #include <optional>
10 
11 #include <fmt/format.h>
16 
17 namespace rocksdb {
18  class Transaction;
19 }
20 
21 namespace shared_model::interface {
22  class AddAssetQuantity;
23  class AddPeer;
24  class AddSignatory;
25  class AppendRole;
26  class CompareAndSetAccountDetail;
27  class CallEngine;
28  class CreateAccount;
29  class CreateAsset;
30  class CreateDomain;
31  class CreateRole;
32  class DetachRole;
33  class GrantPermission;
34  class PermissionToString;
35  class RemovePeer;
36  class RemoveSignatory;
37  class RevokePermission;
38  class SetAccountDetail;
39  class SetQuorum;
40  class SubtractAssetQuantity;
41  class TransferAsset;
42  class SetSettingValue;
43 } // namespace shared_model::interface
44 
45 namespace iroha::ametsuchi {
46 
47  class VmCaller;
48 
49  class RocksDbCommandExecutor final : public CommandExecutor {
50  public:
52 
53  enum ErrorCodes {
54  kNoPermissions = 2,
56  kInvalidAmount = 3,
57  kRoleAlreadyExists = 3,
58  kSignatoryMustNotExist = 3,
59  kInvalidAssetAmount = 4,
60  kIncorrectOldValue = 4,
61  kPeersCountIsNotEnough = 4,
62  kNoSignatory = 4,
63  kCountNotEnough = 5,
64  kNotEnoughAssets = 6,
65  kIncorrectBalance = 7,
66  kException = 1002,
67  kNoImplementation = 1005,
68  kPermissionIsAlreadySet = 1007,
69  kPublicKeyIsEmpty = 1008,
70  kInvalidFieldSize = 1009,
71  };
72 
74  std::shared_ptr<RocksDBContext> db_context,
75  std::shared_ptr<shared_model::interface::PermissionToString>
76  perm_converter,
77  std::optional<std::reference_wrapper<const VmCaller>> vm_caller);
78 
80 
83  const shared_model::interface::types::AccountIdType &creator_account_id,
84  const std::string &tx_hash,
86  bool do_validation) override;
87 
88  void skipChanges() override;
89  DatabaseTransaction &dbSession() override;
90  std::shared_ptr<RocksDBContext> getSession();
91 
92  ExecutionResult operator()(
93  RocksDbCommon &common,
95  const shared_model::interface::types::AccountIdType &creator_account_id,
96  const std::string &tx_hash,
98  bool do_validation,
99  shared_model::interface::RolePermissionSet const &creator_permissions);
100 
101  ExecutionResult operator()(
102  RocksDbCommon &common,
103  const shared_model::interface::AddPeer &command,
104  const shared_model::interface::types::AccountIdType &creator_account_id,
105  const std::string &tx_hash,
107  bool do_validation,
108  shared_model::interface::RolePermissionSet const &creator_permissions);
109 
110  ExecutionResult operator()(
111  RocksDbCommon &common,
113  const shared_model::interface::types::AccountIdType &creator_account_id,
114  const std::string &tx_hash,
116  bool do_validation,
117  shared_model::interface::RolePermissionSet const &creator_permissions);
118 
119  ExecutionResult operator()(
120  RocksDbCommon &common,
122  const shared_model::interface::types::AccountIdType &creator_account_id,
123  const std::string &tx_hash,
125  bool do_validation,
126  shared_model::interface::RolePermissionSet const &creator_permissions);
127 
128  ExecutionResult operator()(
129  RocksDbCommon &common,
131  const shared_model::interface::types::AccountIdType &creator_account_id,
132  const std::string &tx_hash,
134  bool do_validation,
135  shared_model::interface::RolePermissionSet const &creator_permissions);
136 
137  ExecutionResult operator()(
138  RocksDbCommon &common,
140  const shared_model::interface::types::AccountIdType &creator_account_id,
141  const std::string &tx_hash,
143  bool do_validation,
144  shared_model::interface::RolePermissionSet const &creator_permissions);
145 
146  ExecutionResult operator()(
147  RocksDbCommon &common,
149  const shared_model::interface::types::AccountIdType &creator_account_id,
150  const std::string &tx_hash,
152  bool do_validation,
153  shared_model::interface::RolePermissionSet const &creator_permissions);
154 
155  ExecutionResult operator()(
156  RocksDbCommon &common,
158  const shared_model::interface::types::AccountIdType &creator_account_id,
159  const std::string &tx_hash,
161  bool do_validation,
162  shared_model::interface::RolePermissionSet const &creator_permissions);
163 
164  ExecutionResult operator()(
165  RocksDbCommon &common,
167  const shared_model::interface::types::AccountIdType &creator_account_id,
168  const std::string &tx_hash,
170  bool do_validation,
171  shared_model::interface::RolePermissionSet const &creator_permissions);
172 
173  ExecutionResult operator()(
174  RocksDbCommon &common,
176  const shared_model::interface::types::AccountIdType &creator_account_id,
177  const std::string &tx_hash,
179  bool do_validation,
180  shared_model::interface::RolePermissionSet const &creator_permissions);
181 
182  ExecutionResult operator()(
183  RocksDbCommon &common,
185  const shared_model::interface::types::AccountIdType &creator_account_id,
186  const std::string &tx_hash,
188  bool do_validation,
189  shared_model::interface::RolePermissionSet const &creator_permissions);
190 
191  ExecutionResult operator()(
192  RocksDbCommon &common,
194  const shared_model::interface::types::AccountIdType &creator_account_id,
195  const std::string &tx_hash,
197  bool do_validation,
198  shared_model::interface::RolePermissionSet const &creator_permissions);
199 
200  ExecutionResult operator()(
201  RocksDbCommon &common,
203  const shared_model::interface::types::AccountIdType &creator_account_id,
204  const std::string &tx_hash,
206  bool do_validation,
207  shared_model::interface::RolePermissionSet const &creator_permissions);
208 
209  ExecutionResult operator()(
210  RocksDbCommon &common,
212  const shared_model::interface::types::AccountIdType &creator_account_id,
213  const std::string &tx_hash,
215  bool do_validation,
216  shared_model::interface::RolePermissionSet const &creator_permissions);
217 
218  ExecutionResult operator()(
219  RocksDbCommon &common,
221  const shared_model::interface::types::AccountIdType &creator_account_id,
222  const std::string &tx_hash,
224  bool do_validation,
225  shared_model::interface::RolePermissionSet const &creator_permissions);
226 
227  ExecutionResult operator()(
228  RocksDbCommon &common,
230  const shared_model::interface::types::AccountIdType &creator_account_id,
231  const std::string &tx_hash,
233  bool do_validation,
234  shared_model::interface::RolePermissionSet const &creator_permissions);
235 
236  ExecutionResult operator()(
237  RocksDbCommon &common,
238  const shared_model::interface::SetQuorum &command,
239  const shared_model::interface::types::AccountIdType &creator_account_id,
240  const std::string &tx_hash,
242  bool do_validation,
243  shared_model::interface::RolePermissionSet const &creator_permissions);
244 
245  ExecutionResult operator()(
246  RocksDbCommon &common,
248  const shared_model::interface::types::AccountIdType &creator_account_id,
249  const std::string &tx_hash,
251  bool do_validation,
252  shared_model::interface::RolePermissionSet const &creator_permissions);
253 
254  ExecutionResult operator()(
255  RocksDbCommon &common,
257  const shared_model::interface::types::AccountIdType &creator_account_id,
258  const std::string &tx_hash,
260  bool do_validation,
261  shared_model::interface::RolePermissionSet const &creator_permissions);
262 
263  ExecutionResult operator()(
264  RocksDbCommon &common,
266  const shared_model::interface::types::AccountIdType &creator_account_id,
267  const std::string &,
269  bool do_validation,
270  shared_model::interface::RolePermissionSet const &creator_permissions);
271 
272  private:
273  std::shared_ptr<RocksDBContext> db_context_;
274  std::shared_ptr<shared_model::interface::PermissionToString>
275  perm_converter_;
276  std::optional<std::reference_wrapper<const VmCaller>> vm_caller_;
277  RocksDbTransaction db_transaction_;
278  };
279 
280 } // namespace iroha::ametsuchi
281 
282 #endif // IROHA_ROCKSDB_COMMAND_EXECUTOR_HPP
Definition: compare_and_set_account_detail.hpp:21
Definition: add_signatory.hpp:19
Definition: block_query.hpp:17
Definition: rocksdb_db_transaction.hpp:15
Definition: rocksdb_command_executor.hpp:49
Definition: set_quorum.hpp:18
ErrorCodes
Definition: rocksdb_command_executor.hpp:53
Definition: permissions.hpp:103
Definition: subtract_asset_quantity.hpp:20
Definition: set_setting_value.hpp:19
Definition: result_fwd.hpp:27
Definition: detach_role.hpp:19
Definition: remove_signatory.hpp:18
Definition: create_asset.hpp:18
Definition: call_engine.hpp:20
Definition: rocksdb_command_executor.hpp:17
Definition: remove_peer.hpp:19
Definition: append_role.hpp:19
Definition: transfer_asset.hpp:19
std::string AccountIdType
Type of account id.
Definition: types.hpp:38
Definition: command_executor.hpp:48
Definition: command_executor.hpp:14
Definition: create_domain.hpp:18
Definition: create_account.hpp:19
WsvCommandResult execute(soci::statement &st, Function &&error)
Definition: postgres_wsv_command.cpp:26
Definition: grant_permission.hpp:19
Definition: set_account_detail.hpp:19
Definition: db_transaction.hpp:13
Definition: revoke_permission.hpp:19
Definition: rocksdb_common.hpp:557
Definition: rocksdb_common.hpp:455
Definition: command.hpp:41
int32_t CommandIndexType
Type of command index within a transaction.
Definition: types.hpp:100
Definition: add_asset_quantity.hpp:20
Definition: create_role.hpp:19
Definition: add_peer.hpp:20