گروه سام آرام
فصل 13

فصل ۱۲: پیاده‌سازی فنی و کدنویسی آموزشی

۱۲.۱ مسیر توسعه صحیح

برای یادگیری: از 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