danicoin/src/CryptoNoteCore/CryptoNoteTools.cpp
2016-01-18 15:33:29 +00:00

82 lines
2.2 KiB
C++
Executable file

// Copyright (c) 2011-2016 The Cryptonote developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "CryptoNoteTools.h"
#include "CryptoNoteFormatUtils.h"
namespace CryptoNote {
template<>
bool toBinaryArray(const BinaryArray& object, BinaryArray& binaryArray) {
try {
Common::VectorOutputStream stream(binaryArray);
BinaryOutputStreamSerializer serializer(stream);
std::string oldBlob = Common::asString(object);
serializer(oldBlob, "");
} catch (std::exception&) {
return false;
}
return true;
}
void getBinaryArrayHash(const BinaryArray& binaryArray, Crypto::Hash& hash) {
cn_fast_hash(binaryArray.data(), binaryArray.size(), hash);
}
Crypto::Hash getBinaryArrayHash(const BinaryArray& binaryArray) {
Crypto::Hash hash;
getBinaryArrayHash(binaryArray, hash);
return hash;
}
uint64_t getInputAmount(const Transaction& transaction) {
uint64_t amount = 0;
for (auto& input : transaction.inputs) {
if (input.type() == typeid(KeyInput)) {
amount += boost::get<KeyInput>(input).amount;
} else if (input.type() == typeid(MultisignatureInput)) {
amount += boost::get<MultisignatureInput>(input).amount;
}
}
return amount;
}
std::vector<uint64_t> getInputsAmounts(const Transaction& transaction) {
std::vector<uint64_t> inputsAmounts;
inputsAmounts.reserve(transaction.inputs.size());
for (auto& input: transaction.inputs) {
if (input.type() == typeid(KeyInput)) {
inputsAmounts.push_back(boost::get<KeyInput>(input).amount);
} else if (input.type() == typeid(MultisignatureInput)) {
inputsAmounts.push_back(boost::get<MultisignatureInput>(input).amount);
}
}
return inputsAmounts;
}
uint64_t getOutputAmount(const Transaction& transaction) {
uint64_t amount = 0;
for (auto& output : transaction.outputs) {
amount += output.amount;
}
return amount;
}
void decomposeAmount(uint64_t amount, uint64_t dustThreshold, std::vector<uint64_t>& decomposedAmounts) {
decompose_amount_into_digits(amount, dustThreshold,
[&](uint64_t amount) {
decomposedAmounts.push_back(amount);
},
[&](uint64_t dust) {
decomposedAmounts.push_back(dust);
}
);
}
}