Bên cạnh đó, người sở hữu vật phẩm NFT có thể sử dụng nó bằng bất cứ cách nào họ muốn (chẳng hạn, lấy vật phẩm làm vật thế chấp để mượn một vật phẩm khác) (Ethereum, 2021a).
3.3.2. NFTs hoạt động như thế nào?
Thông thường, NFTs được tạo ra và lưu trữ trên Ethereum network, những mạng blockchains (blockchain networks) khác cũng hỗ trợ NFTs. Vì ai cũng có thể xem các thành phần trong blockchain, quyền sở hữu NFT có thể dễ dàng được theo dõi và xác thực, trong khi người sở hữu vẫn giữ được quyền ẩn danh của mình.
Trong khi ERC-20 tokens, chẳng hạn DAI hay LINK, chứa các tokens độc nhất và không thể chia nhỏ, NFTs cho phép thiết lập hay nhận quyền sở hữu của một đoạn dữ liệu độc nhất, có thể truy cứu (trackable) bằng cách sử dụng blockchain của Ethereum làm cầu nối. Một NFT được đào từ các vật phẩm điện tử được coi như là đại diện của tài nguyên điện tử hay vật lý. Chẳng hạn, một NFT có thể đại diện cho những tài nguyên điện tử như ảnh, video, vật phẩm trong các trò chơi hay vật phẩm ngoài đời thật như vé tham gia một sự kiện ngồi đời, tài liệu, chữ ký, v.v. (Ethereum, 2021a). Có thể nói, có rất nhiều lựa chọn để sáng tạo với NFTs.
Một NFT chỉ có thể có một chủ sở hữu trong một thời điểm. Quyền sở hữu được thực hiện thông qua ID và metadata (siêu dữ liệu) mà khơng token nào có thể sao chép. NFTs được đào thông qua smart contracts, thực chất là gán quyền sở hữu và quản lý tính trao đổi của NFT. Khi một người tạo ra hay đào NFT, người đó sẽ thực thi một đoạn code trong smart contracts để thoả mãn một tiêu chuẩn nào đó (chẳng hạn ERC-721). Thông tin này sẽ được thêm vào blockchain mà NFT đó được quản lý. Q trình đào, nhìn từ bậc cao, phải bắt đầu từ việc tạo một block, sau đó là xác thực thơng tin và kết thúc bằng việc ghi lại thông tin vào blockchain (Ethereum, 2021a).
Khi tạo ra NFT, nhà sáng tạo có thể dễ dàng chứng minh điều đó, cũng như xác định độ quý hiếm (bằng cách quyết định số NFTs có thể được đào), nhận tiền bản quyền mỗi khi sản phẩm của họ được bán. Ngồi ra, việc bán NFT có thể được thực hiện trên “chợ” (NFT market) hoặc thông qua trao đổi cá nhân (Ethereum, 2021a). Nói cách khác, khơng có gì giới hạn, và cũng khơng cần trung gian để thực thi mua bán quyền sở hữu với NFTs.
Tuỳ vào NFT, quyền sở hữu có thể khơng đồng nghĩa với việc người mua đã mua vật phẩm. Giống như khi mua bản in giới hạn của một tấm ảnh khơng có nghĩa là người mua độc quyền với tấm ảnh được in (L. DeNicola, 2021). Điều này tạo ra nhiều ý kiến tranh cãi liên quan đến sự cần thiết và ý nghĩa của NFTs, hay liệu nó có đang là một cơng nghệ đáng để hướng đến trong tương hay không.
Ngồi ra, một số NFTs có thể tự động trả tiền bản quyền cho người sáng tạo ra vật phẩm khi nó được bán đi. Đây là một công nghệ mạnh mẽ, dù vẫn đang trong quá trình phát triển. Nhà sáng tạo nội dung khơng phải lo lắng đến tính minh bạch trong việc nhận những khoản tiền này, thay vào đó, mọi thao tác đều được triển khai tự động với độ chính xác tuyệt đối mỗi khi vật phẩm được giao dịch (Ethereum, 2021a).
3.3.3. Các tiêu chuẩn phổ biến của NFTs (NFT Standards): 3.3.3.1. ERC-721: 3.3.3.1. ERC-721:
Đây là tiêu chuẩn đầu tiên giới thiệu về NFTs. Bên cạnh đó, tiêu chuẩn này cũng thể hiện tính độc nhất và khả năng mang lại nhiều giá trị hơn những token khác trong smart contracts bởi tính quý hiếm, cũng như khả năng hình tượng hố. Mọi NFTs đều có một biến uint256 là tokenId, giống với các contract ERC-721 khác. Cặp giá trị address (contract) và tokenId (uint256) cần phải là độc nhất trên toàn bộ blockchain, và nhà sáng tạo có thể sử dụng một bộ chuyển đổi (converter) với giá trị
của tokenId có thể được sử dụng để đưa vào (hoặc lấy ra) nhiều loại dữ liệu khác nhau (Ethereum, 2021b).
ERC-721 cung cấp một hàm chuyển đổi NFT (NFT transfer) an toàn. Hàm này được biết đến dưới cái tên Transfer From, được sử dụng trong suốt quá trình phát triển nền tảng NFT, nhằm phân loại giao dịch an tồn và khơng an tồn. Việc chuyển đổi NFT chỉ có thể được thực hiện bởi (Antier Solutions, n.d.):
- Chủ sở hữu NFT
- Người giữ địa chỉ được cho phép bởi NFT - Người được uỷ quyền bởi chủ sở hữu của NFT
Ngồi ra, ERC-721 cịn cung cấp các chức năng khác như kiểm tra lượng token của một tài khoản, lấy thông tin chủ sở hữu của một token cụ thể, cũng như lượng token trên tồn bộ mạng (network). Bên cạnh đó, một chức năng khác cũng được cung cấp là chấp thuận lượng token từ một tài khoản có thể được thực hiện bởi bên thứ ba. Trong trường hợp smart contracts áp dụng những phương thức (methods) và sự kiện (events) kể trên, chúng sẽ được gọi là ERC-721 Non-Fungible Token Contract. Khi được triển khai (deploy) nó sẽ chịu trách nhiệm theo dõi việc tạo ra các tokens trên Ethereum (Ethereum, 2021b).
3.3.3.2. ERC-1155:
Đây là một tiêu chuẩn NFT phổ biến khác được xây dựng bởi Enjin và trở thành một tiêu chuẩn phổ biến cho NFTs. Tiêu chuẩn này có thể được sử dụng để xây dựng cả fungible và non-fungible assets trên Ethereum. Giống với ERC-721, ERC-1155 cũng sử dụng Ethereum network, đảm bảo những tokens được phát triển với tiêu chuẩn này được an tồn, có khả năng truy cứu và được bảo vệ khỏi việc xâm nhập trái phép (Antier Solutions, n.d.).
Bên cạnh khả năng hỗ trợ việc tạo nhiều tài nguyên, nó cũng tiết kiệm chi phí chuyển nhượng. Cùng với đó, nhà phát triển có thể thực hiện chuyển nhượng nhiều tokens sử dụng ERC-1155. Ngoài ra, fungible và non-fungible tokens cũng có thể được đưa vào trong cùng một smart contract khi sử dụng chuẩn này. Nói cách khác, nó hỗ trợ việc trao đổi tokens an tồn và hiệu quả hơn (Antier Solutions, n.d.).
Những tiêu chuẩn ERC-20 và ERC-721 yêu cầu một smart contract riêng phải được triển khai (deployed) cho mỗi loại token (hoặc tập hợp token). Điều này tạo ra nhiều bytecode dư thừa trên Ethereum blockchain và hạn chế nhiều chức năng khi tách mỗi token contract vào một địa chỉ (address) riêng. Với sự phát triển của blockchain games và những nền tảng khác, các nhà phát triển game có thể tạo ra hàng nghìn loại tokens, và ERC-1155 được sinh ra để giải quyết vấn đề đó (Ethereum Improvement Proposals, 2018).
Tiêu chuẩn này nhấn mạnh vào smart contract interface với khả năng thể hiện bất kỳ giá trị số học nào của cả fungible và non-fungible tokens. Nó cho phép mỗi token ID được thể hiện một loại token mới với khả năng thiết lập, có metadata riêng đi kèm với nhiều thuộc tính khác. Nhờ vậy, ERC-1155 mang lại nhiều chức năng mới, chẳng hạn chuyển nhượng nhiều loại token ở cùng một thời điểm, giúp tiết kiệm chi phí chuyển nhượng. Giao dịch với nhiều tokens có thể được xây dựng trên nền tảng là tiêu chuẩn này (Ethereum Improvement Proposals, 2018).
3.4. Solidity:
3.4.1. Giới thiệu về Solidity:
Solidity là một ngơn ngữ lập trình bậc cao (high-level programming language), hướng đối tượng (object-oriented) được tạo ra nhằm phục vụ mục đích xây dựng smart contracts. Smart contracts là những chương trình quản lý hành vi của các tài khoản trong Ethereum (Etherium, 2021a, Solidity definition). Ngôn ngữ này được
phát triển bởi Christian Reitwiessner, Alex Beregazaszi và những đồng sự có đóng góp quan trọng trong sự phát triển của Ethereum (Solidity, 2021).
Đây là ngơn ngữ "curly-bracket", tức là có cú pháp là các khối lệnh được định nghĩa thông qua việc sử dụng những dấu ngoặc trịn hoặc ngoặc kép. Ngồi ra, Solidity là một ngơn ngữ lập trình tĩnh (statically typed), hỗ trợ kế thừa, đa kế thừa, nhiều thư viện cũng như cho phép người dùng tự định nghĩa kiểu dữ liệu. Solidity chạy trên Máy ảo Ethereum (Ethereum Virtual Machine - EVM) (Raheel Zubairy, 2018).
Solidity cho phép lập trình viên xây dựng smart contracts thơng qua rất nhiều công cụ hỗ trợ. Chẳng hạn Remix online, một cơng cụ cho phép lập trình viên dễ dàng lập trình và triển khai smart contracts mà khơng cần cài đặt bất cứ công cụ nào, chỉ cần có kết nối Internet (hoặc cài đặt phiên bản offline để sử dụng trực tiếp trên máy khi khơng có kết nối) (Etherium, 2021b).
Ngồi ra, thơng qua npm/Node.js, Solidity cũng hỗ trợ một trình dịch (Solidity compiler) là solcjs. Đây là một thư viện Node.js, cũng như công cụ command-line cho phép biên dịch các tệp solidity, được viết bằng ngôn ngữ C++. C++ code được biên dịch sang JavaScript sử dụng Emscripten (một trình dịch dịch source code từ C/C++ sang WebAssembly). Trình dịch JavaScript này có thể chạy trên cả trình duyệt web lẫn mơi trường Node.js (Narayan Prusty, 2017).
3.4.2. Solidity Smart Contracts:
Smart contracts dựa trên nền tảng Blockchain là các chương trình máy tính mã hố những thoả thuận giữa các thành viên. Chúng được thực thi trên hệ thống blockchain nếu những điều kiện nhất định được thỏa mãn mà không cần đến sự giám sát của bên thứ ba (M. Alharby et al., 2018). Hay nói cách khác, chính smart contracts là bên thứ ba đáng tin cậy giữa những thành viên tham gia vào đó. Smart
contracts có thể được phát triển và triển khai trên nhiều nền tảng blockchain. Mỗi nền tảng cung cấp những tính năng khác nhau phục vụ việc phát triển smart contracts. Ethereum là một nền tảng blockchain và tiền điện tử (cryptocurrency). Bên cạnh khả năng chuyển và lưu trữ các đơn vị tiền tệ, nó cịn hỗ trợ việc xây dựng và chạy các ứng dụng phức tạp dựa trên nền tảng smart contracts ở blockchain. Có hai loại tài khoản Ethereum: các tài khoản có sở hữu từ bên ngoài (externally owned account) và tài khoản contract (contract account). Những tài khoản có sở hữu từ bên ngồi sử dụng các khoá cá nhân (private key) của chủ sở hữu. Ngồi ra, nó cịn được sử dụng để chuyển tiền hay có tác động lên các smart contracts. Trong khi đó, tài khoản contract được điều khiển bởi smart contracts, có thể được dịch sang dạng bytecode (có thể được đọc bởi máy ảo Ethereum). Mỗi node của Ethereum chạy cùng những câu lệnh giống nhau để thực thi smart contracts và đảm bảo những tính chất của blockchain (M. Alharby et al., 2018).
Smart contracts có thể tự vận hành, gửi sự kiện để kích hoạt việc chuyển đổi trạng thái (state transitions) và gọi hàm. Smart contracts được sử dụng nhiều nhất với Ethereum - blockchain đầu tiên cho phép lập trình (programmable blockchain). Nó cho phép xây dựng smart contracts để thiết lập việc chuyển giao các tài nguyên điện tử, chẳng hạn Ether (Microsoft, n.d.).
Tuy việc Ethereum Virtual Machine (EVM) thực thi code là một phần của smart contracts, nó khơng hiểu được những cấu trúc bậc cao của Solidity. EVM chỉ hiểu được những dòng lệnh bậc thấp (lower-level instructions) gọi là bytecode. Solidity cần một trình biên dịch để chuyển code của nó sang bytecode để EVM có thể hiểu được. Trình biên dịch đó mang tên gọi Solidity compiler (hay solc). Solidity code có đi là .sol (NIELIT, n.d., p.1).
Hình 16. Hình ảnh minh họa Solidity
Contracts trong Solidity giống với khái niệm class trong các ngôn ngữ hướng đối tượng (Object-oriented programming - OOP). Tức mỗi contract có thể có các biến trạng thái, hàm, sự kiện (event), các kiểu cấu trúc (struct types), kiểu enum, v.v. Bên cạnh đó, contract cũng có thể được kế từ các contracts khác. Ngoài ra, các kiểu contracts cũng được hỗ trợ gọi là thư viện (libraries) hoặc interfaces.
Smart contracts có thể hữu dụng trong nhiều ngành cơng nghiệp cũng như quy trình, chẳng hạn như bảo hiểm, bầu cử, chuỗi cung ứng, lưu giữ các bản ghi, thể hiện quyền sở hữu, v.v.
3.4.3. So sánh Solidity và Vyper:
Theo P. Wackerow, smart contracts có thể được lập trình thơng qua các ngơn ngữ tương đối thân thiện với lập trình viên. Trong đó, những ngôn ngữ được sử dụng nhiều nhất, cũng như được nâng cấp và bảo trì thường xuyên là Solidity và Vyper (P. Wackerow, 2021).
Dưới đây là bảng so sánh những thuộc tính quan trọng của hai ngơn ngữ (nền tảng) Solidity và Vyper:
Thuộc tính Solidity Vyper
Phong cách Curly-bracket language (sử dụng các dấu ngoặc tròn và ngoặc nhọn Pythonic programming language (chịu ảnh hưởng từ
để phân tách các thành phần trong code)
Python, phân biệt câu lệnh bằng khoảng cách so với lề trái và việc xuống dòng)
Chịu ảnh hưởng của C++ Python Loại ngôn ngữ Statically typed (kiểu
dữ liệu của biến được xác định ở thời điểm code được biên dịch)
Strong typing (có những luật khắt khe phải được tuân thủ ở thời điểm biên dịch)
Quy mô áp dụng Từ những dự án đơn giản cho đến phức tạp
Các dự án nhỏ với code đơn giản và dễ hiểu Cộng đồng hỗ trợ Cộng đồng hỗ trợ lớn
hơn với nhiều tài nguyên dành cho những người học từ cơ bản đến nâng cao
Hạn chế hơn về tài liệu và cộng đồng
Biên dịch Cùng hỗ trợ biên dịch sang EVM (Etherium Virtual Machine) bytecode
Ưu điểm Hỗ trợ đa dạng các tính năng, bao gồm:
- Kế thừa (kế thừa từ các contracts khác)
- Sử dụng thư viện
Cú pháp đơn giản, đảm bảo contracts được bảo mật tốt và dễ kiểm tra.
(libraries)
- Hỗ trợ các kiểu dữ liệu cho người dùng tự định nghĩa (user-defined types)
Nhược điểm Khơng thể dự đốn kết quả trả về trừ khi thực thi và triển khai (deployed and executed). Do đó, các vấn đề về bảo mật và tràn bộ nhớ (overflow) cũng không được đảm bảo bằng Vyper.
Vyper khơng hỗ trợ nhiều tính năng, như:
- Modifiers - Kế thừa (Inheritance) - Inline assembly - Nạp chồng hàm (Function overloading) - Nạp chồng toán tử (Operator overloading) - Gọi đệ quy (Recursive calling) - Vịng lặp vơ hạn (Infinite-length loops) - Điểm nhị phân (Binary fixed points)