mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Cache signature state inside SerializedTransaction.
This commit is contained in:
@@ -11,7 +11,8 @@
|
||||
SETUP_LOG();
|
||||
DECLARE_INSTANCE(SerializedTransaction);
|
||||
|
||||
SerializedTransaction::SerializedTransaction(TransactionType type) : STObject(sfTransaction), mType(type)
|
||||
SerializedTransaction::SerializedTransaction(TransactionType type) : STObject(sfTransaction), mType(type),
|
||||
mSigGood(false), mSigBad(false)
|
||||
{
|
||||
mFormat = TransactionFormat::getTxnFormat(type);
|
||||
if (mFormat == NULL)
|
||||
@@ -23,7 +24,8 @@ SerializedTransaction::SerializedTransaction(TransactionType type) : STObject(sf
|
||||
setFieldU16(sfTransactionType, mFormat->t_type);
|
||||
}
|
||||
|
||||
SerializedTransaction::SerializedTransaction(const STObject& object) : STObject(object)
|
||||
SerializedTransaction::SerializedTransaction(const STObject& object) : STObject(object),
|
||||
mSigGood(false), mSigBad(false)
|
||||
{
|
||||
mType = static_cast<TransactionType>(getFieldU16(sfTransactionType));
|
||||
mFormat = TransactionFormat::getTxnFormat(mType);
|
||||
@@ -38,7 +40,8 @@ SerializedTransaction::SerializedTransaction(const STObject& object) : STObject(
|
||||
}
|
||||
}
|
||||
|
||||
SerializedTransaction::SerializedTransaction(SerializerIterator& sit) : STObject(sfTransaction)
|
||||
SerializedTransaction::SerializedTransaction(SerializerIterator& sit) : STObject(sfTransaction),
|
||||
mSigGood(false), mSigBad(false)
|
||||
{
|
||||
int length = sit.getBytesLeft();
|
||||
if ((length < TransactionMinLen) || (length > TransactionMaxLen))
|
||||
@@ -156,16 +159,28 @@ void SerializedTransaction::sign(const RippleAddress& naAccountPrivate)
|
||||
|
||||
bool SerializedTransaction::checkSign() const
|
||||
{
|
||||
if (mSigGood)
|
||||
return true;
|
||||
|
||||
if (mSigBad)
|
||||
return false;
|
||||
|
||||
try
|
||||
{
|
||||
RippleAddress n;
|
||||
n.setAccountPublic(getFieldVL(sfSigningPubKey));
|
||||
return checkSign(n);
|
||||
if (checkSign(n))
|
||||
{
|
||||
mSigGood = true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return false;
|
||||
;
|
||||
}
|
||||
mSigBad = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SerializedTransaction::checkSign(const RippleAddress& naAccountPublic) const
|
||||
|
||||
@@ -32,6 +32,8 @@ protected:
|
||||
|
||||
SerializedTransaction* duplicate() const { return new SerializedTransaction(*this); }
|
||||
|
||||
mutable bool mSigGood, mSigBad;
|
||||
|
||||
public:
|
||||
SerializedTransaction(SerializerIterator& sit);
|
||||
SerializedTransaction(TransactionType type);
|
||||
@@ -69,6 +71,10 @@ public:
|
||||
void sign(const RippleAddress& naAccountPrivate);
|
||||
bool checkSign(const RippleAddress& naAccountPublic) const;
|
||||
bool checkSign() const;
|
||||
bool isKnownGood() const { return mSigGood; }
|
||||
bool isKnownBad() const { return mSigBad; }
|
||||
void setGood() const { mSigGood = true; }
|
||||
void setBad() const { mSigBad = true; }
|
||||
|
||||
// SQL Functions
|
||||
static std::string getSQLValueHeader();
|
||||
|
||||
Reference in New Issue
Block a user