Hello everyone!
I’m joshburt the owner and operator of
http://www.thebitmines.com (verification:
http://www.thebitmines.com/joshburt.txt)
I’ve been lurking here for a long time but since I see my current project making it into this discussion I’d love to share the details with you all. It’s my first take on a Bitcoin/Minecraft mash-up. My consulting company is called Shape and Share LLC if you see it around. It’s mission is to provide improvements to online entertainment software which is already in the wild.
It would be great if mining in Minecraft could correspond to real hashing. This isn’t feasible given the difficulty of hashing though. Bitcoin mining is moving away from CPU/GPU implementations all together. As a note I’m also a bitcoin miner (who uses FPGA setups, and who is also patiently waiting on the ASIC pre-orders). You get almost nothing for using CPU/GPU based mining and anyone who has better hardware won’t make enough from Minecraft bitcoin hashing for it to be worthwhile (it would even be faster to just use a straight mining application without Minecraft running). You might be able to get close using a mining pool paradigm but you’ll need a Minecraft server which can handle thousands of concurrent users.. This is a different topic and the subject of my original interest in developing against Minecraft, databases, and server to server communications plugins way back in alpha.
You are absolutely correct, you do it all on the database end.
The easiest way is to run a block change logger using mysql as the storage back-end. I’ve written database based plugins a few times for Minecraft, but using an existing plugin has the advantage that it’s written and maintained by another group. Also you aren’t logging all the changes twice this way (less load).
The claim information is updated when the logging plugin updates using a series of triggers and stored procedures. It’s best to approach it this way in-case the 3rd party logging software changes its database schema (or you change logging plugins) – You can just change the way you feed the updates into the back-end system.
The leader boards are generated using scripts that run against the database and then publish to one of the web servers.
After that my financial server takes over and works against the database server and automatically interacts with the bitcoin deamon for handling of payouts. This was important for me so that the process could be set to run more than once a day automatically if the server got more popular.
How to get payouts more frequently to players? I really need help on this avenue. How to give out just enough that there is money there to last until the next world reset. I plan on refreshing the worlds about every 3 months and honestly want to give away all 50 bitcoins before its time to refresh each time. Why 50? That is what I was able to invest into bitcoin for this first round, and I wanted to ensure that I had enough to cover all claims before starting the server.
This seemed to fall into different areas:
1. How to increase the number of bitcoin transactions (less than 0.01)?
Originally the system was written to always issue transactions to a player for every claim (block change) immediately, but I ran into issues automating this since the framework I’m currently using limits the minimum transaction to 0.01 and not a satoshi 0.00000001. Very disappointing.
I really wanted people to see a return for their time and effort sooner. I had to go back and refactor the database and scripts to group claims and issue them at larger payout amounts.
2. How to allow players to earn claims quicker without unbalancing the game play?
I added additional bonuses for block types but this did not allow players to increase claim counts quick enough. Next I went to concurrent player bonuses. More players online – higher claim rates. (Want to earn more, just get your friends to play with you).
There’s the possibility of buyable ranks. You could get higher claim build-up with higher ranks (The more you buy in the more potential you have to earn).
Next I’m going to look into achievements or badges. Once I figure out a good way to store this in the database I can update the leader boards to have player badges (visited the Nether, Killed the Enderdragon, etc). The badges would come with direct bitcoin payouts or some lump sum of claims added to the user ledger and a fun icon next to the player name on the leader board.
So how to give out the bitcoin at a rate which will allow it to last 3 months with 20 concurrent players?
This is my first take on the system:
50 Bitcoins = 5000 bitcent payouts up for grabs.
1 payout = 1000000 claims (1 bitcent 0.01 / 1 satoshi 0.00000001)
You are expected to earn claims at a higher rate than 1 per block change with the in-game multipliers.
5000 payouts * 1000000 claims = 5000000000 total bit claims world-wide available for 3 months for all users.
There are a few ways in the game to process blocks quicker (McMMO skills, etc), but I don’t know how to enable the players to earn quicker without risking making it so easy as to be dominated by just a few obsessed players in a short amount of time.
Past Challenges:
How to associate a bitcoin address to a specific Minecraft user account, since you only really know a player is the player from within Minecraft (and sometimes not even then..).
Resolution:
The user had to be able to set a bitcoin address from within the game. I wrote a small plugin that handles the database call to store the information for use on the financial side. The validity of the address gets checked during the payout process and not when the user sets it. I’d like to change this in the future.
Current Challenges:
How to notify the user in-game that a claim is credited or what their current ‘multiplier’ for claims is?
Possible Solution: I will probably start looking into Spout again as I’ve done server -> client side specific spout mods this way too. I’ll have to look at both synchronous and asynchronous updates as I have concerns with both implementations.
Current Partial Solution: Use of the leader boards on the website which get updated about every 2 minutes.
The Bitcoin based economy would be fantastic but there’s some specific reasons I did not implement it this way. (Yes I could have done this). There is a litcoin server in existence currently doing this by the way. (
http://www.spendlitecoins.com/). I suspect it’s just a web form you submit with an admin who uses a /give command in-game for currency. Same with cashing out from the server. I don’t know personally just making an educated guess.
The reasons I didn’t go this route, and thoughts on the subject:
1. I don’t trust plugin code, and we’re talking about money here (i.e. iConomy’s ‘April Fools Joke’). This is why I pulled all the calculations and payouts out of the game engine ENTIRELY (and ever off the same physical servers). Minecraft in-general is too easy to exploit.
2. You CAN use /give and it won’t break, but you need to account for this a head of time. Not only would players have their own bitcoin wallets, but the server would too (which you would fill before going live). You handle insufficient fund errors, etc at the layer that interacts with the bitcoin deamon. I’ve already had to address this in my current deployment. Additionally you have to ensure that in-game currency totals ALWAYS match actual back-end ledgers and this seems error proned (unless your ingame money is the only ledger – see item 1).
3. Player’s have money sitting in your system. My implementation only risks my own money and ‘theoretical’ claims to the money. Since Bitcoin vendors are a prime target for hacks it seemed unwise to risk player money like this for Minecraft.
4. Having the ability for players to give each other money in-game, (usable outside the game) also opens up the question of gambling. Since online gambling is illegal for *almost* everyone care needs to be taken on how Bitcoin integration is implemented.
Other routes I investigated to fit Bitcoin into Minecraft:
1. Assign each block it’s own bitcoin address. Money could be sent to specific blocks in the game world (before going live) and users would get the funds transferred to their user address when they claim the block. In this scenario each block would *really* have value and provides incentive to claim and control land. Some areas of land could have greater value (or none at all), or anyone could send bitcoin to blocks in-game which could be crazy cool.
etc.. The minimum payment issue comes up again though unless the blocks are loaded with 1 satoshi or more. This has probably been my favorite approach and I’ll probably look into it again for the second round.
2. Don’t actually put player money into a hosted wallet but allow for a payment system in-game. The economy and user-interface would be updated to allow the user to issue payments and we’d process them during the in-game “trades”. I’d look into bitpay and call their API to accomplish it. The issue here is that players will have to copy and paste constantly to do what the game should be handling for them since they’d be working with their external wallet application while playing Minecraft.
I’m also trying to stir up as much interest and suggestions on this as I can. I’ve put an ad up on /r/minecraft (on reddit) for the weekend (and bitcoinfriday)
in the hopes that we can see more useful ideas. My vision wasn’t just around a single server but as a way for players to move their “progress” from SMP server to server, or to entirely different games or markets. I’ve suggested that Buycraft support it (but haven’t gotten any positive feedback yet on it) as this would make it much easier for the Minecraft SMP community at large to start thinking about Bitcoin.
You play for a while and accumulate some “progress” and then turn around and buy ranks, items, or memberships on other servers or games when you want to move on. The benefit being keeping “progress” and being able to purchase or donate to other servers without needed a credit card, etc.
Anyway if you read this far thank you. I’ve been deep in this for a while now and I hope to see others start adding this to their servers and other games too.
Cheers!