บทเรียนที่ 1รูปแบบสัญญาทั่วไป: Ownable, Pausable, ReentrancyGuard, การชำระเงินแบบ Pull over Push, รูปแบบ Checks-Effects-Interactionsสำรวจรูปแบบสัญญาอัจฉริยะพื้นฐานที่ช่วยเพิ่มความปลอดภัยและการบำรุงรักษา คุณจะนำ Ownable, Pausable, และ ReentrancyGuard ไปใช้งาน และประยุกต์ใช้ Pull over Push และ Checks-Effects-Interactions ในกระบวนการชำระเงินจริง
การนำ Ownable access control ไปใช้งานและใช้งานสัญญา Pausable และการหยุดฉุกเฉินReentrancyGuard และการป้องกันการโจมตี reentrancyการออกแบบการชำระเงินแบบ Pull over Pushแนวปฏิบัติที่ดีที่สุดของ Checks-Effects-Interactionsบทเรียนที่ 2Safe math และการป้องกัน overflow ใน Solidity 0.8+: การตรวจสอบในตัว vs ไลบรารีชัดเจน (ประวัติ OpenZeppelin SafeMath)ศึกษาว่าการตรวจสอบ overflow ในตัวของ Solidity 0.8+ เปลี่ยนความปลอดภัยทางคณิตศาสตร์อย่างไร เปรียบเทียบไลบรารีสไตล์ SafeMath รุ่นเก่ากับรูปแบบสมัยใหม่ และเรียนรู้ว่าเมื่อใด unchecked blocks จะปลอดภัยสำหรับการดำเนินการทางคณิตศาสตร์ที่ประหยัดก๊าซ
พื้นฐาน integer overflow และ underflowการตรวจสอบทางคณิตศาสตร์ในตัวใน Solidity 0.8+ไลบรารี SafeMath รุ่นเก่าและการย้ายถิ่นการใช้ unchecked blocks อย่างปลอดภัยเพื่อประหยัดก๊าซการทดสอบกรณีขอบและขีดจำกัดทางคณิตศาสตร์บทเรียนที่ 3ตัวแปรสถานะ, storage vs memory, events, modifiers, และการจัดการข้อผิดพลาด (require, revert, assert, custom errors)เชี่ยวชาญวิธีที่ Solidity เก็บและเข้าถึงข้อมูลโดยใช้ตัวแปรสถานะ, storage, memory, และ calldata เรียนรู้การส่ง events, เขียน modifiers ที่ใช้ซ้ำได้, และประยุกต์ใช้ require, revert, assert, และ custom errors สำหรับการจัดการข้อผิดพลาดที่ชัดเจน
ตัวแปรสถานะและ storage slotsการใช้งาน Storage vs memory vs calldataการออกแบบและส่ง events ที่มีประโยชน์การเขียน modifiers ที่ใช้ซ้ำได้และปลอดภัยRequire, revert, assert, และ custom errorsบทเรียนที่ 4การมองเห็นและการเปลี่ยนแปลงของฟังก์ชัน: public, external, internal, private; view, pure, payableชี้แจงว่าการมองเห็นและการเปลี่ยนแปลงของฟังก์ชันส่งผลต่อความปลอดภัย, ก๊าซ, และการใช้งานอย่างไร เรียนรู้เมื่อใดควรใช้ public, external, internal, และ private และ view, pure, payable ส่งผลต่อการเปลี่ยนแปลงสถานะและการโอนค่า
ข้อดีข้อเสียของ public vs external functionInternal และ private สำหรับ encapsulationView และ pure สำหรับลอจิกอ่านอย่างเดียวฟังก์ชัน payable และการโอน ETHการออกแบบ API ที่ชัดเจนและปลอดภัยบทเรียนที่ 5การออกแบบการฝาก/ถอนบัญชี: mapping(address => uint256) balances, events สำหรับการฝาก/ถอน, การจัดการหลายโทเค็น vs vault โทเค็นเดียวเรียนรู้การออกแบบกระบวนการฝากและถอนที่ปลอดภัยโดยใช้ mappings, events, และ token interfaces เปรียบเทียบ vault โทเค็นเดียวและหลายโทเค็น และจัดการกรณีขอบเช่นการโอนล้มเหลวและพฤติกรรมโทเค็นที่ไม่คาดคิด
Mapping balances และ accounting invariantsการส่ง events สำหรับการฝากและถอนการออกแบบ vault โทเค็นเดียวและ interfacesvault หลายโทเค็นและ token identifiersการจัดการการโอนล้มเหลวและข้อบกพร่องโทเค็นบทเรียนที่ 6การทดสอบสัญญาอัจฉริยะ: แนวคิด unit testing, fixtures, mocks สำหรับ ERC-20 tokens, และโครงสร้างการทดสอบ (arrange-act-assert)เรียนรู้การทดสอบสัญญาอัจฉริยะด้วยแนวทางที่มีโครงสร้าง คุณจะเขียน unit tests, ใช้ fixtures และ mocks สำหรับ ERC-20 tokens, ปฏิบัติตาม arrange-act-assert, และครอบคลุมกรณีขอบ, reverts, และ event expectations
Testing frameworks และการตั้งค่าโปรเจกต์โครงสร้างการทดสอบ Arrange-Act-Assertการใช้ fixtures สำหรับสถานะที่ทำซ้ำได้การ mock ERC-20 tokens และพฤติกรรมการทดสอบ reverts, events, และกรณีขอบบทเรียนที่ 7พื้นฐานภาษา Solidity: syntax, types, visibility, inheritance, และ compiler pragmas (รายละเอียด 0.8.x)สร้างความเข้าใจ Solidity syntax, types, และกฎ visibility ที่มั่นคง สำรวจ inheritance, interfaces, compiler pragmas, และรายละเอียด 0.8.x เช่น custom errors และ type safety ที่ดีขึ้นสำหรับการพัฒนาสัญญาอัจฉริยะสมัยใหม่
Source files, contracts, และ basic syntaxValue types, reference types, และ arraysการมองเห็นฟังก์ชันและตัวแปรสถานะInheritance, interfaces, และ abstract contractsCompiler pragmas และการเปลี่ยนแปลงภาษา 0.8.xบทเรียนที่ 8พื้นฐานการอัปเกรดสัญญาและข้อดีข้อเสีย: รูปแบบ proxy (transparent, UUPS) และเมื่อใดหลีกเลี่ยงการอัปเกรดสำหรับ vault ง่ายๆเข้าใจเมื่อใดและวิธีอัปเกรดสัญญาโดยใช้รูปแบบ proxy เปรียบเทียบ transparent และ UUPS proxies, ข้อจำกัด storage layout, และความเสี่ยง governance และดูว่าทำไม vault ง่ายๆ อาจปลอดภัยกว่าที่ไม่มี upgradeability
ทำไมอัปเกรดสัญญาและเมื่อใดหลีกเลี่ยงสถาปัตยกรรม transparent proxy และ rolesรูปแบบ UUPS proxy และฟังก์ชันอัปเกรดความเข้ากันได้ storage layout และ pitfallsความเสี่ยงความปลอดภัยและ governance ของการอัปเกรดบทเรียนที่ 9พื้นฐานการปรับให้เหมาะสมก๊าซ: storage layout, packing, ลด external calls, และการใช้ calldataเรียนรู้เทคนิคการปรับให้เหมาะสมก๊าซที่ใช้ได้จริงสำหรับสัญญา Solidity คุณจะวิเคราะห์ storage layout และ packing, ลด external calls ที่แพง, ใช้ calldata, และวัดการใช้ก๊าซเพื่อนำทาง micro-optimizations ที่ปลอดภัย
การทำความเข้าใจค่าใช้จ่ายก๊าซและ refundsStorage layout และ variable packingการลด external และ cross-contract callsการใช้ calldata สำหรับ read-only inputs ราคาถูกการวัดและ benchmarking การใช้ก๊าซบทเรียนที่ 10การเจาะลึกมาตรฐาน ERC-20 token: interfaces (IERC20), allowances, approve/transferFrom semantics, การจัดการ return value และ non-standard tokensเจาะลึกมาตรฐาน ERC-20 โดยเน้น IERC20 interface, balances, allowances, และ approve/transferFrom flows เรียนรู้การจัดการ return values, non-standard tokens, และรูปแบบการโต้ตอบที่ปลอดภัยในสัญญาการผลิต
IERC20 interface และฟังก์ชันที่จำเป็นการจัดการ Balances, totalSupply, และ decimalsกระบวนการทำงาน approve และ transferFrom allowanceการจัดการ non-standard ERC-20 tokensการโต้ตอบ ERC-20 ที่ปลอดภัยด้วย helper libraries