Hello Minty Fresh Folks!
This is the first of what will hopefully be regular updates about the status of MintCoin software development. I promise nothing, since I am lazy and easily distracted, but here at least is a first step.
I had been looking at altcoins, thinking about diversifying. MintCoin caught my eye. Even though the web pages I found had an unintentionally "retro" look to them, I like a few things about MintCoin:
- Proof-of-Stake means that we don't need to destroy the planet to have a working crypto-currency.
- Not only does the coin have an actual working wallet and network, it has been around for several years (almost 4 now).
- There is no company or group of investors behind the coin; it is strictly a community effort.
That is all great, but when I downloaded the binary of the wallet from GitHub it would not run on my Linux desktop. Even worse, when I tried to build it, it failed with scary compiler warnings.
I poked around the code, and discovered that the last commits were several months ago, and that there were long-standing pull requests waiting to be accepted or not. That is never a sign of a healthy project.
So I popped into the Telegram group chat and discovered that all of the previous developers have basically left the project. This is obviously not great as there are over 1800 people in the group chat and Cryptopia trades something like 8 to 10 BitCoin worth of MintCoin every day. Not a lot compared to rock-star crypto coins like Ethereum or Litecoin, but still a lot of money if you think about it.
Rather than be sad, we can fix the situation!
The idea is to reboot the MintCoin wallet development. Right now there is a Telegram group chat for people interested in this, separate from the main Telegram group chat since I guess not everyone is interested in the detailed discussions of C++ changes or git commit policies.
There are two schools of thought on the development now:
- Fix and improve the existing wallet, and
- Build an awesome new wallet!
My own feeling is that we probably do want to shift effort into making a new wallet eventually.
The current code base was forked from NovaCoin 4 years ago, which it appears was itself forked from a long-forgotten version of BitCoin Core. This is not necessarily bad, but since MintCoin has not tracked changes to the pre-fork code, it is very likely that there are bugs that have been fixed which we still have. This should make anyone concerned with security; any bug is a potential security problem.
Having said that, I am putting the current effort into fixing a few things with the existing wallet, with the goal of getting a new release out, probably 2.0.3 but maybe 2.1.0.
I think there are a number of reasonable goals, both short-term and mid-term. Note that none of these results in dramatic improvements for the user, but should make the wallet slightly more solid.
As mentioned, the existing release has Linux binaries that won't run on my system, because it is linked to libraries that have not shipped in several years. The code also would not build, mostly because of differences in the OpenSSL libraries used. I found another coin which had the same problem, and stole the approach from this commit:
https://github.com/bitshares/bitshares-fc/commit/fee06a4c75d3215f9b502f8145383005bdda2c80
I had to rework it for our code base, but the approach fixed 90% of the problems. A few more tweaks to adapt to more changes in the OpenSSL libraries, plus a Makefile fix for the command-line tool, and we now have something that will build and run.
If you are feeling brave you can check out the branch here:
https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/tree/build-fixes-2018-01-31
We have 4 outstanding pull requests, all from 2017-06. These are performance improvements, and seem pretty well thought out and relatively straightforward. I am reviewing these but hope to merge them soon.
There are 5 open issues on GitHub, which should all be addressed.
The documentation needs to be reviewed and updated based on the current state of the code base. It will take some effort to avoid fixing things while documenting the current status, but I think it can be done with enough laziness^Wattention.
The current code spews out lots of complaints when building. These should all be silenced by fixing the underlying problem. When this is done, we should turn on extra compiler warnings and fix any complaints that those raise.
And if we are feeling very brave, we can use static code checkers (also know as linters for historical reasons) and fix any errors those discover.
In order to do this we would need to release a beta, with binary images built for Windows, macOS, and Linux. Since I don't have Windows or macOS this may be difficult. But it should be achievable, and might raise some interest in the coin.
It does not look like any of the automated tests were updated since the fork from NovaCoin. This is, obviously, very worrying. If I was intimately familiar with the code base and understood everything about Proof-of-Stake crypto currency then it would be worrying, because everybody makes mistakes. Since neither of those is true, it is terrifying.
So the idea here is to come up with some basic tests of the code that can be easily and automatically run. Since we probably do not want to keep this wallet code base forever this effort should be balanced and limtted, but not having any tests is too scary.
Right now the wallet as shipped fails to ever find any peers. If you do some tricks with "addnode" to your configuration you can convince the program to connect to the MintCoin network, but it is a complete hack.
The MintCoin wallet actually includes a pretty good way to get these initial peers, by looking up the IP addresses in the DNS. However, none of the existing names configured in the wallet actually work at all. It should be relatively straightforward to change these to seeding from a working wallet. It means setting up a bit of infrastructure and maintaining that, but it is not rocket science.
The software should have some faster way of getting the state of the blockchain. The current update system takes ages, and the current workaround of downloading this manually is not ideal, to say the least. It should not be that hard to set up a system where a full version of the blockchain is downloaded and used to start.
Hopefully it is clear that I don't really know what I am doing. Maybe you do? Even if you don't I would love some help! Please? :)