Anunciando a nova carteira MultiChain PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Anunciando a nova carteira MultiChain

Um importante passo em frente para desempenho e escalabilidade

Após dois meses de intenso desenvolvimento e testes, estamos orgulhosos de lançar o alfa mais recente do MultiChain, com uma carteira in-node completamente reescrita. Esta nova carteira transforma o desempenho e a escalabilidade de criação, recebimento e armazenamento de transações no MultiChain.

Antes de entrarmos em detalhes, deixe-me fornecer um contexto. Quando começamos a desenvolver o MultiChain, tomamos a decisão de usar Bitcoin Core, o nó padrão para a rede pública bitcoin, como ponto de partida. Em termos de programação, isso significa que o MultiChain é uma “bifurcação” do software bitcoin. Nosso raciocínio primário era que o bitcoin era (e continua sendo) o ecossistema de criptomoeda de maior valor e mais testado em batalha, de certa forma.

Do lado positivo, essa decisão nos ajudou a chegar ao mercado rapidamente, em comparação com a codificação de um nó de blockchain do zero. Apesar das muitas diferenças entre blockchains públicos e privados, eles compartilham uma grande quantidade de terreno técnico comum, incluindo o protocolo ponto a ponto, transação e estrutura de bloco, criação e verificação de assinatura digital, regras de consenso, gerenciamento de chaves e a necessidade de uma API de nó. A bifurcação do Bitcoin Core nos permitiu alavancar sua maturidade e foco no que o MultiChain adiciona ao blockchains - configurabilidade, permissão e suporte nativo a ativos. Como resultado, pudemos lançar o primeiro alfa em junho de 2015, apenas 6 meses após o início do desenvolvimento.

No entanto, junto com esses benefícios, também tivemos que aceitar o fato de que alguns aspectos do Bitcoin Core são mal arquitetados. Embora funcionem bem em escalas pequenas, seu desempenho diminui drasticamente à medida que o uso aumenta. Com a rede bitcoin pública ainda restrita a algumas transações por segundo, isso não será um problema para a maioria dos usuários do Bitcoin Core por muito tempo. Mas, com blockchains privados visando centenas ou milhares de transações por segundo, sabíamos que, mais cedo ou mais tarde, esses gargalos precisariam ser removidos.

Carteira do Bitcoin Core

A “carteira” dentro do Bitcoin Core sempre foi o mais crucial desses pontos fracos. Sua função é armazenar as transações que são de particular relevância para o nó, porque envolvem um endereço de blockchain de sua propriedade ou um “apenas assistir”Endereço cuja atividade ele está rastreando. Por exemplo, cada transação que envia fundos para ou de um nó deve ser armazenada na carteira desse nó. E cada vez que um nó cria uma transação, ele deve pesquisar uma ou mais “saídas não gastas” de transações de carteira anteriores que a nova transação irá gastar.

Então, o que há de errado com a carteira que herdamos do Bitcoin Core? Na verdade, três coisas:

  • Todas as transações de carteira são mantidas na memória. Isso causa tempos de inicialização lentos e aumenta rapidamente o uso de memória.
  • Muitas operações executam uma “varredura completa” ineficiente de todas as transações na carteira, sejam elas antigas ou novas.
  • Cada transação na carteira é armazenada por completo, incluindo quaisquer “metadados” arbitrários que não têm nenhum significado da perspectiva do nó e já estão armazenados no blockchain no disco. Isso é muito desperdício.

A consequência é que, com cerca de 20,000 transações armazenadas, a carteira do Bitcoin Core fica significativamente mais lenta. Depois de 200,000 ou mais, ele praticamente para. Pior ainda, como uma blockchain MultiChain permite até 8 MB de metadados por transação (em comparação com os 80 bytes do bitcoin), os requisitos de memória da carteira podem aumentar rapidamente, mesmo com um pequeno número de transações.

É importante esclarecer que essas deficiências se aplicam apenas ao Bitcoin Core wallet, em vez de sua capacidade geral de processamento de transações. Em outras palavras, ele pode processar e armazenar confortavelmente milhões (ou até bilhões) de transações que não se relacionam com seus próprios endereços, uma vez que são mantidas em disco e não na memória. Por exemplo, muitas bolsas e carteiras de bitcoin populares usam o Bitcoin Core como está, mas armazenam suas próprias transações externamente, em vez de dentro do nó.

Nova carteira MultiChain

Poderíamos ter feito a mesma demanda de usuários MultiChain, para armazenar suas próprias transações fora do nó. No entanto, essa não parecia a solução certa porque complicaria muito a configuração e a manutenção de cada um dos participantes da rede. Então, em vez disso, mordemos a bala e reescrevemos a carteira do zero.

Como a nova carteira difere? Se você tem alguma experiência com bancos de dados, as respostas podem ser óbvias:

  • Em vez de manter as transações da carteira na memória, elas são armazenadas no disco em um formato adequado, com as transações de interesse recuperadas quando necessário.
  • Em vez de realizar varreduras completas de carteira, as transações são “indexadas” de várias maneiras para permitir que aquelas que atendem a critérios específicos sejam localizadas rapidamente.
  • Qualquer parte dos metadados da transação com mais de 256 bytes não é armazenada na carteira. Em vez disso, a carteira contém um ponteiro para a posição dos metadados no próprio blockchain.

Em outras palavras, nós reconstruímos a carteira interna do nó para ser devidamente orientada pelo banco de dados (usando NívelDB), em vez de depender de uma estrutura ingênua na memória que não pode ser pesquisada com eficiência. Sem surpresa, a diferença (medida em um Intel Core i3.4 de 7 GHz) é bastante dramática:

Taxa de transferência de transação da carteira MultiChain

Uso da Memória

Os gráficos mostram que, uma vez que a carteira antiga contém 250,000 transações, sua taxa de envio cai para 3 tx / seg e adiciona 600 MB ao uso de memória do nó. Em contraste, a nova carteira sustenta mais de 100 tx / seg e adiciona apenas 90 MB. Paramos de testar a carteira antiga neste ponto, mas mesmo com 6 a 8 milhões de transações armazenadas, a nova carteira continua a enviar mais de 100 tx / s, e atinge cerca de 250 MB de RAM usados ​​(devido ao cache do banco de dados).

Esses testes foram realizados em condições realistas, com vários endereços e ativos (e, portanto, muitas saídas de transações não gastas) na carteira do nó. Em um cenário idealizado (um endereço, um ativo, poucos UTXOs), a taxa de envio sustentada era de mais de 400 tx / s. De qualquer forma, como parte dessa reescrita, também abstraímos adequadamente todas as funcionalidades da carteira por trás de uma interface interna limpa. Isso facilitará o suporte a outros mecanismos de banco de dados no futuro, para maior robustez e velocidade.

Para reiterar, todos esses números se referem à taxa na qual um nó pode criar, enviar e armazenar transações em sua carteira local, ao invés de seu rendimento em termos de transações de processamento criadas por outros. Para a taxa de transferência geral da rede, o MultiChain pode processar atualmente de 200 a 800 tx / s, dependendo do hardware em que está sendo executado. (Seja cético em relação a qualquer software de blockchain prometendo números como 100,000 tx / s em hardware regular, porque o gargalo é a verificação de assinatura digital, que leva tempo real para ser executada. Se os nós não estão verificando assinaturas de transação individuais, um blockchain não pode ser usado na confiança limites, tornando-o não melhor do que um banco de dados distribuído regular.)

Para terminar, gostaria de mencionar o próximo recurso importante que vem para o MultiChain, que exigiu a reescrita desta carteira. Este recurso, denominado streams, fornece uma abstração de alto nível e API para armazenamento de dados de uso geral em um blockchain. Você pode pensar em um fluxo como um banco de dados de série temporal ou valor-chave, com os benefícios adicionais relacionados ao blockchain de descentralização, assinaturas digitais, carimbo de data / hora e imutabilidade. Conhecemos muitos casos de uso de blockchain que poderiam usar essa funcionalidade e já estamos trabalhando duro para criá-la. Assista esse espaço.

Por favor, poste comentários no LinkedIn.

Adendo Técnico

A partir do MultiChain alpha 22, você pode verificar qual versão da carteira está em execução examinando o walletdbversion campo do getinfo or getwalletinfo Chamadas de API. Um valor de 1 significa a carteira Bitcoin Core original, e 2 significa a nova carteira MultiChain.

Se você executar a nova versão do MultiChain em uma cadeia existente, ele não mudará imediatamente para a nova carteira. Você pode atualizar a carteira parando o nó e depois executando novamente multichaind com os parâmetros -walletdbversion=2 –rescan. Você pode fazer o downgrade de forma semelhante usando –walletdbversion=1 –rescan.

Por padrão, quando você inicia um nó em uma nova cadeia, ele usará automaticamente a nova carteira. Você pode mudar isso executando multichaind pela primeira vez com o parâmetro –walletdbversion=1.

Com a nova carteira, todos APIs MultiChain funcionam exatamente da mesma maneira que antes, com exceção das antigas APIs de consulta de transação getreceivedbyaddress, listreceivedbyaddress e listtransactions (usar listwallettransactions or listaddresstransactions em vez de). Além disso, a nova carteira não oferece suporte a chamadas de API e parâmetros relacionados ao mecanismo de “contas” mal implementado e em breve obsoleto do Bitcoin Core, que nunca foi devidamente suportado pelo MultiChain. Essas chamadas são desabilitadas com segurança com uma mensagem de erro.

Fonte: https://www.multichain.com/blog/2016/07/announcing-the-new-multichain-wallet/

Carimbo de hora:

Mais de Multichain