Como entrada e passagem para o mundo criptográfico, as carteiras têm uma posição insubstituível em toda a indústria criptográfica. O uso de carteiras também é uma parte inevitável de todos que desejam entrar no mundo criptográfico. A função das carteiras também evoluiu a partir da contabilidade pura original. função para as funções de uso de múltiplas cadeias e vários cenários de hoje. No entanto, o limite atual para o uso de carteiras é muito alto para que novos usuários possam aprender. Esse limite exclui muitas pessoas que desejam entrar no mundo criptográfico. Somente reduzindo o limite para carteiras poderemos trazer mais sangue fresco para todo o mundo criptográfico. Além da explosão do ecossistema, com a chegada da proposta de abstração de contas EIP-4337, o limite inferior trazido pela carteira de abstração de contas permitirá que a carteira entre na próxima era e desencadeará uma explosão de usuários no mundo criptográfico?

Autor: Espinafre Espinafre

Agradecimentos especiais ao Sr. Shisijun e ao Sr. Fang Jun por seu apoio e orientação

Nota: Este artigo representa apenas as opiniões pessoais do autor e não constitui qualquer conselho de investimento.

Índice

01/ Quais são os pontos problemáticos para usuários novatos no uso de carteiras neste estágio?

02/ Quais são os tipos existentes de carteiras Ethereum?

03/ O que é abstração de conta? Quais são as vantagens da abstração de contas EIP-4337?

04/ Por que a Ethereum escolheu a proposta de abstração de conta EIP-4337?

05/ Como funciona a carteira de abstração de contas EIP-4337? Como ela é diferente de outros tipos de contas de carteira?

06/ Quais são as deficiências e riscos da abstração de contas EIP-4337?

Resumo

  • O limite de conhecimento do mundo cripto é alto. As pessoas geralmente não têm conhecimento de blockchain e carteiras. A experiência atual de usar carteiras é complicada. Existem muitos fatores que impedem a entrada de novos usuários.

  • Atualmente, usuários novatos encontrarão alguns problemas ao usar carteiras: eles precisam pagar taxas de gás antes de usar carteiras, precisam encontrar canais para comprar ativos criptografados, têm uma seleção impressionante de redes principais e têm problemas de segurança de carteira.

  • Existem dois tipos diferentes de contas em carteiras Ethereum, a saber, Contas de Propriedade Externa EOA e Contas de Contrato CA. Carteiras do tipo Contas de Propriedade Externa EOA são controladas por uma chave privada e um par de chaves públicas e não têm funções programáveis. Uma carteira do tipo de conta de contrato CA se refere a uma carteira que existe na forma de um contrato inteligente. A carteira do tipo de conta de contrato em si não é controlada por uma chave privada e não tem uma chave privada. Em vez disso, ela implementa várias funções escrevendo códigos, mas não pode iniciar transações ativamente.

  • Os dois tipos de conta de carteira têm suas próprias vantagens, desvantagens e limitações. Contas externas EOA só podem ser geradas de acordo com o método de geração de pares de chaves especificado pelo Ethereum. Elas não são programáveis ​​e exigem taxas de gás para operar. Se a chave privada for perdida, ela não poderá ser recuperada. No entanto, em comparação com o tipo de conta de contrato CA, embora o tipo de conta de contrato CA possa personalizar a lógica para obter possibilidades mais funcionais, o tipo de conta de contrato CA não pode iniciar transações ativamente e precisa ser chamado por uma conta externa EOA. Além disso, gerar uma carteira do tipo de conta de contrato CA requer custos adicionais. Atualmente, esses dois tipos de conta de carteira não podem resolver o problema da experiência complexa de uso da carteira.

  • Account Abstraction é uma solução de tecnologia de carteira a ser implementada no Ethereum. Sua visão final é permitir que a carteira de abstração de conta AA combine as características dos dois tipos de conta, contas de propriedade externa EOA e contas de contrato CA, para que possam ser combinadas em uma para substituir EOA como a conta principal. Além de ter a programabilidade do CA, ele também pode se livrar da dependência do EOA para iniciar transações ativamente.

  • A proposta EIP-4337 extrai o [mecanismo de verificação de transação] que é codificado na camada de consenso do processo de transação da carteira Ethereum original e o entrega ao novo mecanismo do EIP-4337. O surgimento do novo mecanismo permite que a carteira abstrata da conta personalize o método de assinatura e traz mais cenários de aplicação

  • Os aplicativos de carteira que implementam abstração de conta permitem que os usuários usem métodos de assinatura específicos para iniciar transações como a conta principal sem ter que possuir EOA, desvinculando os direitos de propriedade e assinatura da carteira de abstração de conta. A conta do proprietário EOA da carteira de abstração de conta existe apenas como um proprietário e não afeta o uso da carteira de abstração de conta real.

  • O motivo pelo qual o EIP-4337 foi escolhido pela Ethereum como a solução final é que o EIP-4337 pode atingir a abstração de contas sem modificar a camada de protocolo de consenso, o que evita grandes modificações na camada de consenso, como mudar do mecanismo de prova de trabalho POW para o mecanismo de prova de patrimônio POS.

  • No EIP-4337, a carteira abstrata da conta delega o [mecanismo de verificação de assinatura] ao contrato do ponto de entrada, o que permite que a carteira abstrata da conta use qualquer mecanismo de assinatura. Os desenvolvedores de carteira podem escolher o formulário de assinatura para o cenário correspondente para desenvolver produtos de carteira.

  • A carteira de abstração de conta corrente é mais como um novo padrão para carteiras de contratos inteligentes e não consegue se livrar da dependência da EOA como proprietária da carteira. E a proposta de abstração da conta corrente ainda tem algumas deficiências e riscos: riscos de contratos inteligentes, GAS mais alto, problemas de implementação técnica

1. Quais são os pontos problemáticos para usuários novatos no uso de carteiras neste estágio?

Devido ao alto limiar de conhecimento do mundo cripto, as pessoas geralmente não têm conhecimento sobre blockchain e carteiras. A experiência atual de usar carteiras é complicada, e há muitos fatores que impedem a entrada de novos usuários.

Ponto problemático 1: é necessária uma taxa de gás para usar a carteira

Quando um usuário novato está ansioso para experimentar o mundo das criptomoedas e baixa uma carteira para começar, ele fica surpreso ao descobrir que a carteira não pode ser usada porque não há um token nativo de cadeia pública (como o ETH do Ethereum) como taxa de gás na carteira. A carteira não pode executar nenhuma operação porque cada operação na cadeia da carteira exige que os mineradores empacotem a operação e paguem taxas de gás aos mineradores como taxas de trabalho. Neste momento, o novato precisa começar a procurar canais para comprar ativos criptografados, mas muitos produtos de carteira não fornecem canais de depósito e retirada. A maioria dos novatos pode escolher trocas centralizadas.

Ponto problemático 2: Canais de compra de criptoativos e escolhas deslumbrantes da mainnet

Quando usuários novatos querem comprar criptoativos, eles podem escolher produtos de carteira com canais de depósito e retirada, exchanges centralizadas, transações de balcão e outros canais para comprar criptoativos. No entanto, para usuários novatos que escolhem exchanges centralizadas e transações de balcão, se eles querem transferir ativos para suas carteiras depois de comprá-los em exchanges centralizadas, os usuários novatos ficarão confusos com as várias redes principais para transferência. Aprender a escolher uma rede principal requer um certo custo de aprendizado. Se você não for cuidadoso, transferir para a rede errada será extremamente trabalhoso de lidar. Se for uma transação de balcão, é muito arriscado. Usuários novatos têm grande probabilidade de se tornarem alvos de golpistas.

Ponto problemático 3: Problemas de segurança da carteira

Para usuários novatos, mesmo que finalmente tenham liquidado a taxa de gás e possam usar a carteira para interagir, todo o mundo das criptomoedas ainda é uma floresta escura para eles. Usuários novatos precisam aprender conhecimento criptográfico sobre carteiras, como chaves privadas e chaves públicas. Eles também precisam entender o que são chaves privadas e pensar sobre como garantir a segurança das chaves privadas e se proteger contra golpes na floresta escura da criptografia. Elas são caras de aprender e fáceis de serem enganadas por usuários novatos. O mais importante é que, uma vez que a chave privada é perdida ou esquecida, ela não pode ser recuperada. Ela não pode ser recuperada como recuperar uma senha usando um aplicativo Web2. Isso é difícil para usuários Web2 se acostumarem.

2. Quais são os tipos existentes de carteiras Ethereum?

Atualmente, existem dois tipos diferentes de contas em carteiras Ethereum, ou seja, contas de propriedade externa EOA (Contas de Propriedade Externa) e contas de contrato CA (Conta de Contrato).

Contas de propriedade externa da EOA:

A carteira do tipo conta de propriedade externa EOA se refere a uma carteira controlada por uma chave privada e um par de chaves públicas. A função de uma carteira de propriedade externa é basicamente apenas receber, manter, enviar tokens e interagir com contratos inteligentes. Ela não tem funções programáveis, e uma taxa de gás precisa ser paga para cada transação. A criação de uma carteira do tipo conta de propriedade externa é gratuita, mas só pode ser criada gerando uma chave privada.

Conta de contrato CA:

Uma carteira do tipo conta de contrato CA se refere a uma carteira que existe na forma de um contrato inteligente. A carteira do tipo conta de contrato em si não é controlada por uma chave privada e não tem uma chave privada. Em vez disso, ela implementa várias funções escrevendo código, como protocolo DeFi, carteira multiassinatura, cofre, faucet, etc. Os usos comuns incluem carteiras multiassinatura, ou seja, carteiras que exigem várias carteiras de contas externas para autorizar transações e geralmente são usadas para gerenciamento de carteira empresarial. Criar uma carteira de conta de contrato requer o consumo de taxas de gás. A carteira de conta de contrato em si não pode iniciar transações ativamente, mas requer uma carteira de conta externa para chamar e pagar taxas de gás para iniciar transações passivamente.

Esses dois tipos de conta de carteira têm suas próprias vantagens, desvantagens e limitações. Contas de propriedade externa EOA só podem ser geradas de acordo com o método de geração de pares de chaves especificado pelo Ethereum. Elas não são programáveis ​​e exigem taxas de gás para operar. Se a chave privada for perdida, ela não poderá ser recuperada. No entanto, em comparação com o tipo de conta de contrato CA, embora o tipo de conta de contrato CA possa personalizar a lógica para obter possibilidades mais funcionais, o tipo de conta de contrato CA não pode iniciar transações ativamente e precisa ser chamado por uma conta externa ao EOA. Além disso, gerar uma carteira do tipo de conta de contrato CA requer custos adicionais. Atualmente, esses dois tipos de conta de carteira não podem resolver o problema da experiência complexa de uso da carteira.

Account Abstraction é uma solução de tecnologia de carteira a ser implementada no Ethereum. Sua visão final é permitir que a carteira abstrata de conta AA combine as características dos dois tipos de conta, contas de propriedade externa EOA e contas de contrato CA, para que possam ser combinadas em uma para substituir EOA como a conta principal. Além de ter a programabilidade do CA, ele também pode se livrar da dependência do EOA para iniciar transações ativamente.

A Abstração de Conta discutida aqui se refere à proposta Ethereum EIP-4337 proposta por Vitalik. Esta proposta extrai o [mecanismo de verificação de transação] que é codificado na camada de consenso do processo de transação da carteira Ethereum original e o entrega ao novo mecanismo do EIP-4337 para processamento. O surgimento do novo mecanismo permite que a carteira de abstração de conta personalize o método de assinatura e traz mais cenários de aplicação, como: pagamento de Gás, assinatura agregada, proteção de privacidade, etc.

Após a implementação da proposta EIP-4337, a carteira de abstração de conta não se limita ao método de assinatura do par de chaves Ethereum Elliptic Curve Digital Signature Algorithm (ECDSA) usado pela carteira de tipo de conta externa EOA. Os desenvolvedores de aplicativos de carteira podem aplicar qualquer tipo de esquema de assinatura ao aplicativo de carteira de abstração de conta para que os usuários possam usar outros métodos de assinatura para iniciar transações, reduzindo assim o limite de uso do usuário.

Os aplicativos de carteira que implementam abstração de conta permitem que os usuários usem métodos de assinatura específicos para iniciar transações como a conta principal sem ter que possuir EOA, desvinculando os direitos de propriedade e assinatura da carteira de abstração de conta. A conta do proprietário EOA da carteira de abstração de conta existe apenas como um proprietário e não afeta o uso da carteira de abstração de conta real. A dissociação de direitos de propriedade e assinatura permite que produtos de carteira forneçam aos usuários recuperação social e outros meios, para que as pessoas não precisem se preocupar em não conseguir recuperar suas chaves privadas, mesmo se as perderem.

Devido à escalabilidade trazida pelo novo mecanismo de carteira de abstração de conta, o ponto problemático de ter que ter Gas antes de usar a carteira também pode ser resolvido. A carteira de abstração de conta pode não apenas permitir que terceiros paguem por Gas, mas também realizar o pagamento de taxas de Gas com ativos que não sejam tokens nativos. Isso reduzirá muito o limite para usuários novatos usarem taxas de Gas. Parece previsível que, em um futuro próximo, o limite mais baixo e as funções mais personalizadas trazidas pela abstração de conta podem levar a uma nova era de carteiras.

4. Por que a Ethereum escolheu a proposta de abstração de conta EIP-4337?

A discussão sobre abstração de conta nunca parou desde o lançamento do Ethereum. Do primeiro EIP-101 ao EIP-3074 e agora o mais recente EIP-4337, a solução de abstração de conta passou por várias versões, mas a maioria das soluções era imatura e as modificações na camada de protocolo de consenso eram muito complicadas e acabaram sendo arquivadas.

Após uma longa discussão e iteração de 2015 até o presente, a Ethereum finalmente fez uma escolha entre EIP-3074 e EIP-4337. Se EIP-4337 permite que carteiras de contas de contrato inteligente CA sejam usadas como EOA, então EIP-3074 permite que carteiras de contas externas EOA tenham funções programáveis ​​de contas de contrato inteligente. Finalmente, com o mais recente roteiro Ethereum anunciado pelo fundador da Ethereum Vitalik, EIP-4337 foi oficialmente incluído na implementação da fase The Splurge, que também fez EIP-4337 a solução final para abstração de contas.

A razão pela qual o EIP-4337 foi escolhido pelo Ethereum como a solução final é, em primeiro lugar, porque o EIP-4337 pode atingir a abstração de conta sem modificar a camada de protocolo de consenso, o que evita a enorme modificação da camada de consenso que não é menos do que a conversão do mecanismo de prova de trabalho POW para o mecanismo de prova de participação POS. O EIP-3074 envolve mudanças na camada de consenso. Uma vez que um problema ocorre, um hard fork é necessário para resolvê-lo. Em segundo lugar, como o EIP-3074 permite que contas fora do EOA possuam contas de contrato inteligente, o mecanismo de assinatura ainda usa uma assinatura ECDSA fixa e não pode usar nenhum método de assinatura como o EIP-4337. Portanto, comparado ao EIP-3074, o EIP-4337 parece ter mais vantagens em reduzir o limite da carteira.

(Fonte da imagem: tradução do ethereum.cn)

5. Como funciona a carteira de abstração de conta EIP-4337? Em que ela é diferente de outros tipos de contas de carteira?

A abstração de contas introduz algumas novas funções e mecanismos em comparação aos tipos de contas anteriores:

Contrato de carteira: um contrato inteligente de carteira após abstração de conta, que pode implementar lógica de carteira personalizada.

Contrato de ponto de entrada: um contrato que se comunica e coordena com o contrato da carteira e é responsável por lidar com a verificação e executar as operações do usuário.

Operações do usuário (uo): Uma nova forma de transação off-chain iniciada por usuários, diferente da anterior [Transação, tx]

Bundler: Um nó de computação off-chain responsável por empacotar as operações do usuário e passá-las para o contrato do ponto de entrada.

Mempool de operações do usuário: um pool de memória dedicado a acumular operações de usuário pendentes, independente do pool de memória de transações.

Paymaster: Uma conta contratual opcional de paymaster de terceiros para pagamento de gás.

Se você não entende o que são esses novos termos, usarei um fluxograma simplificado para mostrar a você. Primeiro, vamos entender o mecanismo de transação da carteira do tipo conta externa EOA. A carteira externa EOA precisa assinar uma assinatura ECDSA antes de poder iniciar uma transação.

Fonte da imagem: https://medium.com/nethermind-eth/ethereum-wallets-today-and-tomorrow-eip-3074-vs-erc-4337-a7732b81efc8

Na figura, podemos ver que os passos para uma carteira com conta do tipo EOA iniciar uma transação são:

  1. O usuário usa a chave privada para executar a assinatura ECDSA nas informações da transação para gerar uma transação com uma assinatura (Transação, tx)

  2. A transação assinada será enviada ao pool de memória para transações pendentes.

  3. Os mineradores processam transações no pool de memória de transações e verificam a validade

  4. Se a verificação for bem-sucedida, a transação será incluída no bloco, caso contrário, a transação será descartada.

Como não há um padrão de processo de transação unificado para tipos de conta de contrato CA, a figura abaixo mostra o processo de transação de uma carteira de contrato inteligente que depende do Relayer. Podemos ver que as contas do tipo de contrato CA precisam depender de uma carteira externa EOA com um tipo de conta para assinar uma assinatura ECDSA para executar transações, e a função do Relayer pode ser acompanhada por riscos de centralização.

Fonte da imagem: https://medium.com/nethermind-eth/ethereum-wallets-today-and-tomorrow-eip-3074-vs-erc-4337-a7732b81efc8

Na figura, podemos ver que as etapas para uma carteira de um determinado tipo de conta de contrato CA iniciar uma transação são:

  1. O usuário usa a chave privada para assinar as informações da transação em qualquer formato para gerar uma mensagem de transação assinada (mensagem assinada)

  2. As informações da transação assinada serão enviadas ao nó Relayer responsável por transmitir a mensagem

  3. O Relayer usa a chave privada para executar a assinatura ECDSA nas informações da transação com a assinatura do usuário para formar uma transação

  4. O Relayer envia a transação contendo as informações de transação do usuário para o contrato inteligente da carteira do usuário por meio da carteira de conta externa EOA do Relayer para execução

  5. A carteira de contrato inteligente do usuário executa a operação e é verificada pelos mineradores antes de ser incluída no bloco.

A seguir, vamos dar uma olhada no mecanismo de transação da carteira após a abstração da conta EIP-4337

Fonte da imagem: https://medium.com/nethermind-eth/ethereum-wallets-today-and-tomorrow-eip-3074-vs-erc-4337-a7732b81efc8

Na figura, podemos ver que os passos para iniciar uma transação após a abstração da conta são:

  1. O usuário inicia uma operação de usuário de carteira e usa qualquer forma de chave privada para assinar a operação do usuário para gerar uma operação de usuário assinada (UserOperations, uo)

  2. As operações do usuário com assinaturas serão enviadas ao pool de memória de operações do usuário pendentes para processamento

  3. O Bundler empacota as operações do usuário no pool de memória de operações do usuário em uma transação e as envia ao contrato do ponto de entrada

  4. O contrato de ponto de entrada lida com todas as ações do usuário: verifica a existência da carteira - exige que a carteira verifique a ação do usuário - envia a ação do usuário para a carteira do contrato inteligente para execução

  5. A carteira de contrato inteligente executa operações do usuário e as incorpora em blocos

Em comparação, podemos descobrir que transações iniciadas por contas fora da EOA precisam depender do algoritmo de assinatura ECDSA fixo do Ethereum para assinatura, e contas de contrato CA precisam, em última análise, depender do algoritmo de assinatura ECDSA de contas fora da EOA para assinar transações. No EIP-4337, a carteira de abstração de conta entrega o [mecanismo de verificação de assinatura] ao contrato de ponto de entrada, o que permite que a carteira de abstração de conta use um mecanismo de assinatura de qualquer forma de assinatura. Os desenvolvedores de carteira podem escolher a forma de assinatura do cenário correspondente para desenvolver produtos de carteira. Os usuários podem controlar diretamente a carteira de abstração de conta por meio do método de assinatura específico do aplicativo de carteira, e esse método de assinatura pode ser facilmente usado por usuários do Web2 ou um método personalizado para cenários especiais.

E como qualquer minerador pode atuar como um Bundler, isso evita o risco de centralização da função Bundler. Ao mesmo tempo, o Bundler pode impedir que o Flashbot monitore o pool de memória para arbitragem MEV ao agrupar transações. O surgimento desses novos mecanismos também traz mais espaço para imaginação de cenários de aplicação, como o Paymaster, um terceiro que paga taxas de Gas em nome de outros.

Como pode ser visto na figura, transações (tx) e operações do usuário (uo) são dois pools de memória independentes. Devido à existência do contrato de ponto de entrada de abstração de conta, o contrato do paymaster pode ser combinado com o contrato de ponto de entrada como blocos de Lego. Antes que o contrato de ponto de entrada verifique a operação do usuário (uo), ele primeiro verifica e confirma o paymaster: Você concorda em pagar? Você tem ETH suficiente para apostar e pagar as taxas de gás?

Além dos subsídios integrais do beneficiário, se o contrato da conta do usuário tiver apenas tokens sem taxa de gás, como USDT, USDC, etc., o usuário também pode transferir outros tokens de valor igual para o contrato do beneficiário para obter o efeito de pagar taxas de gás sem ETH.

Além de pagar pelo gás, o contrato de ponto de entrada também pode ser combinado com o contrato de verificação de assinatura agregada para implementar a função de assinatura agregada e controlar a carteira por meio de assinaturas de várias pessoas.

A partir dos casos acima, podemos ver que a componibilidade modular do contrato de ponto de entrada na solução EIP-4337 traz mais espaço de imaginação para cenários de aplicação. Parece que a carteira de abstração de conta pode trazer muitos benefícios para todo o mundo cripto, mas a realidade é realmente tão bonita?

6. Quais são as deficiências e os riscos da abstração de contas EIP-4337?

Embora a visão da abstração de conta seja muito bonita, a realidade é frequentemente muito sombria. A carteira de abstração de conta atual é mais como um novo padrão para carteiras de contrato inteligente, e não consegue se livrar da dependência da EOA como proprietária da carteira. **E todos nós entendemos que quanto mais complexas as coisas são, mais provável é que elas dêem errado. A proposta de abstração de conta corrente ainda tem algumas deficiências e riscos:

Problemas de segurança de contratos inteligentes

Problemas de segurança de contratos inteligentes sempre foram um problema difícil que tem atormentado o mundo cripto. Podemos até ver que muitos contratos que passaram pela "auditoria de contratos inteligentes" geralmente têm vulnerabilidades de segurança, e toda vez que um problema de segurança de contrato ocorre, ele geralmente é acompanhado por enormes perdas de propriedade. Para a solução de abstração de conta EIP-4337, o acúmulo modular de funções de carteira de abstração de conta e a adição de novos mecanismos tornarão sua lógica de execução de código mais complicada, e muitas vezes uma lógica de execução de código mais complexa pode ser acompanhada por potenciais riscos de segurança. Como a carteira de abstração de conta e o contrato de ponto de entrada são contratos inteligentes, uma vez que haja um problema com o contrato de ponto de entrada ou o contrato de carteira, isso pode levar a um incidente de hacking desastroso, e a confiança das pessoas no uso de carteiras de abstração de conta será bastante reduzida.

Taxas de gás mais altas

Além dos riscos potenciais de segurança do contrato, as carteiras de abstração de conta exigem que os usuários paguem taxas de gás mais altas, porque, em comparação com contas externas EOA e contas de contrato CA, as carteiras de abstração de conta têm mais etapas para processar transações e lógica de processamento mais complexa. Mais operações precisam ser processadas, o que significa que mais taxas de gás são necessárias. Embora Vitalik também tenha proposto uma solução para reduzir o consumo de gás processando dados de abstração de conta por meio da Camada 2, isso também leva muito tempo.

Problemas de implementação técnica

Ainda há um longo caminho a percorrer antes que o EIP-4337 seja implementado. Muitas tecnologias que podem ser realizadas em teoria frequentemente encontram muitas dificuldades na prática, como problemas de compatibilidade, processos complexos de verificação de nós, como evitar que o Bundler faça o mal, lógica técnica que não pode ser implementada, etc. Resolver esses problemas técnicos requer um longo período de teste e discussão, e é por isso que o EIP-4337 foi colocado no sexto estágio da atualização do Ethereum, Splurge.

O caminho à frente é longo e árduo. O mundo cripto precisa de carteiras com limites mais baixos e maior segurança para atrair mais novos usuários e romper o gargalo do volume de usuários. Acredito que com a realização da abstração de conta, isso trará um espaço de imaginação totalmente novo para o mundo cripto. Pode até haver uma alternativa inesperadamente melhor para substituir a abstração de conta em um futuro próximo. A velocidade de iteração e atualização na indústria cripto está muito além da nossa imaginação, o que também é o charme desta indústria.