Bitcoin Forum
November 07, 2024, 09:35:01 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Como funciona o mining pool  (Read 3210 times)
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
September 19, 2014, 04: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.
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
September 19, 2014, 06: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.


+---------=====[ Rm 12:21 ]=====---------+
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
September 19, 2014, 01:33:44 PM
 #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...
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
September 19, 2014, 07: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.


+---------=====[ Rm 12:21 ]=====---------+
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
September 19, 2014, 07:19:47 PM
 #5

você pode explicar matematicamente? com a matemática real?
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
September 19, 2014, 07:37:44 PM
 #6

você pode explicar matematicamente? com a matemática real?

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

+---------=====[ Rm 12:21 ]=====---------+
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
September 21, 2014, 05:34:21 AM
Last edit: September 21, 2014, 04:42:12 PM by girino
Merited by bitmover (2)
 #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.

Advertise Here - PM for more info!
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
September 21, 2014, 06:39:52 AM
 #8

...

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




+---------=====[ Rm 12:21 ]=====---------+
FabioCarpi (OP)
Sr. Member
****
Offline Offline

Activity: 375
Merit: 255



View Profile
September 21, 2014, 12:34:08 PM
 #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
mlferro
Sr. Member
****
Offline Offline

Activity: 252
Merit: 250


View Profile
September 21, 2014, 03:38:36 PM
 #10

show de bola a explicacao acima... parabens pela exposicao matematica...

girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
September 21, 2014, 04: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...

Advertise Here - PM for more info!
girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
September 21, 2014, 04: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!

Advertise Here - PM for more info!
mlferro
Sr. Member
****
Offline Offline

Activity: 252
Merit: 250


View Profile
October 10, 2014, 08:16:12 PM
 #13

vc pode digitar no tex, fazer um print do pdf gerado e colocar a imagem aqui...

girino
Legendary
*
Offline Offline

Activity: 2296
Merit: 1170


Advertise Here - PM for more info!


View Profile
October 10, 2014, 09: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...

Advertise Here - PM for more info!
algorista
Hero Member
*****
Offline Offline

Activity: 882
Merit: 1000


It's got electrolytes


View Profile
October 11, 2014, 12:52:35 AM
 #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

+---------=====[ Rm 12:21 ]=====---------+
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!