Coder Social home page Coder Social logo

nix-community / ethereum.nix Goto Github PK

View Code? Open in Web Editor NEW
97.0 6.0 34.0 6.67 MB

Nix packages and NixOS modules for the Ethereum ecosystem. [maintainers=@aldoborrero,@brianmcgee,@selfuryon]

Home Page: https://nix-community.github.io/ethereum.nix/

License: MIT License

Nix 99.36% Shell 0.64%
blockchain eth ethereum ethereum-blockchain nix nixpkgs nixos nix-community-buildbot

ethereum.nix's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ethereum.nix's Issues

Add Vouch and Dirk

Hello!
I think it's a good idea to add vouch and dirk from Attestant to this repo: dirk is a key manager or signer and vouch is a multinode validator.

Add a quick start guide

Should provide quick basic examples of how to use the packages, apps and modules we expose. They should target the common use cases, with links to more in depth and specific pages when they are available.

Add support for Nethermind

I'm enjoying this repository, I'm asking that Nethermind be added to it.

I've been trying to create a Flake for it myself, but I don't enough experience with Nix to make it work.

Add `treefmt` to checks

Currently, we're only using nix-lint to check for potential issues. We should add support to treefmt check.

Document NixOS module options

Disko produces automated documentation for the NixOS options within their modules like this.

I think we should follow a similar approach, but it will first require refactoring all of the types out of our modules so they can be isolated when running lib.evalModules otherwise you get complaints about options for networking and so on not being available.

Add a service for geth and it's forks

Background

We want to easily configure a geth instance within NixOS and support the different flavours.

Tasks

  1. Port geth's service configuration from nixpkgs.
  2. Improve/update the service to be generic and to support the different instances of geth.
  3. Incorporate tests that configure a geth instance and check that some ports are running.

Acceptance Criteria

  1. Test must pass, proving the configuration works for configuring geth.

Docs: add an about section

We should provide some background on the project and what it is aiming to achieve. There will probably be some overlap with the README. Look at other nix-community projects for inspiration.

Namespace geth apps

Just as we have done with prysm we should namespace all related geth utilities described in apps to use geth-${utility} except proper geth.

Package Besu from sources (if it makes sense)

We're currently using a packaged version of Besu, but ideally, we should compile it from sources instead.

Let's evaluate the difficulty of packaging Besu with Nix and determine if it's worthwhile not to do it (mostly, it will depend on how gradle is configured on their end and what tricks we may perform).

statix/nix-update reference

Hello!
While preparing #121 I realize that we use nix-update and statix from stable nixpkgs input in devShell instead of their specific inputs. I found it because nix-update from stable channel doesn't support --flake argument.

I see two ways to resolve that:

  • we use these packages from related inputs with follows='nixpkgs-unstable', but we need to rebuild them cuz no caches
  • we use these packages from nixpkgs-unstable (and remove nix-update and statix inputs) because it tracks the last app versions very well, and we don't need to rebuild them locally

I'd prefer the second way. What do you think about that?

Add nix-update to workflows

Manual updating is a little bit frustrating, nix-update is a huge step forward, but I suggest making a workflow similar to Updates nix flakes for updating packages (which I can update without setting specific version like in web3signer).
Do PR in next several days

Add support for custom systemd targets

Whenever we want to run an Ethereum network, we usually need to execute a pair of EC (Execution Client) + Consensus client (CC).

systemd allows us to create custom targets like example below:

# named like ethereum-sepolia.target
[Unit]
Description=Ethereum Sepolia Service

# This collection of apps should be started at boot time.
[Install]
WantedBy=multi-user.target

With this, we can group related service units and control those as a group rather than per service instance:

# In a file name like [email protected]
[Unit]
Description=%I Instance of App Web Service
PartOf=ethereum-sepolia.target

[Service]
ExecStart=/Command
Restart=on-failure
StandardOutput=journal

# Service definition for i.e prysm 

# When systemctl enable is used, make this start when the App service starts
[Install]
WantedBy=ethereum-sepolia.target

With that, we can spin up the service like:

systemd start ethereum-sepolia

And systemd will start both services.

All of the above is pseudo-code that I've extracted from this StackOverflow thread and that I've modified freely as an example.

Add support for mev-rs

We should add support to mev-rs relay. Let's create a specific category for mev-related utilities, we can start with this one and move mev-boost as well.

Provide a better strategy for auto updating packages with upstream releases

Right now, we're doing the manual updates of the different packages we support, but it's cumbersome and requires manual intervention.

We can do a better job using GitHub Actions and nix-update (the first idea that comes to mind). Research is necessary be conducted to see what it's the best way of automating this.

Allow specifying btrfs sub volumes in geth service

This will be a more general feature eventually, but to begin with let's focus on the geth service and btrfs in particular.

The basic idea is to allow a user to specify that the datadir should be a btrfs subvolume.

Before starting the geth client, the volume should be created if it hasn't already, with default mount options of ["discard" "noatime" "nodatacow"]. If it already exists then ideally we validate the mount options match but that's not necessary for a first version.

I think we can leverage https://github.com/nix-community/disko.

@Mic92 @Lassulus any advice/recommended approaches for integrating the service in modules/geth.nix with disko to achieve the outcome above?

Add support for sedge

Summary

Sedge is a one-click setup tool for PoS network/chain validators and nodes written entirely in the Go programming language. Sedge takes care of the entire on-premise full node setup based on the chosen client, using generated docker-compose scripts based on the desired configuration.

Link: Sedge.

Feature: support solc and ilk

Solidity support can be taken from dapptools, and for foundry there is an existing nix integration maybe he can contribute it here idk

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.