diff --git a/modules/default.nix b/modules/default.nix index 19a71c0d..7a694862 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,5 +7,6 @@ ./random-alerts ./host-info.nix ./secrets.nix + ./tacchain ]; } diff --git a/modules/tacchain/default.nix b/modules/tacchain/default.nix new file mode 100644 index 00000000..b384aee0 --- /dev/null +++ b/modules/tacchain/default.nix @@ -0,0 +1,70 @@ +{ withSystem, ... }: +{ + flake.modules.nixos.tacchain = + { + pkgs, + config, + lib, + ... + }: + let + cfg = config.services.tacchain; + package = withSystem pkgs.stdenv.hostPlatform.system ({ config, ... }: config.packages.tacchain); + persistent_peers = "9c32b3b959a2427bd2aa064f8c9a8efebdad4c23@206.217.210.164:45130,04a2152eed9f73dc44779387a870ea6480c41fe7@206.217.210.164:45140,5aaaf8140262d7416ac53abe4e0bd13b0f582168@23.92.177.41:45110,ddb3e8b8f4d051e914686302dafc2a73adf9b0d2@23.92.177.41:45120"; + genesis = pkgs.fetchurl { + url = "https://raw.githubusercontent.com/TacBuild/tacchain/refs/heads/main/networks/tacchain_2391-1/genesis.json"; + hash = "sha256-ZGz5KtMX1Xx70/h7+VRAPtuPD+Xs5Y01Lv5d/bZF91c="; + }; + in + { + options.services.tacchain = with lib; { + enable = mkEnableOption (lib.mdDoc "Tacchain"); + nodeName = mkOption { + type = types.str; + default = "tacchain"; + description = "The name of the tacchain node."; + }; + home = mkOption { + type = types.path; + default = "/var/lib/tacchain"; + description = "The home directory for the tacchain node."; + }; + }; + config = lib.mkIf cfg.enable { + mcl.secrets.services.tacchain.secrets = { + validator-private-key = { }; + }; + systemd.tmpfiles.rules = [ + "d ${cfg.home} 0755 root root - - -" + ]; + systemd.services.tacchain_setup = { + description = "tacchain_setup"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + Environment = "HOME=${cfg.home}"; + ConditionPathExists = "!${cfg.home}/config/genesis.json"; + ExecStart = [ + ''${lib.getExe package} init ${cfg.nodeName} --chain-id tacchain_2391-1 --home ${cfg.home}'' + ''${pkgs.gnused}/bin/sed -i 's/timeout_commit = "5s"/timeout_commit = "2s"/' ${cfg.home}/config/config.toml'' + ''${pkgs.gnused}/bin/sed -i 's/persistent_peers = ".*"/persistent_peers = "${persistent_peers}"/' ${cfg.home}/config/config.toml'' + ''${pkgs.coreutils}/bin/cp ${genesis} ${cfg.home}/config/genesis.json'' + ''${lib.getExe package} keys import validator ${ + config.age.secrets."tacchain/validator-private-key".path + } --home ${cfg.home} --keyring-backend test'' + ]; + + }; + }; + systemd.services.tacchain = { + description = "tacchain"; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Environment = "HOME=${cfg.home}"; + After = "tacchain_setup.service"; + ExecStart = ''${lib.getExe package} start --chain-id tacchain_2391-1 --home ${cfg.home}''; + }; + }; + }; + }; +} diff --git a/packages/default.nix b/packages/default.nix index 7416812e..af4890c6 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -72,6 +72,7 @@ }; inherit (legacyPackages.inputs.nixpkgs) cachix nix nix-eval-jobs; }; + tacchain = pkgs.callPackage ./tacchain { }; }; }; } diff --git a/packages/tacchain/default.nix b/packages/tacchain/default.nix new file mode 100644 index 00000000..2224c499 --- /dev/null +++ b/packages/tacchain/default.nix @@ -0,0 +1,50 @@ +{ + lib, + pkgs, + buildGoModule, + fetchFromGitHub, +}: + +buildGoModule rec { + pname = "tacchain"; + version = "0.0.9"; + + src = fetchFromGitHub { + owner = "TacBuild"; + repo = pname; + rev = "v${version}"; + hash = "sha256-kU7cMQfbQHzXsBDTFLeR6DWxY1e7l5V2U391tNkdw6w="; + }; + + subPackages = [ "./cmd/tacchaind" ]; + + proxyVendor = true; + + vendorHash = "sha256-kXgN2slJG59pWuBKlfotkGzBeIWXESXJHhmwmAK5L/I="; + + tags = "netgo,ledger"; + + ldflags = [ + "-X github.com/cosmos/cosmos-sdk/version.Name=tacchain" + "-X github.com/cosmos/cosmos-sdk/version.AppName=tacchaind" + "-X github.com/cosmos/cosmos-sdk/version.Version=$(VERSION)" + "-X github.com/cosmos/cosmos-sdk/version.Commit=$(COMMIT)" + "-X github.com/cosmos/cosmos-sdk/version.BuildTags=${tags}" + ]; + + buildInputs = with pkgs; [ libusb1 ]; + + postInstall = '' + mkdir -p $out/bin + for i in contrib/localnet/*.sh; do + cp $i $out/bin/${pname}-$(basename $i) + done + ''; + + meta = { + description = ""; + homepage = "https://github.com/TacBuild/tacchain/tree/main"; + license = lib.licenses.asl20; + mainProgram = "tacchaind"; + }; +}