Pages:
Author

Topic: [Ideia] Algoritimo de loteria descentralizada fundamentada no Bitcoin. - page 2. (Read 6730 times)

hero member
Activity: 882
Merit: 1000
It's got electrolytes
Sinto que essa loteria está muito além da compreensão da massa "curintiana" (com todo respeito aos Corinthianos, é só um exemplo de popularidade, não me entendam mal).

Se alguém ler mais que 10 linhas, pra entender o que é pra fazer, ele já se distrai e acha que é golpe, entao, ele já se perde, fica na duvida e quando aparece um TI perdido no café, ele pede apoio para esse alguém de TI. Esse alguem vai explicar + ou - e daí o assunto muda e ele nao joga, sabe por que???.... porque perdeu o "impulso" que o leva a jogar sem pensar muito.

Esta muito legal essas ideias para loteria, mas, é a massa quem faz os jogos, se elas nao entendem ou nao podem acreditar nas "mandingas" como o proprio Algorista disse,  o jogo perde seu potencial.

Será que não conseguimos pensar em algo mais simples? Não precisa ser um relógio, cheio de engrenagens e recursos, só algo mais simples, bem idiota, para que alguém consiga construir rapidamente e outros entrem no jogo. É só uma opinião.

Podíamos levantar os tipos de jogos existentes, experimentar alguns virtuais e ver se as ideias aparecem. Alguém de "8 anos de idade" outro dia me disse que seria legal ter campeonatos remunerados em servidores de jogos "online" de xbox.  Qual a dificuldade para se construir um servico desse tipo? Alguem sabe ou já fez algo parecido?


Concordo 100% com o que você disse agora.

Tecnicamente a solução é pesada de entender, assim como tudo na tecnologia do Bitcoin.
Mas o usuário final não precisa entender como funciona, ele só precisa instalar um app no celular (ou desktop) que exiba um address de pagamento e valor, e que na data do sorteio informe se ele ganhou, e solicite um address para recebimento do premio.
Assim como ninguém precisa ser um engenheiro aeronáutico para embarcar em um avião Cheesy também não será preciso entender de nada para apostar.


*exemplo de como imagino o app.

Qualquer inovação no ecossistema do Bitcoin ainda precisará de mais uma década para atingir o cidadão mediano.
A tendência é primeiro atingir o publico savvy então após alguns anos chegar aos TI em geral, e só depois começar a atingir os familiares dos profissionais de TI, e muito tempo depois atingir o publico em geral.

Respondendo sua pergunta: "Será que não conseguimos pensar em algo mais simples?"

Uma loteria centralizada é extremamente simples de implementar, nem precisa de software, basta recolher o pagamento e as apostas e então pagar o vencedor baseado em algum sorteio qualquer.
O problema dessa abordagem é que precisa confiar na entidade/pessoa que vai recolher os pagamentos.
No Bitcoin já existiu uma loteria dessas, mas todos nós sabemos o que acontece nesses casos*, e foi exatamente o que aconteceu:

https://en.bitcoin.it/wiki/BitLotto
https://bitcointalksearch.org/topic/bitlotto-the-bitcoin-rafflelottery-newbie-thread-79862

* geralmente quando alguém recebe um monte de Bitcoins de terceiros, ou ele é "hackeado", ou simplesmente desaparece com o dinheiro Roll Eyes

A minha proposta é criar um software de loteria descentralizada, onde seja "impossível" roubar o premio, falsificar apostas, reverter pagamentos, ou escolher arbitrariamente um vencedor.
E por isso é tão complexa do ponto de vista técnico, mas pro usuário final só precisa uma telinha bem simples.



newbie
Activity: 48
Merit: 0
Sinto que essa loteria está muito além da compreensão da massa "curintiana" (com todo respeito aos Corinthianos, é só um exemplo de popularidade, não me entendam mal).

Se alguém ler mais que 10 linhas, pra entender o que é pra fazer, ele já se distrai e acha que é golpe, entao, ele já se perde, fica na duvida e quando aparece um TI perdido no café, ele pede apoio para esse alguém de TI. Esse alguem vai explicar + ou - e daí o assunto muda e ele nao joga, sabe por que???.... porque perdeu o "impulso" que o leva a jogar sem pensar muito.

Esta muito legal essas ideias para loteria, mas, é a massa quem faz os jogos, se elas nao entendem ou nao podem acreditar nas "mandingas" como o proprio Algorista disse,  o jogo perde seu potencial.

Será que não conseguimos pensar em algo mais simples? Não precisa ser um relógio, cheio de engrenagens e recursos, só algo mais simples, bem idiota, para que alguém consiga construir rapidamente e outros entrem no jogo. É só uma opinião.

Podíamos levantar os tipos de jogos existentes, experimentar alguns virtuais e ver se as ideias aparecem. Alguém de "8 anos de idade" outro dia me disse que seria legal ter campeonatos remunerados em servidores de jogos "online" de xbox.  Qual a dificuldade para se construir um servico desse tipo? Alguem sabe ou já fez algo parecido?
hero member
Activity: 882
Merit: 1000
It's got electrolytes

14. Cada apostador envia as suas "chaves privadas ECDSA parciais" ao apostador vencedor (criptografando com a chave publica RSA deste).
    Caso o apostador falhe em apresentar sua chave parcial, o valor da aposta será destruido pela própria natureza do blockchain.
    Não existe incentivo algum em falhar com essa etapa pois não há maneira alguma do valor da aposta retornar ao apostador.
    Caso o apostador abandone a loteria antes do sorteio e venha a ser sorteado então o premio se perde em definitivo, mas poderia eventualmente existir um prazo para coleta do premio e em seguida sortear outro vencedor

Mas e se o apostador perdedor ser recusar a apresentar a chave intencionalmente, já que não ganhou?
Achei este ponto negativo.


Também pensei muito sobre isso, será tudo gerenciado pelo software então não será necessário uma ação direta do usuário para essa entrega da chave.
No entanto sempre existe aqueles que poderiam alterar o software só por maldade mesmo, sem obter nenhum benefício com isso, já que o valor apostado jamais poderia ser recuperado.

Existe também aqueles casos do cara que apostou mas perdeu o salvamento da aposta, ou simplesmente abandonou a loteria, e nesses casos ele não poderia entregar as chaves.

Para ambos os casos acredito que a REDUNDÂNCIA seja a resposta:

REDUNDANCIA DA CHAVE PRIVADA ECDSA PARCIAL (storage)
Para evitar que valores de apostas sejam perdidas e moedas sejam destruidas no caso de um apostador abandonar a loteria, eu pensei em fazer uma copia da chave privada ECDSA parcial, utilizando para isso um outro participante escolhido randomicamente.
Essa escolha não exige determinismo em algoritimos especiais, já que não compromete o sorteio e nem mesmo a segurança do valor apostado, apenas oferece uma redundancia em caso de abandono.
Cada apostador deveria escolher uma outra aposta e enviar um registro de redundancia.
Code:
{
  "rsa_public_key": "........",
  "ecdsa_public_key": "........",
  "quota": "principal",
  "ecdsa_private_key_rsa_encrypted": "........",
  "store_rsa_public_key": "........"
}
O apostador que recebe esse registro (storage) deverá também informá-lo ao vencedor, em um registro normal de pagamento, como se fosse o pagador original.

Esse registro de redundância poderia também ser conferido no momento da entrega do premio, assim quem não o tiver apresentado não ficaria qualificado como aposta valida para premiação.
member
Activity: 86
Merit: 10

14. Cada apostador envia as suas "chaves privadas ECDSA parciais" ao apostador vencedor (criptografando com a chave publica RSA deste).
    Caso o apostador falhe em apresentar sua chave parcial, o valor da aposta será destruido pela própria natureza do blockchain.
    Não existe incentivo algum em falhar com essa etapa pois não há maneira alguma do valor da aposta retornar ao apostador.
    Caso o apostador abandone a loteria antes do sorteio e venha a ser sorteado então o premio se perde em definitivo, mas poderia eventualmente existir um prazo para coleta do premio e em seguida sortear outro vencedor

Mas e se o apostador perdedor ser recusar a apresentar a chave intencionalmente, já que não ganhou?
Achei este ponto negativo.
sr. member
Activity: 378
Merit: 250
Step into a world!! A P2P world!
...
Um grande problema que vejo nessa abordagem é nos casos em que ninguém acerta as dezenas, o que causaria a nada desejável "acumulada". O processo das loterias tradicionais é semelhante ao processo de mineração, onde é preciso um número alto de apostas para que estatisticamente alguém acerte as dezenas em um intervalo especificado. E essa programação é feita através do ajuste do valor das apostas e da quantidade de dezenas por aposta (demanda X oferta). Um erro nessa formula pode gerar uma loteria com centenas de vencedores por concurso, ou pior, um concurso que acumula eternamente.

Outro ponto difícil de resolver é que estou tentando construir um algorítimo de pagamento distribuído, sem autoridade central, então fica a duvida de como fazer o pagamento em caso de múltiplos ganhadores. Já que cada participante tem apenas fragmentos das chaves privadas das apostas de vários apostadores, portanto ele não tem autonomia para fracionar o pagamento, ele pode apenas enviar a "chave privada parcial" para um apostador em específico.

No caso de uma loteria de dezenas haveria a possibilidade de haver muitos ganhadores ou de nunca se chegar a um ganhador, pois tudo depende do equilíbrio entre quantidade de apostas e quantidade de dezenas.
É preciso encontrar uma solução para essas questões para implementar um sistema de dezenas.

Um idéia:

Bem, digamos que enquanto o conceito do sistema é espalhado pela net, por que não implementar um algo de medida quantidade de jogadores apostando X quantidade apostada, antes do sorteio.

Por exemplo: considerando que poucos jogadores estão participando, digamos que o sistema poderia "permitir" que ganhe as apostas a partir de 3 números acertados no sorteio.

Supondo que sejam 6 números ao total, que talvez seja muito, quem acertar 3 ganharia uma fração, dividida entre todos os ganhadores de 3 números. O valor sorteado para os

Caso tenham muitos jogadores, somente a partir de 5 números ganham.

Entendam que é só um exemplo. Sei que não ficou muito claro a minha explicação, por isso eu desenhei:


hero member
Activity: 882
Merit: 1000
It's got electrolytes
Achei genial o jogo, só não me acostumei ou quero dizer, não sei se gosto da ideia do hash que mais se aproxima ser o vencedor do jogo.

Hashes são normalmente seguros e a maioria aqui no grupo sabe que é a essencial a segurança deles para o funcionamento das criptomoedas.
 
As vezes compro umas rifas beneficientes aonde os premios estão associados aos ultimos 3 digitos do primeiro premio da loto. Usar algo mais simples como isso, talvez atraia mais os apostadores ou não.

Como tudo que se faz para a internet é algo que tem muito mais potencial de crescimento, talvez os ultimos 3 digitos fique pequeno em muito pouco tempo, logo, teria que aumentar conforme a quantidade de apostas.

Algo mundialmente aceitavel talvez tivesse que considerar a loto dos americanos, nao é?

Concordo que um sistema de dezenas atrairia mais apostadores, até pela possibilidade da pessoa aplicar aquela "fézinha" usando números mágicos (de acordo com as crenças de cada um).

Extrair dezenas da hash do blockchain é relativamente simples, bastaria pegar alguns bits da entropia e ir fazendo um loop de MOD 60, e cada resultado daria uma dezena confiável de 0..59.

Para o apostador escolher as dezenas sem revelar os números de sua aposta, ele poderia expor apenas um hash das suas dezenas, por exemplo a aposta "01-07-12-17-24-51" daria o hash "4f2955e9105615a1c18239530c08b303b28cd983b403e853b3fc76451df32483" que então seria usado para encontrar o vencedor.

Um grande problema que vejo nessa abordagem é nos casos em que ninguém acerta as dezenas, o que causaria a nada desejável "acumulada". O processo das loterias tradicionais é semelhante ao processo de mineração, onde é preciso um número alto de apostas para que estatisticamente alguém acerte as dezenas em um intervalo especificado. E essa programação é feita através do ajuste do valor das apostas e da quantidade de dezenas por aposta (demanda X oferta). Um erro nessa formula pode gerar uma loteria com centenas de vencedores por concurso, ou pior, um concurso que acumula eternamente.

Outro ponto difícil de resolver é que estou tentando construir um algorítimo de pagamento distribuído, sem autoridade central, então fica a duvida de como fazer o pagamento em caso de múltiplos ganhadores. Já que cada participante tem apenas fragmentos das chaves privadas das apostas de vários apostadores, portanto ele não tem autonomia para fracionar o pagamento, ele pode apenas enviar a "chave privada parcial" para um apostador em específico.

No caso de uma loteria de dezenas haveria a possibilidade de haver muitos ganhadores ou de nunca se chegar a um ganhador, pois tudo depende do equilíbrio entre quantidade de apostas e quantidade de dezenas.

É preciso encontrar uma solução para essas questões para implementar um sistema de dezenas.
newbie
Activity: 48
Merit: 0
Achei genial o jogo, só não me acostumei ou quero dizer, não sei se gosto da ideia do hash que mais se aproxima ser o vencedor do jogo.

Hashes são normalmente seguros e a maioria aqui no grupo sabe que é a essencial a segurança deles para o funcionamento das criptomoedas.
 
As vezes compro umas rifas beneficientes aonde os premios estão associados aos ultimos 3 digitos do primeiro premio da loto. Usar algo mais simples como isso, talvez atraia mais os apostadores ou não.

Como tudo que se faz para a internet é algo que tem muito mais potencial de crescimento, talvez os ultimos 3 digitos fique pequeno em muito pouco tempo, logo, teria que aumentar conforme a quantidade de apostas.

Algo mundialmente aceitavel talvez tivesse que considerar a loto dos americanos, nao é?
sr. member
Activity: 378
Merit: 250
Step into a world!! A P2P world!
Achei super interessante a ideia.

Vou acompanhar tbm.

Abçs
hero member
Activity: 882
Merit: 1000
It's got electrolytes
Algorista,

Primeiramente desculpe por te colocar nessa enrascada ao pedir para detalhar a ideia... Vendo o post pronto imagino o trabalhão que deu :-)

Vou tentar quebrar seu post em pedaços de "fácil digestão" para tentar entender melhor. Qualquer coisa posto aqui alguma dúvida ou comentário posteriormente.


Abraço,

Adriano

Na verdade foi bem divertido.

Será interessante se alguns voluntários criem diagramas e ilustrações para melhor explicar a ideia, eu nem me aventurei por esse caminho pois não sei desenhar.



hero member
Activity: 882
Merit: 1000
It's got electrolytes
staff
Activity: 1286
Merit: 1085
Algorista,

Primeiramente desculpe por te colocar nessa enrascada ao pedir para detalhar a ideia... Vendo o post pronto imagino o trabalhão que deu :-)

Vou tentar quebrar seu post em pedaços de "fácil digestão" para tentar entender melhor. Qualquer coisa posto aqui alguma dúvida ou comentário posteriormente.


Abraço,

Adriano
newbie
Activity: 48
Merit: 0
Acho que ainda vou precisar mastigar um pouco mais a ideia, confesso que ainda fico um pouco "perdido" quando vejo sites replicando a mesma informacao.  Cheesy

Só pondo um pouco mais de carvão na churrasqueira.

Imaginem que fosse possivel criar uma carteira de bitcoin normal, só que a diferença é que essa carteira seria criada ao ser solicitada por dois moderadores, onde cada um tivesse um par de chaves (publica/privada) independentes.

Ao criar a carteira, o software pediria a chave publica de ambos os apostadores para criptografar a chave privada da carteira criada. Assim teriamos 2 coberturas de criptografia sobre a real chave privada da carteira.

Criada a carteira, somente com a aprovacao dos dois moderadores seria possivel resgatar a chave privada.

Agora, vem os apostadores. Imaginem que seja um jogo tipo "mega-sena" onde temos 6 pares 01-07-12-17-24-51 (só espero nao ter chutado os numeros da mega da proxima segunda. Cheesy).

Todos que quisessem colaborar depositariam 2 reais de bitcoins, algo como, 0,0015 btc e na descrição colocariam os codigos separados por "-".

Na apuração, o software de apostas  pediria para os dois moderadores que desprotegessem a chave privada e em seguida identificaria as senas, quinas e quadras e devolveria os valores para as carteiras ganhadoras e a taxa % iria para a carteira da entidade a qual o grupo se comprometeu em ajudar.

+A unica dúvida que confesso que fiquei é se a "descricao" da transacao é registrada no blockchain. Se nao for, daí a ideia realmente teria uma falha técnica aí Cheesy

++ Agora, porque nao colocar os 100 primeiros apostadores como moderadores e daí só com a aprovacao de cada um a chave privada da carteira poderia ser aberta. Cheesy
hero member
Activity: 882
Merit: 1000
It's got electrolytes
Esboço da proposta:

A minha ideia é criar uma rede "P2P" onde cada participante seria ao mesmo tempo o apostador, o gerenciador do sorteiro, e responsável pela entrega do premio, tudo de forma distribuída e protegido pelas leis da criptografia.

Basicamente funcionaria da seguinte forma:

CRIAÇÃO DA LOTERIA:
1. Alguém cria uma loteria e registra em um ou vários sites (que chamei de "databases").
2. Apostadores munidos do software de apostas localizam a loteria publicada em um desses sites.

APOSTA:
3. Os apostadores criam "chaves privadas distribuidas"* (Bitcoin address) e fazem os envios do valor das apostas para essas chaves.
4. Para cada aposta é registrado junto uma chave RSA publica unica, e também uma chave ECDSA publica unica.
5. O software dos apostadores deve guardar a contraparte privada dessas chaves até o final da loteria.
6. As chaves publicas ECDSA publicadas junto com as apostas são utilizadas em outras apostas para formar as "chaves privadas distribuidas"*.
7. As chaves publicas RSA publicadas junto com as apostas são utilizadas para o envio das chaves privadas ECDSA ao ganhador do sorteio.
8. O ganhador do sorteio receberá as chaves privadas ECDSA de cada apostador, criptografadas com a chave publica RSA de sua aposta sorteada.
9. Tendo posse das chaves privadas ECDSA de cada aposta o vencedor poderá então coletar o total premiado.
10. O vencedor é o unico que tem posse das chaves privadas ECDSA que permitirão transferir os valores, pois nenhum apostador unico possui sequer uma chave privada ECDSA inteira, os apostadores tem apenas partes das chaves privadas ECDSA, pois essas foram construidas de forma distribuida. Mesmo o site database não tem as chaves, pois apesar de armazenar o envelope de comunicação, este site não possui a chave RSA privada que abre o envelope.

SORTEIO:
11. Para realizar o sorteio todos os apostadores monitoram o blockchain até obter o hash do "bloco alvo"*.
12. O hash do "bloco alvo" é submetido a um algoritimo que escolhe um vencedor dentre todas as apostas (o algoritimo ainda não foi criado)
13. A aposta do vencedor é conferida, verificando a validade da transação no blockchain, assim como a validade da construção distribuida dos address de pagamento.
14. Cada apostador envia as suas "chaves privadas ECDSA parciais" ao apostador vencedor (criptografando com a chave publica RSA deste).
    Caso o apostador falhe em apresentar sua chave parcial, o valor da aposta será destruido pela própria natureza do blockchain.
    Não existe incentivo algum em falhar com essa etapa pois não há maneira alguma do valor da aposta retornar ao apostador.
    Caso o apostador abandone a loteria antes do sorteio e venha a ser sorteado então o premio se perde em definitivo, mas poderia eventualmente existir um prazo para coleta do premio e em seguida sortear outro vencedor.
15. O vencedor então coleta as "chaves ECDSA parciais" e juntando-as poderá coletar seu premio.

DATABASES:
16. Os sites "databases" são intermediários nas conversas protocolares entre apostadores.
17. Devem operar sem login ou qualquer meio de identificação dos apostadores.
18. Podem exigir uma execução de PoW para evitar DDoS.
19. Devem permitir replicação anonima por leitura ou escrita, mas não substituição ou exclusão.
20. Os registros não são ordenados ou encadeados, apenas anotados, como se cada registro fosse um arquivo.
21. São responsáveis por anotar cada aposta efetuada.
22. E também por anotar os envios de chaves privadas ao vencedor.
23. Todos os apostadores devem ter cópias do database.
24. O vencedor utilizará a copia local para receber as chaves privadas ECDSA, assim evitando uma identificação de origem.

O modelo de sites databases foi pensado para simplificar a arquitetura e poder operacionalizar tudo a partir de celulares android.
Um modelo P2P de databases seria o ideal, mas seria necessário abrir portas tcp/ip nos computadores clientes, o que poderia ser um problema para a maioria dos usuarios.
Vou acabar escrevendo uma arquitetura mista que opere das duas formas simultaneamente.

CHAVES DISTRIBUIDAS:
Quase toda a segurança do protocolo se baseia na utilização de chaves privadas distribuidas, que são address cuja chave privada é formada por diversos participantes sem necessidade de confiança mutua.
O principio é relativamente simples e foi apresentada pela primeira vez pelo usuário ThePiachu no post https://bitcointalksearch.org/topic/vanity-pool-vanity-address-generator-pool-84569 e que estou adaptando para a implementação dessa loteria distribuida, dentre outros projetos.

O fundamento é que uma chave publica ECDSA é formada pela formula:
Code:
K = k * G

K = chave publica
k = chave privada
G = constante do ponto na curva eliptica.

Portanto um par de chaves também poderia (suponho) ser construido de forma distribuida pelos participantes A, B e C com a formula:
Code:
(A + B + C) = (a + b + c) * G
Assim os address de pagamento das apostas seriam formados por multiplos participantes que divulgariam apenas a "chave publica parcial", mas só revelariam a "chave privada parcial" ao vencedor.
Outro detalhe, os participantes da construção das address de pagamentos não saberiam de quais address eles participariam, pois a escolha será regida por um algoritimo que se alimente de dados não fabricáveis, como a hash da transação de pagamento (algoritimo ainda não desenvolvido).
A construção desses address também ocorrerá de maneira não interativa, pois as chaves publicas parciais são geradas em excesso no momento de cada aposta, e ficam disponiveis, mesmo que nunca venham a ser utilizadas.

Os pagamentos dos participantes precisam ser conferidos, e a validade da construção dos address destes também precisa ser conferida.
Não tenho certeza da necessidade de fazer essa conferencia prosseguir recursivamente de forma infinita, isso precisa ser validado.

A escolha dos participantes da construção dos address não poderá ser arbitrária, e deverá realmente ser regida por um algoritimo, pois a escolha arbitrária permitiria que um apostador fornecesse todos os participantes e com isso tivesse o potencial de recuperar o valor da aposta caso não fosse o vencedor, o que é uma fraude inaceitável.

Outro detalhe a se observar é que nem toda chave privada ECDSA produz um address Bitcoin valido, portanto a soma A+B+C poderia gerar uma chave inutilizável, então para contornar isso deverá ser aplicado um algoritimo de força bruta até encontrar uma chave valida, semelhante ao que é feito no VanityGen.

* Ainda é tudo apenas uma ideia, não tenho certeza absoluta se os address poderão realmente ser construidos desta maneira. A idéia precisa ser testada ainda.


PROTOCOLO:

Modelo de Loteria (ficaria armazenado no site)
Code:
{
  "name": "Loteria do Instituto de pesquisas contra o cancer",
  "description": "hacktivism rulez",
  "owner": "anonymous",
  "site": "http://bitbit.org/loto123",
  "coin": "Bitcoin",
  "block_target": "311011",
  "block_limit": "310991",
  "estimated_arrival": "2014-07-19T19:07:14Z",
  "database": [
    {
      "url": "http://site1.org/bitbit",
      "type": "post basic 1.0"
    },
    {
      "url": "http://freehost2.org/~user/bitbit",
      "type": "post basic 1.0"
    },
    {
      "url": "http://onionhiddensite1234567890.onion/bitbit",
      "type": "post basic 1.0"
    }
  ],
  "quotas": {
    "principal": {
        "value": 0.0015,
        "recipient_type": "random",
        "method": "p1.0",
        "method_params": [],
        "bootstrap": ["....", "....", "...."]
    },
    "donation1": {
        "value": 0.001,
        "recipient_type" : "fixed",
        "address": "1doejFmV84SvgSbnTkJyPrRD44hUCjQrX",
        "site": "http://sitedainstituicao.org"
    }
  }
}
O campo "type" nos databases permitirá que sejam criados multiplos tipos de armazenamento, como P2P, mysql, memcache, etc.
A principio apenas um PHP aceitando POST será suficiente.

O "recipient_type fixed" permite que instituições ou projetos possam ser patrocinados pela loteria, de forma transparente e livre da asquerosa corrupção política.
Claro que esse address precisa ser abertamente reconhecido pela instituição receptora ou pelo menos ter alguma transparencia no processo que conduzirá os valores até a mesma.
O algoritimo não terá como ajudar muito quanto a isso, dependerá dos apostadores validarem isso.

O campo "quotas" teoricamente permitiria multiplas quotas de premiação, assim o total do premio poderia ser distribuido para N ganhadores distintos.
Essa possibilidade não foi estressada o suficiente para certificar seu funcionamento, precisará ser melhor analisada.

O campo "method" permite multiplos metodos de sorteio para permitir a criação de premios secundários, assim cada premio deverá ter um metodo diferente de sorteio, ou parametros diferentes para um mesmo metodo.

O campo "block_target" define o bloco cujo hash será utilizado para o sorteio, e o campo "block_limit" define o bloco maximo que os pagamentos devem ter confirmação para participarem do sorteio.
Pagamentos confirmados após esse bloco "block_limit" são silenciosamente rejeitados e o valor da aposta se perde pra sempre.
Embora seja possível que os participantes colaborem para o retorno desse valor de apostas tardias, o esforço não é justificável.

O campo "bootstrap" indica tres apostas iniciais (unique_id) que não participam do sorteio mas servem para formar as primeiras chaves de construção distribuida.
Essas tres apostas iniciais não tem como possuirem "chaves de construção distribuida" pois para essa construção são necessárias tres apostas previamente registradas.



APOSTA
Para cada aposta deverá ser enviado ao database um registro similar a esse:
Code:
{
  "rsa_public_key": "........",
  "quotas": [
    "principal": {
      "payment_transaction": ".......",
      "payment_address": "........",
      "address_construction": {
        "method": "basic 1.0",
        "members": ["... unique_id member A", "... unique_id member B", "... unique_id member C"]
      },
      "ecdsa_public_key": "........",
      "unique_id": "......"
    },
    "donation1": {
      "payment_transaction": ".......",
    },
  ]
}
O campo "method" deve permitir a coexistência de multiplos algoritimos de construção de chaves distribuidas.
O valor de "method" "bootstrap" é reservado para as tres primeiras apostas de cada loteria e que não participam do sorteio.
O metodo basico deverá ser A+B+C+ecdsa_public_key, sendo que as ecdsa_public_key de ABC deverão ser obtidas dos registros equivalentes e com mesma "quota".

O unique_id é calculado fazendo sha256sum da rsa_public_key+ecdsa_public_key, o que deve produzir entropia suficiente para não ocorrerem colisões.

O uso da hash da transação como referencia do pagamento ainda é um ponto de discussão devido ao "bug transaction malleability" ainda afetar quase todas as altcoins.


PAGAMENTO AO VENCEDOR
Todos os apostadores devem registrar nos databases as chaves privadas parciais, assim o vencedor poderá coletar seu premio.
Code:
{
  "rsa_public_key": "........",
  "ecdsa_public_key": "........",
  "quota": "principal",
  "ecdsa_private_key_rsa_encrypted": "........",
  "winner_rsa_public_key": "........"
}
Só é possível fazer esse registro quando os apostadores souberem quem foi o ganhador, pois assim poderão criptografar as chaves privadas ECDSA usando a chave RSA do ganhador.
A definição do ganhador se faz localmente com a aplicação de um algoritimo.


REDUNDANCIA DA CHAVE PRIVADA ECDSA PARCIAL (storage)
Para evitar que valores de apostas sejam perdidas e moedas sejam destruidas no caso de um apostador abandonar a loteria, eu pensei em fazer uma copia da chave privada ECDSA parcial, utilizando para isso um outro participante escolhido randomicamente.
Essa escolha não exige determinismo em algoritimos especiais, já que não compromete o sorteio e nem mesmo a segurança do valor apostado, apenas oferece uma redundancia em caso de abandono.
Cada apostador deveria escolher uma outra aposta e enviar um registro de redundancia.
Code:
{
  "rsa_public_key": "........",
  "ecdsa_public_key": "........",
  "quota": "principal",
  "ecdsa_private_key_rsa_encrypted": "........",
  "store_rsa_public_key": "........"
}
O apostador que recebe esse registro (storage) deverá também informá-lo ao vencedor, em um registro normal de pagamento, como se fosse o pagador original.

*esta ideia não foi estressada suficientemente ainda, precisa ser submetida a analise.


CARTEIRA
Todas as operações de pagamentos e recebimentos podem ser automatizadas com a API do blockchain.info, portanto o usuario precisará apenas ter uma carteira nesse site que facilitará bastante para fazer apostas de um clique usando seu celular android.
Acredito que esse seja o melhor caminho para a implementação do software de loteria, mas existe também a possibilidade de interfacear um cliente RPC ou implementar um cliente leve.


COMENTARIO ADICIONAL

Este esboço de algoritimo foi construido no melhor animo de boa vontade, sem intenção de vantagem, portanto tenham paciência caso o esforço seja infrutífero ou não apresente o resultado desejado.
E espero que alguem com tempo e disposição escreva o software necessário para tornar isso realidade.
Eu vou acabar escrevendo esse software, mas agora não tenho como disponibilizar tempo pra isso pois o equilibrio entre receitas e despesas anda complicado.

Acredito que olhar para esse projeto como apenas uma loteria seria uma visão curta das possibilidades implicitas, pois este poderá servir de impulsionador para muitos projetos que carecem de investimentos e cuja participação como beneficiários de uma loteria poderia ser de muita ajuda.

Em um breve futuro poderiam haver milhares de loterias beneficiando uma infinidade de obras de interesse coletivo.
E sem precisar dar nenhum centavo a nenhum político sangue suga.
Vamos sonhar, pois por sonhar ainda não se paga imposto.

hero member
Activity: 882
Merit: 1000
It's got electrolytes
Eu gostei da idéia, mas como seria a recompensa financeira?

O fundamento da ideia é que as apostas seriam enviadas para address de "chave privada distribuída", portanto nem o apostador e nem alguma entidade central teria controle sobre esses valores, mas os valores só poderiam ser acessíveis a uma unica pessoa (ou a uma lista predefinida) através de um esforço coletivo, tudo gerenciado por software, claro.

Não haveria incentivo algum para uma fraude, já que nenhum usuário individual teria acesso a nenhum valor de aposta, nem mesmo ao valor da própria aposta, mas precisaria haver um esforço coordenado de uma maioria para que uma fraude fosse possível, assim como seria necessário o mesmo esforço para que o premio seja entregue.

Estou redigindo um primeiro esboço para discutirmos se a ideia é viável, em breve vou publicar aqui mesmo.

legendary
Activity: 968
Merit: 1001
Seria maravilhoso  Shocked

tipo um:
Bit-Sena (mais caro, maior prêmio, mais difícil ganhar)
Bit-Quina (mais barato, menor prêmio, mais ganhadores)
Bit-Loto ou Bit-Mania, BitLotoMania

Se não desse para realizar os Concursos ao mesmo tempo, então poderia ser:
30 dias Bit-Sena. Depois entraria Bit-Quina 15 dias.

_________

 A FARSA DAS LOTERIAS.flv
http://www.youtube.com/watch?v=A8qgaZjQ8og

Senador Alvaro Dias denuncia fraudes nas Loterias da Caixa
http://www.youtube.com/watch?v=7WUPbAJm5_I

Loterias da Caixa @CanalDoOtario
http://www.youtube.com/watch?v=ykDOtQUMrMU

Essa loteria descentralizada seria mais um "tiro no peito" dos metacapitalistasShocked

Sim ou não?  Shocked

Mas e se eu ganhasse na Bit-Sena e ficasse rico, teria problemas com o nosso governo socialista
member
Activity: 86
Merit: 10
Eu gostei da idéia, mas como seria a recompensa financeira?
full member
Activity: 238
Merit: 100
Stand on the shoulders of giants
PS->Alais me lembrei desse projeto ...

https://github.com/zack-bitcoin/basiccoin

e' o esqueleto de uma cryptomoeda em menos de 600 linhas de codigo em python ... Acho o projeto interessante pra sabermos como realmente funciona o bitcoin... haja vista que atualmente somente o codigo do daemon do bitcoin tem mais de 44 mil linhas de codigo em C++ e assembler .. realmente nao e' facil entender ...
full member
Activity: 182
Merit: 100
Seria muito bacana! Estou acompanhando também...
Abraços!
full member
Activity: 238
Merit: 100
Stand on the shoulders of giants
Legal a idea ... seria legal primeiro fazer uns diagramas ... usando UML talvez..

eu nao sei quais suas ideas, eu acho que poderia dividir em 2 aspectos fundamentais... 1) as cotas e 2) o sistema de sorteio em si...

O bitcoin em ja' tem o fator sorte na mineracao ( vale a pena acompanhar essa discursao no reddit sobre "qual e' o problema matematico que os mineradores tem que resolver para receberem os bitcoins como premio?" )

http://www.reddit.com/r/Bitcoin/comments/28e39s/what_is_this_mathematical_problem_that_mining/

bem boa sorte... vou acompanhar o desenvolvimento Wink
newbie
Activity: 48
Merit: 0
A principio, me parece boa a ideia também.
Pages:
Jump to: