LayerZero dos primeiros princípios

Feb 02 2023
Houve muita discussão ontem e muitos equívocos, então vou percorrer o LayerZero desde os primeiros princípios. O que é, como funciona, que garantias os desenvolvedores têm e as melhores práticas de segurança.

Houve muita discussão ontem e muitos equívocos, então vou percorrer o LayerZero desde os primeiros princípios. O que é, como funciona, que garantias os desenvolvedores têm e as melhores práticas de segurança.

O que é?

LayerZero é um protocolo de mensagens que permite a invocação arbitrária de contratos entre cadeias com uma carga útil incluída.

Como funciona?

Um desenvolvedor implanta um contrato em várias cadeias, vamos chamá-las de Cadeia A e Cadeia B. Uma transação é confirmada na Cadeia A, que constrói uma mensagem resultante a ser passada para o contrato na Cadeia B. O contrato interage com o LayerZero Endpoint e, em seguida, alguns as coisas acontecem — O oráculo e o retransmissor selecionados do aplicativo recuperam o cabeçalho do bloco correspondente e a prova de tx. Eles esperam pelo número especificado pelo aplicativo de confirmações de bloco na cadeia de origem e, em seguida, cada um entrega sua peça independentemente para a Cadeia B. Na Cadeia B, essas peças são validadas por meio de uma Biblioteca de Validação/Prova, seguida pela entrega do contrato de mensagem na Cadeia B .

Um exemplo simples disso na produção pode ser uma ponte no Stargate , uma troca usando SushiXSwap ou mover seu Lil Pudgy pelas correntes .

Que garantias os desenvolvedores têm?

Bem, existem quatro componentes reais aqui: Relayer , Oracle , Validation/Proof Library , Block Confirmations

O aplicativo pode ter controle total sobre cada um desses componentes. Vou explicar como esses controles se parecem abaixo:

Relayer — Relayers são completamente abertos e sem permissão. O aplicativo pode selecionar qualquer Relayer existente, incluindo a capacidade de operar seus próprios e selecionar a si mesmos. Os retransmissores podem ser uma rede de retransmissores ou tão simples quanto um único signatário.

Oráculos — Oráculos são totalmente abertos e sem permissão. O aplicativo pode selecionar qualquer Oracle existente, incluindo a capacidade de operar por conta própria e selecionar a si mesmo. Oráculos podem ser uma rede de oráculos ou tão simples quanto um único signatário.

Biblioteca de validação/prova — As bibliotecas são publicadas em um registro apenas anexado, novas bibliotecas podem ser publicadas, mas as bibliotecas existentes nunca podem ser modificadas e são total e irrevogavelmente imutáveis. A aplicação pode selecionar qualquer biblioteca existente (todas com auditorias públicas) para realizar sua validação. Um registro apenas anexado permite flexibilidade ilimitada à medida que novos mecanismos de prova são inventados, avanços em campos como provas de conhecimento zero surgem e otimizações gerais em torno de gás e utilização são feitas.

Confirmações de bloco — As confirmações de bloco são o número de blocos que devem ser concluídos na cadeia de origem atual antes que uma mensagem possa ser passada para a cadeia de destino. Esse número varia amplamente entre os mecanismos de consenso e, em sistemas com finalidade probabilística, são maneiras de os aplicativos controlarem a finalidade de um determinado bloco - da mesma forma que as exchanges centralizadas fazem antes de aceitar depósitos de uma determinada cadeia.

Se um aplicativo configurar esses parâmetros, ele ficará assim

Cenário A

Se um aplicativo não definir sua configuração, ele usará as configurações 'Padrão', que basicamente são apenas um ponteiro para algum ponteiro.

Cenário B

No Cenário A, quando um aplicativo definiu sua configuração de [ULN v2, Relayer A, Oracle Z, Block Confs X e Proof Lib V1]] não há nada que qualquer outro sistema no mundo possa fazer para modificar essas seleções. Neste ponto, o Relayer A será usado com o Oracle Z, todas as mensagens serão validadas por meio de ULN v2 e Proof Lib v1 após aguardar as confs do bloco X.

No cenário B, quando um aplicativo está usando as configurações padrão, significa que ele está cedendo o controle da seleção desses itens para o multisig LayerZero. As únicas coisas que o multisig LayerZero pode fazer é adicionar novas bibliotecas e alterar os padrões. Selecionar isso significa que o aplicativo está delegando confiança ao multisig LayerZero na seleção desses itens e não agindo de forma maliciosa.

Então, vamos discutir qual é o estado atual do mundo e o que pode e o que não pode ser feito.

A maioria dos sistemas de mensagens genéricos hoje funcionam mais ou menos assim

Sistemas de mensagens como Wormhole, Nomad, etc. funcionam de maneira semelhante. Todo o controle fica no [sistema] e pode ser atualizado por quem controla as chaves de administrador para esses sistemas (no caso do Wormhole, este é o multisig 13/19 dos validadores). Anteriormente, isso era extremamente problemático, resultando em vários problemas para Wormhole e Nomad e geralmente é visto como uma prática insegura para aplicativos. O uso dos padrões do LayerZero é exatamente equivalente a esses sistemas, o aplicativo está delegando o controle dos parâmetros para um conjunto externo de chaves administrativas e contando com essas partes para não agir de forma maliciosa.

A diferença é que, com cada um desses sistemas, um aplicativo não tem nenhum controle e nunca pode impedir que o [sistema] force essas atualizações neles e altere o comportamento subjacente das mensagens ou as suposições de confiança dos protocolos.

LayerZero oferece a cada aplicativo uma maneira de escolher explicitamente um conjunto concreto de parâmetros de segurança que nunca podem ser modificados ou alterados neles. Acreditamos que a infraestrutura crítica deve ser imutável, de código aberto e sempre de propriedade dos aplicativos do usuário.