SatSale is a lightweight Bitcoin payment processor that connects to your own Bitcoin node or Lightning network node.
|Donation Button ----->||Bitcoin Payment Gateway|
(Click for donation page demo)
Initiates payment ----->
(Click for WordPress store payments demo)
- Installation (short!)
- Contributions welcomed
- Coming soon
SatSale currently serves as a
- Donation page and button for your website that you can easily embed/link to anywhere.
- Bitcoin payment gateway, including a Woocommerce plugin that easily turns any Wordpress site into a Bitcoin accepting store.
- Versatile API and payments platform. for both on-chain and lightning payments (supporting both clightning and lnd).
Other Bitcoin payment processors are known for being difficult to install and self-host, SatSale is easy to modify, and build upon.
SatSale makes donation buttons simple - easy copy paste the one line HTML iframe into your site. With a simple Python backend to talk to your own Bitcoin node, SatSale uses RPC to generate new addresses, and monitors the payment status with your own copy of the blockchain.
Our objective is to share the power of self-custody bitcoin payments with the world.
- Process payments with your own Bitcoin node via RPC and SSH. Bitcoin core, or any other node software that supports RPC calls.
- Direct peer-to-peer payments without any middleman. No KYC, and greater privacy than donation systems wher Bitcoin addresses are reused multiple times.
- Lightning Address support (firstname.lastname@example.org)
- Supports both clightning and lnd, or you can just use on-chain!
- Lightweight and highly extendable, basic html and css stying. Modular Python backend, take a look at the code or lnd.py!
- Reusable and extendable API.
- No shitcoins. Bitcoin only.
Clone and install dependencies
git clone https://github.com/nickfarrow/SatSale cd SatSale/ pip3 install -r requirements.txt
Connect to your Bitcoin Node
config.toml configuration and point to your Bitcoin node:
host = "127.0.0.1" rpcport = "8332" username = "RPCUSERNAME" password = "RPCPASSWORD"
(You can find these in
When connecting to a remote node, also edit either the SSH
tunnel_host (or see tor hidden service). If you have a lightning node (lnd or clightning) and want to use lightning network payments, see Lightning instructions. More example configs.
Run SatSale with
gunicorn -w 1 -b 0.0.0.0:8000 satsale:app
Gunicorn is a lightweight python HTTP server, alternatively you can run with just
python satsale.py though this is not recommended for production.
That's it! You should now be able to view your SatSale server at
http://YOUR_SERVER_IP:8000/. If running locally, this will be
If running on a Raspberry Pi, you will want to forward port 8000 in your router settings so that SatSale is also visible at your external IP address. You might have to allow gunicorn through your firewall with
sudo ufw allow 8000.
You will want to run gunicorn with nohup so it continues serving in the background:
nohup gunicorn -w 1 0.0.0.0:8000 satsale:app > log.txt 2>&1 & tail -f log.txt
Embed a Donation Button
Now embed the donation button into your website HTML:
<iframe src="http://YOUR_SERVER_IP:8000/" style="margin: 0 auto;display:block;width:420px;height:460px;border:none;overflow:hidden;" scrolling="no"></iframe>
YOUR_SERVER_IP to the IP address of the machine you're running SatSale on, node or otherwise. Additionally, you could redirect a domain to that IP and use that instead.
Using HTTPS & Domains
Point a domain to your VPS. You can run SatSale or use NGINX/apache to point to the service. See HTTPS instructions. Embedded iframes are easy if your site only uses HTTP. But if your site uses HTTPS, then you can see your donation button at
http://YOUR_SERVER_IP:8000/ but will not be able to in an embedded iframe. See HTTPS instructions.
Once you have an HTTPS domain pointed at SatSale, in the configuration you can specify a lightning address:
# Lightning Address e.g. email@example.com (think this requires https url) lightning_address = firstname.lastname@example.org lightning_address_comment = "Thank you for your support <3"
Run SatSale on a separate machine to your node, ensuring your node IP is not exposed.
When possible, host on a machine where your node only has access to a watch-only wallet.
Similarly, for lightning, use an
admin.macaroon unless required.
Payment Gateway (Woocommerce)
Currently we have a plugin for Woocommerce in Wordpress that makes Bitcoin webstores extremely easy, please click here for installation instructions. SatSale acts as a custom payment gateway for Woocommerce via the php plugin found in
/gateways. We have plans to extend to other web stores in the future.
When updating we recommend to first backup your config:
cp config.toml bk_config.toml # (previously) cp config.py bk_config.py
then stash your changes:
git stash git pull origin master git stash pop
We're still in early development, so things are changing a lot. You may have to resolve changes or manually migrate to the
.toml (if you used an earlier version of SatSale with the
You can also just make commits to your modified fork.
You only need a little python!
The main code can be found in satsale.py. The client-side logic for initiating the payment and querying the API sits in static/satsale.js, button appearance in templates/index.html, and Woocommerce plugin in gateways/woo_satsale.php. Please have ago at implementing some of the things below or in the issues!
- Better UI with more variety of size and theme.
- Currency toggle between BTC/USD on donation html.
- Late payment recourse.
- More readily customisable donation button (text/color/QR code)
- Different price feeds with various currencies
SatSale is in early development. As such, we are not responsible for any loss of funds, vulnerabilities with software, or any other grievances which may arise. Always confirm large payments manually and use cold storage as much as possible.
Please consider supporting me via my own instance of SatSale :). This is my first FOSS project, any support would greatly assist my ability to prioritize SatSale and other areas of Bitcoin. And most importantly, help us bring non-custodial bitcoin payments to the world. Please email