When the Koinos core development team left Steem the problems they saw plaguing the blockchain space all boiled down to accessibility. They wanted to build the most accessible blockchain ever that would be able to rapidly improve over time thereby ensuring it always remained the most accessible blockchain in the world.
No ICO, No Pre-mine
They knew the journey would be difficult, and the outcome was by no means guaranteed, but also that all the work would be wasted were control to be handed over to insiders through an ICO or pre-mine.
To solve this problem they modeled the launch of KOIN off of Bitcoin’s launch, but on the most used general purpose blockchain in the world, Ethereum. Launching alongside an insanely easy-to-use mining app made KOIN accessible to anyone who was willing to perform proof of work computations on their computer. Advance notice of mining was given along with the whitepaper explaining the technical innovations at the foundation of Koinos.
The idea behind this launch was therefore NOT to raise money (even the team had to spend money to acquire the token) but to pre-seed the decentralization of the Koinos ecosystem.
KOIN was created to serve as a medium of value exchange for a truly decentralized, and truly accessible, blockchain-powered future. Its foundational use case will be as a fast and totally fee-less base digital currency of the Koinos mainnet, a distributed ledger with an immutable record for cryptocurrencies, NFTs, and smart contracts.
A snapshot will be used to initialize the token balance’s on the mainnet using the ERC20 token balances.
Liquid KOIN tokens will contain “mana” which is similar in concept to Ethereum’s “gas” but unlike gas, a user’s mana is consumed without diminishing the user’s token balance. As a user performs fee-less transactions their KOIN tokens are locked based on the amount of mana that is consumed by their transactions allowing them to “pay” for network usage in opportunity cost as opposed to fees. This makes the KOIN token a proxy for network resources guaranteeing the liquid token holder perpetual access to a proportionate amount of the network’s computational resources.
ERC20 Launch Details
The PoW algorithm is memory-hard and GPU resistant which means that there will be little benefit to mining with anything other than a CPU, which makes mining accessible to ordinary people. In order to make mining even more accessible, we will be releasing a mining client that will make it very easy to mine KOIN on Ethereum.
Our top priority when designing the ERC20 PoW algorithm is accessibility. We want everyone to be able to participate in the initial distribution of KOIN and not just those who can afford expensive hardware. To accomplish this we designed the algorithm to be “memory hard.” Memory hard algorithms also tend to be GPU resistant. GPUs are optimized for performing the same set of instructions on different data inputs. By carefully choosing the correct memory size of the algorithm, CPU performance can be optimized over GPU performance. It has been demonstrated that CryptoNight performs competitively, if not better, on a CPU than a GPU for smaller memory input sizes [@feng-memory-hard].
Ensuring accessibility is also one of the reasons that we are choosing a 6 month mining window. Optimizing an algorithm for a GPU and/or ASICs takes time. Our algorithm is novel and will be replaced entirely with the launch of mainnet, which will use a totally different algorithm. The transient nature of the algorithm will reduce the financial incentive of developing optimized mining software. Our miner will be released open source, and we expect contributions that optimize mining. For this reason, the mining algorithm allows for multi recipient mining, so that optimizing the algorithm can be profitable for developers. We are also releasing the miner under GPLv3 to continually preserve the open community nature of the distribution of KOIN.
Generalized Birthday Problem
The PoW algorithm can be thought of much like the card game “Set” except that each card is 2mb in size and has 256 properties, so each card is unique. When mining, your computer is trying to find 10 different “cards” that match more closely than any other miner. Because every card is unique it is not possible find 10 identical cards.
The KOIN ERC20 mining algorithm is based on the generalized birthday problem. The memory input is based on a seed input which is a recent Ethereum block hash. A proof consists of a miner address, miner pow height, target difficulty, recent Ethereum block hash, recent Ethereum block height, and nonce. This data is referred to as the secure struct and is hashed to create the secured struct hash, S. We have designed a pseudo random number generator based on a polynomial with coprime coefficients along with modulo arithmetic to return an index in to the memory input. The generator takes S as an input combined and output 10 indices in to the memory input. These inputs are non-associative which leads to frequent cache misses and is the memory hard portion of the algorithm. The seed lookups are XORed together along with S to get the result of the work. The work is valid if its value is less than the target difficulty specified in the secure struct.
Because the KOIN mining algorithm is not competing for block production, it can support per miner dynamic difficulty. The mining contract uses an XYK market maker to determine the price of KOIN in hashes. When a proof is submitted, the miner is credited with hashes equal to the expected number of hashes required to create the proof and they buy KOIN from the market maker, increasing the difficulty. Over time the mining contract creates new KOIN, which buy hashes back from the market maker to reduce the difficulty. Each miner also specifies their own unique PoW height.
The combination of inputs results in an algorithm where each miner is only in competition with themselves and the only variable they need to choose is their target difficulty, which can be derived in our miner from their current hash rate and how often they wish to submit a proof. Each proof submission requires around 118,000 gas regardless of the difficulty of the proof. A miner can more efficiently mine (in terms of transaction fees) by submitting more difficult proofs less frequently. But this approach creates more variability. Variability can be reduced by choosing a lower target difficulty with the tradeoff of having to spend more on transaction fees.
More coming soon