block-core / blockcore

Open source .NET Core Bitcoin based blockchain node in C#
https://www.blockcore.net
219 stars 90 forks source link

Move from DotNetStandard to use DotNet Core 2.2 #8

Closed xandronus closed 4 years ago

xandronus commented 4 years ago

Hi stumbled upon this project. I may be interested in contributing especially around improving the functionality of the bitcoin fullnode.

.NET standard seems to lag core in functionality. Sounds as though its planned to merge core and standard in .net 5 so I'm not sure sticking with standard at this point is worthwhile.

Interested in hearing the maintainers thoughts, if they are in agreement I could possibly look at preparing a PR to upgrade the projects to .net core 2.2

thecrypt0hunter commented 4 years ago

It would be great to get some help with the Bitcoin full node.

dangershony commented 4 years ago

This is not a bad idea, we did discuss that previously and someone even prepared a PR on stratis that never got merged.

Moving to dotnet core will also open an array of improvements in performance some perf improvements need to be imported from NBitcoin.

Regarding BTC fullnode this is excellent, part of this projects goals is to maintain a bitcoin fullnode. Having some folk to keep the functionality up to date with bitcoin core is much needed.

There are a few tasks that need work to make the node more usable (coindb, mempool fee, walletdb, missing RPC) I hope I will be able to create the pending tasks in the next few days. Some of them are defined in the parent repo and I will port them over.

sondreb commented 4 years ago

How about going directly to .NET Core 3.0 as oppose to migrate from .NET Standard to .NET Core 2.2? Some of the projects are already on .NET Core 2.1, it is not everything on .NET Standard.

dangershony commented 4 years ago

Are there any significant benefits in 3.0? I know that there are perf improvements just by moving to core from standard.

sondreb commented 4 years ago

As long as there are no drawbacks, I don't see why not upgrade to the latest runtime and SDK?

dangershony commented 4 years ago

A draw back I can think of is tha low level libraries should stay as lower version as possible so can be referenced by a bigger set of libraries.

Not saying that's a strong argument because our product is end product.

sondreb commented 4 years ago

That is a drawback between moving from .NET Standard to .NET Core, I agree on that. Might not be much value in migrating the libraries. It should at least be migrated to .NET Standard 2.1, which is compatible with .NET Core 3.0 and the latest runtimes for Mono, Xamarin. It is not compatible with UWP and Unity yet, and .NET Framework will never support .NET Standard 2.1 or higher.

https://docs.microsoft.com/en-us/dotnet/standard/net-standard

dangershony commented 4 years ago

Coming back to this I don't have much issue with upgrading to netcore 2.2 and even actually netcore 3 for that matter, this features are top level components and will probably not be referenced from lower version projects.

@xandronus if you are up for it by all means start a PR, please confirm so we don't have work done in parallel

xandronus commented 4 years ago

I will start with 2.2 upgrade PR and see how that goes

sondreb commented 4 years ago

3.0 has assembly unloading, which can be used to have dynamic module/plugin/feature load and unload without taking the node offline.

There are some big performance improvements as well, detailed here: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/

dangershony commented 4 years ago

Yeah I agree 2.2 is fairly simple to upgrade @bokobza did it already, 3.0 is more interesting and challenging

dangershony commented 4 years ago

@xandronus feel free to also attempt an upgrade to 3.0

xandronus commented 4 years ago

Will do. I will use the Stratis PR as a starting point and see how the tests do.

dangershony commented 4 years ago

Excellent idea, you'll have to charry-pick the commits for because the masters are different right now.

MithrilMan commented 4 years ago

my position on this is : go for net core 3.0 (3.1 actually) hands down, too many improvements and I don't see reasons to stick to dotnet standard nor upgrade to a lower dotnetcore version