Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

CheShiping/blood-points

Repository files navigation

๐Ÿฉธ BloodPoints(็ƒญ่ก€้“พ)

ๅŸบไบŽๅŒบๅ—้“พ็š„็Œฎ่ก€็งฏๅˆ†็ฎก็†็ณป็ปŸ โ€”โ€” ่ฎฉๆฏไธ€ๆปด็ƒญ่ก€้ƒฝๆœ‰่ฟนๅฏๅพช

้กน็›ฎ็ฎ€ไป‹

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(็”จไบŽ้ƒจ็ฝฒๅ’Œๆต‹่ฏ•)

1. ๅฎ‰่ฃ…ไพ่ต–

# ๆ น็›ฎๅฝ•(Hardhat)
npm install
# ๅ‰็ซฏ
cd frontend
npm install
cd ..

2. ็Žฏๅขƒ้…็ฝฎ

ๅœจๆ น็›ฎๅฝ•ๅˆ›ๅปบ .env ๆ–‡ไปถ:

SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY
SEPOLIA_PRIVATE_KEY=ไฝ ็š„้’ฑๅŒ…็ง้’ฅ

3. ็ผ–่ฏ‘ๅˆ็บฆ

npx hardhat compile

4. ่ฟ่กŒๆต‹่ฏ•

npx hardhat test

้ข„ๆœŸ่พ“ๅ‡บ:31 ไธชๆต‹่ฏ•ๅ…จ้ƒจ้€š่ฟ‡

5. ้ƒจ็ฝฒๅˆ็บฆ

ๆœฌๅœฐ้ƒจ็ฝฒ(ๅผ€ๅ‘ๆต‹่ฏ•):

npx hardhat node # ๅฏๅŠจๆœฌๅœฐ่Š‚็‚น
npx hardhat run scripts/deploy.ts --network localhost

Sepolia ๆต‹่ฏ•็ฝ‘้ƒจ็ฝฒ:

npx hardhat run scripts/deploy-sepolia.ts --network sepolia

6. ๅฏผๅ‡บ ABI ๅˆฐๅ‰็ซฏ

npx hardhat run scripts/export-abi.ts

7. ๅˆ†้…่ง’่‰ฒ

้ƒจ็ฝฒๅŽ้œ€่ฆไธบไธๅŒๅœฐๅ€ๅˆ†้…่ง’่‰ฒ:

# ไฟฎๆ”น scripts/assign-roles.ts ไธญ็š„ๅœฐๅ€,็„ถๅŽๆ‰ง่กŒ:
npx hardhat run scripts/assign-roles.ts --network sepolia

8. ๅฏๅŠจๅ‰็ซฏ

cd frontend
npm run dev

่ฎฟ้—ฎ http://localhost:5173

9. ๅ‰็ซฏ้…็ฝฎ

ไฟฎๆ”น 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 ้ข„่งˆ

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle ใซใ‚ˆใฃใฆๅค‰ๆ›ใ•ใ‚ŒใŸใƒšใƒผใ‚ธ (->ใ‚ชใƒชใ‚ธใƒŠใƒซ) /