Author

Topic: Como funciona o mining pool (Read 3190 times)

hero member
Activity: 882
Merit: 1000
It's got electrolytes
October 10, 2014, 08:52:35 PM
#15
vc pode digitar no tex, fazer um print do pdf gerado e colocar a imagem aqui...

Haja tempo livre Wink Mas acho que o LaTeX gera como JPG direto. vou testar depois...

achei algumas opções interessantes no google:

http://www.hostmath.com/

http://www.codecogs.com/latex/eqneditor.php

http://www.sciweavers.org/free-online-latex-equation-editor
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
October 10, 2014, 05:08:40 PM
#14
vc pode digitar no tex, fazer um print do pdf gerado e colocar a imagem aqui...

Haja tempo livre Wink Mas acho que o LaTeX gera como JPG direto. vou testar depois...
sr. member
Activity: 252
Merit: 250
October 10, 2014, 04:16:12 PM
#13
vc pode digitar no tex, fazer um print do pdf gerado e colocar a imagem aqui...
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
September 21, 2014, 12:43:43 PM
#12
...

Girino Vey, vc agora falou um matematiquês de dar inveja até em sapo boi  Grin


O mais difícil foi achar os simbolos necessários, e dar uma formatação inteligível. Não tem algum modo de usar fórmulas LaTeX aqui no forum não? Igua ltem na wikipédia? Facilita a vida da gente demais!
legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
September 21, 2014, 12:41:58 PM
#11
show de bola a explicacao acima... parabens pela exposicao matematica...
achei um bug. o somatorio começa em i = 1, e não i = 0; vou corrigir...
sr. member
Activity: 252
Merit: 250
September 21, 2014, 11:38:36 AM
#10
show de bola a explicacao acima... parabens pela exposicao matematica...
sr. member
Activity: 375
Merit: 254
September 21, 2014, 08:34:08 AM
#9
Obrigado mesmo. Vou ler com calma e tentar entender.
A minha intenção era entender como funciona na área da programação.
Quando tentei entender como o nounce é encontrado, cheguei a fazer um programa em PHP que deu certo.
Fazendo o hash de um bloco com o nounce encontrado, dava o hash certinho.
Eu fiz em PHP porque é a única linguagem que eu conheço. Sad
hero member
Activity: 882
Merit: 1000
It's got electrolytes
September 21, 2014, 02:39:52 AM
#8
...

Girino Vey, vc agora falou um matematiquês de dar inveja até em sapo boi  Grin



legendary
Activity: 2296
Merit: 1170
Advertise Here - PM for more info!
September 21, 2014, 01:34:21 AM
#7
você pode explicar matematicamente? com a matemática real?

Agora complicou  Huh, vou pedir ajuda aos universitários  Grin

1- Considere que a prova de trabalho (PoW) de uma criptomoeda pode ser dada pela função:

PoW(bloco + nonce) onde "bloco" é o bloco a ser minerado, "nonce" é um número aleatório de 32 bits (ou 64 bits em algumas moedas) e o resultado de "PoW(x)" é um valor inteiro de 256 bits.

2- Considere que o resultado de PoW(x) é matematicamente equivalente a um gerador pseudoaleatório (não há prova matemática disso para nenhum dos algoritmos atualmente usados, apenas provas empíricas).

(P1) O problema da mineração é encontrar um valor de "nonce" tal que:
PoW(bloco + nonce) <= target onde target é um parâmetro definido pela rede bitcoin, representado como um inteiro de 256 bits. (na prática ele é representado pela dificuldade, que é o número real dado pela divisão do valor 0x0000FFFF x 2224 pelo valor do target).

A probabilidade p de encontrar uma solução para este problema na primeira tentativa é p(x) = 1/target, que é proporcional à dificuldade, sendo aproximadamente p(x) = dificuldade/(0x0000FFFF x 2224).

Ao longo do tempo, e de diversas tentativas, temos uma distribuição de poison, conforme o algorista indicou.

Considere agora que eu precise aumentar minha probabilidade de encontrar uma solução par ao problema em (P1) num determinado periodo de tempo. Como a dificuldade está fora do meu controle, a única solução é eu aumentar o número de tentativas a serem feitas nesse periodo. Uma pool nada mais é que um mecanismo para aumentar o numero de tentativas de resolver (P1) em um determinado periodo de tempo. E ela faz isso ao unificar e centralizar as tentativas de diversos usuários, ligados em rede.

Para distribuir o trabalho de forma a evitar duplicidade, a pool determina a cada usuário que trabalhe com um subconjunto da "nonce", da seguinte forma:
seja N o número de usuários, para cada usuário "n",  noncen está no intervalo [(n-1) * 232/N,  n * 232/N). (essa é uma forma simplificada do que realmente é feito, existem outros mecanismos com alterar a ordem das transações enviadas a cada usuário, alterar o timestamp do bloco, etc, que são usadas pelas pools, mas o princípio é semrpe o mesmo: dividir o trabalho igualmente entre os usuários).

Entramos agora no problema real que precisamos resolver:

(P2) Como medir a contribuição de cada para a pool?
A solução usada pelas pools é simples. Dado um "target" targetpool de tal forma que targetpool >>> target, o problema enviado pela pool aos usuários passa a ser:
PoW(bloco + noncen) <= targetpool

como targetpool >>> target, é fácil ver que qualquer solução para (P1) atende também a (P2), entretanto muito mais soluções atendem (P2) do que (P1).

Veja que a pool não altera a probabilidade de que um individuo resolva (P1), mas aumenta a freqüência com que o grupo de usuários que compõem a pool encontra uma solução para (P1). Além disso, por (P2)  ser muito mais fácil de resolver, pode-se usar as soluções de (P2) que não sejam soluções de (P1), comumente chamadas de "shares" para medir o tamanho da contribuição de cada um e "repartir" o bolo da seguinte forma:

Seja sharesn o numero de soluções de (P2) submetidas pelo usuário n <= N, calculamos o valor pago payoutn como sendo:
payoutn = 25 BTC*(sharesn/∑i=1Nsharesi)

Com isso podemos ver que, sendo (P2) contido em (P1), todos os participantes na pool contribuem para a solução de (P1) de forma proporcional a sua capacidade de resolver (P2). E respondendo sua pergunta:

Pelo que eu entendi da sua explicação o meu minerador trabalha à toa então? Porque eu não tenho capacidade suficiente para encontrar com bloco dificuldade tão alta...

você tem sim a capacidade suficiente para encontrar um bloco com dificuldade alta, só o tempo médio entre um bloco encontrado e outro é que é muito alto. A pool diminui esse tempo tratando o grupo como um todo como se fosse um único indivíduo, e depois repartindo os dividendos.

Espero que tenha sido suficiente para você a "matemática" da coisa (sinceramente, seria muito mais fácil explicar e entender sem a matemática, já que é tudo muito intuitivo e direto). Mas como eu estava atoa e sou chato, resolvi fazer com a matemática toda.
hero member
Activity: 882
Merit: 1000
It's got electrolytes
September 19, 2014, 03:37:44 PM
#6
você pode explicar matematicamente? com a matemática real?

Agora complicou  Huh, vou pedir ajuda aos universitários  Grin
sr. member
Activity: 375
Merit: 254
September 19, 2014, 03:19:47 PM
#5
você pode explicar matematicamente? com a matemática real?
hero member
Activity: 882
Merit: 1000
It's got electrolytes
September 19, 2014, 03:01:32 PM
#4
Pelo que eu entendi da sua explicação o meu minerador trabalha à toa então? Porque eu não tenho capacidade suficiente para encontrar com bloco dificuldade tão alta...

O processo de mineração não é cumulativo, é um tipo de sorteio (Poisson Distribution), então qualquer minerador pode encontrar um bloco válido, por menor que seja seus hashs/s, mas existe uma probabilidade muito maior de alguém com mais hash/s encontrar.

Igual a loteria, quem compra mais bilhetes tem mais chance, mas não tem garantia nenhuma, pois ainda é possível ganhar com apenas 1 único bilhete.

Se agrupar em pools é semelhante a entrar num bolão da loteria, aumentam-se as apostas e divide-se o premio.

sr. member
Activity: 375
Merit: 254
September 19, 2014, 09:33:44 AM
#3
Pelo que eu entendi da sua explicação o meu minerador trabalha à toa então? Porque eu não tenho capacidade suficiente para encontrar com bloco dificuldade tão alta...
hero member
Activity: 882
Merit: 1000
It's got electrolytes
September 19, 2014, 02:26:09 AM
#2
É basicamente o mesmo procedimento da mineração solo, com a diferença que na solo você trabalha com a diff real da network e a pool apresenta ao minerador uma diff bem menor que a diff real da network, assim o minerador apresenta vários "falsos sucessos", e cada um desses "sucessos" é uma "share", que será usada pra computar a participação desse minerador caso um bloco seja encontrado por qualquer um dos participantes da pool.
Um bloco é encontrado quando uma share tem uma diff suficientemente alta pra atender também a diff real da network.

O software da pool ajusta a "share diff" individualmente por participante, de forma que os participantes apresentem X shares ao longo de um certo tempo, por exemplo 1 share por segundo.

Um minerador em pool encontra um bloco mas não tem como reclamá-lo (passar a perna na pool) porque ele não sabe quais transações participam daquele bloco.

Existem variações mas o básico é isso.

sr. member
Activity: 375
Merit: 254
September 19, 2014, 12:30:33 AM
#1
Eu já sei como funciona a mineração:
Basicamente procura-se um nounce para que o hash do bloco atenda a dificuldade atual.
Gostaria de saber como que é feita a divisão dessa tarefa pelo servidor do pool para que os mineiros.
Jump to: