Chủ đề lần này tôi xin phép nhàn đàm cùng anh/chị là NFT (Non-Fungible Token). Vì chúng ta đều là dân kỹ thuật nên tôi xin phép giãi bày “đầu đuôi ngọn ngành” tường tận để anh/chị hiểu bản chất của NFT. Hy vọng sau khi nhâm nhi cà phê, đọc hết bài post này, anh/chị sẽ có ngẫu hứng biến các tác phẩm nghệ thuật số của mình thành các NFT và đưa lên sàn trưng bày cho cryptographic assets metaverse cùng thưởng ngoạn.
Để giúp anh/chị quyết định có đọc tiếp hay không, tôi xin phép cung cấp các thông tin liên quan đến bài post này như sau:
- Chủ đề: Blockchain, Cryptocurrency.
- Tính thời sự: Tháng 09/2022.
- Thời gian đọc: 8 phút.
① Blockchain
Ngược dòng thời gian, ngày 27/03/2018, tôi có bài đàm luận trên diễn đàn này với tựa đề “Bitcoin, Blockchain & Satoshi Nakamoto ₿” (anh/chị có thể xem lại tại đây). Trong bài đó, chủ yếu tôi đàm luận về bài viết của Satoshi Nakamoto: “Bitcoin: A Peer-to-Peer Electronic Cash System” (https://bitcoin.org/bitcoin.pdf). Có thể nói Satoshi Nakamoto “một mình” đã khởi xướng ra hệ thống tiền điện tử - tiền mã hóa (cryptocurrencies) và khái niệm Blockchain cho cả thế giới sử dụng rồi sau đó dần rút lui và “biến mất”. Nếu anh/chị có thời gian đọc bài báo thì sẽ thấy tính cô đọng của bài viết, tôi có cảm giác không thể viết ngắn hơn được nữa: 8 trang bài viết + 1 trang tham chiếu.
-
Mục tiêu của Satoshi Nakamoto là tạo ra hệ thống tiền điện tử mà người bán và người mua giao dịch trực tiếp với nhau, không cần thông qua một đơn vị trung gian. Thách thức lớn nhất là làm thế nào để giải quyết vấn đề “double spending”: nghĩa là cùng một lượng tiền người ta chi trả nhiều lần cho nhiều người thì sao? Satoshi Nakamoto cho rằng cách duy nhất để giải quyết vấn đề này là tất cả các bên tham gia vào hệ thống đều có sổ cái (ledger) ghi lại toàn bộ các giao dịch. Ai cũng có sổ cái và tất cả các sổ cái đều giống nhau. Hệ thống hoạt động dựa trên mạng lưới các “nút” (Node) giao dịch trên mạng. Các nút này thực chất là các máy tính có kết nối Internet.
-
Satoshi Nakamoto đưa ra một ý tưởng mới gọi là block chain (trong bài báo, hai từ này được viết rời nhau) - tạm dịch là “các khối xâu chuỗi với nhau”. Các khối này liên kết với nhau theo trục thời gian: cứ khoảng 10 phút sinh ra một khối mới. Khối sau được sinh ra liên kết với tất cả các khối trước đó theo một quy tắc nhất định, chứ không phải sinh ra một cách bất kỳ. Tất cả các giao dịch mới đều được đặt vào khối phát sinh sau cùng. Sau khi có khối mới đã phát sinh thì hệ thống “khóa sổ” các khối trước đó.
Cách các khối liên kết với nhau theo trục mốc thời gian
(Hình ảnh được lấy từ bài báo của Satoshi Nakamoto)
Bên lề ▼ Thời gian sinh ra một block mới
- Đối với Blockchain của Bitcoin, thời gian phát sinh một khối (block) mới theo quy ước là 10 phút. Tất nhiên, con số này không hẳn là chính xác tuyệt đối, có thể chênh nhau vài giây.
- Trong hệ thống Ethereum, thời gian phát sinh một khối mới khoảng từ 10 giây đến 20 giây, trung bình khoảng 14 giây.
Bên lề ▲
-
Satoshi Nakamoto quy định là người đầu tiên tìm ra khối mới sẽ được “thưởng” một lượng tiền ảo nhất định. Trong thời gian 4 năm đầu tiên, mỗi một khối mới được thưởng 50 Bitcoins. Bốn năm tiếp theo lượng thưởng giảm đi một nửa: 25 Bitcoins, bốn năm tiếp theo sau giảm đi tiếp một nửa, chỉ còn 12.5 Bitcoins, … Bằng cách này, các nút ganh đua nhau tính nhanh để có phần thưởng.
Bên lề ▼ Tổng số coin là bao nhiêu?
- Do quy định của Satoshi Nakamoto, tổng số Bitcoin (₿) không vượt quá 21 triệu (anh/chị nào cao thủ về Toán tính giới hạn theo quy định trên sẽ ra ngay).
- Trong hệ thống Ethereum, số coin (Ξ) không bị hạn chế.
Bên lề ▲
-
Vấn đề là nếu có một “kẻ gian” muốn sửa đổi các giao dịch đã “khóa sổ” thì sao? Để giải quyết vấn đề này, ý tưởng của Satoshi Nakamoto là bắt các nút phải giải một câu đố (puzzle). Cách ra câu đố của Satoshi Nakamoto là phối hợp phương pháp Hashcash của Adam Back với một số gọi là Nonce (tạm dịch: độc số).
Hàm hashcash là hàm số “băm” một chuỗi bất kỳ và cho kết quả là một chuỗi có độ dài cố định (ví dụ 32 bytes). Hàm ngược: cho biết kết quả băm, việc tái tạo lại chuỗi đã bị băm là không khả thi. Trong Blockchain, Satoshi Nakamoto dùng phương pháp mật mã hashcash. Phương pháp này độc đáo ở chỗ: khối sau là kết quả “băm” của tổ hợp của khối ngay phía trước và Nonce. Kết quả băm này phải nhỏ hơn một “ngưỡng” nào đấy. Thực chất của việc giải hàm ngược là tăng dần số Nonce, thực hiện hàm băm và xem xem kết quả đã nhỏ hơn ngưỡng chưa. Satoshi Nakamoto gọi quá trình là Proof-of-Work (tạm dịch: chứng minh nỗ lực). Khi chạy trong thực tế các nút phải cạnh tranh xem ai là người đầu tiên tìm ra kết quả băm theo quy định. Người ta chứng minh rằng “ngưỡng” càng nhỏ thì việc tìm ra kết quả càng khó. Các tài liệu trên mạng gọi đây là độ khó (dificulty).
Tác dụng của phương pháp hashcash là gì? Nếu có một kẻ tấn công muốn thay đổi một giao dịch nào đó từ khối K nằm ở giữa chuỗi thì kẻ đó bắt buộc phải tính lại K cùng toàn bộ các khối tiếp theo K+1, K+2, … và tổng hợp thời gian tính toán phải nhỏ hơn các nút khác trên mạng chỉ tính toán cho khối cuối cùng. Xác suất này, theo Satoshi Nakamoto, tiệm cận đến 0 khi chuỗi Blockchain đủ dài.
Hàm cashhash kết hợp với độc số Nonce
(Hình ảnh được lấy từ bài báo của Satoshi Nakamoto)
-
Chúng ta nhận thấy đặc tính của Blockchain:
- Tất cả các nút có cùng một bản sao của sổ cái (ledger).
- Sổ cái là một chuỗi các khối (Block). Nhìn vào hình vẽ: khối sau chứa con trỏ đến hàm “băm” khối ngay phía trước (+ độc số Nonce), một timestamp (dấu thời gian) và dữ liệu các giao dịch. Chú ý rằng, ngoài các thông tin này, Block có thể lưu thêm các thông tin khác (xem phần sau về NFT).
- Sau khi “đóng sổ” thì không ai có quyền thay đổi nội dung các khối.
Chỉ bằng thiết kế, với hệ thống mã nguồn mở, Satoshi Nakamoto đã tạo ra một hệ thống mà ở đó các nút (Node) phối hợp với nhau một cách “an toàn” (secured) mà không cần đến vai trò trung gian.
Bên lề ▼ Proof-of-Work vs. Proof-of-Stake
- Proof-of-Work đòi hỏi rất nhiều tính toán. Đây là điểm bị chỉ trích của Bitcoin: lãng phí về lượng tính toán (hàng chục nghìn hệ thống cùng làm một việc giống nhau và độc lập với nhau) và không có cơ chế hợp tác của những người “đào mỏ”.
- Hệ thống Ethereum lúc đầu cũng cùng nguyên tắc với Bitcoin (nghĩa là sử dụng Proof-of-Work). Nhưng Ethereum đã chuyển sang phương pháp mới gọi là Proof-of-Stake. Trong hệ thống Proof-of-Stake, người “đào mỏ” sẽ được thay bằng “Validator” (người xác nhận). Trong hệ thống này Validator không cần giải bài “đánh đố” hàm hashcash, nhưng phải đặt cược một lượng tiền ảo (Ether). Nếu có hành vi gian lận thì lượng tiền này sẽ bị mất (bị hủy: burned). Phần thưởng cho Validator là phí giao dịch tương ứng với lượng tiền cổ phần đặt cược (Stake). Cơ chế này làm cho các Validator giàu càng giàu hơn. Người chuyển tiền phải trả phí giao dịch (cái này giống ngân hàng 😊). Phí giao dịch và lưu trữ trong Ethereum được gọi là Gas Price (Gas là khái niệm ảo, không có thật trong đời thường). Năng lượng tiêu tốn của Proof-of-Stake được cho là chỉ bằng một phần nghìn (1/1000) của Proof-of-Work.
- Ethereum đã khởi động việc chuyển từ Proof-of-Work sang Proof-of-Stake từ ngày 01/12/2020 và mới hoàn tất vào ngày 15/09/2022. Như vậy, vào thời điểm của bài post này, Ethereum đã sử dụng giải pháp Proof-of-Stake.
Bên lề ▲
② Cryptocurrency wallet (ví tiền ảo)
Cũng trong bài báo đó Satoshi Nakamoto đề xuất người mua và người bán thanh toán, “chuyển khoản” trực tiếp cho nhau mà không cần trung gian. Việc định danh sử dụng phương pháp Private – Public Key (mỗi chủ nhân giữ một cặp chìa khóa gồm chìa khóa bí mật: private key và chìa khóa công khai: public key). Trong mật mã thì phương pháp này cho đến thời điểm hiện nay chưa ai công bố được phương án “phá” khóa cả. Như vậy việc định danh, mua – bán đảm bảo tuyệt mật được giải quyết.
Để giúp anh/chị làm tươi bộ nhớ, tôi xin phép giới thiệu vắn tắt phương pháp này. Giả định có 2 người liên lạc với nhau có tên là Alice và Bob. Mỗi người đều có một cặp khóa: khóa công khai (Public Key) và khóa bí mật (Private Key). (Nguồn: https://en.wikipedia.org/wiki/Public-key_cryptography)
-
- Bob gửi thông tin cho Alice:
Dùng khoá công khai để mã hóa, nhưng dùng khoá bí mật để giải mã.
-
- Alice gửi thông tin cho Bob:
Dùng khoá bí mật để ký một thông báo dùng khoá công khai để xác minh chữ ký.
-
Tóm tắt: ví là nơi chứa thông tin chi tiết của cặp chìa khóa (Public Key – khóa công khai, Private Key – khóa bí mật). Các khóa được sử dụng để theo dõi số tiền có trong ví, nhận tiền từ người khác hoặc chi tiêu tiền. Khóa công khai cho phép người khác biết “địa chỉ ví” để thực hiện thanh toán, trong khi khóa bí mật cho phép chủ sở hữu chi tiêu tiền (gửi tiền đến các ví khác).
Chú ý rằng ví không chứa tiền, nó chỉ chứa tham chiếu. Tiền thực sự nằm trên Blockchain.
③ Smart contract
Bây giờ chúng ta bàn đến chuyện giao dịch trên Blockchain. Nghĩa là liên quan đến mua, bán tài sản mã hóa. Chú ý rằng việc mua bán này là thỏa thuận trực tiếp giữa người mua (ví mua) và người bán (ví bán), không qua trung gian và không có trọng tài nào cả. Đơn giản nhất là một giao thức (protocol) thỏa thuận mặc nhiên giữa người mua và người bán. Tổng quát hóa, người ta đưa vào ứng dụng một loại hợp đồng đặc biệt có tên là Smart contract.
Thực chất, dưới góc nhìn kỹ thuật, smart contract là gì? Đơn giản đó chỉ là một phần mềm máy tính – một chương trình (program). Tất nhiên chúng ta tò mò về cách thức xử lý một “hợp đồng” (smart contract) được thực hiện như thế nào? Chúng ta lấy ví dụ: tài khoản A gửi tiền (coins) cho tài khoản B.
- Gửi giao dịch từ tài khoản A đến một khối trong Blockchain (khối phát sinh sau cùng). Giao dịch bao gồm mã chương trình đã được biên dịch thành ngôn ngữ máy và địa chỉ người nhận (tài khoản B).
- Tiếp theo, chương trình (đã biên dịch) được kích hoạt, các dữ liệu trạng thái được ghi vào khối (block).
- Tiếp theo, các nút (Node) cạnh tranh/thỏa thuận với nhau để tạo ra khối (block) mới. Xem phần Blockchain ở đầu bài post.
- Sau khi các nút cùng chấp thuận khối mới, tất cả thông tin trong khối đó được “đóng sổ”, không ai được phép thay đổi.
Kết quả thực hiện một smart contract là gì? Kết quả chung cuộc: tài khoản A gửi cho tài khoản B một lượng tiền (coins). Trong các bước trung gian, có thể một smart contract trung gian này gửi tiền cho một smart contract trung gian khác.
Blockchain phổ biến nhất để chạy các smart contract là Ethereum. Trong Ethereum, smart contract được lập trình bằng ngôn ngữ Solidity.
④ NFT (Non-Fungible Token)
Non-Fungible Token (tạm dịch: token không thể thay thế, viết tắt: NFT) là một đơn vị dữ liệu (data) trên sổ cái (ledger), nghĩa là nằm trên Blockchain. NFT là mã định danh (identifier - ID) duy nhất không thể sao chép, thay thế hoặc chia nhỏ, được sử dụng để chứng nhận tính xác thực và quyền sở hữu.
Dưới góc độ kỹ thuật, NFT được lưu trong một khối (block) của Blockchain. Chúng ta lưu ý thêm về đặc điểm của Blockchain: dữ liệu, kể cả mã định danh (ID), nằm trong một Block khi đã “khóa sổ” thì không thể sửa đổi.
Khi ví (Cryptocurrency wallet) sở hữu mã định danh (ID) thì chủ nhân của ví sẽ sở hữu NFT tương ứng với mã định danh đó.
Mã định danh khác với các đồng tiền mã hóa (như Bitcoin): chúng không cái nào giống cái nào, mỗi một mã định danh là duy nhất, không hoán đổi được như các đồng tiền mã hóa. Mỗi một NFT là duy nhất (vì vậy mới có tên là identifier).
Thế mỗi một identifer (ID) tham chiếu đến cái gì? Mỗi một ID tham chiếu đến một đơn vị dữ liệu số hóa: tác phẩm nghệ thuật, âm thanh, video, món đồ trong trò chơi điện tử, … Chúng được xem như chứng chỉ xác thực quyền sở hữu đối với sản phẩm tương ứng.
NFT có thể thay đổi chủ sở hữu. Vì vậy, người ta có thể mua hoặc bán NFT.
Chúng ta cùng tìm hiểu xem NFT được lưu trên Blockchain như thế nào qua hình ảnh minh họa sau. (Nguồn: https://en.wikipedia.org/wiki/Non-fungible_token)
Minh họa NFT được tạo bởi smart contract.
-
Trong hình minh họa ở trên, smart contract cùng với NFT được lưu trong một khối (block) của Blockchain. Toàn bộ khối dữ liệu của NFT thường rất ít khi nằm ngay trên Blockchain mà NFT thường là một con trỏ, trỏ đến một tệp dữ liệu nằm bên ngoài Blockchain. Như vậy cái ví (Cryptocurrency wallet) của chủ sở hữu không chứa NFT. Ví đó chứa con trỏ và con trỏ này trỏ đến một khối (block) có chứa NFT trên Blockchain. Đến lượt NFT, trong phần lớn các trường hợp, cũng chỉ là một mã định danh tham chiếu đến một đơn vị dữ liệu nào đó được lưu giữ ở bên ngoài Blockchain, trên Internet.
Như vậy, nội dung thực chất của NFT là Digital Media (truyền thông kỹ thuật số)! Tuy nhiên, NFT có một điểm đặc biệt: chúng có thể được mua, bán, thương mại và từ đó phát sinh tài sản số (digita assets).
Nội dung của NFT thường là các tác phẩm nghệ thuật kỹ thuật số (Digital Artwork), tài sản ảo trong trò chơi (in-game assets), âm nhạc, phim và các nội dung kỹ thuật số khác.
⑤ Làm thế nào để tạo ra NFT?
Để có trải nghiệm, tôi đã mày mò tạo ra NFT. Thì thiên hạ có NFT, mình cũng phải có chứ! 😊 Mà cũng khá đơn giản, các công cụ có đầy trên mạng. Sau đây tôi xin thuật lại các bước nhằm tạo ra NFT để anh/chị nào chưa từng đưa tác phẩm của mình lên sàn NFT có thể tham khảo.
Bước 1: Xác định nội dung của NFT
Do sức sáng tạo của tôi có hạn nên tôi chọn “tác phẩm” của mình là các bức tranh, ảnh kỹ thuật số. Cái này thì vào thời điểm hiện nay, một lúc có thể tạo ra hàng chục “tác phẩm”!
Bước 2: Chọn Blockchain
Chúng ta dễ dàng tìm thấy có nhiều loại Blockchain. Đương nhiên chúng ta đã biết Blockchain của Bitcoin nhưng đáng tiếc Blockchain này không phổ dụng cho NFT. Bằng cách “Google Search”, tôi tìm được danh sách các loại Blockchain phổ biến dùng cho NFT là Ethereum, Solana, Polygon, Cardano, Tezos, …
Tôi chọn Ethereum.
Bước 3: Tạo ví (cryptocurrency wallet)
Để có thể “chứa” NFT, chúng ta bắt buộc phải có ví. Cũng bằng cách dò la thông qua “Google Search”, tôi thấy có các loại ví phổ biến là MetaMask, Coinbase Wallet, Ledger Nano X, …
Tôi chọn MetaMask.
(Tôi xin phép không đi vào chi tiết tạo ví vì điều đó làm cho bài post dài không cần thiết. Trước khi tạo ví, anh/chị nên đọc kỹ hướng dẫn của phần mềm tạo ví.
Xem thêm mục ② Cryptocurrency wallet (ví tiền ảo) tôi đã giới thiệu ở trên để tìm hiểu nguyên lý hoạt động của ví.)
Bước 4: Chọn NFT Platform (sàn NFT)
NFT Platform là nơi cho phép chúng ta tạo NFT, chỉnh sửa tham số các NFT, “niêm yết” (list) các NFT lên sàn và có thể mua, bán các NFT của các chủ nhân khác. Thấy người ta giới thiệu một số sàn (Platform) nổi tiếng như OpenSea, Solanart, Crypto exchanges, …
Tôi chọn OpenSea.
Bước 5: Tạo một NFT
Sau khi có ví và đã chọn sàn (Platform) thì việc tạo ra một NFT khá đơn giản.
- Kết nối với ví
- Chọn “Create”
- Tải lên file ảnh
- Điền các thông tin theo hướng dẫn
- Chọn loại Blockchain (Ethereum)
- Nhấn nút Create – Xong.
Bước 6: Đưa lên sàn để chào bán
Sau khi đã có tác phẩm, muốn “niêm yết” (list) lên sàn (của OpenSea) thì chỉ mỗi việc là nhấn nút “Sell” và điền đơn giá (đồng ETH).
-
Thế tôi đã đưa lên sàn OpenSea “tác phẩm” nào? Báo cáo với anh/chị là tôi đã sử dụng công cụ trực tuyến Craiyon.com để vẽ một bức tranh theo mô hình DALL·E 2 của OpenAI. Bức tranh đó như hình vẽ dưới đây.
Chúc mừng năm mới 2023 và xin gửi đến tất cả anh/chị cùng gia đình và bạn hữu xa gần lời chúc tốt đẹp nhất!