Bitcoin full node as a C# library
Knuth C# API is a high performance implementation of the Bitcoin protocol focused on users requiring extra performance and flexibility. It is a Bitcoin node you can use as a library.
Knuth C# API is a wrapper over our C++ libraries, therefore in order to use the C# library we will need the toolchain to build the C++ libraries. Don't panic, you won't have to manually build our C++ libraries, you just have to provide some prerequisites, our build system will take care of the rest.
- .NET Standard 2.0 compatible implementation. We suggest .Net Core 3.1.
- Python PIP package-management system.
To speed up the compilation, we provide some pre-built C++ libraries for some common computer platforms, but case there are no pre-built binaries for your platform, our build system will automatically try to build from source code. In such a scenario, the following requirements must be added to the previous ones:
- C++17 conforming compiler. Could be GCC8, Clang8 or Visual Studio 2019
- CMake building tool, version 3.8 or newer.
- Create a new C# console project:
$ mkdir HelloKnuth
$ cd HelloKnuth
$ dotnet new console
- Add a reference to our C# API package:
$ dotnet add package kth-bch
- Edit
Program.cs
and write some code:
using System;
using System.Threading.Tasks;
using Knuth;
namespace HelloKnuth {
public class Program {
private static bool running_;
static async Task Main(string[] args) {
Console.CancelKeyPress += OnSigInterrupt;
var config = Knuth.Config.Settings.GetDefault(NetworkType.Mainnet);
using (var node = new Knuth.Node(config)) {
await node.LaunchAsync();
Console.WriteLine("Knuth node has been launched.");
var height = await node.Chain.GetLastHeightAsync();
Console.WriteLine($"Current height in local copy: {height.Result}");
if (await ComeBackAfterTheBCHHardFork(node)) {
Console.WriteLine("Bitcoin Cash has been created!");
}
}
Console.WriteLine("Good bye!");
}
private static async Task<bool> ComeBackAfterTheBCHHardFork(Node node) {
UInt64 hfHeight = 478559;
while (running_) {
var res = await node.Chain.GetLastHeightAsync();
if (res.Result >= hfHeight) return true;
await Task.Delay(10000);
}
return false;
}
private static void OnSigInterrupt(object sender, ConsoleCancelEventArgs args) {
Console.WriteLine("Stop signal detected.");
args.Cancel = true;
running_ = false;
}
}
}
- Enjoy Knuth node as a C# library:
$ dotnet run
Repository under construction, the first version will be released shortly.