Hình ảnh minh họa cho chức năng swap trong metamask

Một phần của tài liệu Xây dựng game nuôi thú ảo ứng dụng công nghệ blockchain (Trang 80 - 91)

Đặc điểm của Swaps trong MetaMask:

- Dễ dàng tìm được giá tốt nhất: Swaps đảm bảo người dùng có thể tiếp cận được với nhiều loại tokens và giá cả của chúng, bằng cách cung cấp giá được tổng hợp từ nhiều công ty và những nhà sáng tạo độc lập. Phí dịch vụ là 0.875% được tính tự động vào mỗi lần báo giá (MetaMask, 2021b).

- Giảm giá gas: thực hiện theo hình thức bán giá cố định (fix-price) được nêu rõ trong mục EIP – 1559 (MetaMask, 2021b).

- Ít phê duyệt: chỉ phê duyệt mỗi Token một lần để có quyền truy cập vào tất cả thanh khoản có sẵn trên DeFi, giảm thời gian và chi phí gas (MetaMask, 2021b).

- Ngăn chặn trượt giá: những giao dịch hoán đổi lớn thường bị biến động giá mạnh khi không có đủ thanh khoản trên một sàn phi tập trung (DEX – Decentralized Exchange) cụ thể. Khi hoán đổi trên MetaMask, các giao dịch sẽ được trải rộng trên hầu như tất cả các DEX để giảm tác động trượt giá lên giá cuối cùng (MetaMask, 2021b).

3.6.2.2. EIP – 1559 3.6.2.2.1. Định nghĩa

EIP – 1559 (Ethereum Improvement Proposals - 1559) làm thay đổi cơ chế thị trường của Ethereum trong việc thanh tốn phí giao dịch. Về cơ bản, EIP – 1559 loại bỏ hình thức bán theo giá ưu tiên (first-price) thay vào đó là hình thức bán giá cố định (fix-price). Ý nghĩa của sự thay đổi này là người giao dịch sẽ khơng phải đốn nhiều về lượng gas cần thiết vì sẽ có một khoảng phí cơ sở (fee base) rõ ràng để thực hiện giao dịch. Đối với người dùng hoặc ứng dụng muốn ưu tiên giao dịch của họ, họ có thể thêm “tiền boa” để trả cho thợ đào (MetaMask, 2021c).

3.6.2.2.2. Phí giao dịch

MetaMask cung cấp ba lựa chọn cài đặt gas fee (MetaMask, 2021c):

- High: lựa chọn tốt nhất cho Swaps hoặc những giao dịch được thực hiện trong thời điểm nhạy cảm (nhiều người giao dịch).

- Medium: Lựa chọn này tốt cho việc gửi tiền, rút tiền hoặc vào những thời điểm không quá nhạy cảm (nhiều người giao dịch) của những giao dịch quan trọng.

- Low: Phí gas thấp chỉ nên sử dụng cho giao dịch khơng q quan trọng. Với phí gas thấp khó đốn trước được giao dịch có thể thành cơng.

Ngồi những tùy chọn phí gas sẵn có, người dùng có thể tùy chỉnh giới hạn số gas, phí ưu tiên và phí gas trong mục cài đặt lựa chọn nâng cao (Advanced Options setting) (MetaMask, 2021c).

Phí gas được xác định bằng độ đầy của khối. EIP – 1559 thiết lập tỷ giá thị trường cho các giao dịch và cho phép Ethereum tăng gấp đôi không gian khối (blockspace) (bằng việc tăng giới hạn gas cho một khối từ 12.5M đến 25M). Sau đó nó chọn mục tiêu các khối chỉ đầy 50% (MetaMask, 2021c).

Khi mạng lưới sử dụng nhiều hơn 50%, phí cơ sở sẽ tăng. Ngược lại, khi mạng lưới sử dụng ít hơn 50%, phí cơ sở sẽ giảm (MetaMask, 2021c).

3.7. Truffle: 3.7.1. Tổng quan: 3.7.1. Tổng quan:

Về cơ bản, các ứng dụng phi tập trung (decentralized applications hay dApps) là những đoạn code có khả năng chạy trên môi trường blockchain. Blockchain tương tự danh sách liên kết phân tán (decentralized linked list). Tuy có nhiều lợi thế nhờ tính phân tán và khó bị phá huỷ (crash), blockchain nhìn chung vẫn là một hệ thống phân tán phức tạp với mật mã hình cong elliptic (elliptical curves), thuật toán băm (hashing algorithms), cơ chế đồng thuận (concesus mechanisms), v.v. Vì vậy, Truffle ra đời với sứ mệnh hỗ trợ lập trình viên trong việc xây dựng những ứng dụng kiểu này và triển khai (deploy) trên Ethereum blockchain (S. J. Lyons, 2021).

Truffle là một công nghệ được ra đời với giấy phép MIT (MIT license) với tuyên bố “Truffle là một môi trường phát triển, kiểm thử framework và luồng dữ liệu cho Ethereum, với mục đích giúp cuộc sống của các lập trình viên Ethereum trở nên dễ dàng hơn.” Tóm lại, Truffle là một mơi trường phát triển giúp đơn giản hố việc đưa smart contracts lên Ethereum blockchain (S. J. Lyons, 2021).

Nhìn chung, Truffle là mơi trường phát triển, kiểm thử và quản lý tài nguyên tuyệt vời cho các ứng dụng blockchain sử dụng máy ảo Ethereum (Ethereum Virtual Machine - EVM). Nhà phát triển sẽ nhận được những lợi ích cụ thể sau khi tích hợp Truffle vào quy trình phát triển ứng dụng của mình (Truffle Suite, n.d.-a):

● Biên dịch (compile) smart contract, kết nối, triển khai và quản lý nhị phân (binary management) tích hợp.

● Tự động hoá việc kiểm thử contract và xây dựng ứng dụng nhanh (rapid development).

● Có một framework với khả năng lập trình, triển khai mở rộng (extensible deployment) và tích hợp.

● Công cụ quản lý mạng để triển khai đến bất kỳ mạng blockchain nào (kể cả private và public).

● Quản lý gói tin (package management) với EthPM và NPM, sử dụng tiêu chuẩn ERC190 (ERC190 standard).

● Bảng điều khiển (console) hỗ trợ việc giao tiếp trực tiếp giữa các contracts.

● Khả năng xây dựng tiến trình build (build pipeline), hỗ trợ tích hợp chặt chẽ.

● Trình chạy code hỗ trợ việc thực thi (execute) code trong môi trường Truffle.

Truffle giúp quy trình biên dịch và tích hợp code vào blockchain trở nên tự động và dễ dàng hơn. Chỉ với vài câu lệnh đơn giản, người dùng đã có thể cài đặt và sử dụng Truffle. Truffle chứa ba thư mục quan trọng, tập trung vào xây dựng, kiểm thử và tích hợp, giúp đơn giản hố việc phát triển dApp. Bên cạnh đó, tệp tin cấu hình và bảng điều khiển (console) cũng đóng vai trị quan trọng trong việc lựa chọn phiên bản và tương tác với blockchain. Khơng chỉ vậy, mơi trường Truffle cịn giúp nhà phát triển quản lý và tự động hố nhiều tiến trình, cài đặt các công nghệ khác và lưu trữ thư viện của mình (S. J. Lyons, 2021).

3.7.2. Các thành phần của Truffle: 3.7.2.1. Smart contracts: 3.7.2.1. Smart contracts:

Đây là một thành phần quan trọng trong bất kỳ dự án blockchain nào. Smart contracts thường được viết bằng ngôn ngữ Solidity với các lớp (classes), đối tượng (objects), hàm (functions),. v.v.

3.7.2.2. Thư mục Truffle (Truffle folder):

Trong thư mục Truffle, có ba thư mục (Contracts, Migration, Test) đóng vai trị quan trọng trong việc xây dựng dApps (ứng dụng phi tập trung) và một tập tin cấu hình (configuration file) là Truffle-config.js. Trong đó, thư mục Contracts chứa tất cả smart contracts (Solidity). Trong khi đó, thư mục Migrations có khả năng thay đổi trạng thái của dApp, và migration.sol hỗ trợ theo dõi những thay đổi này. Bên cạnh đó, Migrations cũng giúp nhà phát triển đưa smart contracts của mình vào blockchain, hay triển khai vào một môi trường tương tự Blockchain là Ganache (S. J. Lyons, 2021).

Ganache là mạng lưới blockchain cá nhân (personal blockchain) phục vụ cho việc phát triển ứng dụng Ethereum và Corda trong thời gian ngắn. Nhà phát triển có thể sử dụng Ganache xun suốt vịng đời phát triển ứng dụng, cho phép nhà phát triển xây dựng, triển khai và kiểm tra dApps trong một mơi trường an tồn, rõ ràng. Nhà phát triển có thể sử dụng Ganache dưới dạng UI hoặc CLI. Trong khi Ganache UI là ứng dụng máy tính hỗ trợ cả cơng nghệ Ethereum và Corda, ganache-cli (command line tool) phục vụ cho việc phát triển ứng dụng Ethereum. Không chỉ vậy, Ganache còn hỗ trợ cả ba nền tảng máy tính phổ biến nhất hiện nay là Windows, MacOS và Linux (Truffle Suite, n.d.-b)

Sau khi biên dịch và triển khai smart contracts, nhà phát triển cần phải trải qua bước quan trọng tiếp theo - kiểm thử (testing). Thư mục Test chứa các tập tin để kiểm thử ứng dụng của người dùng. Việc kiểm thử trở nên đơn giản hơn nhiều nhờ Truffle. Ở thời điểm hiện tại, Truffle hỗ trợ kiểm thử với các tập tin: .js, .ts, .es, .es6, .jsx và .sol (S. J. Lyons, 2021).

3.7.2.3. Truffle console (Bản điều khiển Truffle):

Truffle có một tính năng duy nhất và ấn tượng là cơng cụ bảng điều khiển dòng lệnh (command line tool) (S. J. Lyons, 2021). Đây là một cơng cụ mạnh mẽ, tích hợp chuyên sâu vào hệ thống của Truffle, giúp nhà phát triển tận dụng triệt để khả năng của Truffle trong việc xây dựng, triển khai và kiểm thử ứng dụng của mình.

3.8. Thư viện web3.js:

Thư viện web3.js là một thư viện JavaScript mã nguồn mở (GNU Lesser General Public License phiên bản 3) được xây dựng bởi Ethereum Foundation, bao gồm các chức năng giao tiếp với các nút Ethereum thông qua giao thức JavaScript Object Notation – Remote Procedure Call (JSON-RPC) . Nói cách khác, nó là một thư viện JavaScript hỗ trợ các nhà phát triển tương tác với chuỗi khối Ethereum (Web3.js, 2021a).

Web3.js có một lớp chính được gọi là web3. Hầu hết các chức năng của thư viện có thể được tìm thấy trong danh mục này. 5 mơ-đun quan trọng khác tạo nên web3.js là:

● web3-eth

● web3-bzz

● web3-net

● Web3-personal

● web3-utils

Web3-eth: chứa các chức năng cho phép người dùng web3.js tương tác với chuỗi khối Ethereum. Cụ thể, các chức năng này có thể tương tác với các hợp đồng thông minh, tài khoản thuộc sở hữu bên ngoài, các nút, khối được khai thác và các giao dịch (Web3.js, 2021c).

Web3-shh: cho phép tương tác với giao thức Whisper. Whisper Là một giao thức truyền thơng điệp, mục đích của nó là truyền thông điệp dễ dàng và truyền thông không đồng bộ mức thấp (Web3.js, 2021b).

Web3-bzz: cho phép tương tác với Swarm. Swarm là một nền tảng lưu trữ phi tập trung và dịch vụ phân phối nội dung có thể được sử dụng để lưu trữ các tệp như hình ảnh hoặc video cho các ứng dụng phi tập trung (Web3.js, 2021e).

Web3-net: cho phép tương tác với các thuộc tính mạng của các nút Ethereum (Web3.js, 2021f).

Web3-utils: cung cấp các chức năng tiện ích, có thể được sử dụng trong các ứng dụng phi tập trung Ethereum và các mô-đun web3.js khác. Các chức năng tiện ích có thể được sử dụng lại, giúp việc viết mã dễ dàng hơn. Web3-utils chứa các hàm tiện ích để chuyển đổi số, xác minh xem các giá trị có đáp ứng các điều kiện nhất định hay khơng và tìm kiếm tập dữ liệu (Web3.js, 2021d).

3.9. Giải thuật di truyền (genetic algorithm): 3.9.1. Tổng quan về giải thuật di truyền: 3.9.1. Tổng quan về giải thuật di truyền:

Giải thuật di truyền (Genetic Algorithm) là các thuật tốn tìm kiếm phỏng đốn (heuristic search algorithms), được dựa trên ý tưởng về chọn lọc tự nhiên và mã gene. Đó là những chiến lược tìm kiếm dựa trên dữ liệu trong quá khứ để tìm kết quả tốt hơn trong không gian nghiệm. Giải thuật di truyền thường được sử dụng để đưa ra những lời giải với chất lượng cao cho các bài toán tối ưu và tìm kiếm (GeeksforGeeks, 2021).

Giải thuật di truyền là một kỹ thuật tìm kiếm được lấy cảm hứng từ thuyết tiến hố của Charles Darwin (V. Mallawaarachchi, 2017), là một phương thức tối ưu để giải các bài toán tối ưu phi tuyến tính (non-linear optimisation problems) hoạt động tương đối giống với di truyền sinh học (Springworks Blog, 2017). Giải thuật này phản ánh quá trình chọn lọc tự nhiên với các cá thể phù hợp nhất được lựa chọn để nhân giống (reproduction) nhằm sản sinh ra thế hệ tiếp theo (V. Mallawaarachchi, 2017).

Giải thuật di truyền mơ phỏng q trình chọn lọc tự nhiên, điều đó có nghĩa là những lồi có thể thích ứng với thay đổi về mơi trường sống mới có khả năng tồn tại và tiếp tục sinh sôi đến thế hệ tiếp theo. Nói cách khác, chúng mơ phỏng sự tồn tại của giải pháp tối ưu giữa các thành phần độc lập (cá thể) trong những thế hệ liên tiếp nhau trong quá trình giải quyết vấn đề. Mỗi thế hệ tồn tại một lượng cá thể nhất định, và mỗi cá thể được thể hiện dưới dạng một điểm trong không gian tìm kiếm (và lời giải tiềm năng - possible solution). Mỗi cá thể trong thuật toán mã gen là một chuỗi

kí tự, số nguyên, số hữu tỉ, v.v. có thể được coi như nhiễm sắc thể (GeeksforGeeks, 2021).

Quá trình chọn lọc tự nhiên bắt đầu với việc chọn lọc những cá thể phù hợp nhất trong toàn bộ các cá thể. Chúng sẽ sản sinh ra lứa tiếp theo kế thừa các tính chất của bố mẹ. Bố mẹ càng khoẻ, con của chúng sẽ càng khoẻ, và do đó, có nhiều cơ hội hơn để sống. Quá trình này tiếp tục lặp lại cho đến khi thế hệ với những cá thể tốt nhất được tìm thấy (V. Mallawaarachchi, 2017). Các genes trong cơ thể chứa protein và các nhân tố khác, trong khi đó, giải thuật di truyền biểu diễn chúng dưới dạng những

con số (Springworks Blog, 2017).

Giải thuật di truyền trải qua 5 giai đoạn (V. Mallawaarachchi, 2017):

● Giai đoạn 1: Initial population (Quần thể nguyên thuỷ): Đây là khởi đầu của quá trình với tập các cá thể gọi là Quần thể (Population). Mỗi cá thể là một nghiệm cho bài toán cần giải, được phân loại bởi một tập các tham số (hay còn gọi là Genes). Những tham số này được kết nối thành một chuỗi để tạo thành nhiễm sắc thể (chromosome). Trong giải thuật di truyền, một tập các genes của một cá thể được biểu diễn dưới dạng chuỗi ký tự (string) là các chữ cái hoặc những giá trị nhị phân.

● Giai đoạn 2: Fitness Function: Xác định độ thích hợp của một cá thể (khả năng cạnh tranh của một cá thể với các cá thể khác) với kết quả trả về được gọi là fitness score. Xác suất một cá thể được chọn để nhân giống được tính tốn dựa trên giá trị này.

● Giai đoạn 3: Selection (Chọn lọc): Đây là giai đoạn chọn ra các cá thể phù hợp nhất để truyền genes của chúng cho thế hệ sau. Dựa trên giá trị fitness

score được tính ở trên, hai cá thể với số điểm cao nhất có nhiều cơ hội hơn để được chọn cho quá trình nhân giống.

● Giai đoạn 4: Crossover (Lai giống): Giai đoạn này có thể được coi như giai đoạn quan trọng nhất trong giải thuật di truyền. Ở đây, khi mỗi cặp bố mẹ giao phối, một điểm giao (crossover point) được chọn ngẫu nhiên từ genes. Lứa sau sẽ được tạo dựa trên việc thay đổi các genes của bố mẹ đến khi đạt điểm giao được chọn.

● Giai đoạn 4: Mutation (Đột biến): Khi lứa con được tạo thành, một số trong các genes của chúng có thể bị đột biến (với xác suất thấp). Hay nói cách khác, một số giá trị trong chuỗi có thể bị lật ngược. Đây là nhân tố quan trọng trong việc đảm bảo độ đa dạng trong quần thể và tránh tiến hoá hội tụ sớm (premature convergence).

Về cơ bản, những đối tượng trong MyPuppies là một chuỗi số nguyên dương 256-bit thể hiện mã gen. Việc xử lý mã gen đó (để hiển thị cho người chơi) hiện tại được thực hiện ở phía client của game.

3.9.2. Một số khái niệm trong giải thuật di truyền: 3.9.2.1. Khơng gian tìm kiếm (search space): 3.9.2.1. Khơng gian tìm kiếm (search space):

Quần thể các cá thể được duy trì trong khơng gian tìm kiếm. Mỗi cá thể đại diện cho một lời giải trong khơng gian tìm kiếm cho một vấn đề được đưa ra. Mỗi cá thể được thiết kế dưới dạng một vector có độ dài hữu hạn (tương tự nhiễm sắc thể) các phần tử. Những biến trong đó cũng có thể được hình dung giống các gen. Do đó, một nhiễm sắc thể (của một cá thể) được cấu thành từ nhiều gen (các biến bên trong).

Hình 30. Hình ảnh minh họa cho khơng gian tìm kiếm (search space)

3.9.2.2. Fitness score:

Fitness score (tạm dịch là “điểm đánh giá tính thích nghi”) được dành cho các cá thể, đánh giá khả năng cạnh tranh của cá thể đó. Bài tốn sẽ đi tìm cá thể có fitness score tối ưu (hoặc gần như tối ưu).

Giải thuật di truyền lưu giữ quần thể của n cá thể (có thể được coi như các nhiễm sắc thể hay nghiệm) cùng với fitness score của chúng. Các cá thể có fitness score cao hơn có nhiều cơ hội tái sinh hơn phần cịn lại. Những cá thể có fitness score cao được chọn để phối giống và sản sinh ra thế hệ sau tốt hơn bằng cách kết hợp nhiễm sắc thể của bố mẹ. Kích thước quần thể khơng có khả năng mở rộng, do đó, một số cá thể phải chết đi để nhường chỗ cho các cá thể mới cho đến khi cơ hội phối giống ở quần thể cũ đã cạn kiệt. Thuật tốn này có kỳ vọng là qua những thế hệ nối tiếp nhau, lời giải tốt hơn sẽ xuất hiện, trong khi những lời giải không tốt sẽ mất dần.

Mỗi thế hệ mới có các gen trung bình tốt hơn các cá thể (nghiệm) của thế hệ trước đó. Do đó, các thế hệ mới có nghiệm riêng tốt hơn thế hệ trước đó. Một khi thế hệ con khơng thể sản sinh ra các cá thể có sự khác biệt rõ ràng với thế hệ trước, quần thể đã đi về điểm hội tụ. Khi đó, có thể nói thuật tốn đã đi về điểm hội tụ với một tập các nghiệm cho bài toán.

3.9.2.3. Các toán tử (operators) trong giải thuật di truyền:

Một khi thế hệ ban đầu được khởi tạo, thuật toán phát triển lên các thế hệ tiếp theo nhờ vào các toán tử sau:

- Toán tử chọn lọc (selection operator): chọn ra những cá thể với fitness scores

Một phần của tài liệu Xây dựng game nuôi thú ảo ứng dụng công nghệ blockchain (Trang 80 - 91)

Tải bản đầy đủ (PDF)

(141 trang)