
Talvez você já tenha ouvido falar de um contrato proxy e talvez te disseram que esses contratos são perigosos ou que você “não pode confiar neles”. Quem ou por que alguém usaria um contrato proxy? Ele vai contra o ethos da web3? É realmente tão perigoso assim? Neste artigo nós buscamos responder essas questões e também compartilhar outras informações importantes sobre contratos proxy e endereços, como você deveria pensar e tratá-los, como um usuário web3 normal. Vamos nessa!
Mas primeiramente, o que diabos é um Contrato de Proxy?
Normalmente, contratos na Ethereum são imutáveis, ou seja, não podem ser melhorados / modificados depois que estão no ar. Afinal, blockchains são geralmente definidas como um “registro público imutável”, entretanto desenvolvedores podem contornar essas limitações usando o modelo de contrato proxy. Um contrato proxy envia (ou delega**) toda sua funcionalidade para outro contrato inteligente, chamado de contrato de implementação.**
O contrato de implementação (o contrato que contém todo o código que “realiza ações”) pode ser mudado ou “melhorado” caso necessário. Desenvolvedores podem simplesmente implementar outra versão do contrato de implementação na blockchain e atualizar o contrato proxy para mandar todas as requisições recebidas para o novo contrato de implementação (diagrama abaixo). Um exemplo de uma dessas requisições poderia ser de transferir um ativo como um token ou NFT.
Uma boa analogia para o contrato proxy seria como comprar um pedaço de terra. Este pedaço de terra age como um contrato proxy, delegando todas as funções importantes para a própria casa, onde os donos têm a liberdade de trocar o teto, remodelar a cozinha, etc. Entretanto, não importa quantas vezes você remodelar ou construir uma nova casa na propriedade, o endereço nunca vai mudar!

Projetos que usam Contratos de Proxy
Contratos de Proxy são perigosos? Deveríamos comprar NFTs de projetos que utilizam este tipo de contrato? E marketplaces, tokens ou até protocolos DeFi? Antes de respondermos essas questões, vamos dar uma olhada em alguns exemplos de contratos proxy existentes:
10KTF - Este contrato inteligente talvez seja um dos contratos inteligentes mais notáveis entre os NFTs que se utiliza do modelo de contratos proxy que permitem atualizações. Eles podem melhorar os contratos para integrar coisas como delegação de carteira, exigir royalties ou aplicar novos padrões.
USDC - Uma das maiores stablecoins, o USDC, também utiliza o modelo de contratos de proxy. Na verdade, eles explicam as razões e a implementação na sua publicação chamada de “Atualizando um token ERC-20 multibilionário”. Eles articularam de forma pungente suas preocupações nesta frase do post mencionado: “O valor de mercado do USDC havia crescido para $1.4 bilhões de dólares no momento da atualização e nossas carreiras estavam em risco - ninguém queria entrar para a história como o desenvolvedor que colocou fogo um bilhão de dólares.”.
Blur - A Blur é um marketplace de NFTs que utiliza contratos de proxy em praticamente todos os contratos inteligentes implementados, exceto o contrato do token $BLUR. Isso pode ser perigoso pois usuários já possuem seus ativos aprovados no endereço do proxy e uma nova implementação do contrato poderia ter a capacidade de retirar esses ativos das carteiras dos usuários. Se um novo contrato de implementação da Blur conter bugs, centenas de milhares de NFTs aprovados no contrato de proxy da Blur estariam em risco.
Golpistas poderiam drenar as carteiras dessas NFTs, acabando com o mercado de NFTs, este é um cenário catastrófico totalmente improvável, proteções como circuit breaker, auditorias de contrato e hackers white hat provavelmente parariam o ataque antes mesmo dele acontecer.
Compound Finance - Embora não esteja claro qual é a governança em torno da atualização do Blur e do 10KTF, já que são empresas privadas, é seguro dizer que talvez não seja tão rigoroso (e certamente não muito transparente) se comparado com DAOs maduras. Um exemplo notável é a Compound FInance, uma plataforma de empréstimos DeFi com mais de $1B em TVL (Valor Total Bloqueado); é também conhecida por ser incrivelmente preocupada com segurança. Seu processo de governança, por exemplo, não permite atualizações do protocolo, a menos que haja pelo menos 1 semana de lead time (tempo de espera), e isso é imposto por código.
Por que os Projetos os Usam?
Embora existam muitos motivos específicos para a utilização de contratos de proxy, as principais são:
- Capacidade de Atualização: Esta é a razão principal. O contrato de implementação pode ser atualizado sem afetar o contrato de proxy ou os usuários. Os projetos não querem perder usuários exigindo que eles reaprovem ativos já existentes, migrem fundos, etc.Usuários não são afetados por atualizações no contrato de implementação pois o contrato de proxy apenas armazena o endereço do mesmo, não seu código. Então usuários podem continuar a interagir com o contrato de proxy normalmente, mesmo se o contrato de implementação tenha sido modificado.
- Ocultação de Recursos Futuros: Talvez a equipe tenha planos de adicionar novas funcionalidades no contrato ao passar do tempo, mas que ainda não estão prontas para serem lançadas. Eles podem simplesmente lançar os recursos futuramente sem precisar criar métodos temporários que apontam para outros contratos. Contratos de Proxy são um jeito simples para lançar funções novas sorrateiramente em projetos de blockchain.
- Se preparar para o Futuro: Pode soar clichê, mas ninguém sabe qual o futuro do mundo cripto. Talvez um novo tipo de ativo ou NFT precise ser tratado de maneira especial no Blur. Talvez novas funcionalidades e funções primitivas serão desenvolvidas. Por exemplo, os Cryptopunks foram lançados antes da criação do padrão ERC-721 e dependem de um “contrato de envelopamento” de terceiros para que possam ser trocados em marketplaces como a Opensea. Isto acontece pois o padrão ERC-721 não existia quando os Cryptopunks foram criados. Projetos Cripto gostariam de evitar múltiplas versões de contratos pois eles dividem a liquidez no DeFi e complicam a linhagem para NFTs. Se eles tivessem utilizado um contrato de proxy, os Cryptopunks poderiam apenas ter atualizado para dar conta dessa mudança (em teoria)!

A maioria dessas razões parecem ser a mesma coisa dita de formas diferentes, porém as diferenças são sutis. Para alguns projetos, não é necessário ter exatamente o mesmo endereço de contrato para sua utilidade ou projeto; seus usuários podem interagir com o contrato apenas por meio de um site ou UI específica. A menos que seus usuários favoritem os contratos inteligentes (uma estratégia de segurança ensinada em nossa classe Segurança NFT 101), eles não saberão de nada! Mas outros projetos podem precisar da proveniência de sua coleção de tokens e uniformidade de seus tokens.!
Como Saber se um Contrato é Um Contrato de Proxy
Há duas formas principais para identificar um contrato de proxy. Claro que existem todos os tipos de ferramentas de análise de blockchain, mas recomendamos o Etherscan para a maioria das pessoas.
Método 1: Primeiro, vá até o contrato no Etherscan. Para este exemplo, nós utilizaremos um contrato de proxy que nós normalmente mencionamos como exemplo na nossa aula de Segurança NFT 102, Helix..
Vá para a aba do Contrato. Você verá dois botões que você não vê na maioria dos contratos, os botões “Escrever como Proxy” e “Ler como Proxy”.

Uma captura de tela de um contrato que foi identificado como Proxy Verificado pela Equipe Etherscan.
Utiliza o botão “Escrever como Proxy” para interagir com contratos de proxy caso necessário.
Método 2: Outra forma de identificar um contrato de proxy é quando o Etherscan afirma ser um proxy, porém o desenvolvedor não escolheu explicitamente disponibilizar os botões mencionados no Etherscan. Ao invés disso, haverá uma pequena mensagem na página do Contrato que se parece com isso, afirmando que “talvez” seja um contrato de proxy.

Um contrato que o Etherscan acredita que seja proxy, porém que o desenvolvedor não confirmou ou não submeteu ao Etherscan como um.
Riscos ao Utilizar Contratos de Proxy
Então agora que sabemos que algo é um contrato de proxy, quais são seus riscos aos usuários? Nós mencionamos alguns deles na seção Projetos que Usam Contratos de Proxy, porém agora vamos explicá-los abaixo.
-
A carteira do desenvolvedor de implementação / admin pode ser comprometida permitindo assim que um contrato malicioso seja implementado: Há inúmeros exemplos dos desenvolvedores mais competentes, incluindo o infame LukeDashJr, um dos desenvolvedores principais do protocolo do Bitcoin, tendo sua carteira comprometida. Usuários mal intencionados podem utilizar a carteira de um implantador de contratos de proxy para destruir a coleção inteira, ou pior.
-
O desenvolvedor pode ser desonesto e implementar uma atualização maliciosa: Embora que a maioria dos desenvolvedores desonestos tendem a apenas roubar a tesouraria do projeto e fugir (isso é o que chamamos de rugpull), eles também poderiam fazer ainda mais danos ao atualizar um contrato de proxy de maneira maliciosa. Eles poderiam roubar todos os ativos aprovados usando uma implementação de contrato drainer ou adicionar funções de queima que poderiam roubar tokens que já foram “mandados” para a carteira dos usuários.
-
Os desenvolvedores poderiam atualizar o contrato e introduzir um bug: Recentemente a Sushiswap implementou uma versão com bugs do seu contrato. Agressores utilizaram o bug para roubar $3.3 Milhões de dólares das carteiras de pessoas famosas do mundo cripto e usuários regulares que utilizavam a plataforma naquele momento. Entretanto a Suiswap NÃO estava utilizando um contrato de proxy, seria muito pior caso fosse um contrato de proxy. Uma atualização de contrato de proxy bugada faria com que qualquer usuário que já tenha aprovado algo na Suiswap estaria vulnerável a este mesmo bug! Hackers seriam capazes de roubar fundos de qualquer usuário que tivesse aprovações de tokens na Suiswap. provavelmente teria sido o maior exploit de DeFi em 2023, se fosse esse o caso!

Para uma corretora, não utilizar o modelo de contrato de proxy faz sentido; ele permite com que usuários e instituições que são mais cautelosos aguardem quaisquer problemas que novos usuários possam enfrentar após uma atualização. Utilizar um contrato de proxy para atualizar o contrato de implementação significa que todos os usuários estão sujeitos a novos riscos em cada token previamente aprovado a menos que aquela aprovação seja revogada.
Recomendações
Além de ser importante entender os riscos associados aos contratos de proxy, há algumas regras gerais a seguir ao se deparar com um desses por aí:
- Seja extremamente cauteloso com contratos de NFT que requisitam aprovações de ativos que estão fora do ecossistema deles. (Mas fique mais tranquilo caso não peçam).
Por exemplo, você faz parte de um projeto NFT que tem um contrato de proxy implementado para a coleção. Caso essa mesma coleção peça uma aprovação do seu ApeCoin ou Ethereum Wrapped, ela deve ser tratada como um alto risco. A Blur é normalmente citada como um exemplo “inevitável” disso, como afirmamos anteriormente, já que a Blur apenas usa contratos de proxy.
- Quando estiver aprovando NFTs ou Tokens ERC-20, especialmente em marketplaces ou corretoras, cheque se é um contrato de proxy antes de aprovar.
Sempre que eu utilizo um novo marketplace ou DEX, gosto de checar isso e tentar entender se eles explicam o porquê de utilizar um contrato de proxy ou como eles protegem e auditam novas implantações antes de atualizar novas implementações.
- Revogue aprovações de proxies inativos ou não utilizados (ou de todos os contratos neste sentido) usando serviços como Revoke.cash ou Approvals.xyz.
Projetos inativos, especialmente de fundadores anônimos, podem tentar utilizar suas aprovações contra você ao implementar um código em um novo contrato de implementação que permita que eles tomem controle de tokens aprovados. Para evitar essa possibilidade, sempre mantenha suas aprovações limpas, lembre-se de colocar limite de gasto em aprovações e faça auditorias rotineiras para manter aprovações desnecessárias fora da sua carteira!
Conclusão
Nem todos os contratos de proxy são ruins e honestamente em muitos projetos, particularmente aqueles que o utilizam para seus próprios fins, dentro de seu ecossistema ou de seus tokens, é um jeito perfeitamente viável para garantir que o projeto seja viável a longo prazo! Ele ajudará na manutenção de padrões ERC, tendências e permite uma integração suave com novas primitivas como a Delegação de Carteiras. Entretanto, utilizá-lo reduz a previsibilidade e a sempre importante imutabilidade que usuários da blockchain se acostumaram há anos.
Finalmente, a decisão de utilizar ou não contratos de proxy depende totalmente do usuário e o quão confortáveis estão com isso. Na maioria dos casos, contratos de proxy são sensatos quando se trata da viabilidade a longo prazo do projeto. Entretanto, em casos envolvendo marketplaces e corretoras (Blur, Opensea, etc), onde atualizações devem ser raras, a utilização de contratos de proxy pode não ser muito apropriado.
Possui alguma questão ou gostaria de aprender mais sobre segurança na web3 e estar a par das informações de segurança, golpes e táticas? Junte-se a nós no discord em https://discord.gg/boringsecurity .


