Work to fix the transaction source sequence buglet.

This commit is contained in:
JoelKatz
2012-01-18 09:57:48 -08:00
parent 7fa8f43c59
commit 2e0d47f782
3 changed files with 25 additions and 2 deletions

View File

@@ -271,7 +271,9 @@ Ledger::pointer Ledger::closeLedger(uint64 timeStamp)
void LocalAccount::syncLedger(const uint160& acctID)
{
setLedgerBalance(theApp->getMasterLedger().getBalance(acctID));
AccountState::pointer as=theApp->getMasterLedger().getAccountState(acctID);
if(!as) setLedgerBalance(0);
else syncLedger(as->getBalance(), as->getSeq());
}
bool Ledger::unitTest()

View File

@@ -44,7 +44,12 @@ public:
int64 getEffectiveBalance() const { return static_cast<int64_t>(mLgrBalance)+mTxnDelta; }
void credit(uint64 amount) { mTxnDelta+=amount; }
void debit(uint64 amount) { mTxnDelta-=amount; }
void setLedgerBalance(uint64_t lb) { mLgrBalance=lb; }
void setLedgerBalance(uint64_t lb) { mLgrBalance=lb; if(mTxnSeq==0) mTxnSeq=1; }
void syncLedger(uint64_t lb, uint32 sq)
{
mLgrBalance=lb;
if(mTxnSeq<sq) mTxnSeq=sq;
}
};
class LocalAccountFamily
@@ -121,6 +126,7 @@ public:
uint32 getAcctSeq() const;
uint64 getBalance() const;
void setLedgerBalance(uint64_t ledgerBalance);
void syncLedger(uint64_t ledgerBalance, uint32_t ledgerSeq);
void incAcctSeq(uint32 transAcctSeq);
void syncLedger(const uint160& acctID);

View File

@@ -418,6 +418,13 @@ uint64 LocalAccount::getBalance() const
return la->getEffectiveBalance();
}
void LocalAccount::syncLedger(uint64_t lb, uint32_t ls)
{
LocalAccountEntry::pointer la(mFamily->get(mSeq));
if(!la) return ;
la->syncLedger(lb, ls);
}
void LocalAccount::setLedgerBalance(uint64_t lb)
{
LocalAccountEntry::pointer la(mFamily->get(mSeq));
@@ -650,6 +657,14 @@ LocalAccountFamily::pointer Wallet::doPublic(const std::string& pubKey, bool do_
{
// Generate root key
EC_KEY *pkey=CKey::GenerateRootPubKey(pubKey);
if(!pkey)
{
#ifdef DEBUG
std::cerr << "Unable to generate root public key" << std::endl;
assert(false);
#endif
return LocalAccountFamily::pointer();
}
// Extract family name
std::vector<unsigned char> rootPubKey(33, 0);