Run a node
A node keeps a full copy of the chain, checks every block and transaction against the rules, relays what is valid, and serves wallets, miners and explorers over a JSON-RPC interface. Running one is the only way to verify the chain for yourself rather than trusting someone else's explorer, and every extra node makes the network harder to partition.
Requirements
- A release archive for your platform, or Go 1.26 or later to build from source. There is no cgo, so it builds anywhere Go does.
- Disk: the chain grows by at most about 1 MB per block, 50 GB a year with full blocks. Early on it is far smaller.
- Memory: a few hundred megabytes. Mining adds 8 MiB per thread.
- A clock within two hours of real time. Run NTP; a node far off the real time rejects valid blocks.
- For a public node: the P2P port reachable from the internet.
Install
From source:
git clone <repository>
cd argonmine
go build ./...
go test ./...
go build -o argonmined ./cmd/argonmined
From a release archive: unzip it and run install-windows.ps1 (Windows,
Start Menu and Desktop shortcuts, no administrator rights) or install.sh
(Linux and macOS). The archive holds argonmined, argonmine-app,
argonmine-wallet, argonmine-explorer, argonmine-web and genesis.
Start
argonmined # mainnet, default ports
argonmined -network testnet # testnet
argonmined -network regtest -listen none # private chain on this machine
The data directory is %LOCALAPPDATA%\Argonmine on Windows and
~/.argonmine elsewhere, with one subdirectory per network. On first start
the node writes a random RPC token to <datadir>/<network>/rpc.cookie,
finds peers through the DNS seeds and the built-in seed list, and syncs
headers first, then blocks.
Networks and ports
| mainnet | testnet | regtest | |
|---|---|---|---|
| Address prefix | arg1 |
targ1 |
rarg1 |
| P2P port | 9333 | 19333 | 29333 |
| RPC port | 9332 | 19332 | 29332 |
| Proof-of-work floor | 262,144 attempts per block | 512 | about 2, constant |
| Genesis hash | e85ad1e8…3c985f |
81fa0f3b…7cff32 |
b3682483…97959d |
Genesis time is 2026-10-25 00:00:00 UTC on every network. The difficulty schedule is anchored there, which is why the mainnet genesis is mined for the launch moment and not earlier.
Flags
| Flag | Default | Meaning |
|---|---|---|
-network |
mainnet |
mainnet, testnet or regtest |
-datadir |
per OS, see above | Data directory; a per-network subdirectory is used |
-listen |
:<network port> |
P2P listen address; none disables inbound connections |
-connect |
Comma-separated peers to stay connected to | |
-seeds |
Extra seed peers | |
-dnsseed |
Extra DNS seed hostnames | |
-rpc |
127.0.0.1:<rpc port> |
RPC listen address. Keep it on localhost. |
-rpctoken |
random | RPC token; written to rpc.cookie when not given |
-mine |
Start the built-in miner paying this address | |
-threads |
CPUs − 1 | Miner threads |
-tag |
Coinbase text, up to 100 bytes | |
-behind-proxy |
off | Inbound P2P connections arrive through a TCP proxy or load balancer (Railway, a cloud load balancer): never ban or cap inbound peers by address. See below |
-ban-local-addrs |
off | Treat loopback, private and carrier-grade NAT inbound addresses as distinct peers, so bans and the per-address cap apply (a private network where every peer has its own address) |
-maxinbound |
125 | Inbound P2P connections. When full, an idle inbound peer makes room for a newcomer |
-assetoutputfee |
546 | Relay policy: extra fee in units for every asset output beyond the first two in a transaction |
Connection limits
- Inbound slots. At most
-maxinboundinbound connections, accepted at most 10 per second (bursts of 20). When every slot is taken a newcomer is not refused: an inbound peer is evicted instead. A peer that never sent a new block or transaction goes first, then the one least recently useful, the longest connected among equals. The four peers with the best ping, the four that most recently delivered a new block, and the peer the node is syncing from are never evicted. - Per address. At most 3 inbound connections from one address, and a
peer that misbehaves has its address banned for 24 hours, but only when
the address identifies the peer. Behind a TCP proxy every inbound peer
arrives from the proxy's address, so one bad message would lock everyone
out: start such a node with
-behind-proxy, and misbehaviour then only disconnects the one connection. Loopback, private (10/8, 172.16/12, 192.168/16, fc00::/7), link-local and carrier-grade NAT (100.64/10) sources are treated the same way by default;-ban-local-addrsturns bans and the cap back on for them. - Sync peers. The node prefers to download from peers it dialed. A peer
that claims a greater height must answer the first
getheaderswithin 15 seconds and then deliver headers the node lacks; otherwise it is dropped and, when its address identifies it, not chosen again for an hour. Transaction announcements are skipped only while the tip is more than two hours old and the sync peer is really delivering new headers, so a false height claim cannot switch transaction relay off.
Transaction relay limits
- Fetching. At most 500 transactions per
getdataand 1,000 outstanding per peer. A transaction is asked of one peer at a time; if it does not arrive within 60 seconds, or arrives with a bad witness, the next peer that announced it is asked. - Serving. Answers to
getdatacome from a separate worker per peer, in order, at most 4 MB ahead of the connection, so a peer asking for a lot slows down only its own answers and two busy nodes cannot stall each other. Blocks are always served. A transaction is served to a peer only after it was announced to that peer, and once per announcement. - Pending transactions. On connect, and when a caught-up peer sends
mempool, the node announces up to 10,000 pending transactions, parents before children and the best fee rate first, ininvmessages of at most 1,000. Amempoolrequest is answered once per 2 minutes per address (per connection when the address is shared, and then at most ten at once and one every 10 seconds after that across all such connections). Transactions fetched from these announcements count against 64 MB per address per 10 minutes (256 MB shared by all connections from shared addresses). - Orphans. A transaction that arrives before its parent waits in an orphan pool (100 transactions, 5 MB, 5 minutes, random eviction) and enters the mempool when the parent arrives or a new block confirms its inputs.
The mempool's own rules (fees, dust, asset outputs, chains of unconfirmed transactions) are in SPEC §10.
The RPC
JSON-RPC 2.0 over HTTP. Every request carries the token, either as
Authorization: Bearer <token> or as HTTP basic auth with any user name and
the token as the password.
curl -s -H "Authorization: Bearer $(cat ~/.argonmine/mainnet/rpc.cookie)" \
-d '{"jsonrpc":"2.0","id":1,"method":"getblockchaininfo","params":[]}' \
http://127.0.0.1:9332/
| Method | Returns |
|---|---|
help |
The method list |
uptime |
Seconds since start |
getblockchaininfo |
Chain name, height, best hash, sync state, genesis |
getblockcount |
Height of the tip |
getbestblockhash |
Hash of the tip |
getdifficulty |
Current difficulty relative to the proof-of-work floor |
getblockhash <height> |
Block hash at a height on the main chain |
getblockheader <hash> |
Decoded header with confirmations and work |
getblock <hash> [verbosity] |
Block as hex (0), decoded (1), or decoded with transactions (2) |
getrawtransaction <txid> [verbose] |
Transaction as hex or decoded, with its block and confirmations |
decoderawtransaction <hex> |
Decode without broadcasting |
gettxout <txid> <index> |
An unspent output, or null |
getrawmempool |
Transaction ids waiting for a block |
getmempoolinfo |
Count and bytes in the mempool |
sendrawtransaction <hex> |
Validate, add to the mempool and relay; returns the txid |
getblocktemplate |
Everything a miner needs for the next block |
submitblock <hex> |
Validate and connect a mined block |
getmininginfo |
Height, difficulty, mempool size, network |
getpeerinfo |
Connected peers |
getnetworkinfo |
Version, network, listening addresses |
validateaddress <address> |
Whether an address is valid on this network |
generatetoaddress <n> <address> |
Mine n blocks now (regtest only) |
Decoded transactions include each output's type, address and amount, each input's previous output, and for version-2 transactions the asset id of every non-ARG output and any issuance.
The wallet
argonmine-wallet is a command-line wallet that talks to a node over the
RPC. Keys are derived from a 24-word phrase and stored encrypted under a
password in <datadir>/<network>/wallet.json.
argonmine-wallet create # prints the 24 words once
argonmine-wallet restore "<24 words>"
argonmine-wallet address # a new receive address
argonmine-wallet balance # spendable, immature, pending
argonmine-wallet send arg1… 1.25 # amount in ARG; optional fee rate and memo
argonmine-wallet history
argonmine-wallet utxos
argonmine-wallet mnemonic # prints the phrase; needs the password
Flags: -network, -datadir, -wallet <file>, -rpc <url>, -token,
-password (or the ARGONMINE_WALLET_PASSWORD variable; prompted
otherwise), -passphrase for an optional BIP-39 passphrase at create or
restore time.
A phrase created in the browser app restores here with the same address (the first receive address), so the same coins can be spent from either.
The explorer and work server
argonmine-explorer -network mainnet -listen 127.0.0.1:8380
The explorer follows its node over the RPC, keeps an address index beside the node's data directory, and serves blocks, transactions, addresses, mempool and charts. It is also the work server for the browser app (Mining).
| Flag | Default | Meaning |
|---|---|---|
-network |
mainnet |
Which network |
-datadir |
per OS | Node data directory (for rpc.cookie); the index lives beside it |
-rpc |
http://127.0.0.1:<rpc port> |
Node RPC URL |
-token |
from rpc.cookie |
RPC token |
-listen |
127.0.0.1:8380 |
HTTP listen address |
-referral-share |
5 |
Percent of a block reward a browser miner gives to the inviter named in their invite link; 0 disables referrals |
JSON API
| Endpoint | Returns |
|---|---|
GET /api/stats |
Network, indexed and node height, hashrate, supply, blocks submitted by browser miners |
GET /api/charts?n=288 |
Hashrate, difficulty, block interval and supply over the last n blocks |
GET /api/address/{address} |
Balance, spendable, maturing, totals, referral totals and the recent history with coinbase and referral flags |
GET /api/utxos/{address} |
The address's unspent coins (at most 1,000) with height, asset and coinbase flag; spentBy for a coin a waiting transaction spends; pending, its unconfirmed outputs (own when every input was its own coin, its change); mempool, the waiting transactions that touch it. What the browser wallet spends from |
POST /api/tx |
Body {"hex": signed transaction}: checked and handed to the node; returns {"txid"}. A transaction spending a coin that a waiting one already spends is refused (409), so a payment never quietly replaces another. Any origin may call it; one a second per client, bursts of 10 |
GET /api/work?address=…[&ref=…] |
A block template for a browser miner |
POST /api/work/submit |
Submit a solved block |
GET /qr.svg?d=… |
A QR code as SVG |
Every API response allows cross-origin requests, so the app can run on a different host.
The app and documentation server
argonmine-web serves the browser app and this documentation. With -app
and -site it serves the app on one hostname and the docs on another from
the same process.
argonmine-web -listen 127.0.0.1:8370 -app https://app.example.com -site https://example.com \
-explorer https://explorer.example.com -bridge https://bridge.example.com -hrp arg
| Flag | Default | Meaning |
|---|---|---|
-listen |
127.0.0.1:8370 |
HTTP listen address |
-app |
Public URL of the app; requests for that host get the app | |
-site |
Public URL of the documentation site | |
-explorer |
http://127.0.0.1:8380 |
Explorer URL the app uses for work, balances and history |
-bridge |
Bridge URL (empty hides the link) | |
-hrp |
arg |
Address prefix of the network the app is for |
-repo |
. |
Repository root, where the Markdown sources live |
-export <dir> |
Write the site as static files and exit |
The static export can be hosted anywhere that serves files, with the explorer as the only moving part behind it.
Operations
- Seed nodes. New nodes find the network through DNS seeds and a built-in list. The Seed nodes guide covers Docker, systemd and hosted platforms.
- Monitoring.
getpeerinfoandgetblockchaininfoare enough: alert when peers drop to zero or the height stalls for two hours. - Backups. The 24 words are the backup. The wallet file is convenient, not essential.
- Upgrades. Stop the node, replace the binary, start it. The database format is forward-compatible within a release line; the release notes say when it is not.
- Security. Keep the RPC on localhost or behind an authenticated proxy. The token grants full control of the node, including the ability to broadcast transactions, but never gives access to wallet keys, which live only in the wallet file and the desktop app.