Skip to content
Sparky2273Public

About

Fair Bitcoin split calculator for groups. Shares the network fee, handles the leftover in the exchange, gives every person their exact Toman / Rial / USD amount (the sum is always exact) and explains every step. Paste your text, verify any answer, export PDF / HTML / CSV. PyQt6 GUI, English + فارسی. Windows EXE available.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

🪙 SatSplit

A free, open-source calculator that splits money fairly between people who pooled their Bitcoin — it shares the network fee, ignores the tiny leftover in the exchange, gives every person their exact amount of Toman (or any currency) without losing a single unit, and shows how every number was obtained, step by step.

Version Python Platform License PyQt6 Languages No telemetry

⚡ Quick Start (EXE) · Features · Run from Source · How to Use · The Math · Troubleshooting · Support


📖 Table of Contents


🔍 What Is This?

SatSplit is a desktop application for groups that share Bitcoin. A typical story: three friends each hold some BTC, they send everything to one exchange account, pay one network fee, sell the Bitcoin for Toman — and now they need to know exactly how much money belongs to each person.

Doing this by hand (or asking a chatbot every time) is error-prone:

  • the network fee must be shared fairly,
  • a few satoshi usually stay behind in the exchange and must not distort the result,
  • the shares are not equal because the holdings are not equal,
  • and when every amount is rounded separately, the parts often add up to one Toman more or less than the money you really received.

SatSplit does all of it with exact arithmetic, shows every step the way a careful accountant would, and checks itself with seven automatic tests. You only change the numbers — or paste your usual text and let the app find them.


✨ Features

  • 🧮 Live calculator — change a number and the whole split updates instantly; any number of people (add / remove with one click)
  • 🔎 Every step explained — fee share, net BTC, leftover, exchange rate, exact share, rounding; formulas and tables, in English or Persian
  • ➗ Exact math — fractions, never floating point; the final amounts always add up to the money received to the last unit (largest-remainder rounding)
  • 💸 Two fee methods — shared equally, or in proportion to the holdings; the report even compares both for you
  • 🪙 Leftover ("dust") handling — BTC that stayed in the exchange is ignored and taken proportionally (or equally)
  • 📋 Paste your own text — paste the paragraph you usually give to an AI; people, fee, money and converted amount are detected automatically (Persian and English, Persian digits too)
  • ✅ Seven built-in checks — including an independent 60-digit recalculation — plus warnings for unusual input
  • 🔍 Verify an answer — paste numbers someone else (or an AI) gave you and see who is off and by how much
  • 🧰 Tools — BTC ⇄ satoshi ⇄ money converter, equal split without losing a unit
  • 🗣 Persian words — amounts written out in Persian words (for contracts and receipts)
  • 💱 Any currency — Toman, Rial, USD, USDT, EUR or your own name; rounding unit 1 / 10 / 100 / 1,000 / 10,000; enter the total money or the exchange rate
  • 📨 Copy & export — chat-ready message, tab-separated table for Excel, full report as HTML, PDF, Markdown, text, CSV or JSON
  • 🗂 History — save calculations, load them back, export / import them
  • 📝 Operation Log — a timeline of everything the app did, optionally saved to a file
  • 🌍 English + Persian (RTL), light / dark theme, accent colors, optional Persian digits (۱۲۳)
  • 🔒 Private — no telemetry, no account, works fully offline
  • 📦 One file — the whole program is a single Python file; --build makes a standalone executable

⚡ Quick Start (Windows EXE)

No Python needed.

  1. Go to the Releases page of this repository.
  2. Download SatSplit.exe.
  3. Double-click it.
  4. Type the holdings, the fee and the money you received — the result appears at once.

The app is fully portable — copy it to any folder or USB drive and run it from there.

Windows SmartScreen / antivirus warning? The program is new and not code-signed. Click More info → Run anyway. All of the source code is in this repository so you can read it or build the EXE yourself.


🐍 Run from Source

Requirements

  • Python 3.10 or newer — https://www.python.org/downloads/
    • Windows: tick ✅ "Add Python to PATH" during installation
  • Dependency: PyQt6 (everything else is part of Python)

Step 1 — Get the Script

Download SatSplit_V1.py from this repository, or clone:

git clone https://github.com/Sparky2273/SatSplit.git
cd SatSplit

Step 2 — Install Dependencies

pip install -r requirements.txt

Step 3 — Run

python SatSplit_V1.py

Command-line flags:

Flag What it does
--build Build a standalone executable with PyInstaller
--selftest Run the built-in calculation tests (including 2,000 random cases) and exit
--version Print the version and exit

📖 How to Use

Entering the Data

  1. On the 🧮 Calculator page, type the BTC of every person in the People table (double-click a cell or just start typing). Use ➕ Add person / ➖ Remove to change the number of people.
  2. In Transaction fill in:
    • Network fee (BTC) — the fee that was paid once for the whole transfer
    • Converted amount (BTC) — how much BTC the exchange really sold (or tick Everything was converted)
    • Money received — the total money you got, or switch Money input to rate and type the price of 1 BTC
    • Currency, Rounding unit, Fee is shared, Leftover is taken — see below
  3. The Result area updates while you type (turn this off in Settings if you prefer the ⚡ Calculate button).

Numbers can be typed in any style: 117441451, 117,441,451, ۱۱۷٬۴۴۱٬۴۵۱, 0.00360772, 0,0036.

Paste Your Own Text

Press 📋 Paste text… and paste something like:

نفر اول: 0.00360772
نفر دوم: 0.0012926
نفر سوم: 0.00110701
در زمان انتقال به میزان 0.00004000 کارمزد شبکه بیت کوین می شود.
معادل تومانی آن می شود: 117,441,451
مقداری که تبدیل شده 0.005967 است

SatSplit finds the people, the fee, the money received and the converted amount, and fills in the form. Lines that only contain totals are ignored. Check the filled-in values — the app tells you what it found.

Fee Methods and Leftover

Option Meaning
Fee shared equally (default) Everyone pays the same part of the network fee. Simple — but a small holder loses a bigger percentage. The report shows exactly how much.
Fee in proportion to holdings A bigger holder pays a bigger part.
Leftover in proportion to net holdings (default) The few satoshi that stayed in the exchange are ignored and taken from everyone in proportion to what they have.
Leftover equally The leftover is taken equally from everyone.

Reading the Result

  • The four tiles show the net BTC after the fee, the money received, the effective rate per BTC and the leftover.
  • The table shows, for every person: holding, fee share, net BTC, percentage share and the final amount (orange).
  • Under the table, ✔ / ✘ lines show the self-checks and ⚠ lines show warnings.
  • Press 📄 Step-by-step report to see how every number was obtained.

Verify an Answer

🧰 Tools → Verify an answer. Paste the amounts somebody else calculated (one per line, in the same order as the people) and press Check. SatSplit shows the correct number, the given number and the difference for every person.

Saving and Sharing

  • 📨 Copy message — a short summary that is easy to paste into a chat.
  • 📊 Copy table — tab-separated; paste straight into Excel / Google Sheets.
  • 💾 Save to history (Ctrl+S) — keep the calculation; load it later from 🗂 History.
  • Report page → Save as… — HTML, PDF, Markdown, text, CSV or JSON.

🧠 How the Calculation Works

Let there be n people with holdings b₁ … bₙ, one network fee F, a converted amount C and money received T.

  1. Total holdings — B = b₁ + … + bₙ.
  2. Fee share — equal: fᵢ = F ÷ n; proportional: fᵢ = F × bᵢ ÷ B.
  3. Net BTC — nᵢ = bᵢ − fᵢ. The total net is B − F.
  4. Leftover — D = (B − F) − C (what stayed in the exchange). It is ignored and taken from everyone: dᵢ = D × nᵢ ÷ (B − F) (or D ÷ n). The sold share is cᵢ = nᵢ − dᵢ, and c₁ + … + cₙ = C.
  5. Exchange rate — T ÷ C money per BTC (or, if you typed the rate r, T = r × C).
  6. Exact share — aᵢ = T × cᵢ ÷ C.
  7. Rounding without loss — round every aᵢ down to the rounding unit, then give the units that are missing, one each, to the people with the biggest rounded-off fractions (largest-remainder method). The final amounts add up to T exactly and nobody is more than one unit away from their exact share.

All of this is done with Python Fraction objects — no rounding error can creep in. The report also shows a verification section (fee shares add up, net amounts add up, sold shares add up, percentages add up to exactly 100 %, final amounts add up to the money received, nobody is further than one unit from the exact value, and an independent 60-digit recalculation agrees).


🧪 Worked Example

Three people, fee 0.00004000 BTC, 0.005967 BTC converted (0.00000033 BTC stayed in the exchange), 117,441,451 Toman received:

Person Holding (BTC) Fee share (BTC) Net (BTC) Share Exact amount Final
Person 1 0.00360772 0.000013333333 0.003594386667 60.2344 % 70,740,177.8665 70,740,178
Person 2 0.00129260 0.000013333333 0.001279266667 21.4378 % 25,176,910.5361 25,176,910
Person 3 0.00110701 0.000013333333 0.001093676667 18.3277 % 21,524,362.5974 21,524,363
Total 0.00600733 0.00004000 0.00596733 100 % 117,441,451.0000 117,441,451

Notice: rounding every exact amount to the nearest Toman separately gives 70,740,178 + 25,176,911 + 21,524,363 = 117,441,452 — one Toman too much. With the largest-remainder method the person whose fraction was smallest (.5361) keeps the lower value, and the total is exactly 117,441,451.


🧭 Guide to the Pages

Page What it does
🧮 Calculator Inputs and the live result, checks and warnings
📄 Report The full step-by-step explanation; copy as text / Markdown / chat message or save as HTML, PDF, MD, TXT, CSV, JSON
🗂 History Saved calculations — load (double-click), delete, export, import
🧰 Tools BTC ⇄ satoshi ⇄ money converter · verify an answer · equal split
📝 Operation Log Timeline of everything the app did
⚙️ Settings Language, theme, accent color, animations, Persian digits, live calculation, data export / import / reset
ℹ️ About Guide, FAQ, support, version info, check for updates, copy diagnostics

Shortcuts: Ctrl+1 … Ctrl+7 switch pages, Ctrl+S saves to history, Ctrl+Enter calculates.


📝 Operation Log

The 📝 Operation Log page records what the app does — calculations, imports, saves, setting changes, errors — each with a timestamp and a level (Info, Success, Warning, Error).

  • Filter by level, Copy or Save as… the log, Clear it.
  • Turn on Save operation log to a file in Settings to also write every entry to satsplit.log next to the program (it is rotated at about 1 MB).
  • When you report a bug, please include the log lines around the problem.

⚙️ Settings

Setting What it does
Language English / فارسی (instant, with right-to-left layout)
Theme Dark / Light
Accent color Six colors
Animations Smooth transitions (turn off on slow computers)
Persian digits Show numbers as ۱۲۳
Live calculation Recalculate while typing
Confirm before clearing Ask before New clears the inputs
Save operation log to a file Writes satsplit.log
Export / Import settings Back up preferences, current inputs and history as JSON
Reset everything Back to factory defaults

Settings are stored in the operating system's settings store for your user (registry on Windows, ~/.config on Linux, ~/Library/Preferences on macOS).


🖥️ Platform Notes

Windows Linux macOS
Runs from source ✅ ✅ ✅
Standalone binary ✅ SatSplit.exe build with --build build with --build (.app)
Admin rights needed ❌ never ❌ never ❌ never
Persian font Segoe UI / Tahoma Vazirmatn, Noto Sans Arabic or DejaVu Sans system font

SatSplit never needs administrator rights and never touches your network settings.


🔨 Build the EXE Yourself

pip install -r requirements.txt pyinstaller
python SatSplit_V1.py --build

This runs PyInstaller with the right options (single file, no console window, the repository icon.ico, version information). The result is dist/SatSplit.exe on Windows, dist/SatSplit on Linux and dist/SatSplit.app on macOS. The program logo is also drawn inside the program itself, so the window and the taskbar always show it.


🔧 Troubleshooting

"No module named PyQt6" Run pip install -r requirements.txt (use the same Python you run the script with).

"The converted amount is larger than what is left after the fee" The Converted amount cannot be bigger than total holdings − fee. Check the fee and the amount, or tick Everything was converted.

"The fee share is not smaller than their holding" With an equal fee, a person with a very small holding cannot pay an equal part of the fee. Choose Fee in proportion to holdings or check the numbers.

The numbers differ by one Toman from another calculator Other tools round every person separately. SatSplit makes the parts add up exactly; see the worked example.

The Persian text looks wrong on Linux Install a Persian-capable font, e.g. sudo apt install fonts-vazirmatn or fonts-noto-core.

The app says it is already running Only one copy runs at a time. Close the other window (or check the task manager).

Windows SmartScreen / antivirus blocks the EXE The EXE is not code-signed. More info → Run anyway, or build it yourself.


❓ FAQ

Is it only for Bitcoin and Toman? The math is the same for any coin and any currency. Pick Rial, USD, USDT, EUR or type your own currency name in the Currency box.

Why not simply divide by the holdings? Because of the fee (shared per person, not per BTC), the leftover and the rounding. SatSplit handles all three and proves the result.

Which fee method should I choose? Equal is the usual agreement: every person pays the same part. Proportional is fairer to small holders. The report's last section compares both with real numbers.

What if some BTC stayed in the exchange? Enter the amount that was really sold in Converted amount. The rest is the leftover and is taken into account automatically.

Can I use a rate instead of the money I received? Yes — set Money input to I know the rate and type the price of 1 BTC.

Does it need internet? No. The only network request is the optional Check for updates button in About.

Where is my data stored? Only on your computer (settings store + optional satsplit.log). Use Settings → Data to export or reset it.


🔒 Privacy and Security Notes

  • No telemetry, analytics, accounts or ads.
  • The only network request is About → Check for updates, which asks the GitHub API for the latest release number.
  • Nothing is read from or sent to any exchange or wallet — you type the numbers yourself.
  • Saved history and settings stay on your computer; export files are plain JSON you can read.
  • The calculation never uses floating-point numbers, so results are reproducible bit for bit.

📬 Contact & Support

Questions, bugs or ideas? Send me a direct message on Telegram.


📄 License

This project is licensed under the MIT License — see the LICENSE file for details.


Made with ❤️ by SPARKS

Every satoshi, split fairly.

About

Fair Bitcoin split calculator for groups. Shares the network fee, handles the leftover in the exchange, gives every person their exact Toman / Rial / USD amount (the sum is always exact) and explains every step. Paste your text, verify any answer, export PDF / HTML / CSV. PyQt6 GUI, English + فارسی. Windows EXE available.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages