Last validated: 2026-05-20 against feature/digidollar-v1
This map covers core DigiByte C++ code only. DigiDollar subsystem (
src/digidollar/,src/oracle/,src/rpc/digidollar*,src/consensus/{dca,err,volatility,digidollar*}.{cpp,h},src/index/digidollarstatsindex.{cpp,h}, DD wallet code, DD Qt widgets) is documented inREPO_MAP_DIGIDOLLAR.md. Third-party libs (leveldb, secp256k1, crc32c, minisketch, univalue) and thedepends/directory are excluded.Legend:
⚠️ = contains DigiDollar-specific additions on top of base DGB codeDiscovery note (2026-05-20): live repo discovery can include generated/build products. Exclude
.deps/,.libs/,*.o,*.lo, Qtmoc_*.cpp, Qtforms/ui_*.h, built binaries,depends/,guix-build-*, and historical reference trees before treating a path as source.
CBanDB(class) → serializes/deserializes ban list tobanlist.jsonon disk (legacy.datis detected and ignored)DumpPeerAddresses()→ writespeers.datfrom AddrMan to diskLoadAddrman()→ loadspeers.datinto a fresh AddrMan, recreating onDbNotFoundError/InvalidAddrManVersionErrorand renaming the bad file to.bakReadFromStream()→ deserializes AddrMan peers directly from aDataStreamwithout checksum verification (commit3c710088d8switched the no-checksum path to read raw streams instead of wrapping inHashVerifier)DumpAnchors()/ReadAnchors()→ block-relay-only anchor address persistence (anchors.dat)
CTxDestination(variant) → variant type holding all address types (PKHash, ScriptHash, WitnessV0KeyHash, WitnessV0ScriptHash, WitnessV1Taproot, WitnessUnknown)ExtractDestination()→ extracts address from scriptPubKey into CTxDestination variantGetScriptForDestination()→ converts CTxDestination to the corresponding scriptPubKeyIsValidDestination()→ returns true if destination is not CNoDestination (i.e., a real address)ToKeyID()→ converts PKHash/WitnessV0KeyHash to legacy CKeyID for key lookups
AddrMan(class) → manages known network peer addresses with bucketed tried/new tables, eviction, and random selectionAdd()→ adds new addresses learned from peers, placing them in "new" bucketsGood()→ marks an address as successfully connected, promoting it to "tried" tableSelect()→ randomly selects an address for connection attempt, weighted by recencyGetAddr()→ returns addresses forgetaddrP2P response, filtered by network reachabilityAttempt()→ records a connection attempt timestamp for retry backoffResolveCollisions()→ resolves bucket collisions between new and tried table entries
AddrInfo(class extends CAddress) → internal AddrMan entry with last-try/last-success timestamps and bucket metadataAddrManImpl(forward) and bucket-size constants (ADDRMAN_TRIED_BUCKET_COUNT,ADDRMAN_NEW_BUCKET_COUNT,ADDRMAN_BUCKET_SIZE)
[[nodiscard]]and other portable attribute macros used across the codebase
base_uint<BITS>(class template) → arithmetic operations on unsigned big integers (add, sub, multiply, divide, shift, compare)arith_uint256(class) → 256-bit unsigned integer with full arithmetic for difficulty/target calculationsArithToUint256()/UintToArith256()→ converts between arithmetic arith_uint256 and serializable uint256
BanMan(class) → manages IP/subnet ban list with persistence to diskBan()→ bans a network address or subnet for specified durationUnban()→ removes a ban entry for address or subnetIsBanned()→ checks if address/subnet is currently bannedDumpBanlist()→ persists current ban list tobanlist.json
EncodeBase58()→ encodes raw bytes to base58 string (no checksum)DecodeBase58()→ decodes base58 string back to raw bytesEncodeBase58Check()→ base58 encoding with 4-byte double-SHA256 checksum appendedDecodeBase58Check()→ decodes and verifies base58check string, stripping checksum⚠️ CDigiDollarAddress(class) → DigiDollar-specific address encoding using 2-byte prefixes (DD mainnet, TD testnet, RD regtest) for P2TR addresses⚠️ EncodeDigiDollarAddress()/DecodeDigiDollarAddress()→ helper functions for DD address encode/decode
bech32::Encode()→ encodes data with HRP (human-readable part) to bech32/bech32m string for SegWit addressesbech32::Decode()→ decodes bech32/bech32m string, returns HRP, data, and encoding typebech32::LocateErrors()→ identifies character positions of errors in an invalid bech32 string
BIP324Cipher(class) → implements BIP324 v2 P2P transport encryption using elliptic curve Diffie-HellmanInitialize()→ performs ECDH key exchange, derives session keys for send/receive ChaCha20-Poly1305 streamsEncrypt()→ encrypts a P2P message with AEAD (authenticated encryption with associated data)Decrypt()→ decrypts and authenticates a received encrypted P2P message
CBlockHeaderAndShortTxIDs(class) → compact block representation using short transaction IDs (BIP 152)PartiallyDownloadedBlock(class) → reconstructs full block from compact block + mempool transactionsInitData()→ initializes from compact block, pre-fills transactions found in mempoolFillBlock()→ completes block reconstruction with missing transactions received from peer
BlockTransactionsRequest/BlockTransactions→ request/response messages for missing compact block txns
GCSFilter(class) → Golomb-Coded Set filter for BIP 157/158 compact block filtersMatch()→ tests if a single element may be in the filter (probabilistic, false positives possible)MatchAny()→ tests if any element from a set may be in the filter
BlockFilter(class) → wraps GCSFilter with block hash and filter type metadataBlockFilterTypeName()/BlockFilterTypeByName()→ converts between filter type enum and string name
CBlockIndex(class) → in-memory index entry for every known block: height, hash, PoW, timestamps, file position, algoGetBlockHash()→ returns block header hashGetBlockTime()→ returns block timestampGetMedianTimePast()→ returns median of last 11 block timestamps (for time-based locktime)GetAlgo()→ returns which of the 5 mining algorithms produced this block
CChain(class) → represents the active chain as an ordered vector of CBlockIndex pointersSetTip()→ sets chain tip to given block indexFindFork()→ finds most recent common ancestor between this chain and given blockContains()→ checks if a block index is part of this chain
CBlockFileInfo(class) → tracks block file metadata (size, heights, timestamps, block/undo counts)CDiskBlockIndex(class) → serializable version of CBlockIndex for on-disk storageGetBlockProof()→ calculates proof-of-work score for a block (per-algo or aggregate)GetAlgoForBlockIndex()→ determines which of the 5 mining algorithms was used for a blockGetLocator()→ builds exponentially-spaced block locator for P2P synchronization
CreateChainParams()→ factory that creates CChainParams for mainnet/testnet/signet/regtestParams()→ returns the currently active chain parameters (singleton)SelectParams()→ selects active chain (mainnet/testnet/signet/regtest) at startupReadSigNetArgs()/ReadRegTestArgs()→ reads CLI overrides for signet/regtest (-signetchallenge,-testactivationheight,-fastprune)
CBaseChainParams(class) → base shared parameters between digibyte-cli and digibyted: data dir, RPC port, onion service target portCreateBaseChainParams()→ returnsunique_ptr<CBaseChainParams>for the chosen ChainTypeBaseParams()→ returns current base params singletonSetupChainParamsBaseOptions()→ registers-testnet/-regtest/-signetCLI args
- Hardcoded DNS-style address seeds compiled into the binary for mainnet/testnet bootstrap (auto-generated from
contrib/seeds/nodes_main.txt/nodes_test.txt).
GetLastCheckpoint()→ returns the most recent hardcoded checkpoint block index for fast initial sync validation
CCheckQueue<T>(class) → thread-safe queue for parallelizing script verification across worker threadsCCheckQueueControl<T>(class) → RAII controller that submits script checks and waits for all workers to complete
FormatFullVersion()→ returns version string like "v9.26.2"FormatSubVersion()→ returns P2P sub-version string like "/DigiByte:9.26.2/"CLIENT_VERSION→ integer encoding of major.minor.build version
Coin(class) → a single unspent transaction output: CTxOut + height + coinbase flagCCoinsView(class) → abstract base interface for UTXO set access (get coin, check existence, get best block)CCoinsViewBacked(class) → CCoinsView with a fallback/parent view (layered cache pattern)CCoinsViewCache(class) → in-memory UTXO cache layer on top of CCoinsViewBackedGetCoin()/HaveCoin()→ retrieves or checks existence of a UTXOAddCoin()/SpendCoin()→ adds new UTXO or marks one as spentFlush()→ writes dirty cache entries to the parent viewGetCacheSize()→ returns number of cached UTXO entries
CCoinsViewErrorCatcher(class) → wraps a CCoinsView and translates LevelDB read errors to runtime exceptionsAddCoins()→ adds all outputs from a transaction to the UTXO cacheAccessByTxid()→ finds any UTXO from a given txid (scans outputs)
- Cross-platform compatibility shims (socket type aliases,
MAX_PATH,closesocket, errno handling)
core_io.h→ declarations for transaction/block hex/JSON serialization helpers (DecodeHexTx,DecodeHexBlk,EncodeHexTx,TxToUniv,ScriptToAsmStr, etc.; implementations incore_read.cpp/core_write.cpp)core_memusage.h→RecursiveDynamicUsage()template specializations for COutPoint/CTxIn/CTxOut/CTransaction memory accounting
CompressScript()→ compresses standard scriptPubKey types (P2PKH, P2SH, P2PK) for compact UTXO storageDecompressScript()→ decompresses stored script back to full scriptPubKeyCompressAmount()/DecompressAmount()→ variable-length amount encoding for UTXO database efficiency
ParseScript()→ parses human-readable script string (e.g., "OP_DUP OP_HASH160 ...") into CScriptDecodeHexTx()→ deserializes hex-encoded raw transaction into CMutableTransactionDecodeHexBlk()→ deserializes hex-encoded block into CBlockDecodeHexBlockHeader()→ deserializes hex-encoded block header into CBlockHeaderSighashFromStr()→ converts sighash type string ("ALL", "NONE", etc.) to integer flag
ValueFromAmount()→ converts satoshi CAmount to human-readable decimal string (e.g., 100000000 → "1.00000000")FormatScript()→ converts CScript to human-readable opcode stringScriptToAsmStr()→ converts script to assembly notation with optional sighash decodingEncodeHexTx()→ serializes transaction to hex stringTxToUniv()→ converts transaction to JSON UniValue with full detail (inputs, outputs, witness, undo data)ScriptToUniv()→ converts scriptPubKey to JSON with address, ASM, hex representations
CuckooCache::cache<Element>(class) → concurrent cuckoo-hash-based cache for fast script verification signature lookupsCuckooCache::bit_packed_atomic_flags(class) → thread-safe bit-packed flag array for cache occupancy tracking
indirectmap<K, V>→std::map-like container that hashes/orders by the pointed-to value (used in mempool for stempool indexing)limitedmap<K, V>→ bounded-size map with eviction (legacy helper retained for narrow internal use)
DynamicUsage()template family → memory accounting helpers used by mempool, AddrMan, and validation caches
CConnman::isDandelionInbound()→ checks if a peer is an inbound Dandelion++ relayCConnman::setLocalDandelionDestination()→ selects an outbound peer as local Dandelion stem relay targetCConnman::getDandelionDestination()→ returns the Dandelion stem relay destination for a given peerCConnman::insertDandelionEmbargo()→ sets an embargo timer before a Dandelion tx fluffs (broadcasts normally)CConnman::DandelionShuffle()→ periodically re-randomizes Dandelion routing graph for privacyCConnman::ThreadDandelionShuffle()→ background thread that triggers periodic Dandelion graph shuffles
CDBWrapper(class) → C++ wrapper around LevelDB for key-value storage (block index, UTXO set, chain state)Read()/Write()→ typed get/put operations with automatic serializationExists()→ checks key existence without reading valueErase()→ removes a key from the databaseNewIterator()→ creates a database cursor for range scansWriteBatch()→ atomically writes a batch of operationsIsEmpty()→ checks if database contains any entries
CDBBatch(class) → accumulates write/erase operations for atomic batch commitCDBIterator(class) → forward-only cursor for scanning database key-value pairs
DeploymentName()→ returns human-readable name for a consensus deployment (e.g., "segwit", "taproot", "odo")GetBuriedDeployment()→ looks up a BuriedDeployment enum from its string name
DeploymentActiveAfter()→ checks if a consensus deployment is active after a given block (BIP9 or buried)DeploymentActiveAt()→ checks if a consensus deployment is active at a specific blockDeploymentEnabled()→ checks if a deployment is enabled in consensus params (not buried/disabled)
- Standalone utility that loads and validates the blockchain database without full node functionality
- Command-line RPC client that sends JSON-RPC requests to a running digibyted node
- Entry point for the DigiByte daemon (digibyted) — parses args, calls AppInit, runs event loop
- Offline transaction creation/signing utility — build, modify, and sign raw transactions without a running node
- Offline utility for GRIND (vanity block header grinding) and other one-off operations
- Offline wallet utility — create, info, salvage, dump wallet files without a running node
DummyWalletInit(class implementsWalletInitInterface) → fallback used when wallet support is disabled at compile time; logs "No wallet support compiled in!" and registers wallet args as hidden so-help-debugstill recognizes them.
- Defines the global
uiInterface(CClientUIInterface) singleton plusInitError()/InitWarning()thin wrappers; the matching declarations live insrc/node/ui_interface.h/src/node/interface_ui.h.
ExternalSigner(class) → interface to HWI-compatible external hardware wallet signersEnumerate()→ lists connected hardware wallets via external signer processDisplayAddress()→ asks hardware device to display an address for verificationGetDescriptors()→ retrieves wallet descriptors from hardware deviceSignTransaction()→ sends PSBT to hardware device for signing
FlatFilePos(struct) → position in a flat file: file number + byte offset (used for block/undo storage)FlatFileSeq(class) → manages sequence of numbered flat files (blk00000.dat, blk00001.dat, etc.)FileName()→ returns filesystem path for a given file numberAllocate()→ allocates space in the current file, auto-rolls to next file when fullFlush()→ syncs file data and/or metadata to disk
CHash256(class) → double-SHA256 hasher (DigiByte's standard hash: SHA256d)CHash160(class) → SHA256 + RIPEMD160 hasher (for address generation)Hash()→ computes double-SHA256 of arbitrary dataHash160()→ computes SHA256+RIPEMD160 hash for public key → address derivationHashWriter/CHashWriter(class) → streaming hasher that serializes objects into a hash computationMurmurHash3()→ fast non-cryptographic hash for bloom filtersBIP32Hash()→ HMAC-SHA512 based key derivation for BIP32 HD walletsTaggedHash()→ BIP340-style tagged hash (SHA256 with domain-separation tag)SHA256Uint256()→ single SHA256 of a uint256 (used in Taproot)
HeadersSyncState(class) → state machine for headers-first synchronization with memory-efficient commitment trackingProcessNextHeaders()→ validates and processes a batch of received headers during syncGetState()→ returns current sync phase (PRESYNC collecting commitments, REDOWNLOAD verifying)
StartHTTPRPC()→ registers HTTP RPC request handlers on the HTTP serverInterruptHTTPRPC()/StopHTTPRPC()→ gracefully shuts down HTTP RPCStartREST()/InterruptREST()/StopREST()→ starts/stops the REST API interface
InitHTTPServer()→ initializes libevent-based HTTP server for RPC and RESTStartHTTPServer()→ launches HTTP server worker threadsHTTPRequest(class) → represents a single HTTP request with methods to read body, write response, set headersRegisterHTTPHandler()→ registers a URL prefix handler (e.g., "/rest/" for REST API)GetQueryParameterFromUri()→ extracts query parameter value from URI string
i2p::Session(class) → manages I2P SAM (Simple Anonymous Messaging) sessions for private P2P networkingConnect()→ establishes connection to an I2P destination through SAM bridgeListen()→ accepts incoming I2P connectionsAccept()→ accepts a queued incoming I2P connection
AppInitMain()→ main node initialization: loads blockchain, starts networking, wallet, RPC, indexesAppInitBasicSetup()→ signal handlers, locale, file limits setupAppInitParameterInteraction()→ validates and resolves conflicts between command-line argumentsAppInitSanityChecks()→ checks crypto library integrity (ECC, random, etc.)AppInitLockDataDirectory()→ acquires exclusive lock on data directoryAppInitInterfaces()→ initializes IPC/wallet interfacesInterrupt()→ signals all subsystems to begin shutdownShutdown()→ orderly teardown of all subsystems (network, wallet, indexes, mempool, block storage)SetupServerArgs()→ registers all command-line arguments with help textStartIndexBackgroundSync()→ launches background sync threads for block filter, coinstats, tx indexes⚠️ Contains DigiDollar initialization: oracle node startup, DD wallet setup, activation height checks
CKey(class) → encapsulates a private ECDSA key (secp256k1)MakeNewKey()→ generates a new random private key (compressed or uncompressed)Sign()→ produces ECDSA signature (DER-encoded) for a message hashSignSchnorr()→ produces BIP340 Schnorr signature for a message hashSignCompact()→ produces recoverable compact ECDSA signature (for message signing)GetPubKey()→ derives the corresponding public keyDerive()→ BIP32 child key derivationNegate()→ negates the private key (for Taproot key tweaking)
ECC_Start()/ECC_Stop()→ initializes/finalizes the secp256k1 elliptic curve contextECC_InitSanityCheck()→ verifies ECC library works correctly on this platform
EncodeDestination()→ converts CTxDestination to human-readable address string (base58check or bech32)DecodeDestination()→ parses address string into CTxDestination with error reportingEncodeSecret()/DecodeSecret()→ WIF (Wallet Import Format) encoding/decoding for private keysEncodeExtKey()/DecodeExtKey()→ BIP32 extended private key serialization (xprv...)EncodeExtPubKey()/DecodeExtPubKey()→ BIP32 extended public key serialization (xpub...)IsValidDestinationString()→ validates an address string without full decode
CKeyStore(class) → virtual base interface for key storage providersCBasicKeyStore(class) → in-memory key store for keys, scripts, and watchonly addressesAddKey()→ stores a private key indexed by its public key IDHaveKey()→ checks if a private key is availableGetKey()→ retrieves a private key by IDAddCScript()→ stores a redeemScript for P2SH
GetKeyForDestination()→ resolves a destination address to the signing key ID
BCLog::Logger(class) → global logging system with categories, levels, file/console outputLogPrintStr()→ writes a formatted log message to file and/or consoleEnableCategory()/DisableCategory()→ toggles logging categories (net, mempool, validation, etc.)SetLogLevel()→ sets minimum log level (trace, debug, info, warning, error)
LogInstance()→ returns the singleton LoggerGetLogCategory()→ parses category name string to flag enum
StartMapPort()→ begins UPnP/NAT-PMP port mapping for incoming P2P connectionsInterruptMapPort()/StopMapPort()→ stops port mapping threads
CPartialMerkleTree(class) → partial Merkle tree proof (SPV proof) matching specific transactionsExtractMatches()→ validates proof and extracts matched transaction hashes
CMerkleBlock(class) → block header + partial Merkle tree for SPV clientsBitsToBytes()/BytesToBits()→ bit vector conversion utilities for Merkle tree serialization
CConnman(class) → manages all P2P network connections, message send/receive, peer lifecycleStart()→ starts networking threads (socket handler, open connections, message handler)Stop()→ disconnects all peers and stops networking threadsConnectNode()→ establishes outbound connection to a peerPushMessage()→ serializes and queues a P2P message for sending to a peerForEachNode()→ iterates over all connected nodes with a callbackDisconnectNode()→ disconnects a specific peerAddNode()→ adds a manual peer address to connect toGetNodeCount()→ returns count of connected peers by type (inbound/outbound/total)GetTotalBytesRecv()/GetTotalBytesSent()→ network traffic counters- Dandelion++ methods: see
src/dandelion.cpp
CNode(class) → represents a single connected peer with socket, version info, message queuesGetAddrLocal()→ returns local address as seen by this peerIsInboundConn()/IsOutboundOrBlockRelayConn()→ connection direction checksIsAddrFetchConn()→ checks if connection is address-fetch only
V1Transport(class) → legacy Bitcoin P2P transport with 4-byte magic header + length + checksumV2Transport(class) → BIP324 encrypted P2P transport with ChaCha20-Poly1305 AEADCNodeStats(class) → snapshot of peer statistics for RPC displayDiscover()→ discovers local network interfaces for address advertisementGetListenPort()→ returns the P2P listen portAddLocal()→ registers a local address for peer advertisementGetLocalAddrForPeer()→ selects best local address to advertise to a given peer
NetPermissions(class) → parses and manages per-peer permission flags (bloomfilter, relay, forcerelay, noban, mempool, download, addr)NetWhitebindPermissions/NetWhitelistPermissions→ whitebind/whitelist permission sets from config
CNetMsgMaker(struct) → small helper that wrapsCSerializedNetMsgconstruction with a fixed protocol version, used byPeerManagerto build outgoing P2P messages.
PeerManager(class) → high-level P2P message processing: validates messages, manages block/tx download, peer scoringMake()→ factory method creating the implementationProcessMessage()→ dispatches and handles all incoming P2P messages (version, verack, inv, getdata, tx, block, headers, etc.)SendMessages()→ builds and sends outgoing P2P messages (inv, getdata, headers, ping, addr)Misbehaving()→ increments peer's misbehavior score, disconnects/bans at thresholdRelayTransaction()→ announces a transaction to connected peers via inv messagesCheckForStaleTipAndEvictPeers()→ detects stalled sync and evicts unproductive peersFetchBlock()→ requests a specific block from a peerRelayDandelionTransaction()→ relays transaction via Dandelion++ stem phaseCheckDandelionEmbargoes()→ checks for expired Dandelion embargoes and fluffs transactions
SerializationTypeString()→ converts ban list serialization type to string name- Ban list serialization helpers for JSON format
CNetAddr(class) → network address supporting IPv4, IPv6, Tor (v2/v3), I2P, CJDNSIsIPv4()/IsIPv6()/IsTor()/IsI2P()/IsCJDNS()→ network type checksIsRoutable()→ returns true if address is globally routableIsLocal()→ checks if address is localhost/loopbackGetNetwork()→ returns network type enum
CSubNet(class) → network address with subnet mask for ban/whitelist rangesCService(class extends CNetAddr) → network address + port number
LookupHost()→ DNS resolution of hostname to network addressesLookup()→ resolves host:port string to CService addressesLookupNumeric()→ resolves numeric address (no DNS) to CServiceConnectSocketDirectly()→ establishes TCP connection with timeoutConnectThroughProxy()→ connects via SOCKS5 proxySocks5()→ SOCKS5 protocol handshake implementationSetProxy()/GetProxy()→ configures per-network proxy settingsSetNameProxy()→ sets DNS name resolution proxyIsBadPort()→ checks if port is commonly used by non-P2P services (ISP blocking risk)Proxy(class) → proxy configuration (address + randomized credentials)ReachableNets(class) → tracks which network types are reachable for address relay filtering
NetGroupManager(class) → computes /16 network groups for peer diversity (using optional ASMap for AS-level grouping)
noui_connect()→ connects non-interactive message handlers (daemon mode, no GUI)noui_ThreadSafeMessageBox()→ logs UI messages to debug log instead of displaying dialog
ParseOutputType()→ parses address type string ("legacy", "p2sh-segwit", "bech32", "bech32m")FormatOutputType()→ converts OutputType enum to stringGetDestinationForKey()→ generates address for a public key using specified output typeGetAllDestinationsForKey()→ returns all possible address types for a keyAddAndGetDestinationForScript()→ imports script and returns address for specified output type
GetNextWorkRequired()→ dispatches to correct difficulty algorithm version based on block height (V1→V4 progression)GetNextWorkRequiredv1()→ original difficulty adjustment (pre-DigiShield, Bitcoin-inherited)GetNextWorkRequiredv2()→ DigiShield v1 — per-algo difficulty with asymmetric response (faster decrease)GetNextWorkRequiredv3()→ MultiShield (DigiShield v3) — improved per-algo real-time difficulty adjustmentGetNextWorkRequiredv4()→ MultiAlgo v2 — current difficulty algorithm with 5-algo MultiShield balancingCalculateNextWorkRequired()→ core difficulty calculation: adjusts target based on actual vs expected timespanInitialDifficulty()→ returns genesis difficulty target for each algoCheckProofOfWork()→ validates that a block hash meets the required difficulty targetGetLastBlockIndexForAlgo()→ walks chain backwards to find previous block using same mining algorithmGetLastBlockIndexForAlgoFast()→ optimized version using cached algo dataGetPoWAlgoHash()→ hashes block header using the correct algorithm (SHA256d, Scrypt, Groestl, Skein, Qubit/Odocrypt)PermittedDifficultyTransition()→ validates difficulty change between consecutive blocks is within allowed range
CMessageHeader(class) → P2P message header: 4-byte magic + command + payload size + checksumCAddress(class extends CService) → peer address with services bitmap + timestamp for address relayCInv(class) → inventory vector: type (tx, block, filtered block, compact block) + hashOraclePriceMsg(class) →⚠️ P2P message wrapper for oracle price updatesOracleBundleMsg(class) →⚠️ P2P message wrapper for oracle price bundlesGetOracleDataMsg(class) →⚠️ P2P message for requesting oracle dataserviceFlagsToStr()→ converts service flags bitmap to human-readable string listGetDesirableServiceFlags()→ returns minimum service flags required from peersgetAllNetMessageTypes()→ returns list of all known P2P message type strings
PartiallySignedTransaction(class) → BIP 174 Partially Signed Bitcoin Transaction containerPSBTInput/PSBTOutput(classes) → per-input/output PSBT metadata (scripts, keys, signatures, Taproot data)SignPSBTInput()→ signs a single PSBT input using the given signing providerFinalizePSBT()→ combines all partial signatures into final scriptSig/witnessFinalizeAndExtractPSBT()→ finalizes and extracts the complete signed transactionCombinePSBTs()→ merges multiple PSBTs (e.g., from different signers) into oneCountPSBTUnsignedInputs()→ returns count of inputs that still need signaturesPSBTInputSigned()→ checks if an input has any signaturesUpdatePSBTOutput()→ adds HD key paths and scripts to a PSBT outputPrecomputePSBTData()→ precomputes sighash data for all PSBT inputs
CPubKey(class) → encapsulates a compressed/uncompressed secp256k1 public key (33 or 65 bytes)Verify()→ verifies ECDSA signature against this public keyIsFullyValid()→ checks if key is a valid point on the curveDecompress()→ converts compressed key to uncompressed formDerive()→ BIP32 child public key derivationGetID()→ returns Hash160 of the public key (used as address)IsCompressed()→ checks if key is in compressed format
XOnlyPubKey(class) → 32-byte x-only public key for BIP340 Schnorr / TaprootVerifySchnorr()→ verifies BIP340 Schnorr signatureCheckTapTweak()→ verifies Taproot key tweak against internal key + merkle rootCreateTapTweak()→ creates Taproot-tweaked keypair from internal key
CKeyID(class) → Hash160 of a public key, used as key identifier for lookupsCExtPubKey(class) → BIP32 extended public key (key + chain code + depth + fingerprint)
RandAddDynamicEnv()→ mixes time-varying environment data (CPU counters, getrusage, getauxval) into a SHA512 hasher for entropy seedingRandAddStaticEnv()→ mixes process-static environment data (hostname, /proc/cpuinfo, env vars) into the entropy pool at startup
GetRandBytes()→ fills buffer with cryptographically secure random bytes (OS entropy + hardware RNG + ChaCha20 mixer)GetRand<T>()→ returns uniformly distributed random number in [0, max)GetRandHash()→ returns a random uint256GetStrongRandBytes()→ performs slow high-entropy random generation (for key material)FastRandomContext(class) → fast non-cryptographic PRNG for performance-critical randomization (peer selection, shuffle)randbool()/rand32()/rand64()/randrange()→ various random value generators
RandAddEvent()→ mixes timing/hardware events into the random pool for additional entropyRandomInit()→ initializes random subsystem, seeds from OS + hardware entropy sources
- REST API endpoint handlers for
/rest/block/,/rest/tx/,/rest/headers/,/rest/blockhashbyheight/,/rest/chaininfo/,/rest/mempool/,/rest/getutxos/,/rest/blockfilter/ ParseDataFormat()→ parses requested response format (JSON, binary, hex) from URL extension
CScheduler(class) → priority-queue-based task scheduler running callbacks on a background threadscheduleEvery()→ runs a function repeatedly at a fixed intervalscheduleFromNow()→ runs a function once after a delayschedule()→ schedules a function at a specific time pointMockForward()→ advances scheduler clock for testing
SingleThreadedSchedulerClient(class) → ensures callbacks execute serially even with concurrent scheduling
Serialize()/Unserialize()→ template framework for binary serialization of all Bitcoin/DigiByte data typesCSizeComputer(class) → dry-run serializer that computes serialized size without writing dataVarIntFormatter/CompactSizeFormatter— variable-length integer encoding formats- Serialization wrappers:
VARINT(),COMPACTSIZE(),LIMITED_STRING(),FLATDATA()
prevector<N, T>→ small-buffer-optimized vector that stores up toNelements inline before falling back to heap; used heavily in script and serialization paths
src/reverse_iterator.h / src/reverselock.h / src/threadinterrupt.h / src/threadsafety.h / src/tinyformat.h / src/utilmemory.h / src/span.h
- Header-only utilities:
reverse_iterator.hreverse iteration helper,reverselock.hLeaveCritical/EnterCriticalRAII pair,threadinterrupt.hlegacy include re-export,threadsafety.hClang lock-annotation macros,tinyformat.hprintf-style formatting,utilmemory.hmake_unique-style helpers,span.hSpan<T>lightweight contiguous-range view
StartShutdown()→ signals the node to begin graceful shutdownAbortShutdown()→ cancels a pending shutdown requestShutdownRequested()→ returns true if shutdown has been signaledWaitForShutdown()→ blocks calling thread until shutdown completes
CheckSignetBlockSolution()→ validates block is signed by authorized signet signer keysSignetTxs(class) → extracts signet commitment and challenge from coinbase transaction
DataStream/CDataStream(class) → in-memory byte stream for serialization/deserialization of Bitcoin objectsAutoFile/CAutoFile(class) → RAII file wrapper with automatic serialization support and optional XOR obfuscationBufferedFile(class) → file reader with read-ahead buffering and rewind capability (for block file scanning)SpanReader(class) → reads serialized data from a Span without copyingCVectorWriter(class) → writes serialized data directly into a vectorOverrideStream(class) → wraps a stream with overridden version/type for serialization format control
- Lock debugging infrastructure for detecting potential deadlocks in the multi-threaded codebase
RecursiveMutex/Mutex→ mutex types with optional deadlock detection in debug buildsLOCK()/LOCK2()→ macros for acquiring locks with debug trackingAssertLockHeld()→ compile-time + runtime assertion that a lock is heldLockOrdering→ enforces a strict global lock ordering to prevent deadlocks
CMedianFilter(class) → rolling median filter for network time adjustmentGetTimeOffset()→ returns median offset between local clock and peer-reported timesGetAdjustedTime()→ returns current time adjusted by median peer offsetAddTimeData()→ incorporates a peer's reported timestamp into the median filter
TorController(class) → manages Tor control port connection for automatic hidden service creation- Creates/destroys .onion hidden service for incoming P2P connections
TorControlConnection(class) → low-level async Tor control protocol implementationStartTorControl()/InterruptTorControl()/StopTorControl()→ lifecycle managementDefaultOnionServiceTarget()→ returns the default local address:port for onion service
CCoinsViewDB(class extends CCoinsView) → LevelDB-backed UTXO set storageGetCoin()→ reads a UTXO from the databaseHaveCoin()→ checks UTXO existence without full deserializationBatchWrite()→ writes a batch of UTXO changes to LevelDBGetBestBlock()→ returns the block hash this UTXO set representsCursor()→ creates an iterator over all UTXOs (for UTXO set hash computation)
CTxMemPool(class) → in-memory pool of unconfirmed transactions awaiting inclusion in a blockaddUnchecked()→ adds a transaction entry to the mempool (after validation)removeRecursive()→ removes a transaction and all descendants from the mempoolremoveForBlock()→ removes transactions included in a newly connected blockcheck()→ performs internal consistency checks on mempool data structuresTrimToSize()→ evicts lowest-feerate transactions to enforce mempool size limitGetTransactionAncestry()→ returns ancestor count/size for package relay validationCalculateDescendants()→ computes all descendant transactions of a given entryGetMinFee()→ returns minimum fee rate to enter the mempool (dynamic, based on fullness)info()→ returns mempool entry info for a specific transactionexists()→ checks if a transaction is in the mempoolget()→ retrieves a transaction reference by hashsize()→ returns transaction count in mempool
CCoinsViewMemPool(class) → layered view that overlays mempool UTXOs on top of the chain UTXO setTestLockPointValidity()→ checks if a transaction's lockpoint is still valid after chain reorganizationCTxMemPoolEntry→ seesrc/kernel/mempool_entry.h
TxOrphanage(class) → manages orphan transactions (those with missing parent inputs)AddTx()→ adds an orphan transaction, limited per-peerEraseTx()→ removes an orphan by hashEraseForPeer()→ removes all orphans from a disconnected peerGetTxToReconsider()→ returns an orphan to revalidate after its parent arrivesHaveTx()→ checks if an orphan existsLimitOrphans()→ enforces maximum orphanage size by random eviction
TxRequestTracker(class) → tracks in-flight transaction download requests across peers with priority, timeouts, and deduplicationReceivedInv()→ records that a peer announced a transactionRequestedTx()→ marks a transaction as requested from a peerReceivedResponse()→ records that a response (tx or NOTFOUND) was receivedGetRequestable()→ returns transactions eligible for requesting from a given peer
base_blob<BITS>(class template) → fixed-size opaque byte array (base for hash types)uint160(class) → 160-bit hash (RIPEMD160/Hash160 output)uint256(class) → 256-bit hash (SHA256d/block hash/txid)uint512(class) → 512-bit hash (used by multi-hash mining algorithms)uint256S()→ constructs uint256 from hex string
CTxUndo(class) → undo data for a single transaction: vector of Coins consumed by inputs (for disconnect/reorg)CBlockUndo(class) → undo data for an entire block: all CTxUndo entries (excluding coinbase)
⚠️ ~7060 lines. DigiDollar/oracle-aware: activation gating viaDigiDollar::IsDigiDollarEnabled,Consensus::IsOracleActive, MuSig2 v0x03 bundle extraction inConnectBlock(~lines 3099-3108),SCRIPT_VERIFY_DIGIDOLLARflag set whenDEPLOYMENT_DIGIDOLLARis active (GetBlockScriptFlagsat line 2755, flag set at lines 2795-2798), and incremental DD supply tracking viaDigiDollar::SystemHealthMonitor::OnMint{Connected,Disconnected}/OnRedeem{Connected,Disconnected}.Chainstate(class) → manages a single validated chain state (UTXO set + block index)ActivateBestChain()→ selects and activates the best valid chain tip, connecting new blocksConnectTip()→ connects a single new block to the chain tip, executing all transactionsDisconnectTip()→ disconnects the current tip (for reorg), restoring UTXOs from undo dataDisconnectBlock()→ undoes all transactions in a block, restoring previous UTXO stateInvalidateBlock()→ marks a block and its descendants as invalid (manual override)PreciousBlock()→ hints the node to prefer a specific valid block tipResetBlockFailureFlags()→ clears failure flags from a previously-invalidated blockLoadChainTip()→ loads the chain tip from disk on startupFlushStateToDisk()→ persists UTXO cache and block index to diskGetCoinsCacheSizeState()→ returns whether UTXO cache is within limits or needs flushingInvalidChainFound()→ logs when a chain with more work than current tip is found to be invalidCheckForkWarningConditions()→ warns if a valid fork with significant work exists
ChainstateManager(class) → manages one or two Chainstate objects (main + optional snapshot)ProcessNewBlock()→ validates and stores a new block, activates best chain if it extends the tipProcessNewBlockHeaders()→ validates a batch of new block headers for header-first syncAcceptBlock()→ validates block against contextual rules and writes to diskAcceptBlockHeader()→ validates and indexes a new block headerProcessTransaction()→ validates and submits a transaction to the mempoolIsInitialBlockDownload()→ returns true if node is still catching up to the network tipActiveChainstate()/ActiveChain()/ActiveTip()→ access the current active chainGenerateCoinbaseCommitment()→ creates SegWit witness commitment for coinbaseSnapshotBlockhash()→ returns the snapshot base block if using assumeUTXO
CheckBlock()→ validates block structure: size limits, merkle root, duplicate txns, first tx is coinbase, algo-specific PoWContextualCheckBlockHeader()(file-static) → validates header against pindexPrev (timestamps, BIP9 version checks, future-time bound)ContextualCheckBlock()(file-static) → context-dependent block checks (finality, witness commitment,⚠️ MuSig2 oracle-bundle structural checks before full validation)CheckFinalTxAtTip()→ checks transaction finality (locktime) against current chain tipHasValidProofOfWork()→ validates PoW for a vector of block headersIsBlockMutated()→ detects witness malleation attacks on block dataCalculateHeadersWork()→ sums proof-of-work across a vector of headers⚠️ GetOraclePriceForTransaction()→ retrieves oracle-reported DGB/USD price for DD transaction validation; in ConnectBlock path, uses block-extracted oracle price from coinbase OP_RETURN for deterministic consensusGetBlockSubsidy()→ calculates mining reward for a given block height (halving schedule)IsAlgoActive()→ checks if a specific mining algorithm is active at a given chain positionCVerifyDB(class) → verifies blockchain database integrity on startupCScriptCheck(class) → deferred script verification task for parallel validationStartScriptCheckWorkerThreads()/StopScriptCheckWorkerThreads()→ manages parallel script checker thread poolMemPoolAccept(class, internal) → orchestrates mempool transaction acceptance: PreChecks, PolicyScriptChecks, ConsensusScriptChecks, FinalizeUpdateCoins()→ applies transaction's input spends and output creations to the UTXO setGuessVerificationProgress()→ estimates sync progress as fraction based on timestampsPruneBlockFilesManual()→ manually prunes block files up to a specified height
CValidationInterface(class) → abstract observer interface for blockchain eventsUpdatedBlockTip()→ called when the active chain tip changesTransactionAddedToMempool()→ called when a transaction enters the mempoolTransactionRemovedFromMempool()→ called when a transaction is evicted/confirmed/conflicted outBlockConnected()/BlockDisconnected()→ called when blocks are connected/disconnectedChainStateFlushed()→ called after UTXO set is flushed to disk
CMainSignals(class) → signal dispatcher that broadcasts validation events to all registered interfacesRegisterValidationInterface()/UnregisterValidationInterface()→ registers/unregisters an observerSyncWithValidationInterfaceQueue()→ blocks until all queued validation callbacks have been processed
PROTOCOL_VERSION→ current P2P protocol version (70019,version.h:12)- Protocol version constants for feature negotiation (
SHORT_IDS_BLOCKS_VERSION = 70014, etc.)
WalletInitInterface(abstract class) → wallet/non-wallet build seam:HasWalletSupport(),AddWalletOptions(),ParameterInteraction(),Construct(). Concrete implementations live inwallet/init.cpp(real wallet) anddummywallet.cpp(no-wallet build).
AbstractThresholdConditionChecker(class) → BIP9-style soft fork activation state machineGetStateFor()→ returns activation state (DEFINED, STARTED, LOCKED_IN, ACTIVE, FAILED) for a deploymentGetStateSinceHeightFor()→ returns the block height where current state began
VersionBitsCache(class) → caches BIP9 deployment states to avoid recomputationStateSinceHeight()→ cached version of state queryClear()→ invalidates cache (after reorg)
ThresholdStateenum → DEFINED, STARTED, LOCKED_IN, ACTIVE, FAILED
SetMiscWarning()→ sets a global warning message displayed in RPC and GUISetfLargeWorkInvalidChainFound()→ flags that a high-work invalid chain was detectedGetWarnings()→ returns current warning messages (pre-release, large fork, etc.)
Bench(class) → nanobench-based micro-benchmarking framework wrapperBenchRunner→ registers and runs all benchmarks
- Entry point for the benchmark binary (
bench_digibyte)
bench/addrman.cpp→ AddrMan Add/Select/GetAddr performancebench/base58.cpp→ Base58 encode/decode speedbench/bech32.cpp→ Bech32 encode/decode speedbench/bip324_ecdh.cpp→ BIP324 ECDH key exchange performancebench/block_assemble.cpp→ block template assembly with mempoolbench/ccoins_caching.cpp→ UTXO cache access patternsbench/chacha20.cpp→ ChaCha20 cipher throughputbench/checkblock.cpp→CheckBlock()validation performancebench/checkqueue.cpp→ parallel script check queue throughputbench/coin_selection.cpp→ wallet coin selection algorithmsbench/crypto_hash.cpp→ all hash functions (SHA256, RIPEMD160, SipHash, MurmurHash3, multi-algo)bench/descriptors.cpp→ descriptor parsing and expansionbench/disconnected_transactions.cpp→ disconnected tx pool during reorgbench/duplicate_inputs.cpp→ duplicate input detectionbench/ellswift.cpp→ ElligatorSwift encoding (BIP324)bench/gcs_filter.cpp→ Golomb-coded set filter match performancebench/hashpadding.cpp→ SHA256 padding overheadbench/load_external.cpp→ external block loadingbench/lockedpool.cpp→ secure memory allocator performancebench/logging.cpp→ logging overheadbench/mempool_eviction.cpp→ mempool eviction under pressurebench/mempool_stress.cpp→ mempool under high transaction volumebench/merkle_root.cpp→ Merkle root computationbench/oracle_performance.cpp→⚠️ oracle message validation and bundle processing performancebench/peer_eviction.cpp→ peer eviction candidate selectionbench/poly1305.cpp→ Poly1305 MAC throughputbench/pool.cpp→ PoolAllocator performancebench/prevector.cpp→ prevector small-buffer optimizationbench/rollingbloom.cpp→ rolling bloom filterbench/rpc_blockchain.cpp→ RPC blockchain query performancebench/rpc_mempool.cpp→ RPC mempool query performancebench/streams_findbyte.cpp→ stream byte searchbench/strencodings.cpp→ hex/base encodingbench/util_time.cpp→ time utility functionsbench/verify_script.cpp→ script verification (P2PKH, P2WPKH, P2WSH, P2TR)bench/wallet_balance.cpp→ wallet balance calculationbench/wallet_create_tx.cpp→ transaction creation performancebench/wallet_loading.cpp→ wallet database loadingbench/xor.cpp→ XOR obfuscation performance
ArgsManager(class) → parses and manages command-line arguments, config file settings, and network-specific sectionsParseParameters()→ parses argc/argv into internal settings mapReadConfigFiles()→ reads and parses digibyte.conf with section support ([main], [test], [regtest])GetArg()/GetBoolArg()/GetIntArg()→ retrieves typed setting values with defaultsIsArgSet()→ checks if an argument was providedSoftSetArg()/SoftSetBoolArg()→ sets a default that can be overriddenGetDataDirNet()/GetDataDirBase()→ returns data directory path (network-specific or base)GetChainType()→ returns which chain (mainnet/testnet/signet/regtest) is configured
HelpRequested()→ checks if -help/-? was passedSetupHelpOptions()→ registers -help and -version arguments
CBloomFilter(class) → BIP 37 bloom filter for SPV clients to filter relevant transactionsinsert()→ adds a data element to the filtercontains()→ tests membership (probabilistic, false positives possible)IsRelevantAndUpdate()→ tests if a transaction matches the filter and auto-updates with matched outpointsIsWithinSizeConstraints()→ validates filter size is within protocol limits
CRollingBloomFilter(class) → space-efficient rolling bloom filter with automatic expiration of old entries
ArgsManager::ReadConfigStream()→ parses a config file stream into settingsArgsManager::ReadConfigFiles()→ reads main config file + all includeconf filesAbsPathForConfigVal()→ resolves relative paths in config to absolute paths
common::ConfigStatus(enum) → FAILED, FAILED_WRITE, ABORTEDcommon::ConfigError(struct) → carries config error status, message, and detailscommon::InitConfig()→ reads config files, creates datadir andsettings.jsonif they don't exist, handles config parsing errors
MakeEcho()→ factory for IPC echo interface (testing)
RunCommandParseJSON()→ executes external command and parses stdout as JSON (for external signers)
ReadSettings()→ reads persistent settings fromsettings.jsonWriteSettings()→ writes persistent settings tosettings.jsonGetSetting()→ retrieves a setting value with priority: forced > command-line > RW settings > config fileOnlyHasDefaultSectionSetting()→ checks if a setting only appears in the default config section
SetupEnvironment()→ sets up locale, UTF-8 environment for cross-platform compatibilitySetupNetworking()→ initializes platform networking (Winsock on Windows)GetNumCores()→ returns number of CPU cores for thread pool sizingrunCommand()→ executes a shell command (for-alertnotify,-blocknotify)ShellEscape()→ escapes a string for safe shell command usage
urlDecode()→ URL-decodes a percent-encoded string
- Static assertions verifying platform assumptions (2's complement, byte sizes, integer widths)
- Cross-platform compatibility definitions: socket types, error codes,
MAX_PATH,closesocket()
GetCPUID()→ wrapper around x86 CPUID instruction for detecting hardware crypto (SHA-NI, SSE4, AVX2)
htole16/32/64(),le16/32/64toh()→ host-to-little-endian and reverse byte order conversionsbswap_16/32/64()→ byte swap functions (platform-specific fast implementations)
- Compatibility shims for older glibc versions and sanity checks for C/C++ standard library
SetStdinEcho()→ enables/disables stdin echo (for password input)StdinReady()→ checks if stdin has data available (non-blocking)
CAmount(typedef int64_t) → monetary amount in satoshis (1 DGB = 100,000,000 satoshis)MAX_MONEY→ 21 billion DGB maximum supply capMoneyRange()→ validates an amount is within [0, MAX_MONEY]
MAX_BLOCK_SERIALIZED_SIZE→ 4MB maximum serialized block sizeMAX_BLOCK_WEIGHT→ 4M weight units maximum block weightMAX_BLOCK_SIGOPS_COST→ maximum signature operations per block (80,000)WITNESS_SCALE_FACTOR→ witness discount factor (4x)COINBASE_MATURITY→ blocks before coinbase outputs can be spent (8 on DigiByte;COINBASE_MATURITY_2= 100 after certain height)
ComputeMerkleRoot()→ builds Merkle tree from transaction hashes, returns root hashBlockMerkleRoot()→ computes Merkle root of all transactions in a blockBlockWitnessMerkleRoot()→ computes witness Merkle root (includes witness data in hash)
Consensus::Params(struct) → all consensus parameters for a chain: genesis hash, subsidy halving interval, BIP activation heights, PoW limits per algo, difficulty adjustment heights, MultiShield parametershashGenesisBlock→ genesis block hashnSubsidyHalvingInterval→ blocks between halvingspowLimit,initialTarget[ALGO_*]→ per-algo difficulty limits/initial targetsmultiAlgoDiffChangeTarget/alwaysUpdateDiffChangeTarget/workComputationChangeTarget/algoSwapChangeTarget→ DigiByte multi-algo / DigiShield / DigiSpeed / Odo activation heightsOdoHeight/nOdoShapechangeInterval→ Odocrypt activation height + 10-day key rotation intervalnMinerConfirmationWindow/nRuleChangeActivationThreshold→ BIP9 window/thresholdvDeployments[](BIP9): onlyDEPLOYMENT_TESTDUMMYremains since the v9.26.5 burial; Taproot/DigiDollar/AlgoLock are buried heightsTaprootHeight/⚠️ DigiDollarHeight(gatesSCRIPT_VERIFY_DIGIDOLLAR) /AlgoLockHeight⚠️ nDDActivationHeight/nOracleActivationHeight/nDigiDollarMuSig2Height→ DigiDollar / oracle / MuSig2 v0x03 activation heights⚠️ nDDOracleEpochBlocks/nDDOracleUpdateInterval/nOracleEpochLength/nOracleRequiredMessages/nOracleTotalOracles→ oracle system parameters⚠️ nOraclePubkeyCount/nOracleConsensusRequired→ MuSig2 quorum sizing (mainnet/testnet 35 active keys and 7 signatures required)⚠️ vOraclePublicKeys→ hardcoded oracle x-only Schnorr keys (slot order matches MuSig2 participation bitmap)⚠️ IsMuSig2OracleActive(height)→ inline helper returningheight >= nDigiDollarMuSig2Height
BuriedDeploymentenum → activation heights for BIP34, BIP65, BIP66, CSV, SegWit, NVERSIONBIPS, RESERVEALGO, Odocrypt, and (since the v9.26.5 burial) Taproot,⚠️ DigiDollar, AlgoLock viaDeploymentHeight()DeploymentPosenum (DEPLOYMENT_TESTDUMMYonly since the v9.26.5 burial;DEPLOYMENT_TAPROOT/⚠️ DEPLOYMENT_DIGIDOLLAR/DEPLOYMENT_ALGOLOCKmoved toBuriedDeployment)BIP9Deployment(struct) withbit,nStartTime,nTimeout,min_activation_height,ALWAYS_ACTIVE/NEVER_ACTIVE/NO_TIMEOUTsentinels⚠️ IsOracleActive(params, height)→ free function returningheight >= params.nOracleActivationHeight⚠️ IsMuSig2Active(params, height)→ wrapper aroundParams::IsMuSig2OracleActive⚠️ ValidateOracleConfiguration(params)→ static check that pubkey count, total-slot capacity, hex format, uniqueness, nonzero quorum, and quorum ≤ active pubkey count all hold
CheckTransaction()→ validates transaction structure: non-empty inputs/outputs, output amounts positive and within range, no duplicate inputs, coinbase scriptSig size limits
IsFinalTx()→ checks transaction finality based on nLockTime and nSequenceGetLegacySigOpCount()→ counts signature operations in a transaction's scripts (pre-P2SH)GetP2SHSigOpCount()→ counts sigops in P2SH redeem scripts (after BIP16)GetTransactionSigOpCost()→ calculates weighted sigop cost including SegWit discountCalculateSequenceLocks()→ computes BIP68 relative timelock heights/times for all inputsEvaluateSequenceLocks()→ checks if sequence lock conditions are satisfied at a given blockSequenceLocks()→ combined sequence lock check for mempool admission
TxValidationResultenum → transaction rejection reasons (CONSENSUS, RECENT_CONSENSUS_CHANGE, TX_NOT_STANDARD, TX_MISSING_INPUTS, TX_MEMPOOL_POLICY, etc.)BlockValidationResultenum → block rejection reasons (CONSENSUS, BLOCK_CACHED_INVALID, BLOCK_HEADER_LOW_WORK, etc.)ValidationState<T>(class template) → carries validation result, rejection reason, and debug messageTxValidationState/BlockValidationState→ concrete validation state classesGetTransactionWeight()→ calculates transaction weight (base_size * 3 + total_size)GetBlockWeight()→ calculates total block weightGetWitnessCommitmentIndex()→ finds the SegWit commitment output in coinbase transaction
⚠️ The remainingsrc/consensus/files —dca.{cpp,h},err.{cpp,h},volatility.{cpp,h},digidollar.{cpp,h},digidollar_tx.{cpp,h},digidollar_transaction_validation.{cpp,h}— are part of the DigiDollar/oracle subsystem and are documented inREPO_MAP_DIGIDOLLAR.md.
CSHA256(class) → SHA-256 hasher with hardware acceleration detection (SSE4, AVX2, SHA-NI, ARM-SHANI)Write()→ feeds data into the hashFinalize()→ produces 32-byte hash outputReset()→ resets hasher state for reuse
SHA256AutoDetect()→ detects CPU capabilities and selects fastest SHA-256 implementationSHA256D64()→ optimized double-SHA256 for 64-byte inputs (Merkle tree inner nodes)- Hardware-accelerated implementations:
sha256_sse4.cpp,sha256_sse41.cpp,sha256_avx2.cpp,sha256_x86_shani.cpp,sha256_arm_shani.cpp sha256_Y.cpp / .h→ SHA-256 variant used in multi-algo proof-of-work context
scrypt_1024_1_1_256()→ Scrypt hash with N=1024, r=1, p=1 parameters (Litecoin-compatible, memory-hard)scrypt_1024_1_1_256_sp_generic()→ generic C implementation with explicit scratchpadscrypt_1024_1_1_256_sp_sse2()→ SSE2-optimized Scrypt implementationscrypt_detect_sse2()→ runtime detection of SSE2 support for Scrypt acceleration
HashGroestl()→ computes Groestl-512 hash truncated to 256 bits (one of 5 DigiByte mining algorithms)sph_groestl512_init/update/close()→ low-level Groestl-512 sponge functions
HashSkein()→ computes Skein-512-256 hash (SHA-3 finalist, one of 5 DigiByte mining algorithms)sph_skein512_init/update/close()→ low-level Skein-512 functions
HashQubit()→ computes Qubit hash (chained Luffa→CubeHash→SHAvite→SIMD→ECHO, one of 5 DigiByte mining algorithms)- Component hash functions:
luffa.cpp,cubehash.cpp,shavite.cpp,simd.cpp,echo.cpp - Additional Qubit components:
blake.cpp,bmw.cpp,jh.cpp,keccak.cpp
OdoCrypt(class) → FPGA/ASIC-resistant cipher that changes its algorithm every 10 days based on a time-derived keyEncrypt()→ encrypts data using the current Odocrypt configuration
HashOdo()→ computes Odocrypt hash with time-rotating key (DigiByte's 5th mining algorithm post-Odo activation)OdoKey()→ derives the Odocrypt key from block timestamp and consensus params
AES256Encrypt/AES256Decrypt(classes) → AES-256 ECB mode encryption/decryptionAES256CBCEncrypt/AES256CBCDecrypt(classes) → AES-256 CBC mode with PKCS#7 padding (wallet encryption)
ChaCha20Aligned(class) → ChaCha20 stream cipher (aligned blocks only)ChaCha20(class) → ChaCha20 with arbitrary-length input handlingFSChaCha20(class) → forward-secure ChaCha20 that re-keys after every message (BIP324)
AEADChaCha20Poly1305(class) → AEAD authenticated encryption for BIP324 P2P messagesEncrypt()→ encrypts and authenticates a messageDecrypt()→ decrypts and verifies authentication tag
FSChaCha20Poly1305(class) → forward-secure AEAD with automatic rekeying
CHKDF_HMAC_SHA256_L32(class) → HKDF key derivation (extract + expand) producing 32-byte output
CHMAC_SHA256(class) → HMAC-SHA256 message authentication code
CHMAC_SHA512(class) → HMAC-SHA512 for BIP32 key derivation
Num3072(class) → 3072-bit number arithmetic for MuHashMuHash3072(class) → multiplicative hash set for efficient UTXO set hash (O(1) insert/remove)Insert()/Remove()→ adds/removes elements from the set hashFinalize()→ produces final 256-bit hash of the set
Poly1305(class) → Poly1305 one-time authenticator (MAC)
CRIPEMD160(class) → RIPEMD-160 hash (used in combination with SHA-256 for address generation)
CSHA1(class) → SHA-1 hash (used only for P2P message checksum in legacy transport)
SHA3_256(class) → SHA-3 (Keccak-256) hashKeccakF()→ Keccak-f[1600] permutation function
CSHA512(class) → SHA-512 hash (used in HMAC-SHA512 for BIP32)
CSipHasher(class) → SipHash-2-4 for hash table randomization (DoS-resistant)SipHashUint256()→ SipHash of a uint256 (for tx/block hash table lookups)
- SPH (Sphlib) header files providing portable hash function interfaces for all multi-algo mining components
BaseIndex(class) → abstract base class for blockchain indexing with background sync, reorg handling, and persistenceInit()→ initializes the index and starts background sync from last indexed blockBlockConnected()/BlockDisconnected()→ processes new/reverted blocksRewind()→ handles chain reorganization by rewinding the indexStart()→ begins background synchronization threadStop()→ stops the index and commits final stateGetSummary()→ returns sync progress information
BaseIndex::DB(class) → LevelDB wrapper for index storage with best-block tracking
BlockFilterIndex(class extends BaseIndex) → BIP 157/158 compact block filter indexLookupFilter()→ retrieves a block filter by block hashLookupFilterHeader()→ retrieves a filter header for a blockLookupFilterRange()→ retrieves a range of consecutive block filters
GetBlockFilterIndex()→ returns the index instance for a filter typeInitBlockFilterIndex()→ creates and initializes a block filter indexForEachBlockFilterIndex()→ iterates over all active filter indexes
CoinStatsIndex(class extends BaseIndex) → maintains running UTXO set hash (MuHash) per blockLookupStats()→ retrieves UTXO set statistics (hash, total amount, tx count) at a given block
TxIndex(class extends BaseIndex) → transaction-to-block-position index forgetrawtransactionRPCFindTx()→ looks up a transaction's disk position by txid
CDiskTxPos(struct) → on-disk position of a transaction: block file position + offset within block
⚠️ src/index/digidollarstatsindex.{cpp,h}(DigiDollar supply/health statistics index) is documented inREPO_MAP_DIGIDOLLAR.md.
init::AddLoggingArgs()→ registers-debuglogfile,-debug,-loglevel,-printtoconsole,-shrinkdebugfileargumentsinit::SetLoggingOptions()→ configures logging output (file, console, timestamps, thread names, source locations)init::SetLoggingCategories()→ enables/disables debug logging categories from-debugargsinit::SetLoggingLevel()→ sets minimum log level from-loglevelarginit::StartLogging()→ opens log file and begins logginginit::LogPackageVersion()→ logs DigiByte Core version and build info at startup
interfaces::MakeNodeInit()→ factory for daemon-mode node initialization
interfaces::MakeGuiInit()→ factory for GUI-mode node initialization
interfaces::MakeNodeInit()→ factory for multiprocess node initialization (Bitcoin Core IPC)
interfaces::MakeGuiInit()→ factory for Qt GUI initialization (alias)
interfaces::MakeWalletInit()→ factory for wallet-tool-only initialization
interfaces::Chain(class) → abstract interface that wallet and other clients use to access blockchain stategetHeight()→ returns current chain heightgetBlockHash()→ returns block hash at a given heightfindBlock()→ locates a block by hash with optional data retrievalfindAncestorByHeight()→ finds an ancestor block at a specific heightestimateSmartFee()→ estimates fee rate for confirmation within N blocksmempool()→ access to mempool for UTXO lookupsbroadcastTransaction()→ submits transaction to the networkrequestMempoolTransactions()→ loads all mempool transactions into a notification sink
interfaces::FoundBlock(class) → builder pattern for specifying which block data to retrieveinterfaces::Chain::Notifications(class) → callback interface for chain events (tip change, tx added/removed)
interfaces::Handler(class) → RAII wrapper for signal connections, auto-disconnects on destructionMakeSignalHandler()→ creates handler from a Boost.Signals2 connectionMakeCleanupHandler()→ creates handler that runs cleanup function on destruction
interfaces::Init(class) → abstract initialization interface for multiprocess architecturemakeNode()→ creates a Node interfacemakeChain()→ creates a Chain interfacemakeWalletLoader()→ creates a WalletLoader interfacemakeEcho()→ creates an Echo interface (for IPC testing)
interfaces::Ipc(class) → inter-process communication interface for multiprocess Bitcoin node architecture
interfaces::Node(class) → abstract interface for controlling the node from GUI/RPCinitLogging()/initParameterInteraction()→ initialization stepsstartShutdown()/shutdownRequested()→ shutdown controlgetNodeCount()→ peer countgetNodesStats()→ per-peer statisticsgetTotalBytesRecv()/getTotalBytesSent()→ bandwidth countersgetMempoolSize()/getMempoolDynamicUsage()→ mempool statsgetHeaderTip()/getNumBlocks()→ chain sync statusisInitialBlockDownload()→ IBD status checkgetReindex()→ reindex progress
interfaces::ExternalSigner(class) → interface for hardware wallet operations
interfaces::Echo(class) → trivial round-trip interface used to validate IPC connectivityinterfaces::MakeEcho()→ factory
- Concrete implementation of
interfaces::Handler(RAII signal/cleanup wrapper declared inhandler.h)
- Concrete implementation of
interfaces::Init(multiprocess initialization shim declared ininit.h)
interfaces::Wallet(class) → abstract wallet interface for GUI and RPCencryptWallet()/lock()/unlock()/changeWalletPassphrase()→ encryption operationsgetBalance()→ returns wallet balance breakdown (confirmed, unconfirmed, immature)getCoins()→ returns available UTXOscreateTransaction()→ builds and signs a transactioncommitTransaction()→ broadcasts a signed transactiongetAddresses()→ returns all wallet addresses with labelssignMessage()→ signs a message with a wallet keybackupWallet()→ creates wallet backup file⚠️ getDigiDollarWallet()→ returns DigiDollar wallet interface pointer
interfaces::WalletLoader(class extends ChainClient) → loads/creates/lists walletsMakeWallet()→ creates Wallet interface from CWalletMakeWalletLoader()→ creates WalletLoader interface
MakeIpc()→ factory for IPC implementation (multiprocess node architecture)
ipc::Process(class) → manages child processes for multiprocess architecturespawn()→ spawns a new node subprocesswaitSpawned()→ waits for subprocess to be ready
MakeProcess()→ factory for Process implementation
ipc::Protocol(class) → Cap'n Proto-based IPC protocol for type-safe cross-process communication
ipc::Exception(class) → IPC-specific exception type used by the Cap'n Proto bridge
ipc::Context(struct) → shared context passed through IPC connections
protocol.cpp/protocol.h→ Cap'n Proto wire protocol implementationcontext.h,init-types.h→ Cap'n Proto schema-side context and helper types
MakeBlockInfo()→ creates BlockInfo struct from CBlockIndex for kernel interfaceChainstateRoleenum → NORMAL or BACKGROUND (for assumeUTXO snapshot validation)
CChainParams(class) → full chain parameters: network magic bytes, default port, genesis block, seeds, checkpoints, consensus params, address prefixesMain()→ creates mainnet parameters (port 12024, genesis Jan 10 2014, 5-algo PoW, DigiShield/MultiShield activation heights)TestNet()→ creates testnet26 parameters (port 12033, reset genesis timestamp 1780156800, relaxed difficulty)SigNet()→ creates signet parameters (signed block test network)RegTest()→ creates regtest parameters (instant mining, no real PoW)⚠️ GetOracleNode()→ looks up oracle node info by ID from hardcoded oracle configuration⚠️ GetActiveOracleCount()→ returns number of active oracle nodes in current chain params- Contains all DigiByte-specific multi-algo activation heights, Odocrypt parameters, and
⚠️ DigiDollar/Oracle activation heights
ChainstateManagerOpts(struct) → configuration options for ChainstateManager (worker threads, assumed-valid block, etc.)
BlockManagerOpts(struct) → configuration for block storage (prune target, fast prune flag)
SanityChecks()→ kernel-level sanity checks (ECC, random number generator)
ComputeUTXOStats()→ computes full UTXO set statistics (hash, total coins, total amount) by scanning entire UTXO databaseApplyCoinHash()/RemoveCoinHash()→ incrementally updates MuHash when a UTXO is added/removedGetBogoSize()→ estimates in-memory size of a UTXO entry
kernel::Context(struct) → minimal kernel context for library-mode usage (ECC init, sanity checks)
cs_main→ the global recursive mutex protecting chainstate and block index access
- Kernel library entry point for standalone chainstate validation (without full node)
DisconnectedBlockTransactions(class) → pool of transactions from disconnected blocks during reorg, resubmitted to mempool after reorg completes
CTxMemPoolEntry(class) → a transaction in the mempool with metadata: fee, size, height, time, ancestor/descendant counts and feesGetTx()→ returns the transaction referenceGetFee()→ returns the transaction feeGetTxSize()→ returns virtual transaction sizeGetModifiedFee()→ returns fee with priority adjustmentsGetTime()→ returns when the transaction entered the mempool
MemPoolLimits(struct) → ancestor/descendant count and size limits for mempool packages
MemPoolOptions(struct) → mempool configuration: max size, expiry time, min relay fee, limits
DumpMempool()→ saves mempool contents tomempool.datfor persistence across restartsLoadMempool()→ loads mempool frommempool.daton startup
MemPoolRemovalReasonenum → why a tx was removed: EXPIRY, SIZELIMIT, REORG, BLOCK, CONFLICT, REPLACEDRemovalReasonToString()→ converts removal reason to display string
MessageStartChars(array) → 4-byte magic bytes identifying DigiByte network messages (differs per network)
kernel::Notifications(class) → abstract interface for kernel notifications (header tip, block tip, progress, warning, fatal error)
ValidationCacheSizes(struct) → sizes for script and signature verification caches
BCLog::Timer(class) → RAII timer that logs elapsed time with a message on destruction (for profiling code sections)
AbortNode()→ triggers node abort with error message, sets exit status, optionally initiates shutdown
ApplyArgsManOptions()→ reads block storage config from ArgsManager into BlockManagerOpts
BlockTreeDB(class extends CDBWrapper) → LevelDB database for block index (maps block hash → disk position + metadata)ReadBlockFileInfo()/WriteBlockFileInfo()→ per-file metadataWriteBatchSync()→ atomic batch write with syncLoadBlockIndexGuts()→ reads entire block index from LevelDB into memory on startup
BlockManager(class) → manages block and undo file storage on diskLoadBlockIndex()→ loads full block index from databaseReadBlockFromDisk()/ReadRawBlockFromDisk()→ reads a block from blk*.dat filesReadBlockUndo()→ reads block undo data from rev*.dat filesSaveBlockToDisk()→ writes a new block to disk, allocating space as neededPruneOneBlockFile()→ deletes a block file during pruningFindBlockPos()→ finds or allocates space in block files for a new blockGetBlockFileInfo()→ returns metadata for a specific block fileLookupBlockIndex()→ finds a block index entry by hashAddToBlockIndex()→ creates new block index entry
ImportBlocks()→ imports blocks from external files during-loadblock
CalculateCacheSizes()→ distributes available cache memory between UTXO DB, UTXO set, and block index
LoadChainstate()→ loads or creates chainstate databases, initializes UTXO setVerifyLoadedChainstate()→ verifies blockchain database integrity on startupChainstateLoadOptions(struct) → options for chainstate loading (reindex, prune, assume-valid, etc.)
ApplyArgsManOptions()→ reads chainstate config from ArgsManager into ChainstateManagerOpts
FindCoins()→ looks up coins from both UTXO set and mempool (for RPC)
GetUTXOStats()→ computes UTXO set statistics (total supply, UTXO count, hash) with interrupt support
ApplyArgsManOptions()→ reads UTXO cache config from ArgsManager
ConnectionTypeenum → peer connection types: INBOUND, OUTBOUND_FULL_RELAY, MANUAL, FEELER, BLOCK_RELAY, ADDR_FETCH
NodeContext(struct) → aggregate of all node subsystem pointers: chainman, mempool, connman, banman, peerman, scheduler, wallet interfaces, indexes- Central dependency injection container for the node
ApplyArgsManOptions()→ reads database config options from ArgsManager
ProtectEvictionCandidatesByRatio()→ implements peer eviction protection logic: protects peers by network diversity, ping latency, transaction/block relay contribution, and connection age
NodeImpl(class implements interfaces::Node) → connects the abstract Node interface to the real node subsystemsChainImpl(class implements interfaces::Chain) → connects the abstract Chain interface to chainstateMakeNode()/MakeChain()→ factory functions
CClientUIInterface(class) → signal-based callback system for displaying messages to the user (GUI or console)ThreadSafeMessageBox()→ shows a message box (or logs in daemon mode)InitMessage()→ shows initialization progress messages
InitWarning()/InitError()→ global functions for startup warnings/errors
KernelNotifications(class implements kernel::Notifications) → bridges kernel notifications to node UIheaderTip()→ shows header sync progressprogress()→ shows verification/IBD progresswarning()→ displays warningsfatalError()→ handles fatal errors with shutdown
ApplyArgsManOptions()→ reads mempool config from ArgsManager into MemPoolOptions
ShouldPersistMempool()→ checks if mempool persistence is enabledMempoolPath()→ returns the path to mempool.dat
BlockAssembler(class) → constructs block templates for mining by selecting transactions from the mempoolCreateNewBlock()→ builds a complete block template with coinbase, selected transactions, and algo-specific header fieldsaddPackageTxs()→ greedily selects highest-feerate transaction packages from the mempoolTestPackage()→ checks if adding a package would exceed block size/sigop limitsAddToBlock()→ adds a transaction to the block template
UpdateTime()→ updates block header timestamp, recalculates difficulty for the target mining algorithmIncrementExtraNonce()→ updates coinbase extra nonce and regenerates Merkle root for mining iterationsRegenerateCommitments()→ regenerates SegWit witness commitment in coinbaseApplyArgsManOptions()→ reads miner config (block max weight, priority) from args
MiniMiner(class) → lightweight mempool fee-rate calculator for coin selection (simulates block assembly without full block template)CalculateBumpFees()→ calculates the fee bump needed for each UTXO to make its ancestor package attractive to miners
MiniMinerMempoolEntry(class) → simplified mempool entry for MiniMiner calculations
- Wrapper around the minisketch library for Erlay transaction reconciliation (BIP 330)
ApplyArgsManOptions()→ reads peer manager config from ArgsManager
AnalyzePSBT()→ analyzes a PSBT and returns per-input signing status, estimated fees, and next required action
BroadcastTransaction()→ validates and broadcasts a transaction to the P2P networkGetTransaction()→ retrieves a transaction from mempool or on-disk block data
TxReconciliationTracker(class) → manages Erlay-style transaction reconciliation state with peers (BIP 330)RegisterPeer()→ initializes reconciliation state for a peerForgetPeer()→ cleans up reconciliation state for disconnected peer
- Legacy UI interface forwarding (signals for block notifications, progress, etc.)
SnapshotMetadata(class) → metadata for assumeUTXO snapshots (block hash, coin count)WriteSnapshotBaseBlockhash()/ReadSnapshotBaseBlockhash()→ persists the snapshot base blockFindSnapshotChainstateDir()→ locates snapshot chainstate directory
ApplyArgsManOptions()→ reads signature/script cache size config from ArgsManager
CFeeRate(class) → represents a fee rate in satoshis per kilobyte (or per kvB)GetFee()→ calculates fee for a given transaction sizeToString()→ human-readable fee rate string
FeeEstimateModeenum → UNSET, ECONOMICAL, CONSERVATIVE
CBlockPolicyEstimator(class) → estimates optimal fee rates based on historical confirmation timesestimateSmartFee()→ returns fee estimate for target confirmation blocks with confidence levelestimateRawFee()→ returns raw fee estimate for a specific time horizonprocessBlock()→ updates estimates with newly confirmed transactionsprocessTransaction()→ records a new unconfirmed transaction for trackingFlushUnconfirmed()→ clears expired unconfirmed transaction tracking data
FeeFilterRounder(class) → rounds fee rates to reduce fingerprinting via feefilter messagesTxConfirmStats(class) → statistical buckets tracking confirmation times by fee rate
ApplyArgsManOptions()→ reads fee estimation config from ArgsManager
CheckPackage()→ validates a transaction package: no duplicates, reasonable count/size, valid topologyIsChildWithParents()→ checks if package is a single child with all its direct parentsIsChildWithParentsTree()→ validates child-with-parents tree structure for package relayPackageValidationState(class) → carries package-level validation results
IsStandardTx()→ checks if a transaction meets relay/mining standardness rules (version, size, script types, dust)AreInputsStandard()→ validates transaction inputs use standard script formsIsWitnessStandard()→ validates witness programs conform to known versionsGetDustThreshold()→ calculates minimum output value to avoid being considered dustIsDust()→ checks if an output is below the dust thresholdGetVirtualTransactionSize()→ converts weight to virtual bytes (weight/4 rounded up)- Key constants:
MAX_STANDARD_TX_WEIGHT,MAX_P2SH_SIGOPS,DEFAULT_MAX_MEMPOOL_SIZE_MB,DUST_RELAY_TX_FEE
IsRBFOptIn()→ checks if a transaction signals replace-by-fee (BIP 125: any input with nSequence < 0xfffffffe)IsRBFOptInEmptyMempool()→ checks RBF signal without mempool context (for new transactions)RBFTransactionStateenum → UNKNOWN, REPLACEABLE_BIP125, FINAL
fIsBareMultisigStd→ global setting for whether bare multisig is standardnBytesPerSigOp→ sigop cost accounting factordustRelayFee→ fee rate used for dust threshold calculationincrementalRelayFee→ minimum fee increment for mempool replacement
CBlockHeader(class) → block header: version, prev hash, merkle root, timestamp, nBits (difficulty), nNonceGetHash()→ double-SHA256 hash of the header (block hash)GetAlgo()→ extracts mining algorithm from version field (bits 8-11 encode algo values including Odocrypt's 14 << 8 version pattern)
CBlock(class extends CBlockHeader) → full block: header + vector of transactionsToString()→ human-readable block summary
GetAlgoName()→ maps algo number (0-7) to name string ("sha256d", "scrypt", "groestl", "skein", "qubit", "odo")GetAlgoByName()→ reverse mapping from name to algo numberGetVersionForAlgo()→ constructs version field with algo bits setOdoKey()→ derives time-rotating Odocrypt key from block timestamp
COutPoint(class) → transaction output reference: txid + output index (vout)CTxIn(class) → transaction input: outpoint + scriptSig + nSequence + witnessCTxOut(class) → transaction output: amount (nValue) + scriptPubKeyCTransaction(class) → immutable transaction with cached hash and witness hashGetHash()→ returns txid (hash without witness data)GetWitnessHash()→ returns wtxid (hash including witness data)IsCoinBase()→ checks if this is a coinbase transactionHasWitness()→ checks if any input has witness dataGetValueOut()→ sums all output values
CMutableTransaction(class) → mutable version of CTransaction for building/modifying transactionsGenTxid(class) → generic transaction identifier (txid or wtxid)⚠️ DigiDollarTxTypeenum → DD transaction types (NONE, MINT, TRANSFER, REDEEM)⚠️ IsDigiDollarTransaction()→ checks if transaction has DD type flags in version field⚠️ GetDigiDollarTxType()→ extracts DD transaction type from version⚠️ MakeDigiDollarVersion()→ encodes DD type and flags into transaction version⚠️ GetDigiDollarTxTypeName()→ human-readable DD transaction type name
⚠️ src/primitives/oracle.{cpp,h}(price-message + bundle types, MuSig2 v0x03 fields, IQR consensus helper, oracle roster) is part of the DigiDollar/oracle subsystem and is documented in detail inREPO_MAP_DIGIDOLLAR.md.
The Qt GUI provides the graphical interface for DigiByte Core. Key non-DigiDollar components:
digibyte.cpp/digibyte.h→ GUI application entry point, initializes Qt and the nodedigibytegui.cpp/digibytegui.h→ main window (DigiByteGUI) with menu/toolbar/status-bar wiringdigibyteamountfield.cpp→ input widget for DGB amounts with unit switchingdigibyteunits.cpp→ DGB unit conversion (DGB, mDGB, µDGB, sat)digibyteaddressvalidator.cpp→ validates DigiByte addresses in input fieldsdigibytestrings.cpp→ translation strings registered with Qt's translation systemwalletmodel.cpp→ bridges CWallet to Qt model for display/interactionclientmodel.cpp→ bridges node state (peers, blocks, sync progress) to Qt modelsendcoinsdialog.cpp→ send coins dialog with address, amount, fee controlsreceivecoinsdialog.cpp→ generate receive addresses with QR codestransactiontablemodel.cpp→ displays transaction history in table viewoverviewpage.cpp→ main wallet overview (balances, recent transactions)optionsdialog.cpp→ node settings dialog (network, wallet, display)rpcconsole.cpp→ built-in RPC console and peer info panelpaymentserver.cpp→ BIP 21 URI and payment protocol handlernotificator.cpp→ OS-native desktop notificationssplashscreen.cpp→ startup splash with initialization progressguiutil.cpp→ shared GUI utility functions (clipboard, file dialogs, formatting)coincontroldialog.cpp,coincontroltreewidget.cpp,addressbookpage.cpp,addresstablemodel.cpp,bantablemodel.cpp,peertablemodel.cpp,createwalletdialog.cpp,csvmodelwriter.cpp,askpassphrasedialog.cpp→ standard wallet UI building blocks
⚠️ DigiDollar Qt widgets —digidollartab.{cpp,h},digidollarmintwidget.{cpp,h},digidollarsendwidget.{cpp,h},digidollarreceivewidget.{cpp,h},digidollarreceiverequest.{cpp,h},digidollarredeemwidget.{cpp,h},digidollaroverviewwidget.{cpp,h},digidollarpositionswidget.{cpp,h},digidollartransactionswidget.{cpp,h},digidollarcoincontroldialog.{cpp,h},ddaddressbookpage.{cpp,h},digidollar_qt_translate.h, and theqt/test/digidollarwidgettests.{cpp,h}/qt/test/digidollarwave19widgettests.{cpp,h}suites — are documented inREPO_MAP_DIGIDOLLAR.md. Generated Qtmoc_*.cppandforms/ui_*.hfiles are not source map entries.
- RPC commands:
getblockcount,getbestblockhash,getblockhash,getblockheader,getblock,getblockchaininfo,getchaintips,getdifficulty,getblockstats,gettxoutsetinfo,gettxout,verifychain,preciousblock,invalidateblock,reconsiderblock,waitfornewblock,waitforblock,waitforblockheight,syncwithvalidationinterfacequeue,getblockfrompeer,dumptxoutset,scanblocks GetDifficulty()→ calculates human-readable difficulty value, supports per-algo difficulty queriesblockToJSON()→ converts CBlock to detailed JSON representationblockheaderToJSON()→ converts block header to JSONMempoolInfoToJSON()/MempoolToJSON()→ mempool state as JSONEnsureChainman()/EnsureMemPool()/EnsureFeeEstimator()→ extract subsystem pointers from RPC context
CRPCConvertTable→ maps RPC method parameters to expected types (string→int/bool/array/object)ParseNonRFCJSONValue()→ parses JSON values that aren't strictly RFC-compliant
- RPC command:
enumeratesigners→ lists connected hardware wallets
- RPC commands:
estimatesmartfee,estimaterawfee→ fee estimation RPCs
- RPC commands:
sendrawtransaction,testmempoolaccept,getmempoolinfo,getrawmempool,getmempoolentry,getmempoolancestors,getmempooldescendants,submitpackage,savemempool MempoolEntryDescription()→ generates JSON description of a mempool entry
- RPC commands:
getmininginfo,getnetworkhashps,generatetoaddress,generatetodescriptor,generateblock,getblocktemplate,submitblock,submitheader,prioritisetransaction,getprioritisedtransactions getblocktemplate→ returns block template for external miners with algo selection support⚠️ getblocktemplateincludes DigiDollar oracle touchpoints: when the coinbase contains anOP_RETURN OP_ORACLEMuSig2 bundle, it exposescoinbasetxnanddefault_oracle_commitmentso miners keep the oracle output intact.getmininginfo→ returns current mining state including active algorithm info
- RPC commands:
validateaddress,createmultisig,getdescriptorinfo,deriveaddresses,verifymessage,signmessagewithprivkey,setmocktime,mockscheduler,getmemoryinfo,logging,getindexinfo,echo
- RPC commands:
getconnectioncount,ping,getpeerinfo,addnode,disconnectnode,getaddednodeinfo,getnettotals,getnetworkinfo,setban,listbanned,clearbanned,setnetworkactive,addconnection,getnodeaddresses,getaddrmaninfo
- RPC commands:
stop,uptime,getmemoryinfo
- RPC commands:
validateaddress,createmultisig,getdescriptorinfo,deriveaddresses(output script analysis and address utilities)
RPCErrorCodeenum → all JSON-RPC error codes (INVALID_REQUEST, METHOD_NOT_FOUND, PARSE_ERROR, etc.)- JSON-RPC protocol constants and request/response structures
- RPC commands:
getrawtransaction,createrawtransaction,decoderawtransaction,decodescript,combinerawtransaction,signrawtransactionwithkey,sendrawtransaction,testmempoolaccept - PSBT RPCs:
decodepsbt,combinepsbt,finalizepsbt,createpsbt,converttopsbt,utxoupdatepsbt,joinpsbts,analyzepsbt
ConstructTransaction()→ builds CMutableTransaction from JSON inputs/outputs specificationAddInputs()/AddOutputs()→ adds inputs/outputs from JSON to a mutable transactionParsePrevouts()→ parses previous output info for offline transaction signingSignTransaction()→ signs a transaction using provided keys
RegisterAllCoreRPCCommands()→ registers all core RPC command groups (blockchain,⚠️ digidollar, fees, mempool, mining, node, net, output script, rawtransaction, sign-message, signer (HW), txoutproof). DigiDollar registration is documented inREPO_MAP_DIGIDOLLAR.md.- Individual
Register*RPCCommands(CRPCTable&)declarations for each RPC module.
JSONRPCRequest(class) → parsed JSON-RPC request with method, params, auth contextJSONRPCReply()→ constructs a JSON-RPC response objectJSONRPCError()→ constructs a JSON-RPC error response
CRPCTable(class) → maps RPC method names to handler functionsexecute()→ dispatches an RPC request to the appropriate handlerappendCommand()→ registers a new RPC commandlistCommands()→ returns all registered command names
StartRPC()/InterruptRPC()/StopRPC()→ RPC lifecycle managementIsRPCRunning()→ checks if RPC server is activeSetRPCWarmupStatus()/SetRPCWarmupFinished()→ manages warmup state during startupRPCRunLater()→ schedules a one-shot RPC callback for later execution
- Helper functions for extracting node subsystem references from RPC context
- RPC command:
signmessagewithprivkey→ signs a message with a provided private key
- RPC commands:
gettxoutproof(creates Merkle proof for tx inclusion),verifytxoutproof(verifies Merkle proof)
RPCHelpMan(class) → self-documenting RPC command with parameter validation, help text generation, and type checkingAmountFromValue()→ converts JSON value to CAmount with validationParseHashV()/ParseHashO()→ parses hex hash from JSONHexToPubKey()/AddrToPubKey()→ converts hex/address to CPubKeyDescribeAddress()→ generates JSON description of an addressRPCErrorFromTransactionError()→ maps transaction errors to RPC error codes
Descriptor(abstract class) → output descriptor: human-readable script template (BIP 380-386)Expand()→ generates scriptPubKeys and signing info for given key rangeExpandFromCache()→ expands using cached derived keys (no private key access needed)IsSolvable()→ checks if descriptor can produce signed transactionsIsRange()→ checks if descriptor uses wildcards (e.g.,pkh(xpub.../*))ToString()/ToPrivateString()→ serializes descriptor with optional private key export
DescriptorCache(class) → caches expanded keys to avoid repeated derivationParse()→ parses a descriptor string into a Descriptor objectInferDescriptor()→ infers a descriptor from a script and signing providerGetDescriptorChecksum()→ computes descriptor checksum (8-character suffix)DescriptorID()→ computes a unique ID for a descriptor
digibyteconsensus_verify_script()→ C API for script verification (shared library export)digibyteconsensus_version()→ returns consensus library version
KeyOriginInfo(struct) → BIP32 key origin metadata (master fingerprint + derivation path) for PSBTs and signing providers
ScriptErrorenum → script execution failure codes (SCRIPT_ERR_OK,SCRIPT_ERR_EVAL_FALSE,SCRIPT_ERR_OP_RETURN, BIP-specific errors, taproot errors,⚠️ DigiDollar errors)ScriptErrorString()→ mapsScriptErrorto a human-readable message
EvalScript()→ executes a Bitcoin script on the stack machine, handling all opcodes including SegWit v0 and TapscriptVerifyScript()→ full script verification: evaluates scriptSig, scriptPubKey, and witness programsBaseSignatureChecker(abstract class) → interface for signature verificationGenericTransactionSignatureChecker<T>(class) → verifies ECDSA and Schnorr signatures against transaction dataCheckSig()→ verifies ECDSA signature for legacy/SegWit v0 scriptsCheckSchnorrSignature()→ verifies BIP340 Schnorr signature for TaprootCheckLockTime()/CheckSequence()→ validates OP_CHECKLOCKTIMEVERIFY and OP_CHECKSEQUENCEVERIFY
CachingTransactionSignatureChecker→ seesrc/script/sigcache.hSignatureHash()→ computes the sighash for ECDSA signing (BIP 143 for SegWit)SignatureHashSchnorr()→ computes the sighash for Schnorr signing (BIP 341/342)CheckSignatureEncoding()→ validates DER signature encoding (BIP 66)ComputeTapleafHash()/ComputeTapbranchHash()→ Taproot tree hash computationsComputeTaprootMerkleRoot()→ verifies Taproot control block against expected Merkle rootCountWitnessSigOps()→ counts signature operations in witness programs- Script flags:
SCRIPT_VERIFY_P2SH,SCRIPT_VERIFY_WITNESS,SCRIPT_VERIFY_TAPROOT, etc.
IsMine()→ determines if a script/destination belongs to a keystore (ISMINE_SPENDABLE, ISMINE_WATCH_ONLY, ISMINE_NO)isminetypeenum → NO, WATCH_ONLY, SPENDABLE, ALL
miniscript::Node<Key>(class template) → Miniscript abstract syntax tree node for policy compilationminiscript::Type(class) → Miniscript type system for correctness/malleability analysisFragmentenum → all Miniscript fragments (pk, pkh, older, after, sha256, thresh, and_v, or_b, etc.)- Miniscript contexts: P2WSH and P2TR Tapscript
CScript(class extends vector<uint8_t>) → serialized Bitcoin script (sequence of opcodes and data pushes)IsPayToScriptHash()→ checks if script is P2SH patternIsPayToWitnessScriptHash()→ checks if script is P2WSH patternIsWitnessProgram()→ checks if script is any witness program (SegWit)IsPushOnly()→ validates script contains only data push operationsGetSigOpCount()→ counts signature operations in the scriptHasValidOps()→ checks all opcodes are definedFindAndDelete()→ removes a specific byte pattern from script (for CODESEPARATOR)
CScriptNum(class) → Bitcoin script number: variable-length signed integer with overflow detectionGetOpName()→ returns human-readable opcode name (e.g., "OP_DUP", "OP_CHECKSIG")CScriptID(class) → Hash160 of a script, used for P2SH addresses
CachingTransactionSignatureChecker(class) → signature checker with cuckoo-cache for verified signatures- Avoids re-verifying signatures already seen (significant speedup during block validation)
ProduceSignature()→ creates a complete signature for a script using the given signing providerSignTransaction()→ signs all inputs of a mutable transactionMutableTransactionSignatureCreator(class) → creates signatures for transaction inputs with sighash computationDataFromTransaction()→ extracts existing signature data from a transaction inputUpdateInput()→ applies signature data to a transaction inputIsSegWitOutput()→ checks if an output requires SegWit spending
SigningProvider(abstract class) → interface for accessing keys, scripts, and key origin info needed for signingGetCScript()/GetPubKey()/GetKey()/GetKeyOrigin()/GetTaprootSpendData()
FillableSigningProvider(class) → in-memory signing provider that can add keys and scriptsAddKey()→ stores a private keyAddCScript()→ stores a redeemScriptHaveKey()/HaveCScript()→ checks for key/script availability
HidingSigningProvider(class) → wraps another provider, hiding private keys or scriptsMultiSigningProvider(class) → chains multiple providers, trying each in orderGetKeyForDestination()→ resolves destination to the signing key ID
Solver()→ classifies a scriptPubKey into its type and extracts embedded data (pubkeys, hashes, witness programs)TxoutTypeenum → NONSTANDARD, PUBKEY, PUBKEYHASH, SCRIPTHASH, MULTISIG, NULL_DATA, WITNESS_V0_KEYHASH, WITNESS_V0_SCRIPTHASH, WITNESS_V1_TAPROOT, WITNESS_UNKNOWNGetTxnOutputType()→ converts TxoutType enum to human-readable stringGetScriptForRawPubKey()→ creates P2PK script from a public keyGetScriptForMultisig()→ creates multisig script from threshold + pubkeysMatchMultiA()→ detects Tapscript multi_a() pattern
ExtractDestination()→ extracts a single CTxDestination from a scriptPubKeyExtractDestinations()→ extracts all destinations from multisig or complex scriptsGetScriptForDestination()→ converts CTxDestination to corresponding scriptPubKeyTaprootBuilder(class) → constructs Taproot output keys from internal key + script treeAdd()→ adds a script leaf at a given depthFinalize()→ computes the output key and spend dataIsComplete()→ checks if the tree is fully specifiedGetOutput()→ returns the final Taproot output keyGetSpendData()→ returns all spend paths (key path + script paths with control blocks)
InferTaprootTree()→ reconstructs a Taproot tree structure from spend data
memory_cleanse()→ securely zeroes memory (resistant to compiler optimization, for key material)
- RAII wrappers for libevent objects (
evhttp,evhttp_request,event_base)
LockedPoolManager(class) → singleton managing secure memory allocation (mlock'd pages that can't be swapped to disk)LockedPool(class) → allocator that locks memory pages to prevent sensitive data (keys) from being written to swapalloc()/free()→ allocate/free locked memory
Arena(class) → memory arena with chunk management for the locked pool
pool.h→PoolAllocator<T>arena-style STL allocator used by validation cachessecure.h→secure_allocator<T>STL allocator backed byLockedPoolfor sensitive datazeroafterfree.h→zero_after_free_allocator<T>STL allocator that zeros memory on free
DecodeAsmap()→ decodes compressed ASN (Autonomous System Number) map for peer bucketing by AS instead of /16
ScheduleBatchPriority()→ sets current thread to low scheduling priority (for background index sync)
FormatHDKeypath()→ formats BIP32 derivation path as string (e.g., "m/84'/20'/0'/0/0")ParseHDKeypath()→ parses derivation path string into vector of child indicesWriteHDKeypath()→ writes HD keypath to a stream
ByteVectorHash(class) → SipHash-based hasher for byte vectors in hash maps
ChainTypeenum → MAIN, TESTNET, SIGNET, REGTESTChainTypeFromString()→ parses chain type from stringChainTypeToString()→ converts chain type to string
Assert()→ assertion that aborts with backtrace in debug buildsAssume()→ soft assertion that logs but doesn't abort in release builds
Epoch(class) → epoch-based RAII guard for efficient "mark and sweep" operations on data structures
TransactionErrorenum → ALREADY_IN_CHAIN, MEMPOOL_REJECTED, MEMPOOL_ERROR, MAX_FEE_EXCEEDED, etc.TransactionErrorString()→ human-readable error messages for transaction submission failuresResolveErrMsg()→ generates error messages for name/address resolution failures
PrintExceptionContinue()→ logs exception details and optionally continues execution
StringForFeeReason()→ converts fee reason enum to display stringFeeModeFromString()→ parses fee estimate mode from string ("economical", "conservative")
- Filesystem utilities wrapping
std::filesystemwith DigiByte-specific path handling fs::path→ filesystem path type used throughout the codebase
RenameOver()→ atomic file rename (cross-platform)LockDirectory()/UnlockDirectory()→ directory locking via .lock filesDirIsWritable()→ checks directory write permissionsAllocateFileRange()→ pre-allocates file space on disk (platform-specific)ReleaseDirectoryLocks()→ releases all directory locks on shutdown
GetUniquePath()→ generates unique temporary file path
GolombRiceDecode()/GolombRiceEncode()→ Golomb-Rice coding for BIP 158 compact block filters
SaltedTxidHasher/SaltedOutpointHasher→ randomized hashers for hash tables (DoS-resistant)FilterHeaderHasher/SignatureCacheHasher→ specialized hashers for specific caches
MessageSign()→ signs a message with a private key (Bitcoin signed message format)MessageVerify()→ verifies a signed message against an addressMessageHash()→ computes the hash of a message with the "DigiByte Signed Message" prefix
FormatMoney()→ formats CAmount as human-readable string with 8 decimal placesParseMoney()→ parses decimal string to CAmount
SignalsOptInRBF()→ checks if a transaction signals opt-in RBF
ReadBinaryFile()/WriteBinaryFile()→ simple binary file I/O
util::Result<T>→ result type carrying either a success value or a bilingual error message
EncodeDouble()/DecodeDouble()→ platform-independent IEEE 754 double serialization
ReadSettings()/WriteSettings()→ persistent settings file I/OGetSetting()→ retrieves a setting with priority resolution
SignalInterrupt(class) → thread-safe interrupt flag using eventfd (Linux) or pipe for clean shutdown signaling
Sock(class) → RAII wrapper around OS socket descriptor with send/recv/wait operationsSend()/Recv()→ socket I/O with error handlingWait()→ polls socket for readability/writability with timeoutWaitMany()→ polls multiple sockets simultaneously
Const()/Func()/Expr()→ lightweight parser combinators for descriptor string parsing
HexStr()→ converts bytes to hex stringParseHex()/TryParseHex()→ converts hex string to bytesEncodeBase32()/DecodeBase32()→ base32 encoding/decoding (for Tor addresses)EncodeBase64()/DecodeBase64()→ base64 encoding/decodingSanitizeString()→ removes non-printable characters from stringsIsHex()/IsHexNumber()→ validates hex stringsatoi64()/LocaleIndependentAtoi()→ safe string-to-integer conversion
TrimString()→ trims whitespace/specified characters from stringFormatParagraph()→ word-wraps text to specified widthJoin()→ joins container elements with separatorContainsNoNUL()→ validates string has no embedded null bytesRemovePrefix()/RemovePrefixView()→ removes a prefix from a string
SysErrorString()→ converts system errno to human-readable string
- Legacy system utilities (most moved to common/system.h)
TraceThread()→ wrapper that runs a function in a named thread with exception logging
CThreadInterrupt(class) → interruptible sleep mechanism for background threadssleep_for()→ sleeps for a duration, returning early if interruptedinterrupt()→ wakes all sleeping threads
SetSelfThreadName()→ sets the OS-level name for the current thread (for debugging)GetThreadName()→ retrieves the current thread's name
GetTime()→ returns current Unix timestamp (mockable for testing)GetTimeMillis()/GetTimeMicros()→ high-resolution timestampsSetMockTime()→ overrides system time for testingMillisToString()→ formats milliseconds as human-readable durationFormatISO8601DateTime()/FormatISO8601Date()→ ISO 8601 date formattingParseISO8601DateTime()→ parses ISO 8601 date string to timestamp
TokenPipe(class) → one-way byte pipe for inter-thread token passing (used for process synchronization)
bilingual_str(struct) → holds both original English and translated error/warning messages_()→ marks a string for translation (gettext-compatible)Untranslated()→ wraps an English-only string
urlDecode()→ URL percent-decoding
Cat()→ concatenates vectorsVector()→ constructs vector from arguments
any.h→util::AnyPtr<T>lightweight type-erased pointer wrapper used for context injectionbitdeque.h→bitdeque<>packed bit containerfastrange.h→ Lemire-style fast-range integer reductionhash_type.h→ strong-typed hash wrappers used by descriptor/Taproot codeinsert.h→ range-insertion helpers for ordered containersmacros.h→ portable_PASTE,STRINGIZE, etc. macrosoverflow.h→ checked-arithmetic helpers (MoreOrEqualTwoComplement,CheckedAdd)overloaded.h→Overloadedlambda visitor combinatortrace.h→ USDT/SystemTap tracing macros (no-op when tracing disabled)types.h→ small typed wrappers (NoDestination, etc.)ui_change_type.h→ChangeTypeenum used by Qt signals
BerkeleyEnvironment(class) → manages Berkeley DB environment (shared across wallets in same directory)BerkeleyDatabase(class extends WalletDatabase) → BDB-backed wallet database (legacy format)BerkeleyBatch(class extends DatabaseBatch) → RAII BDB transaction batchBerkeleyCursor(class extends DatabaseCursor) → BDB database cursorBerkeleyDatabaseVersion()→ returns BDB library version stringBerkeleyDatabaseSanityCheck()→ validates BDB library compatibility
CCoinControl(class) → user preferences for coin selection: manually selected inputs, change address, fee rate, estimated tx weight, min/max confirmation depth
BnB,KnapsackSolver,SelectCoinsSRD→ coin-selection algorithms used bywallet/spend.cppOutputGroup(struct) → groups outputs sharing a destination for selection cost accounting
WalletContext(struct) → injected dependencies for wallet code (chain, scheduler, args)
CCrypter/CKeyingMaterial→ AES-256-CBC wallet-encryption primitives backingEncryptWallet/Unlock
WalletDatabase(abstract) /DatabaseBatch/DatabaseCursor→ backend-agnostic key-value DB interface (BDB and SQLite implementations)MakeDatabase()→ factory choosing the BDB or SQLite backend based on file format
DumpWallet()/CreateFromDump()→ wallet hex-record export/importExternalSignerScriptPubKeyMan→ SPK manager that delegates signing to an external HWI signer
wallet::feebumper::CreateRateBumpTransaction()→ BIP125 RBF helper; produces a replacement tx with bumped fee
GetMinimumFee()/GetRequiredFee()/EstimateRequiredFee()→ wallet-side fee computation/estimation
WalletInit(class implementsWalletInitInterface) → registers wallet command-line args, parameter interaction, and constructs wallets at startup
WalletImpl(implementsinterfaces::Wallet) andWalletLoaderImpl(implementsinterfaces::WalletLoader) — the bridges from the abstract interfaces declared insrc/interfaces/wallet.htoCWallet
LoadWallets(),StartWallets(),FlushWallets(),StopWallets()→ wallet lifecycle hooks called frominit.cpp
IsMine(),GetCredit(),GetDebit(),GetChange(),CachedTxIs*→ balance/ownership accounting for received UTXOs
RecoverDatabaseFile()→ BDB salvage path used bydigibyte-wallet salvage
ScriptPubKeyMan(abstract) and concrete subclassesLegacyScriptPubKeyMan,DescriptorScriptPubKeyMan→ key/script management strategies (HD chains, descriptor wallets, Taproot)
CreateTransaction(),FundTransaction(),SignTransaction()→ coin selection + signing orchestration; integrates BnB/Knapsack/SRD viacoinselection.cpp
SQLiteDatabase/SQLiteBatch→ SQLite wallet backend (default for descriptor wallets)
CWalletTx→ wallet's view of a transaction (status, conflicts, change cache, sender labels)
- Wallet-internal type aliases (e.g.,
bilingual_str,WalletDescriptor,WalletDatabaseStatus)
CWallet(class) → the main wallet container: keys, transactions, address book, encryption state, signal connections- Public methods:
LoadWallet,EncryptWallet,Unlock,AddNewKey,CommitTransaction,MarkDirty,BlockUntilSyncedToCurrentChain ⚠️ Holdsm_dd_wallet(DigiDollar wallet pointer) and DD UTXO maps; full DD-specific surface is inREPO_MAP_DIGIDOLLAR.md.
WalletBatch→ typed DB record reader/writer for the wallet (record types: keymeta, ckey, hdchain, descriptor, name, purpose,⚠️ DD positions / DD UTXOs / DD oracle keys; the DD-specific records are documented inREPO_MAP_DIGIDOLLAR.md)
digibyte-wallet(CLI tool) backend:create,info,salvage,dump,createfromdump
GetWalletDir(),IsFeatureSupported(),MakeWalletPath()→ wallet directory and feature-flag utilities
addresses.cpp,backup.cpp,coins.cpp,encrypt.cpp,signmessage.cpp,spend.cpp,transactions.cpp,util.cpp,wallet.cpp→ modular wallet RPC command groupswallet.cpp::GetWalletRPCCommands()aggregates all wallet-context RPCs;⚠️ also registers DigiDollar/oracle wallet commands (seeREPO_MAP_DIGIDOLLAR.md).- Legacy entry points
rpcwallet.cppandrpcdump.cppremain in-tree but their content was redistributed across therpc/modular files; treat as transitional scaffolding.
DigiDollar-specific wallet code (
digidollarwallet.cpp/.h,ddcoincontrol.cpp/.h, the DD-wallet RPCs registered fromwallet/rpc/wallet.cpp, thewallet/test/digidollar_*test files, and therh59lock-bypass test) is documented inREPO_MAP_DIGIDOLLAR.md.