Skip to content

Commit

Permalink
Merge pull request #8 from bulwark-crypto/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
FF899F authored Dec 19, 2018
2 parents c217a7a + 0cc044b commit 53b5660
Show file tree
Hide file tree
Showing 442 changed files with 13,572 additions and 27,030 deletions.
33 changes: 11 additions & 22 deletions src/accumulatormap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,36 +13,29 @@ using namespace libzerocoin;
using namespace std;

//Construct accumulators for all denominations
AccumulatorMap::AccumulatorMap()
{
for (auto& denom : zerocoinDenomList)
{
AccumulatorMap::AccumulatorMap() {
for (auto& denom : zerocoinDenomList) {
unique_ptr<Accumulator> uptr(new Accumulator(Params().Zerocoin_Params(), denom));
mapAccumulators.insert(make_pair(denom, std::move(uptr)));
}
}

//Reset each accumulator to its default state
void AccumulatorMap::Reset()
{
void AccumulatorMap::Reset() {
mapAccumulators.clear();
for (auto& denom : zerocoinDenomList)
{
for (auto& denom : zerocoinDenomList) {
unique_ptr<Accumulator> uptr(new Accumulator(Params().Zerocoin_Params(), denom));
mapAccumulators.insert(make_pair(denom, std::move(uptr)));
}
}

//Load a checkpoint containing 32bit checksums of accumulator values.
bool AccumulatorMap::Load(uint256 nCheckpoint)
{
for (auto& denom : zerocoinDenomList)
{
bool AccumulatorMap::Load(uint256 nCheckpoint) {
for (auto& denom : zerocoinDenomList) {
uint32_t nChecksum = ParseChecksum(nCheckpoint, denom);

CBigNum bnValue;
if (!zerocoinDB->ReadAccumulatorValue(nChecksum, bnValue))
{
if (!zerocoinDB->ReadAccumulatorValue(nChecksum, bnValue)) {
LogPrintf("%s : cannot find checksum %d", __func__, nChecksum);
return false;
}
Expand All @@ -53,8 +46,7 @@ bool AccumulatorMap::Load(uint256 nCheckpoint)
}

//Add a zerocoin to the accumulator of its denomination.
bool AccumulatorMap::Accumulate(PublicCoin pubCoin, bool fSkipValidation)
{
bool AccumulatorMap::Accumulate(PublicCoin pubCoin, bool fSkipValidation) {
CoinDenomination denom = pubCoin.getDenomination();
if (denom == CoinDenomination::ZQ_ERROR)
return false;
Expand All @@ -67,22 +59,19 @@ bool AccumulatorMap::Accumulate(PublicCoin pubCoin, bool fSkipValidation)
}

//Get the value of a specific accumulator
CBigNum AccumulatorMap::GetValue(CoinDenomination denom)
{
CBigNum AccumulatorMap::GetValue(CoinDenomination denom) {
if (denom == CoinDenomination::ZQ_ERROR)
return CBigNum(0);
return mapAccumulators.at(denom)->getValue();
}

//Calculate a 32bit checksum of each accumulator value. Concatenate checksums into uint256
uint256 AccumulatorMap::GetCheckpoint()
{
uint256 AccumulatorMap::GetCheckpoint() {
uint256 nCheckpoint;

//Prevent possible overflows from future changes to the list and forgetting to update this code
assert(zerocoinDenomList.size() == 7);
for (auto& denom : zerocoinDenomList)
{
for (auto& denom : zerocoinDenomList) {
CBigNum bnValue = mapAccumulators.at(denom)->getValue();
uint32_t nCheckSum = GetChecksum(bnValue);
nCheckpoint = nCheckpoint << 32 | nCheckSum;
Expand Down
7 changes: 3 additions & 4 deletions src/accumulatormap.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@
#include "libzerocoin/Coin.h"

//A map with an accumulator for each denomination
class AccumulatorMap
{
private:
class AccumulatorMap {
private:
std::map<libzerocoin::CoinDenomination, std::unique_ptr<libzerocoin::Accumulator> > mapAccumulators;
public:
public:
AccumulatorMap();
bool Load(uint256 nCheckpoint);
bool Accumulate(libzerocoin::PublicCoin pubCoin, bool fSkipValidation = false);
Expand Down
Loading

0 comments on commit 53b5660

Please sign in to comment.