Scorum
atomicswap.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
6 namespace scorum {
7 namespace chain {
8 
9 class account_object;
10 enum atomicswap_contract_type : bool;
11 
12 struct atomicswap_service_i : public base_service_i<atomicswap_contract_object>
13 {
14  using atomicswap_contracts_refs_type = std::vector<std::reference_wrapper<const atomicswap_contract_object>>;
15 
17  virtual atomicswap_contracts_refs_type get_contracts(const account_object& owner) const = 0;
18 
19  virtual const atomicswap_contract_object&
20  get_contract(const account_object& from, const account_object& to, const std::string& secret_hash) const = 0;
21 
22  virtual const atomicswap_contract_object& create_contract(atomicswap_contract_type tp,
23  const account_object& owner,
24  const account_object& recipient,
25  const asset& amount,
26  const std::string& secret_hash,
27  const optional<std::string>& metadata
28  = optional<std::string>())
29  = 0;
30 
31  virtual void redeem_contract(const atomicswap_contract_object& contract, const std::string& secret) = 0;
32  virtual void refund_contract(const atomicswap_contract_object& contract) = 0;
33 };
34 
38 class dbs_atomicswap : public dbs_service_base<atomicswap_service_i>
39 {
40  friend class dbservice_dbs_factory;
41 
42 protected:
43  explicit dbs_atomicswap(database& db);
44 
45 public:
46  virtual atomicswap_contracts_refs_type get_contracts() const override;
47  virtual atomicswap_contracts_refs_type get_contracts(const account_object& owner) const override;
48 
49  virtual const atomicswap_contract_object&
50  get_contract(const account_object& from, const account_object& to, const std::string& secret_hash) const override;
51 
52  virtual const atomicswap_contract_object& create_contract(atomicswap_contract_type tp,
53  const account_object& owner,
54  const account_object& recipient,
55  const asset& amount,
56  const std::string& secret_hash,
57  const optional<std::string>& metadata
58  = optional<std::string>()) override;
59 
60  virtual void redeem_contract(const atomicswap_contract_object& contract, const std::string& secret) override;
61 
62  virtual void refund_contract(const atomicswap_contract_object& contract) override;
63 
64 private:
65  std::size_t _contracts_per_recipient(const account_name_type& owner, const account_name_type& recipient) const;
67  account_service_i& _account_svc;
68 };
69 } // namespace chain
70 } // namespace scorum
tracks the blockchain state in an extensible manner
Definition: database.hpp:52
virtual const atomicswap_contract_object & get_contract(const account_object &from, const account_object &to, const std::string &secret_hash) const override
Definition: atomicswap.cpp:48
virtual atomicswap_contracts_refs_type get_contracts() const override
Definition: atomicswap.cpp:22
virtual void refund_contract(const atomicswap_contract_object &contract) override
Definition: atomicswap.cpp:139
virtual const atomicswap_contract_object & create_contract(atomicswap_contract_type tp, const account_object &owner, const account_object &recipient, const asset &amount, const std::string &secret_hash, const optional< std::string > &metadata=optional< std::string >()) override
Definition: atomicswap.cpp:60
virtual void redeem_contract(const atomicswap_contract_object &contract, const std::string &secret) override
Definition: atomicswap.cpp:119
fc::fixed_string_16 account_name_type
Definition: types.hpp:62
Definition: asset.cpp:15
virtual const atomicswap_contract_object & create_contract(atomicswap_contract_type tp, const account_object &owner, const account_object &recipient, const asset &amount, const std::string &secret_hash, const optional< std::string > &metadata=optional< std::string >())=0
virtual atomicswap_contracts_refs_type get_contracts(const account_object &owner) const =0
std::vector< std::reference_wrapper< const atomicswap_contract_object > > atomicswap_contracts_refs_type
Definition: atomicswap.hpp:14
virtual const atomicswap_contract_object & get_contract(const account_object &from, const account_object &to, const std::string &secret_hash) const =0
virtual void refund_contract(const atomicswap_contract_object &contract)=0
virtual void redeem_contract(const atomicswap_contract_object &contract, const std::string &secret)=0
virtual atomicswap_contracts_refs_type get_contracts() const =0