Bitcoin Forum

Local => Desenvolvimento & Discussões Técnicas => Topic started by: FabioCarpi on October 02, 2014, 09:18:38 PM



Title: Programação - bloco atual
Post by: FabioCarpi on October 02, 2014, 09:18:38 PM
Desconectei a internet do meu pc e iniciei o bitcoin de maneira limpa
Ele diz que está no bloco 0 e falta 5 anos de blocos pra baixar
Da onde ele tirou isso?
Já vem na programação o número do bloco que existia quando a versão foi compilada?
Eu esperava que ele dissesse que estava sincronizado com 0 bloco e aguardando novos peers
Eu tinha até preparado um outro pc com o programa limpo pra ver se eles conversavam...
Mas nem tentei depois dessa...


Title: Re: Programação - bloco atual
Post by: algorista on October 03, 2014, 06:58:23 AM
No fonte há a data do bloco genesis (Sat, 03 Jan 2009 18:15:05 GMT)* (https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L89) então o resto é uma conta simples (https://github.com/bitcoin/bitcoin/blob/master/src/qt/bitcoingui.cpp#L693)*.

Faça o mesmo experimento alterando o calendário do seu computador.

Quanto ao outro cliente em rede eu acredito que não seria encontrado nem mesmo estando ambos na internet.
Para haver a comunicação pela rede local voce precisaria editar o arquivo bitcoin.conf (https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File) e adicionar uma linha "addnode=<SEU IP>"

* https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L89
* https://github.com/bitcoin/bitcoin/blob/master/src/qt/bitcoingui.cpp#L693


Title: Re: Programação - bloco atual
Post by: girino on October 03, 2014, 02:40:27 PM
No fonte há a data do bloco genesis (Sat, 03 Jan 2009 18:15:05 GMT)* (https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L89) então o resto é uma conta simples (https://github.com/bitcoin/bitcoin/blob/master/src/qt/bitcoingui.cpp#L693)*.

Faça o mesmo experimento alterando o calendário do seu computador.

Quanto ao outro cliente em rede eu acredito que não seria encontrado nem mesmo estando ambos na internet.
Para haver a comunicação pela rede local voce precisaria editar o arquivo bitcoin.conf (https://en.bitcoin.it/wiki/Running_Bitcoin#Bitcoin.conf_Configuration_File) e adicionar uma linha "addnode=<SEU IP>"

* https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L89
* https://github.com/bitcoin/bitcoin/blob/master/src/qt/bitcoingui.cpp#L693


Tem também o problema dos checkpoints. Se seu objetivo for fazer uma rede "paralela" de bitcoin, assim que ele atingir o primeiro checkpoint ele vai "forkar".


Title: Re: Programação - bloco atual
Post by: FabioCarpi on October 03, 2014, 06:31:42 PM
Tem também o problema dos checkpoints. Se seu objetivo for fazer uma rede "paralela" de bitcoin, assim que ele atingir o primeiro checkpoint ele vai "forkar".
Pode explicar melhor? Eu sei o que é forkar. Só não entendi a parte dos checkpoints.

Quanto ao outro cliente em rede eu acredito que não seria encontrado nem mesmo estando ambos na internet.
Porque?


Title: Re: Programação - bloco atual
Post by: girino on October 03, 2014, 09:39:08 PM
Tem também o problema dos checkpoints. Se seu objetivo for fazer uma rede "paralela" de bitcoin, assim que ele atingir o primeiro checkpoint ele vai "forkar".
Pode explicar melhor? Eu sei o que é forkar. Só não entendi a parte dos checkpoints.

http://www.justfuckinggoogleit.com/search/bitcoin+checkpoints


Title: Re: Programação - bloco atual
Post by: algorista on October 04, 2014, 12:26:56 AM
Quanto ao outro cliente em rede eu acredito que não seria encontrado nem mesmo estando ambos na internet.
Porque?

O Bitcoin possui um esquema de discovery (https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery) que não privilegia a rede local, para encontrar os nodes é usada uma lista inicial de IPs contida no arquivo peers.dat e também em alguns DNS definidos no código fonte (https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L97-L102), versões antigas também usavam um canal IRC para encontrar os nodes (mas essa funcionalidade foi desabilitada).
A lista de nodes (peers.dat) é atualizada dinamicamente ao conseguir conectar a qualquer node, requisitando a este que informe sua lista de outros nodes.

No peers.dat inicialmente não há nenhum ip de rede local (192.168.x.x, 10.x.x.x, 172.16-31.x.x) por isso os nodes da rede local não são encontrados automaticamente, você precisa informá-los no arquivo bitcoin.conf.

Talvez também seja possível executar o comando addnode ou connect pelo console, mas nunca tentei.

https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery
https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L97-L102


Title: Re: Programação - bloco atual
Post by: girino on October 04, 2014, 12:38:19 AM
Quanto ao outro cliente em rede eu acredito que não seria encontrado nem mesmo estando ambos na internet.
Porque?

O Bitcoin possui um esquema de discovery (https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery) que não privilegia a rede local, para encontrar os nodes é usada uma lista inicial de IPs contida no arquivo peers.dat e também em alguns DNS definidos no código fonte (https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L97-L102), versões antigas também usavam um canal IRC para encontrar os nodes (mas essa funcionalidade foi desabilitada).
A lista de nodes (peers.dat) é atualizada dinamicamente ao conseguir conectar a qualquer node, requisitando a este que informe sua lista de outros nodes.

No peers.dat inicialmente não há nenhum ip de rede local (192.168.x.x, 10.x.x.x, 172.16-31.x.x) por isso os nodes da rede local não são encontrados automaticamente, você precisa informá-los no arquivo bitcoin.conf.

Talvez também seja possível executar o comando addnode ou connect pelo console, mas nunca tentei.

https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery
https://github.com/bitcoin/bitcoin/blob/master/src/chainparams.cpp#L97-L102


 o addnode pelo console funciona, mas demooooora.. acho que ele coloca o node com baixa prioridade ou algo assim, e demora quase uns 10 minutos até a primeira tentativa de conexão nele (dá pra vigiar no log)....


Title: Re: Programação - bloco atual
Post by: algorista on October 04, 2014, 12:50:48 AM
o addnode pelo console funciona, mas demooooora.. acho que ele coloca o node com baixa prioridade ou algo assim, e demora quase uns 10 minutos até a primeira tentativa de conexão nele (dá pra vigiar no log)....

Será que essa demora não é por causa do limite de 8 conexões (MAX_OUTBOUD_CONNECTION) (https://github.com/bitcoin/bitcoin/blob/master/src/net.cpp#L55) ? pensando aqui acho que o client só vai tentar uma nova conexão quando uma das 8 desconectar.

Vou testar isso, agora fiquei curioso  ;D



Title: Re: Programação - bloco atual
Post by: FabioCarpi on October 05, 2014, 05:10:22 AM
tem como aumentar o limite de conexões?
Da pra editar o peers.dat?


Title: Re: Programação - bloco atual
Post by: JeisonDras on October 05, 2014, 10:59:00 AM
tem como aumentar o limite de conexões?
Da pra editar o peers.dat?

maxconnections=10 ? ou 20 ? talvez uns 200 ?

aqui (https://blockchain.info/en/connected-nodes) tem uma lista com mtus nodes
agora tem um total de 468 conectados

e aqui (https://en.bitcoin.it/wiki/Running_Bitcoin#Command-line_arguments) uma lista de comandos pra vc usar...


Title: Re: Programação - bloco atual
Post by: FabioCarpi on October 05, 2014, 11:46:27 AM
a opção maxconnections=10 não funciona...


Title: Re: Programação - bloco atual
Post by: Adriano on October 05, 2014, 12:12:44 PM
o addnode pelo console funciona, mas demooooora.. acho que ele coloca o node com baixa prioridade ou algo assim, e demora quase uns 10 minutos até a primeira tentativa de conexão nele (dá pra vigiar no log)....

Será que essa demora não é por causa do limite de 8 conexões (MAX_OUTBOUD_CONNECTION) (https://github.com/bitcoin/bitcoin/blob/master/src/net.cpp#L55) ? pensando aqui acho que o client só vai tentar uma nova conexão quando uma das 8 desconectar.

Vou testar isso, agora fiquei curioso  ;D



Neste caso a melhor opção é utilizar connect ao invés de addnode. Eu utilizo uma configuração parecida, onde tenho um node executando 24x7 normalmente e em meu laptop conecto via connect neste node quando inicializo o bitcoind.

A diferença é que o connect vai conectar apenas no host informado (nome dns ou IP, tanto faz) enquanto que o addnode vai "simular" que o host estava no peers.dat e fazer o processo comum de conectar nele e tentar conectar em outros peers.

Quanto à demora quando se está utilizando peers através da console, imagino que esteja sim relacionado ao número máximo de conexões. Creio que se a opção estiver incluida no arquivo de configuração durante a inicialização do daemon não haverá demora... de preferência com o arquivo peers.dat zerado ou inexistente.


Abraço,


Adriano


Title: Re: Programação - bloco atual
Post by: Adriano on October 05, 2014, 12:17:35 PM
tem como aumentar o limite de conexões?
Da pra editar o peers.dat?

maxconnections=10 ? ou 20 ? talvez uns 200 ?

aqui (https://blockchain.info/en/connected-nodes) tem uma lista com mtus nodes
agora tem um total de 468 conectados

e aqui (https://en.bitcoin.it/wiki/Running_Bitcoin#Command-line_arguments) uma lista de comandos pra vc usar...

Esta lista do blockchain.info é "apenas" dos nodes conectados aos servidores deles... digo apenas porque são muitos comparados a qualquer node em execução.

Para ter uma ideia melhor do número de nodes na rede, eu utilizo https://getaddr.bitnodes.io/ (além de poder navegar entre as diversas informações - endereço IP, versão, localização, data center, etc). Agora são quase 8000 nodes ativos.


Abraço,


Adriano


Title: Re: Programação - bloco atual
Post by: algorista on October 05, 2014, 05:31:41 PM
a opção maxconnections=10 não funciona...

Essa opção só afeta as conexões recebidas, para alterar as conexões efetuadas (o limite de 8 ) só alterando no código fonte (https://github.com/bitcoin/bitcoin/blob/master/src/net.cpp#L55) e recompilando.


Title: Re: Programação - bloco atual
Post by: girino on October 05, 2014, 09:05:18 PM
a opção maxconnections=10 não funciona...

Essa opção só afeta as conexões recebidas, para alterar as conexões efetuadas (o limite de 8 ) só alterando no código fonte (https://github.com/bitcoin/bitcoin/blob/master/src/net.cpp#L55) e recompilando.

e usando windows server também.. windows home também limita as conexões por processo.