EOS.IO Dawn 2.0 foi lançado junto com uma rede de testes públicos que será mantida pela equipe block.one. Esta versão fornece uma implementação Alpha da maioria dos recursos restantes descritos em nosso roteiro para o outono de 2017 e inicialmente previsto para conclusão até 21 de dezembro de 2017. Como publicado em nosso roteiro, "Fase 2 - Rede de teste viável mínimo" foi demonstrar o seguinte até o outono de 2017:
- Código de rede P2P
- Wasm Sanitation & CPU Sandboxing
- Rastreamento de uso de recursos / Limitação de taxa
- Teste de importação de Gênesis
- Comunicação Inter-Blockchain
Neste momento, conseguimos a implementação inicial da maioria desses recursos; no entanto, devido a caminhos de desenvolvimento paralelos, nossa implementação da comunicação Inter-Blockchain existe em um ramo separado que não será usado para a rede de teste inicial.
Aqueles interessados em testar o desempenho de nossa versão do EOS.IO Dawn 2.0 encontrarão que todos os blocos e código de rede necessários para iniciar e operar uma rede privada podem ser encontrados em nosso Repositório Github. Nossos testes internos mostram que podemos sustentar vários milhares de transferências por segundo e 1 segundo de blocos usando nossa implementação de thread único em hardware médio. Dito isto, existem vetores de ataque conhecidos para os quais temos soluções não implementadas. Por exemplo, a compilação de novos contratos pela primeira vez pode levar até 34 ms, o que, se explorado, poderia fazer com que a rede se fragmentasse a taxas de transação superiores a 30 TPS.
Nossa solução para este problema é colocar limites na freqüência com a qual o código do contrato pode ser atualizado, bem como um atraso de tempo entre o momento em que o código é atualizado e quando as transações que utilizam esse novo código podem ser processadas. Este tempo de atraso será da ordem de 60 segundos para permitir que todos os produtores de blocos compram / esconda as instruções otimizadas x86 da montagem da web.
Por causa desses vetores de ataque pendentes, o teste de desempenho continuará sendo uma tarefa para redes de teste privadas, mas o teste de recursos agora pode ser realizado em uma rede de teste público que estamos limitando artificialmente 30 TPS para garantir o tempo de atividade e acesso.
Nos próximos 6 meses, estaremos testando e depurando continuamente a rede para melhorar a estabilidade e o desempenho.
Novos recursos no Dawn 2.0
Teste de importação de Gênesis
Implementamos uma ferramenta de instantâneo que importará o estado inicial com base na distribuição de token EOS ERC-20 na rede Ethereum. Nossa rede de teste incluirá somente os saldos que registraram uma chave pública EOS válida. Cerca de 20% dos tokens ERC-20 foram devidamente registrados em uma chave pública EOS. Nossa ferramenta de instantâneo também implementa uma ferramenta de retorno para todos os tokens ERC-20 não registrados mantidos por uma conta Ethereum para a qual podemos recuperar uma chave pública de transações de etéreo assinadas. Isso abrange 99% de todos os tokens EOS ERC-20, mas exigirá a importação de sua chave privada Ethereum em sua carteira EOS.IO.
Por motivos de segurança, nossa rede de teste não pedirá aos usuários que importem suas chaves privadas Ethereum recuperadas através do processo de retorno. Se a sua chave privada EOS estiver comprometida durante o teste, você sempre pode registrar uma nova chave na rede Ethereum.
Torneiras de token
Também implementamos uma instalação de "faucet" para permitir o teste da rede por aqueles que não possuem fichas ou ainda não registaram uma chave pública EOS válida.
Uso de Recursos & amp; Limitação de Taxa
Implementamos limitação básica de tarifas e rastreamento de uso de recursos. Isso rastreia largura de banda, armazenamento de banco de dados e uso computacional. Neste momento, existem alguns erros conhecidos com o nosso algoritmo de limitação de taxa, mas nada que possa interferir no teste e desenvolvimento de aplicativos.
Sabemos que muitas pessoas pediram mais informações sobre como a taxa de limitação irá operar, quem será cobrado e como eles podem arrendar seus toques aposentados para obter renda.
Largura de Banda
Todas as transações consomem parte da largura de banda máxima da rede configurada pelos produtores de blocos. Todas as contas cuja autoridade é necessária para a transação terão sua largura de banda média de 3 dias incrementada com base no tamanho da transação. A largura de banda exigirá que a conta autorizada (e não o contrato) tenha toques marcados ou seja delegado tokens aposentados pelo provedor do aplicativo.
Largura de banda computacional
Todas as transações consomem alguma computação. A computação pode ser executada em paralelo, de modo que pode ser vista como uma rodovia de várias pistas com cada faixa com congestionamento diferente. Cada escopo (pista) terá seu próprio limite de taxa independente e um usuário será faturado O (S ^ 2) para o número de escopos simultâneos (pistas) solicitados e taxa limitada com base no escopo mais congestionado.
Armazenamento de banco de dados
Os contratos EOS.IO têm acesso a um banco de dados na memória onde eles podem armazenar o estado do aplicativo. O contrato é cobrado com base nos dados totais que eles armazenam mais um fator indireto constante para cada entrada de banco de dados independente. Este banco de dados na memória é independente e separado do protocolo de armazenamento EOS.IO para hospedagem e armazenamento em massa descentralizada.
Código de rede P2P
Temos uma implementação básica do código da rede de malha que está sendo demonstrada pela nossa rede pública de testes. O Block.one está operando 21 servidores independentes, cada um com um dos produtores iniciais configurados.
EOS Dawn 3.0
O EOS Dawn 3.0 irá reintroduzir a escala horizontal de cadeias simples e escala infinita através de uma comunicação segura entre blocos. Com estes dois recursos, não haverá limite para o que pode ser construído na tecnologia blockchain nem para a descentralização da rede de blockchains.
Escala infinita e descentralização infinita
O santo graal da tecnologia blockchain é permitir uma comunicação segura entre duas cadeias de bloqueios independentes, sem exigir que ambas as cadeias de blocos validem tudo na outra cadeia de blocos. Isso exige fazer de um bloco uma luz-cliente de outro bloco.
Os clientes leves autenticam transações usando apenas cabeçalhos de bloco e provas do Merkle. O EOS.IO será o primeiro protocolo de prova de participação com suporte para validação de clientes ligeiros. Mais importante ainda, será o único capaz de gerar prova de integridade. Isso significa que será possível provar que você recebeu todas as mensagens anteriores relevantes de outra cadeia em ordem sem ter um período de espera / desafio.
Enquanto os clientes tradicionalmente leves têm que processar todos os cabeçalhos de blocos, o EOS.IO habilitará clientes ligeiros que só precisam processar cabeçalhos de bloco quando os produtores mudam ou quando uma nova mensagem é necessária de um bloco mais recente. Isso permitirá uma comunicação eficiente e infreqüente entre as cadeias juntamente com a comunicação freqüente. No pior dos casos, a sobrecarga de duas cadeias de blocos se comunicando a cada 500 ms será cerca de 2 transações por segundo acima do número total de mensagens enviadas.
Sob este modelo, a comunicação será assegurada desde que pelo menos ⅓ dos produtores sejam honestos. Além disso, se mesmo um produtor estiver corrompido, eles podem ser punidos automaticamente se assinarem qualquer mensagem que possa potencialmente corromper um cliente leve (também conhecido como cadeia de blocos estrangeiros).
Por último, o tempo de ida e volta para se comunicar com outra cadeia de bloco depende da latência até a irreversibilidade de cada cadeia. Uma cadeia baseada em EOS.IO poderá enviar uma mensagem para uma cadeia estrangeira EOS.IO e obter uma resposta criptograficamente verificada em menos de 3 segundos.
Este nível de comunicação e segurança inter-chave possibilita a criação de cavilhas de duas vias entre cadeias com latência muito baixa. Embora o exemplo de duas vias seja o exemplo mais óbvio, qualquer comunicação de empresa a empresa pode ser realizada usando esse mesmo método.
Comunicação pública / privada
Com a comunicação entre cadeias, será possível que as cadeias de bloqueio privadas tenham uma comunicação segura em duas direções com cadeias de bloqueio públicas. Isso permite todos os tipos de aplicativos de cadeias de blocos que não são adequados à natureza pública das cadeias de bloqueios tradicionais. Por exemplo, alguém poderia criar o Swiss-Bank of blockchains que é um segredo para todos, exceto para os proprietários dos bancos e para os indivíduos.
Progresso do desenvolvimento
Para entregar a nossa rede pública de testes, dividimos nosso desenvolvimento em dois caminhos paralelos para que pudéssemos refatorar porções significativas de nosso código para facilitar a leitura, desempenho e comunicação entre blocos. Este trabalho de refatoração tem ocorrido no ramo eos-meio-dia.
Nas atualizações passadas, indicamos nossa intenção de nos concentrar em arquiteturas de memória compartilhada para que os desenvolvedores possam facilmente realizar transações síncronas de acesso de leitura e atômica com outros contratos. A conseqüência dessa abordagem foi a perda de escala horizontal além de uma única máquina de ponta.
Com o EOS Dawn 3.0, estaremos restaurando a capacidade de fazer escalabilidade horizontal multi-máquina com o uso de até 65.000 regiões diferentes. Todas as regiões irão compartilhar as mesmas contas e o código do contrato, mas ter bases de dados independentes em memória. Contratos dentro de uma região devem usar transações assíncronas para se comunicar com suas contrapartes em outras regiões. Com essa arquitetura, um único produtor de blocos poderia ser implementado como um cluster.
Integração de trabalho com o Enclave seguro da Apple
Na nossa última atualização, anunciamos nossa intenção de suportar a mesma curva elíptica usada pela Apple, Android e muitos cartões inteligentes. Nosso eos-noon branch agora inclui uma prova de conceito totalmente funcional, onde as mensagens são assinadas e verificadas usando Touch ID (e também Face ID) no MacBook Pro mais recente. Código similar também funciona em aplicativos nativos do iPhone. Isso significa que as aplicações móveis baseadas em EOS.IO estarão entre as carteiras de cadeias de bloco mais seguras conhecidas.
Além disso, o ramo eos-noon agora integrou esse suporte para vários tipos de assinaturas, o que significa que é possível usar enclave seguro para assinar transações que serão validadas no eos-meio-dia.
Confirmação de bloco de 500 ms
No nosso ramo eos-meio-dia, implementamos uma série de mudanças na estrutura DPOS subjacente para suportar blocos de 500 ms (2 blocos por segundo). Essa mudança aumentará drasticamente a capacidade de resposta das aplicações descentralizadas. Para conseguir isso, introduzimos algumas mudanças na forma como ocorre o agendamento de bloqueios.
O mesmo produtor agora produzirá 12 blocos consecutivos antes de entregar ao próximo produtor. Isso resolve o maior gargalo na produção de blocos, que é a transferência do produtor para o produtor. Sob a nova estrutura, a latência inesperada pode causar alguns blocos a serem perdidos toda vez que há uma mão desligada, mas entre as transferências deve haver uma confirmação muito rápida. Nós estaremos experimentando diferentes períodos de entrega. Quanto maior o período de transferência, menos blocos perdidos durante a operação normal, mas quanto mais a interrupção será se um único nó cair. Com 500ms e entregar cada 12 blocos, o "tempo de inatividade" não é pior do que quando um único produtor perde um único bloco em Steem e BitShares. Neste caso, pode demorar 6 segundos para a primeira confirmação.
Removendo os produtores do Runner Up
A comunicação entre blocos exige clientes leves para acompanhar todos os blocos onde o conjunto de produtores ativos muda. A "lista de produtores de segundo lugar" faz com que um novo produtor seja adicionado ou removido a cada minuto, o que obriga os clientes ligeiros a processar pelo menos um cabeçalho de bloco por minuto, se não mais. Para reduzir a freqüência de mudanças no conjunto de produtores, mudamos o agendamento de blocos para incluir apenas os 21 maiores produtores. Estamos considerando oferecer algum tipo de pagamento de stand-by para os subcampeones, mas eles não serão realmente encarregados de produzir blocos.
Un Secondo Irreversibilidade
Todo produtor de blocos assina todos os blocos que permitirão que um bloco seja marcado irreversível assim que os produtores ⅔ + o tenham assinado. Os produtores só podem assinar um bloco de cabeçalho por altura do bloco. Isso significa que, no caso de um garfo, os produtores não podem assinar blocos na mesma altura em ambos os garfos. Qualquer tal assinatura será uma prova criptográfica de mau comportamento de um produtor que pode ser tratada por uma série de métodos, incluindo perda automática de posição de produtor, perda potencial de caução e potencialmente responsabilidade por danos sob arbitragem
Ao contrário de outros protocolos que coletam assinaturas ⅔ + antes do próximo bloco podem ser produzidos, o EOS DPOS faz pipi otimista que permite que a cadeia de bloqueios avance em "estado pendente" enquanto as assinaturas são reunidas. Essas assinaturas adicionais ocorrem fora da cadeia de blocos e podem ser podadas depois que um bloco se torna irreversível de acordo com as regras DPOS tradicionais do Steem ou BitShares.
Sob este modelo, é possível alcançar a tolerância a falhas bizantinas porque é impossível que qualquer bloco receba assinaturas ⅔ + sem evidência criptográfica dos nós byzantinos.
Removendo o Arranque de programação do produtor
Para minimizar o número de blocos perdidos durante a transferência do produtor, é desejável minimizar a latência entre produtores consecutivos. Se um produtor em Nova York estiver programado para acompanhar um produtor na China, pode levar 250ms para receber um bloco em condições normais (50% do intervalo de bloqueio) e potencialmente muito maior se houver congestionamento da rede. Um produtor em Nova York e Texas, por outro lado, teria apenas 50ms de latência (10% do intervalo de bloco). Isso significa que há uma probabilidade significativamente menor de faltar blocos durante uma transferência de Nova York para o Texas do que de Nova York para a China.
Se agendarmos a produção de blocos de forma que ele rota de Nova York, para o Texas, para a Califórnia, para o Havaí, para o Japão, China, Índia, Israel, Itália, Inglaterra, Islândia e de volta para Nova York, nunca há uma mão fora de mais de 50 a 100ms. No entanto, se a ordem for aleatorizada, a entrega média será significativamente maior.
A manipulação do produtor foi introduzida para minimizar o potencial de um produtor escolher um produtor subseqüente. Esse risco era em um mundo onde os produtores eram considerados potencialmente mal-intencionados, mas no mundo de produtores altamente cotados e públicos com centros de dados de alta qualidade já não faz sentido. Existe uma constituição e um nível de comportamento esperado junto com um processo para resolver disputas no caso de um produtor ferir intencionalmente o seu vizinho.
Sob a EOS, os produtores votarão na ordem de rotação da produção de forma a minimizar a latência média e minimizarão os blocos perdidos totais devido ao congestionamento da rede da Internet.
Problemas Conhecidos
Há uma série de problemas conhecidos com o EOS Dawn 2.0 e espera-se que haja uma instabilidade significativa com esta versão inicial. O objetivo deste lançamento é demonstrar uma capacidade básica e nossa equipe estará planejando erros e melhorando a estabilidade e o desempenho nos próximos 6 meses.
Para apoiar a estabilidade da rede de teste, desativamos a votação do produtor.
Conclusão
Gostaríamos de agradecer a nossa equipe de desenvolvimento por trabalhar ao redor do tempo e em todo o mundo para criar e entregar o EOS Dawn 2.0, uma versão alfa do que se tornará a plataforma de aplicativos mais robusta, de maior desempenho e descentralizada disponível. Estamos executando de acordo com nosso roteiro publicado e oferecendo mais recursos e recursos do que o planejado originalmente. Estamos ansiosos para 2018 e estamos confiantes de que todos os recursos estarão completos e os erros serão resolvidos no momento em que a distribuição de token EOS for concluída.
Aviso Legal
block.one é uma empresa de software e está produzindo o software EOS.IO como software livre e de código aberto. Este software pode habilitar aqueles que o implementam para lançar um bloco ou aplicativos descentralizados com os recursos descritos acima. block.one não estará iniciando um bloco de blocos público com base no software EOS.IO. Será exclusiva da responsabilidade de terceiros e da comunidade e aqueles que desejam se tornar produtores de blocos para implementar os recursos e / ou fornecer os serviços descritos acima, conforme o acham. O block.one não garante que alguém implemente tais recursos ou forneça esses serviços ou que o software EOS.IO seja adotado e implantado de qualquer maneira.
Todas as declarações neste documento, além de declarações de fatos históricos, incluindo quaisquer declarações relativas à estratégia de negócios, planos, perspectivas, desenvolvimentos e objetivos da block.one são declarações prospectivas. Essas declarações são apenas previsões e refletem as crenças e expectativas atuais do block.one em relação a eventos futuros e são baseadas em premissas e estão sujeitas a riscos, incertezas e mudanças a qualquer momento. Operamos em um ambiente em rápida mudança. Novos riscos emergem de tempos em tempos. Dado esses riscos e incertezas, você é advertido de não confiar nessas declarações prospectivas. Os resultados reais, desempenho ou eventos podem diferir materialmente daqueles contida nas declarações prospectivas. Alguns dos fatores que podem causar resultados reais, desempenho ou eventos diferem materialmente das declarações prospectivas contidas neste documento incluem, sem limitação: volatilidade do mercado; disponibilidade contínua de capital, financiamento e pessoal; aceitação do produto; o sucesso comercial de quaisquer novos produtos ou tecnologias; concorrência; regulamentação e leis governamentais; e condições gerais de economia, mercado ou negócios. Qualquer declaração prospectiva feita por block.one fala apenas a partir da data em que é feita e block.one não tem nenhuma obrigação e, expressamente, se isenta de qualquer obrigação de, atualizar ou alterar o seu futuro declarações, seja como resultado de novas informações, eventos subseqüentes ou de outra forma.