ๅบไบๅบๅ้พ็็ฎ่ก็งฏๅ็ฎก็็ณป็ป โโ ่ฎฉๆฏไธๆปด็ญ่ก้ฝๆ่ฟนๅฏๅพช
BloodPoints ๆฏไธไธช้จ็ฝฒๅจไปฅๅคชๅ Sepolia ๆต่ฏ็ฝไธ็ๅปไธญๅฟๅๅบ็จ(DApp),ๆจๅจ้่ฟๅบๅ้พๆๆฏๅฎ็ฐ็ฎ่ก็งฏๅ็้ๆ็ฎก็ไธ่กๆถฒๅ จๆต็จ่ฟฝ่ธชใ
๐ ๅบๅ้พ็นๆง่ฏฆ็ป่ฏดๆ่ฏทๅ้ BLOCKCHAIN.md
ๆ ธๅฟไปทๅผ:
- ็ฎ่ก่ ่ทๅพ้พไธ็งฏๅๅฅๅฑ,็งฏๅๅฏ่ฝฌ่ต ใๅฏๅ ๆขๅๅ
- ่กๆถฒไป้้ๅฐๅ้ ็ๅ จๆต็จไธ้พ,ๅฎ็ฐไธๅฏ็ฏกๆน็ๆบฏๆบ่ฟฝ่ธช
- ๅค่ง่ฒๅไฝ(้้ๅใ่ก็ซใ็ฎ่ก่ ),ๆ้ๆธ ๆฐใๅๅธๅ ถ่
| ๅฑ็บง | ๆๆฏ | ่ฏดๆ |
|---|---|---|
| ๆบ่ฝๅ็บฆ | Solidity 0.8.28 | ๅ็บฆ่ฏญ่จ |
| ๅผๅๆกๆถ | Hardhat 3 | ็ผ่ฏใๆต่ฏใ้จ็ฝฒ |
| ๅ็บฆๅบ | OpenZeppelin 5.6.1 | OwnableใReentrancyGuard |
| ๅ็ซฏๆกๆถ | React 19 + TypeScript | SPA ๅบ็จ |
| ๆๅปบๅทฅๅ ท | Vite | ๅ็ซฏๆๅปบ |
| ้พไธไบคไบ | wagmi + viem | React hooks + ไปฅๅคชๅๅฎขๆท็ซฏ |
| ้ฑๅ ่ฟๆฅ | RainbowKit | ๅค้ฑๅ ๆฏๆ |
| ็ฎๆ ็ฝ็ป | Sepolia ๆต่ฏ็ฝ | ไปฅๅคชๅ L1 ๆต่ฏ้พ |
final-exam/
โโโ contracts/
โ โโโ BloodPoints.sol # ๆ ธๅฟๆบ่ฝๅ็บฆ
โโโ test/
โ โโโ BloodPoints.ts # ๅ็บฆๆต่ฏ(31 ไธช็จไพ)
โโโ scripts/
โ โโโ deploy.ts # ๆฌๅฐ้จ็ฝฒ่ๆฌ
โ โโโ deploy-sepolia.ts # Sepolia ้จ็ฝฒ่ๆฌ
โ โโโ export-abi.ts # ๅฏผๅบ ABI ๅฐๅ็ซฏ
โ โโโ assign-roles.ts # ่ง่ฒๅ้
่ๆฌ
โโโ frontend/
โ โโโ src/
โ โโโ components/ # React ็ปไปถ
โ โ โโโ WalletConnect.tsx # ้ฑๅ
่ฟๆฅ + ๅฏผ่ช
โ โ โโโ DonorPanel.tsx # ็ฎ่กไบบๅ้ขๆฟ
โ โ โโโ CollectorPanel.tsx # ้้่ฎฐๅฝๅ้ขๆฟ
โ โ โโโ BloodBankPanel.tsx # ่ก็ซๅทฅไฝไบบๅ้ขๆฟ
โ โโโ config/wagmi.ts # wagmi ้
็ฝฎ
โ โโโ contracts/ # ๅ็บฆ ABI + ๅฐๅ
โโโ hardhat.config.ts # Hardhat ้
็ฝฎ
โโโ package.json
โโโ README.md
| ่ง่ฒ | ๆ ่ฏ | ่่ดฃ | ้พไธๆ้ |
|---|---|---|---|
| ็ฎก็ๅ (Owner) | onlyOwner |
็ณป็ป็ฎก็ | ๅ้ /ๆค้่ง่ฒใไธๆถๅๅ |
| ้้่ฎฐๅฝๅ (Collector) | Role.Collector |
็ฐๅบ้่ก | ๅฝๅ
ฅ็ฎ่ก่ฎฐๅฝ (recordBlood) |
| ่ก็ซๅทฅไฝไบบๅ (BloodBank) | Role.BloodBank |
่กๆถฒๅค็ | ๆฅๆถใๆฃๆตใๅ้ ่กๆถฒ |
| ็ฎ่ก่ (Donor) | ๆฎ้็จๆท | ็ฎ่ก | ็ฎ่ก่ท็งฏๅใ่ฝฌ่ต ใๅ ๆข |
| ็ ไบบ (Patient) | ่ขซๅจ่ง่ฒ | ๆฅๆถ่กๆถฒ | ้่ฟๅฐๅ่ฎฐๅฝ่กๆถฒๆฅๆบ |
โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ
โ ็ฎ่ก่
โโโโโถโ ้้่ฎฐๅฝๅ โโโโโถโ ่ก็ซๆฅๆถ โโโโโถโ ่กๆถฒๆฃๆต โ
โ donateBloodโ โrecordBloodโ โreceiveBloodโ โ testBlood โ
โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโ
โ ๅ้
็
ไบบ โ
โassignToPatientโ
โโโโโโโโโโโโ
- Node.js >= 18
- MetaMask ๆต่งๅจๆไปถ
- Sepolia ๆต่ฏ็ฝ ETH(็จไบ้จ็ฝฒๅๆต่ฏ)
# ๆ น็ฎๅฝ(Hardhat) npm install # ๅ็ซฏ cd frontend npm install cd ..
ๅจๆ น็ฎๅฝๅๅปบ .env ๆไปถ:
SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY SEPOLIA_PRIVATE_KEY=ไฝ ็้ฑๅ ็ง้ฅ
npx hardhat compile
npx hardhat test้ขๆ่พๅบ:31 ไธชๆต่ฏๅ จ้จ้่ฟ
ๆฌๅฐ้จ็ฝฒ(ๅผๅๆต่ฏ):
npx hardhat node # ๅฏๅจๆฌๅฐ่็น
npx hardhat run scripts/deploy.ts --network localhostSepolia ๆต่ฏ็ฝ้จ็ฝฒ:
npx hardhat run scripts/deploy-sepolia.ts --network sepolia
npx hardhat run scripts/export-abi.ts
้จ็ฝฒๅ้่ฆไธบไธๅๅฐๅๅ้ ่ง่ฒ:
# ไฟฎๆน scripts/assign-roles.ts ไธญ็ๅฐๅ,็ถๅๆง่ก:
npx hardhat run scripts/assign-roles.ts --network sepoliacd frontend
npm run dev่ฎฟ้ฎ http://localhost:5173
ไฟฎๆน frontend/src/contracts/config.ts ไธญ็ๅ็บฆๅฐๅไธบๆๆฐ้จ็ฝฒๅฐๅ:
export const CONTRACT_ADDRESS = "0xไฝ ็ๅ็บฆๅฐๅ" as const;
| ๅ่ฝ | ๅฝๆฐ | ่ฏดๆ |
|---|---|---|
| ็ฎ่ก่ท็งฏๅ | donateBlood(bloodType, volume) |
็ฎ่ก่ ็ดๆฅ่ฐ็จ,่ทๅพ 100 ็งฏๅ |
| ้้่ฎฐๅฝ | recordBlood(donor, bloodType, volume) |
้้ๅไธบ็ฎ่ก่ ๅฝๅ ฅ่ฎฐๅฝ |
| ๆฅๆถ่กๆถฒ | receiveBlood(bloodId, bloodBank) |
่ก็ซๆฅๆถ่กๆถฒ |
| ๆฃๆต่กๆถฒ | testBlood(bloodId, passed) |
่ก็ซๆไบคๆฃๆต็ปๆ |
| ๅ้ ็ ไบบ | assignToPatient(bloodId, patient) |
ๅฐๅๆ ผ่กๆถฒๅ้ ็ป็ ไบบ |
| ็งฏๅ่ฝฌ่ต | transferPoints(to, amount) |
็จๆท้ด็งฏๅ่ฝฌ่ต |
| ๅๅๅ ๆข | redeemProduct(productId) |
็งฏๅๅ ๆขๅๅ |
| ๆ่กๆฆ | getLeaderboard() |
ๆ็งฏๅๆๅบ็็ฎ่ก่ ๆฆๅ |
| ่กๆถฒ่ฟฝ่ธช | getBloodJourney(bloodId) |
ๆฅ่ฏข่กๆถฒๅฎๆดๆต่ฝฌ่ฎฐๅฝ |
- ็ฝ็ป: Sepolia ๆต่ฏ็ฝ
- ๅ็บฆๅฐๅ:
0x762a3de172619d3f7879d033966d31081a426aa2 - ๅบๅๆต่งๅจ: Etherscan ๆฅ็
BloodPoints
โโโ Points System (7 tests)
โ โโโ ๆฏๆฌก็ฎ่ก่ทๅพ 100 ็งฏๅ
โ โโโ ๅคๆฌก็ฎ่ก็งฏๅ็ดฏๅ
โ โโโ ้ฆๆฌก็ฎ่ก่ฟๅ
ฅๆ่กๆฆ
โ โโโ ้ๅค็ฎ่กไธ้ๅค่ฎฐๅฝ
โ โโโ ็งฏๅ่ฝฌ่ต
โ โโโ ๆ็ป่ฝฌ่ต ็ป่ชๅทฑ
โ โโโ ๆ็ป็งฏๅไธ่ถณ็่ฝฌ่ต
โโโ Blood Tracking (6 tests)
โ โโโ ็ฎ่กๅๅปบ่กๆถฒๅๅ
โ โโโ ่ฟฝ่ธช็ฎ่ก่
่กๆถฒ ID
โ โโโ ๅ่ก็ซๅฎๆดๆต่ฝฌ
โ โโโ ๅค่ก็ซๆต่ฝฌ
โ โโโ ๆฅ่ฏข่กๆถฒๅฎๆดๆ
็จ
โ โโโ ่ฟฝ่ธช็
ไบบ่กๆถฒๆฅๆบ
โโโ State Machine Validation (6 tests)
โ โโโ ๆ็ป่ทณ่ฟๆฅๆถ็ดๆฅๆฃๆต
โ โโโ ๆ็ป่ทณ่ฟๆฃๆต็ดๆฅๅ้
โ โโโ ๆ็ปๆฃๆตไธๅๆ ผๅๅ้
โ โโโ ๆ็ปๅทฒๆฃๆต่กๆถฒ้ๅคๆฅๆถ
โ โโโ ๆ็ปๅทฒๅ้
่กๆถฒ้ๅคๆฅๆถ
โ โโโ ๆ็ป้ๅคๅ้
โโโ Access Control (7 tests)
โ โโโ ้ BloodBank ๆ็ปๆฅๆถ
โ โโโ ้ BloodBank ๆ็ปๆฃๆต
โ โโโ ้ BloodBank ๆ็ปๅ้
โ โโโ ้ Collector ๆ็ปๅฝๅ
ฅ
โ โโโ BloodBank ๅฎๆดๆไฝ
โ โโโ Collector ๅฝๅ
ฅๆไฝ
โ โโโ Owner ่ง่ฒ็ฎก็
โโโ Collector Functionality (3 tests)
โโโ Blood Query Functions (3 tests)
PPT ไฝไบ design-demos/ ็ฎๅฝ,ๆต่งๅจๆๅผ design-demos/index.html ๅณๅฏๆผ็คบ(โ โ ้ฎ็ฟป้กต,ESC ๅๆฆ่ง)ใ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ฉธ BloodPoints ยท ็ญ่ก้พ โ
โ ๅบไบๅบๅ้พ็็ฎ่ก็งฏๅ็ฎก็็ณป็ป โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ Solidity ยท Hardhat ยท React ยท Sepolia โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1 ๅฐ้ข
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ้กน็ฎๆฆ่ฟฐ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ๐ๅปไธญๅฟๅ โ โ๐ก๏ธไธๅฏ็ฏกๆนโ โ๐ๅฏ่ฟฝๆบฏ โ โ๐คๅคๆนๅไฝโ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ BloodPoints ้จ็ฝฒๅจไปฅๅคชๅ Sepolia ๆต่ฏ็ฝ,้่ฟๅบๅ้พๆๆฏๅฎ็ฐ โ
โ ็ฎ่ก็งฏๅ็้ๆ็ฎก็ไธ่กๆถฒๅ
จๆต็จ่ฟฝ่ธชใ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
2 ้กน็ฎๆฆ่ฟฐ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ้กน็ฎๅๅทฅ ยท ๅคๆน่ง่ฒ่ฎพ่ฎก โ
โ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โ
โ โ๐ โ โ๐ โ โ๐ฅ โ โ๐ โ โ๐๏ธ โ โ
โ โ็ฎก็โ โ้้โ โ่ก็ซโ โ็ฎ่กโ โ็
ไบบโ โ
โ โๅ โ โๅ โ โไบบๅโ โ่
โ โ โ โ
โ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โ
โ 5 ไธช่ง่ฒ,ๆ้็ฑๆบ่ฝๅ็บฆ onlyRole ๅผบๅถๆง่ก โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
3 ้กน็ฎๅๅทฅ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅ่ฝ่ฏฆ่งฃ ยท ๆบ่ฝๅ็บฆ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๆ ธๅฟๅฝๆฐ โ โ ่กๆถฒ็ถๆๆบ โ โ
โ โ ยท donateBlood โ โ โ โ
โ โ ยท recordBlood โ โ Donated โ Received โ Tested โ โ
โ โ ยท receiveBlood โ โ ๅทฒ็ฎ่ก ่ก็ซๆฅๆถ ๅทฒๆฃๆต โ โ
โ โ ยท testBlood โ โ โ โ โ
โ โ ยท assignToPatientโ โ Assigned โ โ
โ โ ยท transferPoints โ โ ๅทฒๅ้
โ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
4 ๅ่ฝ่ฏฆ่งฃยทๅ็บฆ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅ่ฝ่ฏฆ่งฃ ยท ๅ็ซฏไบคไบ โ
โ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โ
โ โ๐็ฎ่กไบบๅ โ โ๐้้่ฎฐๅฝๅโ โ๐ฅ่ก็ซๅทฅไฝๅฐโ โ
โ โยท ็งฏๅๆฅ็ โ โยท ่พๅ
ฅๅฐๅ โ โยท ่กๆถฒๅ่กจ โ โ
โ โยท ่กๆถฒ่ฟฝ่ธช โ โยท ้ๆฉ่กๅ โ โยท ๆฅๆถ่กๆถฒ โ โ
โ โยท ็งฏๅ่ฝฌ่ต โ โยท ้ๆฉ่ก้ โ โยท ๆฃๆต่กๆถฒ โ โ
โ โยท ๅๅๅ
ๆข โ โยท ไธไผ ้พไธ โ โยท ๅ้
็
ไบบ โ โ
โ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
5 ๅ่ฝ่ฏฆ่งฃยทๅ็ซฏ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๆต่ฏ่ฆ็ โ
โ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โ
โ โ 31 โ โ 6 โ โ100%โ โHardโ โ
โ โ็จไพโ โๅ็ปโ โ้่ฟโ โhat โ โ
โ โโโโโโ โโโโโโ โโโโโโ โโโโโโ โ
โ ็งฏๅ็ณป็ป(7) ยท ็ถๆๆบ(6) ยท ่กๆถฒ่ฟฝ่ธช(6) ยท ๆ้ๆงๅถ(7) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
6 ๆต่ฏ่ฆ็
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๆป็ปไธๅฑๆ โ
โ โ
ๅฎๆดๅบๅ้พๅบ็จ โ
5่ง่ฒๅไฝ โ
็ถๆๆบ้ฉฑๅจ โ
โ โ
31ไธชๆต่ฏ็จไพ โ
่ง่ฒๅๅ็ซฏ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ ๐ฎ ๆชๆฅ:Chainlink้ข่จๆบ / NFT็ฎ่ก่ฏไนฆ / ่็้พๆฉๅฑ โ
โ ๐ ๅทฒ้จ็ฝฒ: 0x762a3de...aa2 (Sepolia) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
7 ๆป็ปไธๅฑๆ
ๆผ็คบๆนๅผ: ๆต่งๅจๆๅผ design-demos/index.html,ๆฏๆ:
- 3D ๆฆ่งๅข:ๆๅผๅณๅฏ็ๅฐๆๆ้กต้ข็ผฉ็ฅๅพ
- ๅ จๅฑๆผ็คบ:็นๅปใโถ ๅผๅงๆผ็คบใๆไปปๆ้กต้ข,โ โ ้ฎ็ฟป้กต
- ๅฟซๆท้ฎ:ESC ๅๆฆ่ง,P ๆๅฐ/ๅฏผๅบ PDF
MIT License