Lets say you have 50 tickets to a raffle. You choose to return 4 random bytes from the ledger proof RNG(https://github.com/oraclize/ethereum-examples/blob/master/solidity/random-datasource/randomExample.sol). The bytes generated can return a number up to 2^(8*4) = 4294967296.
You have 50 tickets -- so the RN’s 4294967251–4294967296 represent a slightly higher chance of winning for ticket holders 1–46 versus a slightly less chance for tickets 47–50. The disparity of fairness is tiny… but non-zero.
Do you know any good solutions to this problem?
1.Discarding the numbers 4294967251–4294967296 has cost value when paying Oraclize.
edit: So to clarify I am completely convinced by the tinyness of the disparity between tickets in this case and when using the full 32 bytes. However, I neglected to mention I feel the need to accommodate a 'laymens perspective' (There is lottery for who gets to go to Mars, and my ticket has miniscule chance less than my neigbours ticket of getting to go -- I am a laymen and don't really understand statistics, bias, etc... all I understand is that my neighbour gets one more chance in 10 googleplexes than me to go). So it seems like rejection sampling is the only way. But it means I have to code for making multiple calls vs adapting the random bytes somehow.