GitHash
githash/gitPublic
OverviewDashboardMinersDocs
DOCS.md

GitHash docs

GitHash coins are CPU-mined ERC-20s on Ethereum. Every coin has the same shape: 3,000,000 supply, 2,000,000 seeded into its own Uniswap v4 ETH pool, 1,000,000 mined from the terminal over halving eras. One miner process mines one coin, chosen with --coin.

Quick start

  • Install Node.js 18 or newer (Windows, macOS, Linux, any VPS).
  • Open the Dashboard, connect your wallet, sign the login message, click New key. One key works for every coin.
  • Pick a coin on the Coins page and run the command shown on its page:
$npx githash-miner --key git_YOUR_API_KEY --coin TICKER

--coin takes the ticker or the contract address. The miner prints a live status bar: hashrate, accepted shares, current block, your estimated reward for it, coins earned and claimable. Ctrl-C stops it; start it again any time, nothing is lost. To mine two coins, run two processes.

Options

FlagMeaning
--coin XTicker or address of the coin to mine. Required (or GITHASH_COIN).
--threads NCPU threads to use. Default: cores − 1, so the machine stays usable.
--quietOne line per event instead of the live bar (for logs, systemd, Docker).
--server URLPool URL. Default https://pool.githash.fun.
GITHASH_KEY / GITHASH_COIN / GITHASH_THREADSSame as the flags, as environment variables.

Run it forever on a VPS

# with pm2
npm i -g pm2 githash-miner
pm2 start githash-miner -- --key git_YOUR_API_KEY --coin TICKER --threads 4 --quiet
pm2 save

# or a plain loop
while true; do npx githash-miner --key git_YOUR_API_KEY --coin TICKER --quiet; sleep 5; done

The coins

Every GitHash coin is deployed by the same factory contract, so all of them have the same numbers:

TemplateValue
Total supply3,000,000
Uniswap v4 pool (single-sided, coin only)2,000,000
Mineable1,000,000
Block reward2.5, halving every 200,000 blocks
Block time10 minutes

The GitHash team controls each coin's pool liquidity and can withdraw it. That is stated on every coin page, and a coin whose liquidity was pulled is marked as such.

How mining works

The pool hands each miner a job: a 32-byte seed unique to that API key, coin and block, plus a difficulty. The miner looks for an 8-byte nonce such that keccak256(seed ‖ nonce) < 2^256 / difficulty. Finding one is a share. The pool verifies it with a single hash and adds the difficulty to your score for the current block of that coin.

  • Blocks close every 10 minutes, per coin, counted from the coin's creation. The block reward is split across everyone who submitted shares for that coin, in proportion to score. Score is expected hashes done, so a miner with 2× the hashrate earns 2× the reward, whatever its difficulty setting.
  • Difficulty is set per miner (vardiff) so you submit roughly one share every 12 seconds. Fast machines get high difficulty, phones get low difficulty, both are paid fairly.
  • Unmined blocks (nobody submitted a share) pay nobody. Those coins are never minted.
  • Shares from a job of the previous block are accepted for 20 seconds after the block rolls.

Emission (every coin)

BlocksRewardCoins in the era
0 – 199,9992.5500,000
200,000 – 399,9991.25250,000
400,000 – 599,9990.625125,000
halves every 200,000 blocks→ 1,000,000 total

200,000 blocks at 10 minutes is about 3.8 years per era, like Bitcoin. Every coin starts at block 0 with the full reward.

Claiming on-chain

Rewards are credited off-chain the moment a block closes and shown as claimable per coin on the Dashboard. To move them on-chain the site asks the pool for a voucher: a signature over (coin, chainId, your wallet, cumulative earned). You send claim(cumulative, sig) to that coin's contract from your wallet; it mints cumulative − alreadyClaimed to you. Vouchers are cumulative, so a stale one can never be replayed and a lost one is simply re-fetched.

  • Each coin mints only through claim(), only with a valid signature from the factory's signer, and never beyond 1,000,000 in total.
  • You pay the gas of one ERC-20 mint. Claim when it is worth it; nothing expires.

Pool API

Everything the miner and this site use is public. Base URL https://pool.githash.fun. coin is an address or a ticker.

EndpointAuthWhat
GET /api/statsevery coin with height, reward, hashrate, miners, supply, price; global totals
GET /api/coins · /api/coin/:addresscoin list · one coin with its blocks and leaderboard
GET /api/leaderboard · /api/wallet?address=public tables
GET /api/job?coin=x-api-keyseed, target, difficulty, block, epoch end
POST /api/share { job, nonce }x-api-keysubmit a share (nonce = 16 hex chars)
GET /api/miner?coin=x-api-keyearned, claimed, estimate, hashrate for that coin
POST /api/register { address, ts, sig, name }wallet signaturecreate an API key (shown once)
GET /api/me · /api/voucher?coin=x-wallet x-ts x-sigdashboard data · claim voucher for one coin

Write your own miner if you like: the share format is the whole protocol.

FAQ

Does it slow down my computer? By default it leaves one core free. Use --threads 1 for a laptop on battery.

GPU? Not yet. keccak256 is GPU-friendly, so expect GPU miners eventually; the pool pays by score, so they simply earn in proportion.

Can the pool cheat? The pool decides payouts off-chain, like every mining pool ever. What it cannot do: mint beyond 1M per coin or take coins you already claimed. What the team can do: withdraw a coin's pool liquidity. Payout math and every block are public on each coin page.

Is any of this worth anything? Whatever each pool trades at. Mining spends electricity for coins with no promise of value.