Snowblossom Docs
Docs › Start here › Programs

Programs

One repository, one build, many programs. bazel build :all produces every binary below; each is also available as a stand-alone <Name>_deploy.jar. Almost all of them take exactly one argument: the path to a config file.

Core

ProgramMain classWhat it doesNeeds
SnowBlossomNodesnowblossom.node.SnowBlossomNodeThe full node. Maintains peer connections, downloads and validates every block, keeps the UTXO trie, serves wallets, miners, pools and explorers over gRPC. Holds no funds or keys (only identity keys for TLS). JVM heap fixed at 4 GB by the build.64-bit Java, ~100 GB disk (indexed mainnet), network
SnowBlossomClientsnowblossom.client.SnowBlossomClientCommand-line wallet: creates keys and seeds, shows balances, sends, imports/exports, runs the JSON-RPC server, monitors addresses, audit logs, load tests.A node (own or public)
IceLeaf / IceLeafTestnetsnowblossom.iceleaf.IceLeafSwing GUI wallet with multiple named wallets of any key mode, send/receive with QR codes, history, node selection, and an optional embedded full node.Desktop Java; 64-bit for the embedded node

Mining

ProgramMain classWhat it doesNeeds
PoolMinersnowblossom.miner.PoolMinerThe standard miner. Gets work from a MrPlow pool, hashes against a local snow field, submits shares. Supports memfield (field in RAM) and partial RAM caching.Snow field on disk, pool
Arktikasnowblossom.miner.ArktikaAdvanced miner that splits the field into 1 GiB chunks served from layers: files, RAM, or other Arktika instances over the network (gRPC word server, port 2311). Lets a cluster mine as if the whole field were in memory.Field chunks + decks, pool
SurfMinersnowblossom.miner.surf.SurfMinerReads the field sequentially in “waves” and applies each chunk to all pending work units, turning random reads into sequential ones for slow media.Field, pool, RAM for work units
SnowBlossomMinersnowblossom.miner.SnowBlossomMinerSolo miner: subscribes to block templates from a node and submits whole blocks. Only pays out when you find a block yourself; not recommended unless you control a large share of the hash rate.Node, snow field
MrPlowsnowblossom.miner.plow.MrPlowPPLNS mining pool. Takes templates from one or more nodes, hands work to miners (TCP 23380 / TLS 23382), validates shares, and pays miners directly in the coinbase of found blocks. Heap 4 GB.Node(s), persistent DB
MrPlowDataMigratesnowblossom.miner.plow.DataMigrateOne-off tool to migrate a pool database between db_types.
SnowFallsnowblossom.lib.SnowFallGenerates a snow field: SnowFall <file> <seed> <size_mb>. Usually invoked through tools/snowfall-*.sh or the miners' auto_snow=true.Fast storage, 256 MiB+ RAM, patience
SnowMerklesnowblossom.lib.SnowMerkleStreams a field once, prints its merkle root (to verify against the network table) and writes the .deck.a/.b/.c files miners need for proofs.

Explorer and tools

ProgramMain classWhat it does
ShackletonExplorersnowblossom.shackleton.ShackletonWeb block explorer and JSON API (the software behind snowblossom-explorer.org). Needs a node with tx_index and addr_index.
RichListsnowblossom.shackleton.RichListWalks the UTXO set and prints balances per address.
MinerReportsnowblossom.shackleton.MinerReportReport of recent miners / coinbase remarks (2.2).
VanityGensnowblossom.client.VanityGenVanityGen <text> <starts> <ends>: brute-forces standard keys until the mainnet address starts with / ends with / contains text (only Duck32 characters qpzry9x8gf2tvdw0s3jn54khce6mua7l). Prints a wallet JSON to import.
HoleGensnowblossom.client.HoleGenMakes a valid-looking address from an arbitrary string with no known private key - a burn address. Not a Bazel target; run via java -cp.
ShowAlgosnowblossom.lib.ShowAlgoLists every JCA provider/algorithm available (with BouncyCastle). Debugging aid.
Everythingsnowblossom.iceleaf.IceLeafA single jar containing all of the above (used by the generic snowblossom/snowblossom Docker image): java -cp Everything_deploy.jar snowblossom.node.SnowBlossomNode node.conf.

Invocation patterns

# release zip
java -jar SnowBlossomNode_deploy.jar configs/node.conf
java -jar SnowBlossomClient_deploy.jar configs/client.conf balance
# bazel build tree
bazel-bin/SnowBlossomNode node.conf
# deploy jar of any target
bazel build :PoolMiner_deploy.jar && java -jar bazel-bin/PoolMiner_deploy.jar pool-miner.conf
# JVM options (e.g. more heap for a miner with memfield)
java -Xmx40g -jar PoolMiner_deploy.jar pool-miner.conf

Programs that store data (node, pool) create their directories on first start. Every program supports overriding config keys with environment variables - see Configuration.

How the programs connect

SnowBlossomNodegRPC 2338 · TLS 2348 Other nodesPeerService stream WalletsSnowBlossomClient · IceLeaf ExplorerShackleton (HTTP 8080) MrPlow poolTCP 23380 · TLS 23382 SnowBlossomMinersolo, block templates PoolMiner · Arktika · SurfMinerGetWork / SubmitWork JSON-RPC appsclient rpcserver (HTTP)
The node is the hub: peers, wallets, explorers and pools all talk gRPC to it. Pool miners never talk to a node - only to their pool. Applications integrate through the wallet's JSON-RPC server or directly through the node's gRPC API.