Phần 1 - NFT là gì?

Posted by Giap Nguyen on 2023-02-01

Khái niệm

NFT là viết tắt của Non-Fungible Token, đây là một loại tài sản kỹ thuật số không thể thay thế được và độc nhất vô nhị. Các NFT có thể được sử dụng để đại diện cho các tác phẩm nghệ thuật, video game, đồ thị truyền thông xã hội và nhiều loại tài sản kỹ thuật số khác.

Một trong những ứng dụng đầu tiên của NFT là trong lĩnh vực nghệ thuật, nơi chúng được sử dụng để bảo vệ quyền sở hữu trí tuệ của các nghệ sĩ và nhà sáng lập. Trước khi có NFT, các tác phẩm nghệ thuật trên mạng xã hội và các trang web khác có thể dễ dàng bị sao chép hoặc trộm cắp. Nhưng với NFT, việc sở hữu các tác phẩm nghệ thuật trở nên rõ ràng hơn, giúp ngăn chặn việc sao chép và trộm cắp tác phẩm.

Một ứng dụng khác của NFT là trong lĩnh vực video game, nơi chúng được sử dụng để đại diện cho các vật phẩm trong trò chơi. Các NFT có thể được sử dụng để mua, bán và trao đổi các vật phẩm trong trò chơi, giúp tạo ra một nền kinh tế trong trò chơi với giá trị thực của các vật phẩm. Điều này có thể giúp tạo ra một trải nghiệm chơi game mới, đặc biệt là với các trò chơi sử dụng công nghệ blockchain.

Vào tháng 2 năm 2021, một bức tranh kỹ thuật số của nghệ sĩ Beeple được bán với giá 69 triệu USD thông qua một phiên đấu giá Christie’s. Đây là một trong những ví dụ nổi bật nhất của giá trị tăng cao của các NFT trong thời gian gần đây.

Các NFT cũng đang thu hút sự chú ý của các doanh nghiệp và nhà đầu tư. Nhiều công ty đã bắt đầu sử dụng NFT để quảng bá thương hiệu và tạo ra các chương trình khuyến mãi độc đáo cho khách hàng. Những người đầu tư cũng đang tìm cách mua và sở hữu các NFT với hy vọng giá trị của chúng sẽ tăng trong tương lai.

Tuy nhiên, giá trị của NFT có thể thay đổi nhanh chóng và không được bảo đảm. Một số NFT được tạo ra bằng cách sử dụng rất nhiều năng lượng và tài nguyên, gây ảnh hưởng tiêu cực đến môi trường. Các nhà phát triển NFT đang cố gắng tìm ra các cách để giảm thiểu ảnh hưởng này.

Mặc dù NFT đang trở thành một xu hướng phát triển mạnh mẽ, nhiều người vẫn còn đang đặt câu hỏi về tính tiện ích của chúng. Liệu việc sở hữu một NFT có thực sự giá trị, hay chỉ là một trào lưu trong thời gian ngắn? Điều này vẫn còn đang chờ đợi được giải quyết.

Tóm lại, NFT đang trở thành một trong những xu hướng kỹ thuật số mới nhất, mang lại cơ hội cho các nghệ sĩ, nhà phát triển trò chơi và các doanh nghiệp. Tuy nhiên, điều quan trọng là đảm bảo rằng việc sử dụng NFT sẽ không gây ra tác động tiêu cực đến môi trường và giá trị của chúng sẽ được xác định một cách minh bạch và công bằng.

Xây dựng NFT cơ bản với Solidity

Solidity là ngôn ngữ lập trình thông dịch được sử dụng để phát triển các hợp đồng thông minh trên nền tảng Ethereum. Trong bài viết này, chúng ta sẽ tìm hiểu cách xây dựng một NFT đơn giản bằng Solidity.

Trước tiên, chúng ta cần tạo một hợp đồng thông minh mới. Hợp đồng này sẽ được sử dụng để tạo ra các phiên bản của NFT và quản lý chúng. Để làm điều này, chúng ta sẽ sử dụng một chuỗi mã Solidity đơn giản như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract MyNFT is ERC721 {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;

constructor() ERC721("MyNFT", "MNFT") {}

function createNFT(address recipient, string memory tokenURI)
public
returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}

Hợp đồng trên là một hợp đồng kế thừa từ hợp đồng ERC721, một giao thức chuẩn cho các NFT trên nền tảng Ethereum. Hợp đồng này cũng sử dụng thư viện Counters để đếm số lượng NFT được tạo ra.

Hàm createNFT được sử dụng để tạo ra một phiên bản mới của NFT. Hàm này chấp nhận hai tham số: địa chỉ của người nhận NFT và địa chỉ của tệp JSON chứa thông tin về NFT. Hàm này trả về một số nguyên duy nhất là ID của NFT mới được tạo.

Sau khi đã triển khai hợp đồng, chúng ta có thể sử dụng hàm createNFT để tạo ra các phiên bản của NFT. Ví dụ, chúng ta có thể sử dụng các lệnh sau để tạo ra một NFT mới và gửi nó cho một địa chỉ người nhận cụ thể:

1
2
MyNFT nft = new MyNFT();
nft.createNFT(msg.sender, "https://www.mywebsite.com/my-nft-metadata.json");

Trong ví dụ trên, chúng ta tạo ra một đối tượng mới của hợp đồng MyNFT và gọi hàm createNFT để tạo ra một NFT mới. Tham số msg.sender được sử dụng để xác định địa chỉ của người gửi giao dịch, trong trường hợp này là địa chỉ của người tạo NFT. Tham số thứ hai là địa chỉ của tệp JSON chứa thông tin về NFT.

Sau khi một NFT được tạo ra, chúng ta có thể truy cập thông tin về nó bằng cách sử dụng các hàm mặc định của giao thức ERC721. Ví dụ, chúng ta có thể sử dụng hàm balanceOf để kiểm tra số lượng NFT đang được sở hữu bởi một địa chỉ cụ thể:

1
uint256 balance = nft.balanceOf(msg.sender);

Chúng ta cũng có thể sử dụng hàm ownerOf để xác định địa chỉ của chủ sở hữu của một NFT cụ thể:

1
address owner = nft.ownerOf(tokenId);

Ở đây, tokenId là ID của NFT mà chúng ta muốn kiểm tra.

Cuối cùng, chúng ta cũng có thể truy cập thông tin về NFT bằng cách sử dụng tệp JSON chứa thông tin về nó. Tệp JSON này chứa các thông tin như tên của NFT, mô tả, hình ảnh và nhiều hơn nữa. Chúng ta có thể sử dụng hàm tokenURI để truy cập địa chỉ của tệp JSON này:

1
string memory tokenUri = nft.tokenURI(tokenId);

Ở đây, tokenId là ID của NFT mà chúng ta muốn kiểm tra.

Tóm lại, xây dựng một NFT đơn giản bằng Solidity đòi hỏi kiến thức cơ bản về lập trình và giao thức ERC721. Tuy nhiên, với sự giúp đỡ của các thư viện như OpenZeppelin, việc triển khai một hợp đồng NFT trở nên đơn giản và dễ dàng hơn bao giờ hết.

Tài liệu tham khảo

Dưới đây là một số tài liệu học về NFT:

Những tài liệu này sẽ giúp bạn hiểu rõ hơn về NFT, cách tạo và giao dịch NFT, và cách mà NFT đang thay đổi ngành nghệ thuật và xã hội.

Mời bạn đọc tiếp phần 2 của bài viết tại đây.