۱۲.۱ مسیر توسعه صحیح
برای یادگیری: از testnet و قراردادهای کوچک شروع کنید. برای production: هیچگاه کد آموزشی را بدون بازبینی معماری، تست جامع و audit مستقل به کار نبرید.
| مرحله | ابزار پیشنهادی | خروجی |
|---|---|---|
| طراحی | مستندات حقوقی + ADR | Token behaviour + constraints |
| توسعه | Foundry / Hardhat + OpenZeppelin | قرارداد + تست واحد |
| تست | Unit + Fuzz + Invariant | Coverage + invariant reports |
| Audit | شرکت مستقل معتبر | گزارش audit + remediation |
| Deployment | Multisig + Timelock + Monitoring | Mainnet با کنترلهای عملیاتی |
۱۲.۲ تست حداقلی (Foundry style)
function testTransferOnlyEligible() public {
token.setEligible(alice, true);
token.setEligible(bob, false);
token.mint(alice, 100);
vm.expectRevert();
vm.prank(alice);
token.transfer(bob, 10); // must fail – bob not eligible
}
۱۲.۳ شبهکد فرآیند Mint امن
INPUT asset_id, investor_id, amount VERIFY legal_right(asset_id) // سند و حق وجود دارد VERIFY KYC(investor_id) // هویت تأیید شده VERIFY eligibility(investor_id, asset) // واجد شرایط این دارایی VERIFY custody(asset_id) // custody برقرار است VERIFY supply_limit(amount) // از سقف عبور نکند EXECUTE mint() WRITE audit_event() RETURN token_id / transaction_hash
قانون طلایی توسعه: هر تابعی که وضعیت (state) را تغییر میدهد باید access control، event و در صورت نیاز pause داشته باشد. کد بدون تست و بدون audit، کد production نیست.
13 / 16