zcashd/src/zip317.cpp

40 lines
1.3 KiB
C++

// Copyright (c) 2023-2023 The Zcash developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or https://www.opensource.org/licenses/mit-license.php .
#include "zip317.h"
#include <algorithm>
static size_t ceil_div(size_t num, size_t den) {
return (num + den - 1)/den;
}
CAmount CalculateConventionalFee(size_t logicalActionCount) {
return MARGINAL_FEE * std::max(GRACE_ACTIONS, logicalActionCount);
}
template<typename T>
static size_t GetTxIOFieldSize(const std::vector<T>& txIOs) {
auto size = GetSerializeSize(txIOs, SER_NETWORK, PROTOCOL_VERSION);
auto countSize = GetSizeOfCompactSize(txIOs.size());
return size - countSize;
}
size_t CalculateLogicalActionCount(
const std::vector<CTxIn>& vin,
const std::vector<CTxOut>& vout,
unsigned int joinSplitCount,
unsigned int saplingSpendCount,
unsigned int saplingOutputCount,
unsigned int orchardActionCount) {
const size_t tx_in_total_size = GetTxIOFieldSize(vin);
const size_t tx_out_total_size = GetTxIOFieldSize(vout);
return std::max(ceil_div(tx_in_total_size, P2PKH_STANDARD_INPUT_SIZE),
ceil_div(tx_out_total_size, P2PKH_STANDARD_OUTPUT_SIZE)) +
2 * joinSplitCount +
std::max(saplingSpendCount, saplingOutputCount) +
orchardActionCount;
}