Giới thiệu
Dettery là một ứng dụng xổ số phi tập trung được xây dựng trên Ethereum Sepolia testnet, cung cấp một hệ thống xổ số minh bạch, công bằng và an toàn. Với Dettery, bạn có thể tham gia xổ số một cách dễ dàng và nhận thưởng tự động mà không cần qua bất kỳ trung gian nào.
Tính năng nổi bật
- Bảo mật & Minh bạch
- ✅ Hợp đồng thông minh đã được xác thực - Tất cả hợp đồng đều có thể kiểm tra và xác minh.
- ✅ Ngẫu nhiên từ Block Hash - Sử dụng dữ liệu blockchain để tạo ra sự ngẫu nhiên miễn phí và an toàn.
- ✅ Không có cơ quan trung ương - Hoạt động hoàn toàn phi tập trung.
- ✅ Thanh toán tự động - Người chiến thắng nhận 80%, quản trị viên nhận 20%.
- ✅ Blockchain công khai - Tất cả giao dịch đều minh bạch và có thể xác minh.
Trải nghiệm người dùng
- ✅ Giao diện hiện đại - Thiết kế đẹp mắt và phản hồi tốt với Tailwind CSS.
- ✅ Cập nhật thời gian thực - Không cần làm mới trang để cập nhật xổ số.
- ✅ Tính năng người tham gia - Hiển thị tất cả người tham gia và số lần tham gia của họ.
- ✅ Hỗ trợ nhiều lần tham gia - Người dùng có thể tham gia nhiều lần.
- ✅ Tích hợp ví - Hỗ trợ MetaMask và ví Web3.
Tính năng kỹ thuật
- ✅ TypeScript - Đảm bảo tính an toàn kiểu toàn diện cho ứng dụng.
- ✅ Wagmi & Viem - Công cụ phát triển Ethereum hiện đại.
- ✅ Hardhat - Khung phát triển hợp đồng thông minh chuyên nghiệp.
- ✅ Sepolia Testnet - Đã triển khai và thử nghiệm trên testnet của Ethereum.
- ✅ Cập nhật tự động - Dữ liệu thời gian thực sau giao dịch.
Hướng dẫn nhanh
Yêu cầu trước khi bắt đầu
- Node.js 18+
- npm hoặc yarn
- Ví MetaMask hoặc Web3
- ETH Sepolia (nhận từ faucet)
Cài đặt
- Clone kho lưu trữ
bash
git clone https://github.com/yourusername/dettery.git cd dettery
- Cài đặt phụ thuộc
bash
# Cài đặt phụ thuộc frontend npm install # Cài đặt phụ thuộc hợp đồng thông minh cd contracts npm install cd ..
- Cài đặt môi trường
bash
# Sao chép mẫu môi trường cp contracts/.env.example contracts/.env # Chỉnh sửa contracts/.env với cấu hình của bạn SEPOLIA_RPC_URL=https://ethereum-sepolia.publicnode.com PRIVATE_KEY=your_private_key_here ETHERSCAN_API_KEY=your_etherscan_api_key
- Triển khai hợp đồng thông minh
bash
cd contracts npx hardhat compile npx hardhat run scripts/deploy.ts --network sepolia
- Cập nhật cấu hình Frontend
javascript
// Cập nhật src/lib/config.ts với địa chỉ hợp đồng của bạn export const FACTORY_ADDRESS = 'your_deployed_contract_address';
- Khởi động ứng dụng
bash
npm run dev
- Mở trong trình duyệt
http://localhost:3000
Cách hoạt động
-
Tạo Pool xổ số
- Đặt giá vé và số lượng người chơi tối đa.
- Triển khai một hợp đồng xổ số mới.
- Xổ số sẽ sẵn sàng cho việc tham gia.
-
Tham gia
- Kết nối ví Web3 của bạn.
- Thanh toán giá vé để tham gia.
- Hỗ trợ nhiều lần tham gia cho mỗi người dùng.
-
Chọn người chiến thắng
- Khi xổ số đạt số người chơi tối đa, hệ thống sẽ chờ 2 block để đảm bảo ngẫu nhiên công bằng.
- Sự ngẫu nhiên từ block hash sẽ tự động chọn người chiến thắng.
-
Thanh toán
- Người chiến thắng nhận 80% tổng pool.
- Quản trị viên nhận 20% phí.
- Tất cả giao dịch đều tự động và minh bạch.
Kiến trúc
Hợp đồng thông minh
contracts/
├── Lottery.sol # Logic xổ số cá nhân
├── LotteryFactory.sol # Nhà máy tạo xổ số
└── scripts/
└── deploy.ts # Kịch bản triển khai
Frontend
src/
├── app/ # Next.js App Router
├── components/ # Các thành phần React
│ ├── ConnectWallet.tsx
│ ├── CreateLottery.tsx
│ ├── LotteryCard.tsx
│ └── LotteryList.tsx
└── lib/
└── config.ts # Địa chỉ hợp đồng và ABIs
Cấu hình
Biến môi trường
Tạo file contracts/.env
:
SEPOLIA_RPC_URL=https://ethereum-sepolia.publicnode.com
PRIVATE_KEY=your_private_key_here
ETHERSCAN_API_KEY=your_etherscan_api_key
Địa chỉ hợp đồng
Cập nhật file src/lib/config.ts
:
export const FACTORY_ADDRESS = '0xDE22C7fF7Ac8C7645AfB673a4Ea7087705FE94Ce';
Kiểm thử
Kiểm thử hợp đồng thông minh
cd contracts
npx hardhat test
Kiểm thử Frontend
npm run test
Kiểm thử thủ công
- Kết nối MetaMask với testnet Sepolia.
- Nhận ETH Sepolia từ faucet.
- Tạo pool xổ số.
- Tham gia với nhiều ví.
- Kiểm thử việc chọn người chiến thắng và thanh toán.
Chi tiết hợp đồng thông minh
Hợp đồng xổ số
solidity
contract Lottery {
// Các biến trạng thái chính
uint256 public immutable i_ticketPrice;
uint256 public immutable i_maxPlayers;
address payable public immutable i_admin;
// Trạng thái xổ số
enum LotteryState { OPEN, CALCULATING_WINNER, CLOSED }
LotteryState private s_lotteryState;
// Người tham gia và người chiến thắng
address payable[] public s_players;
address public s_winner;
// Ngẫu nhiên
uint256 public s_commitBlock;
uint256 public s_revealBlock;
Các chức năng chính
enter()
- Tham gia xổ số bằng cách trả giá vé.pickWinner()
- Chọn người chiến thắng bằng sự ngẫu nhiên từ block hash.getPlayers()
- Lấy danh sách tất cả người tham gia.getLotteryState()
- Lấy trạng thái xổ số hiện tại.
Tính năng bảo mật
Ngẫu nhiên
- Sử dụng
blockhash()
,block.timestamp
, vàblock.prevrandao
. - Cam kết với block ngẫu nhiên, tiết lộ sau 2 block.
- Ngăn chặn việc thao túng và đảm bảo tính công bằng.
Kiểm soát quyền truy cập
- Chỉ người tham gia xổ số mới có thể kích hoạt việc chọn người chiến thắng.
- Quản trị viên không thể thao túng kết quả.
- Tất cả các chức năng đều công khai và có thể kiểm tra.
Minh bạch
- Tất cả dữ liệu xổ số đều công khai.
- Mã nguồn hợp đồng đã được xác minh.
- Tất cả giao dịch đều trên chuỗi.
Triển khai
Testnet Sepolia (Hiện tại)
- Địa chỉ hợp đồng nhà máy:
0xDE22C7fF7Ac8C7645AfB673a4Ea7087705FE94Ce
- Mạng: Ethereum Sepolia
- RPC:
https://ethereum-sepolia.publicnode.com
Triển khai Mainnet
- Cập nhật biến môi trường.
- Triển khai lên mainnet.
- Xác minh hợp đồng trên Etherscan.
- Cập nhật cấu hình frontend.
Tham gia phát triển
Chúng tôi hoan nghênh sự đóng góp! Vui lòng xem Hướng dẫn đóng góp của chúng tôi để biết thêm chi tiết.
Thiết lập phát triển
- Fork kho lưu trữ.
- Tạo một nhánh tính năng.
- Thực hiện thay đổi của bạn.
- Thêm các bài kiểm tra nếu có.
- Gửi pull request.
Giấy phép
Dự án này được cấp phép theo Giấy phép MIT - xem file LICENSE để biết thêm chi tiết.
Hỗ trợ
- Vấn đề: GitHub Issues
- Thảo luận: GitHub Discussions
- Tài liệu: Wiki
Cảm ơn
- Hardhat - Khung phát triển hợp đồng thông minh.
- Next.js - Khung React.
- Wagmi - React hooks cho Ethereum.
- Viem - Giao diện TypeScript cho Ethereum.
- Tailwind CSS - Khung CSS.
Lộ trình
- Triển khai Mainnet.
- Ứng dụng di động (React Native).
- Các nhà cung cấp ngẫu nhiên bổ sung.
- Các loại xổ số và chủ đề.
- Token quản trị.
- Hỗ trợ đa chuỗi.