Development Update 2018-03-12

My fellow MINT fans,

While my goal is to provide updates each week, sometimes other duties have priority and your Mint Development Update may be delayed or even skipped. Never fear, my intention for now is to keep working on MintCoin and providing regular updates!

From the development side, we had a bit of a disappointment when Enlil, one of our more productive technical MintCoin people, decided to leave the project. This was even more sad as it did not happen under good terms, and also included shutting down the explorer he had been running. A loss to MintCoin to be sure, and also a reminder that we should be careful to depend on individuals and try to build solutions operated by and for the community.

Both MintCoin and the larger crypto currency market have fallen in value since the last update. Of course this makes many people unhappy, and my plans for an early retirement are now on hold. Our technology is better than ever, so lets have a look at what happened.

GitHub Access

I finally got update access to the official MintCoin GitHub repository. This is an important requirement for actually publishing a new version of the MintCoin wallet software!

https://github.com/MintcoinCommunity/Mintcoin-Desktop-Wallet

Since then I have been slowly merging changes into the upstream repository. This work is almost complete, and in the future the upstream GitHub will be the best place to get a pre-release version of the wallet code.

Also, any future bug reports or feature requests should go to the issue tracker of the official MintCoin repository:

https://github.com/MintcoinCommunity/Mintcoin-Desktop-Wallet/issues

The open issues in my personal repository will probably not be moved, but hopefully over time these will be resolved.

Travis CI

GitHub supports a Continuous Integration (CI) service called Travis CI. This runs a set of commands whenever a change is made to the code. The official MintCoin repository now makes sure that any proposed change will build both the GUI and daemon version of the MintCoin wallet.

In the future we can extend this to build the macOS version, once we the build working on macOS at all. There may also be an ARM version to verify builds on that CPU family. Finally, we will use Travis CI to run tests once we have them working as well.

Note that Travis CI is not a great CI solution. It only runs a very old version of Ubuntu Linux, and has limited capabilities. But it is free, and does seem to work, so it is an improvement over what we had before (which was nothing).

We may investigate similar services such as the openSUSE Build Service which may provide additional systems to build and test against, as well as providing packages for us to distribute.

Development Team

As mentioned in the introduction, Enlil left MintCoin development. Another contributor, Warren, will be busy doing other things for a while; we expect him to return though. A new developer has also started working with us and has verified the ARM build as well as had some thoughts about a mobile wallet, which would be amazing.

A group of developers has contacted me and expressed their interest in working on the coin. I have happily provided them with the list of issues that I have found, which is on the GitHub issue tracker. I have also let them know the plans, which you can read about at the end of this update. I have not seen any pull requests yet, but this is a hopeful sign.

New Exchanges

While not strictly technical, people really want to know when MintCoin will be offered on more exchanges. While it is offered on four exchanges now, the only one that usually has any real volume of MintCoin is Cryptopia.

Minty All Day has applied for a listing on Kucoin, and is pursuing that, but it seems it will take a lot of money.

We have also been told that another exchange will be listing MintCoin in April. In addition, they have volunteered to provide a new blockchain explorer, which will be an open source solution.

MintCoin Development Fund

People are very generous, and want to help with the technical work of MintCoin. I think that this is great!

After talking with Minty All Day and some other MintCoin administrators we came up with a model where the coins staked by the development fund wallet each month are donated to the active developers. This provides a sustainable way to reward people interested in MintCoin development. It also has the advantage that any new donations will help development indefinitely.

There are a few drawbacks of giving out the staked coins. One disadvantage is that developers do not do the same amount of work each month, so giving out the same coins each month does not make complete sense. Also, if many developers are working on the project then they are in a sense competing with each other for these funds. Indeed since the MintCoin interest is 5% per year this means that the monthly payment would be only 1/240th of the development fund.

I want to see this written up in a semi-formal charter, just explaining exactly how it works and what any new developers can expect. A number of open issues remain, such as who decides what rewards are given, what security there is on the fund itself, and what to do with the MintCoins in the fund if it ever shuts down.

While this is indeed a little bureaucratic, I think that the clarity and transparency would be appreciated by both anyone in the community who donates as well as any developer who works on MintCoin.

For full disclosure, Minty All Day awarded me the first monthly payout for February's work. I approached Enlil, who I felt deserved half or even more of this, but he declined. So, thank you everyone who has donated to the MintCoin development fund! It is good to be appreciated, and I am very grateful.

MintCoin Whitepaper & Roadmap

Another thing that everybody really wants is a MintCoin whitepaper and roadmap. That's really not my thing, but luckily community member Crypto Panda has provided a draft whitepaper to meet the demand, along with a proposed timeline for a whole set of Mintcoin actions.

Both will require some review and probably some further discussion, but the roadmap and whitepaper may provide and answer to people who think that MintCoin is lacking these important documents. The intention is not for it to be "done", but rather for the whitepaper to be a living document, requiring periodic review.

MintCoin Coinburn Game

Yet another topic that repeatedly comes up is when MintCoin will do a coin burn.

A coin burn is when a large number of crypto coins is destroyed. The idea is to increase the value of the remaining coins. This is typically done by investors or developers of a coin in order to increase the price.

In my opinion, a coin burn makes little or no sense for a coin like MintCoin. We have no venture capitalists who hold tons of coins that they got for free and stand to gain by a coin burn, likewise the initial developers have long since left the project. The MintCoin world basically has people who have coins that they value equally.

So a coin burn could be done by burning coins equally for all MintCoin holders. For example, we could burn 99.9% of MintCoins by moving the decimal point. That would mean that a "new MintCoin" would be worth 1000 times as much, but everyone would have 1000 times fewer. Low-valued fiat currencies sometimes do this, but that is because it becomes cumbersome to fill a suitcase with bills to buy a cup of coffee. MintCoin has no such problem.

Another approach would be for one or more individuals to destroy their coin and other people do not; in that case the people who "burned" their MintCoin would be reducing their own wealth so that other people can increase theirs. Of course that is their right, but I would rather see people that want to give money away do it to a charity or some other good cause, rather than just destroying it.

However, community member Ash has explained a possible alternative way forward with the coin burn: a game.

As I understand it, the basic idea is to match two players who want to try to win some MintCoin. Both players provide a fixed amount of MintCoin, and the winner gets all of their own back and half of the MintCoin of the lower. The remaining MintCoin get sent to a "burn address" which cannot ever be used to send from, effectively being destroyed.

This approach has created a lot of excitement in the community, so it will be interesting to see how it works. While for now I am still basically opposed to a coin burn, I will be happy to admit that it was a good idea if it provides real benefits to MintCoin!

GitHub Issue Update

We added a few issues:

  • We would love to figure out how to reduce the memory footprint.
  • A suggestion for a new main screen was presented.
  • Having a system to monitor how long it takes MintCoin to transfer on the Internet will make sure that it remains fast.
  • We should provide better status reporting when the wallet is syncing.

Goaaaaaals!

As it has been for weeks now, the main focus now is still getting a new version of the wallet that we can publish which contains updated builds and all of the fixes that we can. In order for that to happen, we still need:

  • A macOS wallet build
  • A 64-bit Windows wallet build

We have had an offer of an Apple machine for the wallet build, which would help. We have also had an offer of someone who can rent a Virtual Private Server (VPS) for this purpose for the project, which we will do if we do not get an actual machine.

Things that would be nice:

  • Speeding up the initial sync
  • Packages for popular distributions (like Debian and Fedora packages)

Things that should be done someday:

  • Wallet code automated testing
  • Reducing the memory footprint

As always, if you would like to help, please either contact us or just fork the code on GitHub and start hacking.

I should be putting out a new update in just a few days with fresh, minty development news. Until then, keep minting on.

Minty wishes,
Shane Kerr

Copying

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Development Update 2018-03-01

Hello all!

Minty All Day gave us all a pleasant surprise by updating the web site, giving us a minty-fresh new look:

https://mintcoinofficial.com/

While we may miss the style of an early 2000's website, it should make newcomers a lot more comfortable getting involved with MintCoin.

In less happy news, this week we had to ban a user from the Telegram group who was attempting to represent himself as some sort of member of MintCoin governance and solicit donations. Sadly if MintCoin attracts more attention we will also get more scammers, more destructive personalities, and more general non-minty folks involved.

We also we had a bit of frustration in some corners of the Mint community about progress and direction of the coin. Please remember to relax and love each other. Everyone has their own ideas and their own perspective, and while not every suggestion makes sense, we should treat every person with respect and dignity.

On a related note, there have been a lot of people on the MintCoin Telegram group telling us what needs to be done for MintCoin. I try to gently remind them that MintCoin is a community coin, and if you want something done you should do it! Nobody working on the coin has super powers. You can do everything we can, I promise you. 😉

It was another good week for MintCoin prices, steadily increasing from 12 satoshi to an impressive peak of 17 satoshi - with a scary dip on Thursday that has mostly recovered. We cannot say for sure why the price rose, but the number of MintCoin users has increased greatly as has the trading volume. Perhaps everyone is excited by the technical work that is at last being done on the coin?

Speaking of the technical work, lets see what actually happened, shall we?

Many Hands Make Light the Work

We got a new contributor to the technical team, with Warren starting to look at some of the issues with the wallet.

Warren completed issue #12, which was looking at the code to find all of the places where we are using deprecated Windows functions. Luckily there is only one; fixing that is issue #21.

He also had a look at the behavior that the wallet uses to select which coins to send people. This was issue issue #7. The idea is that we should always use the newest coins when sending to someone else, so that the older ones stay in the wallet and can be minted. It looks like the wallet does the opposite; once we confirm this we will change the behavior to help you mint more effectively.

Finally, Warren did some research after noticing that the new Windows binary seems to use more CPU than the old one. More careful research showed that we actually use less, but it was good to check it. Certainly there were a lot of changes in the use of low-level OpenSSL functions which could have resulted in more CPU use.

I was also approached by someone who has design experience, who may be able to help us with the wallet. Unfortunately we are mostly concerned with more low-level problems in the wallet, but we will try to collect suggestions for later work.

We have not lost contact with the developers who may be able to do a security audit of the wallet code either. Currently they are too busy, but we hope that they have time in the future.

We Don't Speak Your Language (Yet)

The idea of translating the MintCoin wallet to other languages came up on the Telegram group. The wallet code seems to support translations, and may even have a Russian translation.

We'd like to verify that this code actually works, and then recruit people who are willing to perform translation into any language that they speak. There is an open issue for this, so if you have any experience with translation and software please contact us:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/issues/18

Raspberry Pi: Not Yet Ready for Prime Time

Last week we reported that MintCoin had been ported to ARM CPU's. This may work, but sadly the MintCoin wallet currently needs more memory than is available on all Raspberry Pi models. MintCoin takes slightly less than 2 GB when running now, but the Raspberry Pi only has 1 GB of RAM. While it is possible to use swap space for this - effectively using a SD card or USB drive as memory - that is very, very slow.

So you can use a different ARM device for minting. Anything with 4 GB will be fine, and anything with 2 GB will probably also work. You can also try to use a Raspberry Pi, but we have not had any success with that yet. A list of single-board computers can be found on the Wikipedia here:

https://en.wikipedia.org/wiki/Comparisonofsingle-boardcomputers#CPU,GPU,_memory

Maybe something there with enough memory will work for MintCoin.

Minting Speedup: Yet Another Bug Fix

Last week we reported a bug fix introduced by the minting speedup. It turns out there was another one. This one prevented the wallet from minting coins, which we had not noticed before because none of the development team actually had any coins older than 20 days yet.

This has been fixed, and your humble developer has been able to finally mint some fresh MintCoin. With €1,21 worth of MintCoin for several weeks of effort I cannot say that the work has paid well, but I look forward to being able to buy a MintCoin-funded beer in the near future.

As we noted last week, there are a few more important things to add than tests in the code now, but it will probably be top priority after our next release.

DNS Peer Discovery, or Getting Rid of the "addnode" Hack

The current wallet today starts with some ancient IP addresses and usually cannot find a wallet running there because it is no longer

  1. It does have a way to find addresses using the DNS... but all of the DNS servers that provided this information have long been shut down.

I went ahead and documented the method for running a DNS server that can be used to seed this information:

https://github.com/shane-kerr/MintCoin-DNS-lookup-server

In addition, a branch of the wallet using a new server set up using this tool was created:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/tree/fix-dns-seeds

New wallets should be able to easily find other nodes and get started without any manual hacks!

As usual, this branch has been merged into the 2.0 branch on my development repository.

Note that if you run a server or two on the Internet that provides DNS and are willing to run it to help Mint users find each other, please contact me and we can add you to the wallet to help MintCoin work better.

GitHub Issue Update

No news on the issues or pull request on the official MintCoin GitHub repository, but a lot of activity on the unofficial side:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/issues

This is in addition to the other issues mentioned already in this update, there are the following:

  • We want to know what the best instruction set is for the ARM port. There are at least 2 to choose from, and it will require measurement to know for sure.
  • We might be able to register the TCP port that MintCoin uses with the IANA. This would prevent other applications from using it, and also make MintCoin a bit more "official" as a protocol.
  • There is an issue to look at the errors that get reported when the Qt wallet starts (this is the normal GUI version). Probably these do not matter, but we want stuff to be clean - and it should be easy.
  • A user reported a problem on a high-resolution (HiDPI) system, and also found a possible fix for this in the Bitcoin issues.

Regular Goal Recap

Here's a look at where we stand on our goals.

The main focus now is still getting a new version of the wallet that we can publish which contains updated builds and all of the fixes that we can. In order for that to happen, we still need:

  • A macOS wallet build
  • A 64-bit Windows wallet build
  • Merging the changes upstream (or forking the repository)

Things that would be nice:

  • A continuous integration (CI) environment
  • Speeding up the initial sync
  • Packages for popular distributions (like Debian and Fedora packages)

Things that should be done someday:

  • Wallet code automated testing
  • Reducing the memory footprint

As always, if you would like to help, please either contact us or just fork the code on GitHub and start hacking.

It has been a very minty week, and I hope that next week will be even more minty!

Yours in Mint, Shane Kerr

Copying

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Development Update 2018-02-22

Hello all!

We had yet another small bump in the price of MintCoin this week, going from 10 satoshi to 12 satoshi. Sadly this did not help us answer the most popular question on the MintCoin Telegram group, which is of course: "when moon?"

Development was slow again this week, but not stopped. Lets look at what happened....

Windows Build

Enlil was able to put together a working Windows build. It is not pretty, as it is cross-compiled and only builds on older versions of Ubuntu, but it does seem to work. It is now available on:

https://snapshot.mintcoin.zone

It should work on any version of Windows that Microsoft supports.

This is exciting because having a Windows build is of course essential for any release. While no self-respecting hacker would ever be caught dead with a Windows system, it turns out that many non-hackers find Windows somehow. Even otherwise enlightened MintCoin users find themselves on Windows systems. 😉

ARM Build

By looking through various pieces of GitHub archaeology the needed components for getting an ARM build fell into place, and we now have a working MintCoin wallet on ARM!

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/tree/arm-build

This is very cool news because it leaves the possibility of setting up a Raspberry Pi or some other low-powered, silent system that is always on and not only holds your MintCoin but also handles minting new ones for you.

Since a Raspberry Pi 3 with a micro SD card and power supply will probably run €45 or so, this is a pretty significant investment just for MintCoin... on the other hand, if you ask around you will probably find a lot of your more geeky friends have a Raspberry Pi or two lying in a drawer somewhere. Note that other single-board-computer (SBC) running on ARM processors are available and some are even cheaper. See what you can come up with!

Note that currently only the daemon version has been tested, but there should be no reason that we cannot get the GUI version working soon.

We'll let this build run for a few days on a Raspberry Pi 3 and if it seems stable then it will get merged into the main development branch, and a binary for downloads will be published for testing.

Minting Speedup Bug Fix

You may recall from the development update two weeks ago, 2018-02-09, that we had a fix for a performance bug in the wallet.

It turns out that this fix actually broke the wallet when attempting to synchronize from the first block on the blockchain. I had never run it in this mode, but during the ARM testing this problem was revealed. A simple fix was put in place, so we have working code again, but this underscores the issues with lack of tests that we have right now.

There are a few more important things to add than tests in the code now, but it will probably be top priority after our next release.

GitHub Issue Wrangling

Our intrepid Minty All Day closed a few of the issues on the main MintCoin GitHub repository that had been sitting around idle for a while.

On the unofficial side, there is now a slew of issues that have been categorized:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/issues

These are now tagged so you can easily see which are bugs, which are suggestions, and so on. A ton of these are labeled "help wanted", which means that if you or anyone you know is able to help it would be much appreciated. A couple are even labeled "good first issue", as they do not require much deep knowledge of the code base and anyone who can code in C++ should be able to jump right in.

A Home for MintCoin Development

We have started to collect a lot of fixes and improvements to MintCoin, and each of these is nicely stored on a separate branch. However, it has started to become a lot of branches, so I have pulled these together into a single place:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet

Building from here will always result in what I think is the best version of MintCoin possible at any given time.

Also, the README.md that you see in MintCoin's GitHub page is crusty and old. An updated version has been authored, which is also used on the combined repository. It also includes some revised links as well as an updated mini-FAQ. (I may have to add "when moon?", and maybe "when will MintCoin be on more exchanges?!?!", but I think it is okay for now.)

Goal Recap

As has become custom in these updates, here is a look at our current goals.

The main focus now is getting a new version of the wallet that we can publish which contains updated builds and all of the fixes that we can. In order for that to happen, we need:

  • A macOS wallet build
  • Merging the changes upstream (or forking the repository)

Things that would be nice:

  • A continuous integration (CI) environment
  • Updated DNS peer discovery
  • Speeding up the initial sync
  • Packages for popular distributions (like Debian and Fedora packages)

Things that should be done someday:

  • Wallet code automated testing
  • Reducing the memory footprint

As always, if you would like to help, please either contact us or just fork the code on GitHub and start hacking.

Until next update, remember: if it ain't Mint, it ain't much.

Your Minty Pal, Shane Kerr

Copying

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Development Update 2018-02-16

Hello Mighty Minters!

The price of MintCoin rose this week, with the long-standing 7 satoshi wall finally giving way and seemingly arriving at a comfortable new 10 satoshi wall. This of course makes us all happy, but you can follow market changes anywhere! What we really want is to dig into the details of the MintCoin technologies, right?

This week saw our intrepid MintCoin developer sick for a few days. Luckily this was not enough to prevent all progress being made on the wallet and other MintCoin technologies.

Capitalizing MintCoin

What's in a name? That which we call a mint
By any other word would smell as minty fresh;

- William Shakespeare if he was alive today, probably

While working on the coin it occurred to me that I saw MintCoin being called both "Mintcoin" and "MintCoin". After a short discussion Minty All Day mentioned that he preferred "mintcoin". In true democratic fashion, he put up a Twitter poll and let the Internet decide:

https://twitter.com/MintcoinTeam/status/963874560318717952

The results are clear: MintCoin (capital 'M', capital 'C') received 73% of the votes.

From this day forward, we will use MintCoin as the official capitalization for MintCoin.

Fix for Assertion Failure on Exit

The wallet was exiting with an assertion failure on shutdown:

mintcoind: /usr/include/boost/thread/pthread/recursive_mutex.hpp:113: void boost::recursive_mutex::lock(): Assertion `!pthread_mutex_lock(&m)' failed.

An assertion is a check that software developers sometimes add to programs to prevent them from doing something unexpected. If a user encounters them then it is a bug.

In this case, probably nothing was done for a long time because this happened when the program was shutting down so did not seem to cause any harm. I decided that any assertion failure is a cause for worry, and dug into the problem. You can follow the debugging here if you are curious for the details:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/issues/6

The end result is that the wallet was temporarily forgetting about threads trying to connect to other nodes - on purpose - to allow the wallet to exit faster. Unfortunately this also ended up corrupting memory!

It is possible that this could have far worse impact than just a scary message, so I added a fix. The drawback is that the wallet can take up to 5 seconds to shutdown - a small price to pay to avoid running through invalid memory.

Pushing Fixes Upstream

I started the process of getting the fixes and other changes that I have been working on pushed upstream, into the official MintCoin repository on GitHub. Minty All Day is the gatekeeper, and has been cautious about merging changes without proper review. Right now that seems to be the limiting factor on getting new code into the MintCoin wallet.

If you can read C++ code, please contact Minty All Day or me (Shane Kerr) and we can figure out how to get a proper review.

Security Audit

I was approached by a couple of people who have done work with security audits of code. They said they would be willing to provide such an audit for the MintCoin codebase, which would be awesome. Keep your fingers crossed, and stay tuned!

Goal Recap

The main focus now is getting a new version of the wallet that we can publish which contains updated builds and all of the fixes that we can. In order for that to happen, we need:

  • Updated documentation
  • A Windows wallet build
  • A macOS wallet build
  • Merging the changes upstream (or forking the repository)

Things that would be nice:

  • ARM wallet build (for example, for Raspberry Pi)
  • A continuous integration (CI) environment
  • Updated DNS peer discovery
  • Speeding up the initial sync

Things that should be done someday:

  • Wallet code automated testing
  • Reducing the memory footprint

As always, if you would like to help, please either contact us or just fork the code on GitHub and start hacking.

Until next update, stay minty fresh!

Your Minty Pal, Shane Kerr

Copying

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Development Update 2018-02-09

Hello all, here is an update about what is going on in the Mint Development world.

MintCoin had its 4th birthday this week, and Minty All Day put some effort into some, well, completely crazy videos and other activities on this special day. MintCoin is a serious crypto-currency that doesn't take itself too seriously!

The MintCoin Development: Who and What?

Right now there are basically two people working on MintCoin developments, Enlil and myself. Enlil is focused on the operations side and I am focused on the software development. There are several people who are kibitzing on the work, but mostly that's it. I think we can and will make reasonable progress with even with such a small team, but of course we welcome anyone with time and skills to join the work.

MintCoin Explorer Website

The most visible and awesome thing to happen recently was the work Enlil has done on bringing up the MintCoin Explorer website:

https://mintcoin.zone/

In addition to the blockchain explorer, Enlil publishes several other things on the site:

  1. Regular snapshots of the MintCoin blockchain, suitable for bootstrapping the MintCoin wallet:
    https://snapshot.mintcoin.zone/MintCoin-Snapshot-Latest.zip

  2. List of active MintCoin nodes, useful for getting the initial connection to the MintCoin network:
    https://snapshot.mintcoin.zone/peers.txt

Code Hygiene Work

On the software side, we have made some progress, although we do not have a release yet:

  1. The code builds and runs on both modern and older versions of Linux. The OpenSSL library has changed, so in order to support older and newer versions a bit of trickery was needed. Also, the compiler for the C++ language that MintCoin was written in has updated to include a different standard, and that also required a bit of work.

  2. All warnings in the code base have been fixed (except for one that cannot be fixed on older systems because of C++ version complaints).

  3. Debug information has been added to the RPC calls used by the wallet, which should help Enlil and I track down some complaints that the block explorer is making.

For the first two changes, your best bet right now is to look at my (Shane's) repository on GitHub here:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/tree/remove-warnings-2018-02-04

For the RPC change, there is a separate branch for that here:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/tree/improve-rpc

Minting CPU Bug Fix

I noticed that the wallet was using a lot of CPU when I unlocked my wallet. I do not have any MintCoin old enough to mint, but the wallet was spending a lot of CPU anyway.

It took me a bit of time to track down, but basically the problem is that when trying to mint the wallet will make a new block. If there are no MintCoin old enough to mint, then it makes an empty block. The wallet then thinks that it is trying to do Proof-of-Work (PoW) mining, instead of Proof-of-Stake (PoS) minting, and looks for the most recent PoW block.

The reason this was causing a lot of CPU usage is that MintCoin had an early phase of Proof-of-Work for a few weeks, but has been 100% PoS for almost 4 years since then, making a new block every 30 seconds. It took almost 2 seconds for the code to search back through all of those PoS blocks to get back to the very last PoW block. Since minting is attempted every 0.5 seconds, we were using 80% of a CPU core just looking back through these old blocks!

Here's some ASCII-art to explain it.

At the beginning of MintCoin, everything was PoW and our blockchain may have looked something like this:

+-+  +-+  +-+  +-+
|W|<-|W|<-|W|<-|W|<-
+-+  +-+  +-+  +-+
 0    1    2    3

To find the newest PoW block, one simply looks at the end for the blockchain.

After the first coins were 20 days old, we started adding PoS coins:

+-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+
|W|<-|W|<-|W|<-|W|<-|S|<-|W|<-|S|<-|S|<-
+-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+
 0    1    2    3    4    5    6    7

Notice that we are mixing PoW and PoS and they are not necessarily in any kind of order. At this point to find the newest PoW block you have to skip any PoS blocks, say by going through block 7 and 6 and finally ending up at block 5.

So far so good.

Now fast-forward 4 years. We have not mined any PoW blocks for most of that time, and have 2 million or so PoS blocks. Our blockchain now looks like this:

+-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+                          +-+  +-+
|W|<-|W|<-|W|<-|W|<-|S|<-|W|<-|S|<-|S|<- 2 million PoS blocks <-|S|<-|S|
+-+  +-+  +-+  +-+  +-+  +-+  +-+  +-+                          +-+  +-+
 0    1    2    3    4    5    6    7                                ~2M

Today to find the oldest PoW block we have to go back through all of those PoS blocks, which is where we are wasting time. A lot of time!

The "proper" way to fix this is to simply not try to mint if there are no coins old enough. However, because of the way the code is written this is a non-trivial change. So instead I introduced a hack so that the code would search back for the last PoS block once, and then use that every time after. The 2 second piece of code now takes less than 0.001 seconds.

I do not know whether this fix makes much difference once you have coins old enough to mint. Once my MintCoins mature in a couple weeks I will check. In any case, this bug would impact anyone who unlocks their wallet without any mature MintCoins (for example someone who wants to send coins somewhere), so it is a real problem.

This code is available in my GitHub repository here:

https://github.com/shane-kerr/Mintcoin-Desktop-Wallet/tree/speed-minting

GitHub Updates

In the last update I had a few short-term goals related to GitHub.

Merge Open Pull Requests

I had a look, and all of the open pull requests were from a single developer. After reviewing the first PR, I discovered a couple things:

  1. While the approach was interesting, it has some deep problems that need to be fixed before it can be used in the wallet.
  2. It is only related to some bootstrapping activity, and probably not useful for how many people use the wallet today.

I have asked the PR developer what they want to do going forward, but not heard any response. This is probably not too surprising considering how long ago the PR was made, but is still disappointing.

Probably what I will do is see if the technique presented makes sense going forward, and implement a version without the problems if so. Otherwise we may just have to close the PR and not merge the changes.

In the future we must be more active with our GitHub and make sure that people willing to help improve the wallet are given quick feedback and treated with respect.

Address Open Issues on GitHub

I reviewed all of the open issues, and one has been fixed with the build patches mentioned earlier. All of the others are problems getting the wallet to sync, which have been responded to.

I would like to close these, but I have no permissions to do so on the GitHub site. I would prefer not to have to move the MintCoin "official" development somewhere else, but without ability to either close issues or merge code, that may be the only option.

Things to Look Forward To

Documentation

The final short-term goal from the last update was documentation. There is no special reason that this needs to be updated by Enlil or myself, so if you are either somewhat technical or have experience writing or updating documentation we would love some help in this area.

Continuous Integration (CI)

Enlil has ideas on putting together a system to automatically build and test different versions of the wallet (a few flavors of Linux, plus Windows and macOS). This would be great, and would help our next release, which I hope will be in February sometime.

ARM CPU Support

The current MintCoin wallet code does not support ARM CPU, which means that you cannot (for example) run it on a Raspberry Pi or other single-board computer (SBC).

We found some old ticket where someone had been able to make this work, and we hope to integrate that into the main code base so that it is an easy option for people. We may even put together a Raspberry Pi image so that people can run a MintCoin wallet on a low-power device all the time.

Finding Peers with DNS

As mentioned in the last update we would like to make it so that the wallet automatically finds other wallets on the network without any hassle. We have an idea of how to set this up, but it will require a little infrastructure work as well as some code changes to use it. But it seems like something that is achievable in the near future.

Longer Term Work

Also as mentioned in the last update, we have a few things which we would like to do but have no specific plans for:

  • Speeding up the initial sync
  • Wallet code automated testing
  • Reducing the memory footprint

Minting for Fun and Profit

I am much happier about the shape of the wallet than a week ago, and am glad we have a few hands working on MintCoin. We can always use more; if you are technical and want to make MintCoin even better get in touch!

Copying

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Development Update 2018-02-01

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.

Origin Story, or What the Mint is up with the Wallet?

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.

Rebooting the MintCoin Wallet Development

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:

  1. Fix and improve the existing wallet, and
  2. 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.

Goals

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.

Short-Term Goal #1: Build & Run on Modern Linux (DONE)

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

Short-Term Goal #2: Merge Open Pull Requests

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.

Short-Term Goal #3: Address Open Issues on GitHub

There are 5 open issues on GitHub, which should all be addressed.

Short-Term Goal #4: Update the Developer & Other Documentation

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.

Short-Term Goal #5: Fix Compiler Warnings, Add More Compiler Warnings

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.

Medium-Term Goal #1: Release 2.0.3 or 2.1.0

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.

Medium-Term Goal #2: Testing

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.

Medium-Term Goal #3: Finding Peers with DNS

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.

Medium-Term Goal #4: Speeding Up Initial Sync

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.

A Minty Call to Arms

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? :)