Introduction

Munt is a witness-secured decentralized network for payments, digital assets, finance and more

In 2008 the development of the blockchain changed the world by introducing the possibility of fully decentralised money, something previously not possible, for many this concept of decentralised money for the masses held great promise.

However as groundbreaking as this original concept was it came with a variety of weak points and trade offs in order to achieve this decentralisation, to name some of them:

  • Very low network transaction throughput (when compared to non decentralised systems)
  • Long confirmation times for secure transactions
  • Erratic block times, caused by difficulty targeting being statistical and imprecise, block timestamps being very imprecise and miners being both able and willing to lie about the time of the blocks they find
  • Ability for blocks to be empty (and even a small incentive for miners to do this at times); which allows for DoS in terms of transactions
  • The need for energy consumption and hash rate to grow to very large amounts or even increase over time for the network
  • The inability of the system to handle large drops in hashrate (in these cases blocks could take days or weeks to find)
  • Various built in characteristics/incentives to the system that inadvertently push mining to centralise toward pools or close network proximity etc. Larger miners automatically gain advantage on subsequent blocks to the ones they mine as they get a head start on them before other miners see them and so on and so forth.

These disadvantages make blockchain at times hard or not-ideal to use in the real world, further most of these problems are integral parts of the design making them incredibly hard to improve upon, and as a result most of the industry has chosen to spend the subsequent 14 years ignoring or denying these problems. Slowly the industry has moved further and further away from the original promise that blockchain held and instead toward users just buying and selling tokens on centralised exchanges.

Munt is a project that has taken a hard look, as well as learnt via hands on experience, at the shortcomings of blockchain and instead of trying to hide them has created and iterated numerous enhancements to the blockchain concept, to overcome or improve upon these shortcomings and make something truly suitable for usage.

To do this we have a range of innovations at every level of the system, all of which are carefully designed to work together to achieve something better.

A few of these innovations explained:

  • Witness; Our novel consensus system doesn't rely just on PoW, instead each block mined must be witnessed via a witness that is deterministically picked for the block. To be in the running to be a witness users must lock funds away for a fixed period of time of their choosing. The system is carefully crafted in various ways to maximise security; e.g. the longer you lock your funds for and the more funds you lock the higher your chance of being selected, however each address can only be selected once every 100 blocks, therefore to perform an attack an attacker must split funds into multiple addresses but in doing so incurs a massive disadvantage because the overall weight is now much lower.
    While primarily a security booster, witnessing also allows our chain to be far more secure and cost efficient, however it also provides dozens of other useful benefits to the chain:
    • Witnesses serve as a second way to place transactions in blocks, thereby preventing miners from harming the chain with empty blocks, and also lowering the average time users must wait for their transaction to confirm.
    • Witnesses allow another way of verifying blocks during an initial chain sync, allowing seperation of PoW verification time from chain sync time and therefore offering the freedom to implement a proper CPU only PoW algorithm.
    • Witnesses allow for powerful new ways of integrating "off chain" transaction systems, offering secure instant transactions, implementing side chains or sharding and so on... While we have not yet developed this technology its something that can be built on in future.
    • Witnesses help make block times smoother.

    A Deeper Look - Witness

  • At the heart of our system lies a custom proof of work algorithm SIGMA.
    This algorithm is designed in such a way that GPUs and ASICs cannot gain an overly large (order of magnitude) performance advantage over CPUs, allowing CPUs that people already own to remain the most cost effective and efficient way to mine and specialised mining hardware to not be massively profitable.
    Other currencies have claimed to have such an algorithm but generally have failed, while ours continues to stand the test of time.
    What's our secret? Other than the algorithm itself being very carefully designed, we also leverage synergies with our witness system (e.g. the ability to use if for faster syncing) which allows us to overcome some of the weaknesses/problems that CPU algorithms usually have to face (the need to have very fast verification) allowing for less compromise in our design.
  • validation.cpp
  • Keeping everything ticking along is a very special difficulty adjustment algorithm , one that not only adjusts difficulty for every block but that can even allow difficulty to drop if the current block has taken too long to come in. diff_delta.cpp This allows our chain to keep ticking along with new blocks at very regular intervals, instead of with sporadic bursts of multiple very fast blocks followed by multiple blocks that take way too long as seen on most blockchains.
    Though the algorithm itself is filled with tricks and tweaks that make it perform really well, no difficulty adjustment algorithm; no matter how clever, can account for the input being flawed.
    We have another secret here, PoW2 provides our algorithm with a second more reliable source of time data from the witnesses, this synergy makes all the difference and with the two sources working to keep each other accurate far more precise targeting becomes possible. diff_delta.cpp
  • Our core has been designed as a library instead of a program, this allows us to generate bindings for every platform and then share the same common core logic for all platforms instead of duplicating work on each one.
    Allowing for faster development on new platforms, by developers who don't have to stress about the core, and with all platforms benefitting from one anothers testing and bug fixes. We currently have electron frontend for desktop, native frontend for android and iOS; all sharing the same core.
  • Our transaction system is a complete redesign. Other currencies have opted to make their transaction system as "flexible/programmable" as possible, at the expense of regular transactions being far larger than they need to be. We instead adopt a "pay for what you use" approach, meaning that basic transactions can be much smaller, we still offer the other flexibility but that space is only used and paid for by those who need that functionality and not as an overhead to every transaction. Our transaction system is also designed with extensibility in mind and will allow for all sorts of interesting new transaction types in future.
Read the Whitepaper
A deeper look

Witness

Owners of Munt coins are able to lock their coins into a special address which we will call a "Witness account", the Witness account is assigned a weight based on a carefully picked weighting formula witnessutil.cpp

There are various restrictions/properties here to be aware of:

  • Lock period can be anywhere between 1 month and 3 years; approximated as 30 and 1095 days validation.h
    • A lower limit is desirable to prevent attackers from creating accounts with really short lock periods to perform an attack
    • An upper limit is required to prevent attackers from creating high weight accounts via really long lock periods but with very few coins; e.g. 100 coins for 5000 millenia
  • A minimum amount of 5000 coins and a minimum weight of 10000 is imposed validation.h
    • From a technical perspective this is to protect against "DoS" of the system via creation of tens of thousands of tiny accounts that bog down calculations
    • From a usability perspective its also to protect users from having a poor experience; e.g. prevent them from locking coins for three years but have no hope of ever earning anything and then being upset about this
  • Weight formula is non linear: witnessutil.cpp
    • `x` coins for `y` period always have a higher weight than 2 accounts of `x/2` coins for `y` period which have a higher weight than 3 accounts of `x/3 `coins for `y` period etc.
    • `x` coins for `y` period always has more than double the weight of x coins for y/2 period
    • This incentivises/rewards users who place their funds in a single large account and disincentivizes/punishes those who place their funds in multiple smaller ones

How these accounts then participate in adding new blocks to the chain and securing the network.

I. Eligible witness pool

A pool of all valid witness accounts is calculated from the blockchain by every node on the network and updated with every new block, from this a smaller pool of eligible witnesses are calculated.

witnessvalidation.cpp witnessvalidation.cpp

A witness is eligible if:

  • The lock period on their address has not expired
  • Their address has not had any activity in the last 100 blocks; there is a cooldown period of 100 blocks after every action
  • Their address has not gone longer than a certain time period without performing a witness action, this period is calculated statistically for each address based on its weight in relation to the network weight
  • An address in this state must pay a small fee and wait a further 100 blocks to re-enter the pool
  • This incentivises witnesses to ensure their nodes are online, in good state and that they don't miss their turn, it also makes things harder for an attacker.

II. PoW Mining

When a miner mines a new block the hash of the resulting block is deterministically used as the seed for a “roulette” selection algorithm to pick a single witness from the pool of eligible witnesses.

witnessvalidation.cpp witnessvalidation.cpp

Important things:

  • This is deterministic and there is only one witness for a unique block
  • There is no way to know in advance who will be the witness of a block, or for the miner to manipulate the block data to favour a specific witness, only at the exact moment of finding a valid block is the hash formed and the witness then selected and set in stone
  • If the witness for a block is not online then miners will mine competing blocks and when one of those is witnessed the unwitnessed block will be orphaned.
  • The formula that selects the witness reduces any single account that holds more than 1% of the network weight to 1% at most, so no account ever holds more than a 1% chance of being selected. witnessvalidation.cpp

III. Witnessing

The selected witness adds additional data and metadata to the block and finally signs the block, at this point the block is final.

witness.cpp

More details on important bits:

  • Like miners witnesses are paid a reward for the block they have created and also get to collect the transaction fees of any transactions they have added to the block
  • The entire witnessing operation is very quick; i.e. measured in milliseconds not seconds.
  • The witness sets a timestamp on the block matching the current block
  • Miners set the timestamp when they start mining a block, which is a very long process, so the timestamp is often very different from the actual time the block is found. In contrast the witness timestamp and signing occur within milliseconds of one another so is very close to the actual time.
  • In a plain PoW system miners have an incentive to lie about the timestamp, by doing so they can manipulate the difficulty adjustment and hope to find a larger quantity of low difficulty blocks quicker and various other similar tricks. Even very large witnesses only get to witness once or twice a day at most, so have nothing to gain from manipulating time data.
  • The witness timestamps provide a quality source of time data, witness time data is used to keep miners honest and in turn miner time data is used to keep witnesses honest. Difficult adjustment is much more accurate on Munt as a result.
  • The witness fills any remaining space in the block with any available transactions that are waiting for block inclusion.
  • Any fees from these transactions are paid to the witness
  • If the miner left the block empty this just provides more space for the witness to take advantage of. Therefore it's no longer possible for miners to mine empty blocks (DoS) or block certain transactions (censorship), both of these things would now require both witnesses and miners to cooperate which is a much less likely prospect.
  • Unlike miners, who can gain a minor performance advantage from mining empty or small blocks (less chance of being orphaned by a competing block) witnesses have no real benefit in not filling their blocks so are less likely to make empty blocks.
  • Transactions will enter the chain faster on average because there are two opportunities for them to be selected: By the miner when he starts mining; By the witness after the miner is done mining.
    This allows for a smoother user experience and better network throughput.
  • The witness also inserts a compact delta of any changes the block makes to the set of witnesses on the network. This delta allows for an additional fast way for SPV and other nodes to sync with the network. validation.cpp

IV. Broadcast

The witness then broadcasts the block to the network where it becomes the new chain tip, miners will then start mining the next block on top of the new tip.

witness.cpp

Important points:

  • A miner who finds block 100 cannot begin mining block 101 immediately because it is not yet witnessed, he (like everyone else) must wait for the witnessed version of 100 before he can start on 101
  • This prevents some flaws that regular PoW systems face, the problems with a normal PoW system:
    • When a miner finds a block x he gets a headstart on starting to mine the next block, block x+1 because other miners do not have block x yet, even if he is honest and broadcasts the block immediately.
    • Large dishonest miners can gain further advantage via strategically deliberately delaying block broadcast to other miners to get a further head start, this is known as "selfish mining"
    • It has been shown that what people commonly call a "51% attack" on a regular PoW system and believe requires >50% of the hashrate, can be performed successfully (not always but often) with as little as 33% of the hashrate by taking advantage of selfish mining in a strategic way.
  • There is a second effect related to the above where miners that are geographically (in a network sense) near other large miners gain an advantage over the rest of the network as they get that miners blocks quicker than others and get a bit of a headstart as well
    • This can cause hashpower to concentrate towards pools or to central locations (further than it already does due to electricity pricing and other factors)
  • The above factors lead to pools finding more blocks than they should for their hashrate and punishes solo miners, which is the reason all PoW coins end up dominated by pools.
  • Witnessing negates all of the above flaws and negates all unfair advantages that a pool usually has, as a result Munt has no mining pools but is only solo mined.

Some more details on the security workings.

  • A PoW miner can no longer attack the chain (e.g. 51% attack) with just hashrate but requires some witness accounts as well.
    • On a PoW chain 51% of the hashrate would give an attacker 51% chance of controlling (mining) the next block faster than the network, given enough time and patience success is eventually guaranteed.
    • On a PoW2 chain 51% of the hashrate and 51% of the network weight gives a 51% chance of mining the next block faster than the network; but this doesn't mean controlling it, to do that the attacker still needs to witness it as well, there is only a 51% chance of being the witness of a block that only had a 51% chance of mining faster than the network, leaving only a 26% chance of actually finding a block faster than the network.
      • To get to a >50% chance 71% witness weight and 71% of mining hashrate is required.
      • An attacker can reduce this down to 51% mining/51% witness for a 51% chance again by withholding witness signatures he controls from the competing main chain and only using it for the secret side chain he is constructing, however NB! This is a detectable condition; it is noticeable on the main chain that there is a sudden influx of absent witnesses; the attacker effectively broadcasts his intent to the network ahead of time and it is possible for services to be alerted and take precautions. (Note that we don't currently have services in place for this but it is something that can and will be developed in future and that services can already implement now themselves)
  • Due to the cooldown period of 100 blocks, to attack multiple blocks in a row multiple accounts are required, one per block.
    • The "1%" rule also plays a role here, to obtain 51% of the network weight 51 accounts of 1% each is required, larger accounts are not possible
    • This means that an attacker must split his funds into multiple accounts
    • However this means that he will get less weight in exchange for his funds, because splitting funds into more parts always results in less weight
    • This pushes the amount an attacker must spend to get e.g. 51% of the network weight upwards
  • An attacker needs all of his accounts to be "eligible" in order to actually use them in an attack, but he faces various difficulties in terms of this
    • Due to the cooldown period of 100 blocks any of his accounts that have recently witnessed cannot take part in the account, he must stop witnessing with his accounts at least 100 blocks prior to executing an attack or wait for a period in which none of his accounts are selected for over 100 blocks
      • The more percent of the network weight he has the more unlikely that a period of 100 blocks in which he is not selected ever occurs
      • Selection of his accounts are random until it actually happens so he cannot predict in advance such a period in order to take advantage of it
      • A sudden increase in absent witnesses of large weight again broadcasts that something is up to the network and software/services can take precautions based on this. Currently we do not implement this but it can and will be taken advantage of in future.
    • If he stops witnessing for too long his accounts become ineligible due to missing their expected window
      • An attacker must perform a difficult juggling act of ensuring all of his accounts are both out of cooldown and not about to expire from being inactive for too long in order to use them as part of an attack, while dealing with the random nature of the network, this is quite a challenge.
  • An attacker needs to spend a large amount of capital to actually acquire enough coins to get a large weight to attack the network, and be willing to lock this capital up for multiple months
    • Attempting to acquire this many coins can push up the coin price, leading to the attacker paying more for his coins, and possibly not being able to sell them for the same price later when he is done with the attack
    • Pushing the price up in turn increases mining hashrate and might prompt more people to witness etc.; again increasing the attackers costs further
    • If the attacker opts for the shortest lock period then his weight per coin is a lot less, so he must spend a lot more to get weight
    • If the attacker opts for the longest period he has become a long term 3 year holder of the coin, and attacking the coin becomes a questionable decision at that point.
  • Acquiring a large weight and attacking in that way is therefore not a great prospect, the remaining and more likely avenue is for an attacker to only acquire a small percent of the network weight and a much larger percent e.g. 3000% of the network hashrate instead
    • This circumvents some of the difficulties/costs of acquiring large witness accounts and managing their eligibility, but still requires an investment in the coin and the account
    • A very large hashrate in comparison to the network is required to go this route; it's now a 3000% attack instead of a 51% attack. So the network security is still greatly improved over a regular PoW network
Distribution

Monetary specifications

Munt is already 8 years old with over 80% of the 700'000'000 coins that will eventually be produced already in circulation.
Currently each block produces 25 new coins, 10 for the miner and 15 for the witness, with the next halving due in September 2024 at which point the rewards will be 5 for the miner and 7.5 for the witness.
Halving is every four years and the schedule for the next few halvings is:

witness.cpp

These halvings continue in a similar pattern until we reach 0.00000001 mining and 0.00000002 witness; which will continue to keep rewarding miners and witnesses for about 1900 years but being such a small reward this will total only 12.27 coins being paid out over this period.

Block reward
25 Munt
PoW
10 Munt
Witness
15 Munt
Block time
150 seconds
Munt in circulation
548 M
Total supply
700 M
About

Community + Developers

Munt for developers

The code for Munt is openly available and can be modified and contributed to by anyone we welcome and encourage participation.

We are not using an officially OSI approved license but have had to implement our own licence that embraces all the core freedoms of an open source licence, but with some specific restrictions:

  • Code and modified code/binaries cannot be used without permission on blockchains that are not "The Munt blockchain" or associated official test blockchains. Cannot be used to start a new cryptocurrency or blockchain project
  • Code and modified code/binaries cannot be used without permission on networks that are not "The Munt network" or associated official test networks. Cannot be used to start a new cryptocurrency or blockchain project

Our licence allows all the core ideas and freedoms that the open source software movement is about. The ability for users to continue to use and modify the software should they wish without needing permission or involvement of the original developers. So long as it remains "Munt" and is not the creation of something new We therefore consider the project open source in all of the ways that matter. All code can be found here

Architecturally the codebase is divided into a core backend library (which can be built for multiple targets) and the frontends for each target.

The core:

There are a variety of ways to build the core depending on host/target architecture etc. for experts it can be built via autotools (autoconf; automake; configure; make; etc.) however there are helper scripts to make your life easier in most cases.

Frontends:

  • Desktop: The electron desktop frontend is gully contained within the `src/frontend/electron_vue` sub directory of our repo.
    • Run `yarn` once to set things up
    • Run `yarn libunity:copy` to fetch the latest core libraries (or alternatively build them manually)
    • Run `yarn electron:serve` to start the application
  • Android: The android frontend is fully contained within the `src/frontend/android/unity_wallet` sub directory of our repo.
    Simply open it in android studio and get going. You will need to either build the core (as above), or alternatively simply download the core libraries for android from our repo and put them in place.
  • iOS: The iOS frontend is currently not publicly available, if you are interested in working on it please contact us for access.
Get started

Software and Features

Important information

Keep the backup phrase you see at installation in a safe place. Lose phrase or someone else with access to the phrase = lose Munt. You alone are responsible for managing your Munt and use of the Munt app is entirely at your own risk. When you download the Munt app you agree to the general terms and conditions.

General Terms and conditions

Munt v3.0.7
Full wallet (Send, Receive, Witness and Mining)
Checksum / Release notes

github.com/muntorg/munt-official/releases/tag/v3.0.7

Mining

Munt is very easy to mine and requires no special steps.
Just download and run the software on any machine with enough spare memory and a reasonably modern CPU. Allow the software to finish synchronising with the network and then click on the mining icon and click "start mining".
The software will show some speed statistics to verify that mining is working, at which point its just a waiting game until you get your first block.
Don't be discouraged if you don't get anything at first, as you are only one of many miners and there are only 576 blocks a day it can take a while until you first get lucky.

Don't be alarmed/discouraged if you see a reward in your wallet which then disappears, known as an "orphan block" this is something that occurs from time to time on any blockchain; when two miners find a block in close proximity to one another and the network has to chose between one of the two blocks, the block that is not chosen is "orphaned" and never forms part of the chain and therefore does not receive the reward it contained. This happens also in a second way on Munt if the witness for your block happens to be offline. While it can be frustrating when this happens its important to remember that this happens to all miners on the network not just you.

How-To Guide

Witness

All that is required to witness is an installed version of the wallet with some coins in it.

  • Select to create a new witness account and then select the amount and period of time for which you would like to witness.
  • The software will show an estimate of how frequently you are likely to be selected and what your overall earnings are likely to be.
  • Once you are satisfied click to fund the account.
  • You will need to keep your wallet online/running 24/7 in order to witness, alternatively you can export your witness key and use a cloud service to witness on your behalf .

Your witness key is a special key that can only be used to witness, having the key does not enable/entitle anyone to extract funds from your account, while you should still be careful who you share this key with doing so does not put the funds in your witness account at risk even if the key does get stolen.

How-To Guide

Support

Help from users

Frequently asked questions

View answers to frequently asked questions.

Go to Gulden.help

Sign up for Slack

Munt has an active and helpful community. On the Munt Slack anyone can ask questions or meet the people behind Munt.

Sign up

Shortly after applying you’ll receive an invitation for Muntorg.slack.com. Channels are moderated and maintained by the Munt Community. Click here for more information about Slack.

General Terms and Conditions and Privacy Statement

No rights can be derived from using the Munt app and in no way Munt.org can be held liable for any damages, in any way, as a result from using the app or from the inability to use this app. Munt.org processes your personal data (email address, IP address, location data, data about your activities on our website, internet browser and device type)by using our services and/or because you provided us with your personal data. We do that to be able to e-mail in connection with our service and so that you can create a Muntorg.slack.com account. Munt.org will not store your personal data longer than strictly necessary. Munt.org provides information in connection with our agreement or to comply with a legal obligation. Munt.org takes appropriate measures to prevent and avoid abuse, loss, unauthorized access, unwanted disclosure and unauthorized changes. Munt.org uses functional, analytical and tracking cookies. Munt.org uses cookies with technical functionality only. These cookies make sure that the website works properly and that your preferences can be stored. These cookies will also be used to optimize the website. We also place cookies to follow your surfing behavior so we can offer custom content where appropiate. There are also third party cookies placed and active on this website.

By using this site, you agree to our use of cookies.