Por: Brett McLain, Diretor de Engenharia – Crypto, Fiat, Staking
Se você está interessado em criptomoedas, pagamentos ou apostas e deseja ajudar a construir o sistema financeiro do futuro, a equipe de engenharia de financiamento @ Kraken está contratando!
Quando o Kraken foi lançado, há uma década, apenas três criptomoedas eram suportadas: BTC, LTC e XRP.
Hoje, Kraken oferece suporte a 82 ativos em 33 blockchains e serviços de piquetagem para 8 criptomoedas.
Para facilitar os milhões de depósitos, saques e transações de apostas anuais na Kraken, a equipe de engenharia de criptografia opera centenas de serviços para garantir o fluxo suave de fundos dentro e fora da bolsa. O software blockchain que sustenta esses serviços é atualizado com frequência; para alguns dos blockchains mais ativos, os hard e soft forks podem ser de natureza mensal, enquanto outros, como o Ethereum, são eventos semestrais. Em geral, há pelo menos algumas atualizações de software em nossa infraestrutura blockchain toda semana.
O desafio de apoiar e atualizar um número tão grande de serviços diferentes e, ao mesmo tempo, construir novos pode ser assustador.
Nos últimos 12 meses, nossa equipe adicionou suporte para:
- 60 novas criptomoedas:
- 39 tokens ERC20
- Polkadot (no lançamento da rede principal)
- Kusama
- Filecoin (no lançamento da mainnet)
- Fluxo (no lançamento da mainnet)
- Kava
- Energy Web Token (no lançamento da mainnet)
- USDT (TRC20)
- 10 x Empréstimos coletivos Parachain
- Solana
- 1 x token SPL (soro)
- Mina
- 8 novos ativos de piquetagem:
- Polkadot (no lançamento da rede principal)
- Kusama
- Ethereum 2.0 (no lançamento da rede principal)
- Fluxo (no lançamento da mainnet)
- Cardano
- Cosmos
- Kava
- Solana
Essas conquistas foram alcançadas juntamente com a manutenção de nossas integrações existentes. Os engenheiros da equipe de criptografia são responsáveis não apenas pelo software de gateway escrito internamente, mas também pela manutenção e implantação de nossa infraestrutura blockchain da qual nossos gateways dependem. A cadência do desenvolvimento de blockchain nesses projetos pode ser alucinante, com mudanças radicais e novos recursos chegando com frequência e às vezes sem aviso prévio.
Então, como a Kraken consegue lançar dezenas de novos produtos todos os anos e, ao mesmo tempo, acompanhar o ritmo acelerado do desenvolvimento do blockchain?
Testes ponta a ponta (E2E)!
Por que valorizamos os testes E2E e evitamos simulações
Desde os primeiros dias na Kraken, a ênfase tem sido que os testes E2E são o tipo de teste mais valioso que um engenheiro pode construir. Os testes unitários têm seu lugar, mas muitos desenvolvedores inexperientes com integrações complexas tendem a escrever testes unitários para cada parte do código que constroem, na crença de que estão melhorando a qualidade geral do software que estão desenvolvendo.
Esse caminho, embora cheio de boas intenções, muitas vezes pode levar a muita dor no futuro. A dependência excessiva de testes unitários tende a consolidar sua arquitetura; é como colocar uma camada de epóxi sobre toda a sua base de código. Você está acoplando firmemente o código aos seus testes, tornando o código mais rígido, inflexível e resistente à refatoração. Se precisar fazer uma alteração, provavelmente você precisará fazer alterações significativas nos testes e, em alguns casos, descartá-los completamente. A refatoração de código é um recurso essencial que uma equipe de engenharia deve ter em seu kit de ferramentas e qualquer coisa que acrescente atrito à facilidade de refatoração deve ser cuidadosamente avaliada antes de ser introduzida. Ao refatorar o código, um teste E2E bem projetado geralmente não requer muitas alterações e fornece flexibilidade no ajuste das entranhas internas de um aplicativo, garantindo ao mesmo tempo que ele continue a operar conforme o esperado.
Isso significa que você não deve escrever testes unitários? De jeito nenhum! Existem muitos cenários em que os testes unitários são a solução perfeita, mas descobrimos que, para integrações complexas, os testes E2E funcionam melhor. Em geral, os testes unitários são mais eficazes quando escritos para códigos que atendem aos seguintes critérios:
- Algoritmicamente complexo com muitos casos extremos.
- Escopo rígido com requisitos bem definidos.
- Conclui uma única unidade de trabalho.
- Apátrida.
Esses pequenos pedaços de código complexo e com escopo restrito costumam ser os blocos de construção de um aplicativo maior e, mesmo que ocorresse uma refatoração, seria improvável que essas funções mudassem. Em nosso mundo, isso seria coisas como derivação de endereço, validação de endereço, assinatura de transação, etc.
A principal conclusão aqui é que, como uma pequena equipe de engenharia, não conseguiremos manter o volume de serviços que oferecemos atualmente. e construir novos produtos sem testes de ponta a ponta. Os testes unitários deveriam ser considerados apostas, mas isoladamente, não seriam suficientes para nos mantermos atualizados neste espaço em evolução. Em vez disso, optámos por investir fortemente em conjuntos robustos de integração e testes E2E que validam que os nossos serviços funcionarão com sucesso nos seus modos de operação mais comuns.
Desafios dos testes E2E
Embora os testes E2E possam ser poderosos, eles não são uma panacéia. Ao integrar com serviços de terceiros, esses tipos de testes muitas vezes perdem muito de seu valor, uma vez que certos terminais ou interfaces precisam ser simulados para testar completamente o fluxo de uma função ou chamada específica. As simulações são tão boas quanto a sua compreensão do serviço que você está simulando e, como resultado, podem estar sujeitas a erros quando as atualizações são frequentes e de grande porte. Manter seu próprio código, bem como suas simulações, é uma violação do princípio DRY (não se repita), um termo cunhado por David Thomas e Andrew Hunt em “The Pragmatic Programmer”. Em seu livro eles afirmam que “Cada pedaço de conhecimento deve ter uma representação única, inequívoca e oficial dentro de um sistema”. Criar uma versão simulada de qualquer serviço significa que agora existem duas cópias potencialmente divergentes do referido serviço: sua versão simulada e a versão real. Erros na tradução do comportamento da dependência simulada são agora outra preocupação a ser considerada.
Regtestes para o resgate
Felizmente para nós, a maioria dos blockchains suporta a capacidade de executar redes privadas temporárias que podem ser criadas como parte do nosso processo de integração contínua (CI)/implantação contínua (CD). O exemplo mais popular disso é o modo de teste de regressão (regtest) do Bitcoin. Quando você inicia o bitcoind com a opção `-regtest`, ele cria um novo ambiente blockchain local sobre o qual você tem controle total. A principal característica do modo regtest é que você pode extrair um número arbitrário de blocos à vontade, permitindo que seus testes E2E completem viagens de ida e volta para depósitos e retiradas de todos os tipos e variações, simulando centenas de cenários em segundos. Casos extremos e outros cenários exclusivos podem ser facilmente simulados no modo regtest, como transações multisig, reorganizações, substituição por taxa (RBF), pagamento infantil pelos pais (CPFP) e muito mais! Esses testes não apenas garantem que nosso código não contenha erros, mas também validam o estado final do blockchain e de nossos livros-razão para garantir que tudo esteja funcionando conforme o esperado.
Como parte do processo para adicionar suporte para uma nova criptomoeda no Kraken, a equipe de financiamento cria uma estrutura de teste de registro para todas as novas listagens. Este código é a base do nosso regime de manutenção: sempre que uma nova versão é lançada, é simplesmente uma questão de atualizar a versão do nó blockchain e executar novamente nosso pipeline de CI para garantir que não haja alterações significativas. A leitura cuidadosa das notas de lançamento e a colaboração com a comunidade ainda são muito necessárias, mas esses testes nos dão confiança para lançar novas versões que de outra forma não teríamos.
Soluções Criativas
Infelizmente para nós, nem todos os blockchains são tão testados em batalha quanto o Bitcoin. Novos blockchains geralmente introduzem novos conceitos e, para oferecer aos nossos clientes acesso às novas tecnologias mais interessantes, Kraken prefere lançar suporte para novos blockchains o mais próximo possível do início da rede principal. Para apoiar com segurança um novo ativo na data de lançamento ou próximo dela, a Kraken às vezes precisa desenvolver equipamentos de teste complexos para ganhar confiança na integração e garantir que os fundos dos clientes não estejam em risco.
Uma ilustração perfeita disso foi quando Kraken lançou suporte para Ethereum 2.0 apenas 3 dias após a entrada em operação da rede principal em 1º de dezembro de 2020. Embora milhares de indivíduos e empresas em todo o mundo tenham ajudado a testar Ethereum 2.0 em vários testnets como Medalla e Spadina, ainda decidiu levar o conceito de regtests a um outro nível com esta integração. Sabíamos desde o início que o Ethereum 2.0 seria um desenvolvimento significativo, e essa crença provou ser verdadeira, já que milhões de ETH foram apostados até agora na cadeia de beacon, incluindo mais de 800,000 ETH apostados por clientes Kraken.
Abaixo você pode ver um diagrama do conjunto de serviços que nosso pipeline de integração contínua (CI) ativa e desmonta toda vez que um desenvolvedor envia código para um de nossos repositórios de código ETH2.
Em um nível alto, o fluxo de teste é:
- Inicie os nós primário e alternativo do ETH1 (cada um deles se reveza na mineração para obter consenso) com uma gênese que contém uma quantidade inicial de ETH para teste.
- Inicie o nó da cadeia de beacon ETH2 como uma cadeia privada usando um modo de configuração mínima especial onde apenas 16 validadores são necessários para ativar o genesis.
- Implante o contrato inteligente ETH2 no blockchain ETH1.
- Deposite ETH no contrato de depósito ETH2 onde os fundos são queimados e validadores são criados no nó validador externo ETH2. Esses são validadores que operam apenas na rede ETH2 e são tratados como se fossem externos a qualquer validador Kraken.
- Inicie os exploradores de blocos ETH1 e ETH2.
- Inicie o banco de dados.
- Inicie Gateway e Signatários.
- Insira solicitações de clientes para apostar ETH -> ETH2.
- O Gateway coleta solicitações de clientes e envia ETH para o contrato de depósito na blockchain ETH1 e cria um número correspondente de validadores no nó validador interno ETH2. Os validadores são segregados em conjuntos de validadores internos e externos para que possamos testar o que acontece quando nossos validadores ficam inativos (para testar cortes, penalidades, recompensas perdidas) e para ver o que acontece quando o resto da rede fica inoperante ou off-line, mas nossos validadores permaneça acordado.
- Monitore até que os validadores estejam ativos na cadeia ETH2, comece a rastrear recompensas, pagamentos, cortes e penalidades de testes, detecção de recompensas perdidas e pague recompensas aos clientes.
- Execute nosso processo separado de reconciliação financeira em todas as transações para garantir que tudo em todos os nossos livros corresponda corretamente.
O texto acima é apenas um resumo de alto nível do que está acontecendo em nossa estrutura de teste; há uma série de outros testes, verificações e validações que ocorrem. Se um desenvolvedor precisar depurar algo ou observar o estado de qualquer uma das redes, ele poderá consultar os exploradores de bloco para ver rapidamente o que exatamente ocorreu. Normalmente não incluímos exploradores de blocos em nosso pipeline de CI, mas dada a complexidade da integração, foi útil durante a fase de desenvolvimento visualizar o que estava acontecendo na cadeia.
Você pode pensar que isso adiciona um enorme atraso ao nosso pipeline de CI, mas felizmente não é o caso. Atualmente, o pipeline completo de CI para nosso repositório Ethereum 2.0 leva apenas 14 minutos para ser executado. Isso inclui auditar/construir todas as dependências, iniciar todos os serviços, implantar vários contratos inteligentes no blockchain, minerar blocos, criar validadores e, em seguida, executar todos os mais de 100 cenários de teste.
Considerações Finais
O desenvolvimento de testes E2E abrangentes para cada integração de blockchain na Kraken consome uma quantidade significativa de recursos de engenharia. É um preço que pagamos com prazer, pois a nossa principal preocupação é a segurança dos fundos dos nossos clientes e garantir que tenham uma experiência de qualidade na nossa plataforma. Nossa equipe poderia lançar mais produtos se gastássemos menos tempo em testes ao construir novas integrações? Sem dúvida. No entanto, fazer isso iria contra o espírito e os valores não apenas da equipe de engenharia, mas da empresa como um todo. Esses testes garantem que possamos atualizar com segurança para novas versões do software blockchain, aumentar a confiança durante hard/soft forks e reduzir o estresse do desenvolvedor ao implantar mudanças.
Por que os engenheiros da Kraken são alguns dos mais respeitados do setor? Esta mensagem de Steve Hunt, vice-presidente de engenharia da Kraken, descreve nossos valores e dedicação em ajudar outros engenheiros de blockchain.
Fonte: https://blog.kraken.com/post/10227/testing-crypto-payments-stake-at-kraken/
- &
- 000
- 11
- 2020
- Acesso
- Conta
- ativo
- Todos os Produtos
- todas as transacções
- Permitindo
- Aplicação
- arquitetura
- por aí
- ativo
- Ativos
- Batalha
- cadeia de baliza
- Bitcoin
- blockchain
- BTC
- construir
- Prédio
- chamada
- casos
- desafiar
- alterar
- Cheques
- criança
- código
- colaboração
- vinda
- comum
- comunidade
- Empresas
- Empresa
- confiança
- Consenso
- continua
- contract
- contratos
- Criar
- cripto
- criptomoedas
- criptomoedas
- banco de dados
- acordo
- atraso
- Detecção
- desenvolver
- Developer
- desenvolvedores
- Desenvolvimento
- Diretor
- Cedo
- borda
- Eficaz
- engenheiro
- Engenharia
- Engenheiros
- Meio Ambiente
- ERC20
- ETH
- ethereum
- Ethereum 2.0
- Ethos
- eventos
- exchange
- RÁPIDO
- Característica
- Funcionalidades
- decreto
- financeiro
- Flexibilidade
- fluxo
- Quadro
- cheio
- função
- financiamento
- fundos
- futuro
- Geral
- Gênese
- Bom estado, com sinais de uso
- ótimo
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- Alta
- House
- Como funciona o dobrador de carta de canal
- HTTPS
- Centenas
- Incluindo
- Crescimento
- indústria
- Infraestrutura
- integração
- integrações
- isolamento
- IT
- manutenção
- Chave
- Conhecimento
- Kraken
- grande
- lançamento
- conduzir
- Nível
- Anúncios
- local
- LTC
- Fazendo
- Mineração
- mês
- Mais populares
- Multisig
- rede
- Novos Recursos
- novos produtos
- nós
- oferecer
- operando
- Opção
- ordem
- Outros
- Dor
- Pagar
- pagamentos
- plataforma
- Popular
- preço
- privado
- Produtos
- projetos
- qualidade
- Leitura
- reduzir
- confiança
- Requisitos
- Recursos
- DESCANSO
- Recompensas
- Risco
- Execute
- corrida
- Segurança
- Peneira
- Serviços
- conjunto
- pequeno
- smart
- smart contract
- Smart Contracts
- So
- Software
- Espaço
- estaca
- Staking
- começo
- Estado
- estresse
- ajuda
- Suportado
- suportes
- .
- Tecnologias
- temporário
- teste
- ensaio
- testes
- tempo
- token
- topo
- Rastreamento
- transação
- Transações
- Atualizar
- Atualizações
- us
- valor
- volume
- web
- semana
- dentro
- Atividades:
- mundo
- X
- xrp
- ano