Repository navigation
Mandatory upgrade. v1.1.1 is a hard fork: Proof-of-Stake from block 2,776. Every node, wallet and masternode must upgrade.
AMMOcoin v1.1.1 - Proof-of-Stake Hard Fork
Release type: Mandatory hard fork. Every node, wallet, staker, masternode and seed must upgrade.
Fork height: block 2,776
Source branch: v1.1.1-pos-fork (changes since the v1.1.0 tag)
AMMOcoin is network software. These notes describe what the code does. They are not an offer, not investment advice and not a promise of any return, price or value. They state no block subsidy or payment amounts: those are set by the code (
GetBlockValue()insource/src/validation.cpp), and what any node receives depends on network participation and uptime.
Everyone Must Upgrade
The v1.1 chain stopped at block 2,775 after its Proof-of-Work phase. v1.1.1 switches the network to Proof-of-Stake from block 2,776. There is no mining after the fork.
- New network magic bytes (
c7 9a e3 b5). v1.1.1 nodes do not connect to v1.0 or v1.1.0 nodes, and v1.1.0 nodes cannot follow the PoS chain. - A v1.1.0 node left running sits at block 2,775 with no peers. Stop it and install v1.1.1.
- The genesis block is unchanged:
000000593410213331b5adcc6a79054a984bfc9999825e579171f81f2eccddd2
What Changes
| v1.1.0 | v1.1.1 | |
|---|---|---|
| Consensus | Proof-of-Work | Proof-of-Stake from block 2,776 (no mining) |
| Network magic | v1.0-compatible | c7 9a e3 b5 (separate network) |
| Default data folder | .ammocoin / AMMOcoin |
.ammocoin11 / AMMOcoin11 (see below) |
| Fixed seed nodes | 78.141.194.140, 147.182.245.102 (dead) | 78.141.194.140, 104.238.165.56, 207.246.95.210, 45.76.116.97, 144.202.79.114 (DNS: seed1-3.ammocoin.org) |
| Linux binaries | glibc 2.31+ | glibc 2.34+ (Ubuntu 22.04 or newer) |
| macOS | ARM64 only, ad-hoc signed | ARM64 and x86_64, Developer ID signed and notarized, macOS 13 or newer |
| Linux GUI wallet | not shipped | Qt wallet tarball and AppImage (x86_64 and ARM64) |
| Node installer | manual | install-node.sh one-command installer |
Consensus and node
- PoS activation at block 2,776 (
ade7fc983). On mainnet every network upgrade through v5.6 (PoS, PoS v2, Zerocoin/ZC v2/ZC public, BIP65, v3.4, v4.0, v5.0-v5.6, which bring cold staking and Sapling) activates at the fork height; v6.0 stays off. Testnet activates at block 201, regtest at 251. - Block subsidy schedule unchanged by the fork (
0f7d10faf). The subsidy code no longer follows the upgrade heights; it uses its own heights (nRewardZCV2Height1,153,160 andnRewardV55Height3,715,200 on mainnet), so activating every upgrade at block 2,776 does not change the schedule. Without this fix, post-fork blocks would have used the stage the schedule sets for block 3,715,200. Covered bysource/src/test/budget_tests.cpp. - Restart crash after the fork fixed (
ca41fe1b9). The node asserted on every restart once the Zerocoin upgrade height was active (invalid_out::LoadOutpointstreated AMMOcoin's empty compiled-in list as a load failure). - Testnet and regtest genesis fixed (
afd323157) for AMMOcoin's own genesis block. - Pre-production hardening (
116e04583, no consensus change): OP_RETURN size check fixed insendopreturn/createrawtransaction(oversized payloads no longer build scripts that fail to relay),-datacarrier=0honoured, per-IP RPC authentication lockout (-rpcauthmaxfails), HTTP body cap 8 MiB by default (-rpcmaxbodysize), RPC cookie file created with mode 0600. - Database fixes carried from the v1.1.0 rebuilds (
33c9af0b6,e4628fcce): LevelDB block database corruption on shutdown, and a block index serialization version mismatch. - scrypt uses a private
be32encso macOS builds no longer depend on the SDK (581b91306).
Network Parameters (mainnet)
| Parameter | Value |
|---|---|
| P2P port | 37020 |
| RPC port | 51473 |
| Block time (target spacing) | 3 minutes |
| Stake maturity | 600 confirmations (about 30 hours) before a UTXO can stake; minimum stake age 1 hour |
| Masternode collateral | 10,000 AMMO (15 confirmations) |
| Block subsidy | Unchanged by the fork: the original declining schedule in GetBlockValue() (source/src/validation.cpp) |
| Masternode payment | A fixed share of each block's subsidy (nMNBlockReward), paid to the masternode selected by the payment queue; the staker receives the rest. The share changes at block 3,715,200 (nNewMNBlockReward) |
| Treasury (budget) | Superblocks every 43,200 blocks (about 90 days), paid only to proposals approved by masternode vote, within the budget limit set in the code |
| DNS seeds | seed1.ammocoin.org, seed2.ammocoin.org |
| Fixed seeds | 78.141.194.140 (seed1), 104.238.165.56 (seed2), 207.246.95.210 / 45.76.116.97 / 144.202.79.114 (seed3.ammocoin.org) |
Some older documents list port 37019 or RPC 51474. Those are wrong for mainnet. Use 37020 (P2P) and 51473 (RPC).
How often a given wallet stakes or a given masternode is paid depends on the total stake weight and the number of enabled masternodes on the network, and on the node staying online. The project does not estimate or promise any rate.
Masternode Payment Queue
- Each block pays the masternode selected by the payment queue its share of the block subsidy (
nMNBlockReward); the staker receives the rest. - Collateral is 10,000 AMMO (
nMNCollateralAmt) kept in your own controller wallet with 15 confirmations. It is never sent to the project or locked by anyone else. - The masternode must have a public, routable IPv4 on port 37020. 127.0.0.1 and private ranges are rejected with
Invalid IP address. - With N enabled masternodes, each one is paid about once every N blocks while it stays enabled.
- From block 3,715,200 (
nRewardV55Height) the masternode share changes tonNewMNBlockReward, as in the original schedule.
Setup: Masternode guide. Controller masternode.conf line: mn1 YOUR_VPS_IP:37020 MASTERNODE_PRIVKEY COLLATERAL_TXID COLLATERAL_INDEX (key from createmasternodekey, outputs from getmasternodeoutputs).
Cold Staking
Cold staking is active from the fork. An always-on node stakes your coins while the keys stay in your own (owner) wallet; the staking node can stake but cannot spend.
On the staking server:
ammocoin-cli getnewstakingaddress # returns an S... address
ammocoin-cli delegatoradd "A_OWNER_ADDRESS" # required: the server only stakes owners it has addedIn the owner wallet:
ammocoin-cli delegatestake "S_STAKING_ADDRESS" 5000
# with an explicit owner address: delegatestake "S_STAKING_ADDRESS" 5000 "A_OWNER_ADDRESS"
# owner address not in this wallet (offline): add ext_owner=true
ammocoin-cli delegatestake "S_STAKING_ADDRESS" 5000 "A_OFFLINE_OWNER_ADDRESS" trueCheck:
ammocoin-cli getcoldstakingbalance # staking server: coins delegated to it
ammocoin-cli getdelegatedbalance # owner wallet: coins it has delegated
ammocoin-cli listcoldutxos # staking server
ammocoin-cli getstakingstatus # staking serverRegular (hot) staking: hold AMMO in an online wallet, unlock for staking only with ammocoin-cli walletpassphrase "YOUR_PASSPHRASE" 0 true, and check getstakingstatus (staking_status: true).
Sapling Parameters
v1.1.1 needs the two Sapling zk-SNARK parameter files (about 50 MB). Without them the node stops at startup with Cannot find the Sapling parameters.
| File | SHA256 |
|---|---|
sapling-spend.params |
8e48ffd23abb3a5fd9c5589204f32d9c31285a04b78096ba40a79b75677efc13 |
sapling-output.params |
2f0ebbcbb9bb0bcffe95a397e7eba89c29eb4dde6191c339db88570e3f3fb0e4 |
Where they come from in each package:
- Windows Setup.exe, macOS AMMOcoin-Qt.app, Linux AppImage and .deb: bundled; nothing to do. The .deb installs them to
/usr/share/ammocoin. - Linux tarballs: run
bin/ammocoin-fetch-params(orinstall-desktop.shfor the Qt tarball). - Windows zip: run
install-params.batonce. - macOS command-line
ammocoind: run./fetch-params.shonce.
All fetch helpers download from https://download.z.cash/downloads/ and check the SHA256 values above. Parameter folders: Linux ~/.ammocoin-params, macOS ~/Library/Application Support/AMMOcoinParams, Windows %APPDATA%\AMMOcoinParams.
Sapling shielding is optional. AMMO transactions are transparent by default; the shield and unshield sides of a shielded transfer are visible, and peers see your IP address.
Downloads (platform builds)
All packages are built by GitHub Actions from the tagged source and listed in AMMOcoin-v1.1.1-ALL-PLATFORMS-CHECKSUMS.txt on the release page.
| Platform | Files | Notes |
|---|---|---|
| Linux x86_64 (daemon) | AMMOcoin-v1.1.1-Linux-x86_64.tar.gz, .zip, AMMOcoin-v1.1.1-Linux-amd64.deb |
ammocoind, ammocoin-cli, ammocoin-tx. The .deb installs an ammocoind systemd service running as user ammocoin |
| Linux ARM64 (daemon) | AMMOcoin-v1.1.1-Linux-ARM64.tar.gz, .zip, AMMOcoin-v1.1.1-Linux-arm64.deb |
Raspberry Pi 4/5 with a 64-bit OS, ARM64 servers |
| Linux x86_64 (Qt wallet) | AMMOcoin-v1.1.1-Linux-x86_64-Qt.tar.gz, AMMOcoin-v1.1.1-Linux-x86_64-Qt.AppImage |
AppImage needs no setup and includes the Sapling parameters |
| Linux ARM64 (Qt wallet) | AMMOcoin-v1.1.1-Linux-ARM64-Qt.tar.gz, AMMOcoin-v1.1.1-Linux-ARM64-Qt.AppImage |
as above |
| Windows x86_64 | AMMOcoin-v1.1.1-Windows-x86_64-Setup.exe, .zip, .tar.gz |
Setup.exe installs the wallet, Start-menu shortcuts, an uninstaller and the Sapling parameters |
| macOS Apple Silicon | AMMOcoin-v1.1.1-macOS-ARM64.dmg, .tar.gz, .zip, .SHA256 |
Developer ID signed (hardened runtime) and notarized by Apple; macOS 13 or newer |
| macOS Intel | AMMOcoin-v1.1.1-macOS-x86_64.dmg, .tar.gz, .zip, .SHA256 |
Signed and notarized; macOS 13 or newer. Also runs on Apple Silicon under Rosetta 2, more slowly |
Per-platform …-CHECKSUM.txt files (Linux, Windows) and ….SHA256 files (macOS) are attached next to the packages.
Linux requirements: glibc 2.34 or newer (Ubuntu 22.04+, Debian 12+, Fedora 35+, Raspberry Pi OS bookworm 64-bit). The Qt wallet also needs an X11 or Wayland (XWayland) desktop with libxcb, fontconfig and freetype. Check glibc with getconf GNU_LIBC_VERSION.
Build and packaging changes in this release: from-source macOS dependencies targeting macOS 13.0 with an otool check that no binary needs a newer macOS (7cd50d1f9), Developer ID signing and notarization (569e23d08, 02cf87334), the qsvg image plugin bundled in the app (66c251d0a), Linux Qt wallet tarball and AppImage for x86_64 and ARM64 (a77794aa9, 6f2d64acf), a working and tested .deb plus Linux and Windows archives (406692f85, 51a26f16d), NSIS Start-menu fix (13c867b74), libevent built for glibc 2.36+ (1033c92a3), clean v1.1.1 version strings with no -dirty suffix (7ed89aacb, 336002a05, ee338296a), regtest smoke tests of the daemon and GUI on Linux and macOS (b38e15be9), and the combined checksums file with a cross-check of the per-platform checksum files (2b8a2461c, f9343b63f).
Verify before you install
- Download the package,
AMMOcoin-v1.1.1-ALL-PLATFORMS-CHECKSUMS.txtand, when present,AMMOcoin-v1.1.1-ALL-PLATFORMS-CHECKSUMS.txt.sigfrom the same release. - If the
.sigis published, verify it withscripts/release/verify-release.shfrom this repository at thev1.1.1tag (SIGNING.md). - Check the file:
sha256sum -c AMMOcoin-v1.1.1-ALL-PLATFORMS-CHECKSUMS.txt --ignore-missing(macOS:shasum -a 256 -c AMMOcoin-v1.1.1-macOS-ARM64.SHA256).
If either check fails, do not run the file.
One-Command Node Installer (install-node.sh)
scripts/deployment/install-node.sh sets up a v1.1.1 node on Ubuntu 22.04+ / Debian 12+ (17c3efbcf, fad0f623b, eff92db63):
sudo ./install-node.sh --tarball <file-or-url> --sha256 <hex from the release page> \
[--role node|coldstaker|masternode] [--mnkey <masternode key>] [--ip <public IPv4>] [--dry-run]- Refuses to run without a SHA256 and stops on a checksum mismatch.
- Checks glibc 2.34+ (via
getconf) before installing. - Installs to
/opt/ammocoin-<version>and creates a dedicatedammocoinuser (home/var/lib/ammocoin, data/var/lib/ammocoin/.ammocoin11). - Fetches and verifies the Sapling parameters.
- Writes
ammocoin.conffor the chosen role (RPC bound to 127.0.0.1 with a random password; an existing config is kept). - Installs and starts the
ammocoindsystemd service and opens TCP 37020 inufwwhen ufw is active. - Roles:
node(default; stakes coins sent to its own wallet),coldstaker(stakes coins delegated from an offline wallet; prints thegetnewstakingaddress/delegatestake/delegatoraddsteps),masternode(needs--mnkeyfromcreatemasternodekeyand a public IPv4; the collateral stays in your controller wallet). --dry-runprints every command without changing the system.
New Data Folder
v1.1.1 uses a new default data directory so it never mixes with v1.0 or v1.1.0 data:
| OS | v1.1.1 data folder | Old folder (v1.0 / v1.1.0) |
|---|---|---|
| Linux | ~/.ammocoin11 |
~/.ammocoin |
| macOS | ~/Library/Application Support/AMMOcoin11 |
~/Library/Application Support/AMMOcoin |
| Windows | %APPDATA%\AMMOcoin11 |
%APPDATA%\AMMOcoin |
The pre-release lab network (a3 4d b1 e7, ~/.ammocoincore / AMMOcoinCore) is a separate test network. v1.1.1 does not connect to it or read its folders. The Qt wallet also keeps its settings under a new name (AMMOcoin11-Qt), so it never reopens an older wallet's folder. Details: docs/MAINNET_SEPARATION.md.
Upgrading and Migrating
From v1.1.0
- Stop the old node:
ammocoin-cli stop - Back up your v1.1.0
wallet.dat(and your v1.0wallet.datif you still have one; keep both). - Install v1.1.1 from the official release and verify the checksum.
- Create the new data folder and copy over only
ammocoin.conf,masternode.conf(masternodes) andwallet.dat. - Check
ammocoin.confusesport=37020/rpcport=51473; remove anyaddnode=147.182.245.102and any port 37019. - Start v1.1.1 and let it sync from the seeds. Do not copy
blocks/orchainstate/from v1.1.0. ammocoin-cli getblockcountshould go past 2,775.- Stakers: unlock for staking and check
getstakingstatus. Masternodes: restart from the controller (startmasternode alias false <alias>).
To keep using the old location, start with -datadir=<old folder>; a fresh folder is recommended.
systemd units you wrote yourself
The service must set HOME, otherwise the node exits with Cannot find the Sapling parameters:
[Service]
Type=simple
User=root
Environment=HOME=/root
ExecStart=/opt/ammocoin-v1.1.1/bin/ammocoind -datadir=/root/.ammocoin11 -daemon=0
ExecStop=/opt/ammocoin-v1.1.1/bin/ammocoin-cli -datadir=/root/.ammocoin11 stop
Restart=on-failure
TimeoutStopSec=120If the service runs as another user, set User= and Environment=HOME= to that user. The .deb and install-node.sh already do this.
From v1.0: balance airdrop
v1.0 balances from the snapshot at v1.0 block 434,881 are airdropped to the same addresses on v1.1.
- Keep your v1.0
wallet.dat. The same keys control the airdropped balance. Copy a backup into the v1.1.1 data folder before first start, or import the keys withimportprivkey. - Send nothing anywhere. There is no disposal address, no registration and no fee. Anyone who asks you to send coins, keys or wallet files is attempting a scam.
- If an address was missed, a signed-message claim (
signmessagewith the v1.0 address) is the fallback. - No deadline.
Details: v1.0 Balance Airdrop. The earlier disposal-address / email process is withdrawn.
Block 1 reserve
The 250,000,000 AMMO block-1 reserve is paid to AJSpvakMXqZDrqimNP7X8R26NzyNGtmA8u. The airdrop is paid from it first. AGkC8ydBWwyYE612V1Ag1mL4itp9Tv4KME is only the unspendable genesis output.
Upgrade checklist
- Back up every
wallet.dat(v1.0 and v1.1.0) to offline storage - Linux: confirm glibc 2.34+ (
getconf GNU_LIBC_VERSION); upgrade from Ubuntu 18.04/20.04 first - Stop the old node
- Install v1.1.1 from the official GitHub release and verify the checksum
- Move
ammocoin.conf,masternode.conf,wallet.datinto the new data folder - Ports 37020 / 51473; remove 147.182.245.102 and 37019 from configs
- Your own systemd units: add
Environment=HOME=... - Start, sync,
getblockcountpast 2,775 - Re-unlock for staking / restart masternodes from the controller
Known Issues
- Ubuntu 18.04 and 20.04 cannot run the release binaries (glibc 2.34+ needed). Upgrade the OS or use a fresh Ubuntu 22.04/24.04 VPS.
install-node.shstops with a clear error on these systems. - Stake maturity is 600 confirmations (about 30 hours). Newly received or newly delegated coins do not stake before that.
- Cold staking needs
delegatoraddon the staking server. Without it the server does not stake the delegated coins. - Port 37020 conflict: if the .deb's
ammocoindservice runs on a desktop, the Qt wallet on the same machine cannot bind 37020. Stop it first:sudo systemctl disable --now ammocoind. - Missing Sapling parameters stop startup with
Cannot find the Sapling parameters. Use the fetch helper for your package (see above); custom systemd units must setHOME. - macOS: the ARM64 package does not run on Intel Macs; the x86_64 package runs on Apple Silicon only under Rosetta 2. macOS 12 and older are not supported. A macOS build made without the signing secrets is ad-hoc signed and blocked by Gatekeeper; such builds are never published as the release.
- Masternodes behind NAT or on private IPs are rejected (
Invalid IP address). A public IPv4 is required. - Old documents and the v1.1.0 white papers list wrong ports (37019 / 51474), the dead seed 147.182.245.102 and withdrawn claims. They are marked superseded; the 2nd Edition white paper and these notes follow the code.
- There is no
masternode genkeycommand (usecreatemasternodekey) and nocreatewalletcommand.