Hi all,
I'd like to share the things i found out while researching the above question.
I0coin is killed by:
- I0coin by keeping all auxpow's in memory
- slow adoption by regular pools
- P2Pool
- high blockrate
Why?
- I0Coin stores all auxpows in memory, because auxpows are included in CBlockHeader and ALL CBlockHeaders are stored in memory, Bitcoin up to at least v0.8.3 does this also.
- Due to normal pools having little support for I0Coin (as opposed to eg. NMC), most of the mining is done in P2Pool
- P2Pool has very large (8kB as opposed to 200B) coinbase transactions (each auxpow has a copy of the full coinbase transaction in the bitcoin block with which it is associated)
- Due to the high blockrate, i0coin's memory usage grew faster than namecoin, ixcoin, devcoin GOTO bullet 2 and repeat ad infinitum
Endresult: i0coin's memory usage grows by at least 8kB per block, which is 8kB*60/1.5*24*365 = 2.7GB per year...
Solution:
Port I0coin to v0.8.3. I did that
https://github.com/rsnel/i0coin/tree/i0coin-0.8.x (I started with doublec's v32509 and merged sucessively higher versions of bitcoin into it). It seems to work fine. (it can do transactions, it can mine blocks that get accepted eg 01f017f6e86c5de539b0137677e6d096bbd2b05d9859c4c25c14c73579644dc8, which is a nVersion=2 block because it includes its nHeight in the coinbase script) On its own, this port uses about 500MB more memory than v32509. (I hoped to solve the problem by doing this port, but that didn't work...)
Then I proceded by, and I agree that this is a bit dirty,
just not storing auxpows. This breaks two things:
- response to getheaders request doest not return auxpow part of header (not that bad, because the Satoshi client never issues getheaders requests)
- CBlockIndex:CheckIndex, it just returns true because it doesn't have access to auxpow (see comment in source)
I implemented this in branch dirty-trick. Please try it out, and run this version besides your own i0coind (it uses about 321MB) and keep an eye on it.
Better solution:
Retrieve auxpow's from disk in the two problem cases.
Further work:
- compile on other os's, only tested "make -f makefile.unix i0coind"
- fix logo's in qt client
- stabilize/test 0.8.3 port
- when to enable BIP30?
- much much more
- irc seeding is removed in bitcoin, include good seednodes and setup DNSSeed for i0coin
Greetings,
Rik.