Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
1// Copyright (c) 2015-present The Bitcoin Core developers2// Distributed under the MIT software license, see the accompanying3// file COPYING or http://www.opensource.org/licenses/mit-license.php.5#ifndef BITCOIN_CORE_MEMUSAGE_H6#define BITCOIN_CORE_MEMUSAGE_H8#include <primitives/transaction.h>9#include <primitives/block.h>10#include <memusage.h>12static inline size_t RecursiveDynamicUsage(const CScript& script) {13return memusage::DynamicUsage(script);14}16static inline size_t RecursiveDynamicUsage(const COutPoint& out) {17return 0;18}20static inline size_t RecursiveDynamicUsage(const CTxIn& in) {21size_t mem = RecursiveDynamicUsage(in.scriptSig) + RecursiveDynamicUsage(in.prevout) + memusage::DynamicUsage(in.scriptWitness.stack);22for (std::vector<std::vector<unsigned char> >::const_iterator it = in.scriptWitness.stack.begin(); it != in.scriptWitness.stack.end(); it++) {23mem += memusage::DynamicUsage(*it);24}25return mem;26}28static inline size_t RecursiveDynamicUsage(const CTxOut& out) {29return RecursiveDynamicUsage(out.scriptPubKey);30}32static inline size_t RecursiveDynamicUsage(const CTransaction& tx) {33size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);34for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {35mem += RecursiveDynamicUsage(*it);36}37for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {38mem += RecursiveDynamicUsage(*it);39}40return mem;41}43static inline size_t RecursiveDynamicUsage(const CMutableTransaction& tx) {44size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);45for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {46mem += RecursiveDynamicUsage(*it);47}48for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {49mem += RecursiveDynamicUsage(*it);50}51return mem;52}54static inline size_t RecursiveDynamicUsage(const CBlock& block) {55size_t mem = memusage::DynamicUsage(block.vtx);56for (const auto& tx : block.vtx) {57mem += memusage::DynamicUsage(tx) + RecursiveDynamicUsage(*tx);58}59return mem;60}62static inline size_t RecursiveDynamicUsage(const CBlockLocator& locator) {63return memusage::DynamicUsage(locator.vHave);64}66template<typename X>67static inline size_t RecursiveDynamicUsage(const std::shared_ptr<X>& p) {68return p ? memusage::DynamicUsage(p) + RecursiveDynamicUsage(*p) : 0;69}71#endif // BITCOIN_CORE_MEMUSAGE_H