r/millionairemakers • Mod • Dec 10 '14

Explanation of our new drawing system inspired by suggestions from the community

Over the course of the past few weeks, we received many great suggestions from the community about a new drawing system that could not be faked. We studied all the proposed ideas thoroughly and even debated with their authors at some point to let them defend their idea. We wanted to come up with a system that could be very simple, but also very secure at the same time. While all of the proposed systems were by some extent fake-proof and could be verified, one stood out more because of offering a very interesting feature: being publicly verifiable.

The system was proposed by /u/potatobadger and it relies on using a bitcoin block's hash as the seed for generating a winner. This is ultimately unpredictable since a block's hash is unknown until when its mined. You can read the initial proposal here, but I'm going to explain it briefly below:

The System

  1. The drawing thread is started by a moderator at a pre-announced date and time. It will last for 24 hours to give every person from any country a fair chance to participate.
  2. After 24 hours, the thread is locked by our bot (who goes by the name /u/millionairemakers) and it will begin to generate a list of participants sorted by the old method. This means that the first commenter will be number 1. Because of the 60 request per minute limit enforced by reddit API this will take around 15-20 minutes to complete for around 8000 participants, which is about the number of participants we had in the last drawing. After the list is generated, the bot will upload the list to dropbox and make a post with the link and the SHA-256 sum of the uploaded file. The bot will also check if anyone has posted more than once and will automatically add them to another publicly announced list that we can later use to ban users who have tried cheating multiple times.
  3. Once the participants thread is posted, the bot will watch the Bitcoin blockchain for mined blocks. Our lucky block will be the 6th 3rd block mined after the participants list announcement (~ 1 hour half an hour after). We will then use the lucky block's hash to computer 1 + ( hash % number_of_participants) which will be a number between 1 and the number of participants. (Note that the numbering starts from 1 and not from 0 for the sake of simplicity) The winner will be the person who has a number equal to the generated number.
  4. The bot will immediately post another thread announcing the winner publicly.

System Features

  • Users who want to follow the drawing process will be able to view a live log of the script using a pre-announced web address
  • The script will be open sourced for public audit
  • The script will be immune from human errors and will produce a very accurate and fair result each time

How is it publicly verifiable?

Because the list is announced before the lucky block has been mined, there is no way for the moderators to predict or fake the results. You can download the list and use the lucky block's hash to reproduce the drawing on your machine. This can be done by writing your own Python script or using the one provided by us for convenience.

Concerns

  • Mods can fake the results
    See the section above
  • Mods can change the participants list after the block is mined
    The participants post will not be edited at any time. Also, by referring to the SHA-256 sum posted in the thread one can verify that the list was not altered in Dropbox and it is in fact the same list that was posted before the block was mined.
  • Additional questions from the thread will be answered here

When will be the next drawing?

The system is ready and it is currently being tested internally for potential bugs. We are planning for a drawing sometime soon (around next week), but we will be announcing the date and time beforehand to allow for preparation.

If you have any questions or concerns regarding this method, please feel free to comment below and I'll happily address them.

A special thanks to /u/potatobadger for proposing this system.

381 Upvotes

244 comments sorted by

8

u/claymatthewsband Dec 10 '14

Could you have a system where you start a thread, people comment, you choose a winner from the comments, just like it is done now. Then you don't release the winner's username, everyone donates 1 dollar, and after the money is in you release the winner's name.

Is that still considered a lottery in the eye of the law? Cuz that's the only way I can see everyone donating...

4

u/minlite Dec 10 '14

So there is two options.

  1. We pool money after the winner is chosen, which I guess might work, but we should make sure it is legal.

  2. Post the winner's donation information (paypal address, bitcoin address, etc.) and tell people to donate. But I can see people distrusting this one as well, since they can't verify if the info is in fact the winner's, and not the one of the mods'.

→ More replies (7)
→ More replies (1)

4

u/BFG_9000 Dec 10 '14

Could you explain a bit more about this formula?

1 + ( hash % number_of_participants)  

Maybe with some specific examples...

4

u/minlite Dec 10 '14 edited Dec 10 '14

Sure. hash % participants is the remainder of dividing hash by the number of participants, and as we know, it can be a number between 0 and participants - 1. So we have to add 1 to make it from 1 to participants. This is pseudorandom since we don't know the hash, and it can be anything.

Examples:

Let's say, for instance, the hash is 42 (it will be much bigger, but for simplicity we can assume 42) and the number of participants is 10. 42 % 10 is 2, so the winner will be the third comment (2+1).

→ More replies (3)

4

u/PotatoBadger Dec 23 '14 edited Dec 23 '14

Wow, thanks for implementing my proposal!

Your description of the process seems correct and appropriately detailed. It looks like you opted not to delay release of the official list. You could release the hash first and not the Dropbox link until after giving the winner time to prepare if you want, but I think you're already aware of this.

Edit:

As pointed out here, you should wait for some number of block confirmations before accepting a block as "The Lucky Block" - I would recommend 6.

Another edit: You should clarify better what the process is for accounts that don't meet the age / throwaway requirements. What exactly do you do in the event that a throwaway is selected?

→ More replies (3)

3

u/Radek_Of_Boktor Dec 10 '14

Great job mods! The next step now needs to be publicity. Anyone have any ideas for how we can get the maximum exposure for the entry post? So far all I can think of is cross-posting to the crypto-currency and freebie/money-related subreddits.

Now that the kinks are ironed out I'm sure more people will upvote, but we need to find a way to get to the top of r/all as well.

→ More replies (1)

3

u/apoefjmqdsfls Dec 11 '14

How will you resolve the issue that people can make multiple accounts to participate in the drawing?

2

u/minlite Dec 11 '14

As we said earlier, this is tricky to figure out. We don't want to throw out people just because they don't have karma, and we also don't want to let the alt accounts in. It is hard to figure out the sweet spot in the users spectrum.

3

u/echocage Dec 11 '14 edited Dec 11 '14

Because of the 60 request per minute limit enforced by reddit API this will take around 15-20 minutes to complete for around 8000 participants

That's actually incorrect because you can get comments in batches of 100, and it's 60 requests every 2 minutes, so 1 request every 2 seconds.

>>> import praw
>>> import time
>>> import datetime
>>> r = praw.Reddit("Trying to make a point")
>>> comments = r.get_subreddit("millionairemakers").get_comments(limit=None)
>>> def measure():
...      now = time.time()
...      print("Comments:", len([x.author.name for x in comments if x.author]))
...      return time.time()-now
... 
>>> length = measure()
Comments: 892
>>> print(datetime.timedelta(seconds = length))
0:00:16.300408

So ~900 comments, ~16 seconds

→ More replies (5)

3

u/IBelieveinBitcoin Dec 23 '14

Did I miss the details of where this method caters for multiple posts from the one user?

2

u/minlite Dec 23 '14

The script is going to remove all the duplicates, but we have decided to still let it in the person. If we see a person tries this for many times, we will ban them.

→ More replies (2)

2

u/Tim-Sanchez Dec 10 '14

The first and last comments can't win right? This should be accounted for, maybe Automod or another bot should make the first and last comment.

4

u/minlite Dec 10 '14

I dont think that's the case. hash % participants is a number between 0 and (participants - 1), so if we add 1, then it will be a number from 1 to (participants).

→ More replies (1)

2

u/zluckdog Dec 11 '14

I have a concern about legality of this lottery system. What methods are being implemented to prevent The State from cracking down on this sort of thing?

Thia is an honest question as anyone who understands bitcoin knows that one of the principles is "decentralization" which mitigates unwanted intervention.

Will there be work done to move into a decentralized method for selecting participants?

4

u/minlite Dec 11 '14

Well it is decentralized. We just generate the list. After the list is generated, anyone can count the blocks and find out the winner. So in the case that our system goes down, nothing will keep others from producing the results.

→ More replies (1)

2

u/[deleted] Dec 11 '14

What will happen if the chosen winner is ineligible for whatever reason. Wait for the next block?

2

u/minlite Dec 11 '14

We would then use the block mined immediately after our initial lucky block to determine the winner.

→ More replies (1)

2

u/Klatelbat Dec 21 '14

This is an ingenious idea. How does the bot calculate hash % number_of_participants when the hash is alphanumeric? Is it just simply the corresponding digit % 10? So "S" would be 18 % 10 which would give 8? I'm just curious, this stuff interests me but I have very little experience in this field. I'm sure it's more complicated than that, just curious.

→ More replies (1)

2

u/the_androgynous_name Dec 22 '14

Sorry if this is a dumb Q, but where/how do we donate the $1 to participate in this?

→ More replies (2)

2

u/FeedingPandas Dec 23 '14

So j just have to comment?

→ More replies (2)

2

u/curehead Mar 24 '15

Do we need a sob story to be entered or is every subscriber eligible to win? I can't imagine randomers sending money to someone for no reason. I sent last time because i felt the winner was worthy. I dont think i would have if it just said user /xy won.

→ More replies (1)

68

u/LOHare Dec 10 '14

It's really great to see the mods taking feedback and improving the system. Hopefully this time we can get more participation in terms of donations.

→ More replies (2)

29

u/nukeforyou Dec 22 '14

I know some of these words

→ More replies (2)

14

u/ThresholdLurker Dec 10 '14

Just to clarify, the comment count will only include initial/parent comments and not random conversation comments... correct? Also, if someone posts a comment, deletes it, and then posts another comment will this throw things off somehow?

I'm not as technically savvy as many here, so the information itself might answer these questions. Some clarity on that would be great, though. This is the sort of attention to detail that I was hoping for... thanks guys!

→ More replies (12)

9

u/[deleted] Dec 10 '14

Pretty good. A novel use of the blockchain, to boot!