Vào ngày 2 tháng 2, Pandora, một dự án tập trung vào phân mảnh NFT, đã được khởi động. Tính năng cốt lõi của nó là ERC404, một tiêu chuẩn mã thông báo kết hợp ERC20 và ERC721 và có các đặc điểm về tính thanh khoản gốc và sự phân mảnh NFT. Là một giao thức mới ra mắt, ERC404 đã kích hoạt các cuộc thảo luận cộng đồng rộng rãi. Khối lượng giao dịch hàng ngày của dự án đầu tiên của Pandora cũng đã vượt quá 50 triệu đô la. Nhiều dự án dựa trên ERC404 hoặc các tiêu chuẩn mã thông báo tương tự đã sẵn sàng được khởi chạy.

Vì ERC404 được trực tiếp mở nguồn cho  cộng đồng để thử nghiệm mà không cần thảo luận và đánh giá về đề xuất cải tiến Ethereum (EIP) và một yêu cầu nhận xét (ERC) nên bản thân giao thức có nhiều lĩnh vực cần cải tiến. Nhóm bảo mật Beosin sẽ tiến hành một phân tích chi tiết về cơ chế thiết kế và mã hợp đồng của ERC404 để giúp người dùng tiền điện tử hiểu ERC404.

ERC404 là gì?

ERC404 là một giao thức thử nghiệm mới có khả năng "kết hợp" hai tiêu chuẩn mã thông báo ERC20 và ERC721. Nói một cách đơn giản, ERC404 cho phép NFT được chia tách và giao dịch như các mã thông báo ERC20. Mã thông báo ERC404 là cả mã thông báo ERC20 và NFT, nghĩa là một mã thông báo ERC404 có thể được coi là là một mã thông báo ERC20 hoặc một NFT.

Khi người dùng mua mã thông báo ERC404, ví của người dùng sẽ tự động nhận được một NFT bản sao. Khi người dùng bán mã thông báo, nFT tương ứng sẽ tự động bị hủy.

Lấy Pandora, dự án đầu tiên của ERC404, làm ví dụ. Mã thông báo ERC404 của dự án này là PANDORA, và Bản sao tương ứng của nó là NFT là Pandora Bản sao. Tổng nguồn cung mã thông báo PANDORA là 10.000, vì vậy tổng nguồn cung tương ứng của Pandora NFT cũng là 10.000.

Khi một người dùng mua mã thông báo PANDORA trên Uniswap, việc nắm giữ 1 mã thông báo PANDORA tương đương với việc nắm giữ 1 Pandora NFT vào cùng lúc. Sau đó, bạn có thể chọn bán PANDORA mã thông báo hoặc đi đến các thị trường giao dịch NFT chẳng hạn như OpenSea để bán Pandora NFT. Người dùng cũng có thể mua Pandora NFT trước tiên sau đó chọn bán mã thông báo PANDORA trên DEX.

Người dùng có thể giao dịch mã thông báo ERC404 dưới dạng mã thông báo ERC20 hoặc ERC721

Vì ERC404 liên quan đến hai đặc điểm của mã thông báo ERC20 và NFT nên sau đây là các tính năng thiết kế của ERC404, cũng là những điều mà người dùng cần chú ý đến:


1. 
Nếu mã thông báo ERC404 được giao dịch dưới dạng mã thông báo ERC20, thập phân sẽ được tham gia và được xem xét. ERC404 quy định rằng số lượng mã thông báo được làm tròn xuống đến số NFT tương ứng. Ví dụ: nếu một người dùng nắm giữ 2,9 mã thông báo PANDORA, thì anh ấy/cô ấy chỉ giữ 2 Pandora NFT từ góc độ NFT.


2. 
Trong ERC404 v1, nếu mã thông báo ERC404 được giao dịch dưới dạng mã thông báo ERC20, thì NFT tương ứng sẽ bị hủy và một NFT mới sẽ được tạo trong giao dịch. Bằng cách này, mỗi khi một NFT mới được tạo, số ID của nó sẽ được thêm vào từ số ID cao nhất của NFT gốc. ERC404 v2 thay đổi cơ chế ghi này mà sẽ được giải thích sau. Vì Pandora NFT được đặt để có mức độ hiếm, người dùng sẽ giao dịch Pandora mã thông báo để tăng độ độ hiếm của Pandora NFT cho chuyên chênh lệch giá và thay thế nFT ban đầu bằng một hiếm hơn Pandora NFT.


3. 
Trong trường hợp của ERC404 v1, nếu một người dùng nắm giữ 2,9 PANDORA mã thông báo và bán 1 mã thông báo PANDORA thì mã thông báo không có độ hiếm, nhưng nFT tương ứng có độ hiếm khác nhau. Khi bán 1 mã thông báo, thẻ Pandora NFT cuối cùng mà người dùng nhận được sẽ bị hủy đầu tiên vì vậy người dùng cần phải chú ý đến độ độ hiếm của  NFT tương ứng với mã thông báo PANDORA. Chúng tôi nên rằng một địa chỉ chỉ lưu trữ một mã thông báo PANDORA tương ứng với một Pandora NFT hoặc người dùng có thể trực tiếp giao dịch Pandora NFT của họ.

Phân tích mã ERC404

ERC404 v1 được phát hành trên Github bởi Acme, một cựu kỹ sư phần mềm tại Coinbase và có nhiều không gian để cải tiến. Với sự giúp đỡ của cộng đồng, nhóm ERC404 hiện đang xây dựng và cải tiến ERC404 và ra mắt ERC404 v2 vào ngày 15 tháng 2. ERC404 v2 giảm đáng kể mức tiêu thụ gas và tối ưu hóa cơ chế để mua và bán ERC404 tok ens. Kho lưu trữ mã mới nhất của nó là https://github.com/Pandora-Labs-Org/erc404.

Lần này, chúng tôi sẽ sử dụng công cụ Beosin VaaS để quét hợp đồng thông minh ERC404 v2 phân tích mã ERC404 v2 và cung cấp đề xuất bảo mật cho các dự án ERC404 với các chuyên gia bảo mật Beosin:

Beosin VaaS

Các hợp đồng của ERC404 v2 chủ yếu bao gồm ERC404.sol, ERC721Receiver.sol và DoubleEndedQueue.sol. DoubleEndedQueue là một cấu trúc dữ liệu mới được giới thiệu bởi nhóm ERC404 để thay đổi  logic của giao dịch mã thông báo và ghi NFT.

ERC404 v2, tương tự với v1, là một triển khai kết hợp của ERC721 và ERC20, cho phép mã thông báo ERC721 được biểu thị dưới dạng mã thông báo ERC20. Trong số đó, mỗi mã thông báo ERC721 tương ứng với một số lượng cố định của mã thông báo ERC20 (được xác định bởi tham số đơn vị). Khi chuyển mã thông báo ERC721, các mã thông báo ERC20 tương ứng được chuyển theo đơn vị.

So với v1, ERC404 v2 có những cải tiến sau:


1. 
Hỗ trợ EIP-2612

ERC404 v2 đã hỗ trợ EIP-2612, cho phép giao dịch không tốn gas thông qua thông báo đã ký (quyền). "DOMAIN_SEPARATOR" được tính toán trong hàm tạo và có thể được tính toán lại nếu  ID chuỗi thay đổi, điều này cải thiện khả năng tương thích của hợp đồng của nó.

hàm tạo(chuỗi tên bộ nhớ_, ký hiệu bộ nhớ chuỗi_, uint8 số thập phân_) {

    tên = tên_;

    ký hiệu = ký hiệu_;

if (thập phân_ < 18) {

      hoàn nguyên DecimalsTooLow();

}

    số thập phân = số thập phân_;

    đơn vị = 10 ** số thập phân;

// Khởi tạo EIP-2612

    INITIAL_CHAIN_ID = block.chainid;

    INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();

}


2. 
Kiểm tra chuyển khoản an toàn

Hàm safeTransferFrom trong hợp đồng của nó tuân theo onERC721Received() trong tiêu chuẩn ERC721 và sẽ kiểm tra người nhận để đảm bảo rằng người nhận có thể xử lý mã thông báo ERC721 (ví dụ: người nhận là một hợp đồng).

hàm safeTransferFrom(

    địa chỉ từ_,

    giải quyết để_,

    uint256 id_,

    byte bộ nhớ dữ liệu_

) công khai ảo {

if (id_ > đúc || id == 0) {

      hoàn nguyên InvalidId();

}

transferFrom(from_, to_, id_);

nếu như (

      to_.code.length != 0 &&

ERC721Người nhận(to_).onERC721Đã nhận(msg.sender, from_, id_, data_) !=

      ERC721Receiver.onERC721Received.selector

) {

      hoàn nguyên UnsafeRecipient();

}

}

3. Logic đào và đốt được cải tiến

Khác với v1, khi giao dịch mã thông báo ERC404 v2 , nFT tương ứng sẽ không bị hủy. Thay vào đó, tất cả ID NFT được lưu trữ trong hàng đợi hai đầu để tái sử dụng. Theo theo cách này, nFT tương ứng với ERC404 là giống với mã thông báo ERC721 thông thường. Tương tự như đồng xu. Cách tiếp cận này không chỉ làm giảm mức tiêu thụ gas mà còn đơn giản hóa logic chuyển giao của ERC404.

Theo nhóm ERC404, khí đốt của các hoạt động đốt liên quan có thể được tiết kiệm tới 80%

Những cải tiến của ERC404 v2 làm cho ERC404 có khả năng mở rộng và bền vững hơn, nhưng vẫn có một số rủi ro bảo mật đáng chú ý:


1. 
Chức năng danh sách trắng

ERC404 cho phép một số địa chỉ danh sách trắng nhất định chuyển mã thông báo ERC721 nội bộ, có thể được sử dụng để tối ưu hóa việc sử dụng gas của các hợp đồng hoặc địa chỉ cụ thể. Tuy nhiên, điều này cũng có thể gây ra các vấn đề về tập trung hoặc khả năng lạm dụng.

tóm tắt hợp đồng ERC404 là IERC404 {

......

ánh xạ(địa chỉ => bool) public erc721TransferExempt;

......

// Xử lý các ngoại lệ ERC-721.

hàm _transferERC20WithERC721(

//tiết kiệm xăng bằng cách giao dịch nội bộ

}

}


2. 
Vấn đề về chức năng chuyển giao

Hàm transferFrom xử lý các hoạt động chuyển ERC20 và ERC721 và phân biệt logic của hai tiêu chuẩn mã thông báo dựa trên thông số valueOrId_. Nhà phát triển hoặc người dùng có thể gặp lỗi khi gọi hàm này, vì chức năng này có một giả định rằng nếu giá trị của  chuyển chuyển lớn hơn giá trị của số đúc thì, việc chuyển là về một chuyển mã thông báo ERC20.

hàm truyềnFrom(

    địa chỉ từ_,

    giải quyết để_,

    giá trị uint256OrId_

) lợi nhuận ảo công khai (bool) {

......

if (valueOrId_ <= _minted) {

// Mục đích là chuyển dưới dạng mã thông báo ERC-721 (id).

      uint256 id = valueOrId_;

......

}


3. 
Tối ưu hóa khí đốt

Mặc dù ERC404 v2 đã giảm đáng kể phí gas cần cho sự tương tác của người dùng so với v1, nhưng vẫn còn rất nhiều không gian để cải thiện. Ví dụ: hợp đồng ERC404 v2 sử dụng một lỗi tùy chỉnh hoàn nguyên NotFound() thay vì câu lệnh yêu cầu với một thông báo lỗi làm tăng mức tiêu thụ gas.


4. 
Thiếu chức năng tạm dừng khẩn cấp

Là một giao thức mới ra đời, ERC404 có thể tiềm ẩn các lỗ hổng hợp đồng mà không thể bỏ qua. Do đó, khi nhóm phát triển hợp đồng, một chức năng tạm dừng khẩn cấp nên được xem xét để thiết lập trong hợp đồng và một kế hoạch phản ứng rủi ro phải được xây dựng để nhanh chóng ứng phó và khắc phục các lỗ hổng khi rủi ro phát sinh.

Trước đây, Beosin đã đề cập các đề xuất bảo mật ở trên với nhóm dự án khi hoàn thành kiểm tra của Avatar, một dự án đổi mới dựa trên ERC404, đã giúp nhóm Avatar cải thiện tính bảo mật của các hợp đồng thông minh và đảm bảo hoạt động an toàn của dự án Avatar. Quá trình kiểm tra này bao gồm việc xác minh chính thức và kiểm tra thủ công của các chuyên gia bảo mật nhằm đảm bảo rằng mã không có lỗ hổng hợp lý:

Nhìn chung, ERC404 cố gắng giải quyết các vấn đề về tính không thể chia nhỏ của NFT và tính thanh khoản không đủ từ một góc nhìn mới. So với các dự án phân mảnh NFT trước đây, nó bắt đầu từ các tiêu chuẩn mã thông báo gốc, đơn giản hơn và hiệu quả hơn để triển khai và cung cấp các phương thức mới để giao dịch NFT. Tuy nhiên, ERC404 là một hợp đồng tương đối phức tạp giữa các hợp đồng mã thông báo. Nhà phát triển cần chú ý đến các đặc điểm của ERC20 và ERC721 cũng như những rủi ro có thể được gây ra bằng cách thêm chức năng mới. Các nhóm bảo mật cần phải kiểm tra cẩn thận sự tương tác giữa các chức năng ERC20 và ERC721 trong quá trình kiểm tra cũng như tác động của nhiều rủi ro về tối ưu hóa khí và tập trung hóa trong các hợp đồng ERC404 trong hợp đồng ERC404.

Beosin là công ty bảo mật blockchain hàng đầu toàn cầu. Công ty có văn phòng tại  Singapore, Hàn Quốc, Nhật Bản và hơn 10 quốc gia khác. Với sứ mệnh của "Bảo mật Hệ sinh thái Blockchain", Beosin cung cấp giải pháp bảo mật blockchain "tất cả trong một" bao gồm Kiểm tra hợp đồng thông minh, Giám sát rủi ro & Cảnh báo, KYT/AML và Theo dõi tiền điện tử. Beosin đã đã kiểm toán hơn 3000 hợp đồng thông minh và các dự án ERC404 được hoan nghênh yêu cầu tư vấn và kiểm tra.