For those that wonder what writing something like this is like, I thought I post a small snippet of this past weekends 20ish hours of coding:
First pass at peering nodes now working. In order to test that, time was spent working on the Create command (which generates a configuration file - handy if you want to create a lot of them)
Added 50 farmer user on one of my larger servers using some scripts, including one that invoked Create
Added "Pretend" option to Create so that I could test without actually wiping out the existing configuration file, and to avoid creating a lot of wasted IMACredit addresses in the wallet. Shortly thereafter, added a Silent option...
Added "Account" option to Create and Send to specify which IMACredit wallet account to use
Total of 55 nodes running - cool! They even know about each other... cooler!
Added some reputation processing to slowly clean up the "Peer Map" should nodes disappear from the network. Balanced the code so that the longer a node was available, the more leeway given before removal (5 hours of presence balances one failure to be online).
Added a command to see the reputation of all known peers. Added an option to sort by IP address or by reputation.
Hmmm, figured it would be nice to be able to manually force a check to refresh our Peer Map. Oh, doing that would sure make for an easy spam... just invoke it in an infinite loop script and ping death all known farmers... not good.
Added code to remove entries on the seed servers if their attempts to contact a farmer failed. Probably overkill, should likely make seed servers behave like normal farmers.
Added code to remove entries from Peer Map is a server changes the IMACredit wallet address they are associated with. Already had code that handled the reverse, where an IP change occurs for an address (wallet address is a farmers "ID", and under the control of the farmer - IP addresses may not be). Let it run overnight.
Woke up to no entries in the Peer Map! Added some debugging, pushed it out, letting it run while at my day job. Also started work on the spamming problem - current effort limits external connections to one every 10 seconds from the same IP address - likely going to have to make that more robust, but its a start.
First pass at peering nodes now working. In order to test that, time was spent working on the Create command (which generates a configuration file - handy if you want to create a lot of them)
Added 50 farmer user on one of my larger servers using some scripts, including one that invoked Create
Added "Pretend" option to Create so that I could test without actually wiping out the existing configuration file, and to avoid creating a lot of wasted IMACredit addresses in the wallet. Shortly thereafter, added a Silent option...
Added "Account" option to Create and Send to specify which IMACredit wallet account to use
Total of 55 nodes running - cool! They even know about each other... cooler!
Added some reputation processing to slowly clean up the "Peer Map" should nodes disappear from the network. Balanced the code so that the longer a node was available, the more leeway given before removal (5 hours of presence balances one failure to be online).
Added a command to see the reputation of all known peers. Added an option to sort by IP address or by reputation.
Hmmm, figured it would be nice to be able to manually force a check to refresh our Peer Map. Oh, doing that would sure make for an easy spam... just invoke it in an infinite loop script and ping death all known farmers... not good.
Added code to remove entries on the seed servers if their attempts to contact a farmer failed. Probably overkill, should likely make seed servers behave like normal farmers.
Added code to remove entries from Peer Map is a server changes the IMACredit wallet address they are associated with. Already had code that handled the reverse, where an IP change occurs for an address (wallet address is a farmers "ID", and under the control of the farmer - IP addresses may not be). Let it run overnight.
Woke up to no entries in the Peer Map! Added some debugging, pushed it out, letting it run while at my day job. Also started work on the spamming problem - current effort limits external connections to one every 10 seconds from the same IP address - likely going to have to make that more robust, but its a start.