1Two nodes, one chain
The original Divi node is written in C++ and descends from Bitcoin Core by way of PIVX. Its last release is v3.0.0 from July 2023, and it reports itself to other nodes as DIVI Core: 3.0.0.0. Divi Desktop runs a copy of it behind its window.
IronDivi is a new node written in Rust. Its latest release is v0.2.5 from October 2026, and it reports itself as /IronDivi:0.2.5/. It follows the same chain, accepts the same blocks, talks the same network protocol, and answers the same commands, so you can swap one for the other and your scripts keep working. The rest of this page is about the edges where that is not quite true.
Everything below was measured on 2026-10-21 with both programs running on one Ubuntu 22.04 machine, each synced to the testnet tip, with the same IronDivi and C++ node installs the previous tutorials walk through.
2What is the same
- The chain. Both nodes reported the same height, and the same hash for block 100,000 (
5d279fae…702c), to each other and to the explorer. A block is valid on one if and only if it is valid on the other. - The network. They connect to each other and to the rest of testnet. Our IronDivi node's eight peers were all C++ nodes.
- The wallet. Both use the same 24-word recovery phrase and the same key tree (
m/44'/301'/…), so a phrase from one restores the same addresses in the other. - The commands. 94 commands exist on both, with the same names and arguments: everything in A tour of irondivi-cli works unchanged with
divi-cli. - The command tool.
irondivi-clianddivi-clitake the same command words. Only the way you tell them which network and folder to use differs (step 4).
3Files, folders and ports
| C++ node | IronDivi | |
|---|---|---|
| Programs | divid, divi-cli | irondivid, irondivi-cli |
| Data folder, Linux | ~/.divi, testnet in testnet3 under it | ~/.irondivi/testnet |
| Data folder, Mac | ~/Library/Application Support/DIVI | ~/Library/Application Support/IronDivi/testnet |
| Settings file | divi.conf, key=value lines | irondivi.conf, TOML: key = "value" |
| Wallet | one file, wallet.dat | a folder, wallet/ |
| Blocks on disk | blocks/ and chainstate/ | chainstate/ holds both; txindex/ if enabled |
| Log | debug.log, trimmed by the node | debug.log, rotated into debug.log.1 and so on |
| Network port, mainnet / testnet | 51472 / 51474 | 51472 / 51474 |
| Command port, mainnet / testnet | 51473 / 51475 | 51471 / 51473 |
| Windows build | yes | no |
IronDivi's testnet command port, 51473, is the C++ node's mainnet command port. If you run both programs on one machine, or move from one to the other and keep an old rpcport line, you can end up talking to the wrong node, or get HTTP 401 Unauthorized because the name and password belong to the other one. Set rpcport yourself in both settings files when they share a machine.
The network ports match, so two nodes on one machine still need one of them moved with port, whichever programs they are.
4Starting and configuring
The C++ node takes single-dash options and the same words in divi.conf; IronDivi takes double-dash options and a TOML file. The common ones:
| You want | C++ node | IronDivi |
|---|---|---|
| testnet | -testnet or testnet=1 | --testnet (command line only; it picks the folder) |
| run in the background | -daemon or daemon=1 | --daemon |
| another folder | -datadir=/path | --datadir /path |
| a peer to try first | addnode=host:51474, one line each | addnode = "host:51474", or a list ["a:51474", "b:51474"] |
| keep every transaction findable | txindex=1 | txindex = true |
| stake or not | staking=0 | staking = false, or setstaking while running |
| print the log to the screen | -printtoconsole | --printtoconsole |
| rebuild the chain from the block files | -reindex | no such option in 0.2.5; delete chainstate/ and sync again |
| a settings file elsewhere | -conf=/path/divi.conf | --conf /path/irondivi.conf |
| stop the node | divi-cli stop; it exits in a few seconds | kill and its process number, or Ctrl+C. irondivi-cli stop answers Divi server stopping but 0.2.5 keeps running |
The C++ node reads testnet=1 from the settings file; IronDivi does not, because it needs to know the network before it knows which folder to read the file from. Give --testnet on the command line every time, to the node and to irondivi-cli. Three things only IronDivi has: --addressindex and --spentindex for looking up any address's history, --disablewallet to run with no wallet at all, and --export-chain to write the chain out as JSON. The full list for each is in Config files explained.
Start-up feels different. The C++ node spends about two and a half minutes on "Loading wallet" before it opens a single connection; IronDivi had its first two peers one second after starting.
5Commands only one of them has
We asked both nodes for every command, then called each name that appeared on one side only, so this list is what the programs actually do, not what their help text claims. Masternode commands exist on both and are left out of this tutorial.
C++ node only (IronDivi 0.2.5 answers Method not found):
invalidateblock,reconsiderblock,reverseblocktransactions,getinvalid: tools for marking a block bad and undoing it.ban(IronDivi hassetban, the Bitcoin Core name, instead) andsetmocktime, a testing aid.encryptwallet: IronDivi 0.2.5 has no wallet passphrase at all. Itswalletpassphraseandwalletlockexist but there is nothing to lock. Wallet encryption is already on IronDivi's main branch and should be in the next release.bip38paperwalletandsignTransactionWithAddressKey.
IronDivi only (divi-cli answers Method not found):
- Staking from the command line:
setstaking,reservebalance,getmintinginfo. - Address lookups:
getaddressinfo,validateaddresses,getaddresshistory,getaddressesbylabel,getimmaturebalance,getkeypoolsize,gettxindex,rescanblockchain. - Fees:
estimatefee,estimatesmartfee,estimatepriority(all answer -1 on testnet). - Peers and logs:
disconnectnode,setban,getpeerscores,getlogconfig,setlogconfig. signrawtransactionwithwalletandgetlitewalletinfo, which the IronDivi web wallet uses.
IronDivi's help lists 118 commands but answers more: signmessage and verifymessage work yet are missing from the list, and help signmessage says "Method not found". The C++ help lists 102 and hides a few that work, such as walletpassphrase. When in doubt, call the command.
6Where the answers differ
For commands both nodes have, the fields are nearly always the same. IronDivi keeps a running parity audit that calls every command on both nodes and compares the shape of the answers; at its last run on the main branch, 61 commands matched exactly, 11 could not be compared, and 23 differed, mostly by extra fields that IronDivi adds. In release 0.2.5 you will notice these:
- Formatting. The C++ node indents by four spaces and writes
"key" : value; IronDivi indents by two, writes"key": value, and sorts the keys alphabetically. Read answers by field name, never by line number. getblock. The C++ answer has two extra fields,moneysupply(the total coins in existence after that block) andacc_checkpoint. IronDivi 0.2.5 leaves them out; main already adds them.getpeerinfo. The C++ node addsbanscore,inflight,whitelistedandaddrlocal. IronDivi 0.2.5 reports its byte and time counters per peer as 0.getstakingstatus. The C++ node answers"staking status": falseand adds"stake split threshold"; IronDivi answers with a text,"Staking Disabled"or"Staking Active".- Addresses in decoded transactions. On testnet, the C++ node writes them as
y…; IronDivi 0.2.5 writes the mainnet formD…for the same key. Compare thehexof the output script if you need to match them. Fixed on main. - Errors. Leave out an argument and the C++ node answers code -1 with the command's whole help text; IronDivi answers -32602 and one line, such as
Missing height parameter. A hash that does not exist is -5Block not foundon the C++ node and -32602Invalid hashon IronDivi. Both say -32601 for an unknown command. - Version numbers.
getinfosays"version": "3.0.0.0"on the C++ node and the number2000000on IronDivi, which is not its version. Usesubversionfromgetnetworkinfoto tell them apart. - Protocol. IronDivi speaks protocol 70920, the C++ node 70915. They understand each other.
7Memory, disk and sync time
Both nodes, same machine, same afternoon, both at the testnet tip with a transaction index, after about five hours running:
IronDivi's folder was 946 MB of chain data plus a 131 MB log; the C++ node's was 415 MB of blocks, 37 MB of chain state and a log it keeps short. IronDivi's log is far chattier than the C++ node's at its default level, so give it room or lower it with setlogconfig.
Sync time from nothing to the tip, on the same machine the same afternoon: the C++ node took about 20 minutes and IronDivi 62 minutes. Both found a fast node on the local network as well as the internet, so this measures the programs more than the connection; on the open internet both will be slower, and an hour or two is normal for either. Testnet had 360,000 blocks at the time; mainnet has many more and takes proportionally longer.
8Which one to run
- Run IronDivi for a new node on Linux or a Mac, especially one you talk to from scripts or use for address lookups: it starts in seconds, has the more complete command set, and is where the work is happening. Keep an eye on the gaps above until the next release: no wallet passphrase, and the mainnet-form addresses in decoded transactions.
- Run the C++ node on Windows, where IronDivi has no build; on a machine short of memory; or when you need the exact behaviour Divi Desktop has, since Desktop ships the C++ node.
- Run both if you want to check one against the other, on different command ports. Each needs its own
portandrpcport, and they can peer with each other throughaddnodeon 127.0.0.1.
Whichever you choose, the settings that matter are in Config files explained, and Run a node as a service keeps either one running after a reboot.
If something goes wrong
| You see | What it means |
|---|---|
HTTP 401 Unauthorized from irondivi-cli | It reached a node, but the C++ one: IronDivi's testnet command port is the C++ mainnet port. Set rpcport in both settings files. |
Method not found for a command the other node has | See step 5. Where there is a same-named command on the other side (ban/setban) use it; otherwise the feature is not there yet. |
A script that parses getblock breaks on IronDivi | It probably counted lines or expected moneysupply. Parse by field name and treat missing fields as absent. |
Addresses start with D on a testnet IronDivi node | The known 0.2.5 decoding quirk. The key is right; the prefix is not. Compare the script hex. |
| Bind failed or address already in use | Both nodes on one machine want the same network port. Give one of them another port. |
testnet=1 in irondivi.conf has no effect | IronDivi takes the network from the command line only. Add --testnet. |
Still stuck? Ask the Divi chatbot, or see all tutorials.