bool CzPIVWallet::RegenerateMint(const CDeterministicMint& dMint, CZerocoinMint& mint) { if (!CheckSeed(dMint)) { uint256 hashSeed = Hash(seedMaster.begin(), seedMaster.end()); return error("%s: master seed does not match!\ndmint:\n %s \nhashSeed: %s\nseed: %s", __func__, dMint.ToString(), hashSeed.GetHex(), seedMaster.GetHex()); } //Generate the coin PrivateCoin coin(Params().Zerocoin_Params(false), dMint.GetDenomination(), false); CDeterministicMint dMintDummy; GenerateMint(dMint.GetCount(), dMint.GetDenomination(), coin, dMintDummy); //Fill in the zerocoinmint object's details CBigNum bnValue = coin.getPublicCoin().getValue(); if (GetPubCoinHash(bnValue) != dMint.GetPubcoinHash()) return error("%s: failed to correctly generate mint, pubcoin hash mismatch", __func__); mint.SetValue(bnValue); CBigNum bnSerial = coin.getSerialNumber(); if (GetSerialHash(bnSerial) != dMint.GetSerialHash()) return error("%s: failed to correctly generate mint, serial hash mismatch", __func__); mint.SetSerialNumber(bnSerial); mint.SetRandomness(coin.getRandomness()); mint.SetPrivKey(coin.getPrivKey()); mint.SetVersion(coin.getVersion()); mint.SetDenomination(dMint.GetDenomination()); mint.SetUsed(dMint.IsUsed()); mint.SetTxHash(dMint.GetTxHash()); mint.SetHeight(dMint.GetHeight()); return true; }
void CzTNXTracker::Add(const CDeterministicMint& dMint, bool isNew, bool isArchived) { CMintMeta meta; meta.hashPubcoin = dMint.GetPubcoinHash(); meta.nHeight = dMint.GetHeight(); meta.nVersion = dMint.GetVersion(); meta.txid = dMint.GetTxHash(); meta.isUsed = dMint.IsUsed(); meta.hashSerial = dMint.GetSerialHash(); meta.hashStake = dMint.GetStakeHash(); meta.denom = dMint.GetDenomination(); meta.isArchived = isArchived; meta.isDeterministic = true; mapSerialHashes[meta.hashSerial] = meta; if (isNew) CWalletDB(strWalletFile).WriteDeterministicMint(dMint); }