// 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 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 static size_t GetTxIOFieldSize(const std::vector& txIOs) { auto size = GetSerializeSize(txIOs, SER_NETWORK, PROTOCOL_VERSION); auto countSize = GetSizeOfCompactSize(txIOs.size()); return size - countSize; } size_t CalculateLogicalActionCount( const std::vector& vin, const std::vector& 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; }