---
title: "O que é RIP-7212? Precompile para suporte à curva secp256r1"
description: "RIP-7212 é uma mudança核心 no protocolo Ethereum que abre caminho para verificação de curva P256 barata, segura e rápida com um contrato precompilado."
---

# O que é RIP-7212? Precompile para suporte à curva secp256r1

<ImageBlock
  src="https://media.alchemy.com/1709769768-what-is-rip-7212.jpg"
  alt="banner explicativo do precompile RIP-7212 secp256r1"
  width={3200}
  height={1800}
  priority
/>

[Account Abstraction](https://www.alchemy.com/overviews/what-is-account-abstraction) introduziu um recurso significativo para contas Ethereum: a programabilidade de contas. Isso permite que desenvolvedores criem milhares de novos recursos, como limites de gastos diários, uso de diferentes signers e pagamento de taxas com qualquer token. Neste texto, vamos focar em como desenvolvedores podem melhorar a experiência do usuário com a próxima integração do [RIP-7212](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md) \(anteriormente conhecido como EIP-7212\) em rollups, permitindo o uso de signers biométricos.

## Assinaturas Ethereum hoje
**Em redes EVM, onde a maioria das contas padrão são externally owned accounts \(EOA\),** a propriedade é comprovada via criptografia de curva elíptica \(ECC\), que é a forma trustless de provar que você possui uma chave e que a mensagem foi assinada com essa chave sem revelá-la.

A forma atual como usuários gerenciam seus fundos é através de wallets self-custodial \(ou seja, armazenando suas chaves como seed phrases\) ou soluções custodial \(ou seja, confiando em terceiros para o gerenciamento de chaves\).

Paralelamente, décadas de pesquisa em segurança na web2 culminaram em uma stack de hardware-software-social testada em batalha para gerenciamento de chaves privadas. Como resultado, dispositivos modernos possuem elementos de hardware seguros projetados para proteger as chaves dos usuários. No entanto, eles não suportam a curva elíptica secp256k1 que o Ethereum atualmente suporta. Assim, não há como incorporar essas melhores práticas de segurança com EOAs.

Contas de contrato inteligente permitem diferentes mecanismos de autenticação, incluindo o uso de curvas elípticas além da secp256k1 \(a única curva nativa do Ethereum\). O uso de diferentes mecanismos de autenticação, como signers biométricos, melhora a experiência do usuário e aumenta a segurança. Nesta seção, explicaremos como esses enclaves seguros funcionam e como fica quando são combinados com smart accounts.

## Enclaves seguros em dispositivos do dia a dia: uma hardware wallet no seu celular
Quase todos os dispositivos modernos incorporam ao design de seus chips o que se chama de [Trusted Execution Environment](https://en.wikipedia.org/wiki/Trusted_execution_environment) \(TEE\), que é um elemento de hardware avançado projetado especificamente para atuar como uma proteção em torno dos dados mais sensíveis dos usuários.

Por exemplo, todos os produtos Apple incluem, desde 2013, um TEE chamado Secure Enclave. Diferente de outras partes do dispositivo, que podem lidar com tudo, desde processos de aplicativos até notificações, o TEE é um microchip separado, isolado de todos os outros componentes do dispositivo. Essa separação garante que dados sensíveis, como informações biométricas e chaves criptográficas, fiquem isolados de possíveis ameaças que possam comprometer outras partes do dispositivo. Utilizar TEEs é a forma mais segura de armazenar chaves em dispositivos modernos, convertendo efetivamente dispositivos do dia a dia em hardware wallets que só podem ser acessadas por meio de autenticação biométrica.

### Como podemos usar TEEs com smart accounts?

Enclaves seguros permitem que usuários criem uma chave dentro do TEE e assinem mensagens arbitrárias com essas chaves. Isso é exatamente o que precisamos para verificá-las onchain. Podemos criar uma smart account com um proprietário derivado de uma chave privada que reside dentro do TEE. Essas chaves nunca saem do dispositivo e só podem ser acessadas pelo proprietário do dispositivo \(graças à autenticação biométrica\).

<ImageBlock
  src="https://media.alchemy.com/1709767953-2.jpg"
  alt="diagrama de como funcionam trusted execution environments"
  width={3200}
  height={1800}
/>

### Passkeys: um caminho para a web sem senhas
Aproximadamente 81% das violações relacionadas a hacking envolvem o uso de senhas roubadas ou fracas. Como resultado, pesquisadores têm focado no protocolo WebAuthn, desenvolvido pela FIDO Alliance e pelo W3C, para resolver esse problema oferecendo um sistema de gerenciamento de chaves mais seguro usando criptografia de chave pública, melhorando tanto a segurança quanto a experiência do usuário. O WebAuthn, até hoje, foi adotado para autenticação por grandes empresas como Google, Amazon, Microsoft e [Coinbase](https://www.alchemy.com/dapps/coinbase), com uma adoção mais ampla ganhando tração rapidamente.

O WebAuthn busca superar as fraquezas e inconveniências dos sistemas tradicionais de senha usando criptografia de chave pública específica de domínio para autenticação de usuários. Essa abordagem elimina senhas, senhas esquecidas, bloqueios de conta, e reduz riscos de segurança comuns.

### Como funcionam as passkeys?
Passkey é uma implementação do padrão WebAuthn e funciona em quase todos os dispositivos modernos. Quando um usuário cria uma conta, o sistema operacional gera um par de chaves único vinculado à sua conta, exclusivo para o aplicativo ou site. Essas chaves são criptografadas usando Secure Enclaves, geralmente com autenticação biométrica, e sincronizadas entre dispositivos via iCloud Keychain ou outros gerenciadores de senhas.

Passkeys têm muitos casos de uso em blockchains para gerenciamento de contas. Para usá-las na blockchain, desenvolvedores podem colocar a chave pública da passkey em um contrato inteligente e usá-la como método de autenticação.

<ImageBlock
  src="https://media.alchemy.com/1709767898-1.jpg"
  alt="diagrama de como funcionam passkeys"
  width={3200}
  height={1800}
/>

Infelizmente, quase todos os enclaves seguros e passkeys suportam a curva secp256r1 \([P256](https://neuromancer.sk/std/nist/P-256)\), desenvolvida pelo NIST, enquanto o Ethereum suporta nativamente apenas a curva secp256k1. Então, precisamos verificá-las onchain para provar a propriedade aos nossos peers, mas como fazer isso?

A resposta é RIP-7212.

## O que é RIP-7212? Um contrato precompilado para suporte à curva secp256r1
RIP-7212 é uma mudança central no protocolo Ethereum que abre caminho para uma verificação da curva P256 barata, segura e rápida, por meio de um contrato precompilado. É a primeira Rollup Improvement Proposal proposta e aceita com sucesso por blockchains de Layer 2.

### O que são contratos precompilados?
Contratos precompilados não são "contratos" no sentido tradicional, mas sim funções nativas predefinidas, que são "precompiladas" por estarem disponíveis nativamente no protocolo Ethereum.

Contratos precompilados são otimizados para desempenho e baixo custo de gas em certas operações, como cálculos criptográficos \(por exemplo, verificação de assinatura para secp256k1 e secp256r1\) ou funções de hashing. Sem contratos precompilados, realizar essas operações na [Ethereum Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) exigiria mais código e significativamente mais poder computacional, levando a taxas de gas mais altas. Você pode ver uma [lista de precompiles no Ethereum](https://www.evm.codes/precompiled?fork=shanghai) no site evm.codes.

### Como o RIP-7212 se compara a outras soluções?
Com o RIP-7212, verificar P256 custa apenas 3450 de gas, uma redução de 100x em relação à melhor opção sem mudança de protocolo. O RIP-7212 é a forma mais eficiente em gas, segura e rápida de verificar P256 em cadeias EVM.

Como explicamos anteriormente, o uso de signers biométricos \(por exemplo, baseados em Passkeys e Secure Enclave\) só é possível se tivermos uma forma de verificar a curva P256 onchain. Existem várias opções disponíveis para verificar a curva P256 onchain, mas nenhuma delas é barata.

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Verifier", dataType: "object" },
      {
        key: "2",
        width: 200,
        title: "Gas Consumption (Account Creation)",
        dataType: "object",
      },
      {
        key: "3",
        width: 200,
        title: "Gas Consumption (Single Transaction)",
        dataType: "object",
      },
      {
        key: "1709671329969",
        width: 180,
        title: "Proving Time",
        dataType: "object",
      },
      { key: "1709671346011", width: 180, title: "Type", dataType: "object" },
    ],
    data: [
      {
        "1": {
          title: "<p>Obvious' Solidity Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>330k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>330k</p>", tooltip: "", icon: "" },
        id: 0,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>Alembic's Solidity Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>2M</p>", tooltip: "", icon: "" },
        "3": { title: "<p>375k</p>", tooltip: "", icon: "" },
        id: 1,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>FCL's Solidity Verifier w/o precomputation</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>205k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>205k</p>", tooltip: "", icon: "" },
        id: 2,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>FCL's Solidity Verifier with precomputation</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>3.2M</p>", tooltip: "", icon: "" },
        "3": { title: "<p>69k</p>", tooltip: "", icon: "" },
        id: 3,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Smart Contract Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>Risc0 Verifier</p>", tooltip: "", icon: "" },
        "2": { title: "<p>250k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>250k</p>", tooltip: "", icon: "" },
        id: 4,
        "1709671329969": {
          title: "<p>Nearly instant</p>",
          tooltip: "",
          icon: "",
        },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>KnowNothingLab's Verifier</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>520k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>520k</p>", tooltip: "", icon: "" },
        id: 5,
        "1709671329969": { title: "<p>~4 seconds</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>Circom</p>", tooltip: "", icon: "" },
        "2": { title: "<p>230k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>300k</p>", tooltip: "", icon: "" },
        id: 6,
        "1709671329969": {
          title: "<p>Nearly instant</p>",
          tooltip: "",
          icon: "",
        },
        "1709671346011": {
          title: "<p>Zero Knowledge Verifier</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": { title: "<p>A Verifier with EVMMAX</p>", tooltip: "", icon: "" },
        "2": { title: "<p>73k</p>", tooltip: "", icon: "" },
        "3": { title: "<p>73k</p>", tooltip: "", icon: "" },
        id: 7,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Core Protocol Change</p>",
          tooltip: "",
          icon: "",
        },
      },
      {
        "1": {
          title: "<p>EIP-7212 Precomiler Contract for P256</p>",
          tooltip: "",
          icon: "",
        },
        "2": { title: "<p>3450</p>", tooltip: "", icon: "" },
        "3": { title: "<p>3450</p>", tooltip: "", icon: "" },
        id: 8,
        "1709671329969": { title: "<p>Instant</p>", tooltip: "", icon: "" },
        "1709671346011": {
          title: "<p>Core Protocol Change</p>",
          tooltip: "",
          icon: "",
        },
      },
    ],
  }}
/>

<CalloutBlock>

Fonte: [Current State of Verifying P256 Curve](https://hackmd.io/@1ofB8klpQky-YoR5pmPXFQ/SJ0nuzD1T)

</CalloutBlock>

## O estado do RIP-7212 e casos de uso
As especificações do RIP-7212 estão finalizadas, e algumas equipes \(Kakarot, Polygon, Optimism, [zkSync](https://www.alchemy.com/overviews/what-is-zksync-era) e Arbitrum\) já se comprometeram a implementar esse precompile em seus ecossistemas de rollup. A Polygon [recentemente lançou o RIP-7212 em sua testnet](https://twitter.com/ulerdogan/status/1755358331420418134) e desenvolvedores já começaram a testá-lo.

Os casos de uso do RIP-7212 não se limitam a smart accounts. O RIP-7212 também pode ser usado para verificar remote attestations de Trusted Execution Environments, que têm sido usadas para construção de blocos descentralizada \(SUAVE\), 2FA para rollups \(Taiko e Scroll\), e muito mais!

## Construindo um contrato validador P256 compatível com ERC-6900 que usa RIP-7212
Uma vez que o RIP-7212 esteja ativo, o próximo passo é torná-lo o mais fácil possível para desenvolvedores usarem, a fim de melhorar a experiência de seus usuários finais. Integrar novo código em smart accounts é um empreendimento de alta fricção e alto risco, e mesmo fluxos altamente simplificados, como os oferecidos pelo RIP-7212, ainda precisam ser cuidadosamente arquitetados, testados e auditados.

É aqui que o ERC-6900 entra em cena.

[ERC-6900: Modular Smart Contract Accounts and Plugins](https://eips.ethereum.org/EIPS/eip-6900) é um padrão EVM projetado para permitir que desenvolvedores capturem peças lógicas como plugins, que qualquer outro desenvolvedor de contas pode usar. Desenvolvedores podem então contar com plugins testados em batalha para melhorar a experiência de seus usuários finais, em vez de precisar construir seus próprios plugins.

Combinar RIP-7212 e [ERC-6900](https://github.com/erc6900/resources) resulta em um plugin de conta simples para validação eficiente de P256, permitindo autenticação biométrica barata e segura para os usuários, com sobrecarga mínima para os desenvolvedores. Estamos animados para lançar esse plugin em rollups compatíveis à medida que a adoção do RIP-7212 na mainnet acelera.
