Cointime

Download App
iOS & Android

Hiểu ERC-6551 từ góc độ mã: Chính xác thì NFT trở thành ví như thế nào?

Tác giả: Javier Calderon Biên dịch: Cointime.com 237

giới thiệu

Chào mừng bạn đến với thế giới của Mã thông báo không thể thay thế (NFT), một tài sản kỹ thuật số độc đáo đang tạo nên làn sóng trong không gian chuỗi khối. Với sự gia tăng của NFT, chúng tôi nhận thấy khả năng có thể đạt được trên các mạng blockchain ngày càng mở rộng. Một trong những bước phát triển thú vị là khái niệm NFT dưới dạng ví hoặc tài khoản, một ý tưởng mạnh mẽ mở ra nhiều trường hợp sử dụng và ứng dụng mới.

ERC-721 là tiêu chuẩn NFT trên Ethereum và mặc dù nó đã phục vụ tốt cho cộng đồng, nhưng những hạn chế của nó đã thúc đẩy các phần mở rộng và khái niệm mới. Một trong số đó là ERC-6551, đề xuất khái niệm "tài khoản mã thông báo bị ràng buộc". Bản thảo này trình bày đề xuất tạo tài khoản hợp đồng thông minh của riêng mình cho mỗi mã thông báo ERC-721, cho phép NFT sở hữu tài sản và tương tác với các ứng dụng mà không cần thay đổi hợp đồng thông minh ERC-721 hiện có hoặc cơ sở cơ bản.

nguyên tắc làm việc

Hướng dẫn này mô tả quá trình chuyển đổi NFT thành ví hoặc tài khoản bằng cách sử dụng đề xuất ERC-6551. Trước tiên, chúng tôi phác thảo các nguyên tắc cơ bản đằng sau ERC-6551, cung cấp giao diện tiêu chuẩn và sổ đăng ký không được phép để tạo tài khoản mã thông báo ngoại quan. Sau đó, chúng tôi đã thảo luận sâu về việc triển khai chức năng cụ thể, bao gồm tạoTài khoản và tài khoản trong Sổ đăng ký cũng như giao diện IERC6551Account.

Sau đó, chúng tôi đã khám phá cách triển khai Tài khoản IERC6551 trong Solidity, tạo hợp đồng thông minh sử dụng NFT làm ví. Hợp đồng này có khả năng nhận, giữ và gửi mã thông báo ERC-20, về cơ bản hoạt động như một ví riêng cho mỗi NFT. Chúng tôi cũng đã chia sẻ một ví dụ đơn giản về hợp đồng thông minh triển khai chức năng này, sẽ cung cấp cho bạn một điểm khởi đầu tốt.

Hãy nhớ rằng mã chúng tôi đang chia sẻ chỉ nhằm mục đích minh họa và điều quan trọng là phải kiểm tra và kiểm tra kỹ mã nếu bạn định triển khai tính năng này trong sản xuất.

Khả năng biến NFT thành ví hoặc tài khoản mở ra những khả năng mới trong thế giới blockchain. Nó tạo ra một danh tính kỹ thuật số duy nhất cho NFT, có thể sở hữu và quản lý tài sản trên chuỗi. Cho dù đó là số hóa hình đại diện để tích lũy nội dung trò chơi, tác phẩm nghệ thuật để giữ lại tiền bản quyền hay thẻ khách hàng thân thiết để ghi lại các tương tác, các kịch bản ứng dụng tiềm năng đều rất thú vị.

thực hiện

Công nghệ chuỗi khối đã cách mạng hóa cách chúng ta hiểu về quyền sở hữu và giao dịch tài sản. Một trong số đó là Non-Fungible Tokens (NFT) — tài sản duy nhất được thể hiện trên các chuỗi khối đã thu hút rất nhiều sự chú ý. Tuy nhiên, bất chấp tính riêng biệt của các tài sản này, NFT truyền thống có một hạn chế quan trọng: chúng không thể sở hữu tài sản hoặc tương tác với các ứng dụng một cách độc lập. Do đó, sự xuất hiện của ERC-6551, đây là một phương pháp mới để biến NFT thành ví hoặc tài khoản bằng cách cấp cho chúng tài khoản duy nhất của chúng. Bài viết này đi sâu vào cách triển khai ERC-6551, cho biết cách nó làm cho NFT linh hoạt hơn, đồng thời cung cấp các đoạn mã và phương pháp hay nhất.

Hiểu về ERC-6551

Hiểu về ERC-6551

Đề xuất cải tiến Ethereum (EIP) ERC-6551 là một tiêu chuẩn được giới thiệu gần đây nhằm mở rộng khả năng của mã thông báo không thể thay thế (NFT) ERC-721. Nó chỉ định cho mỗi NFT một tài khoản hợp đồng thông minh xác định, duy nhất, cho phép NFT sở hữu tài sản và tương tác với các ứng dụng mà không yêu cầu thay đổi cơ sở hạ tầng hoặc hợp đồng thông minh ERC-721 hiện có.

Hệ thống ERC-6551 bao gồm hai thành phần chính: sổ đăng ký không được phép để triển khai tài khoản liên kết mã thông báo và giao diện tiêu chuẩn để triển khai tài khoản liên kết mã thông báo. Sổ đăng ký được thực hiện bằng cách triển khai từng tài khoản mã thông báo ngoại quan dưới dạng hợp đồng proxy tối thiểu ERC-1167, nối thêm dữ liệu không đổi bất biến vào mã byte. Địa chỉ của mỗi tài khoản là xác định và được lấy từ sự kết hợp duy nhất của địa chỉ triển khai, địa chỉ hợp đồng mã thông báo, ID mã thông báo, ID chuỗi EIP-155 và giá trị muối tùy chọn.

Cách triển khai ERC-6551

ERC-6551 được triển khai thông qua hợp đồng đăng ký không được phép, không thể thay đổi và không có chủ sở hữu. Cơ quan đăng ký đóng vai trò là điểm vào duy nhất cho các dự án muốn sử dụng mã thông báo ràng buộc tài khoản. Hợp đồng đăng ký có hai chức năng:

1. createAccount : Triển khai và liên kết tài khoản mã thông báo cho mã thông báo ERC-721 theo địa chỉ triển khai.

2. tài khoản : Hàm chỉ đọc tính toán địa chỉ tài khoản của mã thông báo liên kết mã thông báo ERC-721 dựa trên địa chỉ triển khai.

Sau đây là giao diện của hợp đồng đăng ký:

Chức năng tạo tài khoản có thể được sử dụng để triển khai các tài khoản mã thông báo ngoại quan mới. Nếu tài khoản đã được tạo, nó sẽ trả về địa chỉ tài khoản mà không cần gọi hàm create2. Nếu initData không phải là null và tài khoản chưa được tạo, thì initData được cung cấp sẽ được gọi sau khi tạo. Hàm tài khoản trả về một địa chỉ tài khoản mã thông báo bị ràng buộc đã được tính toán.

Tạo tài khoản mã thông báo ngoại quan

Để phát triển hơn nữa hợp đồng thông minh, chúng tôi có thể bắt đầu bằng cách mở rộng chức năng do IERC6551Account triển khai.

Trước tiên, hãy thêm chức năng để xử lý mã thông báo ERC-20 mà NFT có thể nhận được. Chúng tôi sẽ thêm một chức năng cho phép NFT phê duyệt một địa chỉ khác để chi tiêu một số tiền nhất định của mã thông báo ERC-20 cụ thể:

giao diện IERC20 {

chức năng phê duyệt (địa chỉ người chi tiêu, số tiền uint256) lợi nhuận bên ngoài (bool);

}

hợp đồng MyERC6551Account là IERC6551Account {

// Mã hợp đồng khác...

chức năng phê duyệtERC20(địa chỉ tokenAddress, địa chỉ chi tiêu, số tiền uint256) bên ngoài onlyOwner {

Mã thông báo IERC20 = IERC20(địa chỉ mã thông báo);

token.phê duyệt(người chi tiêu, số tiền);

}

Mã thông báo IERC20 = IERC20(địa chỉ mã thông báo);

token.phê duyệt(người chi tiêu, số tiền);

}

}

Ở đây, onlyOwner là công cụ sửa đổi đảm bảo chỉ chủ sở hữu của NFT mới có thể gọi hàm. IERC20 là một giao diện đơn giản hóa để tương tác với mã thông báo ERC-20.

Tiếp theo, hãy thêm khả năng để NFT của chúng ta tương tác với giao thức DeFi giả định, chẳng hạn như nền tảng cho vay. Để đơn giản, chúng tôi sẽ thêm một chức năng cho phép các NFT gửi một số lượng nhất định mã thông báo ERC-20 vào nền tảng:

giao diện ILendingPlatform {

gửi tiền chức năng (địa chỉ tokenAddress, số tiền uint256) bên ngoài;

}

hợp đồng MyERC6551Account là IERC6551Account {

// Mã hợp đồng khác...

chức năng DepositToLendingPlatform(địa chỉ platformAddress, địa chỉ tokenAddress, số tiền uint256) bên ngoài onlyOwner {

// Chuyển số lượng mã thông báo được chỉ định cho hợp đồng này

Mã thông báo IERC20 = IERC20(địa chỉ mã thông báo);

yêu cầu (token. transferFrom (tin nhắn. người gửi, địa chỉ (cái này), số tiền), "Chuyển mã thông báo không thành công");

// Phê duyệt nền tảng cho vay để chi tiêu mã thông báo

token.phê duyệt(địa chỉ nền tảng, số tiền);

// Gửi mã thông báo vào nền tảng cho vay

Nền tảng ILendingPlatform = ILendingPlatform(địa chỉ nền tảng);

nền tảng.tiền gửi(tokenAddress, số tiền);

}

}

Trong đoạn mã này, ILendingPlatform là một giao diện được đơn giản hóa để tương tác với một nền tảng cho vay giả định. Trước tiên, chúng tôi chuyển một lượng mã thông báo cụ thể từ chủ sở hữu NFT sang hợp đồng, sau đó phê duyệt nền tảng cho vay để sử dụng các mã thông báo đó và cuối cùng gửi mã thông báo vào nền tảng cho vay.

Đây chỉ là một số ví dụ về những gì có thể đạt được khi sử dụng ERC-6551. Các khả năng hầu như vô hạn, tùy thuộc vào nhu cầu cụ thể của dự án của bạn. Đảm bảo kiểm tra kỹ lưỡng bất kỳ tính năng mới nào trước khi triển khai lên mạng chính để đảm bảo tính năng này hoạt động như mong đợi và không có lỗ hổng bảo mật.

Chuyển đổi NFT sang Ví

Để tạo hợp đồng thông minh cho NFT hoạt động như một ví hoặc tài khoản, trước tiên bạn cần triển khai hợp đồng ERC-721. Hợp đồng này sẽ xử lý việc đúc và chuyển giao NFT.

Tiếp theo, bạn sẽ triển khai hợp đồng Tài khoản IERC6551 tương tác với hợp đồng ERC-721. Hợp đồng này có khả năng nhận, giữ và gửi mã thông báo ERC-20, về cơ bản hoạt động như một ví riêng cho mỗi NFT.

Tiếp theo, bạn sẽ triển khai hợp đồng Tài khoản IERC6551 tương tác với hợp đồng ERC-721. Hợp đồng này có khả năng nhận, giữ và gửi mã thông báo ERC-20, về cơ bản hoạt động như một ví riêng cho mỗi NFT.

Dưới đây là một ví dụ đơn giản về hợp đồng IERC6551Account:

độ cứng pragma ^0.8.0;

nhập "@openzeppelin/hợp đồng/token/ERC721/ERC721.sol";

nhập "@openzeppelin/hợp đồng/token/ERC20/IERC20.sol";

nhập "@openzeppelin/hợp đồng/bảo mật/ReentrancyGuard.sol";

nhập "@openzeppelin/hợp đồng/truy cập/Ownable.sol";

hợp đồng NFTWallet là ERC721, ReentrancyGuard, Có thể sở hữu {

ánh xạ (uint256 => địa chỉ) _wallets riêng tư;

hàm tạo (tên bộ nhớ chuỗi, ký hiệu bộ nhớ chuỗi) ERC721 (tên, ký hiệu) {}

function walletOfToken(uint256 tokenId) chế độ xem công khai trả về (địa chỉ) {

trả lại _wallets [tokenId];

}

chức năng bạc hà (địa chỉ đến) chỉ công khaiChủ sở hữu {

uint256 newTokenId = totalSupply() + 1;

_mint(đến, newTokenId);

_wallets[newTokenId] = đến;

}

chuyển chức năngERC20(uint256 tokenId, mã thông báo địa chỉ, địa chỉ đến, số lượng uint256) public nonReentrant {

require(_wallets[tokenId] == msg.sender, "Chỉ chủ sở hữu ví mới có thể chuyển");

IERC20(token).transferFrom(địa chỉ(này), tới, số tiền);

}

gửi tiền chức năngERC20(uint256 tokenId, mã thông báo địa chỉ, số tiền uint256) public nonReentrant {

require(_wallets[tokenId] == msg.sender, "Chỉ chủ sở hữu ví mới có thể gửi tiền");

IERC20(token).transferFrom(tin nhắn.người gửi, địa chỉ(cái này), số tiền);

IERC20(token).transferFrom(tin nhắn.người gửi, địa chỉ(cái này), số tiền);

}

function balanceOfERC20(uint256 tokenId, address token) public view trả về (uint256) {

require(_wallets[tokenId] == msg.sender || OwnerOf(tokenId) == msg.sender, "Không phải chủ sở hữu ví");

return IERC20(token).balanceOf(address(this));

}

}

Trong hợp đồng này, mỗi NFT (được xác định bằng tokenId của nó) được liên kết với một địa chỉ ví (_wallets[tokenId]). Hàm đúc đúc một NFT mới và đặt địa chỉ ví của nó thành địa chỉ được cung cấp. Chức năng transferERC20 cho phép chủ sở hữu NFT chuyển mã thông báo ERC-20 từ ví được liên kết với NFT sang địa chỉ khác. Chức năng gửi tiềnERC20 cho phép chủ sở hữu NFT gửi mã thông báo ERC-20 từ địa chỉ cá nhân của họ vào ví được liên kết với NFT. Chức năng balanceOfERC20 cho phép chủ sở hữu NFT kiểm tra số dư của mã thông báo ERC-20 trong ví được liên kết với NFT.

Lưu ý rằng hợp đồng này đã được đơn giản hóa để rõ ràng và không bao gồm đầy đủ chức năng của tiêu chuẩn ERC-6551. Mã này có thể không hoàn toàn an toàn hoặc tối ưu hóa và phải được kiểm tra và kiểm tra kỹ lưỡng trước khi đưa vào sản xuất.

Cuối cùng, hãy nhớ rằng thực sự triển khai các hợp đồng thông minh này sẽ yêu cầu ETH trả tiền gas. Lượng gas cần thiết phụ thuộc vào mức độ phức tạp của hợp đồng và giá gas hiện tại trên mạng Ethereum.

Thực hành tốt nhất

Khi triển khai ERC-6551, điều quan trọng là phải tuân theo các phương pháp hay nhất để đảm bảo tính bảo mật và hiệu quả:

1. Đảm bảo tính tương thích : Tiêu chuẩn ERC-6551 được thiết kế để tương thích ngược với các mã thông báo ERC-721 hiện có. Khả năng tương thích luôn được đảm bảo bằng cách thử nghiệm với các hợp đồng ERC-721 hiện có.

2. Bảo mật : Như với bất kỳ hợp đồng thông minh nào, bảo mật là điều tối quan trọng. Đảm bảo việc triển khai của bạn an toàn và chống lại các vectơ tấn công phổ biến. Cân nhắc tiến hành kiểm toán bảo mật trước khi triển khai. Luôn đặt quyền kiểm soát của chủ sở hữu đối với mã thông báo ERC-721 và tài khoản được liên kết của họ lên hàng đầu.

3. Tiết kiệm gas : Đảm bảo việc triển khai của bạn sử dụng Gas hiệu quả. Hãy nhớ rằng mọi hoạt động trên chuỗi khối Ethereum đều tiêu tốn Gas và các hợp đồng không hiệu quả có thể dẫn đến chi phí cao không cần thiết.

4. Sử dụng đúng địa chỉ : Khi tạo tài khoản mã thông báo được liên kết, vui lòng đảm bảo sử dụng đúng địa chỉ triển khai, ID chuỗi, địa chỉ hợp đồng mã thông báo và ID mã thông báo. Việc sử dụng địa chỉ không chính xác hoặc không hợp lệ có thể dẫn đến hành vi không mong muốn hoặc mất quyền kiểm soát đối với tài khoản.

5. Sử dụng muối : Tùy chọn muối trong chức năng tạo tài khoản cho phép bạn tạo một địa chỉ duy nhất cho mỗi tài khoản mã thông báo ngoại quan, ngay cả khi các thông số khác giống nhau. Sử dụng tính năng này có thể tăng tính duy nhất và bảo mật của mỗi tài khoản.

Tóm lại là

ERC-6551 là một sự phát triển thú vị cho hệ sinh thái Ethereum, mở rộng khả năng của nó bằng cách cung cấp các tài khoản duy nhất cho mã thông báo ERC-721. Sự phát triển này mở ra những khả năng mới, bao gồm NFT sở hữu tài sản và tương tác với các ứng dụng một cách độc lập. Hướng dẫn này trình bày tổng quan về ERC-6551 và việc triển khai nó. Tuy nhiên, giống như bất kỳ công nghệ mới nào, nó nên được sử dụng một cách thận trọng và tuân theo các phương pháp hay nhất để đảm bảo hợp đồng an toàn và hiệu quả.

NFT
Các bình luận

Tất cả bình luận

Recommended for you