├── .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 |

17 | store 18 |

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 | --------------------------------------------------------------------------------