ERC-721
Tổng quan
Hướng dẫn này cung cấp một hướng dẫn chi tiết từng bước về cách tạo và triển khai một token tương thích với ERC-721 trên Kaia. Do tính tương thích với Ethereum của Kaia, việc tạo ra một token có thể thay thế trên Kaia tuân theo các bước tương tự như trên Ethereum và sử dụng tiêu chuẩn ERC721.
Để tuân thủ tiêu chuẩn, bạn sẽ triển khai một hợp đồng thông minh thực hiện các giao diện ERC721 và ERC165 tương ứng như sau:
interface ERC721 /* is ERC165 */ { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);= event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) external view returns (uint256); function ownerOf(uint256 _tokenId) external view returns (address); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; function transferFrom(address _from, address _to, uint256 _tokenId) external payable; function approve(address _approved, uint256 _tokenId) external payable; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address); function isApprovedForAll(address _owner, address _operator) external view returns (bool);}interface ERC165 { function supportsInterface(bytes4 interfaceID) external view returns (bool);}
- Sự kiện chuyển nhượng: được phát ra khi quyền sở hữu của một token được chuyển từ địa chỉ này sang địa chỉ khác.
- Sự kiện phê duyệt: được phát ra khi một địa chỉ được phê duyệt để chuyển một token cụ thể.
- Sự kiện ApprovalForAll: được phát ra khi chủ sở hữu phê duyệt hoặc thu hồi quyền phê duyệt cho một nhà điều hành quản lý tất cả các token của họ.
- balanceOf: Phương thức trả về số lượng NFT (Non-Fungible Tokens) mà một địa chỉ cụ thể sở hữu.
- ownerOf: Phương thức trả về địa chỉ của chủ sở hữu của một token cụ thể. Mỗi token ERC721 là duy nhất và được đại diện bởi một ID. Chức năng này cho phép người dùng hoặc ứng dụng xác định chủ sở hữu của token dựa trên ID duy nhất của nó.
- safeTransferFrom (không kèm dữ liệu): phương thức chuyển giao quyền sở hữu của một token cụ thể từ một địa chỉ này sang một địa chỉ khác một cách an toàn. Chức năng này kiểm tra xem người nhận có phải là hợp đồng thông minh hay không. Nếu đúng như vậy, nó phải triển khai một hàm cụ thể (onERC721Received) để chấp nhận giao dịch chuyển nhượng.
- transferFrom: Phương thức chuyển quyền sở hữu của một token từ một địa chỉ này sang một địa chỉ khác. Thông thường, nó được sử dụng khi người gửi đã được phê duyệt để chuyển token.
- Phê duyệt: Phương thức để cấp phép cho một địa chỉ chuyển đổi một token cụ thể. Điều này cho phép chuyển nhượng ủy quyền, trong đó chủ sở hữu có thể cho phép một bên khác chuyển nhượng token thay mặt mình.
- getApproved: Phương thức được sử dụng để lấy địa chỉ đã được phê duyệt cho một token cụ thể.
- setApprovalForAll: Phương thức cho phép chủ sở hữu của một hoặc nhiều token cấp quyền hoặc thu hồi quyền cho một người vận hành để quản lý tất cả các token của họ.
- isApprovedForAll: phương thức kiểm tra xem một người dùng có được phép quản lý tất cả các token của chủ sở hữu hay không.
- safeTransferFrom (với dữ liệu): Phương thức này tương tự như safeTransferFrom (không có dữ liệu) nhưng có thêm tham số dữ liệu. Dữ liệu bổ sung này có thể được sử dụng để truyền thêm thông tin trong quá trình chuyển giao nếu người nhận là một hợp đồng thông minh. Chức năng này cũng kiểm tra xem người nhận có phải là hợp đồng thông minh hay không và liệu nó có triển khai hàm onERC721Received hay không.
Bắt đầu
Trong phần này, bạn sẽ tạo và triển khai hợp đồng token ERC721 của mình bằng cách sử dụng Remix Online IDE. Để đảm bảo tính tiện lợi và bảo mật, chúng tôi sẽ sử dụng hợp đồng OpenZeppelin ERC-721 để tạo token của mình. Với OpenZeppelin, chúng ta không cần phải viết toàn bộ giao diện ERC-721. Thay vào đó, chúng ta có thể nhập thư viện contract và sử dụng các hàm của nó.
Bước 1: Thêm tệp vào Filebase & IPFS
Chúng ta cần lưu trữ các tệp nghệ thuật NFT và metadata; để làm điều này, chúng ta sẽ sử dụng IPFS - một hệ thống lưu trữ và chia sẻ tệp ngang hàng phân tán. Có nhiều phương pháp khác nhau để tương tác với giao thức IPFS. Bạn có thể tự cài đặt và vận hành IPFS trên hệ thống của mình, hoặc sử dụng Filebase - một giải pháp đơn giản hơn.
Filebase là cầu nối đến hệ thống lưu trữ phi tập trung trên IPFS trong web3. Nó đơn giản hóa việc truy cập của bạn vào IPFS bằng cách quản lý hạ tầng cơ sở.
Trong hướng dẫn này, chúng tôi sẽ sử dụng Filebase để lưu trữ tác phẩm nghệ thuật NFT và metadata trên IPFS.
Các bước:
- Đăng nhập vào bảng điều khiển Filebase.
- Tạo một thùng IPFS bằng cách nhấp vào Tạo thùng nếu bạn chưa có.
- Nhấp vào nút Tải lên để tải lên tác phẩm NFT của bạn như hiển thị trên bảng điều khiển bucket của bạn.
- Nhấp vào tên tệp trong tab Tệp và sao chép (nút chia sẻ) URL IPFS cho tác phẩm nghệ thuật NFT của bạn.
- Thêm tệp JSON metadata vào IPFS bằng Filebase.
Tạo một tệp JSON có tên kairos.json
, thay thế URL IPFS của bạn vào trường hình ảnh và lưu tệp. Sau khi lưu, tải tệp JSON của bạn lên IPFS, tương tự như bước trước đó.
{ "name": "Kairos NFT", "description": "gkaia frens! gazuaaaaa!!!", "image": "https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmRvQc4wZCp6NF7dFL4ywiWTG7FSH3KKGUAkXGgsdYfcKi"}
Sau khi tải lên, nhấp vào tên tệp trong tab Tệp và sao chép URL IPFS. Nó phải trông giống như hình bên dưới:
https://disastrous-turquoise-parakeet.myfilebase.com/ipfs/QmY1LZF8JHo2r3h4X5VzLLXtJujqnBFGTyo2aqR9joXnt8
Lưu địa chỉ URL IPFS này. Chúng ta sẽ cần điều này để đúc NFT của mình trong phần tiếp theo.