From 8fdb7dbb5a757f83235c67b41b41d340ec42100a Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 14 Nov 2018 16:32:49 -0800 Subject: [PATCH 1/6] altcoins: remove haskellPackages from input arguments It doesn't seem to be used Signed-off-by: William Casarin --- pkgs/applications/altcoins/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/altcoins/default.nix b/pkgs/applications/altcoins/default.nix index 87945988321bd9..15c768597eb2ec 100644 --- a/pkgs/applications/altcoins/default.nix +++ b/pkgs/applications/altcoins/default.nix @@ -1,4 +1,4 @@ -{ callPackage, boost155, boost165, openssl_1_1, haskellPackages, darwin, libsForQt5, miniupnpc_2, python3, buildGo110Package }: +{ callPackage, boost155, boost165, openssl_1_1, darwin, libsForQt5, miniupnpc_2, python3, buildGo110Package }: rec { From e664d19cafffac601826dc2d0e5cf292e0200200 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 14 Nov 2018 16:24:33 -0800 Subject: [PATCH 2/6] python: pycoin: init at 0.80 Signed-off-by: William Casarin --- .../python-modules/pycoin/default.nix | 22 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 24 insertions(+) create mode 100644 pkgs/development/python-modules/pycoin/default.nix diff --git a/pkgs/development/python-modules/pycoin/default.nix b/pkgs/development/python-modules/pycoin/default.nix new file mode 100644 index 00000000000000..3d48f0cfcf19eb --- /dev/null +++ b/pkgs/development/python-modules/pycoin/default.nix @@ -0,0 +1,22 @@ +{ stdenv, fetchPypi, buildPythonPackage, tox, pytest }: + +buildPythonPackage rec { + pname = "pycoin"; + version = "0.80"; + + src = fetchPypi{ + inherit pname version; + sha256 = "a79a7771c3f6ca2e35667e80983987f0c799c5db01e58016c22a12e8484b2034"; + }; + + checkInputs = [ tox pytest ]; + + checkPhase = "tox"; + + meta = with stdenv.lib; { + description = "Utilities for Bitcoin and altcoin addresses and transaction manipulation"; + homepage = https://github.com/richardkiss/pycoin; + license = licenses.mit; + maintainers = with maintainers; [ jb55 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 4694362bfb9316..15d6dc5105e4a7 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1317,6 +1317,8 @@ in { cffi = callPackage ../development/python-modules/cffi { }; + pycoin = callPackage ../development/python-modules/pycoin { }; + pycollada = callPackage ../development/python-modules/pycollada { }; pycontracts = callPackage ../development/python-modules/pycontracts { }; From 03ee97f0d439c00f14c70f2934c993a2caccb4d7 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 14 Nov 2018 17:14:46 -0800 Subject: [PATCH 3/6] python: apply-default: init at 0.1.1 This is needed by jsonrpcserver Signed-off-by: William Casarin --- .../python-modules/apply-defaults/default.nix | 19 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 21 insertions(+) create mode 100644 pkgs/development/python-modules/apply-defaults/default.nix diff --git a/pkgs/development/python-modules/apply-defaults/default.nix b/pkgs/development/python-modules/apply-defaults/default.nix new file mode 100644 index 00000000000000..88d534f03e50e7 --- /dev/null +++ b/pkgs/development/python-modules/apply-defaults/default.nix @@ -0,0 +1,19 @@ +{ stdenv, buildPythonPackage, fetchPypi, pytest +}: + +buildPythonPackage rec { + pname = "apply_defaults"; + version = "0.1.1"; + + src = fetchPypi { + inherit pname version; + sha256 = "b8c1bc511a0368dabe1af4d80b97186296e25182d7e371d920a9633cf6a2a385"; + }; + + meta = with stdenv.lib; { + homepage = https://github.com/bcb/apply_defaults; + description = "Apply default values to functions"; + license = licenses.free; + maintainers = with maintainers; [ jb55 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 15d6dc5105e4a7..3d691a85dbd8d0 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -182,6 +182,8 @@ in { ansicolor = callPackage ../development/python-modules/ansicolor { }; + apply-defaults = callPackage ../development/python-modules/apply-defaults { }; + argon2_cffi = callPackage ../development/python-modules/argon2_cffi { }; asana = callPackage ../development/python-modules/asana { }; From 7715ba1d5c9f4b9a8f98baaf025a86612b09cb62 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 14 Nov 2018 17:15:25 -0800 Subject: [PATCH 4/6] python: jsonrpcserver: init at 3.5.6 There is a newer version (4.0.0), but this one is required for spruned. Signed-off-by: William Casarin --- .../python-modules/jsonrpcserver/default.nix | 23 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 25 insertions(+) create mode 100644 pkgs/development/python-modules/jsonrpcserver/default.nix diff --git a/pkgs/development/python-modules/jsonrpcserver/default.nix b/pkgs/development/python-modules/jsonrpcserver/default.nix new file mode 100644 index 00000000000000..8792c16d76d169 --- /dev/null +++ b/pkgs/development/python-modules/jsonrpcserver/default.nix @@ -0,0 +1,23 @@ +{ stdenv, buildPythonPackage, fetchPypi, pytest, jsonschema, funcsigs, apply-defaults, mypy, six +}: + +buildPythonPackage rec { + pname = "jsonrpcserver"; + version = "3.5.6"; + + src = fetchPypi { + inherit pname version; + sha256 = "8442af3632ebf012c773aea78639e1ad3f605cda2ffcc58d6e4e34ecf8b4a167"; + }; + + propagatedBuildInputs = [ apply-defaults jsonschema funcsigs six ]; + + doCheck = false; + + meta = with stdenv.lib; { + homepage = https://github.com/bcb/jsonrpcserver; + description = "Process JSON-RPC requests in Python"; + license = licenses.mit; + maintainers = with maintainers; [ jb55 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3d691a85dbd8d0..b8db0db924a44f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1265,6 +1265,8 @@ in { jsonrpc-websocket = callPackage ../development/python-modules/jsonrpc-websocket { }; + jsonrpcserver = callPackage ../development/python-modules/jsonrpcserver {}; + onkyo-eiscp = callPackage ../development/python-modules/onkyo-eiscp { }; pyunifi = callPackage ../development/python-modules/pyunifi { }; From e34041c3b766cda2f0489ee7a7c6900c4ab256b9 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 14 Nov 2018 17:16:28 -0800 Subject: [PATCH 5/6] spruned: init at 0.0.4b4 spruned is a lightweight Bitcoin pseudonode designed to fetch any block or transaction. Signed-off-by: William Casarin --- pkgs/applications/altcoins/default.nix | 1 + .../applications/altcoins/spruned/default.nix | 53 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 3 files changed, 55 insertions(+) create mode 100644 pkgs/applications/altcoins/spruned/default.nix diff --git a/pkgs/applications/altcoins/default.nix b/pkgs/applications/altcoins/default.nix index 15c768597eb2ec..85dd5803f6bb67 100644 --- a/pkgs/applications/altcoins/default.nix +++ b/pkgs/applications/altcoins/default.nix @@ -7,6 +7,7 @@ rec { bitcoin = libsForQt5.callPackage ./bitcoin.nix { miniupnpc = miniupnpc_2; withGui = true; }; bitcoind = callPackage ./bitcoin.nix { miniupnpc = miniupnpc_2; withGui = false; }; clightning = callPackage ./clightning.nix { }; + spruned = callPackage ./spruned { }; bitcoin-abc = libsForQt5.callPackage ./bitcoin-abc.nix { boost = boost165; withGui = true; }; bitcoind-abc = callPackage ./bitcoin-abc.nix { boost = boost165; withGui = false; }; diff --git a/pkgs/applications/altcoins/spruned/default.nix b/pkgs/applications/altcoins/spruned/default.nix new file mode 100644 index 00000000000000..b8e0339e6aaf3f --- /dev/null +++ b/pkgs/applications/altcoins/spruned/default.nix @@ -0,0 +1,53 @@ +{ stdenv, python3 }: + +let + pythonPackages = python3.pkgs; +in +with stdenv.lib; +pythonPackages.buildPythonApplication rec { + pname = "spruned"; + version = "0.0.4b4"; + + src = pythonPackages.fetchPypi { + inherit pname version; + sha256 = "b156ad410ae71651aafb4ffc639ad491614622a53b3cb8211fd49e2579642f18"; + }; + + disabled = ! pythonPackages.pythonAtLeast "3.5"; + + propagatedBuildInputs = + with pythonPackages; [ + async-timeout + jsonrpcserver + sqlalchemy + plyvel + daemonize + aiohttp + pycoin + ]; + + patchPhase = '' + sed -i 's,import spruned,,;s,spruned.__version__,"${version}",' setup.py + + substituteInPlace spruned/application/tools.py \ + --replace "subprocess.call(['ping" "subprocess.call(['/run/wrappers/bin/ping" + + substituteInPlace requirements.txt \ + --replace 'sqlalchemy==1.2.6' 'sqlalchemy==1.2.*' \ + --replace 'aiohttp==3.0.0b0' aiohttp \ + --replace 'daemonize==2.4.7' daemonize \ + --replace 'async-timeout==2.0.1' async-timeout \ + --replace 'jsonrpcserver==3.5.3' jsonrpcserver \ + --replace 'plyvel==0.9.0' plyvel + ''; + + doCheck = false; + + meta = { + description = "A Bitcoin lightweight pseudonode with RPC that can fetch any block or transaction"; + homepage = https://github.com/gdassori/spruned; + maintainers = with maintainers; [ jb55 ]; + license = licenses.mit; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ef266154c0765e..523a83c2b945c7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15819,6 +15819,7 @@ with pkgs; bitcoin = altcoins.bitcoin; clightning = altcoins.clightning; + spruned = altcoins.spruned; bitcoin-xt = altcoins.bitcoin-xt; cryptop = altcoins.cryptop; From 8311ab29521ced8a43ed2b0f78c7684f42923e73 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 14 Nov 2018 18:29:55 -0800 Subject: [PATCH 6/6] nixos/spruned: init module This adds a nixos module for spruned, the lightweight Bitcoin pseudonode Needs root because of ping. Signed-off-by: William Casarin --- nixos/modules/module-list.nix | 1 + nixos/modules/services/networking/spruned.nix | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 nixos/modules/services/networking/spruned.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 9ccb6dd205e415..986d0da258e256 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -609,6 +609,7 @@ ./services/networking/smokeping.nix ./services/networking/softether.nix ./services/networking/spiped.nix + ./services/networking/spruned.nix ./services/networking/squid.nix ./services/networking/sslh.nix ./services/networking/ssh/lshd.nix diff --git a/nixos/modules/services/networking/spruned.nix b/nixos/modules/services/networking/spruned.nix new file mode 100644 index 00000000000000..b23db78f878b49 --- /dev/null +++ b/nixos/modules/services/networking/spruned.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.spruned; + + cliArgs = "--datadir ${cfg.dataDir} --network bitcoin.${cfg.network} ${cfg.extraArguments}"; +in +{ + options = { + services.spruned = { + enable = mkEnableOption "The spruned lightweight Bitcoin pseudonode daemon service"; + dataDir = mkOption { + type = types.str; + default = "/var/lib/spruned"; + description = '' + Directory to store cached block data and spruned logs. + ''; + }; + network = mkOption { + type = types.enum [ "mainnet" "testnet" ]; + default = "mainnet"; + description = '' + Whether to use Bitcoin mainnet or testnet. + ''; + }; + extraArguments = mkOption { + type = types.separatedString " "; + example = "--mempoolsize 20 --debug"; + default = ""; + description = '' + Additional arguments to be passed to spruned. + ''; + }; + }; + }; + + config = mkIf cfg.enable { + systemd.user.services.spruned = { + description = "spruned service"; + after = [ "local-fs.target" "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + Restart = "on-abort"; + ExecStart = "${pkgs.spruned}/bin/spruned ${cliArgs}"; + }; + }; + }; +}