Author

Topic: [RAFFLE] Chasing Casascius Gold Plated Bar, Provably Fair--FINISHED! (Read 1418 times)

copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
Hmmm, apologies. Thanks Mitchell. The problem is that no one has received counterparty tokens from what I've heard, so they don't even know what book number they have. This is an error in my opinion.
copper member
Activity: 3948
Merit: 2201
Verified awesomeness ✔
Seem like someone claimed the prize already?


https://www.reddit.com/r/Bitcoin/comments/4s2g4b/im_so_excited/

Correct me if I'm missing something here, but a lot of this isn't adding up. According to the link provided by proton for the draw, the winning book number is #13.. Now..
How do we know who has book 13 if buyers have not received their counter party tokens?

Edit: How is this "Provably Fair"?

#13? How did you get #13? This is the result I got from the the script:
Code:
{ 'block height': 420000, hash': '000000000000000002cce816c0ab2c5c269cb081896b7dcb34b8422d6b74ffa1', book number': 3291 }

The picking is fair (not sure if it's provably fair) as it uses a blockchain hash which cannot be known until it exists. As the random function always uses the same seed, the first number will always be the same (allowing us to verify the result). I just ran the script three times to proof this:



This is my (very very slightly edited script):
Code:
var request = require('request');
var RNG = require('rng-js');
var blockNumber = 420000;
request({
url : 'https://bitcoin.toshi.io/api/v0/blocks/' + blockNumber,
method : 'GET',
}, function (error, response, body) {
if (response.statusCode == '404') {
console.log({
"block height" : "block 420,000 is not yet available",
"block hash" : "please check in the future",
"winning book number" : "n/a"
});
} else {
if (error) {
console.log('Error sending message: ', error);
} else if (response.body.error) {
console.log('Error: ', response.body.error);
} else {
var blockInfo = JSON.parse(response.body);
var rng = new RNG(blockInfo.hash);
console.log({
"block height" : blockNumber,
"block hash" : blockInfo.hash,
"winning book number" : rng.random(1, 5000)
});
}
}
});
copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
Seem like someone claimed the prize already?


https://www.reddit.com/r/Bitcoin/comments/4s2g4b/im_so_excited/

Correct me if I'm missing something here, but a lot of this isn't adding up. According to the link provided by proton for the draw, the winning book number is #13.. Now..
How do we know who has book 13 if buyers have not received their counter party tokens?

Edit: How is this "Provably Fair"?
legendary
Activity: 2688
Merit: 1192
Asking for advice on how the drawing should proceed and now someone is already claiming a win? Seems like some terrible planning. It makes way more sense to settle on an algorithm first.

I evaluated other solutions to that problem, but those solutions had the side effect of revealing exactly how many books have sold which is useful to our competitors (Now that the spreadsheet is out, later buyers can extrapolate the same information), unless there is a version I didn't consider

Competitors? This looks like a one time art piece with a quirky selling point (Casascius raffle). Who exactly would benefit from knowing the amount of books you sold? The major selling point that seemed to attract a lot of people to your overpriced book is the possibility of winning a rare item and the assumption you are unlikely to have another.
legendary
Activity: 1722
Merit: 1000
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
I am sure it was previously stated that the book would only be sold until the halving

I also am sure that it was stated that not all 5000 books had been printed yet, indeed far from it, and that 5000 was the absolute max that would be done. So inference is that only as many books would be printed, as had indeed been sold

I struggle to see how it can be justified to base the raffle on anything other than actual books sold pre halving. Anything else has the appearance of shifting the goal posts

Will the mystery lower number for the raffle be the real number of books sold pre halving ?

This would be solved with a 3-character hash draw.
You have 3360 possible selections, which is far greater than the books sold thus far I would imagine.
Considering that the halvening is in less than 100 blocks and the books are not being sold after this,
it would be an easy, fair solution.
I will even handle all the entries if needed.

Thanks

I like having a little mystery to it with what the max number is

Mystery is fine, but we are asking for transparency.
I would take the advice from above before this turns into a crap-storm of unhappy people
You have about 3 hours to decide.

I decided to change the max number down from 5000, increasing the odds for everyone and removing the possibility of unclaimed tickets and removing the possibility of keeping sales open

Everyone will be able run the code and change the RNG function max to get an idea of what the max number was by trying every max number from 2 to 5000. This should actually create a distribution of possible winning book #s that reveal a lot about sales, and simultaneously prove there were no improprieties. Let me know your perspective, it is possible to retrieve block 420,000 at any time (especially in event the first block 420,000 gets orphaned and replaced by a longer chain)

From my perspective: greater odds for everyone, nobody unhappy = good.

Let me know if your perspective is different, or why the 3 letter hash / modulus is better
hero member
Activity: 625
Merit: 501
x
I don't have a horse in this race, but I would strongly suggest defining this unambiguously before the end of raffle, or you may have a giant mess on your hands.

The draw need only be done once. So long as the algorithm is defined and not changed after the hash is announced, there is no rush. Manual intervention could take place.

If I had purchased a raffle entry for any raffle, and later found out that 'not enough tickets were sold so we'll leave it open if/until they are closed', I would likely be contacting authorities for fraud. You have a fair number of people with money on the line stating this.

Your algorithm could simply perform a modulus of the generated chosen number from 1 to 5000, against the number of entrants. That way if a number over the number of tickets sold occurred, it would just wrap back into the number of tickets actually sold.

For example, of 5000 tickets, let's say 215 copies sold. The random number is 3,183.  Rather than wait for almost 3,000 more copies of the book to be sold, simply take 1 + (3183 % 215) and get 174.

member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
I am sure it was previously stated that the book would only be sold until the halving

I also am sure that it was stated that not all 5000 books had been printed yet, indeed far from it, and that 5000 was the absolute max that would be done. So inference is that only as many books would be printed, as had indeed been sold

I struggle to see how it can be justified to base the raffle on anything other than actual books sold pre halving. Anything else has the appearance of shifting the goal posts

Will the mystery lower number for the raffle be the real number of books sold pre halving ?

This would be solved with a 3-character hash draw.
You have 3360 possible selections, which is far greater than the books sold thus far I would imagine.
Considering that the halvening is in less than 100 blocks and the books are not being sold after this,
it would be an easy, fair solution.
I will even handle all the entries if needed.

Thanks

I like having a little mystery to it with what the max number is
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools

Will the mystery lower number for the raffle be the real number of books sold pre halving ?

Would be theoretical possible to guess that number by trying any number from 2 to 5000 in the rng function I posted, and getting the same winning number that my server posts

Unless multiple max numbers return the same winning number using the block hash. A little technical but does that make sense? From my perspective it doesn't seem possible for me to Introduce concerns
legendary
Activity: 1252
Merit: 1259
MONKEYNUTS
I am sure it was previously stated that the book would only be sold until the halving

I also am sure that it was stated that not all 5000 books had been printed yet, indeed far from it, and that 5000 was the absolute max that would be done. So inference is that only as many books would be printed, as had indeed been sold

I struggle to see how it can be justified to base the raffle on anything other than actual books sold pre halving. Anything else has the appearance of shifting the goal posts

Will the mystery lower number for the raffle be the real number of books sold pre halving ?
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
That's rough, if 500 people (high end estimate on my analysis) purchased the book before the raffle it would be a 10% chance that someone wins who has a book currently.

Once you know the number of the book that is to win I don't think there is anything stopping you from revealing it to a friend so they can purchase the winning combo.  I'd see it as 100% fair if you only entered the purchasers who already bought the book, although I did mention my worries to purchasers on IRC immediately after the raffle was announced.  

I didn't purchase it so I don't really have a say in how it's run, but I can provide my reasoning that selecting from book numbers that aren't sold doesn't make me want to buy a book since the odds are horrible in my eyes.

Hmmmmmmmmmmm

Good points, then the only thing I could do to alleviate the businesses own concerns is to have a less probably fair raffle with me as the intermediary

It simply involves changing the random number generator to a lower number than 5,000 but not saying what that number is

Thinking about this more that seems like a decent compromise, but makes the whole spreadsheet thing not necessary, thought I would be able to avoid seemingly arbitrary last minute changes
legendary
Activity: 2702
Merit: 1072
That's rough, if 500 people (high end estimate on my analysis) purchased the book before the raffle it would be a 10% chance that someone wins who has a book currently.

Once you know the number of the book that is to win I don't think there is anything stopping you from revealing it to a friend so they can purchase the winning combo.  I'd see it as 100% fair if you only entered the purchasers who already bought the book, although I did mention my worries to purchasers on IRC immediately after the raffle was announced.  

I didn't purchase it so I don't really have a say in how it's run, but I can provide my reasoning that selecting from book numbers that aren't sold doesn't make me want to buy a book since the odds are horrible in my eyes.
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools

The spreadsheet associates all addresses with a book number (by row), so this is indistinguishable for your request. I haven't posted the spreadsheet yet as I haven't gotten addresses from everyone. Purchasers should be able to see their own address via their browsers "find" function. All the addresses will receive counterparty tokens and the winning address holder will also get the gold bar shipped to them.
That does not answer my question, so I'm asking you again, what happens when the winning number is a number of a book that hasn't been sold. I know what you are going to do, but if a book isn't sold have nowhere to ship the bar to as nobody can claim it.

Mitchell brings up a good point, the idea of unclaimable tickets. This was a problem in the original plan that we didn't consider, so the solution is that sales will simple have to stay open and even though some market participants will know the number of the book eligible for the gold, even if it didn't sell, some lucky person in the future will get it instead

1 day till the halving!

Soooooo. You could possibly have to sell 5000 books until you might have a winner, at which point you know what the winning book is....dont know if you want to stick to that "plan"

I evaluated other solutions to that problem, but those solutions had the side effect of revealing exactly how many books have sold which is useful to our competitors (Now that the spreadsheet is out, later buyers can extrapolate the same information), unless there is a version I didn't consider

This has to further be balanced with the 24 hours remaining before the halving


legendary
Activity: 3752
Merit: 1415

The spreadsheet associates all addresses with a book number (by row), so this is indistinguishable for your request. I haven't posted the spreadsheet yet as I haven't gotten addresses from everyone. Purchasers should be able to see their own address via their browsers "find" function. All the addresses will receive counterparty tokens and the winning address holder will also get the gold bar shipped to them.
That does not answer my question, so I'm asking you again, what happens when the winning number is a number of a book that hasn't been sold. I know what you are going to do, but if a book isn't sold have nowhere to ship the bar to as nobody can claim it.

Mitchell brings up a good point, the idea of unclaimable tickets. This was a problem in the original plan that we didn't consider, so the solution is that sales will simple have to stay open and even though some market participants will know the number of the book eligible for the gold, even if it didn't sell, some lucky person in the future will get it instead

1 day till the halving!

Soooooo. You could possibly have to sell 5000 books until you might have a winner, at which point you know what the winning book is....dont know if you want to stick to that "plan"
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools

The spreadsheet associates all addresses with a book number (by row), so this is indistinguishable for your request. I haven't posted the spreadsheet yet as I haven't gotten addresses from everyone. Purchasers should be able to see their own address via their browsers "find" function. All the addresses will receive counterparty tokens and the winning address holder will also get the gold bar shipped to them.
That does not answer my question, so I'm asking you again, what happens when the winning number is a number of a book that hasn't been sold. I know what you are going to do, but if a book isn't sold have nowhere to ship the bar to as nobody can claim it.

Mitchell brings up a good point, the idea of unclaimable tickets. This was a problem in the original plan that we didn't consider, so the solution is that sales will simple have to stay open and even though some market participants will know the number of the book eligible for the gold, even if it didn't sell, some lucky person in the future will get it instead

1 day till the halving!
copper member
Activity: 3948
Merit: 2201
Verified awesomeness ✔
No, that's not accurate, because it is a seeded PRNG. If the code called rng.random multiple times after initialization it would give new numbers, but reinitializing it and running it will get the same sequence of numbers. By only showing the first number, we always get the same result.

You can test that code with the hash from block 419,000 and you should get number "610" every time, which was the whole point of showing the code, since we don't know what the hash for 420,000 will be, but can't be manipulated, then we can be confident in this outcome.

This is using node.js with "express" and "request" modules
Ah yes, of course. I'll try out the code in a bit just to be sure.

The spreadsheet associates all addresses with a book number (by row), so this is indistinguishable for your request. I haven't posted the spreadsheet yet as I haven't gotten addresses from everyone. Purchasers should be able to see their own address via their browsers "find" function. All the addresses will receive counterparty tokens and the winning address holder will also get the gold bar shipped to them.
That does not answer my question, so I'm asking you again, what happens when the winning number is a number of a book that hasn't been sold. I know what you are going to do, but if a book isn't sold have nowhere to ship the bar to as nobody can claim it.




EDIT: I just tried out the code and it does indeed output 610.
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
What is the utility of the Counterparty token? Just to have a token? Or will it be usable for something in the future?

I begrudgingly added an ISBN to the book after much discussion with the printer, the counterparty token would have ideally replaced the centralized system, now it will compliment and show how things could work.

A month ago, people didn't know there was a market for better tools, stay tuned for the post mortem!
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
Will there be a 1 in 5000 chance, or will there be less ?

I am pretty sure all 5000 havn't been sold, and may not sell before the halving, so does an unsold book really still get a ticket in the raffle ?

What happens if an unsold book wins ? Surely this needs to be based on actual buyers of books sold ?



It is a 1 in 5000 chance. The spreadsheet should remove ambiguity on how this is being conducted

I'll have to post this by the end of the day absent some addresses since the halving is so close now
copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
buyers feel like they've paid too much for what they've received. I'd like to own one, but the price seems excessive.

Thats inaccurate sentiment, I would like to state that I've been very welcoming of the reviews from influential people and that this site's community is not reflective of the aggregate market. There was one (or two?) mixed reviews on this site primarily focused on a price:content ratio than any disdain for the project itself, and the email inbox contains very positive feedback. I'd love to have even greater production value in a future project, every outcome I can imagine increases the scarcity of this book which is good for the buyers and supporters! Trying to be as forthcoming here, hope that helps!

~snip~

Don't get me wrong, there is absolutely no disdain for your project itself, you've tread into an area not many other people would be prepared to, with that alone you've provided some new content to the crypto-scene which most are grateful for, so thank you.
I'd agree that the price:content ratio is subjective; some will find this item costly for what it is, others are prepared to pay $150 for your book no problem.

Thanks for the transparency, and I can certainly appreciate that BtcTalk is only a percentage of your target market.
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
buyers feel like they've paid too much for what they've received. I'd like to own one, but the price seems excessive.

Thats inaccurate sentiment, I would like to state that I've been very welcoming of the reviews from influential people and that this site's community is not reflective of the aggregate market. There was one (or two?) mixed reviews on this site primarily focused on a price:content ratio than any disdain for the project itself, and the email inbox contains very positive feedback. I'd love to have even greater production value in a future project, every outcome I can imagine increases the scarcity of this book which is good for the buyers and supporters! Trying to be as forthcoming here, hope that helps!





member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
Wait. won't "rng.random(1, 5000)" generate a new number on each and every request? If so you could just keep making calls to the site until you have a result you like and show us that or in other words this isn't provably fair.

Also, did you sell all 5000 books? If not, what happens if the winner is a book that hasn't been sold yet?

No, that's not accurate, because it is a seeded PRNG. If the code called rng.random multiple times after initialization it would give new numbers, but reinitializing it and running it will get the same sequence of numbers. By only showing the first number, we always get the same result.

You can test that code with the hash from block 419,000 and you should get number "610" every time, which was the whole point of showing the code, since we don't know what the hash for 420,000 will be, but can't be manipulated, then we can be confident in this outcome.

This is using node.js with "express" and "request" modules

Quote from: Mitchełł
Also, did you sell all 5000 books? If not, what happens if the winner is a book that hasn't been sold yet?

The spreadsheet associates all addresses with a book number (by row), so this is indistinguishable for your request. I haven't posted the spreadsheet yet as I haven't gotten addresses from everyone. Purchasers should be able to see their own address via their browsers "find" function. All the addresses will receive counterparty tokens and the winning address holder will also get the gold bar shipped to them.
copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
what's the price of the book anyway ?Smiley

$150. Currently BTC0.23 on his website.

That's high for the book with just a story Undecided

Agreed. I can appreciate the cost involved in manufacturing these, photoshoot, model etc - but buyers feel like they've paid too much for what they've received. I'd like to own one, but the price seems excessive.
legendary
Activity: 2828
Merit: 1222
Just looking for peace
what's the price of the book anyway ?Smiley

$150. Currently BTC0.23 on his website.

That's high for the book with just a story Undecided
copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
what's the price of the book anyway ?Smiley

$150. Currently BTC0.23 on his website.
legendary
Activity: 2828
Merit: 1222
Just looking for peace
what's the price of the book anyway ?Smiley
copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
Wait. won't "rng.random(1, 5000)" generate a new number on each and every request? If so you could just keep making calls to the site until you have a result you like and show us that. Also, did you sell all 5000 books? If not, what happens if the winner is a book that hasn't been sold yet?
yeah Mitchełł, good catch ! that's indeed THE question... Wink

Well this looks like it could get complicated  Undecided
legendary
Activity: 1120
Merit: 1002
Wait. won't "rng.random(1, 5000)" generate a new number on each and every request? If so you could just keep making calls to the site until you have a result you like and show us that. Also, did you sell all 5000 books? If not, what happens if the winner is a book that hasn't been sold yet?
yeah Mitchełł, good catch ! that's indeed THE question... Wink
copper member
Activity: 3948
Merit: 2201
Verified awesomeness ✔
Wait. won't "rng.random(1, 5000)" generate a new number on each and every request? If so you could just keep making calls to the site until you have a result you like and show us that or in other words this isn't provably fair.

Also, did you sell all 5000 books? If not, what happens if the winner is a book that hasn't been sold yet?
copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
What is the utility of the Counterparty token? Just to have a token? Or will it be usable for something in the future?

Think it's for transferring ownership of the book if sold on.

Neat! How does each book have a unique identifier or did I read that wrong?

Each book owner is entitled to an associated Counterparty token

everyone gets a counterparty token sent to an address they control and if they sell the book on the after market, make sure the new buyers gets the token too
copper member
Activity: 686
Merit: 603
Electricity is really just organized lightning
Will there be a 1 in 5000 chance, or will there be less ?

I am pretty sure all 5000 havn't been sold, and may not sell before the halving, so does an unsold book really still get a ticket in the raffle ?

What happens if an unsold book wins ? Surely this needs to be based on actual buyers of books sold ?



I'd tend to agree with you. I have no idea how many have been sold, but I'm assuming that you've still got a large amount of stock left photon? Why not use the PRNG seed to generate a number between 1 and ( number of books sold )? I'm sure you stated in the other thread that you have order numbers which will be used to check the winner of the draw? Surely this is a better idea?
legendary
Activity: 1722
Merit: 1000
What is the utility of the Counterparty token? Just to have a token? Or will it be usable for something in the future?
legendary
Activity: 1252
Merit: 1259
MONKEYNUTS
Will there be a 1 in 5000 chance, or will there be less ?

I am pretty sure all 5000 havn't been sold, and may not sell before the halving, so does an unsold book really still get a ticket in the raffle ?

What happens if an unsold book wins ? Surely this needs to be based on actual buyers of books sold ?

member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools
Spreadsheet is here https://docs.google.com/spreadsheets/d/1wknANgxXkzlHgxaHc6G18M2bxpnjpHjnDayYW9ngCUg/edit#gid=0

In reaction to what Mitchell pointed out, in the event an unsold book wins the raffle it may seem unclaimable, so sales will remain open after the raffle.
member
Activity: 90
Merit: 11
Author of Bitcoin Books, the latest: Mining Pools

The Chasing Casascius book purchasers (www.chasingcasascius.com) are entitled to a raffle for the Casascius Gold Plated Bar featured in the book! Therefore we have developed a provably fair raffle using bitcoin's blockchain! There is still time to purchase a copy on the site before the halving to be included in this raffle.

There are 5,000 copies of the book, enabling purchasers for a 1 in 5000 chance of winning. If won the gold plated bar will be mailed to you. A spreadsheet will be shared with bitcoin addresses associated with each order by place in order.

The following javascript makes a request to Toshi.io using "request" framework, requesting information about block 420,000, and using the hash of that block as a PRNG seed to generate a number between 1 and 5000 using the RNG-JS library

PRNG's generate a sequence of random numbers, always in the same order, so by always displaying the first random number in the sequence of random numbers, we will always be able to see the winner. This code is running on a 64-bit heroku server.

http://ccltdcheckoutserver-live.herokuapp.com/raffle


 var blockNumber = 420000;
 requestServerToServer({
    url: 'https://bitcoin.toshi.io/api/v0/blocks/' + blockNumber,
    method: 'GET',
  }, function(error, response, body) {
    if(response.statusCode == '404'){
      res.json({"block height": "block 420,000 is not yet available",
                  "block hash": "please check in the future",
                  "winning book number": "n/a"
                });
    }
    else{
      if (error) {
        console.log('Error sending message: ', error);
      } else if (response.body.error) {
        console.log('Error: ', response.body.error);
      }
      else{
        
        var blockInfo = JSON.parse(response.body);
        var rng = new RNG(blockInfo.hash);
        console.log(blockInfo.hash);

        res.json({"block height": blockNumber,
                  "block hash": blockInfo.hash,
                  "winning book number": rng.random(1, 5000)
                });
      }
    }


If there's anything not provably fair enough, just let me know and we'll see if we can adjust it to be more transparent!

Aside from protecting the pseudonymity of the purchasers, the spreadsheet of bitcoin addresses will also be used to distribute the counterparty token to be associated with the each copy of the book. Purchasers will be able to see their address in the spreadsheet, after I collect more addresses from people. Only counterparty addresses or any other address where you control the private key!

The spreadsheet is here: https://docs.google.com/spreadsheets/d/1wknANgxXkzlHgxaHc6G18M2bxpnjpHjnDayYW9ngCUg/edit#gid=0

This is phase 2 in the Chasing Casascius project. Please stay tuned for Phase 3 - the distribution of the Chasing Casascius counterparty token to purchasers - and order your copies of the book before the halving!
Jump to: