Nghiên cứu lập trình ứng dụng xổ số trên nền tảng công nghệ Blockchain sử dụng hợp đồng thông minh Solidity

MỤC LỤC

Phương pháp nghiên cứu

Kiểm Thử và Đánh Giá: Thực hiện các bài kiểm thử đơn vị và tích hợp sâu, sử dụng các công cụ như Chai Matchers, để đánh giá và đảm bảo tính chính xác, hiệu suất, và độ tin cậy của hợp đồng thông minh. Nghiên Cứu và Phát Triển Công Nghệ Blockchain: Mục tiêu rộng lớn hơn là tăng cường hiểu biết và kỹ năng về blockchain và các ứng dụng của nó, mở đường cho các nghiên cứu và phát triển tương lai trong lĩnh vực này.

Xây dựng hợp đồng thông minh

Lập trình phát triển hợp đồng thông minh sử dụng Solidity, tích hợp Chainlink VRF và Keepers. Kiểm thử hợp đồng thông minh sử dụng Chai Matchers và các công cụ kiểm thử khác.

Triển khai và đánh giá

Tiếp tục quản lý và duy trì ứng dụng và hợp đồng thông minh sau khi chúng đã được triển khai.

Chuẩn bị tài liệu và báo cáo

Mục tiêu đề tài

Phản hồi người dùng: Thu thập và phân tích phản hồi từ người dùng về giao diện và trải nghiệm sử dụng tổng thể. Kiểm thử: Thực hiện Unit Test và Staging Test để đảm bảo tính ổn định và chính xác của ứng dụng.

Ethereum [2]

Ethereum là nền tảng điện toán phân tán, mã nguồn mở dựa trên công nghệ chuỗi khối (blockchain) có khả năng thực thi hợp đồng thông minh (smart contract) - tức là điều khoản được ghi trong hợp đồng sẽ được thực thi một cách tự động khi các điều kiện trước đó được thỏa mãn, không ai có thể can thiệp vào. Ethereum là một dự án Blockchain Layer 1 cho phép nhiều lập trình viên xây dựng ứng dụng phi tập trung (DApps) và tổ chức tự trị phi tập trung (DAOs). Ứng dụng phi tập trung (DApps - Decentralized Application) là phần mềm được triển khai độc lập, không nằm trên một máy chủ duy nhất mà được lưu trữ một cách phân tán trên kho lưu trữ phi tập trung và có thể được viết bằng bất kỳ ngôn ngữ nào.

Tổ chức tự trị phi tập trung (DAOs - Decentralized Autonomous. Organizations) là tổ chức được vận hành bởi các thành viên dựa trên một bộ quy tắc được mã hóa bằng code. Bằng cách sử dụng hợp đồng thông minh, A có thể xác định một độc lập các điều kiện xác thực thỏa thuận này, thay vì tin tưởng vào một người trung gian môi giới. Do đó, hợp đồng thông minh cung cấp một hệ thống không cần sự tin cậy giữa 2 bên, trong đó A hoặc B không cần phải lo lắng về rủi ro của đối tác.

Tại đây, A và B cũng không cần phải trả thêm khoản chi phí nào cho dịch vụ trung gian hoặc ký quỹ trước khi họ có thể thực hiện giao dịch ngang hàng (P2P).

Ngôn ngữ lập trình Solidity [3]

Đây là một ngôn ngữ lập trình cấp cao, được dành cho những lập trình viên muốn xây dựng các ứng dụng trên nền tảng Ethereum. Với sự kết hợp linh hoạt giữa chữ cái và số, Solidity giúp các nhà phát triển viết chương trình một cách dễ dàng hơn. - Debug dễ dàng hơn: Với Hardhat, chúng ta có thể debug code Solidity dễ dàng hơn khi có thể console.log ra các biến (Solidity vốn ko hỗ trợ.

Chai là một thư viện kiểm thử (testing library) cho JavaScript, cung cấp khả năng so sánh dựa trên cú pháp gần gũi với ngôn ngữ tự nhiên thông qua các hàm kiểm tra (assertions) để đánh giá tính đúng đắn của mã. Khi phát triển hợp đồng thông minh, việc kiểm thử là một phần không thể thiếu để đảm bảo rằng logic kinh doanh được thực hiện chính xác và không có lỗ hổng an ninh. @nomicfoundation/hardhat-chai-matchers, cho phép sử dụng các hàm kiểm tra của Chai cùng với các thêm vào (matchers) đặc biệt phục vụ cho việc kiểm thử hợp đồng thông minh.

Các matchers này giúp so sánh các đối tượng như BigNumbers, địa chỉ Ethereum, và sự kiện (events) một cách thuận tiện hơn.

React [5]

  • Các tính năng của NextJS 1. Routing

    - Refs và DOM: Ref cho phép chúng ta truy cập đến DOM node, giúp chúng ta tham chiếu đến 1 node để sử dụng các thuộc tính và action của chúng. NextJS là framework mã nguồn mở được xây dựng trên nền tảng của React, cho phép chúng ta xây dựng các trang web tĩnh có tốc độ siêu nhanh và thân thiện với người dùng, cũng như xây dựng các ứng dụng web React. Sự kết hợp của các tính năng như Server-side Rendering (SSR) với Static Site Generation (SSG) đã giúp NextJS trở thành sự lựa chọn hấp dẫn cho nhiều dự án phát triển ứng dụng web.

    - Khi user truy cập vào một trang web, trình duyệt sẽ gửi request tới server - Server sẽ nhận request, truy cập vào dữ liệu trong database, render ra HTML - Trả HTML kèm với CSS, JS về cho browser. - Tốt cho SEO vì dữ liệu được render dưới dạng HTML (bạn ấn chuột phải chọn View Page Source một trang web bất kì là sẽ thấy điều này), giúp cho bot của Google khi quét sẽ thấy được toàn bộ dữ liệu. - Lập trình viên chỉ cần code trên 1 project là đã có thể tạo ra trang web hoàn chỉnh có cả Frontend lẫn Backend, không cần tách ra làm 2 project.

    Điều này giúp cải thiện hiệu suất tải trang và cung cấp trải nghiệm người dùng tốt hơn vì nội dung được lấy từ file html và hiển thị ngay lập tức mà không cần đợi việc tải về từ phía server.

    Ethers.js [7]

    Ngoài ra cũng có thể sử dụng các thư viện CSS-in-JS như Styled-Components để viết trực tiếp css vào code. NextJS cũng hỗ trợ sử dụng cùng các CSS framework như TailwindCSS, Bootstrap hoặc MaterialUI. - Kết nối với Ethereum nodes thông qua nhiều provider như JSON-RPC, INFURA, Etherscan, Alchemy, Cloudflare, MetaMask.

      Tương tác với hợp đồng thông minh

        Giao tiếp hệ thống. o Giao tiếp giữa front-end và smart contract thông qua các cuộc gọi hàm được thực hiện bằng thư viện Web3. o Front-end được cập nhật thông tin từ smart contract một cách động và thời gian thực, phản ánh các thay đổi trong hợp đồng và trạng thái của Lottery. người đầu tiên tham gia, từ người thứ 2 tham gia thời gian vẫn tiếp tục chứ không reset). Kiểm trả trạng thái hiện tại của xổ số (có 2 trạng thái OPEN và CALCULATING).

        Quy trình tự động của hợp đồng khi sử dụng dịch vụ của Chainlink

          Raffle__UpkeepNotNeeded, ngược lại trả về TRUE thì hợp đồng sẽ kích hoạt hàm performUpkeep hợp đồng chuyển qua trạng thái CALCULATING và sẽ bắt đầu quy trình VRF để yêu cầu số ngẫu nhiên (RequestRandomWords) và gửi 1 Event. Hàm này sẽ gửi toàn bộ tiền trong hợp đồng cho người chiến thắng bất kì dựa vào randomWords sau đó reset hợp đồng và gửi 1 Event WinnerPicked.

          THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG 4.1. Danh sách màn hình

          • Mô tả chi tiết các màn hình 1. Màn hình Home
            • Triển khai ứng dụng 1. Môi trường triển khai

              Điều này đã cho phép mô phỏng một mạng Ethereum, cung cấp khả năng triển khai, thực hiện các giao dịch và tương tác với hợp đồng thông minh mà không cần tiêu tốn gas thực. Việc triển khai hợp đồng thông minh lên một môi trường thử nghiệm công cộng đã được thực hiện thành công và đã được xác minh thông qua Etherscan, mở đường cho các tương tác và kiểm thử giao dịch trực tiếp. Kiểm tra toàn bộ quá trình của hợp đồng từ khi có người tham gia đến khi kết thúc, khi kết thúc sẽ chọn ra được người chiến thắng, khởi tạo lại và gửi đủ tiền cho người chiến thắng.

              Từ kiểm thử đơn vị tới kiểm thử môi trường thử nghiệm, mọi chức năng của hợp đồng đã hoạt động như mong đợi, xác nhận sự sẵn sàng của hệ thống cho việc triển khai chính thức. - Nâng Cao Kiến Thức: Quá trình phát triển và kiểm thử hợp đồng thông minh đã tăng cường hiểu biết về blockchain, smart contracts, và các dịch vụ như Chainlink VRF và Keepers. - Mô Phỏng Chainlink VRF và Keepers: Trong quá trình kiểm thử đơn vị, việc mô phỏng chính xác hành vi của Chainlink VRF và Chainlink Keepers trên môi trường phát triển như Hardhat không phải lúc nào cũng đơn giản.

              - Xử Lý Trường Hợp Ngoại Lệ: Phát hiện và xử lý các trường hợp ngoại lệ trong hợp đồng thông minh đòi hỏi sự chú ý đến từng chi tiết và khả năng dự đoán các kịch bản không mong muốn, điều này làm tăng độ phức tạp của quá trình kiểm thử. - Tích hợp với Môi Trường Staging Thực Tế: Kiểm thử trên mạng thử nghiệm với các dịch vụ thực của Chainlink đòi hỏi việc cấu hình chính xác và quản lý tài nguyên như ETH và LINK cho các giao dịch và xác thực. - Phản Ứng Thời Gian Thực: Trong kiểm thử staging, việc đảm bảo rằng các sự kiện và giao dịch được xử lý trong thời gian thực là một thách thức, đặc biệt khi xét đến độ trễ mạng và thời gian khai thác block.