Open-Transactions  0.93.0-ge03d287
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
OTAccount.hpp
Go to the documentation of this file.
1 /************************************************************
2  *
3  * OTAccount.hpp
4  *
5  */
6 
7 /************************************************************
8  -----BEGIN PGP SIGNED MESSAGE-----
9  Hash: SHA1
10 
11  * OPEN TRANSACTIONS
12  *
13  * Financial Cryptography and Digital Cash
14  * Library, Protocol, API, Server, CLI, GUI
15  *
16  * -- Anonymous Numbered Accounts.
17  * -- Untraceable Digital Cash.
18  * -- Triple-Signed Receipts.
19  * -- Cheques, Vouchers, Transfers, Inboxes.
20  * -- Basket Currencies, Markets, Payment Plans.
21  * -- Signed, XML, Ricardian-style Contracts.
22  * -- Scripted smart contracts.
23  *
24  * Copyright (C) 2010-2013 by "Fellow Traveler" (A pseudonym)
25  *
26  * EMAIL:
28  *
29  * BITCOIN: 1NtTPVVjDsUfDWybS4BwvHpG2pdS9RnYyQ
30  *
31  * KEY FINGERPRINT (PGP Key in license file):
32  * 9DD5 90EB 9292 4B48 0484 7910 0308 00ED F951 BB8E
33  *
34  * OFFICIAL PROJECT WIKI(s):
35  * https://github.com/FellowTraveler/Moneychanger
36  * https://github.com/FellowTraveler/Open-Transactions/wiki
37  *
38  * WEBSITE:
39  * http://www.OpenTransactions.org/
40  *
41  * Components and licensing:
42  * -- Moneychanger..A Java client GUI.....LICENSE:.....GPLv3
43  * -- otlib.........A class library.......LICENSE:...LAGPLv3
44  * -- otapi.........A client API..........LICENSE:...LAGPLv3
45  * -- opentxs/ot....Command-line client...LICENSE:...LAGPLv3
46  * -- otserver......Server Application....LICENSE:....AGPLv3
47  * Github.com/FellowTraveler/Open-Transactions/wiki/Components
48  *
49  * All of the above OT components were designed and written by
50  * Fellow Traveler, with the exception of Moneychanger, which
51  * was contracted out to Vicky C ([email protected]).
52  * The open-source community has since actively contributed.
53  *
54  * -----------------------------------------------------
55  *
56  * LICENSE:
57  * This program is free software: you can redistribute it
58  * and/or modify it under the terms of the GNU Affero
59  * General Public License as published by the Free Software
60  * Foundation, either version 3 of the License, or (at your
61  * option) any later version.
62  *
63  * ADDITIONAL PERMISSION under the GNU Affero GPL version 3
64  * section 7: (This paragraph applies only to the LAGPLv3
65  * components listed above.) If you modify this Program, or
66  * any covered work, by linking or combining it with other
67  * code, such other code is not for that reason alone subject
68  * to any of the requirements of the GNU Affero GPL version 3.
69  * (==> This means if you are only using the OT API, then you
70  * don't have to open-source your code--only your changes to
71  * Open-Transactions itself must be open source. Similar to
72  * LGPLv3, except it applies to software-as-a-service, not
73  * just to distributing binaries.)
74  *
75  * Extra WAIVER for OpenSSL, Lucre, and all other libraries
76  * used by Open Transactions: This program is released under
77  * the AGPL with the additional exemption that compiling,
78  * linking, and/or using OpenSSL is allowed. The same is true
79  * for any other open source libraries included in this
80  * project: complete waiver from the AGPL is hereby granted to
81  * compile, link, and/or use them with Open-Transactions,
82  * according to their own terms, as long as the rest of the
83  * Open-Transactions terms remain respected, with regard to
84  * the Open-Transactions code itself.
85  *
86  * Lucre License:
87  * This code is also "dual-license", meaning that Ben Lau-
88  * rie's license must also be included and respected, since
89  * the code for Lucre is also included with Open Transactions.
90  * See Open-Transactions/src/otlib/lucre/LUCRE_LICENSE.txt
91  * The Laurie requirements are light, but if there is any
92  * problem with his license, simply remove the Lucre code.
93  * Although there are no other blind token algorithms in Open
94  * Transactions (yet. credlib is coming), the other functions
95  * will continue to operate.
96  * See Lucre on Github: https://github.com/benlaurie/lucre
97  * -----------------------------------------------------
98  * You should have received a copy of the GNU Affero General
99  * Public License along with this program. If not, see:
100  * http://www.gnu.org/licenses/
101  *
102  * If you would like to use this software outside of the free
103  * software license, please contact FellowTraveler.
104  * (Unfortunately many will run anonymously and untraceably,
105  * so who could really stop them?)
106  *
107  * DISCLAIMER:
108  * This program is distributed in the hope that it will be
109  * useful, but WITHOUT ANY WARRANTY; without even the implied
110  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
111  * PURPOSE. See the GNU Affero General Public License for
112  * more details.
113 
114  -----BEGIN PGP SIGNATURE-----
115  Version: GnuPG v1.4.9 (Darwin)
116 
117  iQIcBAEBAgAGBQJRSsfJAAoJEAMIAO35UbuOQT8P/RJbka8etf7wbxdHQNAY+2cC
118  vDf8J3X8VI+pwMqv6wgTVy17venMZJa4I4ikXD/MRyWV1XbTG0mBXk/7AZk7Rexk
119  KTvL/U1kWiez6+8XXLye+k2JNM6v7eej8xMrqEcO0ZArh/DsLoIn1y8p8qjBI7+m
120  aE7lhstDiD0z8mwRRLKFLN2IH5rAFaZZUvj5ERJaoYUKdn4c+RcQVei2YOl4T0FU
121  LWND3YLoH8naqJXkaOKEN4UfJINCwxhe5Ke9wyfLWLUO7NamRkWD2T7CJ0xocnD1
122  sjAzlVGNgaFDRflfIF4QhBx1Ddl6wwhJfw+d08bjqblSq8aXDkmFA7HeunSFKkdn
123  oIEOEgyj+veuOMRJC5pnBJ9vV+7qRdDKQWaCKotynt4sWJDGQ9kWGWm74SsNaduN
124  TPMyr9kNmGsfR69Q2Zq/FLcLX/j8ESxU+HYUB4vaARw2xEOu2xwDDv6jt0j3Vqsg
125  x7rWv4S/Eh18FDNDkVRChiNoOIilLYLL6c38uMf1pnItBuxP3uhgY6COm59kVaRh
126  nyGTYCDYD2TK+fI9o89F1297uDCwEJ62U0Q7iTDp5QuXCoxkPfv8/kX6lS6T3y9G
127  M9mqIoLbIQ1EDntFv7/t6fUTS2+46uCrdZWbQ5RjYXdrzjij02nDmJAm2BngnZvd
128  kamH0Y/n11lCvo1oQxM+
129  =uSzz
130  -----END PGP SIGNATURE-----
131  **************************************************************/
132 
133 #ifndef OPENTXS_CORE_OTACCOUNT_HPP
134 #define OPENTXS_CORE_OTACCOUNT_HPP
135 
136 #include "OTTransactionType.hpp"
137 #include <stdint.h>
138 
139 namespace opentxs
140 {
141 
142 class OTString;
143 class OTAccount;
144 class OTLedger;
145 class OTMessage;
146 class OTPseudonym;
147 
149 {
151  OTString input);
152 
153 public:
154  // If you add any types to this list, update the list of strings at the
155  // top of the .cpp file.
156  enum AccountType {
157  simple, // used by users
158  issuer, // used by issuers (these can only go negative.)
159  basket, // issuer acct used by basket currencies (these can only go
160  // negative)
161  basketsub, // used by the server (to store backing reserves for basket
162  // sub-accounts)
163  mint, // used by mints (to store backing reserves for cash)
164  voucher, // used by the server (to store backing reserves for
165  // vouchers)
166  stash, // used by the server (to store backing reserves for stashes,
167  // for smart contracts.)
169  };
170 
171 public:
172  EXPORT OTAccount(const OTIdentifier& userId, const OTIdentifier& accountId,
173  const OTIdentifier& serverId, const OTString& name);
174  EXPORT OTAccount(const OTIdentifier& userId, const OTIdentifier& accountId,
175  const OTIdentifier& serverId);
176 
177  EXPORT virtual ~OTAccount();
178 
179  EXPORT virtual void Release();
180  // overriding this so I can set filename automatically inside based on ID.
181  EXPORT virtual bool LoadContract();
182  EXPORT virtual bool SaveContractWallet(std::ofstream& ofs) const;
183  EXPORT virtual bool SaveContractWallet(OTString& contents) const;
184  EXPORT virtual bool DisplayStatistics(OTString& contents) const;
185 
186  inline void MarkForDeletion()
187  {
188  markForDeletion_ = true;
189  }
190 
191  inline bool IsMarkedForDeletion() const
192  {
193  return markForDeletion_;
194  }
195 
196  EXPORT bool IsInternalServerAcct() const;
197 
198  EXPORT bool IsOwnedByUser() const;
199  EXPORT bool IsOwnedByEntity() const;
200 
201  EXPORT bool IsAllowedToGoNegative() const;
202  EXPORT bool IsIssuer() const;
203 
204  // For accounts used by smart contracts, to stash funds while running.
205  EXPORT bool IsStashAcct() const
206  {
207  return (acctType_ == stash);
208  }
209 
210  EXPORT const int64_t& GetStashTransNum() const
211  {
212  return stashTransNum_;
213  }
214 
215  EXPORT void SetStashTransNum(const int64_t& transNum)
216  {
217  stashTransNum_ = transNum;
218  }
219 
220  EXPORT void InitAccount();
221 
222  EXPORT void Release_Account();
223  EXPORT static OTAccount* GenerateNewAccount(const OTIdentifier& userId,
224  const OTIdentifier& serverId,
225  const OTPseudonym& serverNym,
226  const OTMessage& message,
227  AccountType acctType = simple,
228  int64_t stashTransNum = 0);
229 
230  EXPORT bool GenerateNewAccount(const OTPseudonym& server,
231  const OTMessage& message,
232  AccountType acctType = simple,
233  int64_t stashTransNum = 0);
234  // Let's say you don't have or know the UserID, and you just want to load
235  // the damn thing up.
236  // Then call this function. It will set userID for you.
237  EXPORT static OTAccount* LoadExistingAccount(const OTIdentifier& accountId,
238  const OTIdentifier& serverId);
239  // Caller responsible to delete.
240  EXPORT OTLedger* LoadInbox(OTPseudonym& nym) const;
241  // Caller responsible to delete.
242  EXPORT OTLedger* LoadOutbox(OTPseudonym& nym) const;
243 
244  // If you pass the identifier in, the inbox hash is recorded there
245  EXPORT bool SaveInbox(OTLedger& box, OTIdentifier* hash = nullptr);
246  // If you pass the identifier in, the outbox hash is recorded there
247  EXPORT bool SaveOutbox(OTLedger& box, OTIdentifier* nash = nullptr);
248  EXPORT const OTIdentifier& GetAssetTypeID() const;
249  EXPORT int64_t GetBalance() const;
250  // Debit a certain amount from the account (presumably the same amount is
251  // being added somewhere)
252  EXPORT bool Debit(const int64_t& amount);
253  // Credit a certain amount from the account (presumably the same amount is
254  // being subtracted somewhere)
255  EXPORT bool Credit(const int64_t& amount);
256  // Compares the NymID loaded from the account file with whatever Nym the
257  // programmer wants to verify.
258  EXPORT bool VerifyOwner(const OTPseudonym& candidate) const;
259  EXPORT bool VerifyOwnerByID(const OTIdentifier& nymId) const;
260  // generates filename based on accounts path and account ID. Saves to the
261  // standard location for an acct.
262  EXPORT bool SaveAccount();
263 
264  EXPORT void SetInboxHash(const OTIdentifier& input);
265  EXPORT bool GetInboxHash(OTIdentifier& output);
266 
267  EXPORT void SetOutboxHash(const OTIdentifier& input);
268  EXPORT bool GetOutboxHash(OTIdentifier& output);
269  EXPORT static char const* _GetTypeString(AccountType accountType);
270 
271  EXPORT char const* GetTypeString() const
272  {
273  return _GetTypeString(acctType_);
274  }
275 
276 protected:
277  OTAccount(const OTIdentifier& userId, const OTIdentifier& serverId);
278  OTAccount();
279 
280  // return -1 if error, 0 if nothing, and 1 if the node was processed.
281  virtual int32_t ProcessXMLNode(irr::io::IrrXMLReader*& xml);
282 
283  virtual void UpdateContents();
284 
285 protected:
287  // These are all the variables from the account file itself.
291  // the Transaction Number of a smart contract running on cron, if this is a
292  // stash account.
293  int64_t stashTransNum_;
294  // Default FALSE. When set to true, saves a "DELETED" flag with this Account
296  // for easy cleanup later when the server is doing some maintenance.
297  // Hash of this account's Inbox, so we don't download it more often than
298  // necessary.
300  // Hash of this account's Outbox, so we don't download it more often than
301  // necessary.
303 };
304 
305 } // namespace opentxs
306 
307 #endif // OPENTXS_CORE_OTACCOUNT_HPP
virtual EXPORT bool LoadContract()
Definition: OTAccount.cpp:372
virtual void UpdateContents()
Definition: OTAccount.cpp:804
EXPORT void SetInboxHash(const OTIdentifier &input)
Definition: OTAccount.cpp:312
EXPORT void Release_Account()
Definition: OTAccount.cpp:1069
virtual EXPORT void Release()
Definition: OTAccount.cpp:1077
EXPORT void InitAccount()
Definition: OTAccount.cpp:454
virtual EXPORT bool DisplayStatistics(OTString &contents) const
Definition: OTAccount.cpp:728
int64_t stashTransNum_
Definition: OTAccount.hpp:293
EXPORT const OTIdentifier & GetAssetTypeID() const
Definition: OTAccount.cpp:449
EXPORT bool SaveOutbox(OTLedger &box, OTIdentifier *nash=nullptr)
Definition: OTAccount.cpp:287
EXPORT char const * GetTypeString() const
Definition: OTAccount.hpp:271
static EXPORT OTTransactionType * TransactionFactory(OTString strInput)
EXPORT int64_t GetBalance() const
Definition: OTAccount.cpp:664
EXPORT bool VerifyOwnerByID(const OTIdentifier &nymId) const
Definition: OTAccount.cpp:472
OTString balanceDate_
Definition: OTAccount.hpp:289
static EXPORT OTAccount * GenerateNewAccount(const OTIdentifier &userId, const OTIdentifier &serverId, const OTPseudonym &serverNym, const OTMessage &message, AccountType acctType=simple, int64_t stashTransNum=0)
Definition: OTAccount.cpp:531
EXPORT OTLedger * LoadOutbox(OTPseudonym &nym) const
Definition: OTAccount.cpp:242
EXPORT void SetOutboxHash(const OTIdentifier &input)
Definition: OTAccount.cpp:338
virtual EXPORT ~OTAccount()
Definition: OTAccount.cpp:213
EXPORT bool IsInternalServerAcct() const
Definition: OTAccount.cpp:993
EXPORT bool IsStashAcct() const
Definition: OTAccount.hpp:205
EXPORT bool GetInboxHash(OTIdentifier &output)
Definition: OTAccount.cpp:317
EXPORT bool IsIssuer() const
Definition: OTAccount.cpp:1036
static EXPORT char const * _GetTypeString(AccountType accountType)
Definition: OTAccount.cpp:218
OTIdentifier inboxHash_
Definition: OTAccount.hpp:299
EXPORT void SetStashTransNum(const int64_t &transNum)
Definition: OTAccount.hpp:215
virtual EXPORT bool SaveContractWallet(std::ofstream &ofs) const
Definition: OTAccount.cpp:782
EXPORT bool VerifyOwner(const OTPseudonym &candidate) const
Definition: OTAccount.cpp:463
virtual int32_t ProcessXMLNode(irr::io::IrrXMLReader *&xml)
Definition: OTAccount.cpp:854
AccountType acctType_
Definition: OTAccount.hpp:286
EXPORT OTLedger * LoadInbox(OTPseudonym &nym) const
Definition: OTAccount.cpp:225
bool IsMarkedForDeletion() const
Definition: OTAccount.hpp:191
EXPORT bool IsOwnedByEntity() const
Definition: OTAccount.cpp:1031
EXPORT bool GetOutboxHash(OTIdentifier &output)
Definition: OTAccount.cpp:343
EXPORT bool IsAllowedToGoNegative() const
Definition: OTAccount.cpp:1041
EXPORT bool SaveInbox(OTLedger &box, OTIdentifier *hash=nullptr)
Definition: OTAccount.cpp:260
OTString balanceAmount_
Definition: OTAccount.hpp:290
EXPORT const int64_t & GetStashTransNum() const
Definition: OTAccount.hpp:210
EXPORT bool SaveAccount()
Definition: OTAccount.cpp:379
EXPORT bool Credit(const int64_t &amount)
Definition: OTAccount.cpp:415
static EXPORT OTAccount * LoadExistingAccount(const OTIdentifier &accountId, const OTIdentifier &serverId)
Definition: OTAccount.cpp:480
EXPORT bool Debit(const int64_t &amount)
Definition: OTAccount.cpp:388
OTIdentifier acctAssetTypeId_
Definition: OTAccount.hpp:288
EXPORT bool IsOwnedByUser() const
Definition: OTAccount.cpp:1012
OTIdentifier outboxHash_
Definition: OTAccount.hpp:302