Em 2 de fevereiro, Pandora, um projeto com foco na fragmentação de NFT, foi lançado. Seu principal recurso é o ERC404, um padrão de token que combina ERC20 e ERC721 e possui as características de liquidez nativa e fragmentação NFT. Como um protocolo recém-lançado, ERC404 desencadeou extensas discussões na comunidade. O volume diário de negociação de seu primeiro projeto, Pandora, também excedeu US$ 50 milhões. Mais projetos baseados no ERC404 ou padrões de token semelhantes estão prontos para ser lançados.

Como ERC404 foi diretamente de código aberto para a comunidade para experimentos sem a discussão e revisão de uma Proposta de Melhoria de Ethereum (EIP) e uma Solicitação de Comentários (ERC) de Ethereum, o próprio protocolo tem muitas áreas que precisam de melhorias. A equipe de segurança da Beosin conduzirá uma análise detalhada do mecanismo de design e do código de contrato do ERC404 para ajudar os usuários de criptografia a entender o ERC404.

O que é ERC404?

ERC404 é um novo protocolo experimental que "funde" dois padrões de token, ERC20 e ERC721. Simplificando, o ERC404 permite que NFTs sejam divididos e negociados como tokens ERC20. Os tokens ERC404 são tokens ERC20 e NFTs, ou seja, um token ERC404 pode ser considerado como um token ERC20 ou um NFT.

Quando um usuário compra um token ERC404, a carteira do usuário receberá automaticamente um NFT replicante. Quando o usuário vende o token, o NFT correspondente será destruído automaticamente.

Veja Pandora, o primeiro projeto do ERC404, como exemplo. O token ERC404 deste projeto é PANDORA, e seu replicante NFT correspondente é Pandora Replicantes. O fornecimento total de tokens PANDORA é de 10.000, portanto, o fornecimento total correspondente de NFTs Pandora também é de 10.000.

Quando um usuário compra tokens PANDORA no Uniswap, possuir 1 token PANDORA é equivalente a possuir 1 NFT Pandora ao mesmo tempo. Você pode então optar por vender tokens PANDORA ou ir a mercados de negociação NFT, como OpenSea, para vender NFT Pandora. Também é possível que os usuários comprem NFTs Pandora primeiro e depois escolham vender tokens PANDORA no DEX.

Os usuários podem negociar tokens ERC404 como tokens ERC20 ou ERC721

Como ERC404 envolve duas características de tokens ERC20 e NFTs, a seguir são os recursos de design do ERC404, que também são coisas que os usuários precisam prestar atenção :


1.
Se tokens ERC404 forem negociados como tokens ERC20, decimais serão envolvidos e considerados. ERC404 estipula que o número de tokens seja arredondado para baixo para o número NFT correspondente. Por exemplo, se um usuário detenha 2,9 tokens PANDORA, ele/ela só detém 2 Pandora NFT de uma perspectiva NFT.


2.
No ERC404 v1, se os tokens ERC404 forem negociados como tokens ERC20, o NFT correspondente será destruído e um novo NFT será gerado durante a negociação. Dessa forma, cada vez que um novo NFT for gerado, seu número de ID será adicionado ao número de ID mais alto do NFT original. ERC404 v2 altera esse mecanismo de queima, que será explicado mais tarde. Como o Pandora NFT está configurado para ter uma raridade, os usuários negociarão tokens Pandora para aumentar a raridade de Pandora NFT para arbitragem e substituirão o NFT original por um NFT Pandora mais raro.


3.
No caso do ERC404 v1, se um usuário possui 2.9 tokens PANDORA e vende 1 token PANDORA , o token não tem raridade, mas o NFT correspondente tem raridade diferente. Ao vender 1 token, o último Pandora NFT recebido pelo usuário será destruído primeiro para que os usuários precisem prestar atenção à raridade do NFT correspondente ao token PANDORA. É recomendado que um endereço armazene apenas um token PANDORA, correspondente a um NFT Pandora, ou os usuários possam negociar diretamente seus NFTs Pandora.

Análise de código ERC404

ERC404 v1 foi lançado no Github por Acme, um ex-engenheiro de software da Coinbase, e tem muitos espaços para melhorias. Com a ajuda da comunidade, a equipe do ERC404 está atualmente construindo e melhorando o ERC404 e lançou o ERC404 v2 em 15 de fevereiro. O ERC404 v2 reduz bastante o consumo de gás e otimiza o mecanismo de compra e venda do ERC404. fichas. Seu repositório de código mais recente é https://github.com/Pandora-Labs-Org/erc404.

Desta vez, usaremos a ferramenta Beosin VaaS para digitalizar o contrato inteligente ERC404 v2, analisar os códigos ERC404 v2 e fornecer sugestões de segurança para projetos ERC404 com especialistas em segurança da Beosin:

Beosin VaaS

Os contratos de ERC404 v2 incluem principalmente ERC404.sol, ERC721Receiver.sol e DoubleEndedQueue.sol. DoubleEndedQueue é uma nova estrutura de dados introduzida pela equipe ERC404 para mudar a lógica de negociar token e queimar NFT.

ERC404 v2, semelhante ao v1, é uma implementação híbrida de ERC721 e ERC20, permitindo que tokens ERC721 sejam representados como tokens ERC20. Entre eles, cada token ERC721 corresponde a um número fixo de tokens ERC20 (determinado pelo parâmetro de unidades). Ao transferir tokens ERC721, os tokens ERC20 correspondentes são transferidos em unidades.

Comparado à v1, ERC404 v2 tem as seguintes melhorias:


1.
Suporte EIP-2612

O ERC404 v2 é compatível com EIP-2612, permitindo transações sem gás por meio de mensagens assinadas (permissões). "DOMAIN_SEPARATOR" é calculado no construtor e pode ser recalculado se o ID da cadeia mudar, o que melhora a compatibilidade de seu contrato.

construtor(string nome da memória_, string símbolo da memória_, uint8 decimais_) {

nome = nome_;

símbolo = símbolo_;

if (decimais_ < 18) {

reverter DecimaisTooLow();

}

decimais = decimais_;

unidades = 10 ** decimais;

// inicialização EIP-2612

INITIAL_CHAIN_ID = block.chainid;

INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();

}


2.
Verificação de transferência segura

A função safeTransferFrom em seu contrato segue onERC721Received() no padrão ERC721 e verificará o destinatário para garantir que o destinatário pode manusear tokens ERC721 (por exemplo, o destinatário é um contrato).

função safeTransferFrom(

endereço de_,

endereço para_,

uint256 id_,

bytes de dados de memória_

) público virtual {

if (id_ > cunhado || id == 0) {

reverter InvalidId();

}

transferirDe(de_, para_, id_);

se (

to_.code.length != 0 &&

ERC721Receiver(to_).onERC721Received(msg.sender, from_, id_, data_) !=

ERC721Receiver.onERC721Received.selector

) {

reverter UnsafeRecipient();

}

}

3. Lógica de cunhagem e queima melhorada

Diferente de v1, ao negociar tokens ERC404 v2 , o NFT correspondente não será destruído. Em vez disso, todos IDs NFT são armazenados em uma fila dupla para reutilização. Desta forma, o NFT correspondente ao ERC404 é igual ao token ERC721 típico. O mesmo que moedas. Essa abordagem não apenas reduz o consumo de gás, mas também simplifica a lógica de transferência do ERC404.

De acordo com a equipe ERC404, o gás das operações de queima relacionadas pode ser economizado em 80%

As melhorias do ERC404 v2 tornam o ERC404 mais escalonável e sustentável, mas ainda existem alguns riscos de segurança que merecem atenção:


1.
Função de lista de permissões

O ERC404 permite que determinados endereços da lista de permissões transfiram tokens ERC721 internamente, que podem ser usados ​​para otimizar o uso de gás de contratos ou endereços específicos. No entanto, isso também pode causar problemas de centralização ou o potencial de abuso.

o contrato abstrato ERC404 é IERC404 {

.......

mapeamento(endereço => bool) public erc721TransferExempt;

......

// Lida com isenções do ERC-721.

função _transferERC20WithERC721(

//economize gás negociando internamente

}

}


2.
Problema na função de transferência

A função transferFrom lida com transferências ERC20 e ERC721 e distingue a lógica dos dois padrões de token com base no parâmetro valueOrId_. Os desenvolvedores ou usuários podem cometer erros ao chamar esta função, porque essa função tem uma presunção de que se o valor da transferência for maior do valor da contagem de cunhagem, a transferência é sobre uma transferência de tokens ERC20.

função transferênciaFrom(

endereço de_,

endereço para_,

valor uint256OrId_

) retornos virtuais públicos (bool) {

......

if (valueOrId_ <= _minted) {

// A intenção é transferir como token ERC-721 (id).

uint256 id = valorOrId_;

......

}


3.
Otimização de gás

Embora o ERC404 v2 tenha reduzido significativamente a taxa de gás necessária para a interação do usuário em comparação com a v1, ainda há muito espaço para melhorias. Por exemplo, o contrato ERC404 v2 usa uma reversão de erro personalizada NotFound() em vez da declaração de exigência com uma mensagem de erro, o que aumenta seu consumo de gás.


4.
Falta de função de pausa de emergência

Como um protocolo recém-nascido, ERC404 pode ter possíveis vulnerabilidades contratuais que não podem ser ignoradas. Portanto, quando a equipe desenvolve o contrato, uma função de pausa de emergência deve ser considerada para configurar no contrato e um plano de resposta a riscos deve ser formulado para responder rapidamente e corrigir vulnerabilidades quando surgirem riscos.

Anteriormente, Beosin mencionou as sugestões de segurança acima para a equipe do projeto ao concluir a auditoria do Avatar, um projeto inovador baseado no ERC404, que ajudou a equipe do Avatar a melhorar a segurança de seus contratos inteligentes e garantir a operação segura do Ava. projeto tar. Esta auditoria inclui verificação formal e auditoria manual por especialistas em segurança para garantir que o código não tenha vulnerabilidades lógicas:

No geral, ERC404 tenta resolver os problemas de indivisibilidade de NFT e liquidez insuficiente de uma nova perspectiva. Em comparação com os projetos anteriores de fragmentação NFT , ele começa com padrões de token nativos, que são mais simples e mais eficazes de implementar e fornecem novos métodos para negociar NFT. No entanto, ERC404 é um contrato relativamente complexo entre os contratos de token. Os desenvolvedores precisam prestar atenção às características do ERC20 e ERC721 e aos riscos que podem ser introduzidos pela adição de novas funções. As equipes de segurança precisam examinar cuidadosamente a interação entre as funções ERC20 e ERC721 durante as auditorias, bem como o impacto de vários riscos de otimização e centralização de gás nos contratos ERC404.

A Beosin é uma empresa líder global em segurança de blockchain. Ela tem escritórios em Cingapura, Coréia, Japão e outros mais de 10 países. Com a missão de "Proteger o ecossistema Blockchain", a Beosin fornece uma solução de segurança blockchain "tudo em um", abrangendo auditoria de contratos inteligentes, monitoramento e alerta de riscos, KYT/AML e rastreamento de criptografia. Beosin já auditou mais de 3.000 contratos inteligentes e projetos ERC404 são bem-vindos para solicitar nossas consultas e auditorias.