Como o NanoFarmer funciona
Como funciona o NanoFarmer
XCHPool NanoFarmer · Detalhes técnicos
O que corre no seu computador, o que a XCHPool corre, que mensagens circulam entre eles e o que protege as suas chaves e as suas recompensas. Escrito para farmers que querem conhecer os detalhes.
Farmer e harvester da Chia 2.7.4
Protocolo do farmer 0.0.38
Protocolo de pooling v1, plot NFTs
Um único WebSocket de saída
O que faz um nó completo e o que o NanoFarmer muda
O farming de Chia exige três programas que trabalham em conjunto. A aplicação oficial da Chia corre os três no seu computador. O NanoFarmer mantém dois deles no seu computador e deixa a XCHPool correr o terceiro.
Harvester
Lê os seus plots. Em cada signage point aplica o filtro de plots, que só deixa passar uma pequena parte dos plots (na mainnet, atualmente 1 em 256), e procura provas de espaço nos plots que passam.
Farmer
Envia cada signage point ao harvester e recebe as provas dele. Uma prova que cumpre a sua dificuldade na pool torna-se um partial para a pool; uma prova suficientemente boa para ganhar um bloco vai para o nó completo. Juntamente com o harvester, assina partials e blocos.
Nó completo
Guarda uma cópia de toda a blockchain (bem mais de 100 GB) e mantém-se sincronizado com a rede. Entrega um novo signage point a cada 9,4 segundos, aproximadamente, e constrói e transmite o bloco quando a sua prova ganha.
O NanoFarmer corre no seu computador o farmer e o harvester da própria Chia, sem alterações, e substitui o nó completo por uma única ligação à XCHPool. Os nós completos da XCHPool entregam os signage points e constroem o bloco quando ganha. Nada para descarregar nem sincronizar, e as suas chaves ficam consigo.
O seu computador, com toda a blockchain
Os nós completos da XCHPool, através do gateway
Não incluída: importe as suas palavras para o Sage ou para a carteira Chia para ver as suas recompensas
Os componentes
O que faz cada parte, onde corre e com que tecnologia é feita.
Aplicação NanoFarmer
Pode arrancar quando inicia sessão: uma entrada por utilizador no Windows, um LaunchAgent no macOS, um serviço de utilizador systemd no Linux. Sem direitos de administrador. No Windows, um ícone na área de notificação volta a abrir a janela depois de a fechar e encerra o NanoFarmer.
Um único programa por sistema. Corre como agente em segundo plano que supervisiona o motor, corre o uplink, serve a interface local e instala as atualizações.
A janela é uma janela nativa no macOS e uma janela de aplicação do Edge ou do Chrome (ou do seu navegador predefinido) no Windows e no Linux. Fechá-la não interrompe o farming.
Uma linha de comandos com as mesmas funções, para que o NanoFarmer também corra sem ecrã por SSH, por exemplo num Raspberry Pi.
Uplink
Quando a ligação cai, volta a ligar-se sozinho, com uma pausa que cresce de 1 a 30 segundos.
Um nó completo substituto em 127.0.0.1. O farmer da Chia liga-se a ele exatamente como se ligaria a um nó completo real, por TLS 1.3 com o certificado do próprio motor.
Copia as mensagens da Chia byte a byte para um único WebSocket até ao gateway. Só se acrescentam algumas mensagens de texto do próprio gateway (uma saudação, avisos, estatísticas); nunca chegam ao farmer, e os avisos aparecem na aplicação.
A guarda de assinatura do uplink verifica as poucas mensagens que importam para as suas recompensas (ver Chaves e confiança).
Gateway
Só encaminha provas de plot NFTs que fazem farming para a XCHPool. Limita as ligações por endereço de internet e no total, e diz à aplicação porquê quando recusa uma.
Faz parte do servidor NanoFarmer e assenta no próprio código de rede da Chia 2.7.4. Para o seu farmer é um nó completo; para os nós completos da XCHPool é um farmer.
Envia cada novo signage point uma vez a cada NanoFarmer ligado, e o mais recente logo após se ligar.
Verifica rigorosamente cada prova declarada antes de um nó completo a ver: um signage point real, um plot de plot NFT, uma prova válida que ganha de facto, assinaturas que coincidem, nenhuma repetição.
Servidor NanoFarmer
Um serviço REST em https://pool.xchpool.org, feito para a aplicação. Um navegador só lê os ficheiros de versão e os manifestos de atualização públicos, como faz a página do NanoFarmer para as suas transferências.
Encontra os seus plot NFTs, prepara a criação e a adesão pagas pela pool e disponibiliza as versões e os manifestos de atualização assinados.
Paga os novos plot NFTs e as taxas de adesão a partir de uma carteira financiadora própria, separada das carteiras da própria pool.
Pool
A mesma XCHPool com que todos os membros fazem farming, através do protocolo de pooling v1 padrão.
O seu farmer regista-se sozinho e envia os seus partials diretamente para a pool, não através do gateway. Os pontos e os pagamentos funcionam como para qualquer outro membro.
Chain API
A API pública da blockchain da XCHPool, um serviço separado do servidor NanoFarmer.
A aplicação usa-a para encontrar a moeda de um plot NFT na blockchain antes de confiar nele e, antes de uma adesão a partir de self-pooling, para verificar se há recompensas ainda à espera no plot NFT.
Explorador e My Farm
«Abrir a My Farm» na aplicação inicia a sua sessão com o link de início de sessão da pool do seu plot NFT.
Cada instalação do NanoFarmer é um harvester à parte na My Farm. Pouco depois de a pool aceitar o primeiro partial da instalação, a aplicação dá-lhe o nome do dispositivo (marca, modelo e sistema; nunca o nome do seu computador nem o seu nome de utilizador). Pode mudar o nome na aplicação ou na My Farm.
O cartão de tempos de resposta dos partials mostra a rapidez com que cada harvester responde.
Do signage point ao partial ou ao bloco
O que acontece a cada 9,4 segundos, aproximadamente, com os nomes de mensagem que a Chia usa.
Um novo signage point
Os nós completos da XCHPool enviam cada signage point ao gateway, que o passa uma vez a cada NanoFarmer ligado.
Verificado e entregue
O uplink verifica se os hashes do signage point coincidem com os dados enviados com ele e depois entrega-o ao farmer.
Filtro de plots e procura
O harvester aplica o filtro de plots, procura provas nos plots que passam e devolve todas as provas que encontra.
Partial para a pool
Uma prova que cumpre a sua dificuldade na pool torna-se um partial. O harvester assina-o com a chave do plot, o farmer acrescenta a sua própria assinatura e envia-o diretamente para a pool por HTTPS. A pool verifica-o, atribui pontos e regista o tempo de resposta.
Declarada
Uma prova suficientemente boa para um bloco é declarada. O uplink exige que contenha o seu próprio endereço de recompensa e pede os dados por trás dos hashes que lhe vão pedir para assinar. O gateway verifica a prova e se ela ganha mesmo, e depois passa-a aos nós completos. Uma prova que não ganha faria um nó completo cortar a ligação do gateway, e é por isso que o gateway verifica com tanto rigor.
Assinado
O nó completo constrói o bloco e pede as respetivas assinaturas. O uplink só deixa passar esse pedido quando o bloco paga a recompensa do farmer ao seu endereço. O harvester assina, e as assinaturas voltam pelo mesmo caminho.
Transmitido
O nó completo conclui o bloco e transmite-o. A recompensa do farmer (0,125 XCH mais as taxas do bloco) vai para o seu endereço de recompensa; a parte da pool vai para o endereço de pool do seu plot NFT, onde a XCHPool a recolhe.
Chaves e confiança
As suas chaves ficam no seu computador. Eis o que isso significa na prática, o que o NanoFarmer assina e não assina, e o que o lado da XCHPool pode e não pode fazer.
Onde fica a sua chave
As Definições podem mostrar de novo as palavras para as escrever em papel: só depois de confirmar, com a frase-passe quando existe uma, sem botão de copiar, e voltam a ocultá-las ao fim de um minuto.
O NanoFarmer cria uma chave nova de 24 palavras ou importa a sua e guarda-a num porta-chaves Chia próprio, numa pasta de dados própria, nunca na pasta de chaves da aplicação oficial da Chia.
O farmer lê desse porta-chaves as chaves de farmer, de início de sessão na pool e de proprietário do plot NFT. As palavras nunca saem do seu computador e nunca são escritas em nenhum registo.
Uma frase-passe opcional (pelo menos 8 caracteres) cifra o porta-chaves. O NanoFarmer guarda-a no gestor de credenciais do seu sistema para que o farming arranque sozinho; onde não existe, pede a frase-passe após cada arranque.
O que o NanoFarmer assina e o que recusa
Valores da pool: o URL da pool, o endereço de destino da pool, a altura de bloqueio e o tempo de atraso estão incorporados na aplicação. A aplicação recusa criar, juntar ou assinar tudo o que for diferente, diga um servidor o que disser.
Gastos do plot NFT: o auxiliar reconstrói cada gasto que o servidor propõe a partir do próprio código de puzzles da Chia, compara-o com os valores da pool incorporados na aplicação e só então assina. Nunca assina um hash que não consiga reconstruir.
Blocos: o farmer da Chia assina hashes de blocos sem ver o que representam, e o nó completo tira o endereço de recompensa do farmer de um campo não assinado. Por isso, a guarda de assinatura do uplink só deixa passar um pedido de assinatura quando vem acompanhado dos dados do bloco por trás dele, que coincidem com os hashes e pagam a recompensa do farmer ao endereço configurado pelo NanoFarmer.
Signage points: a chave do plot que assina signage points também assina blocos. A guarda só deixa passar signage points cujos hashes são os hashes dos seus próprios dados de origem, que nunca podem ser dados de um bloco, e nunca mais do que algumas vezes o ritmo da própria cadeia.
O que o lado da XCHPool pode e não pode fazer
As regras de consenso da Chia enviam a parte da pool de cada bloco para o endereço de pool do seu plot NFT, como em qualquer pool.
O gateway e os nós completos da XCHPool poderiam reter ou estragar um bloco que ganhe, como poderia qualquer nó completo em que confie. Não podem fazer o NanoFarmer assinar um bloco que pague a sua recompensa de farmer a outra pessoa.
Signage points inventados (o protocolo do farmer da Chia não transporta prova de tempo) só custariam ao seu harvester algumas procuras, que a guarda limita, e nunca produziriam uma assinatura que sirva para um bloco.
O que a aplicação envia
Ao explorador: o nome do seu harvester, formado pela marca, modelo e sistema do dispositivo.
Ao gateway: as mensagens do farmer da Chia (as suas provas e assinaturas), mais a versão da aplicação e do motor, o seu tipo de sistema e um ID de instalação aleatório.
À pool: os seus partials e o registo da sua farm, como qualquer farmer Chia.
Ao servidor NanoFarmer: chaves públicas para encontrar e criar o seu plot NFT, e o plot NFT que junta à pool. Nunca uma chave privada e nunca as suas palavras.
A interface local
A janela e a linha de comandos comunicam com a aplicação apenas em 127.0.0.1, com um token aleatório novo a cada arranque, verificações rigorosas de host e de origem e uma política de segurança de conteúdo rigorosa, para que as páginas web não a possam usar.
Plot NFT: criar e juntar
O NanoFarmer faz farming de plots de plot NFT com o protocolo de pooling v1. No passo 2 da aplicação, procura plot NFTs nas primeiras 20 chaves de proprietário da sua chave e depois usa um, junta-o à pool ou cria um novo.
O que o NanoFarmer encontra
Um plot NFT que faz farming para a XCHPool
É usado tal como está, depois de a aplicação verificar na blockchain que pertence à sua chave.
Um plot NFT em self-pooling
Um único gasto de adesão. As recompensas ainda à espera no plot NFT são primeiro reclamadas para si.
Dois gastos: sair agora e juntar-se quando a altura de bloqueio da outra pool tiver passado. Assina os dois de uma vez; o servidor envia o segundo quando chegar a altura.
A pool acrescenta as taxas
É criado um plot NFT novo para si. Fica pronto após 3 confirmações, normalmente em poucos minutos.
A pool paga o 1 mojo e a taxa
A moeda da pool paga 1 mojo ao seu próprio endereço, e a sua chave transforma esse mojo no launcher do plot NFT na mesma transação. Assim, o plot NFT é seu desde o início: a carteira Chia encontra-o, e pode sair da XCHPool com as ferramentas normais.
A criação gratuita está limitada a uma vez por endereço de internet a cada 24 horas e a uma vez por chave.
A aplicação escreve o plot NFT nas definições de pool do motor; depois o farmer regista-se sozinho na pool.
O servidor prepara os gastos; o auxiliar reconstrói cada um com o próprio código da Chia e só assina quando o gasto termina na XCHPool com a sua própria chave de proprietário.
A aplicação só dá uma adesão por concluída quando a blockchain a mostra, diga o servidor o que disser.
Uma adesão que só pudesse concretizar-se daqui a mais de cerca de um dia (uma altura de bloqueio longa na pool antiga) é recusada antes de se assinar o que quer que seja. A taxa de adesão paga pela pool tem limites próprios; acima deles, a adesão faz-se na mesma, sem a taxa da pool.
Valores da pool incorporados na aplicação
100 blocos, cerca de meia hora: a espera quando um plot NFT sai da XCHPool
7 dias (604 800 segundos): as recompensas que a pool não recolher nesse tempo podem ser reclamadas de volta para o seu endereço
Atualizações e segurança das versões
A aplicação e o motor atualizam-se separadamente. Um motor novo é descarregado enquanto faz farming e entra em funcionamento quando não há nenhuma tarefa de plot NFT a decorrer; se não arrancar, volta o motor anterior. Uma nova versão da aplicação é usada a partir do próximo arranque da aplicação, ou de imediato quando atualiza a partir da aplicação.
A aplicação procura atualizações no arranque e a cada 6 horas, com base num manifesto assinado com uma chave Ed25519. Há duas chaves públicas incorporadas, para que a chave de assinatura possa ser substituída.
O manifesto indica cada ficheiro com o seu tamanho e SHA-256, expira ao fim de algum tempo, pode definir uma versão mínima e nunca faz a aplicação ou o motor voltar a uma versão anterior.
Dois canais, estável e beta. Uma nova versão pode chegar primeiro a uma parte das instalações, escolhidas por um hash do ID de instalação aleatório.
A versão anterior de cada um fica no disco para permitir reverter.
A chave de assinatura é guardada offline numa única máquina, nunca num servidor nem no pipeline de compilação.
O ficheiro de checksums de cada versão também é assinado, para os primeiros downloads, e a página do NanoFarmer mostra o SHA-256 de cada ficheiro.
Os programas ainda não têm assinatura de código com certificados da Apple ou da Microsoft, por isso o seu sistema pede-lhe que confirme o primeiro arranque.
O motor guarda o seu porta-chaves e atualiza-se sem um clique, por isso uma única máquina de compilação não pode bastar para publicar um motor. Cada versão do motor é compilada duas vezes a partir de um commit com tag, em dois ambientes de compilação limpos e separados. A compilação é reprodutível, e a ferramenta de assinatura recusa assinar a menos que ambas as compilações tenham produzido pacotes idênticos byte a byte.
Plataformas e requisitos
Instalador (por utilizador) ou zip portátil
macOS 15 ou mais recente, Apple silicon
macOS 15 ou mais recente, Intel
Linux x86-64, glibc 2.28 ou mais recente
Linux ARM64, glibc 2.28 ou mais recente (Raspberry Pi 4 e 5 com um sistema de 64 bits)
tar.gz com script de instalação e serviço de utilizador systemd
Disco
Cerca de 1 GB livre para a aplicação, o motor, a versão anterior de cada um e os registos. Sem blockchain.
Rede
Portas locais
O motor usa portas próprias ao lado das predefinidas da Chia: daemon 55410, farmer 8457, uplink 8454, RPC do farmer 8569, RPC do harvester 8570. Quando uma está ocupada, o conjunto inteiro sobe 100.
Temporização e tempos de resposta
O farming de Chia funciona ao ritmo de um relógio. Estes são os números que importam.
Os partials não passam pelo gateway. Só o signage point vem dos nós completos da XCHPool até si através do gateway; o farmer envia o partial diretamente para a pool.
64 signage points em cada sub-slot de 10 minutos
o harvester da Chia avisa quando a procura num plot demora mais
do signage point à infusão do bloco: a prova, o bloco e as suas assinaturas têm de estar prontos antes disso
o tempo que o gateway dá ao seu farmer para devolver as assinaturas de um bloco
A pool mede o tempo de resposta de cada partial: desde o momento em que o signage point chegou à pool até ao momento em que o seu partial chegou. Um partial que chegue depois do limite de tempo da pool é recusado por chegar tarde demais e não rende nada.
A My Farm mostra os seus tempos de resposta por harvester: a mediana, o percentil 95 e a sua margem até ao limite, com o limite desenhado como uma linha vermelha tracejada. Numa farm NanoFarmer, o tempo inclui a retransmissão pelo gateway; as causas habituais de respostas lentas são discos lentos ou em repouso, plots em armazenamento de rede e um computador sobrecarregado.
O que o NanoFarmer não faz
Sem nó completo: não descarrega, não guarda nem sincroniza a blockchain.
Sem carteira: para ver ou enviar as suas recompensas, importe as suas palavras para o Sage ou para a carteira Chia.
Sem plots OG: os plots feitos com uma chave pública da pool (-p) são ignorados, e a aplicação lista-os para saber quais são.
Sem criação de plots: a aplicação explica os plotters e preenche o comando, mas não cria plots.
Sem outras pools, por agora: só faz farming de plot NFTs na XCHPool.
Sem plots acima de C7, nem plots comprimidos do Gigahorse, plots do NoSSD ou plots do DrPlotter: a Chia 2.7.4 não consegue fazer farming deles.
Ainda sem plots de Proof of Space 2: precisam da Chia 3.0, para a qual o motor pode passar através de uma atualização própria.
Sem reencaminhamento de portas: todas as ligações saem do seu computador.
Escolhas de design
Um WebSocket em vez da porta de peers da Chia
Nenhum protocolo de farming novo
O WebSocket transporta as próprias mensagens do protocolo do farmer da Chia byte a byte. O farmer é o da Chia, sem alterações, e não consegue perceber que não está a falar com um nó completo real.
Matemática das chaves só no código da Chia
A Chia deriva as suas chaves à sua maneira, e outra biblioteca poderia errar sem que ninguém reparasse. Por isso, todas as derivações de chaves e assinaturas da Chia são feitas pelo próprio código da Chia no motor; a aplicação em Go não faz nenhuma.
Aplicação e motor separados
A aplicação em Go continua pequena, e o motor pode passar para uma nova versão da Chia ao seu próprio ritmo, como a Chia 3.0 antes do fork do Proof of Space 2.
Perguntas e respostas
A XCHPool pode desviar a minha recompensa de bloco?
A recompensa do farmer, não: o NanoFarmer só assina um bloco que a pague ao seu endereço. A parte da pool vai para o endereço de pool do seu plot NFT pelas regras da Chia, como em qualquer pool. O que o lado da XCHPool poderia fazer é reter um bloco que ganhe, como poderia qualquer nó completo em que confie.
O que acontece quando a minha ligação à internet cai?
O uplink volta a ligar-se sozinho, com uma pausa que cresce de 1 a 30 segundos, e o farmer da Chia volta a ligar-se ao uplink. Se a ligação cair entre uma prova vencedora e o pedido de assinatura, o gateway envia o pedido para a sua nova ligação.
Posso correr o NanoFarmer em vários computadores com uma só chave?
Sim. Cada instalação cria os seus próprios certificados de harvester, por isso cada computador aparece na My Farm como um harvester à parte, com o seu próprio nome.
Posso sair da XCHPool?
Sim. O plot NFT é seu, e a carteira Chia pode movê-lo para outra pool ou para self-pooling. A altura de bloqueio da XCHPool é de 100 blocos, cerca de meia hora.
Porque é que a aplicação não envia os partials através do gateway?
Não precisa. Os partials usam o protocolo de pooling padrão por HTTPS, exatamente como para um farmer com um nó completo. Só a parte do nó completo passa para a XCHPool.