Author

Topic: Denovo (v 0.7.0) and Bitcoin.Net (v 0.26.0) 2024-01-15 (Read 1033 times)

legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Bitcoin.Net version 0.26.0
  • Lots of code improvements, bug fixes, additional debug verification, code cleanup, optimization and tests in ECC
  • Some more methods are marked obsolete that will be removed in future releases
  • RFC-6979 is changed to allow reusing to generate consecutive nonce generation (upto 40% faster)
newbie
Activity: 1
Merit: 0
Version 0.3.0 released.
This release is focusing on the default transaction signing methods and Script classes by improving the code and increasing their test coverage to near 100%.
  • New BIP: Signatures of Messages using Private Keys (BIP-137)
  • Improve Address and FastStream classes
  • Add missing parts in transaction methods for signing
  • Some improvements and bug fixes in script classes
  • Various code improvements, xml doc correction, additional tests and some bug fixes
Version 0.4.0 released.
This release is focusing on the improving P2PNetwork namespace
  • Improvements in P2PNetwork namespace
  • New BIP: Compact Block Relay: SendCmpct, CmpctBlock, GetBlockTxn (BIP-152)
  • New hash algorithm: SipHash
  • Add a miner with limited functionality to add the option to mine a block if needed (will be improved in the future)
  • BIP-39 now lets caller get the entire 2048 words from its wordlists
  • Various code improvements and additional tests
Version 0.4.1 released.
This minor version focuses on improving P2PNetwork namespace more and adds a new BIP
  • New BIP: Electrum mnemonics
  • Minor optimization of some of the classes under Cryptography.Hashing
  • Separated listening and connecting operations from Node class
  • Decouple more classes in P2PNetwork and introduce NodeStatus and ClientSettings classes
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Version 0.15.0 released.
  • All hash algorithms and KDFs are now accepting Span
  • Blocks received from each node is now stored in that node's NodeStatus and processed all at once
  • BufferManager class is now obsolete (will be removed in 0.16)
  • Fixed a bug in FullClient where incorrect in queue peer count could cause a big connection backlog
  • TransactionVerifier will now return better error messages
  • New IOperation added for OP_SUCCESS
  • Added script verification rules for tapscript leaf version 0xc0
  • Multiple important bug fixes, some small code improvements and some tests
Version 0.16.0 released.
  • BufferManager class is removed
  • (I)Witness is changed to use byte[]s instead of PushDataOp (ie. to be stack items)
  • Taproot activation height for TestNet and RegTest were added
  • Add new IOperations for CheckSig ops in Taproot scripts
  • TransactionVerifier is improved to be able to verify all Taproot transactions
  • Various bug fixes, improvements and some additional tests
Version 0.17.0 released.
  • Added MinimalClient
  • All clients are now in a new namespace
  • Add a new method to PublicKey  and Address classes to handle Taproot keys
  • Small improvements
Denovo version 0.2.0 released.
Since the number of available tools in Denovo has grown and the project has reached some level of stability, I decided to start publishing binaries and increment the Denovo version. The binaries are available for Windows, Linux and MacOS x64.
Here are the available options:
  • Main window is used to test the full client where it downloads the whole blockchain. This part may have bugs.
  • TestNet miner to mine TestNet blocks
  • ECIES encryption and decryption of messages with private/public keys
  • Transaction verifier to verify any bitcoin transaction as long as UTXOs are manually provided
  • WIF helper to convert a WIF to a set of human readable words using BIP39 scheme
  • Push tx to broadcast bitcoin transactions to other nodes on MainNet and TestNet
(From now on Bitcoin.Net and Denovo are published together)
Bitcoin.Net version 0.18.0
  • New decryption mode added to BIP0038 for EC mult mode
  • New size related methods and properties added to (I)Block and (I)Transaction
  • [BreakingChange] (I)Blockchain is renamed to (I)Chain
  • [BreakingChange] All error messages (such as those returned from Try*() methods) return an enum instead of string. The enum has an extension method called Convert() that can be used to easily convert it to a friendly string.
  • Improved tests and coverage, improved XML doc, small code optimization and added some new benchmarks
Denovo version 0.3.0
  • Added an About window and made small UI changes
Bitcoin.Net version 0.19.0
  • Some breaking changes in (I)Chain, (I)BlockVerifier, (I)NodeStatus and (I)FullClientSettings
  • Fixed many issues during initial block sync
  • Various tests, bug fixes and code improvements
Denovo version 0.4.0
  • The manual connect to IP option is removed (now only the FullClient option remains) in UI.
Bitcoin.Net version 0.20.0
  • Add BIP-30
  • Introduce Digest256 an immutable struct to store 256-bit hashes
  • Breaking change: BlockHeader is now an immutable struct
  • Digest256 is used anywhere there is a hash
Denovo version 0.5.0
  • Fix UTXO database
Bitcoin.Net version 0.21.0
  • Introduce a new LightDatabase to be used in TransactionVerifier and as mock DB
  • Fix some issues with database, hash collision and handling duplicate transactions
  • Start adding a new and optimized implementation of ECC with the help of libsecp256k1 project
  • Some new tests and small code improvements
Denovo version 0.6.0
  • Fix issues with DB and use LightDatabase as the mock DB for now
Bitcoin.Net version 0.22.0
  • Improve ECC implementation
  • Add a new signature class and a DSA class
  • Various tests and small bug fixes and code improvements
Denovo version 0.7.0
  • Add the option to manually modify the consensus rules in the Verify Transaction tool
Bitcoin.Net version 0.23.0
  • Replace old ECC with the new implementation
  • Disabled BIP-137
  • Small code improvement and bug fixes

No Denovo released this time to keep the binaries on the old Bitcoin.Net version. You can build master branch since the code is updated.
hero member
Activity: 1220
Merit: 612
OGRaccoon
Great project looking forward to trying this out will post some feedback once I have had a play about with this!

Keep up the good work Coding Enthusiast!!
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
New Denovo feature:
You can now verify any transaction by manually entering the tx hex and all the UTXOs it is spending.

An example transaction from last block (7e975f265af0286cd5b6d355b7a92f89e5cdfa6f221ac5614efea57fcef268ba):


  • This can verify any bitcoin transaction
  • The first TextBox needs a raw transaction hex and it will automatically create a list of UTXO TextBoxes to be filled by the user (only amount and script are needed)
  • The result will contain total transaction fee in satoshi and total SigOp count for valid transactions.
  • The result will contain a reason for failed/invalid transactions
  • Currently the used Consensus dependency has everything activated (will add more flexibility in the future to manually activate/deactivate any soft fork)
  • Taproot is also activated but the verification may give false results since it is untested in current Bitcoin.Net version (v0.14.0)
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Version 0.13.0 released.
  • Implement Taproot with BIPs: 340, 341 and 342 (untested). That includes new PubkeyScript, signature, script evaluation, sig hash, SigHash type, public key (x-only) and updated Schnorr signature algorithm.
  • Note: Taproot is disabled by default in Consensus class, it will be enabled after it is locked-in and will be tested to find possible bugs
  • New OP code: OP_CheckSigAdd
  • Many new optimized Tagged hash methods in Sha256
  • IBlock and ITransaction have better size properties that utilize SizeCounter better
  • Added some consensus critical checks to BlockVerifier
  • Improve FullClient, NodePool and Blockchain in handling initial connection and synchronization
  • Various tests, code improvements, optimization and bug fixes
Version 0.14.0 released.
  • Address and script classes are updated for Taproot
  • Address class is more strict about Bech32 addresses
  • Add a new address type (P2TR)
  • Creating P2WPKH and P2WSH no longer requires a witness version (it is always 0)
  • Introduce script evaluation modes
  • Taproot activation height is added to Consensus
  • Small improvements in TransactionVerifier
  • Various tests, small bug fixes and code improvements
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
What part of ElectrumMnemonic.cs does it convert the entropy to phrase?
After you instantiate a new instance using one of the constructors, you can call the public method called ToMnemonic() to get the string of words.

But if you want to see how the entropy is being converted you have to look at the private method called SetWordsFromEntropy(byte[] entropy) which is basically brute forcing the entropy to get one that corresponds to the required seed type.

What should I import to make the new script read from ElectrumMnemonic.cs? I've imported these, but it can't find the “type or namespace”.
ElectrumMnemonic class is found under Autarkysoft.Bitcoin.ImprovementProposals namespace. Also if you click on that little dropdown in your screenshot intellisense should give you the correct suggestion.

Just to say that there's a mistake here: GetMnemonicType?
Thanks.
legendary
Activity: 1512
Merit: 7340
Farewell, Leo
What part of ElectrumMnemonic.cs does it convert the entropy to phrase? I've been struggling to achieve this, but I may be missing something. The obvious answer is the line 34, but I don't know how to call it outside that script.

Shouldn't my code look like this?
Code:
using var fromEntropy = new ElectrumMnemonic(entropy, mnType, wl, pass);

What should I import to make the new script read from ElectrumMnemonic.cs? I've imported these, but it can't find the “type or namespace”.
Code:
sing Autarkysoft.Bitcoin.Cryptography;
using Autarkysoft.Bitcoin.Cryptography.Hashing;
using Autarkysoft.Bitcoin.Cryptography.KeyDerivationFunctions;





LN#282
Code:
private MnemonicType GetMnomonicType(string normalizedMn)

Just to say that there's a mistake here: GetMnemonicType?
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Version 0.8.0 released.
  • Improvments mainly in ReplyManager and Blockchain for handling communication and header verification
  • Target stuct is improved to handle edge cases in compliance with consensus rules
  • IConsensus has a couple of new properties and methods
  • Multiple new Constants are added
  • NodeStatus properties are pure properties and new method is used to signal disconnect instead
  • Block headers are now processed directly through IBlockchain instead of IClientSettings
  • Client can now store and report its own IP address after receiving Version messages
  • Client is now capable of downloading, verifying and storing the entire block headers
  • Client's communication is based on INode's protocol version
  • Added a new word list: Portuguese (affects BIP-39, ElectrumMnemonic but not defined for BIP85)
  • Various bug fixes, tests and some improvements
Version 0.9.0 released.
  • Major changes in P2PNetwork namespace involving initial connection
  • Introduce ClientTime to get/set client time using other peers
  • Block headers now store their hash locally with an option to recalculate hash
  • Fix some issues in Node class when it got disconnected
  • Fix some issues in NodePool class with locks
  • Introduce BlockchainState and respective events to be raised when it changes
  • Peers are selected based on BlockchainState and their service flags, all handled by ClientSettings
  • Introduce a new timer for each peer to disconnect them when they are not responding to requests (this is important when syncing)
  • Improve the initial handshake to send "settings" messages based on protocol version of the peer
  • Add some new constants
  • Various optimization, tests and small improvements
(IStorage will be completely removed in next release)
Version 0.10.0 released
Implemented initial block synchronization code in Blockchain and respective classes
  • IUtxoDatabase and IFileManager have new methods
  • Add a new UTXO class
  • Mandatory ClientSettings properties are read only and can only be set in its constructor, the rest can be set using the respective property setter
  • To reduce memory usage some properties are placed in ClientSettings and are accessed from all threads (by different node instances)
  • RandomNonceGenerator is thread safe now
  • (I)Storage is entirely removed
  • Hash and HMAC functions are all sealed
  • IHashFunction and its IsDouble property are obsolete and will be removed in next release.
    Use the new ComputeHashTwice method instead1
  • Various bug fixes, tests and improvements
1 The interface and the idea for the IsDouble property is a leftover from before the library became Bitcoin.Net and was supposed to be Cryptocurrency.Net instead.
New Denovo feature
Encrypt and decrypt messages using Elliptic Curve Integrated Encryption Scheme (ECIES).
Encoding of the input or the output can be anything from the list of options that are available:


Version 0.11.0 released.
  • New BIP: Bech32m format for v1+ witness addresses (BIP-350)
  • All encoders are static now and have a TryDecode method
  • Validity check by encoders is 2 methods now: IsValid (checks characters) and IsValidWithChecksum (checks both) unless the encoding doesn't have encode without checksum like Bech32
  • IHashFunction is removed
  • IsDouble is removed
  • Almost every class in Cryptography namespace is sealed now
  • Various improvements, additional tests, bug fixes and small XML doc fixes
Version 0.12.0 released.
  • Add new SizeCounter class used by IDeserializable objects to compute the size of the object without serializing it first
  • FastStream class is now using the same initial capacity instead of increasing small ones to DefaultCapacity
  • New Experimental idea: Better mnemonic
  • New BIPs: 44 and 49 (BIP-32 related derivation paths and version bytes used in Base58 encoding)
  • Transaction class is modified to store size and hash and allow manual update
  • Various tests, some small code improvements, bug fixes and optimization
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
This is what a bitcoin library should be like. You've done some brilliant work on both Denovo and Bitcoin.Net. I'm getting really interested to it so I would like to make a question as a beginner about the calls of node functionalities within Bitcoin.net, because I'm planning to create another software in which I'll use this.
The P2PNetwork namespace is still under construction so you may need to write extra code to use it and have to do extensive tests to not face NotImplementedExceptions!
Good news is that almost all parts of the library are loosely coupled (so they can be replaced). For example look at the TestNet miner option inside Denovo to see how I inject mostly mocked dependencies to the NodeConnector (this will eventually be simplified as MinimalClient as explained below).

What exactly am I sending to nodes once I process a handshake? I mean, after I connect with a node, do I simply call functions like getblockchaininfo and get a response? If yes how do I do that?
It depends on what you want to do, for instance "info about blockchain" is not something you get from node, it would be a local thing that you get from your own local instance of IBlockchain (like your best chain height, next difficulty target, ...). Node is just a wrapper around Socket to handle TCP communication.

Eventually when the P2PNetwork is finished you'll have to choose and instantiate a Client (FullClient, SpvClient, MinimalClient,...) and then simply call their public methods. I'm currently working on FullClient.

P.S. Feel free to use the new discussion feature on GitHub https://github.com/Autarkysoft/Denovo/discussions/3
legendary
Activity: 1512
Merit: 7340
Farewell, Leo
This is what a bitcoin library should be like. You've done some brilliant work on both Denovo and Bitcoin.Net. I'm getting really interested to it so I would like to make a question as a beginner about the calls of node functionalities within Bitcoin.net, because I'm planning to create another software in which I'll use this.

What exactly am I sending to nodes once I process a handshake? I mean, after I connect with a node, do I simply call functions like getblockchaininfo and get a response? If yes how do I do that?
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Version 0.6.1 released.
  • BIP-14: you can now set how many version components to return in ToString() method
  • Block headers is a separate class now
  • Multiple improvements in P2PNetwork for handling messages, violations, etc.
  • ReplyManger will send the correct IP and port in version message now.
  • Some optimization, bug fixes and tests
Denovo's new feature
TestNet miner:
This is meant to be used for testing anything that can not be tested otherwise (like transactions that don't propagate even through TestNet) ergo it intentionally has limited functionality.
Version 0.7.0 released.
  • Introduce FullClient
  • Add an implementation of IBlockchain
  • Add NodePool (a thread safe observable collection of Nodes)
  • Introduce IFileManager (planning to remove IStorage entirely)
  • Add ECIES, new methods to encrypt and decrypt messages with Elliptic Curve Integrated Encryption Scheme
  • String normalization method used by Electrum mnemonic is now public static
  • IConsensus instance can now build genesis blocks
  • Some additional node violation cases
  • Some improvements in ReplyManager
  • Various code improvements, optimization, bug fixes and some tests
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Version 0.4.2 released.
Another minor version focusing on improving P2PNetwork namespace.
  • Improvements in P2PNetwork namespace (Each node now uses only 2 SAEA that are taken from a pool instantiated in IClientSettings, other improvements in ReplyManager and MessageManager)
  • New BIP: Deterministic Entropy From BIP32 Keychains (used in Coldcard) (BIP-85)
  • New RNG for nonce generation
  • Add a new word-list to BIP-39 (Czech)
  • Some bug fixes and code improvements in TransactionVerifier
  • Additional tests
Version 0.5.0 released.
A major version mainly improving and finishing the TransactionVerifier.
  • Rewrite of the TransactionVerifier with major improvements and optimization. It now uses the full potential of the powerful implementation of Bitcoin scripts in Bitcoin.Net which improves the efficiency of the transaction verification process.
  • Some fixes in custom value types such as CompactInt comparison operators.
  • Add new script special types to both PubkeyScript and RedeemScript
  • Some improvements in P2PNetwork namespace focusing on MessageManager and ReplyManger
  • Various code improvements, bug fixes and additional tests
Version 0.5.1 released.
  • BIP-39 can now measure Levenshtein distance for any word-list
  • Small bug fix in transaction class
  • NodeStatus is improved to be a better representative of the status of the connected nodes
  • General code improvement and bug fixes in P2PNetwork namespace
Version 0.6.0 released.
  • Lots of improvements in P2P protocol for handling different messages
  • Added new payload types enum
  • IClientSettings now contains everything that needs handling by nodes
  • Introduction of IStorage
  • Big refactor of IConsensus usage
  • Miner class now supports concurrency (caller can set the number of cores used for maximum efficiency)
  • Addition of a new method in `RandomNonceGenerator`
  • Various code improvements, optimization, bug fixes and some tests

A small road-map:
The significance of this version is that it marks the end of implementation of anything that doesn't involve IStorage that includes the following interfaces: IBlockchain, IMemoryPool, IUtxoDatabase.
Next versions (from 0.6.0 to 0.7.0) will focus on improving these interfaces while adding the implementations to Denovo (some may be added to the library too).
That means the work on Denovo will begin and 0.1.0 will be released soon with the testnet miner. At first the old projects such as BitcoinTransactionTool and SharpPusher are going to be merged into Denovo then new features will start coming to it afterwards.
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
I have some experience with working on C and Python. I can read that code and make sense of it. The maximum program size that I have ever written would be just a couple hundred lines only. How would you rate C# for someone with basic knowledge of C?? Is there a starting point you can suggest??
You'll probably love C# too. I find C# to be one of the most balanced programming languages.
It is easy to learn, develop, scale and maintain.
You can write code that runs nearly as fast as the same code written in a low level language such as C, and with .Net 5 and 6 I'd expect the gap shrinks even more to the point where they both compile to the same exact machine code. In some ways you could say it is between C and Python.
C# can be used to write a wide variety of applications and for all platforms, from desktop apps to web apps and mobile apps. It is also being used to write games. The size of the binary can be as small as 8 kilobytes to several GB.

Knowing C you could also write low level code for specific parts that need to be like that and then simply call it inside your C# app using PInvoke.
To get started take a look at this similar question: https://www.reddit.com/r/csharp/comments/88v4w5/transitioning_from_c_to_c/ also check the sidebar for more useful links.
MSDN has excellent documentation and guides to get you started with C#.

I see and appreciate your work, especially the way you simplify and explain things. I would love to learn from following you.
Thanks for your kind words. Hope to see your projects and/or contributions on GitHub soon. Smiley
legendary
Activity: 1904
Merit: 1159
Hey CE. You put a lot of effort into this. I am a novice at programming and would love to be of some small use. As a beginner, I lack the bird's eye view of how product development looks like. I have seen your posts where you have single-handedly deployed several interesting projects. The Finder, Outer project and your UI of miniscript are very interesting. They give a picture of a problem-solving brain taking a target from its beginning to the end goal. This is something i find very inspiring.
I intend to follow your projects. I have a few questions. I have some experience with working on C and Python. I can read that code and make sense of it. The maximum program size that I have ever written would be just a couple hundred lines only. How would you rate C# for someone with basic knowledge of C?? Is there a starting point you can suggest??

I see and appreciate your work, especially the way you simplify and explain things. I would love to learn from following you.
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Version 0.3.0 released.
This release is focusing on the default transaction signing methods and Script classes by improving the code and increasing their test coverage to near 100%.
  • New BIP: Signatures of Messages using Private Keys (BIP-137)
  • Improve Address and FastStream classes
  • Add missing parts in transaction methods for signing
  • Some improvements and bug fixes in script classes
  • Various code improvements, xml doc correction, additional tests and some bug fixes
Version 0.4.0 released.
This release is focusing on the improving P2PNetwork namespace
  • Improvements in P2PNetwork namespace
  • New BIP: Compact Block Relay: SendCmpct, CmpctBlock, GetBlockTxn (BIP-152)
  • New hash algorithm: SipHash
  • Add a miner with limited functionality to add the option to mine a block if needed (will be improved in the future)
  • BIP-39 now lets caller get the entire 2048 words from its wordlists
  • Various code improvements and additional tests
Version 0.4.1 released.
This minor version focuses on improving P2PNetwork namespace more and adds a new BIP
  • New BIP: Electrum mnemonics
  • Minor optimization of some of the classes under Cryptography.Hashing
  • Separated listening and connecting operations from Node class
  • Decouple more classes in P2PNetwork and introduce NodeStatus and ClientSettings classes
newbie
Activity: 41
Merit: 0
Well if it is your complete code then many latest features we can see in the upcoming future. Best of luck.
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Version 0.2.0 released.
  • New BIP: Passphrase protected private key (BIP-38)
  • New hash algorithm: Murmur3
  • Improve Address and Signature classes
  • Various code improvements and additional tests
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Major Updates (see commits on github for details)
  • [2020-01-01] Project started (Happy New Year!)
  • [2020-05-02] v 0.1.0 initial release.
  • [2020-05-16] v 0.2.0 with a new BIP and hash algorithm.
  • [2020-05-27] v 0.3.0 with a new BIP, Transaction signing and Script improvements.
  • [2020-06-23] v 0.4.0 with a new BIP, New hash algorithm, new miner and P2PNetwork improvements.
  • [2020-07-14] v 0.4.1 with a new BIP, optimization, improvement and bug fixes in P2PNetwork namespace.
  • [2020-08-06] v 0.4.2 with a new BIP, bug fixes and more improvements in P2PNetwork namespace.
  • [2020-09-01] v 0.5.0 with major optimization for verifying transactions and some bug fixes.
  • [2020-09-29] v 0.5.1 with more bug fixes and code improvements in P2PNetwork, specifically NodeStatus.
  • [2020-10-15] v 0.6.0 finished implementation of everything that doesn't involved IStorage.
  • [2020-11-03] v 0.6.1 with small improvements in P2PNetwork.
  • [2020-12-09] v 0.7.0 introduces clients and implementations of Blockchain and NodePool.
  • [2020-12-22] v 0.8.0 focuses on initial communication and syncing.
  • [2021-01-26] v 0.9.0 refactor of initial sync with improvements in Blockchain.
  • [2021-03-03] v 0.10.0 initial block sync
  • [2021-04-03] v 0.11.0 static encoders and improved cryptography
  • [2021-04-23] v 0.12.0 new BIPs and new experimental idea
  • [2021-06-08] v 0.13.0 Taproot (BIP-340, 341, 342)
  • [2021-08-11] v 0.14.0 improve Address and Scripts for Taproot
  • [2021-10-30] v 0.15.0 improve initial sync, cryptography and blockchain classes
  • [2021-12-13] v 0.16.0 finished implementing Taproot verification + some breaking changes
  • [2022-01-16] v 0.17.0 added MinimalClient
  • [2022-03-01] v 0.18.0 a couple of breaking changes to improve the code
  • [2022-04-05] v 0.19.0 many fixes in Chain, UtxoDb, ... involving initial sync
  • [2022-06-02] v 0.20.0 some breaking changes involving BlockHeader and any class that deals with a 256-bit hash.
  • [2022-08-05] v 0.20.0 improve DB and introduce optimized ECC

Full changelog:
Bitcoin.Net: https://github.com/Autarkysoft/Denovo/blob/master/Changelog(Bitcoin.Net).md



  • [2020-01-01] v 0.1.0 Initial release
  • [2020-01-20] v 0.2.0 First published binaries with 6 tools
  • [2020-03-01] v 0.3.0 From now on Denovo will be published with each Bitcoin.Net version
  • [2020-04-05] v 0.4.0 The manual connect to IP is removed
  • [2020-06-02] v 0.5.0 Fix UTXO database
  • [2020-08-05] v 0.6.0 Add new mock DB

Full changelog:
Bitcoin.Net: https://github.com/Autarkysoft/Denovo/blob/master/Changelog(Denovo).md
legendary
Activity: 1040
Merit: 2785
Bitcoin and C♯ Enthusiast
Table of Contents

__________


Introduction
This is 2 announcements inside 1 topic to introduce my biggest project to this date. It is an implementation of Bitcoin protocol from scratch without any kind of dependency or code translations.
In short: Denovo is the client and Bitcoin.Net is the library that can also be used by any other project separately.



Denovo
Denovo will eventually be a very flexible and easy to use tool with lots of features from a simple offline tool to handle keys and transaction signing to a full client capable of working as a full node or a SPV node and ultimately a second layer node (such as Lightning network node).
Currently Denovo is in beta and has very limited features listed below:

  • TestNet miner: a simple but powerful miner to mine testnet blocks and broadcast them used only for testing things that can not be tested otherwise.
  • Message encryption: encrypt and decrypt messages using Elliptic Curve Integrated Encryption Scheme (ECIES).
  • Transaction verifier: verify any bitcoin transaction by entering its raw hex and all its UTXOs.
  • WIF helper: an experimental feature to convert WIFs to mnemonic and back
  • Push transaction: broadcast transactions to other bitcoin nodes on mainnet and testnet



Bitcoin.Net
Bitcoin.Net is a stand alone bitcoin library written completely in C# and from scratch (no code translating) with no dependencies. It can be downloaded from Nuget here: https://www.nuget.org/packages/Autarkysoft.Bitcoin

Some characteristics:
  • Full xml documentation of the code explaining what each member does, expections that may be thrown, examples if needed,...
  • Neatly categorized namespaces for ease of access: Blockchain, Cryptography, P2PNetwork are the 3 main ones and there are Encoders, ImprovementProposals covering the rest.
  • Near 100% test coverage (for finished parts only, for now).
  • Loosely coupled implementation of blocks, transactions and scripts making it easy to test and scale.
  • Stand alone cryptography namespace making it possible to optimize functions for bitcoin (only some parts are currently optimized: Hashing and KeyDerivationFunctions namespaces)
  • Implementation of improvement proposals, consensus related BIPs are part of the library and optional bips (eg. BIP-32) are in separate classes.



If you are a .Net developer and a bitcoin enthusiast drop by and check it out. I appreciate your feedback.


Links
Source code on GitHub: https://github.com/Autarkysoft/Denovo
Want to help?
Review the code and leave your feedback in this topic about the code, features any possible bug(s), ...
Donate Bitcoin:
1Q9swRQuwhTtjZZ2yguFWk7m7pszknkWyk
bc1q3n5t9gv40ayq68nwf0yth49dt5c799wpld376s



To Do List (aka future features!)
  • [ ]Optimization of the libray.
  • [ ]Complete testing of remaining parts.
  • [ ]Add more relevant and useful BIPs.
  • [ ]Explore more ideas for a better Bitcoin (eg. block compressions and P2P protocol) to add under Experimental namespace.
  • [ ]Add Lightning Network protocol to both library and client.
Jump to: