This generally looks good, and sensible. There is only one piece that seems a little dodgy. Sending back out parts of pieces before you have fully received them.<p>I might be misunderstanding, but until a piece is fully received, you can't hash it and check it is right. This could therefore lead to many clients having partially incorrect pieces, if they keep passing it around.<p>I've found (and I'm not 100% sure why) that most bittorrent clients do find they get some number of dodgy pieces over time, so this isn't just a theoretical problem.
This research seems quite interesting, however I see one problem here. The BitMate client is fairly heavy, the download ranks in at 18MB. Getting this out to users in low bandwidth areas becomes difficult due to this. Compare this to uTorrent, which is just a 387kB download.
I may have to reverse the changes here and figure out how to apply it to the transmission torrent client.<p>I'm on horrible hotel wifi or find myself a late seeder next to massive seed boxes on whatever tracker I'm on. This would give a good bump in the ratio the new guys and even things out if it works in theory.