This looks great. Have you tried to do merged mining? There is a large bounty if you can get that working and there is source code at dot-bit to do it.
I have the first attempt at merge mining support in the 'mergedmining' branch of the git repository. If anyone wants to test it I'd appreciate the feedback. On linux you can clone the repository and build with:
$ git clone git://github.com/doublec/i0coin.git
$ cd i0coin
$ git checkout -b mergemining origin/mergemining
$ cd src
$ make -f makefile.unix i0coind
Merged mining is disabled on the production network but enabled on the test network. What I do is set up a 'test network in the box' approach. This allows running test nodes without connecting to the wider network. I run two nodes on i0coind testnet - these will be the 'secondary chain':
First create directories to hold the chains. Node 1:
$ mkdir -p node1/testnet
$ cat >node1/testnet/i0coin.conf
rpcpassword=node1
rpcuser=node1
daemon=1
upnp=0
rpcport=17001
noirc=1
port=18001
Node 2:
$ mkdir -p node2/testnet
$ cat >node2/testnet/i0coin.conf
rpcpassword=node2
rpcuser=node2
daemon=1
upnp=0
rpcport=17002
noirc=1
port=18002
Now we need a primary chain node. You can use namecoin for this since it's merge mine enabled. You can also use production i0coind with the binary built above since it has the code to be a primary node enabled:
$ mkdir -p node3/testnet
$ cat >node3/testnet/i0coin.conf
rpcpassword=node3
rpcuser=node3
daemon=1
upnp=0
rpcport=17003
noirc=1
port=18003
Start the nodes:
$ i0coind -conf=/full/path/to/node1/testnet/i0coin.conf -datadir=/full/path/to/node1 -port=18001 -testnet
$ i0coind -conf=/full/path/to/node2/testnet/i0coin.conf -datadir=/full/path/to/node2 -port=18002 -testnet -addnode=127.0.0.1:18001
$ i0coind -conf=/full/path/to/node3/testnet/i0coin.conf -datadir=/full/path/to/node3 -port=18003
You need the 'addnode' in the second node start so it connects to node1 to form a network. Also note that 'node3' is not a testnet node. And make sure 'i0coind' is the one built from the 'mergedmining' branch. You can check the status of the nodes with commands like:
$ i0coind -conf=/full/path/to/node1/testnet/i0coin.conf -datadir=/full/path/to/node1 -port=18001 -testnet getinfo
$ i0coind -conf=/full/path/to/node2/testnet/i0coin.conf -datadir=/full/path/to/node2 -port=18002 -testnet listtransactions
Now run the merged mining proxy:
$ contrib/merged-mine-proxy -w 17004 -p http://node3:node3@127.0.0.1:17003/ -x http://node2:node2@127.0.0.1:17002/
The merged-mine-proxy code is from namecoin and is in the 'contrib' subdirectory of the i0coind 'mergedmining' source. This proxy will listen on port 17004 which is where you should point your miners. For example, poclbm:
python poclbm.py -d 0 --user mm --pass mm --host localhost --port 17004
You can use any username/password. You should see output from the proxy when the miner finds a block like:
2011-11-24T09:13:04.598774,solve,0,1,00000000a94a6f99a4ff77dc5ec8cdda3567ac3674bbc1e7ceec8339083d0e86
The "solve,0,1" means it solved the secondary chain (the i0coind testnet). It'd be "solve,1,1" if it solved the primary and secondary chain. Hopefully the above gives a start for people to test the code. When it's confident that it's stable we can set a block to enable it live.