nethermindeth / nethermind Goto Github PK
View Code? Open in Web Editor NEWA robust execution client for Ethereum node operators.
Home Page: https://nethermind.io/nethermind-client
License: GNU General Public License v3.0
A robust execution client for Ethereum node operators.
Home Page: https://nethermind.io/nethermind-client
License: GNU General Public License v3.0
We have already done it for most of the cases but still have a few where we actually throw exceptions (e.g. overflow, underflow).
We want to only use exception for client failures. EVM exceptions should be error codes / included in execution status.
At the moment the storage data is not displayed separately for different call depths which leads to incorrect results in trace files
Example test scenario would be running the tutorial below with Nethermind:
https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial
I assume that we can base the code on Dirichlet Numerics and expand it for int256
https://github.com/ricksladkey/dirichlet-numerics
Following the implementation and set of tests we would replace all references in EVM.
LogTests.Test(log0_logMemStartTooHigh_d0g0v0_Byzantium) |
LogTests.Test(log0_logMemStartTooHigh_d0g0v0_EIP150) |
LogTests.Test(log0_logMemStartTooHigh_d0g0v0_EIP158) |
LogTests.Test(log0_logMemStartTooHigh_d0g0v0_Frontier) |
LogTests.Test(log0_logMemStartTooHigh_d0g0v0_Homestead) |
LogTests.Test(log1_logMemStartTooHigh_d0g0v0_Byzantium) |
LogTests.Test(log1_logMemStartTooHigh_d0g0v0_EIP150) |
LogTests.Test(log1_logMemStartTooHigh_d0g0v0_EIP158) |
LogTests.Test(log1_logMemStartTooHigh_d0g0v0_Frontier) |
LogTests.Test(log1_logMemStartTooHigh_d0g0v0_Homestead) |
LogTests.Test(log2_logMemStartTooHigh_d0g0v0_Byzantium) |
LogTests.Test(log2_logMemStartTooHigh_d0g0v0_EIP150) |
LogTests.Test(log2_logMemStartTooHigh_d0g0v0_EIP158) |
LogTests.Test(log2_logMemStartTooHigh_d0g0v0_Frontier) |
LogTests.Test(log2_logMemStartTooHigh_d0g0v0_Homestead) |
LogTests.Test(log3_logMemStartTooHigh_d0g0v0_Byzantium) |
LogTests.Test(log3_logMemStartTooHigh_d0g0v0_EIP150) |
LogTests.Test(log3_logMemStartTooHigh_d0g0v0_EIP158) |
LogTests.Test(log3_logMemStartTooHigh_d0g0v0_Frontier) |
LogTests.Test(log3_logMemStartTooHigh_d0g0v0_Homestead) |
LogTests.Test(log4_logMemStartTooHigh_d0g0v0_Byzantium) |
LogTests.Test(log4_logMemStartTooHigh_d0g0v0_EIP150) |
LogTests.Test(log4_logMemStartTooHigh_d0g0v0_EIP158) |
LogTests.Test(log4_logMemStartTooHigh_d0g0v0_Frontier) |
LogTests.Test(log4_logMemStartTooHigh_d0g0v0_Homestead)
The code is in a separate solution - Nethermind.Dirichlet which is a fork of the UInt128 library
Below you will find more information on what is expected:
Whisper spec and documentation can be collected from various Ethereum sites. Among them:
It is encouraged to contact other core devs who are working on Whisper to exchange implementation ideas and seek help.
Best place to seek help from the Nethermind team is Gitter:
https://gitter.im/nethermindeth/nethermind
What is expected for the pull request to be approved:
Nethermind core team will be glad to implement / link any cryptographical constructs necessary for the implementation of Whisper.
It was introduced early to support easier testing and some strong typing but it seems to be more confusing than helpful nowadays. Also expected performance benefits are not there as string and byte[] contexts are mostly exclusive.
Need a guideline on use of BenchmarkDotNet inside Nethermind - single example and documentation for use in Nethermind project.
The code is in a separate solution - Nethermind.Dirichlet which is a fork of the UInt128 library.
There is code for unsigned UInt and signed one has never been written - both are needed for an improved EVM performance.
As you can see below - Gitcoin bounty has been funded for this issue (kudos to Gitcoin team).
Below you will find more information on what is expected:
Clique spec is available here:
ethereum/EIPs#225
Best place to seek help from the team is Gitter:
https://gitter.im/nethermindeth/nethermind
At the moment the growing block queue size breaks the mainnet syncs at the latest blocks. There should be a limit on blocks awaiting execution.
Possibly we should continue downloading blocks and just not keep them in memory and then allow the sync process to switch to loading blocks from DB when exhausting the blocks from memory.
PeerManager initialization fails at AddPersistedPeers. Reach out to me for a nodes DB to reproduce. This stops the entire sync process from moving forward.
The code is in a separate solution - Nethermind.Dirichlet which is a fork of the UInt128 library
We run private TeamCity builds and we would like to allow community to contribute and run tests. Explore options and setup public continuous integration.
We have incorporated HashLib into our solution but are only using a small subset of the assembly (Keccak256/512, RIPEMD, SHA3). It would make sense to remove everything else and add back only if needed.
Either register one of our tets nodes VM or register some community nodes.
https://ethstats.net/
https://github.com/ethereum/wiki/wiki/Network-Status
cubedro/eth-netstats#328
In the Nethermind.Dirichlet submodule we have started some work on UInt256. For now, we use it for subtraction and addition. We would like to add reminding operations that would lead all the way to the division operator.
We would like to have RLP as a relatively independent library (either as a single project or coupled with Nethermind.Core only).
At the moment there are numerous APIs in RLP to allow for greater code optimization in Patricia Tree and other areas. As a result, the APIs can be confusing and not easily reusable in other projects.
Any changes here would need to assure that the existing optimizations are still supported.
In general, we have three approaches now:
They also take different arguments depending on the level of optimizations needed (with Patricia Tree going most hardcore).
It would be great to review, improve and systematize the RLP APIs.
Allow to track Rocks DB metrics when running Nethermind
We have build warnings due to SCrypt library used that is targetting .NET Framework.
Review and consider precompile to be identified by an address only, use precompile address constants.
Find an official list of Constantinople tasks, list them as issues on github, setup a branch and testing
IDEs resolve HashLib or Nethermind.Core Keccak class which may lead to confusion. We almost always want to resolve Nethermind.Core.Keccak.
We currently use a private TeamCity build server. For any open source contribution it would be desired to have a public build server where contributors can check their code for bugs before creating a pull request.
Need to confirm that puppeth is client agnostic and that it could be used to create nethermind based private networks.
In case that is not possible we would like to see a puppeth-like tool for Nethermind
While testing sync we used block number instead of total difficulty to select canonical chain. High time to fix it.
Call depth is not same as in Geth for some calls.
Include benchmark run in continuos integration builds, setup reports and keep improving.
This will also benefit from BenchmarkingDotNet mentioned in another issue.
As you can see below - Gitcoin bounty has been funded for this issue (kudos to Gitcoin team).
Below you will find more information on what is expected:
PoA / Aura spec is available here:
Best place to seek help from the team is Gitter:
TransactionProcessor and VirtualMachine both have a slightly different approach to creates and calls by which I mean that there is code that decides on what to do depending on whether we are the top level call or deeper. I believe some improvements can be done here to make the code more readable.
Build initial Swarm/BZZ protocol implementation for Nethermind.
Read the seal engine spec and some EIP transition parameters from chainspec file. Possibly reogranize the spec provider approach to be more in line with chainspec files.
Finalize the work done already on integration of Nethermind and Hive
https://github.com/karalabe/hive
When exiting the client from console ('e' key) Netty flushes lots of garbage logs.
While tests are passing we can clearly expose some attack vectors since memory is indexed through int and long values and location and size are specified as UInt256 in the yellowpaper.
Confront the rules with those in Parity and Geth.
During DevCon there have been talks about the new approach to fast syncing and redesign of archive node storage.
Warp Sync spec is here:
https://wiki.parity.io/Warp-Sync
And there is a big chance that it is outdated and not very detailed. The warp sync integration may require a significant amount of reverse engineering from Parity source code (as with AuRa).
As such Warp Sync should only be considered after the fast sync work is finished.
We should have better awareness of an impact of various Rocks DB parameters and include that in setup documentation for users.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.