├── .gitignore
├── LICENSE
├── README.md
├── configuration.nix
├── default.nix
├── docs
├── faq.md
├── install.md
└── usage.md
├── modules
├── bitcoind.nix
├── clightning.nix
├── default.nix
├── electrs.nix
├── lightning-charge.nix
├── liquid.nix
├── nanopos.nix
├── nix-bitcoin-pkgs.nix
├── nix-bitcoin-webindex.nix
├── nix-bitcoin.nix
├── onion-chef.nix
├── recurring-donations.nix
└── spark-wallet.nix
├── network
├── network-libvirtd.nix
├── network-vbox.nix
└── network.nix
├── overlay.nix
├── pkgs
├── banlist
│ ├── banlist.sh
│ └── default.nix
├── electrs
│ └── default.nix
├── lightning-charge
│ ├── composition.nix
│ ├── default.nix
│ ├── generate.sh
│ ├── node-env.nix
│ ├── node-packages.nix
│ ├── pkg.json
│ ├── supplement.json
│ └── supplement.nix
├── liquidd
│ └── default.nix
├── nanopos
│ ├── composition.nix
│ ├── default.nix
│ ├── generate.sh
│ ├── node-env.nix
│ ├── node-packages.nix
│ ├── pkg.json
│ ├── supplement.json
│ └── supplement.nix
├── nixpkgs-pinned.nix
├── nodeinfo
│ ├── default.nix
│ └── nodeinfo.sh
└── spark-wallet
│ ├── composition.nix
│ ├── default.nix
│ ├── generate.sh
│ ├── node-env.nix
│ ├── node-packages.nix
│ ├── pkg.json
│ ├── supplement.json
│ └── supplement.nix
├── secrets
└── generate_secrets.sh
└── shell.nix
/.gitignore:
--------------------------------------------------------------------------------
1 | secrets/
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 nix-bitcoin developers
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # nix-bitcoin
2 |
3 |
4 | -------------------------
5 | ### Run Google Colab
6 |
7 | https://colab.research.google.com/drive/1OShIMVcFZ_khsUIBOIV1lzrqAGo1gfm_?usp=sharing
8 |
9 | -------------------------
10 |
11 |
12 |
13 | Nix packages and nixos modules for easily installing Bitcoin nodes and higher layer protocols.
14 | This is a work in progress - don't expect it to be bug free or secure.
15 |
16 | The default configuration sets up a Bitcoin Core node and c-lightning. The user can enable spark-wallet in `configuration.nix` to make c-lightning accessible with a smartphone using spark-wallet.
17 | A simple webpage shows the lightning nodeid and links to nanopos letting the user receive donations.
18 | It also includes liquid-daemon.
19 | Outbound peer-to-peer traffic is forced through Tor, and listening services are bound to onion addresses.
20 |
21 | A demo installation is running at [http://6tr4dg3f2oa7slotdjp4syvnzzcry2lqqlcvqkfxdavxo6jsuxwqpxad.onion](http://6tr4dg3f2oa7slotdjp4syvnzzcry2lqqlcvqkfxdavxo6jsuxwqpxad.onion).
22 | The following screen cast shows a fresh deployment of a nix-bitcoin node.
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | The goal is to make it easy to deploy a reasonably secure Bitcoin node with a usable wallet.
31 | It should allow managing bitcoin (the currency) effectively and providing public infrastructure.
32 | It should be a reproducible and extensible platform for applications building on Bitcoin.
33 |
34 | Available modules
35 | ---
36 | By default the `configuration.nix` provides:
37 | * bitcoind (pruned) with outbound connections through Tor and inbound connections through a hidden
38 | service. By default loaded with banlist of spy nodes.
39 | * [clightning](https://github.com/ElementsProject/lightning) with outbound connections through Tor, not listening
40 | * includes "nodeinfo" script which prints basic info about the node
41 | * adds non-root user "operator" which has access to bitcoin-cli and lightning-cli
42 |
43 | In `configuration.nix` the user can enable:
44 | * a clightning hidden service
45 | * [liquid-daemon](https://github.com/blockstream/liquid)
46 | * [lightning charge](https://github.com/ElementsProject/lightning-charge)
47 | * [nanopos](https://github.com/ElementsProject/nanopos)
48 | * an index page using nginx to display node information and link to nanopos
49 | * [spark-wallet](https://github.com/shesek/spark-wallet)
50 | * [electrs](https://github.com/romanz/electrs)
51 | * recurring-donations, a module to repeatedly send lightning payments to recipients specified in the configuration.
52 |
53 | The data directories of the services can be found in `/var/lib` on the deployed machines.
54 |
55 | Installation
56 | ---
57 | The easiest way is to run `nix-shell` (on a Linux machine) in the nix-bitcoin directory and then create a [NixOps](https://nixos.org/nixops/manual/) deployment with the provided `network.nix` in the `network` directory.
58 | Fix the FIXMEs in configuration.nix and deploy with nixops in nix-shell.
59 | See [install.md](docs/install.md) for a detailed tutorial.
60 |
61 | Hardware requirements
62 | ---
63 | * Disk space: 300 GB (235GB for Bitcoin blockchain + some room)
64 | * Bitcoin Core pruning is not supported at the moment because it's not supported by c-lightning. It's possible to use pruning but you need to know what you're doing.
65 | * RAM: 2GB of memory
66 |
67 | Tested hardware includes [pcengine's apu2c4](https://pcengines.ch/apu2c4.htm)
68 |
69 | Usage
70 | ---
71 | For usage instructions, such as how to connect to spark-wallet, electrs and the ssh Tor Hidden Service, see [usage.md](docs/usage.md).
72 |
73 | Troubleshooting
74 | ---
75 | If you are having problems with nix-bitcoin check the [FAQ](docs/faq.md) or submit an issue. We are always happy to help.
76 |
77 | Docs
78 | ---
79 | * [FAQ](docs/faq.md)
80 | * [Install instructions](docs/install.md)
81 | * [Usage instructions](docs/usage.md)
82 |
83 | ----
84 |
85 | | | Donation Address |
86 | | --- | --- |
87 | | ♥ __BTC__ | 1Lw2kh9WzCActXSGHxyypGLkqQZfxDpw8v |
88 | | ♥ __ETH__ | 0xaBd66CF90898517573f19184b3297d651f7b90bf |
89 |
--------------------------------------------------------------------------------
/configuration.nix:
--------------------------------------------------------------------------------
1 | # Edit this configuration file to define what should be installed on
2 | # your system. Help is available in the configuration.nix(5) man page
3 | # and in the NixOS manual (accessible by running ‘nixos-help’).
4 |
5 | { config, pkgs, ... }: {
6 | imports = [
7 | ./modules/nix-bitcoin.nix
8 | # FIXME: Uncomment next line to import your hardware configuration. If so,
9 | # add the hardware configuration file to the same directory as this file.
10 | # This is not needed when deploying to a virtual box.
11 | #./hardware-configuration.nix
12 | ];
13 | # FIXME: Enable modules by uncommenting their respective line. Disable
14 | # modules by commenting out their respective line. Enable this module to
15 | # use the nix-bitcoin node configuration. Only disable this if you know what
16 | # you are doing.
17 | services.nix-bitcoin.enable = true;
18 |
19 | ### CLIGHTNING
20 | # Enable this module to use clightning, a Lightning Network implementation
21 | # in C.
22 | services.clightning.enable = true;
23 | # Enable this option to listen for incoming lightning connections. By
24 | # default nix-bitcoin nodes offer outgoing connectivity.
25 | # services.clightning.autolisten = true;
26 |
27 | ### SPARK WALLET
28 | # Enable this module to use spark-wallet, a minimalistic wallet GUI for
29 | # c-lightning, accessible over the web or through mobile and desktop apps.
30 | # Only enable this if clightning is enabled.
31 | # services.spark-wallet.enable = true;
32 |
33 | ### ELECTRS
34 | # Enable this module to use electrs, an efficient re-implementation of
35 | # Electrum Server in Rust.
36 | # services.electrs.enable = true;
37 |
38 | ### LIQUIDD
39 | # Enable this module to use liquidd, a daemon for an inter-exchange
40 | # settlement network linking together cryptocurrency exchanges and
41 | # institutions around the world.
42 | # services.liquidd.enable = true;
43 |
44 | ### LIGHTNING CHARGE
45 | # Enable this module to use lightning-charge, a simple drop-in solution for
46 | # accepting lightning payments. Only enable this if clightning is enabled.
47 | # services.lightning-charge.enable = true;
48 |
49 | ### NANOPOS
50 | # Enable this module to use nanopos, a simple Lightning point-of-sale
51 | # system, powered by Lightning Charge. Only enable this if clightning and
52 | # lightning-charge are enabled.
53 | # services.nanopos.enable = true;
54 |
55 | ### WEBINDEX
56 | # Enable this module to use the nix-bitcoin-webindex, a simple website
57 | # displaying your node information and link to nanopos store. Only enable
58 | # this if clightning, lightning-charge, and nanopos are enabled.
59 | # services.nix-bitcoin-webindex.enable = true;
60 |
61 | ### RECURRING-DONATIONS
62 | # Enable this module to send recurring donations. This is EXPERIMENTAL; it's
63 | # not guaranteed that payments are succeeding or that you will notice payment
64 | # failure. Only enable this if clightning is enabled.
65 | # services.recurring-donations.enable = true;
66 | # Specify the receivers of the donations. By default donations are every
67 | # Monday at a randomized time. Check `journalctl -eu recurring-donations` or
68 | # `lightning-cli listpayments` for successful lightning donations.
69 | # services.recurring-donations.tallycoin = {
70 | # "" = "
71 | # "" = ;
72 | # "djbooth007" = 1000;
73 | # };
74 |
75 | # FIXME: Define your hostname.
76 | networking.hostName = "nix-bitcoin";
77 | time.timeZone = "UTC";
78 |
79 | # FIXME: Add your SSH pubkey
80 | services.openssh.enable = true;
81 | users.users.root = {
82 | openssh.authorizedKeys.keys = [ "" ];
83 | };
84 |
85 | # FIXME: add packages you need in your system
86 | environment.systemPackages = with pkgs; [
87 | vim
88 | ];
89 |
90 | # FIXME: Turn on the binary cache by commenting out the next line. When the
91 | # binary cache is enabled you are retrieving builds from a trusted third
92 | # party which can compromise your system. As a result, the cache should only
93 | # be enabled to speed up deployment of test systems.
94 | nix.binaryCaches = [];
95 |
96 | # FIXME: Add custom options (like boot options, output of
97 | # nixos-generate-config, etc.):
98 |
99 |
100 | # This value determines the NixOS release with which your system is to be
101 | # compatible, in order to avoid breaking some software such as database
102 | # servers. You should change this only after NixOS release notes say you
103 | # should.
104 | system.stateVersion = "18.09"; # Did you read the comment?
105 | }
106 |
--------------------------------------------------------------------------------
/default.nix:
--------------------------------------------------------------------------------
1 | { pkgs ? import {} }:
2 | {
3 | # 'lib', 'modules' and 'overlays' are special, see
4 | # https://github.com/nix-community/NUR for more.
5 | modules = import ./modules; # NixOS modules
6 |
7 | nodeinfo = pkgs.callPackage ./pkgs/nodeinfo { };
8 | banlist = pkgs.callPackage ./pkgs/banlist { };
9 | lightning-charge = pkgs.callPackage ./pkgs/lightning-charge { };
10 | nanopos = pkgs.callPackage ./pkgs/nanopos { };
11 | spark-wallet = pkgs.callPackage ./pkgs/spark-wallet { };
12 | electrs = pkgs.callPackage ./pkgs/electrs { };
13 | liquidd = pkgs.callPackage ./pkgs/liquidd { };
14 | }
15 |
--------------------------------------------------------------------------------
/docs/faq.md:
--------------------------------------------------------------------------------
1 | * **Q:** When deploying or trying to SSH into the machine I see
2 | ```
3 | bitcoin-node> waiting for SSH...
4 | Received disconnect from 10.1.1.200 port 22:2: Too many authentication failures
5 | ```
6 | * **A:** Somehow ssh-agent and nixops don't play well together. Try killing the ssh-agent.
7 | * **Q:** When deploying or trying to SSH into the machine I see
8 | ```
9 | root@xxx.xxx.xxx.xxx: Permission denied (publickey,password,keyboard-interactive).
10 | ```
11 | Make sure you don't have something like
12 | ```
13 | Host *
14 | PubkeyAuthentication no
15 | ```
16 | in your ssh config.
17 | * **Q:** When deploying to virtualbox for the first time I see
18 | ```
19 | bitcoin-node> Mar 19 09:22:27 bitcoin-node systemd[1]: Started Get NixOps SSH Key.
20 | bitcoin-node> Mar 19 09:22:27 bitcoin-node get-vbox-nixops-client-key-start[2226]: VBoxControl: error: Failed to connect to the guest property service, error VERR_INTERNAL_ERROR
21 | bitcoin-node> Mar 19 09:22:27 bitcoin-node systemd[1]: get-vbox-nixops-client-key.service: Main process exited, code=exited, status=1/FAILURE
22 | bitcoin-node> Mar 19 09:22:27 bitcoin-node systemd[1]: get-vbox-nixops-client-key.service: Failed with result 'exit-code'.
23 | bitcoin-node> error: Traceback (most recent call last):
24 | File "/nix/store/6zyvpi0q6mvprycadz2dpdqag4742y18-python2.7-nixops-1.6pre0_abcdef/lib/python2.7/site-packages/nixops/deployment.py", line 731, in worker
25 | raise Exception("unable to activate new configuration")
26 | Exception: unable to activate new configuration
27 | ```
28 | * **A:** This is issue https://github.com/NixOS/nixops/issues/908. The machine needs to be rebooted. You can do that by running `nixops deploy` with the `--force-reboot` flag once.
29 | * **Q:** I'm deploying to virtualbox it's not able to connect anymore.
30 | * **A:** Maybe the IP address of the box changed. Run `nixops deploy --check` to update nixops with the new IP address. Sometimes you also need to remove the old IP address from `~/.ssh/known_hosts`.
31 | * **Q:** The clightning service is running but when I try to use it (f.e. by running `lightning-cli getinfo` as user operator) all I get is `lightning-cli: Connecting to 'lightning-rpc': Connection refused`.
32 | * **A:** Check your clightning logs with `journalctl -eu clightning`. Do you see something like `bitcoin-cli getblock ... false` failed? Are you using pruned mode? That means that clightning hasn't seen all the blocks it needs to and it can't get that block because your node is pruned. If you're just setting up a new node you can `systemctl stop clightning` and wipe your `/var/lib/clightning` directory. Otherwise you need to reindex the Bitcoin node.
33 | * **Q:** My disk space is getting low due to nix.
34 | * **A:** run `nix-collect-garbage -d`
35 |
--------------------------------------------------------------------------------
/docs/install.md:
--------------------------------------------------------------------------------
1 | Preliminary steps
2 | ---
3 | Get a machine to deploy nix-bitcoin on.
4 | This could be a VirtualBox, a machine that is already running [NixOS](https://nixos.org/nixos/manual/index.html) or a cloud provider.
5 | Have a look at the options in the [NixOps manual](https://nixos.org/nixops/manual/).
6 |
7 | # Tutorials
8 | 1. [Install and configure NixOS for nix-bitcoin on VirtualBox](#tutorial-install-and-configure-nixos-for-nix-bitcoin-on-virtualbox)
9 | 2. [Install and configure NixOS for nix-bitcoin on your own hardware](#tutorial-install-and-configure-nixos-for-nix-bitcoin-on-your-own-hardware)
10 |
11 | Tutorial: install and configure NixOS for nix-bitcoin on VirtualBox
12 | ---
13 | ## 1. VirtualBox installation
14 | The following steps are meant to be run on the machine you deploy from, not the machine you deploy to.
15 |
16 | 1. Add virtualbox.list to /etc/apt/sources.list.d (Debian 9 stretch)
17 |
18 | ```
19 | echo "deb http://download.virtualbox.org/virtualbox/debian stretch contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
20 | ```
21 |
22 | 2. Add Oracle VirtualBox public key
23 |
24 | ```
25 | wget https://www.virtualbox.org/download/oracle_vbox_2016.asc
26 | gpg2 oracle_vbox_2016.asc
27 | ```
28 | Proceed _only_ if fingerprint reads B9F8 D658 297A F3EF C18D 5CDF A2F6 83C5 2980 AECF
29 |
30 | ```
31 | sudo apt-key add oracle_vbox_2016.asc
32 | ```
33 |
34 | 3. Install virtualbox-5.2
35 |
36 | ```
37 | sudo apt-get update
38 | sudo apt-get install virtualbox-5.2
39 | ```
40 |
41 | 3. Create Host Adapter in VirtualBox
42 |
43 | ```
44 | Open VirtualBox
45 | File -> Host Network Manager -> Create
46 | ```
47 | This should create a host adapter named vboxnet0
48 |
49 | ## 2. Nix installation
50 | The following steps are meant to be run on the machine you deploy from, not the machine you deploy to.
51 |
52 | 1. Install Dependencies (Debian 9 stretch)
53 |
54 | ```
55 | sudo apt-get install curl git gnupg2 dirmngr
56 | ```
57 |
58 | 2. Install latest Nix in "multi-user mode" with GPG Verification
59 |
60 | ```
61 | curl -o install-nix-2.2.1 https://nixos.org/nix/install
62 | curl -o install-nix-2.2.1.sig https://nixos.org/nix/install.sig
63 | gpg2 --recv-keys B541D55301270E0BCF15CA5D8170B4726D7198DE
64 | gpg2 --verify ./install-nix-2.2.1.sig
65 | sh ./install-nix-2.2.1 --daemon
66 | ```
67 | Then follow the instructions. Open a new terminal window when you're done.
68 |
69 | If you get an error similar to
70 | ```
71 | error: cloning builder process: Operation not permitted
72 | error: unable to start build process
73 | /tmp/nix-binary-tarball-unpack.hqawN4uSPr/unpack/nix-2.2.1-x86_64-linux/install: unable to install Nix into your default profile
74 | ```
75 | you're likely not installing as multi-user because you forgot to pass the `--daemon` flag to the install script.
76 |
77 | ## 3. Nixops deployment
78 |
79 | 1. Clone this project
80 |
81 | ```
82 | cd
83 | git clone https://github.com/jonasnick/nix-bitcoin
84 | cd ~/nix-bitcoin
85 | ```
86 |
87 | 2. Setup environment
88 |
89 | ```
90 | nix-shell
91 | ```
92 | 3. Create nixops deployment in nix-shell.
93 |
94 | ```
95 | nixops create network/network.nix network/network-vbox.nix -d bitcoin-node
96 | ```
97 |
98 | 4. Adjust configuration by opening `configuration.nix` and removing FIXMEs. Enable/disable the modules you want in `configuration.nix`.
99 |
100 | 5. Deploy Nixops in nix-shell
101 |
102 | ```
103 | nixops deploy -d bitcoin-node
104 | ```
105 |
106 | This will now create a nix-bitcoin node on the target machine.
107 |
108 | 6. Nixops automatically creates an ssh key for use with `nixops ssh`. Access `bitcoin-node` through ssh in nix-shell with
109 |
110 | ```
111 | nixops ssh operator@bitcoin-node
112 | ```
113 |
114 | See [usage.md](usage.md) for usage instructions, such as how to update.
115 |
116 | Tutorial: install and configure NixOS for nix-bitcoin on your own hardware
117 | ---
118 | ## 1. NixOS installation
119 |
120 | This is borrowed from the [NixOS manual](https://nixos.org/nixos/manual/index.html#ch-installation). Look there for more information.
121 |
122 | 1. Obtain latest NixOS. For example:
123 |
124 | ```
125 | wget https://releases.nixos.org/nixos/18.09/nixos-18.09.2257.235487585ed/nixos-graphical-18.09.2257.235487585ed-x86_64-linux.iso
126 | ```
127 |
128 | 2. Write NixOS iso to install media (USB/CD). For example:
129 |
130 | ```
131 | dd if=nixos-graphical-18.09.2257.235487585ed-x86_64-linux.iso of=/dev/sdX
132 | ```
133 | Replace /dev/sdX with the correct device name. You can find this using `sudo fdisk -l`
134 |
135 | 3. Boot the system
136 |
137 | You will have to find out if your hardware uses UEFI or Legacy Boot for the next step.
138 |
139 | 4. Option 1: Partition and format for UEFI
140 |
141 | ```
142 | parted /dev/sda -- mklabel gpt
143 | parted /dev/sda -- mkpart primary 512MiB -8GiB
144 | parted /dev/sda -- mkpart primary linux-swap -8GiB 100%
145 | parted /dev/sda -- mkpart ESP fat32 1MiB 512MiB
146 | parted /dev/sda -- set 3 boot on
147 | mkfs.ext4 -L nixos /dev/sda1
148 | mkswap -L swap /dev/sda2
149 | mkfs.fat -F 32 -n boot /dev/sda3
150 | mount /dev/disk/by-label/nixos /mnt
151 | mkdir -p /mnt/boot
152 | mount /dev/disk/by-label/boot /mnt/boot
153 | swapon /dev/sda2
154 | ```
155 |
156 | 4. Option 2: Partition and format for Legacy Boot (MBR)
157 |
158 | ```
159 | parted /dev/sda -- mklabel msdos
160 | parted /dev/sda -- mkpart primary 1MiB -8GiB
161 | parted /dev/sda -- mkpart primary linux-swap -8GiB 100%
162 | mkfs.ext4 -L nixos /dev/sda1
163 | mkswap -L swap /dev/sda2
164 | mount /dev/disk/by-label/nixos /mnt
165 | swapon /dev/sda2
166 | ```
167 |
168 | 5. Generate NixOS config
169 |
170 | ```
171 | nixos-generate-config --root /mnt
172 | nano /mnt/etc/nixos/configuration.nix
173 | ```
174 |
175 | Option 1: Edit NixOS configuration for UEFI
176 |
177 | ```
178 | { config, pkgs, ... }: {
179 | imports = [
180 | # Include the results of the hardware scan.
181 | ./hardware-configuration.nix
182 | ];
183 |
184 | boot.loader.systemd-boot.enable = true;
185 |
186 | # Note: setting fileSystems is generally not
187 | # necessary, since nixos-generate-config figures them out
188 | # automatically in hardware-configuration.nix.
189 | #fileSystems."/".device = "/dev/disk/by-label/nixos";
190 |
191 | # Enable the OpenSSH server.
192 | services.openssh = {
193 | enable = true;
194 | permitRootLogin = "yes";
195 | };
196 | }
197 | ```
198 |
199 | Option 2: Edit NixOS configuration for Legacy Boot (MBR)
200 |
201 | ```
202 | { config, pkgs, ... }: {
203 | imports = [
204 | # Include the results of the hardware scan.
205 | ./hardware-configuration.nix
206 | ];
207 |
208 | boot.loader.grub.device = "/dev/sda";
209 |
210 | # Note: setting fileSystems is generally not
211 | # necessary, since nixos-generate-config figures them out
212 | # automatically in hardware-configuration.nix.
213 | #fileSystems."/".device = "/dev/disk/by-label/nixos";
214 |
215 | # Enable the OpenSSH server.
216 | services.openssh = {
217 | enable = true;
218 | permitRootLogin = "yes";
219 | };
220 | }
221 | ```
222 |
223 | 6. Do the installation
224 |
225 | ```
226 | nixos-install
227 | ```
228 | Set root password
229 | ```
230 | setting root password...
231 | Enter new UNIX password:
232 | Retype new UNIX password:
233 | ```
234 |
235 | 7. If everything went well
236 |
237 | ```
238 | reboot
239 | ```
240 |
241 | ## 2. nix-bitcoin installation
242 |
243 | On the machine you are deploying from:
244 |
245 | 1. Install Dependencies (Debian 9 stretch)
246 |
247 | ```
248 | sudo apt-get install curl git gnupg2 dirmngr
249 | ```
250 |
251 | 2. Install Latest Nix with GPG Verification
252 |
253 | ```
254 | curl -o install-nix-2.2.1 https://nixos.org/nix/install
255 | curl -o install-nix-2.2.1.sig https://nixos.org/nix/install.sig
256 | gpg2 --recv-keys B541D55301270E0BCF15CA5D8170B4726D7198DE
257 | gpg2 --verify ./install-nix-2.2.1.sig
258 | sh ./install-nix-2.2.1 --daemon
259 | . /home/user/.nix-profile/etc/profile.d/nix.sh
260 | ```
261 | Then follow the instructions. Open a new terminal window when you're done.
262 |
263 | If you get an error similar to
264 | ```
265 | error: cloning builder process: Operation not permitted
266 | error: unable to start build process
267 | /tmp/nix-binary-tarball-unpack.hqawN4uSPr/unpack/nix-2.2.1-x86_64-linux/install: unable to install Nix into your default profile
268 | ```
269 | you're likely not installing as multi-user because you forgot to pass the `--daemon` flag to the install script.
270 |
271 | 3. Clone this project
272 |
273 | ```
274 | cd
275 | git clone https://github.com/jonasnick/nix-bitcoin
276 | cd ~/nix-bitcoin
277 | ```
278 |
279 | 4. Create network file
280 |
281 | ```
282 | nano network/network-nixos.nix
283 | ```
284 |
285 | ```
286 | {
287 | bitcoin-node =
288 | { config, pkgs, ... }:
289 | { deployment.targetHost = 1.2.3.4;
290 | };
291 | }
292 | ```
293 |
294 | Replace 1.2.3.4 with NixOS machine's IP address.
295 |
296 | 5. Edit `configuration.nix`
297 |
298 | ```
299 | nano configuration.nix
300 | ```
301 |
302 | Uncomment `./hardware-configuration.nix` line by removing #.
303 |
304 | 6. Create `hardware-configuration.nix`
305 |
306 | ```
307 | nano hardware-configuration.nix
308 | ```
309 | Copy contents of NixOS machine's `hardware-configuration.nix` to file.
310 |
311 | 7. Add boot option to `hardware-configuration.nix`
312 |
313 | Option 1: Enable systemd boot for UEFI
314 | ```
315 | boot.loader.grub.device = "/dev/sda";
316 | ```
317 | Option 2: Set grub device for Legacy Boot (MBR)
318 | ```
319 | boot.loader.grub.device = "/dev/sda":
320 | ```
321 |
322 | 8. Setup environment
323 | ```
324 | nix-shell
325 | ```
326 |
327 | 9. Create nixops deployment in nix-shell.
328 | ```
329 | nixops create network/network.nix network/network-nixos.nix -d bitcoin-node
330 | ```
331 |
332 | 10. Adjust configuration by opening `configuration.nix` and removing FIXMEs. Enable/disable the modules you want in `configuration.nix`.
333 |
334 | 11. Deploy Nixops in nix-shell
335 |
336 | ```
337 | nixops deploy -d bitcoin-node
338 | ```
339 | This will now create a nix-bitcoin node on the target machine.
340 |
341 | 12. Nixops automatically creates an ssh key for use with `nixops ssh`. Access `bitcoin-node` through ssh in nix-shell with
342 |
343 | ```
344 | nixops ssh operator@bitcoin-node
345 | ```
346 |
347 | See [usage.md](usage.md) for usage instructions, such as how to update.
348 |
--------------------------------------------------------------------------------
/docs/usage.md:
--------------------------------------------------------------------------------
1 | Updating
2 | ---
3 | Run `git pull` in the nix-bitcoin directory, enter the nix shell with `nix-shell` and redeploy with `nixops deploy -d bitcoin-node`.
4 |
5 | ## Verifying GPG Signatures (recommended)
6 | 1. Import jonasnick's gpg key
7 |
8 | ```
9 | gpg2 --receive-key 36C71A37C9D988BDE82508D9B1A70E4F8DCD0366
10 | ```
11 |
12 | 2. Trust jonasnick's gpg key
13 |
14 | ```
15 | gpg2 --edit-key 36C71A37C9D988BDE82508D9B1A70E4F8DCD0366
16 | trust
17 | 4
18 | quit
19 | ```
20 |
21 | 3. Verify commit after `git pull`
22 |
23 | ```
24 | git verify-commit
25 | ```
26 |
27 | Nodeinfo
28 | ---
29 | Run `nodeinfo` to see your onion addresses for the webindex, spark, etc. if they are enabled.
30 |
31 | Connect to spark-wallet
32 | ---
33 | 1. Enable spark-wallet in `configuration.nix`
34 |
35 | Change
36 | ```
37 | # services.spark-wallet.enable = true;
38 | ```
39 | to
40 | ```
41 | services.spark-wallet.enable = true;
42 | ```
43 |
44 | 2. Deploy new `configuration.nix`
45 |
46 | ```
47 | nixops deploy -d bitcoin-node
48 | ```
49 |
50 | 3. Get the onion address, access key and QR access code for the spark wallet android app
51 |
52 | ```
53 | journalctl -eu spark-wallet
54 | ```
55 | Note: The qr code might have issues scanning if you have a light terminal theme. Try setting it to dark or highlightning the entire output to invert the colors.
56 |
57 | 4. Connect to spark-wallet android app
58 |
59 | ```
60 | Server Settings
61 | Scan QR
62 | Done
63 | ```
64 |
65 | Connect to electrs
66 | ---
67 | 1. Enable electrs in `configuration.nix`
68 |
69 | Change
70 | ```
71 | # services.electrs.enable = true;
72 | ```
73 | to
74 | ```
75 | services.electrs.enable = true;
76 | ```
77 |
78 | 2. Deploy new `configuration.nix`
79 |
80 | ```
81 | nixops deploy -d bitcoin-node
82 | ```
83 |
84 | 3. Get electrs onion address
85 |
86 | ```
87 | nodeinfo | grep 'ELECTRS_ONION'
88 | ```
89 |
90 | 4. Connect to electrs
91 |
92 | On electrum wallet laptop
93 | ```
94 | electrum --oneserver --server=:50002:s
95 | ```
96 |
97 | On electrum android phone
98 | ```
99 | Three dots in the upper-right-hand corner
100 | Network
101 | Server > Enter
102 | Back
103 | Auto-connect: OFF
104 | One-server mode: ON
105 | ```
106 |
107 | Connect to nix-bitcoin node through ssh Tor Hidden Service
108 | ---
109 | 1. Run `nodeinfo` on your nix-bitcoin node and note the `SSHD_ONION`
110 |
111 | ```
112 | nixops ssh operator@bitcoin-node
113 | nodeinfo | grep 'SSHD_ONION'
114 | ```
115 |
116 | 2. Create a SSH key
117 |
118 | ```
119 | ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
120 | ```
121 |
122 | 3. Place the ed25519 key's fingerprint in the `configuration.nix` `openssh.authorizedKeys.keys` field like so
123 |
124 | ```
125 | # FIXME: Add your SSH pubkey
126 | services.openssh.enable = true;
127 | users.users.root = {
128 | openssh.authorizedKeys.keys = [ "[contents of ~/.ssh/id_ed25519.pub]" ];
129 | };
130 | ```
131 |
132 | 4. Connect to your nix-bitcoin node's ssh Tor Hidden Service, forwarding a local port to the nix-bitcoin node's ssh server
133 |
134 | ```
135 | ssh -i ~/.ssh/id_ed25519 -L [random port of your choosing]:localhost:22 root@[your SSHD_ONION]
136 | ```
137 |
138 | 5. Edit your `network-nixos.nix` to look like this
139 |
140 | ```
141 | {
142 | bitcoin-node =
143 | { config, pkgs, ... }:
144 | { deployment.targetHost = "127.0.0.1";
145 | deployment.targetPort = [random port of your choosing];
146 | };
147 | }
148 | ```
149 |
150 | 6. Now you can run `nixops deploy -d bitcoin-node` and it will connect through the ssh tunnel you established in step iv. This also allows you to do more complex ssh setups that `nixops ssh` doesn't support. An example would be authenticating with [Trezor's ssh agent](https://github.com/romanz/trezor-agent), which provides extra security.
151 |
--------------------------------------------------------------------------------
/modules/bitcoind.nix:
--------------------------------------------------------------------------------
1 | { config, pkgs, lib, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.bitcoind;
7 | pidFile = "${cfg.dataDir}/bitcoind.pid";
8 | configFile = pkgs.writeText "bitcoin.conf" ''
9 | ${optionalString cfg.testnet "testnet=1"}
10 | ${optionalString (cfg.dbCache != null) "dbcache=${toString cfg.dbCache}"}
11 | ${optionalString (cfg.prune != null) "prune=${toString cfg.prune}"}
12 | ${optionalString (cfg.sysperms != null) "sysperms=${if cfg.sysperms then "1" else "0"}"}
13 | ${optionalString (cfg.disablewallet != null) "disablewallet=${if cfg.disablewallet then "1" else "0"}"}
14 |
15 | # Connection options
16 | ${optionalString (cfg.port != null) "port=${toString cfg.port}"}
17 | ${optionalString (cfg.proxy != null) "proxy=${cfg.proxy}"}
18 | listen=${if cfg.listen then "1" else "0"}
19 |
20 | # RPC server options
21 | ${optionalString (cfg.rpc.port != null) "rpcport=${toString cfg.rpc.port}"}
22 | ${concatMapStringsSep "\n"
23 | (rpcUser: "rpcauth=${rpcUser.name}:${rpcUser.passwordHMAC}")
24 | (attrValues cfg.rpc.users)
25 | }
26 | ${optionalString (cfg.rpcuser != null) "rpcuser=${cfg.rpcuser}"}
27 | ${optionalString (cfg.rpcpassword != null) "rpcpassword=${cfg.rpcpassword}"}
28 |
29 | # Extra config options (from bitcoind nixos service)
30 | ${cfg.extraConfig}
31 | '';
32 | cmdlineOptions = concatMapStringsSep " " (arg: "'${arg}'") [
33 | "-datadir=${cfg.dataDir}"
34 | "-pid=${pidFile}"
35 | ];
36 | hexStr = types.strMatching "[0-9a-f]+";
37 | rpcUserOpts = { name, ... }: {
38 | options = {
39 | name = mkOption {
40 | type = types.str;
41 | example = "alice";
42 | description = ''
43 | Username for JSON-RPC connections.
44 | '';
45 | };
46 | passwordHMAC = mkOption {
47 | type = with types; uniq (strMatching "[0-9a-f]+\\$[0-9a-f]{64}");
48 | example = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
49 | description = ''
50 | Password HMAC-SHA-256 for JSON-RPC connections. Must be a string of the
51 | format $.
52 | '';
53 | };
54 | };
55 | config = {
56 | name = mkDefault name;
57 | };
58 | };
59 | in {
60 | options = {
61 |
62 | services.bitcoind = {
63 | enable = mkEnableOption "Bitcoin daemon";
64 |
65 | package = mkOption {
66 | type = types.package;
67 | default = pkgs.altcoins.bitcoind;
68 | defaultText = "pkgs.altcoins.bitcoind";
69 | description = "The package providing bitcoin binaries.";
70 | };
71 | extraConfig = mkOption {
72 | type = types.lines;
73 | default = "";
74 | example = ''
75 | par=16
76 | rpcthreads=16
77 | logips=1
78 |
79 | '';
80 | description = "Additional configurations to be appended to bitcoin.conf.";
81 | };
82 | dataDir = mkOption {
83 | type = types.path;
84 | default = "/var/lib/bitcoind";
85 | description = "The data directory for bitcoind.";
86 | };
87 | configFileOption = mkOption {
88 | type = types.path;
89 | default = configFile;
90 | description = "The data directory for bitcoind.";
91 | };
92 |
93 | user = mkOption {
94 | type = types.str;
95 | default = "bitcoin";
96 | description = "The user as which to run bitcoind.";
97 | };
98 | group = mkOption {
99 | type = types.str;
100 | default = cfg.user;
101 | description = "The group as which to run bitcoind.";
102 | };
103 |
104 | rpc = {
105 | port = mkOption {
106 | type = types.nullOr types.ints.u16;
107 | default = null;
108 | description = "Override the default port on which to listen for JSON-RPC connections.";
109 | };
110 | users = mkOption {
111 | default = {};
112 | example = {
113 | alice.passwordHMAC = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
114 | bob.passwordHMAC = "b2dd077cb54591a2f3139e69a897ac$4e71f08d48b4347cf8eff3815c0e25ae2e9a4340474079f55705f40574f4ec99";
115 | };
116 | type = with types; loaOf (submodule rpcUserOpts);
117 | description = ''
118 | RPC user information for JSON-RPC connnections.
119 | '';
120 | };
121 | };
122 |
123 | rpcuser = mkOption {
124 | type = types.nullOr types.string;
125 | default = null;
126 | description = "Username for JSON-RPC connections";
127 | };
128 | rpcpassword = mkOption {
129 | type = types.nullOr types.string;
130 | default = null;
131 | description = "Password for JSON-RPC connections";
132 | };
133 |
134 | testnet = mkOption {
135 | type = types.bool;
136 | default = false;
137 | description = "Whether to use the test chain.";
138 | };
139 | port = mkOption {
140 | type = types.nullOr types.ints.u16;
141 | default = null;
142 | description = "Override the default port on which to listen for connections.";
143 | };
144 | proxy = mkOption {
145 | type = types.nullOr types.string;
146 | default = null;
147 | description = "Connect through SOCKS5 proxy";
148 | };
149 | listen = mkOption {
150 | type = types.bool;
151 | default = false;
152 | description = ''
153 | If enabled, the bitcoin service will listen.
154 | '';
155 | };
156 | sysperms = mkOption {
157 | type = types.nullOr types.bool;
158 | default = null;
159 | description = ''
160 | Create new files with system default permissions, instead of umask 077 (only effective with disabled wallet functionality)
161 | '';
162 | };
163 | disablewallet = mkOption {
164 | type = types.nullOr types.bool;
165 | default = null;
166 | description = ''
167 | Do not load the wallet and disable wallet RPC calls
168 | '';
169 | };
170 | dbCache = mkOption {
171 | type = types.nullOr (types.ints.between 4 16384);
172 | default = null;
173 | example = 4000;
174 | description = "Override the default database cache size in megabytes.";
175 | };
176 | prune = mkOption {
177 | type = types.nullOr (types.coercedTo
178 | (types.enum [ "disable" "manual" ])
179 | (x: if x == "disable" then 0 else 1)
180 | types.ints.unsigned
181 | );
182 | default = null;
183 | example = 10000;
184 | description = ''
185 | Reduce storage requirements by enabling pruning (deleting) of old
186 | blocks. This allows the pruneblockchain RPC to be called to delete
187 | specific blocks, and enables automatic pruning of old blocks if a
188 | target size in MiB is provided. This mode is incompatible with -txindex
189 | and -rescan. Warning: Reverting this setting requires re-downloading
190 | the entire blockchain. ("disable" = disable pruning blocks, "manual"
191 | = allow manual pruning via RPC, >=550 = automatically prune block files
192 | to stay under the specified target size in MiB)
193 | '';
194 | };
195 | };
196 | };
197 |
198 | config = mkIf cfg.enable {
199 | environment.systemPackages = [ cfg.package ];
200 | systemd.services.bitcoind = {
201 | description = "Bitcoin daemon";
202 | requires = [ "bitcoin-rpcpassword-key.service" ];
203 | after = [ "network.target" "bitcoin-rpcpassword-key.service" ];
204 | wantedBy = [ "multi-user.target" ];
205 | preStart = ''
206 | if ! test -e ${cfg.dataDir}; then
207 | mkdir -m 0770 -p '${cfg.dataDir}'
208 | chown -R '${cfg.user}:${cfg.group}' '${cfg.dataDir}'
209 | fi
210 | if ! test -e ${cfg.dataDir}/blocks; then
211 | mkdir -m 0770 -p '${cfg.dataDir}/blocks'
212 | chown -R '${cfg.user}:${cfg.group}' '${cfg.dataDir}/blocks'
213 | fi
214 | cp '${cfg.configFileOption}' '${cfg.dataDir}/bitcoin.conf'
215 | chmod o-rw '${cfg.dataDir}/bitcoin.conf'
216 | chown '${cfg.user}:${cfg.group}' '${cfg.dataDir}/bitcoin.conf'
217 | echo "rpcpassword=$(cat /secrets/bitcoin-rpcpassword)" >> '${cfg.dataDir}/bitcoin.conf'
218 | chmod -R g+rX '${cfg.dataDir}/blocks'
219 | '';
220 | serviceConfig = {
221 | Type = "simple";
222 | User = "${cfg.user}";
223 | Group = "${cfg.group}";
224 | ExecStart = "${cfg.package}/bin/bitcoind ${cmdlineOptions}";
225 | StateDirectory = "bitcoind";
226 | PIDFile = "${pidFile}";
227 | Restart = "on-failure";
228 |
229 | # Hardening measures
230 | PrivateTmp = "true";
231 | ProtectSystem = "full";
232 | NoNewPrivileges = "true";
233 | PrivateDevices = "true";
234 | MemoryDenyWriteExecute = "true";
235 |
236 | # Permission for preStart
237 | PermissionsStartOnly = "true";
238 | };
239 | };
240 | systemd.services.bitcoind-import-banlist = {
241 | description = "Bitcoin daemon banlist importer";
242 | requires = [ "bitcoind.service" ];
243 | after = [ "bitcoind.service" ];
244 | wantedBy = [ "multi-user.target" ];
245 | preStart = ''
246 | set +e
247 | echo "Checking that bitcoind is up"
248 | # Give bitcoind time to create pid file
249 | sleep 2
250 | while true
251 | do
252 | pid=$(cat ${pidFile})
253 | ${pkgs.ps}/bin/ps -p "$pid" > /dev/null
254 | if [ "$?" -ne 0 ]; then
255 | echo "bitcoind already exited"
256 | break
257 | fi
258 | '${cfg.package}'/bin/bitcoin-cli -datadir='${cfg.dataDir}' getnetworkinfo > /dev/null
259 | if [ "$?" -eq 0 ]; then
260 | break
261 | fi
262 | sleep 1
263 | done
264 | '';
265 | serviceConfig = {
266 | Type = "simple";
267 | User = "${cfg.user}";
268 | Group = "${cfg.group}";
269 | ExecStart = "${pkgs.bash}/bin/bash ${pkgs.banlist}/bin/banlist ${pkgs.altcoins.bitcoind}";
270 | StateDirectory = "bitcoind";
271 |
272 | # Hardening measures
273 | PrivateTmp = "true";
274 | ProtectSystem = "full";
275 | NoNewPrivileges = "true";
276 | PrivateDevices = "true";
277 | MemoryDenyWriteExecute = "true";
278 |
279 | # Permission for preStart
280 | PermissionsStartOnly = "true";
281 | };
282 | };
283 |
284 | users.users.${cfg.user} = {
285 | name = cfg.user;
286 | group = cfg.group;
287 | extraGroups = [ "keys" ];
288 | description = "Bitcoin daemon user";
289 | home = cfg.dataDir;
290 | };
291 | users.groups.${cfg.group} = {
292 | name = cfg.group;
293 | };
294 | };
295 | }
296 |
--------------------------------------------------------------------------------
/modules/clightning.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.clightning;
7 | configFile = pkgs.writeText "config" ''
8 | autolisten=${if cfg.autolisten then "true" else "false"}
9 | network=bitcoin
10 | ${optionalString (cfg.proxy != null) "proxy=${cfg.proxy}"}
11 | always-use-proxy=${if cfg.always-use-proxy then "true" else "false"}
12 | ${optionalString (cfg.bind-addr != null) "bind-addr=${cfg.bind-addr}"}
13 | bitcoin-rpcuser=${cfg.bitcoin-rpcuser}
14 | '';
15 | in {
16 | options.services.clightning = {
17 | enable = mkOption {
18 | type = types.bool;
19 | default = false;
20 | description = ''
21 | If enabled, the clightning service will be installed.
22 | '';
23 | };
24 | autolisten = mkOption {
25 | type = types.bool;
26 | default = false;
27 | description = ''
28 | If enabled, the clightning service will listen.
29 | '';
30 | };
31 | proxy = mkOption {
32 | type = types.nullOr types.string;
33 | default = null;
34 | description = "Set a socks proxy to use to connect to Tor nodes (or for all connections if *always-use-proxy* is set)";
35 | };
36 | always-use-proxy = mkOption {
37 | type = types.bool;
38 | default = false;
39 | description = ''
40 | Always use the *proxy*, even to connect to normal IP addresses (you can still connect to Unix domain sockets manually). This also disables all DNS lookups, to avoid leaking information.
41 | '';
42 | };
43 | bind-addr = mkOption {
44 | type = types.nullOr types.string;
45 | default = null;
46 | description = "Set an IP address or UNIX domain socket to listen to";
47 | };
48 | bitcoin-rpcuser = mkOption {
49 | type = types.string;
50 | description = ''
51 | Bitcoin RPC user
52 | '';
53 | };
54 | dataDir = mkOption {
55 | type = types.path;
56 | default = "/var/lib/clightning";
57 | description = "The data directory for clightning.";
58 | };
59 | };
60 |
61 | config = mkIf cfg.enable {
62 | users.users.clightning = {
63 | description = "clightning User";
64 | group = "clightning";
65 | extraGroups = [ "bitcoinrpc" "keys" ];
66 | home = cfg.dataDir;
67 | };
68 | users.groups.clightning = {
69 | name = "clightning";
70 | };
71 |
72 | systemd.services.clightning = {
73 | description = "Run clightningd";
74 | path = [ pkgs.bitcoin ];
75 | wantedBy = [ "multi-user.target" ];
76 | requires = [ "bitcoind.service" ];
77 | after = [ "bitcoind.service" ];
78 | preStart = ''
79 | mkdir -m 0770 -p ${cfg.dataDir}
80 | rm -f ${cfg.dataDir}/config
81 | chown 'clightning:clightning' '${cfg.dataDir}'
82 | cp ${configFile} ${cfg.dataDir}/config
83 | chown 'clightning:clightning' '${cfg.dataDir}/config'
84 | chmod +w ${cfg.dataDir}/config
85 | chmod o-rw ${cfg.dataDir}/config
86 | # The RPC socket has to be removed otherwise we might have stale sockets
87 | rm -f ${cfg.dataDir}/lightning-rpc
88 | echo "bitcoin-rpcpassword=$(cat /secrets/bitcoin-rpcpassword)" >> '${cfg.dataDir}/config'
89 | '';
90 | serviceConfig = {
91 | PermissionsStartOnly = "true";
92 | ExecStart = "${pkgs.clightning}/bin/lightningd --lightning-dir=${cfg.dataDir}";
93 | User = "clightning";
94 | Restart = "on-failure";
95 | RestartSec = "10s";
96 | PrivateTmp = "true";
97 | ProtectSystem = "full";
98 | NoNewPrivileges = "true";
99 | PrivateDevices = "true";
100 | MemoryDenyWriteExecute = "true";
101 | };
102 | };
103 | };
104 | }
105 |
--------------------------------------------------------------------------------
/modules/default.nix:
--------------------------------------------------------------------------------
1 | {
2 | bitcoind = ./bitcoind.nix;
3 | clightning = ./clightning.nix;
4 | default = ./default.nix;
5 | electrs = ./electrs.nix;
6 | lightning-charge = ./lightning-charge.nix;
7 | liquid = ./liquid.nix;
8 | nanopos = ./nanopos.nix;
9 | nix-bitcoin = ./nix-bitcoin.nix;
10 | nix-bitcoin-pkgs = ./nix-bitcoin-pkgs.nix;
11 | nix-bitcoin-webindex = ./nix-bitcoin-webindex.nix;
12 | spark-wallet = ./spark-wallet.nix;
13 | recurring-donations = ./recurring-donations.nix
14 | }
15 |
--------------------------------------------------------------------------------
/modules/electrs.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.electrs;
7 | index-batch-size = "${if cfg.high-memory then "" else "--index-batch-size=10"}";
8 | jsonrpc-import = "${if cfg.high-memory then "" else "--jsonrpc-import"}";
9 | in {
10 | options.services.electrs = {
11 | enable = mkOption {
12 | type = types.bool;
13 | default = false;
14 | description = ''
15 | If enabled, the electrs service will be installed.
16 | '';
17 | };
18 | dataDir = mkOption {
19 | type = types.path;
20 | default = "/var/lib/electrs";
21 | description = "The data directory for electrs.";
22 | };
23 | high-memory = mkOption {
24 | type = types.bool;
25 | default = false;
26 | description = ''
27 | If enabled, the electrs service will sync faster on high-memory systems (≥ 8GB).
28 | '';
29 | };
30 | port = mkOption {
31 | type = types.ints.u16;
32 | default = 50001;
33 | description = "Override the default port on which to listen for connections.";
34 | };
35 | onionport = mkOption {
36 | type = types.ints.u16;
37 | default = 50002;
38 | description = "Override the default port on which to listen for connections.";
39 | };
40 | nginxport = mkOption {
41 | type = types.ints.u16;
42 | default = 50003;
43 | description = "Override the default port on which to listen for connections.";
44 | };
45 | };
46 |
47 | config = mkIf cfg.enable {
48 | users.users.electrs = {
49 | description = "electrs User";
50 | group = "electrs";
51 | extraGroups = [ "bitcoinrpc" "keys" "bitcoin"];
52 | home = cfg.dataDir;
53 | };
54 | users.groups.electrs = {
55 | name = "electrs";
56 | };
57 |
58 | systemd.services.electrs = {
59 | description = "Run electrs";
60 | wantedBy = [ "multi-user.target" ];
61 | requires = [ "bitcoind.service" "nginx.service"];
62 | after = [ "bitcoind.service" ];
63 | # create shell script to start up electrs safely with password parameter
64 | preStart = ''
65 | mkdir -m 0770 -p ${cfg.dataDir}
66 | chown 'electrs:electrs' ${cfg.dataDir}
67 | echo "${pkgs.electrs}/bin/electrs -vvv ${index-batch-size} ${jsonrpc-import} --timestamp --db-dir ${cfg.dataDir} --daemon-dir /var/lib/bitcoind --cookie=${config.services.bitcoind.rpcuser}:$(cat /secrets/bitcoin-rpcpassword) --electrum-rpc-addr=127.0.0.1:${toString cfg.port}" > /var/lib/electrs/startscript.sh
68 | chown -R 'electrs:electrs' ${cfg.dataDir}
69 | chmod u+x ${cfg.dataDir}/startscript.sh
70 | '';
71 | serviceConfig = {
72 | PermissionsStartOnly = "true";
73 | ExecStart = "${pkgs.bash}/bin/bash ${cfg.dataDir}/startscript.sh";
74 | User = "electrs";
75 | Restart = "on-failure";
76 | RestartSec = "10s";
77 | PrivateTmp = "true";
78 | ProtectSystem = "full";
79 | NoNewPrivileges = "true";
80 | PrivateDevices = "true";
81 | };
82 | };
83 |
84 | services.nginx = {
85 | enable = true;
86 | appendConfig = ''
87 | stream {
88 | upstream electrs {
89 | server 127.0.0.1:${toString config.services.electrs.port};
90 | }
91 |
92 | server {
93 | listen ${toString config.services.electrs.nginxport} ssl;
94 | proxy_pass electrs;
95 |
96 | ssl_certificate /secrets/ssl_certificate;
97 | ssl_certificate_key /secrets/ssl_certificate_key;
98 | ssl_session_cache shared:SSL:1m;
99 | ssl_session_timeout 4h;
100 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
101 | ssl_prefer_server_ciphers on;
102 | }
103 | }
104 | '';
105 | };
106 | };
107 | }
108 |
--------------------------------------------------------------------------------
/modules/lightning-charge.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.lightning-charge;
7 | in {
8 | options.services.lightning-charge = {
9 | enable = mkOption {
10 | type = types.bool;
11 | default = false;
12 | description = ''
13 | If enabled, the lightning-charge service will be installed.
14 | '';
15 | };
16 | clightning-datadir = mkOption {
17 | type = types.string;
18 | default = "/var/lib/clighting/";
19 | description = ''
20 | Data directory of the clightning service
21 | '';
22 | };
23 | };
24 |
25 | config = mkIf cfg.enable {
26 | systemd.services.lightning-charge = {
27 | description = "Run lightning-charge";
28 | wantedBy = [ "multi-user.target" ];
29 | requires = [ "clightning.service" ];
30 | after = [ "clightning.service" ];
31 | serviceConfig = {
32 | EnvironmentFile = "/secrets/lightning-charge-api-token";
33 | ExecStart = "${pkgs.lightning-charge}/bin/charged -l ${config.services.clightning.dataDir} -d ${config.services.clightning.dataDir}/lightning-charge.db";
34 | # Unfortunately c-lightning doesn't allow setting the permissions of the rpc socket,
35 | # so this must run as the clightning user
36 | # https://github.com/ElementsProject/lightning/issues/1366
37 | User = "clightning";
38 | Restart = "on-failure";
39 | RestartSec = "10s";
40 | PrivateTmp = "true";
41 | ProtectSystem = "full";
42 | NoNewPrivileges = "true";
43 | PrivateDevices = "true";
44 | };
45 | };
46 | };
47 | }
48 |
--------------------------------------------------------------------------------
/modules/liquid.nix:
--------------------------------------------------------------------------------
1 | { config, pkgs, lib, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.liquidd;
7 | pidFile = "${cfg.dataDir}/liquidd.pid";
8 | configFile = pkgs.writeText "liquid.conf" ''
9 | ${optionalString cfg.testnet "testnet=1"}
10 | ${optionalString (cfg.dbCache != null) "dbcache=${toString cfg.dbCache}"}
11 | ${optionalString (cfg.prune != null) "prune=${toString cfg.prune}"}
12 |
13 | # Connection options
14 | ${optionalString (cfg.port != null) "port=${toString cfg.port}"}
15 | ${optionalString (cfg.proxy != null) "proxy=${cfg.proxy}"}
16 | listen=${if cfg.listen then "1" else "0"}
17 |
18 | # RPC server options
19 | ${optionalString (cfg.rpc.port != null) "rpcport=${toString cfg.rpc.port}"}
20 | ${concatMapStringsSep "\n"
21 | (rpcUser: "rpcauth=${rpcUser.name}:${rpcUser.passwordHMAC}")
22 | (attrValues cfg.rpc.users)
23 | }
24 | ${optionalString (cfg.rpcuser != null) "rpcuser=${cfg.rpcuser}"}
25 | ${optionalString (cfg.rpcpassword != null) "rpcpassword=${cfg.rpcpassword}"}
26 |
27 | # Extra config options (from liquidd nixos service)
28 | ${cfg.extraConfig}
29 | '';
30 | cmdlineOptions = concatMapStringsSep " " (arg: "'${arg}'") [
31 | "-datadir=${cfg.dataDir}"
32 | "-pid=${pidFile}"
33 | ];
34 | hexStr = types.strMatching "[0-9a-f]+";
35 | rpcUserOpts = { name, ... }: {
36 | options = {
37 | name = mkOption {
38 | type = types.str;
39 | example = "alice";
40 | description = ''
41 | Username for JSON-RPC connections.
42 | '';
43 | };
44 | passwordHMAC = mkOption {
45 | type = with types; uniq (strMatching "[0-9a-f]+\\$[0-9a-f]{64}");
46 | example = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
47 | description = ''
48 | Password HMAC-SHA-256 for JSON-RPC connections. Must be a string of the
49 | format $.
50 | '';
51 | };
52 | };
53 | config = {
54 | name = mkDefault name;
55 | };
56 | };
57 | in {
58 | options = {
59 |
60 | services.liquidd = {
61 | enable = mkEnableOption "Liquid daemon";
62 |
63 | extraConfig = mkOption {
64 | type = types.lines;
65 | default = "";
66 | example = ''
67 | par=16
68 | rpcthreads=16
69 | logips=1
70 |
71 | '';
72 | description = "Additional configurations to be appended to liquid.conf.";
73 | };
74 | dataDir = mkOption {
75 | type = types.path;
76 | default = "/var/lib/liquidd";
77 | description = "The data directory for liquidd.";
78 | };
79 |
80 | user = mkOption {
81 | type = types.str;
82 | default = "liquid";
83 | description = "The user as which to run liquidd.";
84 | };
85 | group = mkOption {
86 | type = types.str;
87 | default = cfg.user;
88 | description = "The group as which to run liquidd.";
89 | };
90 |
91 | rpc = {
92 | port = mkOption {
93 | type = types.nullOr types.ints.u16;
94 | default = null;
95 | description = "Override the default port on which to listen for JSON-RPC connections.";
96 | };
97 | users = mkOption {
98 | default = {};
99 | example = {
100 | alice.passwordHMAC = "f7efda5c189b999524f151318c0c86$d5b51b3beffbc02b724e5d095828e0bc8b2456e9ac8757ae3211a5d9b16a22ae";
101 | bob.passwordHMAC = "b2dd077cb54591a2f3139e69a897ac$4e71f08d48b4347cf8eff3815c0e25ae2e9a4340474079f55705f40574f4ec99";
102 | };
103 | type = with types; loaOf (submodule rpcUserOpts);
104 | description = ''
105 | RPC user information for JSON-RPC connnections.
106 | '';
107 | };
108 | };
109 |
110 | rpcuser = mkOption {
111 | type = types.nullOr types.string;
112 | default = null;
113 | description = "Username for JSON-RPC connections";
114 | };
115 | rpcpassword = mkOption {
116 | type = types.nullOr types.string;
117 | default = null;
118 | description = "Password for JSON-RPC connections";
119 | };
120 |
121 | testnet = mkOption {
122 | type = types.bool;
123 | default = false;
124 | description = "Whether to use the test chain.";
125 | };
126 | port = mkOption {
127 | type = types.nullOr types.ints.u16;
128 | default = null;
129 | description = "Override the default port on which to listen for connections.";
130 | };
131 | proxy = mkOption {
132 | type = types.nullOr types.string;
133 | default = null;
134 | description = "Connect through SOCKS5 proxy";
135 | };
136 | listen = mkOption {
137 | type = types.bool;
138 | default = false;
139 | description = ''
140 | If enabled, the liquid service will listen.
141 | '';
142 | };
143 | dbCache = mkOption {
144 | type = types.nullOr (types.ints.between 4 16384);
145 | default = null;
146 | example = 4000;
147 | description = "Override the default database cache size in megabytes.";
148 | };
149 | prune = mkOption {
150 | type = types.nullOr (types.coercedTo
151 | (types.enum [ "disable" "manual" ])
152 | (x: if x == "disable" then 0 else 1)
153 | types.ints.unsigned
154 | );
155 | default = null;
156 | example = 10000;
157 | description = ''
158 | Reduce storage requirements by enabling pruning (deleting) of old
159 | blocks. This allows the pruneblockchain RPC to be called to delete
160 | specific blocks, and enables automatic pruning of old blocks if a
161 | target size in MiB is provided. This mode is incompatible with -txindex
162 | and -rescan. Warning: Reverting this setting requires re-downloading
163 | the entire blockchain. ("disable" = disable pruning blocks, "manual"
164 | = allow manual pruning via RPC, >=550 = automatically prune block files
165 | to stay under the specified target size in MiB)
166 | '';
167 | };
168 | };
169 | };
170 |
171 | config = mkIf cfg.enable {
172 | environment.systemPackages = [ pkgs.liquidd ];
173 | systemd.services.liquidd = {
174 | description = "Liquid daemon";
175 | requires = [ "liquid-rpcpassword-key.service" ];
176 | after = [ "network.target" "liquid-rpcpassword-key.service" ];
177 | wantedBy = [ "multi-user.target" ];
178 | preStart = ''
179 | if ! test -e ${cfg.dataDir}; then
180 | mkdir -m 0770 -p '${cfg.dataDir}'
181 | chown '${cfg.user}:${cfg.group}' '${cfg.dataDir}'
182 | fi
183 | cp '${configFile}' '${cfg.dataDir}/liquid.conf'
184 | chmod o-rw '${cfg.dataDir}/liquid.conf'
185 | chown '${cfg.user}:${cfg.group}' '${cfg.dataDir}/liquid.conf'
186 | echo "rpcpassword=$(cat /secrets/liquid-rpcpassword)" >> '${cfg.dataDir}/liquid.conf'
187 | echo "mainchainrpcpassword=$(cat /secrets/bitcoin-rpcpassword)" >> '${cfg.dataDir}/liquid.conf'
188 | '';
189 | serviceConfig = {
190 | Type = "simple";
191 | User = "${cfg.user}";
192 | Group = "${cfg.group}";
193 | ExecStart = "${pkgs.liquidd}/bin/liquidd ${cmdlineOptions}";
194 | StateDirectory = "liquidd";
195 | PIDFile = "${pidFile}";
196 | Restart = "on-failure";
197 |
198 | # Hardening measures
199 | PrivateTmp = "true";
200 | ProtectSystem = "full";
201 | NoNewPrivileges = "true";
202 | PrivateDevices = "true";
203 | MemoryDenyWriteExecute = "true";
204 |
205 | # Permission for preStart
206 | PermissionsStartOnly = "true";
207 | };
208 | };
209 | users.users.${cfg.user} = {
210 | name = cfg.user;
211 | #uid = config.ids.uids.liquid;
212 | group = cfg.group;
213 | extraGroups = [ "keys" ];
214 | description = "Liquid daemon user";
215 | home = cfg.dataDir;
216 | };
217 | users.groups.${cfg.group} = {
218 | name = cfg.group;
219 | #gid = config.ids.gids.liquid;
220 | };
221 | };
222 | }
223 |
--------------------------------------------------------------------------------
/modules/nanopos.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.nanopos;
7 | defaultItemsFile = pkgs.writeText "items.yaml" ''
8 | tea:
9 | price: 0.02 # denominated in the currency specified by --currency
10 | title: Green Tea # title is optional, defaults to the key
11 |
12 | coffee:
13 | price: 1
14 |
15 | bamba:
16 | price: 3
17 |
18 | beer:
19 | price: 7
20 |
21 | hat:
22 | price: 15
23 |
24 | tshirt:
25 | price: 25
26 | '';
27 |
28 | in {
29 | options.services.nanopos = {
30 | enable = mkOption {
31 | type = types.bool;
32 | default = false;
33 | description = ''
34 | If enabled, the nanopos service will be installed.
35 | '';
36 | };
37 | port = mkOption {
38 | type = types.ints.u16;
39 | default = 9116;
40 | description = ''
41 | "The port on which to listen for connections.";
42 | '';
43 | };
44 | itemsFile = mkOption {
45 | type = types.path;
46 | default = defaultItemsFile;
47 | description = ''
48 | "The items file (see nanopos README).";
49 | '';
50 | };
51 | };
52 |
53 | config = mkIf cfg.enable {
54 | users.users.nanopos =
55 | {
56 | description = "nanopos User";
57 | group = "nanopos";
58 | extraGroups = [ "keys" ];
59 | };
60 | users.groups.nanopos = {
61 | name = "nanopos";
62 | };
63 |
64 | systemd.services.nanopos = {
65 | description = "Run nanopos";
66 | wantedBy = [ "multi-user.target" ];
67 | requires = [ "lightning-charge.service" ];
68 | after = [ "lightning-charge.service" ];
69 | serviceConfig = {
70 | EnvironmentFile = "/secrets/lightning-charge-api-token-for-nanopos";
71 | ExecStart = "${pkgs.nanopos}/bin/nanopos -y ${cfg.itemsFile} -p ${toString cfg.port} --show-bolt11";
72 |
73 | User = "nanopos";
74 | Restart = "on-failure";
75 | RestartSec = "10s";
76 | PrivateTmp = "true";
77 | ProtectSystem = "full";
78 | NoNewPrivileges = "true";
79 | PrivateDevices = "true";
80 | };
81 | };
82 | };
83 | }
84 |
--------------------------------------------------------------------------------
/modules/nix-bitcoin-pkgs.nix:
--------------------------------------------------------------------------------
1 | { config, pkgs, ... }:
2 | let
3 | nixpkgs-pinned = import ../pkgs/nixpkgs-pinned.nix;
4 | nixpkgs-unstable = import nixpkgs-pinned.nixpkgs-unstable { };
5 | in {
6 | disabledModules = [ "services/security/tor.nix" ];
7 | imports = [
8 | (nixpkgs-pinned.nixpkgs-unstable + "/nixos/modules/services/security/tor.nix")
9 | ];
10 |
11 | nixpkgs.overlays = [ (import ../overlay.nix) ];
12 |
13 | nixpkgs.config.packageOverrides = pkgs: {
14 | # Use bitcoin and clightning from unstable
15 | bitcoin = nixpkgs-unstable.bitcoin.override { };
16 | altcoins.bitcoind = nixpkgs-unstable.altcoins.bitcoind.override { };
17 | clightning = nixpkgs-unstable.clightning.override { };
18 | };
19 | }
20 |
--------------------------------------------------------------------------------
/modules/nix-bitcoin-webindex.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.nix-bitcoin-webindex;
7 | indexFile = pkgs.writeText "index.html" ''
8 |
9 |
10 |
11 |
12 | nix-bitcoin
13 |
14 |
15 |
16 |
19 |
20 |
21 |
22 | lightning node: CLIGHTNING_ID
23 |
24 |
25 |
26 |
27 | '';
28 | createWebIndex = pkgs.writeText "make-index.sh" ''
29 | set -e
30 | mkdir -p /var/www/
31 | cp ${indexFile} /var/www/index.html
32 | chown -R nginx /var/www/
33 | nodeinfo
34 | . <(nodeinfo)
35 | sed -i "s/CLIGHTNING_ID/$CLIGHTNING_ID/g" /var/www/index.html
36 | '';
37 | in {
38 | options.services.nix-bitcoin-webindex = {
39 | enable = mkOption {
40 | type = types.bool;
41 | default = false;
42 | description = ''
43 | If enabled, the webindex service will be installed.
44 | '';
45 | };
46 | };
47 |
48 | config = mkIf cfg.enable {
49 | services.nginx = {
50 | enable = true;
51 | virtualHosts."_" = {
52 | root = "/var/www";
53 | extraConfig = ''
54 | location /store/ {
55 | proxy_pass http://127.0.0.1:${toString config.services.nanopos.port};
56 | rewrite /store/(.*) /$1 break;
57 | }
58 | '';
59 | };
60 | };
61 | services.tor.hiddenServices.nginx = {
62 | map = [{
63 | port = 80;
64 | } {
65 | port = 443;
66 | }];
67 | version = 3;
68 | };
69 |
70 | # create-web-index
71 | systemd.services.create-web-index = {
72 | description = "Get node info";
73 | wantedBy = [ "multi-user.target" ];
74 | after = [ "nodeinfo.service" ];
75 | path = [ pkgs.nodeinfo pkgs.clightning pkgs.jq pkgs.sudo ];
76 | serviceConfig = {
77 | ExecStart="${pkgs.bash}/bin/bash ${createWebIndex}";
78 | User = "root";
79 | Type = "simple";
80 | RemainAfterExit="yes";
81 | Restart = "on-failure";
82 | RestartSec = "10s";
83 | };
84 | };
85 | };
86 | }
87 |
--------------------------------------------------------------------------------
/modules/nix-bitcoin.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.nix-bitcoin;
7 | operatorCopySSH = pkgs.writeText "operator-copy-ssh.sh" ''
8 | mkdir -p ${config.users.users.operator.home}/.ssh
9 | if [ -e "${config.users.users.root.home}/.vbox-nixops-client-key" ]; then
10 | cp ${config.users.users.root.home}/.vbox-nixops-client-key ${config.users.users.operator.home}/.ssh/authorized_keys
11 | fi
12 | if [ -e "/etc/ssh/authorized_keys.d/root" ]; then
13 | cat /etc/ssh/authorized_keys.d/root >> ${config.users.users.operator.home}/.ssh/authorized_keys
14 | fi
15 | chown -R operator ${config.users.users.operator.home}/.ssh
16 | '';
17 | in {
18 | imports = [
19 | ./nix-bitcoin-pkgs.nix
20 | ./bitcoind.nix
21 | ./clightning.nix
22 | ./lightning-charge.nix
23 | ./nanopos.nix
24 | ./nix-bitcoin-webindex.nix
25 | ./liquid.nix
26 | ./spark-wallet.nix
27 | ./electrs.nix
28 | ./onion-chef.nix
29 | ./recurring-donations.nix
30 | ];
31 |
32 | options.services.nix-bitcoin = {
33 | enable = mkOption {
34 | type = types.bool;
35 | default = false;
36 | description = ''
37 | If enabled, the nix-bitcoin service will be installed.
38 | '';
39 | };
40 | };
41 |
42 | config = mkIf cfg.enable {
43 | networking.firewall.enable = true;
44 |
45 | # Tor
46 | services.tor.enable = true;
47 | services.tor.client.enable = true;
48 |
49 | # Tor SSH service
50 | services.tor.hiddenServices.sshd = {
51 | map = [{
52 | port = 22;
53 | }];
54 | version = 3;
55 | };
56 |
57 | # bitcoind
58 | services.bitcoind.enable = true;
59 | services.bitcoind.listen = true;
60 | services.bitcoind.sysperms = if config.services.electrs.enable then true else null;
61 | services.bitcoind.disablewallet = if config.services.electrs.enable then true else null;
62 | services.bitcoind.proxy = config.services.tor.client.socksListenAddress;
63 | services.bitcoind.port = 8333;
64 | services.bitcoind.rpcuser = "bitcoinrpc";
65 | services.bitcoind.extraConfig = ''
66 | assumevalid=0000000000000000000726d186d6298b5054b9a5c49639752294b322a305d240
67 | addnode=ecoc5q34tmbq54wl.onion
68 | discover=0
69 | '';
70 | services.bitcoind.prune = 0;
71 | services.bitcoind.dbCache = 1000;
72 | services.tor.hiddenServices.bitcoind = {
73 | map = [{
74 | port = config.services.bitcoind.port;
75 | }];
76 | version = 3;
77 | };
78 |
79 | # Add bitcoinrpc group
80 | users.groups.bitcoinrpc = {};
81 |
82 | # clightning
83 | services.clightning.bitcoin-rpcuser = config.services.bitcoind.rpcuser;
84 | services.clightning.proxy = config.services.tor.client.socksListenAddress;
85 | services.clightning.always-use-proxy = true;
86 | services.clightning.bind-addr = "127.0.0.1:9735";
87 | services.tor.hiddenServices.clightning = {
88 | map = [{
89 | port = 9375; toPort = 9375;
90 | }];
91 | version = 3;
92 | };
93 |
94 | # Create user operator which can use bitcoin-cli and lightning-cli
95 | users.users.operator = {
96 | isNormalUser = true;
97 | extraGroups = [ config.services.bitcoind.group ]
98 | ++ (if config.services.clightning.enable then [ "clightning" ] else [ ])
99 | ++ (if config.services.liquidd.enable then [ config.services.liquidd.group ] else [ ]);
100 | };
101 | # Give operator access to onion hostnames
102 | services.onion-chef.enable = true;
103 | services.onion-chef.access.operator = [ "bitcoind" "clightning" "nginx" "liquidd" "spark-wallet" "electrs" "sshd" ];
104 |
105 | environment.interactiveShellInit = ''
106 | alias bitcoin-cli='bitcoin-cli -datadir=${config.services.bitcoind.dataDir}'
107 | alias lightning-cli='sudo -u clightning lightning-cli --lightning-dir=${config.services.clightning.dataDir}'
108 | '' + (if config.services.liquidd.enable then ''
109 | alias liquid-cli='liquid-cli -datadir=${config.services.liquidd.dataDir}'
110 | '' else "");
111 | # Unfortunately c-lightning doesn't allow setting the permissions of the rpc socket
112 | # https://github.com/ElementsProject/lightning/issues/1366
113 | security.sudo.configFile = (
114 | if config.services.clightning.enable then ''
115 | operator ALL=(clightning) NOPASSWD: ALL
116 | ''
117 | else ""
118 | );
119 |
120 | # Give root ssh access to the operator account
121 | systemd.services.copy-root-authorized-keys = {
122 | description = "Copy root authorized keys";
123 | wantedBy = [ "multi-user.target" ];
124 | serviceConfig = {
125 | ExecStart = "${pkgs.bash}/bin/bash \"${operatorCopySSH}\"";
126 | user = "root";
127 | type = "oneshot";
128 | };
129 | };
130 |
131 | services.liquidd.rpcuser = "liquidrpc";
132 | services.liquidd.prune = 1000;
133 | services.liquidd.extraConfig = "
134 | mainchainrpcuser=${config.services.bitcoind.rpcuser}
135 | mainchainrpcport=8332
136 | ";
137 | services.liquidd.listen = true;
138 | services.liquidd.proxy = config.services.tor.client.socksListenAddress;
139 | services.liquidd.port = 7042;
140 | services.tor.hiddenServices.liquidd = {
141 | map = [{
142 | port = config.services.liquidd.port; toPort = config.services.liquidd.port;
143 | }];
144 | version = 3;
145 | };
146 |
147 | services.spark-wallet.onion-service = true;
148 | services.electrs.port = 50001;
149 | services.electrs.onionport = 50002;
150 | services.electrs.nginxport = 50003;
151 | services.electrs.high-memory = false;
152 | services.tor.hiddenServices.electrs = {
153 | map = [{
154 | port = config.services.electrs.onionport; toPort = config.services.electrs.nginxport;
155 | }];
156 | version = 3;
157 | };
158 | environment.systemPackages = with pkgs; [
159 | tor
160 | bitcoin
161 | nodeinfo
162 | banlist
163 | jq
164 | ]
165 | ++ optionals config.services.clightning.enable [clightning]
166 | ++ optionals config.services.lightning-charge.enable [lightning-charge]
167 | ++ optionals config.services.nanopos.enable [nanopos]
168 | ++ optionals config.services.nix-bitcoin-webindex.enable [nginx]
169 | ++ optionals config.services.liquidd.enable [liquidd]
170 | ++ optionals config.services.spark-wallet.enable [spark-wallet]
171 | ++ optionals config.services.electrs.enable [electrs];
172 | };
173 | }
174 |
175 |
--------------------------------------------------------------------------------
/modules/onion-chef.nix:
--------------------------------------------------------------------------------
1 | # The onion chef module allows unprivileged users to read onion hostnames.
2 | # By default the onion hostnames in /var/lib/tor/onion are only readable by the
3 | # tor user. The onion chef copies the onion hostnames into into
4 | # /var/lib/onion-chef and sets permissions according to the access option.
5 |
6 | { config, lib, pkgs, ... }:
7 |
8 | with lib;
9 |
10 | let
11 | cfg = config.services.onion-chef;
12 | dataDir = "/var/lib/onion-chef/";
13 | onion-chef-script = pkgs.writeScript "onion-chef.sh" ''
14 | # wait until tor is up
15 | until ls -l /var/lib/tor/state; do sleep 1; done
16 |
17 | mkdir -p -m 0755 ${dataDir}
18 | cd ${dataDir}
19 |
20 | # Create directory for every user and set permissions
21 | ${ builtins.foldl'
22 | (x: user: x +
23 | ''
24 | mkdir -p -m 0700 ${user}
25 | chown ${user} ${user}
26 | # Copy onion hostnames into the user's directory
27 | ${ builtins.foldl'
28 | (x: onion: x +
29 | ''
30 | ONION_FILE=/var/lib/tor/onion/${onion}/hostname
31 | if [ -e "$ONION_FILE" ]; then
32 | cp $ONION_FILE ${user}/${onion}
33 | chown ${user} ${user}/${onion}
34 | fi
35 | '')
36 | ""
37 | (builtins.getAttr user cfg.access)
38 | }
39 | '')
40 | ""
41 | (builtins.attrNames cfg.access)
42 | }
43 | '';
44 | in {
45 | options.services.onion-chef = {
46 | enable = mkOption {
47 | type = types.bool;
48 | default = false;
49 | description = ''
50 | If enabled, the onion-chef service will be installed.
51 | '';
52 | };
53 | access = mkOption {
54 | type = types.attrs;
55 | default = {};
56 | description = ''
57 | This option controls who is allowed to access onion hostnames. For
58 | example the following allows the user operator to access the bitcoind
59 | and clightning onion.
60 | {
61 | "operator" = [ "bitcoind" "clightning" ];
62 | };
63 | The onion hostnames can then be read from
64 | /var/lib/onion-chef/.
65 | '';
66 | };
67 | };
68 |
69 | config = mkIf cfg.enable {
70 | systemd.services.onion-chef = {
71 | description = "Run onion-chef";
72 | wantedBy = [ "multi-user.target" ];
73 | requires = [ "tor.service" ];
74 | partOf = [ "tor.service" ];
75 | after = [ "tor.service" ];
76 | serviceConfig = {
77 | ExecStart = "${pkgs.bash}/bin/bash ${onion-chef-script}";
78 | User = "root";
79 | Type = "oneshot";
80 | PrivateTmp = "true";
81 | ProtectSystem = "full";
82 | NoNewPrivileges = "true";
83 | PrivateDevices = "true";
84 | };
85 | };
86 | };
87 | }
88 |
--------------------------------------------------------------------------------
/modules/recurring-donations.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.recurring-donations;
7 | recurring-donations-script = pkgs.writeScript "recurring-donations.sh" ''
8 | LNCLI="lightning-cli --lightning-dir=${config.services.clightning.dataDir}"
9 | pay_tallycoin() {
10 | NAME=$1
11 | AMOUNT=$2
12 | echo Attempting to pay $AMOUNT sat to $NAME
13 | INVOICE=$(torsocks curl -d "satoshi_amount=$AMOUNT&payment_method=ln&id=$NAME&type=profile" -X POST https://api.tallyco.in/v1/payment/request/ | jq -r '.lightning_pay_request') 2> /dev/null
14 | if [ -z "$INVOICE" ] || [ "$INVOICE" = "null" ]; then
15 | echo "ERROR: did not get invoice from tallycoin"
16 | return
17 | fi
18 | # Decode invoice and compare amount with requested amount
19 | DECODED_AMOUNT=$($LNCLI decodepay "$INVOICE" | jq -r '.amount_msat' | head -c -8)
20 | if [ -z "$DECODED_AMOUNT" ] || [ "$DECODED_AMOUNT" = "null" ]; then
21 | echo "ERROR: did not get response from clightning"
22 | return
23 | fi
24 | if [ $DECODED_AMOUNT -eq $AMOUNT ]; then
25 | echo Paying with invoice "$INVOICE"
26 | $LNCLI pay "$INVOICE"
27 | else
28 | echo ERROR: requested amount and invoice amount do not match. $AMOUNT vs $DECODED_AMOUNT
29 | return
30 | fi
31 | }
32 | ${ builtins.foldl'
33 | (x: receiver: x +
34 | ''
35 | pay_tallycoin ${receiver} ${toString (builtins.getAttr receiver cfg.tallycoin)}
36 | '')
37 | ""
38 | (builtins.attrNames cfg.tallycoin)
39 | }
40 | '';
41 | in {
42 | options.services.recurring-donations = {
43 | enable = mkOption {
44 | type = types.bool;
45 | default = false;
46 | description = ''
47 | If enabled, the recurring-donations service will be installed.
48 | '';
49 | };
50 | tallycoin = mkOption {
51 | type = types.attrs;
52 | default = {};
53 | description = ''
54 | This option is used to specify tallycoin donation receivers using an
55 | attribute set. For example the following setting instructs the module
56 | to repeatedly send 1000 satoshis to djbooth007.
57 | {
58 | "djbooth007" = 1000;
59 | }
60 | '';
61 | };
62 | interval = mkOption {
63 | type = types.string;
64 | default = "Mon *-*-* 00:00:00";
65 | description = ''
66 | Schedules the donations. Default is weekly on Mon 00:00:00. See `man
67 | systemd.time` for further options.
68 | '';
69 | };
70 | randomizedDelaySec = mkOption {
71 | type = types.int;
72 | default = 86400;
73 | description = ''
74 | Random delay to add to scheduled time for donation. Default is one day.
75 | '';
76 | };
77 | };
78 |
79 | config = mkIf cfg.enable {
80 | systemd.services.recurring-donations = {
81 | description = "Run recurring-donations";
82 | requires = [ "clightning.service" ];
83 | after = [ "clightning.service" ];
84 | path = [ pkgs.clightning pkgs.curl pkgs.torsocks pkgs.sudo pkgs.jq ];
85 | serviceConfig = {
86 | ExecStart = "${pkgs.bash}/bin/bash ${recurring-donations-script}";
87 | # TODO: would be better if this was operator, but I don't get sudo
88 | # working inside the shell script
89 | User = "clightning";
90 | Type = "oneshot";
91 | PrivateTmp = "true";
92 | ProtectSystem = "full";
93 | NoNewPrivileges = "true";
94 | PrivateDevices = "true";
95 | };
96 | };
97 | systemd.timers.recurring-donations = {
98 | requires = [ "clightning.service" ];
99 | after = [ "clightning.service" ];
100 | timerConfig = {
101 | Unit = "recurring-donations.service";
102 | OnCalendar = cfg.interval;
103 | RandomizedDelaySec = toString cfg.randomizedDelaySec;
104 | };
105 | wantedBy = [ "multi-user.target" ];
106 | };
107 | };
108 | }
109 |
--------------------------------------------------------------------------------
/modules/spark-wallet.nix:
--------------------------------------------------------------------------------
1 | { config, lib, pkgs, ... }:
2 |
3 | with lib;
4 |
5 | let
6 | cfg = config.services.spark-wallet;
7 | dataDir = "/var/lib/spark-wallet/";
8 | onion-chef-service = (if cfg.onion-service then [ "onion-chef.service" ] else []);
9 | run-spark-wallet = pkgs.writeScript "run-spark-wallet" ''
10 | CMD="${pkgs.spark-wallet}/bin/spark-wallet --ln-path ${cfg.ln-path} -Q -k -c /secrets/spark-wallet-login"
11 | ${optionalString cfg.onion-service
12 | ''
13 | echo Getting onion hostname
14 | CMD="$CMD --public-url http://$(cat /var/lib/onion-chef/clightning/spark-wallet)"
15 | ''
16 | }
17 | echo Running $CMD
18 | $CMD
19 | '';
20 | in {
21 | options.services.spark-wallet = {
22 | enable = mkOption {
23 | type = types.bool;
24 | default = false;
25 | description = ''
26 | If enabled, the spark-wallet service will be installed.
27 | '';
28 | };
29 | ln-path = mkOption {
30 | type = types.path;
31 | default = "/var/lib/clightning";
32 | description = ''
33 | "The path of the clightning data directory.";
34 | '';
35 | };
36 | onion-service = mkOption {
37 | type = types.bool;
38 | default = false;
39 | description = ''
40 | "If enabled, configures spark-wallet to be reachable through an onion service.";
41 | '';
42 | };
43 | };
44 |
45 | config = mkIf cfg.enable {
46 | services.tor.enable = cfg.onion-service;
47 | services.tor.hiddenServices.spark-wallet = mkIf cfg.onion-service {
48 | map = [{
49 | port = 80; toPort = 9737;
50 | }];
51 | version = 3;
52 | };
53 | services.onion-chef.enable = cfg.onion-service;
54 | services.onion-chef.access.clightning = if cfg.onion-service then [ "spark-wallet" ] else [];
55 | systemd.services.spark-wallet = {
56 | description = "Run spark-wallet";
57 | wantedBy = [ "multi-user.target" ];
58 | requires = [ "clightning.service" ] ++ onion-chef-service;
59 | after = [ "clightning.service" ] ++ onion-chef-service;
60 | serviceConfig = {
61 | PermissionsStartOnly = "true";
62 | ExecStart = "${pkgs.bash}/bin/bash ${run-spark-wallet}";
63 | User = "clightning";
64 | Restart = "on-failure";
65 | RestartSec = "10s";
66 | PrivateTmp = "true";
67 | ProtectSystem = "full";
68 | NoNewPrivileges = "true";
69 | PrivateDevices = "true";
70 | };
71 | };
72 | };
73 | }
74 |
--------------------------------------------------------------------------------
/network/network-libvirtd.nix:
--------------------------------------------------------------------------------
1 | {
2 | bitcoin-node =
3 | { config, pkgs, ... }:
4 | {
5 | deployment.targetEnv = "libvirtd";
6 | deployment.libvirtd.memorySize = 8192; # megabytes
7 | deployment.libvirtd.vcpu = 4; # number of cpus
8 | deployment.libvirtd.headless = true;
9 | deployment.libvirtd.baseImageSize = 400;
10 | boot.kernelParams = [ "console=ttyS0,115200" ];
11 | deployment.libvirtd.extraDevicesXML = ''
12 |
13 |
14 |
15 |
16 |
17 |
18 | '';
19 | # Remove when fixed: https://github.com/NixOS/nixops/issues/931
20 | system.activationScripts.nixops-vm-fix-931 = {
21 | text = ''
22 | if ls -l /nix/store | grep sudo | grep -q nogroup; then
23 | mount -o remount,rw /nix/store
24 | chown -R root:nixbld /nix/store
25 | fi
26 | '';
27 | deps = [];
28 | };
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/network/network-vbox.nix:
--------------------------------------------------------------------------------
1 | {
2 | bitcoin-node =
3 | { config, pkgs, ... }:
4 | {
5 | deployment.targetEnv = "virtualbox";
6 | deployment.virtualbox.memorySize = 4096; # megabytes
7 | deployment.virtualbox.vcpu = 4; # number of cpus
8 | deployment.virtualbox.headless = true;
9 | };
10 | }
11 |
--------------------------------------------------------------------------------
/network/network.nix:
--------------------------------------------------------------------------------
1 | let
2 | secrets = import ../secrets/secrets.nix;
3 | bitcoin-rpcpassword = {
4 | text = secrets.bitcoinrpcpassword;
5 | destDir = "/secrets/";
6 | user = "bitcoin";
7 | group = "bitcoinrpc";
8 | permissions = "0440";
9 | };
10 | lightning-charge-api-token = {
11 | text = "API_TOKEN=" + secrets.lightning-charge-api-token;
12 | destDir = "/secrets/";
13 | user = "clightning";
14 | group = "clightning";
15 | permissions = "0440";
16 | };
17 | # variable is called CHARGE_TOKEN instead of API_TOKEN
18 | lightning-charge-api-token-for-nanopos = {
19 | text = "CHARGE_TOKEN=" + secrets.lightning-charge-api-token;
20 | destDir = "/secrets/";
21 | user = "nanopos";
22 | group = "nanopos";
23 | permissions = "0440";
24 | };
25 | liquid-rpcpassword = {
26 | text = secrets.liquidrpcpassword;
27 | destDir = "/secrets/";
28 | user = "liquid";
29 | group = "liquid";
30 | permissions = "0440";
31 | };
32 | spark-wallet-login = {
33 | text = "login=" + "spark-wallet:" + secrets.spark-wallet-password;
34 | destDir = "/secrets/";
35 | user = "clightning";
36 | group = "clightning";
37 | permissions = "0440";
38 | };
39 | ssl_certificate_key = {
40 | keyFile = ../secrets/ssl_certificate_key.key;
41 | destDir = "/secrets/";
42 | user = "nginx";
43 | group = "root";
44 | permissions = "0440";
45 | };
46 | ssl_certificate = {
47 | keyFile = ../secrets/ssl_certificate.crt;
48 | destDir = "/secrets/";
49 | user = "nginx";
50 | group = "root";
51 | permissions = "0440";
52 | };
53 | in {
54 | network.description = "Bitcoin Core node";
55 |
56 | bitcoin-node =
57 | { config, pkgs, ... }:
58 | let
59 | bitcoin-node = import ../configuration.nix;
60 | in {
61 | deployment.keys = {
62 | inherit bitcoin-rpcpassword;
63 | }
64 | // (if (config.services.lightning-charge.enable) then { inherit lightning-charge-api-token; } else { })
65 | // (if (config.services.nanopos.enable) then { inherit lightning-charge-api-token-for-nanopos; } else { })
66 | // (if (config.services.liquidd.enable) then { inherit liquid-rpcpassword; } else { })
67 | // (if (config.services.spark-wallet.enable) then { inherit spark-wallet-login; } else { })
68 | // (if (config.services.electrs.enable) then { inherit ssl_certificate_key ssl_certificate; } else { });
69 | } // (bitcoin-node { inherit config pkgs; });
70 | }
71 |
--------------------------------------------------------------------------------
/overlay.nix:
--------------------------------------------------------------------------------
1 | # You can use this file as a nixpkgs overlay.
2 | # It's useful in the case where you don't want to add the whole NUR namespace
3 | # to your configuration.
4 |
5 | self: super:
6 |
7 | let filterSet =
8 | (f: g: s: builtins.listToAttrs
9 | (map
10 | (n: { name = n; value = builtins.getAttr n s; })
11 | (builtins.filter
12 | (n: f n && g (builtins.getAttr n s))
13 | (builtins.attrNames s)
14 | )
15 | )
16 | );
17 | in filterSet
18 | (n: !(n=="lib"||n=="overlays"||n=="modules")) # filter out non-packages
19 | (p: true) # all packages are ok
20 | (import ./default.nix { pkgs = super; })
21 |
22 |
--------------------------------------------------------------------------------
/pkgs/banlist/banlist.sh:
--------------------------------------------------------------------------------
1 | set +e
2 |
3 | echo "Importing node banlist into bitcoind"
4 | # banlist taken from https://people.xiph.org/~greg/banlist.cli.txt
5 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 100.34.232.70/32 add 31557600
6 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 101.201.53.37/32 add 31557600
7 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 101.91.234.37/32 add 31557600
8 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 103.3.61.48/32 add 31557600
9 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.154.111.175/32 add 31557600
10 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.155.206.178/32 add 31557600
11 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.155.212.201/32 add 31557600
12 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.155.233.13/32 add 31557600
13 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.155.236.174/32 add 31557600
14 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.196.107.156/32 add 31557600
15 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.116.195/32 add 31557600
16 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.116.235/32 add 31557600
17 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.116.82/32 add 31557600
18 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.121.97/32 add 31557600
19 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.122.115/32 add 31557600
20 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.123.218/32 add 31557600
21 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.124.29/32 add 31557600
22 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.125.173/32 add 31557600
23 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.125.19/32 add 31557600
24 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.126.116/32 add 31557600
25 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.80.166/32 add 31557600
26 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.83.171/32 add 31557600
27 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.84.14/32 add 31557600
28 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.85.85/32 add 31557600
29 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.87.131/32 add 31557600
30 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.87.67/32 add 31557600
31 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.88.145/32 add 31557600
32 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.89.77/32 add 31557600
33 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.89.90/32 add 31557600
34 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.91.83/32 add 31557600
35 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.92.164/32 add 31557600
36 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.93.187/32 add 31557600
37 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.93.73/32 add 31557600
38 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.94.212/32 add 31557600
39 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.198.95.132/32 add 31557600
40 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.133.103/32 add 31557600
41 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.142.247/32 add 31557600
42 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.160.111/32 add 31557600
43 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.165.17/32 add 31557600
44 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.166.145/32 add 31557600
45 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.166.252/32 add 31557600
46 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.172.60/32 add 31557600
47 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.184.15/32 add 31557600
48 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.192.149/32 add 31557600
49 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.196.186/32 add 31557600
50 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.205.132/32 add 31557600
51 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.205.84/32 add 31557600
52 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.229.186/32 add 31557600
53 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.236.232/32 add 31557600
54 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.238.17/32 add 31557600
55 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.242.15/32 add 31557600
56 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.242.65/32 add 31557600
57 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.246.168/32 add 31557600
58 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.247.97/32 add 31557600
59 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.248.144/32 add 31557600
60 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.248.223/32 add 31557600
61 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.253.135/32 add 31557600
62 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.253.195/32 add 31557600
63 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.254.3/32 add 31557600
64 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.199.255.13/32 add 31557600
65 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.222.22.161/32 add 31557600
66 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 104.236.157.49/32 add 31557600
67 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 107.167.177.83/32 add 31557600
68 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 107.167.187.47/32 add 31557600
69 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 110.150.27.41/32 add 31557600
70 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 112.224.20.141/32 add 31557600
71 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 112.74.174.47/32 add 31557600
72 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 113.177.79.93/32 add 31557600
73 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 113.6.157.226/32 add 31557600
74 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 114.55.29.227/32 add 31557600
75 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 114.96.148.16/32 add 31557600
76 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 114.96.150.14/32 add 31557600
77 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 115.54.197.193/32 add 31557600
78 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 116.126.142.195/32 add 31557600
79 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 116.226.216.54/32 add 31557600
80 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 117.177.170.20/32 add 31557600
81 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 119.9.116.68/32 add 31557600
82 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 120.24.37.119/32 add 31557600
83 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 120.55.171.74/32 add 31557600
84 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 120.79.168.63/32 add 31557600
85 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 123.112.100.120/32 add 31557600
86 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 124.129.85.72/32 add 31557600
87 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 124.191.99.104/32 add 31557600
88 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 125.119.85.201/32 add 31557600
89 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 125.121.79.192/32 add 31557600
90 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 125.161.128.25/32 add 31557600
91 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 128.16.68.126/32 add 31557600
92 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 128.235.40.191/32 add 31557600
93 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 128.8.124.7/32 add 31557600
94 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 129.13.252.36/32 add 31557600
95 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 129.13.252.47/32 add 31557600
96 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 129.13.88.175/32 add 31557600
97 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 129.13.88.177/32 add 31557600
98 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 130.211.248.136/32 add 31557600
99 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 130.211.250.7/32 add 31557600
100 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 131.114.2.151/32 add 31557600
101 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 131.114.88.218/32 add 31557600
102 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 13.229.134.39/32 add 31557600
103 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 13.250.233.129/32 add 31557600
104 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 13.59.128.171/32 add 31557600
105 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 13.59.180.243/32 add 31557600
106 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 13.59.2.253/32 add 31557600
107 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 136.243.139.120/32 add 31557600
108 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 136.243.139.96/32 add 31557600
109 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.168.198/32 add 31557600
110 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.194.32/32 add 31557600
111 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.195.32/32 add 31557600
112 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.195.52/32 add 31557600
113 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.197.108/32 add 31557600
114 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.197.132/32 add 31557600
115 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.197.152/32 add 31557600
116 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.197.164/32 add 31557600
117 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.197.174/32 add 31557600
118 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.197.179/32 add 31557600
119 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.197.50/32 add 31557600
120 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.198.120/32 add 31557600
121 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.201.197/32 add 31557600
122 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.203.66/32 add 31557600
123 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.203.86/32 add 31557600
124 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.197.211.234/32 add 31557600
125 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.201.18.26/32 add 31557600
126 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.10.138/32 add 31557600
127 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.233.165/32 add 31557600
128 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.247.76/32 add 31557600
129 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.64.102/32 add 31557600
130 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.64.155/32 add 31557600
131 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.64.19/32 add 31557600
132 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.64.28/32 add 31557600
133 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.66.47/32 add 31557600
134 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.68.138/32 add 31557600
135 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.6.93/32 add 31557600
136 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.69.88/32 add 31557600
137 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.72.245/32 add 31557600
138 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.74.187/32 add 31557600
139 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.76.134/32 add 31557600
140 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.19/32 add 31557600
141 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.23/32 add 31557600
142 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.25/32 add 31557600
143 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.27/32 add 31557600
144 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.30/32 add 31557600
145 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.40/32 add 31557600
146 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.42/32 add 31557600
147 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.44/32 add 31557600
148 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.47/32 add 31557600
149 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.49/32 add 31557600
150 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.52/32 add 31557600
151 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.53/32 add 31557600
152 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.55/32 add 31557600
153 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.56/32 add 31557600
154 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 138.68.79.58/32 add 31557600
155 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.162.96.165/32 add 31557600
156 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.205.12.119/32 add 31557600
157 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.128.171/32 add 31557600
158 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.133.73/32 add 31557600
159 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.138.73/32 add 31557600
160 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.146.142/32 add 31557600
161 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.146.177/32 add 31557600
162 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.147.169/32 add 31557600
163 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.149.253/32 add 31557600
164 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.151.16/32 add 31557600
165 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.151.197/32 add 31557600
166 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.151.88/32 add 31557600
167 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.153.136/32 add 31557600
168 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.153.212/32 add 31557600
169 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.154.35/32 add 31557600
170 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.155.126/32 add 31557600
171 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.155.65/32 add 31557600
172 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.157.130/32 add 31557600
173 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.157.147/32 add 31557600
174 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.157.174/32 add 31557600
175 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.157.178/32 add 31557600
176 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.157.191/32 add 31557600
177 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.157.246/32 add 31557600
178 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.208.101/32 add 31557600
179 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.208.141/32 add 31557600
180 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.208.176/32 add 31557600
181 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.208.241/32 add 31557600
182 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.208.37/32 add 31557600
183 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.209.167/32 add 31557600
184 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.209.189/32 add 31557600
185 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.209.199/32 add 31557600
186 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.210.12/32 add 31557600
187 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.210.142/32 add 31557600
188 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.210.195/32 add 31557600
189 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.211.243/32 add 31557600
190 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.211.246/32 add 31557600
191 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.211.25/32 add 31557600
192 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.212.147/32 add 31557600
193 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.212.177/32 add 31557600
194 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.213.155/32 add 31557600
195 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.214.193/32 add 31557600
196 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 139.59.214.238/32 add 31557600
197 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 142.93.117.16/32 add 31557600
198 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 144.76.28.242/32 add 31557600
199 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 147.158.50.112/32 add 31557600
200 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 148.251.151.71/32 add 31557600
201 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 150.109.74.119/32 add 31557600
202 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 158.109.79.23/32 add 31557600
203 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.100.247.17/32 add 31557600
204 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.203.183.65/32 add 31557600
205 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.203.188.155/32 add 31557600
206 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.203.190.141/32 add 31557600
207 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.203.191.234/32 add 31557600
208 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.203.59.209/32 add 31557600
209 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.226.95.66/32 add 31557600
210 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 159.89.156.60/32 add 31557600
211 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 161.22.7.59/32 add 31557600
212 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 162.212.152.163/32 add 31557600
213 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 162.218.65.0/24 add 31557600
214 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 162.243.161.85/32 add 31557600
215 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 162.243.161.93/32 add 31557600
216 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 167.114.118.5/32 add 31557600
217 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 171.100.25.191/32 add 31557600
218 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 171.81.42.51/32 add 31557600
219 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 173.212.193.11/32 add 31557600
220 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 173.212.193.23/32 add 31557600
221 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 173.232.228.146/32 add 31557600
222 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 174.129.116.81/32 add 31557600
223 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 176.36.229.22/32 add 31557600
224 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 178.236.135.2/32 add 31557600
225 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 178.62.73.148/32 add 31557600
226 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 180.126.151.154/32 add 31557600
227 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 180.173.203.229/32 add 31557600
228 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 180.180.236.248/32 add 31557600
229 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 180.222.28.231/32 add 31557600
230 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 18.196.84.227/32 add 31557600
231 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 18.217.214.141/32 add 31557600
232 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 182.99.217.236/32 add 31557600
233 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 183.164.224.99/32 add 31557600
234 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 185.185.41.6/32 add 31557600
235 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.116.17.178/32 add 31557600
236 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.116.56.84/32 add 31557600
237 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.166.124.96/32 add 31557600
238 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.166.161.228/32 add 31557600
239 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.166.167.205/32 add 31557600
240 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.166.69.73/32 add 31557600
241 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.172.159.187/32 add 31557600
242 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.195.105.36/32 add 31557600
243 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.227.8.13/32 add 31557600
244 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.242.137.68/32 add 31557600
245 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 188.65.213.21/32 add 31557600
246 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 190.147.110.61/32 add 31557600
247 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 190.88.224.236/32 add 31557600
248 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 190.88.227.234/32 add 31557600
249 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 190.88.231.42/32 add 31557600
250 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.241.128.23/32 add 31557600
251 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.241.133.93/32 add 31557600
252 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.241.135.239/32 add 31557600
253 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.241.137.234/32 add 31557600
254 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.241.146.86/32 add 31557600
255 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.34.56.123/32 add 31557600
256 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.34.56.155/32 add 31557600
257 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.81.211.39/32 add 31557600
258 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.81.219.136/32 add 31557600
259 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 192.99.69.179/32 add 31557600
260 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 193.41.77.77/32 add 31557600
261 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 193.93.217.111/32 add 31557600
262 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 194.230.155.245/32 add 31557600
263 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.199.65.181/32 add 31557600
264 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.199.74.187/32 add 31557600
265 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.199.85.177/32 add 31557600
266 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.199.86.159/32 add 31557600
267 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.199.88.211/32 add 31557600
268 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.211.100.103/32 add 31557600
269 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.211.114.204/32 add 31557600
270 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.211.117.235/32 add 31557600
271 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.251.83.19/32 add 31557600
272 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 198.52.36.20/32 add 31557600
273 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 202.108.211.56/32 add 31557600
274 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 202.36.179.109/32 add 31557600
275 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 204.236.202.17/32 add 31557600
276 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 205.251.22.236/32 add 31557600
277 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 205.251.23.80/32 add 31557600
278 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 205.251.23.85/32 add 31557600
279 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 205.251.23.93/32 add 31557600
280 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 205.251.85.156/32 add 31557600
281 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 205.251.85.157/32 add 31557600
282 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 206.189.178.186/32 add 31557600
283 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 208.68.37.151/32 add 31557600
284 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 213.231.3.100/32 add 31557600
285 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 213.32.65.9/32 add 31557600
286 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 217.238.212.39/32 add 31557600
287 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 217.65.245.111/32 add 31557600
288 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 217.66.156.111/32 add 31557600
289 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 218.76.75.55/32 add 31557600
290 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 218.79.79.110/32 add 31557600
291 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 221.233.151.38/32 add 31557600
292 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 221.6.6.157/32 add 31557600
293 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 222.186.76.177/32 add 31557600
294 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 223.207.244.114/32 add 31557600
295 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 223.220.112.31/32 add 31557600
296 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.0/24 add 31557600
297 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.2/32 add 31557600
298 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.51/32 add 31557600
299 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.52/32 add 31557600
300 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.54/32 add 31557600
301 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.57/32 add 31557600
302 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.59/32 add 31557600
303 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.60/32 add 31557600
304 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.61/32 add 31557600
305 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 23.92.36.62/32 add 31557600
306 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 24.108.150.215/32 add 31557600
307 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 24.184.39.126/32 add 31557600
308 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 24.48.79.56/32 add 31557600
309 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 24.77.157.117/32 add 31557600
310 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban [2604:d500:4:1::2]/128 add 31557600
311 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 31.146.136.126/32 add 31557600
312 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 31.146.211.3/32 add 31557600
313 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 31.91.180.41/32 add 31557600
314 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 34.200.192.60/32 add 31557600
315 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 34.209.138.25/32 add 31557600
316 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 34.212.140.4/32 add 31557600
317 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 34.231.206.193/32 add 31557600
318 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.160.112.82/32 add 31557600
319 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.161.108.245/32 add 31557600
320 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.162.102.150/32 add 31557600
321 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.163.147.161/32 add 31557600
322 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.163.50.147/32 add 31557600
323 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.164.118.137/32 add 31557600
324 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.164.243.242/32 add 31557600
325 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.164.37.18/32 add 31557600
326 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.165.144.136/32 add 31557600
327 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.165.147.171/32 add 31557600
328 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.166.151.170/32 add 31557600
329 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.166.164.54/32 add 31557600
330 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.166.212.106/32 add 31557600
331 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.166.2.145/32 add 31557600
332 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.166.249.115/32 add 31557600
333 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.166.66.139/32 add 31557600
334 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.167.105.93/32 add 31557600
335 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.167.213.185/32 add 31557600
336 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.167.246.9/32 add 31557600
337 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.167.88.149/32 add 31557600
338 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.131.115/32 add 31557600
339 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.131.47/32 add 31557600
340 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.135.140/32 add 31557600
341 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.137.128/32 add 31557600
342 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.137.70/32 add 31557600
343 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.142.91/32 add 31557600
344 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.143.8/32 add 31557600
345 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.144.215/32 add 31557600
346 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.145.105/32 add 31557600
347 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.146.52/32 add 31557600
348 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.150.22/32 add 31557600
349 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.162.249/32 add 31557600
350 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.166.87/32 add 31557600
351 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.169.92/32 add 31557600
352 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.172.62/32 add 31557600
353 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.174.92/32 add 31557600
354 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.185.175.242/32 add 31557600
355 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.10.3/32 add 31557600
356 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.195.26/32 add 31557600
357 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.198.89/32 add 31557600
358 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.199.121/32 add 31557600
359 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.199.237/32 add 31557600
360 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.200.6/32 add 31557600
361 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.202.111/32 add 31557600
362 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.202.137/32 add 31557600
363 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.203.246/32 add 31557600
364 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.204.226/32 add 31557600
365 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.204.47/32 add 31557600
366 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.205.4/32 add 31557600
367 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.207.10/32 add 31557600
368 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.207.173/32 add 31557600
369 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.209.12/32 add 31557600
370 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.209.186/32 add 31557600
371 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.212.60/32 add 31557600
372 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.214.130/32 add 31557600
373 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.215.241/32 add 31557600
374 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.219.4/32 add 31557600
375 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.221.109/32 add 31557600
376 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.221.148/32 add 31557600
377 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.222.141/32 add 31557600
378 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.187.222.162/32 add 31557600
379 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.189.224.29/32 add 31557600
380 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.189.241.70/32 add 31557600
381 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 35.196.46.145/32 add 31557600
382 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 37.110.41.196/32 add 31557600
383 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 39.100.42.143/32 add 31557600
384 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 39.100.48.18/32 add 31557600
385 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 39.98.235.18/32 add 31557600
386 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 42.114.31.67/32 add 31557600
387 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 42.115.155.120/32 add 31557600
388 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 42.153.63.67/32 add 31557600
389 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 45.32.117.240/32 add 31557600
390 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 45.32.161.204/32 add 31557600
391 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 45.33.65.130/32 add 31557600
392 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 45.33.95.186/32 add 31557600
393 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.101.229/32 add 31557600
394 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.101.43/32 add 31557600
395 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.105.124/32 add 31557600
396 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.108.3/32 add 31557600
397 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.109.46/32 add 31557600
398 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.110.115/32 add 31557600
399 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.110.1/32 add 31557600
400 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.110.58/32 add 31557600
401 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.122.164/32 add 31557600
402 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.129.99/32 add 31557600
403 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.146.36/32 add 31557600
404 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.148.250/32 add 31557600
405 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.153.224/32 add 31557600
406 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.160.168/32 add 31557600
407 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.175.99/32 add 31557600
408 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.181.91/32 add 31557600
409 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.187.17/32 add 31557600
410 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.187.98/32 add 31557600
411 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.192.207/32 add 31557600
412 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.192.63/32 add 31557600
413 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.196.177/32 add 31557600
414 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.197.155/32 add 31557600
415 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.200.194/32 add 31557600
416 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.213.145/32 add 31557600
417 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.217.211/32 add 31557600
418 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.220.70/32 add 31557600
419 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.228.246/32 add 31557600
420 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.236.112/32 add 31557600
421 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.243.105/32 add 31557600
422 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.246.115/32 add 31557600
423 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.246.205/32 add 31557600
424 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.96.79/32 add 31557600
425 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.97.120/32 add 31557600
426 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.97.129/32 add 31557600
427 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.97.50/32 add 31557600
428 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.101.99.121/32 add 31557600
429 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.166.175.44/32 add 31557600
430 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.39.228.130/32 add 31557600
431 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 46.63.26.63/32 add 31557600
432 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.52.197.151/32 add 31557600
433 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.52.41.23/32 add 31557600
434 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.74.234.98/32 add 31557600
435 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.88.49.242/32 add 31557600
436 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.88.57.29/32 add 31557600
437 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.89.15.18/32 add 31557600
438 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.89.179.74/32 add 31557600
439 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.90.209.151/32 add 31557600
440 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.90.4.203/32 add 31557600
441 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.90.97.52/32 add 31557600
442 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.91.74.77/32 add 31557600
443 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.91.77.119/32 add 31557600
444 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.91.89.32/32 add 31557600
445 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.93.173.17/32 add 31557600
446 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.94.154.84/32 add 31557600
447 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.95.213.15/32 add 31557600
448 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 47.97.8.90/32 add 31557600
449 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 49.70.60.46/32 add 31557600
450 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 49.70.62.254/32 add 31557600
451 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 49.79.53.219/32 add 31557600
452 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 49.89.114.71/32 add 31557600
453 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 51.15.185.141/32 add 31557600
454 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 51.15.204.61/32 add 31557600
455 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 5.129.191.17/32 add 31557600
456 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 5.136.219.85/32 add 31557600
457 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 51.37.247.105/32 add 31557600
458 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 5.140.28.62/32 add 31557600
459 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 5.141.224.117/32 add 31557600
460 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 5.158.111.157/32 add 31557600
461 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.10.210.214/32 add 31557600
462 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.10.35.42/32 add 31557600
463 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.11.12.45/32 add 31557600
464 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.114.184/32 add 31557600
465 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.121.157/32 add 31557600
466 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.129.148/32 add 31557600
467 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.133.108/32 add 31557600
468 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.134.123/32 add 31557600
469 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.135.10/32 add 31557600
470 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.145.28/32 add 31557600
471 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.15.158/32 add 31557600
472 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.151.92/32 add 31557600
473 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.154.142/32 add 31557600
474 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.157.2/32 add 31557600
475 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.19.58/32 add 31557600
476 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.40.189/32 add 31557600
477 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.41.63/32 add 31557600
478 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.43.253/32 add 31557600
479 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.64.82/32 add 31557600
480 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.68.171/32 add 31557600
481 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.88.94/32 add 31557600
482 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.89.102/32 add 31557600
483 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.89.71/32 add 31557600
484 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.14.99.112/32 add 31557600
485 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.192.180.114/32 add 31557600
486 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.221.215.88/32 add 31557600
487 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.221.216.10/32 add 31557600
488 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.221.217.94/32 add 31557600
489 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.221.238.158/32 add 31557600
490 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.221.239.13/32 add 31557600
491 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.26.243.224/32 add 31557600
492 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.26.77.177/32 add 31557600
493 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.27.249.252/32 add 31557600
494 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.32.7.236/32 add 31557600
495 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.33.162.224/32 add 31557600
496 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.36.232.32/32 add 31557600
497 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.36.70.110/32 add 31557600
498 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.37.35.57/32 add 31557600
499 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.3.87.201/32 add 31557600
500 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.39.141.69/32 add 31557600
501 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.39.235.86/32 add 31557600
502 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.40.55.75/32 add 31557600
503 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.108.95/32 add 31557600
504 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.129.105/32 add 31557600
505 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.139.59/32 add 31557600
506 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.216.82/32 add 31557600
507 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.25.239/32 add 31557600
508 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.36.27/32 add 31557600
509 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.57.158/32 add 31557600
510 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.41.73.185/32 add 31557600
511 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.42.161.253/32 add 31557600
512 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.42.164.103/32 add 31557600
513 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.42.45.47/32 add 31557600
514 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.42.61.230/32 add 31557600
515 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.42.65.31/32 add 31557600
516 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.42.67.118/32 add 31557600
517 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.43.125.33/32 add 31557600
518 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.72.52.99/32 add 31557600
519 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.76.154.206/32 add 31557600
520 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.77.224.110/32 add 31557600
521 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.77.226.221/32 add 31557600
522 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.77.229.135/32 add 31557600
523 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.77.230.102/32 add 31557600
524 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.77.235.168/32 add 31557600
525 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 52.77.251.201/32 add 31557600
526 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.166.177.141/32 add 31557600
527 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.12.231/32 add 31557600
528 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.124.61/32 add 31557600
529 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.150.75/32 add 31557600
530 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.173.154/32 add 31557600
531 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.178.190/32 add 31557600
532 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.184.60/32 add 31557600
533 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.196.130/32 add 31557600
534 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.200.230/32 add 31557600
535 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.203.224/32 add 31557600
536 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.210.27/32 add 31557600
537 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.227.23/32 add 31557600
538 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.30.232/32 add 31557600
539 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.34.94/32 add 31557600
540 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.37.203/32 add 31557600
541 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.60.157/32 add 31557600
542 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.73.13/32 add 31557600
543 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.82.11/32 add 31557600
544 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.169.90.9/32 add 31557600
545 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.179.161.154/32 add 31557600
546 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.179.190.142/32 add 31557600
547 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.179.191.117/32 add 31557600
548 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.197.173.71/32 add 31557600
549 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.200.90.164/32 add 31557600
550 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.201.12.166/32 add 31557600
551 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.218.119.167/32 add 31557600
552 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.223.136.62/32 add 31557600
553 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.245.51.127/32 add 31557600
554 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.251.130.195/32 add 31557600
555 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.251.137.109/32 add 31557600
556 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.251.178.246/32 add 31557600
557 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.251.240.116/32 add 31557600
558 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.252.134.21/32 add 31557600
559 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.252.238.189/32 add 31557600
560 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.254.139.16/32 add 31557600
561 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.254.164.157/32 add 31557600
562 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.254.177.190/32 add 31557600
563 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.254.178.160/32 add 31557600
564 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.254.223.47/32 add 31557600
565 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.255.144.164/32 add 31557600
566 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.255.145.70/32 add 31557600
567 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.255.155.245/32 add 31557600
568 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.255.155.30/32 add 31557600
569 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.255.160.87/32 add 31557600
570 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.255.161.164/32 add 31557600
571 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.255.162.123/32 add 31557600
572 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.37.205.126/32 add 31557600
573 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 54.92.30.11/32 add 31557600
574 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 59.110.63.71/32 add 31557600
575 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 61.138.58.57/32 add 31557600
576 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 61.188.24.95/32 add 31557600
577 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 64.137.146.240/32 add 31557600
578 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 64.146.129.18/32 add 31557600
579 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 66.133.78.103/32 add 31557600
580 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 66.177.77.213/32 add 31557600
581 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 66.42.48.121/32 add 31557600
582 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.129.144/32 add 31557600
583 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.130.21/32 add 31557600
584 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.136.80/32 add 31557600
585 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.137.64/32 add 31557600
586 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.138.209/32 add 31557600
587 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.160.50/32 add 31557600
588 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.161.224/32 add 31557600
589 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.161.52/32 add 31557600
590 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.165.171/32 add 31557600
591 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.166.146/32 add 31557600
592 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.169.163/32 add 31557600
593 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.169.44/32 add 31557600
594 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.169.74/32 add 31557600
595 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.173.186/32 add 31557600
596 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.173.197/32 add 31557600
597 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.173.31/32 add 31557600
598 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.174.20/32 add 31557600
599 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.174.255/32 add 31557600
600 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.182.20/32 add 31557600
601 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.183.8/32 add 31557600
602 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.184.143/32 add 31557600
603 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.185.196/32 add 31557600
604 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.189.158/32 add 31557600
605 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.189.60/32 add 31557600
606 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.189.92/32 add 31557600
607 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.205.190.187/32 add 31557600
608 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.207.80.143/32 add 31557600
609 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 67.207.80.65/32 add 31557600
610 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 68.183.30.201/32 add 31557600
611 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 69.41.171.168/32 add 31557600
612 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 71.15.195.191/32 add 31557600
613 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 71.171.127.198/32 add 31557600
614 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 72.36.89.11/32 add 31557600
615 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 73.218.245.30/32 add 31557600
616 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 74.105.23.21/32 add 31557600
617 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 74.124.33.10/32 add 31557600
618 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 77.129.230.226/32 add 31557600
619 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 77.240.103.12/32 add 31557600
620 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 77.74.9.11/32 add 31557600
621 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 78.46.190.33/32 add 31557600
622 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 78.46.190.34/32 add 31557600
623 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 79.138.134.192/32 add 31557600
624 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 80.251.183.146/32 add 31557600
625 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 80.92.178.116/32 add 31557600
626 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 82.130.103.18/32 add 31557600
627 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 82.198.178.186/32 add 31557600
628 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 85.180.177.90/32 add 31557600
629 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 85.66.198.144/32 add 31557600
630 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 86.120.188.134/32 add 31557600
631 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 86.133.212.131/32 add 31557600
632 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 86.62.89.183/32 add 31557600
633 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.198.205.197/32 add 31557600
634 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.230.53.181/32 add 31557600
635 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.167.175/32 add 31557600
636 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.167.186/32 add 31557600
637 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.192/32 add 31557600
638 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.195/32 add 31557600
639 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.203/32 add 31557600
640 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.204/32 add 31557600
641 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.211/32 add 31557600
642 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.212/32 add 31557600
643 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.214/32 add 31557600
644 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.240/32 add 31557600
645 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.241/32 add 31557600
646 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.242/32 add 31557600
647 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.250/32 add 31557600
648 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.251/32 add 31557600
649 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.252/32 add 31557600
650 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.168.67/32 add 31557600
651 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.169.225/32 add 31557600
652 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.169.233/32 add 31557600
653 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.169.247/32 add 31557600
654 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.169.252/32 add 31557600
655 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.170.66/32 add 31557600
656 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.170.67/32 add 31557600
657 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.172.106/32 add 31557600
658 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.172.114/32 add 31557600
659 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.172.117/32 add 31557600
660 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.173.48/32 add 31557600
661 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.173.75/32 add 31557600
662 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.173.91/32 add 31557600
663 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.174.203/32 add 31557600
664 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.174.54/32 add 31557600
665 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.174.88/32 add 31557600
666 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.175.119/32 add 31557600
667 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.175.1/32 add 31557600
668 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.175.19/32 add 31557600
669 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.175.30/32 add 31557600
670 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.176/32 add 31557600
671 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.194/32 add 31557600
672 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.195/32 add 31557600
673 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.220/32 add 31557600
674 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.237/32 add 31557600
675 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.241/32 add 31557600
676 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.244/32 add 31557600
677 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.44/32 add 31557600
678 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.67/32 add 31557600
679 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.78/32 add 31557600
680 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.79/32 add 31557600
681 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.81/32 add 31557600
682 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.184.84/32 add 31557600
683 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.115/32 add 31557600
684 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.121/32 add 31557600
685 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.139/32 add 31557600
686 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.141/32 add 31557600
687 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.148/32 add 31557600
688 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.194/32 add 31557600
689 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.199/32 add 31557600
690 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.48/32 add 31557600
691 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.185.58/32 add 31557600
692 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.186.13/32 add 31557600
693 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.186.136/32 add 31557600
694 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.186.139/32 add 31557600
695 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.186.9/32 add 31557600
696 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.187.170/32 add 31557600
697 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.187.182/32 add 31557600
698 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.187.89/32 add 31557600
699 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.188.128/32 add 31557600
700 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.188.129/32 add 31557600
701 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.189.113/32 add 31557600
702 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.189.17/32 add 31557600
703 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.189.18/32 add 31557600
704 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.189.19/32 add 31557600
705 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.189.229/32 add 31557600
706 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.189.4/32 add 31557600
707 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.111/32 add 31557600
708 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.112/32 add 31557600
709 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.119/32 add 31557600
710 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.203/32 add 31557600
711 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.205/32 add 31557600
712 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.214/32 add 31557600
713 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.215/32 add 31557600
714 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.219/32 add 31557600
715 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.220/32 add 31557600
716 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.227/32 add 31557600
717 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.55/32 add 31557600
718 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.57/32 add 31557600
719 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.65/32 add 31557600
720 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.67/32 add 31557600
721 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.190.68/32 add 31557600
722 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.100/32 add 31557600
723 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.198/32 add 31557600
724 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.200/32 add 31557600
725 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.203/32 add 31557600
726 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.228/32 add 31557600
727 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.229/32 add 31557600
728 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.90/32 add 31557600
729 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.95/32 add 31557600
730 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.96/32 add 31557600
731 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.97/32 add 31557600
732 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.98/32 add 31557600
733 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.191.99/32 add 31557600
734 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 88.99.91.47/32 add 31557600
735 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 90.135.212.19/32 add 31557600
736 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 91.210.84.28/32 add 31557600
737 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 92.38.128.79/32 add 31557600
738 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 93.50.140.170/32 add 31557600
739 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 94.16.71.71/32 add 31557600
740 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 94.16.73.112/32 add 31557600
741 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 94.237.44.67/32 add 31557600
742 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 97.34.193.230/32 add 31557600
743 | $1/bin/bitcoin-cli -datadir=/var/lib/bitcoind setban 99.237.228.185/32 add 31557600
744 | echo "Done loading banlist"
745 |
--------------------------------------------------------------------------------
/pkgs/banlist/default.nix:
--------------------------------------------------------------------------------
1 | {pkgs}:
2 |
3 | with pkgs;
4 | stdenv.mkDerivation {
5 | name = "banlist";
6 | src = ./banlist.sh;
7 |
8 | unpackPhase = "true";
9 | installPhase = ''
10 | mkdir -p $out
11 | mkdir -p $out/bin
12 | cp $src $out/bin/banlist
13 | chmod +x $out/bin/banlist
14 | '';
15 | }
16 |
--------------------------------------------------------------------------------
/pkgs/electrs/default.nix:
--------------------------------------------------------------------------------
1 | { pkgs }:
2 |
3 | with pkgs;
4 | rustPlatform.buildRustPackage rec {
5 | name = "electrs-${version}";
6 | version = "0.5.0";
7 |
8 | src = fetchFromGitHub {
9 | owner = "romanz";
10 | repo = "electrs";
11 | rev = "b2b7e1c42acc306df46e97f39d9ab19d2f6f24a8";
12 | sha256 = "1nz75vc170r6q2hbkyil818y6szrjsas1drxj9vyqls7n5w6whz1";
13 | };
14 |
15 | cargoSha256 = "1rvhgda4mbwpya8snjqh1z7fjzbabkmh44r4g9ibn83wbd4j32mi";
16 |
17 | LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
18 | buildInputs = [ clang ];
19 |
20 | meta = with lib; {
21 | description = "An efficient re-implementation of Electrum Server in Rust";
22 | homepage = https://github.com/romanz/electrs;
23 | maintainers = with maintainers; [ tailhook ];
24 | platforms = platforms.all;
25 | };
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/pkgs/lightning-charge/composition.nix:
--------------------------------------------------------------------------------
1 | # This file has been generated by node2nix 1.6.1. Do not edit!
2 |
3 | {pkgs ? import {
4 | inherit system;
5 | }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-10_x"}:
6 |
7 | let
8 | globalBuildInputs = pkgs.lib.attrValues (import ./supplement.nix {
9 | inherit nodeEnv;
10 | inherit (pkgs) fetchurl fetchgit;
11 | });
12 | nodeEnv = import ./node-env.nix {
13 | inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
14 | inherit nodejs;
15 | libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
16 | };
17 | in
18 | import ./node-packages.nix {
19 | inherit (pkgs) fetchurl fetchgit;
20 | inherit nodeEnv globalBuildInputs;
21 | }
--------------------------------------------------------------------------------
/pkgs/lightning-charge/default.nix:
--------------------------------------------------------------------------------
1 | { stdenv, pkgs, lib }:
2 | lib.head (lib.attrValues (import ./composition.nix {
3 | inherit pkgs;
4 | inherit (stdenv.hostPlatform) system;
5 | }))
6 |
--------------------------------------------------------------------------------
/pkgs/lightning-charge/generate.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env nix-shell
2 | #! nix-shell -i bash -p nodePackages.node2nix
3 | exec node2nix --nodejs-10 -i pkg.json -c composition.nix --no-copy-node-env --supplement-input supplement.json
4 |
--------------------------------------------------------------------------------
/pkgs/lightning-charge/node-env.nix:
--------------------------------------------------------------------------------
1 | import
2 |
--------------------------------------------------------------------------------
/pkgs/lightning-charge/pkg.json:
--------------------------------------------------------------------------------
1 | [
2 | { "lightning-charge": "^0.4.7" }
3 | ]
4 |
--------------------------------------------------------------------------------
/pkgs/lightning-charge/supplement.json:
--------------------------------------------------------------------------------
1 | [
2 | "node-pre-gyp"
3 | ]
4 |
--------------------------------------------------------------------------------
/pkgs/lightning-charge/supplement.nix:
--------------------------------------------------------------------------------
1 | # This file has been generated by node2nix 1.6.1. Do not edit!
2 |
3 | {nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
4 |
5 | let
6 | sources = {
7 | "abbrev-1.1.1" = {
8 | name = "abbrev";
9 | packageName = "abbrev";
10 | version = "1.1.1";
11 | src = fetchurl {
12 | url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
13 | sha512 = "nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==";
14 | };
15 | };
16 | "ansi-regex-2.1.1" = {
17 | name = "ansi-regex";
18 | packageName = "ansi-regex";
19 | version = "2.1.1";
20 | src = fetchurl {
21 | url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
22 | sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
23 | };
24 | };
25 | "aproba-1.2.0" = {
26 | name = "aproba";
27 | packageName = "aproba";
28 | version = "1.2.0";
29 | src = fetchurl {
30 | url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";
31 | sha512 = "Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==";
32 | };
33 | };
34 | "are-we-there-yet-1.1.5" = {
35 | name = "are-we-there-yet";
36 | packageName = "are-we-there-yet";
37 | version = "1.1.5";
38 | src = fetchurl {
39 | url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
40 | sha512 = "5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==";
41 | };
42 | };
43 | "balanced-match-1.0.0" = {
44 | name = "balanced-match";
45 | packageName = "balanced-match";
46 | version = "1.0.0";
47 | src = fetchurl {
48 | url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
49 | sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
50 | };
51 | };
52 | "brace-expansion-1.1.11" = {
53 | name = "brace-expansion";
54 | packageName = "brace-expansion";
55 | version = "1.1.11";
56 | src = fetchurl {
57 | url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
58 | sha512 = "iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==";
59 | };
60 | };
61 | "chownr-1.1.1" = {
62 | name = "chownr";
63 | packageName = "chownr";
64 | version = "1.1.1";
65 | src = fetchurl {
66 | url = "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz";
67 | sha512 = "j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==";
68 | };
69 | };
70 | "code-point-at-1.1.0" = {
71 | name = "code-point-at";
72 | packageName = "code-point-at";
73 | version = "1.1.0";
74 | src = fetchurl {
75 | url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
76 | sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
77 | };
78 | };
79 | "concat-map-0.0.1" = {
80 | name = "concat-map";
81 | packageName = "concat-map";
82 | version = "0.0.1";
83 | src = fetchurl {
84 | url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
85 | sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
86 | };
87 | };
88 | "console-control-strings-1.1.0" = {
89 | name = "console-control-strings";
90 | packageName = "console-control-strings";
91 | version = "1.1.0";
92 | src = fetchurl {
93 | url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
94 | sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
95 | };
96 | };
97 | "core-util-is-1.0.2" = {
98 | name = "core-util-is";
99 | packageName = "core-util-is";
100 | version = "1.0.2";
101 | src = fetchurl {
102 | url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
103 | sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
104 | };
105 | };
106 | "debug-2.6.9" = {
107 | name = "debug";
108 | packageName = "debug";
109 | version = "2.6.9";
110 | src = fetchurl {
111 | url = "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz";
112 | sha512 = "bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==";
113 | };
114 | };
115 | "deep-extend-0.6.0" = {
116 | name = "deep-extend";
117 | packageName = "deep-extend";
118 | version = "0.6.0";
119 | src = fetchurl {
120 | url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";
121 | sha512 = "LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==";
122 | };
123 | };
124 | "delegates-1.0.0" = {
125 | name = "delegates";
126 | packageName = "delegates";
127 | version = "1.0.0";
128 | src = fetchurl {
129 | url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
130 | sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
131 | };
132 | };
133 | "detect-libc-1.0.3" = {
134 | name = "detect-libc";
135 | packageName = "detect-libc";
136 | version = "1.0.3";
137 | src = fetchurl {
138 | url = "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz";
139 | sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b";
140 | };
141 | };
142 | "fs-minipass-1.2.5" = {
143 | name = "fs-minipass";
144 | packageName = "fs-minipass";
145 | version = "1.2.5";
146 | src = fetchurl {
147 | url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz";
148 | sha512 = "JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==";
149 | };
150 | };
151 | "fs.realpath-1.0.0" = {
152 | name = "fs.realpath";
153 | packageName = "fs.realpath";
154 | version = "1.0.0";
155 | src = fetchurl {
156 | url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
157 | sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
158 | };
159 | };
160 | "gauge-2.7.4" = {
161 | name = "gauge";
162 | packageName = "gauge";
163 | version = "2.7.4";
164 | src = fetchurl {
165 | url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
166 | sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
167 | };
168 | };
169 | "glob-7.1.3" = {
170 | name = "glob";
171 | packageName = "glob";
172 | version = "7.1.3";
173 | src = fetchurl {
174 | url = "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz";
175 | sha512 = "vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==";
176 | };
177 | };
178 | "has-unicode-2.0.1" = {
179 | name = "has-unicode";
180 | packageName = "has-unicode";
181 | version = "2.0.1";
182 | src = fetchurl {
183 | url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
184 | sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
185 | };
186 | };
187 | "iconv-lite-0.4.24" = {
188 | name = "iconv-lite";
189 | packageName = "iconv-lite";
190 | version = "0.4.24";
191 | src = fetchurl {
192 | url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
193 | sha512 = "v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==";
194 | };
195 | };
196 | "ignore-walk-3.0.1" = {
197 | name = "ignore-walk";
198 | packageName = "ignore-walk";
199 | version = "3.0.1";
200 | src = fetchurl {
201 | url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz";
202 | sha512 = "DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==";
203 | };
204 | };
205 | "inflight-1.0.6" = {
206 | name = "inflight";
207 | packageName = "inflight";
208 | version = "1.0.6";
209 | src = fetchurl {
210 | url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
211 | sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
212 | };
213 | };
214 | "inherits-2.0.3" = {
215 | name = "inherits";
216 | packageName = "inherits";
217 | version = "2.0.3";
218 | src = fetchurl {
219 | url = "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz";
220 | sha1 = "633c2c83e3da42a502f52466022480f4208261de";
221 | };
222 | };
223 | "ini-1.3.5" = {
224 | name = "ini";
225 | packageName = "ini";
226 | version = "1.3.5";
227 | src = fetchurl {
228 | url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz";
229 | sha512 = "RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==";
230 | };
231 | };
232 | "is-fullwidth-code-point-1.0.0" = {
233 | name = "is-fullwidth-code-point";
234 | packageName = "is-fullwidth-code-point";
235 | version = "1.0.0";
236 | src = fetchurl {
237 | url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
238 | sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
239 | };
240 | };
241 | "isarray-1.0.0" = {
242 | name = "isarray";
243 | packageName = "isarray";
244 | version = "1.0.0";
245 | src = fetchurl {
246 | url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
247 | sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
248 | };
249 | };
250 | "minimatch-3.0.4" = {
251 | name = "minimatch";
252 | packageName = "minimatch";
253 | version = "3.0.4";
254 | src = fetchurl {
255 | url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
256 | sha512 = "yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==";
257 | };
258 | };
259 | "minimist-0.0.8" = {
260 | name = "minimist";
261 | packageName = "minimist";
262 | version = "0.0.8";
263 | src = fetchurl {
264 | url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
265 | sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
266 | };
267 | };
268 | "minimist-1.2.0" = {
269 | name = "minimist";
270 | packageName = "minimist";
271 | version = "1.2.0";
272 | src = fetchurl {
273 | url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
274 | sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
275 | };
276 | };
277 | "minipass-2.3.5" = {
278 | name = "minipass";
279 | packageName = "minipass";
280 | version = "2.3.5";
281 | src = fetchurl {
282 | url = "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz";
283 | sha512 = "Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==";
284 | };
285 | };
286 | "minizlib-1.2.1" = {
287 | name = "minizlib";
288 | packageName = "minizlib";
289 | version = "1.2.1";
290 | src = fetchurl {
291 | url = "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz";
292 | sha512 = "7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==";
293 | };
294 | };
295 | "mkdirp-0.5.1" = {
296 | name = "mkdirp";
297 | packageName = "mkdirp";
298 | version = "0.5.1";
299 | src = fetchurl {
300 | url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
301 | sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
302 | };
303 | };
304 | "ms-2.0.0" = {
305 | name = "ms";
306 | packageName = "ms";
307 | version = "2.0.0";
308 | src = fetchurl {
309 | url = "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";
310 | sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
311 | };
312 | };
313 | "needle-2.2.4" = {
314 | name = "needle";
315 | packageName = "needle";
316 | version = "2.2.4";
317 | src = fetchurl {
318 | url = "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz";
319 | sha512 = "HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==";
320 | };
321 | };
322 | "nopt-4.0.1" = {
323 | name = "nopt";
324 | packageName = "nopt";
325 | version = "4.0.1";
326 | src = fetchurl {
327 | url = "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz";
328 | sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d";
329 | };
330 | };
331 | "npm-bundled-1.0.6" = {
332 | name = "npm-bundled";
333 | packageName = "npm-bundled";
334 | version = "1.0.6";
335 | src = fetchurl {
336 | url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz";
337 | sha512 = "8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==";
338 | };
339 | };
340 | "npm-packlist-1.4.1" = {
341 | name = "npm-packlist";
342 | packageName = "npm-packlist";
343 | version = "1.4.1";
344 | src = fetchurl {
345 | url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz";
346 | sha512 = "+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==";
347 | };
348 | };
349 | "npmlog-4.1.2" = {
350 | name = "npmlog";
351 | packageName = "npmlog";
352 | version = "4.1.2";
353 | src = fetchurl {
354 | url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
355 | sha512 = "2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==";
356 | };
357 | };
358 | "number-is-nan-1.0.1" = {
359 | name = "number-is-nan";
360 | packageName = "number-is-nan";
361 | version = "1.0.1";
362 | src = fetchurl {
363 | url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
364 | sha1 = "097b602b53422a522c1afb8790318336941a011d";
365 | };
366 | };
367 | "object-assign-4.1.1" = {
368 | name = "object-assign";
369 | packageName = "object-assign";
370 | version = "4.1.1";
371 | src = fetchurl {
372 | url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
373 | sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
374 | };
375 | };
376 | "once-1.4.0" = {
377 | name = "once";
378 | packageName = "once";
379 | version = "1.4.0";
380 | src = fetchurl {
381 | url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
382 | sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
383 | };
384 | };
385 | "os-homedir-1.0.2" = {
386 | name = "os-homedir";
387 | packageName = "os-homedir";
388 | version = "1.0.2";
389 | src = fetchurl {
390 | url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
391 | sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
392 | };
393 | };
394 | "os-tmpdir-1.0.2" = {
395 | name = "os-tmpdir";
396 | packageName = "os-tmpdir";
397 | version = "1.0.2";
398 | src = fetchurl {
399 | url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
400 | sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
401 | };
402 | };
403 | "osenv-0.1.5" = {
404 | name = "osenv";
405 | packageName = "osenv";
406 | version = "0.1.5";
407 | src = fetchurl {
408 | url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
409 | sha512 = "0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==";
410 | };
411 | };
412 | "path-is-absolute-1.0.1" = {
413 | name = "path-is-absolute";
414 | packageName = "path-is-absolute";
415 | version = "1.0.1";
416 | src = fetchurl {
417 | url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
418 | sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
419 | };
420 | };
421 | "process-nextick-args-2.0.0" = {
422 | name = "process-nextick-args";
423 | packageName = "process-nextick-args";
424 | version = "2.0.0";
425 | src = fetchurl {
426 | url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz";
427 | sha512 = "MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==";
428 | };
429 | };
430 | "rc-1.2.8" = {
431 | name = "rc";
432 | packageName = "rc";
433 | version = "1.2.8";
434 | src = fetchurl {
435 | url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz";
436 | sha512 = "y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==";
437 | };
438 | };
439 | "readable-stream-2.3.6" = {
440 | name = "readable-stream";
441 | packageName = "readable-stream";
442 | version = "2.3.6";
443 | src = fetchurl {
444 | url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";
445 | sha512 = "tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==";
446 | };
447 | };
448 | "rimraf-2.6.3" = {
449 | name = "rimraf";
450 | packageName = "rimraf";
451 | version = "2.6.3";
452 | src = fetchurl {
453 | url = "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz";
454 | sha512 = "mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==";
455 | };
456 | };
457 | "safe-buffer-5.1.2" = {
458 | name = "safe-buffer";
459 | packageName = "safe-buffer";
460 | version = "5.1.2";
461 | src = fetchurl {
462 | url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
463 | sha512 = "Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==";
464 | };
465 | };
466 | "safer-buffer-2.1.2" = {
467 | name = "safer-buffer";
468 | packageName = "safer-buffer";
469 | version = "2.1.2";
470 | src = fetchurl {
471 | url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
472 | sha512 = "YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==";
473 | };
474 | };
475 | "sax-1.2.4" = {
476 | name = "sax";
477 | packageName = "sax";
478 | version = "1.2.4";
479 | src = fetchurl {
480 | url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
481 | sha512 = "NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==";
482 | };
483 | };
484 | "semver-5.6.0" = {
485 | name = "semver";
486 | packageName = "semver";
487 | version = "5.6.0";
488 | src = fetchurl {
489 | url = "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz";
490 | sha512 = "RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==";
491 | };
492 | };
493 | "set-blocking-2.0.0" = {
494 | name = "set-blocking";
495 | packageName = "set-blocking";
496 | version = "2.0.0";
497 | src = fetchurl {
498 | url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
499 | sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
500 | };
501 | };
502 | "signal-exit-3.0.2" = {
503 | name = "signal-exit";
504 | packageName = "signal-exit";
505 | version = "3.0.2";
506 | src = fetchurl {
507 | url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";
508 | sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
509 | };
510 | };
511 | "string-width-1.0.2" = {
512 | name = "string-width";
513 | packageName = "string-width";
514 | version = "1.0.2";
515 | src = fetchurl {
516 | url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
517 | sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
518 | };
519 | };
520 | "string_decoder-1.1.1" = {
521 | name = "string_decoder";
522 | packageName = "string_decoder";
523 | version = "1.1.1";
524 | src = fetchurl {
525 | url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
526 | sha512 = "n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==";
527 | };
528 | };
529 | "strip-ansi-3.0.1" = {
530 | name = "strip-ansi";
531 | packageName = "strip-ansi";
532 | version = "3.0.1";
533 | src = fetchurl {
534 | url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
535 | sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
536 | };
537 | };
538 | "strip-json-comments-2.0.1" = {
539 | name = "strip-json-comments";
540 | packageName = "strip-json-comments";
541 | version = "2.0.1";
542 | src = fetchurl {
543 | url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
544 | sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
545 | };
546 | };
547 | "tar-4.4.8" = {
548 | name = "tar";
549 | packageName = "tar";
550 | version = "4.4.8";
551 | src = fetchurl {
552 | url = "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz";
553 | sha512 = "LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==";
554 | };
555 | };
556 | "util-deprecate-1.0.2" = {
557 | name = "util-deprecate";
558 | packageName = "util-deprecate";
559 | version = "1.0.2";
560 | src = fetchurl {
561 | url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
562 | sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
563 | };
564 | };
565 | "wide-align-1.1.3" = {
566 | name = "wide-align";
567 | packageName = "wide-align";
568 | version = "1.1.3";
569 | src = fetchurl {
570 | url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";
571 | sha512 = "QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==";
572 | };
573 | };
574 | "wrappy-1.0.2" = {
575 | name = "wrappy";
576 | packageName = "wrappy";
577 | version = "1.0.2";
578 | src = fetchurl {
579 | url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
580 | sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
581 | };
582 | };
583 | "yallist-3.0.3" = {
584 | name = "yallist";
585 | packageName = "yallist";
586 | version = "3.0.3";
587 | src = fetchurl {
588 | url = "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz";
589 | sha512 = "S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==";
590 | };
591 | };
592 | };
593 | in
594 | {
595 | node-pre-gyp = nodeEnv.buildNodePackage {
596 | name = "node-pre-gyp";
597 | packageName = "node-pre-gyp";
598 | version = "0.12.0";
599 | src = fetchurl {
600 | url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz";
601 | sha512 = "4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==";
602 | };
603 | dependencies = [
604 | sources."abbrev-1.1.1"
605 | sources."ansi-regex-2.1.1"
606 | sources."aproba-1.2.0"
607 | sources."are-we-there-yet-1.1.5"
608 | sources."balanced-match-1.0.0"
609 | sources."brace-expansion-1.1.11"
610 | sources."chownr-1.1.1"
611 | sources."code-point-at-1.1.0"
612 | sources."concat-map-0.0.1"
613 | sources."console-control-strings-1.1.0"
614 | sources."core-util-is-1.0.2"
615 | sources."debug-2.6.9"
616 | sources."deep-extend-0.6.0"
617 | sources."delegates-1.0.0"
618 | sources."detect-libc-1.0.3"
619 | sources."fs-minipass-1.2.5"
620 | sources."fs.realpath-1.0.0"
621 | sources."gauge-2.7.4"
622 | sources."glob-7.1.3"
623 | sources."has-unicode-2.0.1"
624 | sources."iconv-lite-0.4.24"
625 | sources."ignore-walk-3.0.1"
626 | sources."inflight-1.0.6"
627 | sources."inherits-2.0.3"
628 | sources."ini-1.3.5"
629 | sources."is-fullwidth-code-point-1.0.0"
630 | sources."isarray-1.0.0"
631 | sources."minimatch-3.0.4"
632 | sources."minimist-0.0.8"
633 | sources."minipass-2.3.5"
634 | sources."minizlib-1.2.1"
635 | sources."mkdirp-0.5.1"
636 | sources."ms-2.0.0"
637 | sources."needle-2.2.4"
638 | sources."nopt-4.0.1"
639 | sources."npm-bundled-1.0.6"
640 | sources."npm-packlist-1.4.1"
641 | sources."npmlog-4.1.2"
642 | sources."number-is-nan-1.0.1"
643 | sources."object-assign-4.1.1"
644 | sources."once-1.4.0"
645 | sources."os-homedir-1.0.2"
646 | sources."os-tmpdir-1.0.2"
647 | sources."osenv-0.1.5"
648 | sources."path-is-absolute-1.0.1"
649 | sources."process-nextick-args-2.0.0"
650 | (sources."rc-1.2.8" // {
651 | dependencies = [
652 | sources."minimist-1.2.0"
653 | ];
654 | })
655 | sources."readable-stream-2.3.6"
656 | sources."rimraf-2.6.3"
657 | sources."safe-buffer-5.1.2"
658 | sources."safer-buffer-2.1.2"
659 | sources."sax-1.2.4"
660 | sources."semver-5.6.0"
661 | sources."set-blocking-2.0.0"
662 | sources."signal-exit-3.0.2"
663 | sources."string-width-1.0.2"
664 | sources."string_decoder-1.1.1"
665 | sources."strip-ansi-3.0.1"
666 | sources."strip-json-comments-2.0.1"
667 | sources."tar-4.4.8"
668 | sources."util-deprecate-1.0.2"
669 | sources."wide-align-1.1.3"
670 | sources."wrappy-1.0.2"
671 | sources."yallist-3.0.3"
672 | ];
673 | buildInputs = globalBuildInputs;
674 | meta = {
675 | description = "Node.js native addon binary install tool";
676 | homepage = "https://github.com/mapbox/node-pre-gyp#readme";
677 | license = "BSD-3-Clause";
678 | };
679 | production = true;
680 | bypassCache = true;
681 | reconstructLock = true;
682 | };
683 | }
--------------------------------------------------------------------------------
/pkgs/liquidd/default.nix:
--------------------------------------------------------------------------------
1 | { stdenv, fetchurl, pkgconfig, autoreconfHook, openssl, db48, boost, zeromq
2 | , zlib, miniupnpc, qtbase ? null, qttools ? null, utillinux, protobuf, python3, qrencode, libevent
3 | }:
4 |
5 | with stdenv.lib;
6 | stdenv.mkDerivation rec{
7 | name = "liquid-" + version;
8 | version = "3.14.1.22";
9 |
10 | src = fetchurl {
11 | urls = [
12 | "https://github.com/Blockstream/liquid/releases/download/liquid.${version}/liquid-${version}.tar.gz"
13 | ];
14 | sha256 = "25907a4085b7b92a0365235f059a12a3c82679b0049115b80697b438816e74de";
15 | };
16 |
17 | nativeBuildInputs = [ pkgconfig autoreconfHook ]
18 | ++ optionals doCheck [ python3 ];
19 | buildInputs = [ openssl db48 boost zlib zeromq
20 | miniupnpc protobuf libevent]
21 | ++ optionals stdenv.isLinux [ utillinux ];
22 |
23 | configureFlags = [ "--with-boost-libdir=${boost.out}/lib"
24 | "--disable-bench"
25 | ] ++ optionals (!doCheck) [
26 | "--disable-tests"
27 | "--disable-gui-tests"
28 | ];
29 | doCheck = true;
30 |
31 | enableParallelBuilding = true;
32 |
33 | meta = {
34 | description = "An inter-exchange settlement network based on Bitcoin";
35 | longDescription= ''
36 | Liquid is an inter-exchange settlement network linking together cryptocurrency exchanges and
37 | institutions around the world, enabling faster Bitcoin transactions and the issuance of
38 | digital assets.
39 | '';
40 | homepage = http://www.github.com/blockstream/liquid;
41 | license = licenses.mit;
42 | # liquid needs hexdump to build, which doesn't seem to build on darwin at the moment.
43 | platforms = platforms.linux;
44 | };
45 | }
46 |
--------------------------------------------------------------------------------
/pkgs/nanopos/composition.nix:
--------------------------------------------------------------------------------
1 | # This file has been generated by node2nix 1.6.1. Do not edit!
2 |
3 | {pkgs ? import {
4 | inherit system;
5 | }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-10_x"}:
6 |
7 | let
8 | globalBuildInputs = pkgs.lib.attrValues (import ./supplement.nix {
9 | inherit nodeEnv;
10 | inherit (pkgs) fetchurl fetchgit;
11 | });
12 | nodeEnv = import ./node-env.nix {
13 | inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
14 | inherit nodejs;
15 | libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
16 | };
17 | in
18 | import ./node-packages.nix {
19 | inherit (pkgs) fetchurl fetchgit;
20 | inherit nodeEnv globalBuildInputs;
21 | }
--------------------------------------------------------------------------------
/pkgs/nanopos/default.nix:
--------------------------------------------------------------------------------
1 | { stdenv, pkgs, lib }:
2 | lib.head (lib.attrValues (import ./composition.nix {
3 | inherit pkgs;
4 | inherit (stdenv.hostPlatform) system;
5 | }))
6 |
--------------------------------------------------------------------------------
/pkgs/nanopos/generate.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env nix-shell
2 | #! nix-shell -i bash -p nodePackages.node2nix
3 | exec node2nix --nodejs-10 -i pkg.json -c composition.nix --no-copy-node-env --supplement-input supplement.json
4 |
--------------------------------------------------------------------------------
/pkgs/nanopos/node-env.nix:
--------------------------------------------------------------------------------
1 | import
2 |
--------------------------------------------------------------------------------
/pkgs/nanopos/pkg.json:
--------------------------------------------------------------------------------
1 | [
2 | { "nanopos": "^0.1.5" }
3 | ]
4 |
--------------------------------------------------------------------------------
/pkgs/nanopos/supplement.json:
--------------------------------------------------------------------------------
1 | [
2 | ]
3 |
--------------------------------------------------------------------------------
/pkgs/nanopos/supplement.nix:
--------------------------------------------------------------------------------
1 | # This file has been generated by node2nix 1.6.1. Do not edit!
2 |
3 | {nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
4 |
5 | let
6 | sources = {};
7 | in
8 | {}
--------------------------------------------------------------------------------
/pkgs/nixpkgs-pinned.nix:
--------------------------------------------------------------------------------
1 | {
2 | nixpkgs = builtins.fetchGit {
3 | url = "https://github.com/nixos/nixpkgs-channels";
4 | ref = "nixos-19.03";
5 | rev = "7936400662bc9379beb69855b0e0b7c0110e5f3c";
6 | };
7 | nixpkgs-unstable = builtins.fetchGit {
8 | url = "https://github.com/nixos/nixpkgs-channels";
9 | ref = "nixpkgs-unstable";
10 | rev = "02bb5e35eae8a9e124411270a6790a08f68e905b";
11 | };
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/pkgs/nodeinfo/default.nix:
--------------------------------------------------------------------------------
1 | {pkgs}:
2 |
3 | with pkgs;
4 | stdenv.mkDerivation {
5 | name = "nodeinfo";
6 | src = ./nodeinfo.sh;
7 |
8 | unpackPhase = "true";
9 | installPhase = ''
10 | mkdir -p $out
11 | mkdir -p $out/bin
12 | cp $src $out/bin/nodeinfo
13 | chmod +x $out/bin/nodeinfo
14 | '';
15 | }
16 |
--------------------------------------------------------------------------------
/pkgs/nodeinfo/nodeinfo.sh:
--------------------------------------------------------------------------------
1 | set -e
2 | set -o pipefail
3 |
4 | BITCOIND_ONION="$(cat /var/lib/onion-chef/operator/bitcoind)"
5 | CLIGHTNING_NODEID=$(sudo -u clightning lightning-cli --lightning-dir=/var/lib/clightning getinfo | jq -r '.id')
6 | CLIGHTNING_ONION="$(cat /var/lib/onion-chef/operator/clightning)"
7 | CLIGHTNING_ID="$CLIGHTNING_NODEID@$CLIGHTNING_ONION:9735"
8 |
9 | echo BITCOIND_ONION="$BITCOIND_ONION"
10 | echo CLIGHTNING_NODEID="$CLIGHTNING_NODEID"
11 | echo CLIGHTNING_ONION="$CLIGHTNING_ONION"
12 | echo CLIGHTNING_ID="$CLIGHTNING_ID"
13 |
14 | NGINX_ONION_FILE=/var/lib/onion-chef/operator/nginx
15 | if [ -e "$NGINX_ONION_FILE" ]; then
16 | NGINX_ONION="$(cat $NGINX_ONION_FILE)"
17 | echo NGINX_ONION="$NGINX_ONION"
18 | fi
19 |
20 | LIQUIDD_ONION_FILE=/var/lib/onion-chef/operator/liquidd
21 | if [ -e "$LIQUIDD_ONION_FILE" ]; then
22 | LIQUIDD_ONION="$(cat $LIQUIDD_ONION_FILE)"
23 | echo LIQUIDD_ONION="$LIQUIDD_ONION"
24 | fi
25 |
26 | SPARKWALLET_ONION_FILE=/var/lib/onion-chef/operator/spark-wallet
27 | if [ -e "$SPARKWALLET_ONION_FILE" ]; then
28 | SPARKWALLET_ONION="$(cat $SPARKWALLET_ONION_FILE)"
29 | echo SPARKWALLET_ONION="http://$SPARKWALLET_ONION"
30 | fi
31 |
32 | ELECTRS_ONION_FILE=/var/lib/onion-chef/operator/electrs
33 | if [ -e "$ELECTRS_ONION_FILE" ]; then
34 | ELECTRS_ONION="$(cat $ELECTRS_ONION_FILE)"
35 | echo ELECTRS_ONION="$ELECTRS_ONION"
36 | fi
37 |
38 | SSHD_ONION_FILE=/var/lib/onion-chef/operator/sshd
39 | if [ -e "$SSHD_ONION_FILE" ]; then
40 | SSHD_ONION="$(cat $SSHD_ONION_FILE)"
41 | echo SSHD_ONION="$SSHD_ONION"
42 | fi
43 |
--------------------------------------------------------------------------------
/pkgs/spark-wallet/composition.nix:
--------------------------------------------------------------------------------
1 | # This file has been generated by node2nix 1.6.1. Do not edit!
2 |
3 | {pkgs ? import {
4 | inherit system;
5 | }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-10_x"}:
6 |
7 | let
8 | globalBuildInputs = pkgs.lib.attrValues (import ./supplement.nix {
9 | inherit nodeEnv;
10 | inherit (pkgs) fetchurl fetchgit;
11 | });
12 | nodeEnv = import ./node-env.nix {
13 | inherit (pkgs) stdenv python2 utillinux runCommand writeTextFile;
14 | inherit nodejs;
15 | libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
16 | };
17 | in
18 | import ./node-packages.nix {
19 | inherit (pkgs) fetchurl fetchgit;
20 | inherit nodeEnv globalBuildInputs;
21 | }
--------------------------------------------------------------------------------
/pkgs/spark-wallet/default.nix:
--------------------------------------------------------------------------------
1 | { stdenv, pkgs, lib }:
2 | lib.head (lib.attrValues (import ./composition.nix {
3 | inherit pkgs;
4 | inherit (stdenv.hostPlatform) system;
5 | }))
6 |
--------------------------------------------------------------------------------
/pkgs/spark-wallet/generate.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env nix-shell
2 | #! nix-shell -i bash -p nodePackages.node2nix
3 | exec node2nix --nodejs-10 -i pkg.json -c composition.nix --no-copy-node-env --supplement-input supplement.json
4 |
--------------------------------------------------------------------------------
/pkgs/spark-wallet/node-env.nix:
--------------------------------------------------------------------------------
1 | import
2 |
--------------------------------------------------------------------------------
/pkgs/spark-wallet/pkg.json:
--------------------------------------------------------------------------------
1 | [
2 | { "spark-wallet": "^0.2.5" }
3 | ]
4 |
--------------------------------------------------------------------------------
/pkgs/spark-wallet/supplement.json:
--------------------------------------------------------------------------------
1 | [
2 | ]
3 |
--------------------------------------------------------------------------------
/pkgs/spark-wallet/supplement.nix:
--------------------------------------------------------------------------------
1 | # This file has been generated by node2nix 1.6.1. Do not edit!
2 |
3 | {nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
4 |
5 | let
6 | sources = {};
7 | in
8 | {}
--------------------------------------------------------------------------------
/secrets/generate_secrets.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | SECRETSFILE=secrets/secrets.nix
4 |
5 | if [ -e "$SECRETSFILE" ]; then
6 | echo $SECRETSFILE already exists. No new secrets were generated.
7 | exit 1
8 | fi
9 |
10 | echo Write secrets to $SECRETSFILE
11 | {
12 | echo \{
13 | echo " bitcoinrpcpassword = \"$(apg -m 20 -x 20 -M Ncl -n 1)\";"
14 | echo " lightning-charge-api-token = \"$(apg -m 20 -x 20 -M Ncl -n 1)\";"
15 | echo " liquidrpcpassword = \"$(apg -m 20 -x 20 -M Ncl -n 1)\";"
16 | echo " spark-wallet-password = \"$(apg -m 20 -x 20 -M Ncl -n 1)\";"
17 | echo \}
18 | } >> $SECRETSFILE
19 | echo Done
20 |
21 | echo Generate Self-Signed Cert
22 | openssl genrsa -out secrets/ssl_certificate_key.key 2048
23 | openssl req -new -key secrets/ssl_certificate_key.key -out secrets/ssl_certificate.csr -subj "/C=KN"
24 | openssl x509 -req -days 1825 -in secrets/ssl_certificate.csr -signkey secrets/ssl_certificate_key.key -out secrets/ssl_certificate.crt
25 | echo Done
26 |
--------------------------------------------------------------------------------
/shell.nix:
--------------------------------------------------------------------------------
1 | let
2 | nixpkgs = (import ./pkgs/nixpkgs-pinned.nix).nixpkgs;
3 | in
4 | with import nixpkgs { };
5 |
6 | stdenv.mkDerivation rec {
7 | name = "nix-bitcoin-environment";
8 |
9 | buildInputs = [ pkgs.nixops pkgs.figlet pkgs.apg pkgs.openssl ];
10 |
11 | shellHook = ''
12 | export NIX_PATH="nixpkgs=${nixpkgs}:."
13 | # ssh-agent and nixops don't play well together (see
14 | # https://github.com/NixOS/nixops/issues/256). I'm getting `Received disconnect
15 | # from 10.1.1.200 port 22:2: Too many authentication failures` if I have a few
16 | # keys already added to my ssh-agent.
17 | export SSH_AUTH_SOCK=""
18 | figlet "nix-bitcoin"
19 | ./secrets/generate_secrets.sh
20 | '';
21 | }
22 |
--------------------------------------------------------------------------------