尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗DApp quản lý vé sự kiện chống vé giả và hạn chế đầu cơ.
Nhóm xây nền tảng vé sự kiện cho người tham dự và ban tổ chức để chống vé giả, hạn chế đầu cơ và đảm bảo mỗi vé chỉ được check-in một lần.
Vé sự kiện giới hạn bán lại.
DApp công khai: https://hce-event-ticket-k57-git-main-nguyenhoangthao.vercel.app
Contract chính: contracts/project/ProjectCore.sol (Solidity ^0.8.20).
Cách 1 — Remix (dùng trong lớp):
ProjectCore.sol.0.8.20 trở lên → Compile.createEvent(name, startTime, maxResaleBps, maxPerWallet) (VD 11000, 4 = trần 110%, tối đa 4 vé/ví; 0 = không giới hạn) → createTier(eventId, name, price, maxSupply) → mintTicket(tierId) kèm value đúng giá hạng vé → listForResale(ticketId, price) / buyResaleTicket(ticketId) để thử bán lại → setStaff(eventId, víCTV, true) (Organizer cấp quyền CTV) → checkIn(eventId, ticketId) (Organizer hoặc CTV) → cancelResale(ticketId) nếu muốn gỡ rao bán → withdrawProceeds().Cách 2 — biên dịch nhanh bằng dòng lệnh (kiểm tra không lỗi cú pháp, không deploy):
npx solc --bin --abi contracts/project/ProjectCore.sol
Kiểm thử tự động (ca hợp lệ + ca vi phạm quy tắc R3): xem evidence/lab-11/resale.test.js và log kết quả tại evidence/lab-11/test-log.txt.
web/) — kết nối Sepolia✅ Đang dùng hợp đồng v4 (27/10/2026): Organizer tự đặt trần giá bán lại (100–200%, mặc định 110%) và số vé tối đa mỗi ví cho từng sự kiện; hợp đồng tự chặn mua vé mới sau giờ bắt đầu; mỗi lần bán lại trả 5% phí bản quyền cho Organizer. Giữ nguyên CTV soát vé, chặn vé sai sự kiện, gỡ rao bán từ v3. Test 19/19 + giao diện 28/28:
evidence/lab-15-v4/. Địa chỉ cũ không dùng nữa: v30x7c574216844854C04878B41D68d58F50a54cA0AF, v20x0f96cafe4C603D706c786C503A5c903090706916(dữ liệu demo 13–20/10 nằm lại ở đó), v10x09967aeeb595236e74BD5F283a9Ff1960e695AF2.
| Thành phần | Giá trị của nhóm |
|---|---|
| Địa chỉ contract | 0x0845EEB1Ed93C373173680a859fB255f168b9Fd0 (Sepolia, v4 — deploy tại 0x69af8ed8…, khối 12004619) |
| ABI lấy từ đâu | Remix → tab Solidity Compiler → biên dịch contracts/project/ProjectCore.sol → nút ABI (copy). Bản lưu sẵn để đối chiếu: web/ProjectCore.abi.json |
Hàm đọc không tốn phí (view, không cần ký ví) | nextEventId(), nextTierId(), nextTicketId(), ROYALTY_BPS(), events(id) (gồm maxResaleBps, maxPerWallet), mintedBy(eventId, ví), tiers(id), tickets(id), isStaff(eventId, ví), pendingWithdrawals(address) |
| Hàm ghi cần xác nhận ví (gửi transaction, tốn gas) | createEvent(), createTier() (Organizer), mintTicket() (ai cũng gọi được), listForResale(), cancelResale(), buyResaleTicket(), setStaff() (Organizer), checkIn() (Organizer hoặc CTV), withdrawProceeds() |
Mô hình mới: Organizer tạo sự kiện rồi tạo từng hạng vé (createTier: tên + giá + tổng cung, VD "Standard" 0.02 ETH × 50). Sau đó ai cũng tự mintTicket(tierId) được trực tiếp (trả đúng giá, không cần Organizer phát hành hộ) — kiểu "public mint" của NFT. Tại cửa, chủ vé tạo mã QR check-in có chữ ký ví (hết hạn sau 5 phút); Organizer quét ở trang #/check-in, hệ thống kiểm tra người ký là chủ vé hiện tại trên chain rồi mới gọi checkIn().
Cấu trúc web/: index.html (khung trang) + styles.css (design system) + app.js (router, logic contract) + api/metadata.js (Vercel Function lưu ảnh/mô tả/địa chỉ/danh mục vào Vercel Blob, ghi phải kèm chữ ký ví của Organizer) + assets/vn-units.json (34 tỉnh/thành, 3.321 phường/xã). CONTRACT_ADDRESS nằm ở đầu file web/app.js và trong web/api/metadata.js. Kiến trúc chi tiết: docs/PROGRESS.md.
python -m http.server 4173 trong thư mục web/, mở http://localhost:4173. Ảnh/mô tả chỉ lưu trên máy vì không có /api./api):
web, tắt Deployment Protection để URL công khai.BLOB_READ_WRITE_TOKEN (mẫu: web/.env.example; file web/.env thật không commit).main, Vercel tự deploy lại.ProjectCore.sol): Remix → Injected Provider - MetaMask → Sepolia → Deploy. Đổi địa chỉ trong web/app.js, web/api/metadata.js, FIRST_LOG_BLOCK trong web/app.js (khối có log đầu tiên của hợp đồng mới) và README này. Dữ liệu cũ sẽ không còn hiển thị.