Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

avatar
十四君
2năm trước
Bài viết có khoảng 4198từ,đọc toàn bộ bài viết mất khoảng 6 phút
Bài viết này xoay quanh giao thức ERC721 tiêu chuẩn và mô tả cách Mint, safeMint, chuyển giao, v.v. thực hiện quản lý tài sản.

trừu tượng

tiêu đề phụ

Bài viết này xoay quanh giao thức ERC721 tiêu chuẩn, mô tả cách Mint, safeMint, chuyển giao, v.v. thực hiện quản lý tài sản và hiểu thiết kế bảo mật cũng như thành phần chi phí của chuỗi dữ liệu Ethereum bằng cách diễn giải mã.

phác thảo thư mục

  • phác thảo thư mục

  • 1. Cái gọi là tài sản NFT là gì?

  • chữ

  • chữ

  • chữ

5. Dung lượng lưu trữ trên Ethereum đắt như thế nào?

  • tiêu đề phụ

  • hướng đối tượng

  • Nghiên cứu và phát triển - có thể đọc mà không có rào cản, hiểu thiết kế hợp đồng tinh tế

Non-RD - có thể không hiểu các mã được liệt kê, nhưng có thể hiểu ý tưởng thiết kế của các giao thức tiêu chuẩn

tiêu đề cấp đầu tiên

Trên opensea, bạn có thể thấy rằng mỗi NFT có một số duy nhất.

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

Ví dụ: số 4132 trong sê-ri azuki, trong cột Chi tiết của trang, bạn có thể thấy địa chỉ hợp đồng, số ID, chuỗi công khai nơi nó được triển khai và thông tin khác, trong khi cột Thuộc tính là cài đặt của nó với các thuộc tính khác nhau và độ hiếm tương ứng (bản thân Azuki không mang, nhưng nó được tính bằng tích hợp Opensea).

tiêu đề phụ

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

Và khi chúng ta xem lại mã nguồn (lấy mã openzepplin của thư viện chuẩn ERC721 ở đây), chúng ta sẽ thấy rằng chương trình ghi lại hai biến kiểu từ điển toàn cầu và ghi lại tất cả các ID tương ứng hiện tại của mỗi ID trong _owners bằng cách ánh xạ địa chỉ với số. Hoặc, nó cũng ghi lại tổng số NFT do chủ sở hữu hiện tại nắm giữ với _balances

Và bởi vì ERC721 cung cấp một biến _owners một cách sáng tạo với ID tương ứng với địa chỉ, nó quản lý địa chỉ và số dư chỉ với _balances ERC20, phân biệt sự khác biệt giữa FT (đồng nhất) và NFT (không đồng nhất).

tiêu đề cấp đầu tiên

2.1 Cách thức hoạt động của MintKhi NFT của Netflix quên bảo mật kinh doanh của web2

Mint có nghĩa là đúc, là quá trình tạo ra mỗi NFT, chẳng hạn như NFT Love Death Machine trước đây

Khi NFT của Netflix quên bảo mật kinh doanh của web2

  • Mint đã nhận được chứng chỉ tài sản của NFT.

  • Như có thể thấy từ mã nguồn, Mint chủ yếu đưa ra các đánh giá bảo mật:

  • Phán đoán 1: Đảm bảo rằng địa chỉ chuyển vào không phải là 0x00 (không thể chuyển địa chỉ lỗ đen ra ngoài và việc chuyển vào sẽ dẫn đến mất tài sản)

  • Phán quyết 2: Đảm bảo rằng NFTID do sàn giao dịch này vận hành không tồn tại

  • Mã cuối cùng làm gì là:

  • Thao tác 1: Cộng 1 vào tổng số _balances được giữ bởi địa chỉ đã chuyển

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

Thao tác 2: Sửa đổi chủ sở hữu của NFTID tương ứng thành địa chỉ được chuyển

Thao tác 3: Khi giao dịch hoàn tất, một sự kiện phát ra sẽ được gửi, cho phép hệ thống ngoại tuyến giám sát dữ liệu của giao dịch này

Ở giữa có _beforeTokenTransfer và _afterTokenTransfer, là các chức năng ảo, theo tiêu chuẩn, chúng được phía dự án sử dụng để thêm một số mã logic cụ thể mà không cần sửa đổi giao thức tiêu chuẩn.

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

2.2 Tại sao safeMint an toàn hơn

safeMint có nghĩa là truyền an toàn.Từ việc triển khai mã, có thể thấy rằng nó cũng tự gọi MInt, nhưng nó bổ sung thêm phán đoán của _checkOnERC721Received, thuộc tiêu chuẩn ERC165, tương đương với việc phán đoán bên kia sau khi thao tác chuyển là đã hoàn thành. Cho dù địa chỉ là địa chỉ lỗ đen (nghĩa là địa chỉ không thể bắt đầu hoạt động NFT giao dịch) là để ngăn chặn khi đối tượng chuyển là địa chỉ hợp đồng và hợp đồng không có chức năng chuyển được đặt trước, dẫn đến trong tài sản không thể chuyển đi, dẫn đến tổn thất vĩnh viễn.https://eips.ethereum.org/EIPS/eip-165

2.3 ERC165 ngăn tài sản bị chuyển vào lỗ đen như thế nào?

Ý định ban đầu của thiết kế có thể được nhìn thấy:

Đó là một đề xuất để chuẩn hóa giao diện hợp đồng. Trong ngữ pháp lập trình, giao diện có nghĩa là giao diện. Các chức năng được xác định trong đó không thể được thực hiện và chỉ đặt các tham số liên quan đến tên chức năng. Khi chương trình phức tạp, nó tương đương với một thư mục để cho người khác biết những gì tôi có Function.

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

Tuy nhiên, các phương thức viết của giao diện đều có ưu và nhược điểm riêng, tên xác định loại tham số và thậm chí liệu nó có tồn tại hay không.

Do đó, đề xuất này cuối cùng đã hình thành tiêu chuẩn ERC165, chuẩn hóa các quy tắc nhận dạng của giao diện.

Quá trình sử dụng là:

BƯỚC 1 Xác định xem có chức năng supportsInterface hay không và nó tuân theo tiêu chuẩn 165

(PS: Hãy để hợp đồng có chức năng nhận và chuyển NFT, có thể thực hiện chức năng này bằng cách giới thiệu gói mở rộng IERC721Receiver.sol)

chữ

  • Thiết kế giao thức tiêu chuẩn có hai phương thức truyền, truyền và truyềnTừ, được sử dụng trong hai trường hợp:

  • chuyển Chuyển: Được gọi bởi người dùng để chuyển NFTID được giữ bởi ví gửi tin nhắn này đến địa chỉ được chỉ định

So sánh nó với:

  • transferFrom Chuyển từ: Được gọi bởi một tổ chức nào đó, trước tiên người dùng cần ủy quyền cho một địa chỉ nhất định để nó có quyền chuyển.

  • So sánh nó với:

Chuyển khoản là một giao dịch tiền mặt, thanh toán bằng tiền túi của bạn

transferFrom là quét mã để khấu trừ tiền và cửa hàng sẽ áp dụng khoản khấu trừ, tùy thuộc vào việc người dùng có mở quyền giữ lại số tiền nhỏ hay không

Tiếp theo, chúng ta hãy xem mã, có thể có các chi tiết không mong muốn.

3.1 Cách thức hoạt động của quá trình chuyển tiền

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

Anh ta sẽ phát hiện xem bên từ của giao dịch hiện tại có phải là chủ sở hữu của NFTID này hay không và hạn chế NFT được chuyển đến địa chỉ 0x00. Tiếp theo, làm mới số dư của địa chỉ chuyển đi và địa chỉ chuyển vào, sửa đổi biến toàn cục _balances và đặt lại _owners để thay đổi địa chỉ chủ sở hữu của NFTID này thành thành.

Đây là một chi tiết bảo vệ. Trước tiên, hãy thực thi _approve(address(0), tokenId); để xóa ủy quyền lịch sử. Nếu không có bước như vậy, quá trình chuyển tài sản đã hoàn tất, nhưng ủy quyền chuyển NFTID của nó vẫn còn đó. Hãy suy nghĩ cẩn thận:

3.2 Cách hoạt động của transferFrom

Bản chất của giao dịch ở đây gọi _safeTransfer, vì vậy logic cốt lõi của nó là phần yêu cầu,

Một chi tiết quan trọng ở đây là: _msgSender() Đây là một phương thức trong thư viện chuẩn của openzepplin Context.sol.

Trên thực tế, nó là để lấy địa chỉ người gửi của giao dịch hiện tại, nhưng phiên bản đóng gói được sử dụng ở đây thay vì sử dụng trực tiếp msg.sender

Do đó, một số hợp đồng ở giữa, tương tự như thư viện, cần xem xét tình huống đặc biệt này.

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

Phần còn lại của bản án là xác định xem có biên bản ủy quyền hay không, dễ hiểu và sẽ không bị lặp lại

tiêu đề cấp đầu tiên

4. Dữ liệu nào khác có thể được lưu trữ trên chuỗi?

Sau khi đọc liên kết giao dịch, nhiều sinh viên mới đã thực sự ngạc nhiên, hóa ra NFT tôi mua chỉ có một ID có địa chỉ ghi công trỏ đến tôi, do đó đạt được tính duy nhất. Mặc dù vậy, thông tin hiếm ở đâu? Bản thân hình ảnh NFT của tôi ở đâu?

Đây là phần mở rộng siêu dữ liệu IERC721Metadata.sol liên quan đến ERC721

Bạn có thể đặt bất cứ thứ gì bạn muốn, nhưng bên dự án thường chỉ lưu trữ địa chỉ ID+IPFS cơ bản nhất trên chuỗi.

Chúng ta có thể xem một số dữ liệu dự án thông qua phương pháp hướng dẫn Etherscan trước đây?

Địa chỉ hợp đồng trên Azuki là: 0xed5af388653567af2f388e6224dc7c4b3241c544

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

Đối với các dự án Metaverse mới nổi gần đây Metaverse land sandbox và **Decentraland, cũng như **Axie Infinity rực lửa năm ngoái, siêu dữ liệu cơ bản được lưu trữ trên chuỗi chỉ là ID+URL.

Những thứ giống như gương được thiết kế đặc biệt để có chi phí thấp và dung lượng lưu trữ cao.Một khối thường bắt đầu ở mức 30M, gấp khoảng 1000 lần so với Ethereum.

tiêu đề cấp đầu tiên

5. Dung lượng lưu trữ trên Ethereum đắt như thế nào?

  • Đây là nơi mà bài viết này là một chút khó khăn hơn. Hãy phân tích thành phần chi phí và chuyển đổi số lượng lưu trữ trên chuỗi từ mã nguồn

  • Sẽ có hai khía cạnh của việc phát sinh chi phí, theo quy trình thực hiện

Khi người dùng bắt đầu giao dịch, dữ liệu được ghi trên chuỗi sẽ được chuyển vào dưới dạng tham số và kích thước của nó là chi phí

Giao dịch thực thi mã hợp đồng và EVM tính toán chi phí gas tiêu thụ theo việc sửa đổi và sử dụng.

Giải thích mã nguồn: NFT bạn đã mua chính xác là gì?

5.1 Chi phí khởi tạo giao dịch

  • Chúng ta có thể kiểm tra Ethereum Yellow Paper, trong đó có định nghĩa rõ ràng về gas được tiêu thụ bởi kích thước dữ liệu giao dịch

  • Bạn có thể xem giá của các thông số kèm theo khi trao đổi:

  • Mỗi giao dịch có 21000 GAS để thanh toán

Trả 68 GAS cho mỗi dữ liệu hoặc mã byte khác không của giao dịch

Trả 4 GAS cho mỗi dữ liệu hoặc mã 0 byte của giao dịch

Vì vậy, nếu bạn đăng ký một số thông tin thuộc tính NFT trong Mint, phần dữ liệu của giao dịch sẽ chuyển đổi các ký tự như abc thành hai biểu diễn thập lục phân và mỗi ký tự là một nhị phân tám bit, tương đương với một byte. Vì vậy, nó có thể xấp xỉ bằng cách chia độ dài của dữ liệu cho 2 dưới dạng số byte.

Và 1kb dữ liệu, nếu tất cả đều là thông tin văn bản khác không với nội dung thông tin, thì tương đương với việc tăng mức tiêu thụ gas là 68*1000=6,8W. Theo giá gas của 20gwei và giá của 2000 eth đổi lấy đô la Mỹ, có thể ước tính rằng cứ 1kb dữ liệu trên chuỗi cần phải:

20*(21000+68000)*1e9/1e18 * 2000 = 3,5 USD

func gasSStore(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64)(uint64, error)

5.2 Chi phí lưu trữ hợp đồng

Vì có logic được lưu trữ trong hợp đồng thông minh sau khi giao dịch được bắt đầu, hãy phân tích mức tiêu thụ cụ thể từ mã nguồn của Ethereum go (EIP1283).

  • Trong lịch sử, ước tính mức tiêu thụ gas đã trải qua nhiều lần lặp lại. Nếu Petersburg hoặc Constantinople không được kích hoạt, phép tính sẽ không được thực hiện theo logic sau

  • Tính toán mức tiêu thụ gas phụ thuộc vào 3 loại quản lý dữ liệu (thêm, xóa, sửa đổi)

  • Từ một địa chỉ có giá trị bằng không đến một giá trị khác không (GIÁ TRỊ MỚI), mỗi khe lưu trữ tiêu thụ 2Wgas

Từ địa chỉ có giá trị khác không đến địa chỉ có giá trị bằng không (XÓA), mỗi khe lưu trữ cần tiêu thụ 5K gas, nhưng sẽ có phần thưởng là 1,5W gas hoàn trả

Từ khác không đến khác không (CHANGE), mỗi khe lưu trữ tiêu thụ 200 gas

Lưu ý rằng mỗi khe lưu trữ ở trên được tính là 32 byte và dung lượng lưu trữ 1kb là 32 khe lưu trữ. Quy trình của Mint là thêm bộ nhớ mới, vì vậy nếu thêm 1kb dữ liệu được lưu trữ trên chuỗi, chi phí sẽ là 64Wgas và số tiền chuyển đổi là:

EIP-5058 có thể ngăn các bên tham gia dự án NFT chạy trốn với các thùng không?

EIP-5058 có thể ngăn các bên tham gia dự án NFT chạy trốn với các thùng không?

Chúng ta đang nhìn gì khi nhìn vào Etherscan?

Khi NFT của Netflix quên bảo mật kinh doanh của web2

Bài viết gốc, tác giả:十四君。Tuyển dụng: Nhân viên kinh doanh phần mềm theo dự án report@odaily.email;Vi phạm quy định của pháp luật.

Odaily nhắc nhở, mời đông đảo độc giả xây dựng quan niệm đúng đắn về tiền tệ và khái niệm đầu tư, nhìn nhận hợp lý về blockchain, nâng cao nhận thức về rủi ro; Đối với manh mối phạm tội phát hiện, có thể tích cực tố cáo phản ánh với cơ quan hữu quan.

Đọc nhiều nhất
Lựa chọn của người biên tập