“Điều đơn giản nhất cũng là những điều phi thường nhất và chỉ những người thông thái nhất mới có thể tìm thấy chúng.”
Câu chuyện kể về ở một vương quốc nọ tên là Nift, một nơi và đã từng có quãng thời gian, đây là một đất nước của tự do, giàu có và hạnh phúc. Dần theo thời gian, con người nơi đây dần quên mất cuộc sống này và rồi bị cám dỗ bởi sự tham lam, ghen ghét và đố kỵ. Có một nhà giả kim nọ nơi đây mang biệt danh Toái Nguyệt không muốn câu chuyện của thành phố kết thúc như vậy.
1. Quá trình nghiên cứu
1.1. Giá trị hóa ký ức
Nhà giả kim tiến vào bên chiếc nồi chế quen thuộc Remix, bắt đầu tỉ mỉ chế ra 1000 đơn vị Nift memory dust (ERC20 token). Đây là công thức chế tạo:
Bằng cách đưa công thức vào một file .sol tiến hành compile và deploy, bụp một nghìn “bụi ký ức Nift” đã được tạo ra trong ống nghiệm.
Giải thích: Đây chính là cách để tạo ra token ERC20 trên các mạng lưới hỗ trợ EVM.
1.2. Gửi gắm giá trị vào các bảo vật linh hồn
Cất ống nghiệm một sang một bên, ngài đưa mở hộp và thả vào nồi nấu một vài loại hợp chất để tạo ra: Bông hoa của sự tư do, chiếc lá của sự giàu có và giọt nước của sự hạnh phúc.
Giải thích: Smart contract trên tạo ra contract token ERC721 (NFT) gồm 3 token có id tương ứng 1, 2, 3. Mỗi id gắn với một thông tin URI như trong source code.
2. Đóng gói và tạo hình
Sau khi hoàn thành và chạy thử thành công smart contract trên remix, giờ ta sẽ mang chúng setup lại trên truffle để thuận tiện trong việc build deploy data, abi và verify network.
Trong phần này chúng ta sẽ sử dụng Truffle để triển khai Smart contract và React để làm frontend hiển thị thành quả.
Note: Bạn cần cài đặt Node.js và Truffle để có thể tiến hành.
Tạo file .env tại root của project và truyền giá trị PRIVATE_KEY và BSCSCANAPIKEY (sử dụng cho verify contract). Sau đó setup lại config trong file: truffle-config.js
// Set default mocha options here, use special reporters etc. mocha: { // timeout: 100000 },
// Configure your compilers compilers: { solc: { version: "^0.8.4", // A version or constraint - Ex. "^0.5.0" } } };
Xóa tất cả các file có sẵn ở contracts, migrations và test, sau đó tạo 2 file NiftMemoryDust.sol và NiftMemoryTreasure.sol tương ứng trong thư mục contracts.
Chuyển code sang và thay đổi lại cấu trúc import của mỗi file, thay đoạn https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0 thành @openzeppelin.
Tạo file 1_deploy_contract.js trong migrations và thêm code deploy:
Tuy nhiên smart contract này chưa được verify nên source code còn tồn tại dạng byte code, ta cần thêm 1 bước verify nữa trước khi sử dụng.
1 2
truffle run verify NiftMemoryDust@0xaae5fc57ae9b2702e165224bc7b4f700ba698b22 --network testnet truffle run verify NiftMemoryTreasure@0xe3864fb24851ea437043ae62104df4692e11b8b1 --network testnet
Xong! Giờ đã có hai smart contract này chạy trên binance smart chain testnet. Bước tiếp theo chúng ta sẽ viết giao diện hiển thị thông tin 2 loại token này.
3. Hiện thực hóa
Tiếp đến ta sẽ sử dụng React có sẵn khi unbox để dựng giao diện hiển thị. Vào thư mục client xóa hết những file không cần thiết cho project: App.css, App.js, App.test.js, index.css.
// If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: https://bit.ly/CRA-PWA serviceWorker.unregister();