coincoin icon indicating copy to clipboard operation
coincoin copied to clipboard

Reward miners

Open robinmonjo opened this issue 7 years ago • 0 comments

How does it works in Bitcoin

In the Bitcoin blockchain, a block is mined every ~10 minutes. This block can contains from 0 to N transactions. The only limit is that at the end, the block is no more than 1Mb. What's interesting here is that even if there is no transaction a block will still be mined and a "coinbase" transaction (a transaction that generates bitcoin) get generated every ~10 minutes.

Miners also collect transactions fees, and that's a way for people to ensure their transactions will be incorporated into the blockchain quickly if they set a high transaction fee

What's going on with coincoin ?

Currently coincoin has a really naive approach to mining:

  1. A transaction comes in
  2. Miner compete to mine the block
  3. First miner to come up with the proof-of-work add the block to the chain

Miners do not have any rewards and the only way to inject tokens into the blockchain is to use the Token.free_tokens/1 API.

How to reward miners in coincoin ?

For simplicity reasons, I will ignore transaction fees:

  • miners always spend their time mining the next block even if no transactions are in their pool
  • when they start mining a new block:
    1. they generate a new coinbase transaction for themselves
    2. compute the merkle root of all the transactions in their pool (+ the coinbase transaction)
    3. start to compute the nonce

Implications

  • a block no longer contains only one transaction, and will contains 1 coinbase transaction + 0 or N transactions
  • a block contains a merkle_root field which is used to compute the block hash
  • The Token.Ledger module must change to loop over transactions (no more one transaction per block)
  • coinbase transactions must be validated (amount ...)
  • difficulty must be a full part of the protocol and not just a config. Ideally, coincoin will be configured with an average time to mine a block and a block mining reward amount, and miners will re-adapt the difficulty based on this and the time it took to mine X blocks

robinmonjo avatar Oct 08 '17 12:10 robinmonjo