From fd7e41501b71e19c3cc1b53909d5c40edd30b549 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Nov 2011 21:16:49 -0800 Subject: [PATCH] Updated transaction header. --- Transaction.h | 61 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/Transaction.h b/Transaction.h index b0eaab5ff7..cf83346994 100644 --- a/Transaction.h +++ b/Transaction.h @@ -1,27 +1,70 @@ #ifndef __TRANSACTION__ #define __TRANSACTION__ -#include "newcoin.pb.h" #include "uint256.h" +#include "newcoin.pb.h" #include /* We could have made something that inherited from the protobuf transaction but this seemed simpler */ -typedef boost::shared_ptr TransactionPtr; +enum TransStatus +{ + INVALID, // no valid signature, insufficient funds + INCLUDED, // added to the current ledger + CONFLICTED, // losing to a conflicting transaction + COMMITTED, // known to be in a ledger + HELD, // not valid now, maybe later +}; + class Transaction { public: - static bool isSigValid(TransactionPtr trans); - static bool isEqual(TransactionPtr t1, TransactionPtr t2); - static uint256 calcHash(TransactionPtr trans); + typedef boost::shared_ptr pointer; +private: + uint256 mTransactionID; + uint160 mAccountFrom, mAccountTo; + uint64 mAmount; + uint32 mFromAccountSeq, mSourceLedger, mIdent; + std::vector mSignature; + + uint32 mInLedger; + TransStatus mStatus; + +public: + Transaction(); + Transaction(const uint256 &id); + Transaction(const std::vector rawTransaction); + Transaction(const std::string sqlReply); + Transaction(Account &from, Account &to, uint64 amount, uint32 ident, uint32 ledger); + bool Sign(const std::vector& privKey); + + const std::string getSQL() const; + bool checkSignature(void) const; + + const uint256& GetID() const { return mTransactionID; } + const uint160& GetFromAccount() const { return mAccountFrom; } + const uint160& GetToAccount() const { return mAccountTo; } + uint64 GetAmount() const { return mAmount; } + uint32 GetFromAccountSeq() const { return mFromAccountSeq; } + uint32 GetSourceLedger() const { return mSourceLedger; } + uint32 GetIdent() const { return mIdent; } + const std::vector& GetSignature() const { return mSignature; } + uint32 GetLedger() const { return mInLedger; } + TransStatus GetStatus() const { return mStatus; } + + void SetStatus(TransStatus st); + + bool operator<(const Transaction &) const; + bool operator>(const Transaction &) const; + bool operator==(const Transaction &) const; + bool operator!=(const Transaction &) const; + bool operator<=(const Transaction &) const; + bool operator>=(const Transaction &) const; }; - -extern bool gTransactionSorter(const TransactionPtr& lhs, const TransactionPtr& rhs); - -#endif \ No newline at end of file +#endif