
กิจกรรม Solidity นั้นขาดไม่ได้สำหรับผู้พัฒนาสัญญาอัจฉริยะ ทำให้เราสามารถทดสอบตัวแปรเฉพาะในสัญญาอัจฉริยะ เปลี่ยนส่วนหน้าด้วยวิธีอัตโนมัติ เป็นต้น โดยทั่วไป การรู้วิธีใช้เหตุการณ์ใน Solidity สามารถทำให้การพัฒนาสัญญาอัจฉริยะง่ายขึ้นมาก
ในบทความนี้เราจะศึกษาจากมุมมองของนักพัฒนาสัญญาอัจฉริยะเครื่องเสมือน Ethereumฟังก์ชันบันทึกและเหตุการณ์ของ (EVM) รวมถึงบันทึกและเหตุการณ์ใดบ้าง จัดทำดัชนีเหตุการณ์ และวิธีใช้บันทึกและเหตุการณ์ในหมวกนิรภัยและบราวนี่
EVM เป็นหัวใจของ Ethereum และบล็อกเชนอื่น ๆ อีกมากมาย EVM มีบันทึกฟังก์ชันสำหรับการ "เขียน" ข้อมูลลงในโครงสร้างข้อมูลนอกสัญญาอัจฉริยะ ข้อมูลสำคัญประการหนึ่งคือเหตุการณ์ที่เป็นของแข็ง. เหตุการณ์ช่วยให้เราสามารถ "พิมพ์" ข้อมูลบนบล็อกเชนในลักษณะที่สามารถค้นหาได้มากขึ้นและกินน้ำมันน้อยกว่าการบันทึกลงในตัวแปรพื้นที่เก็บข้อมูลสาธารณะในสัญญาอัจฉริยะ
บันทึกเป็นโครงสร้างข้อมูลพิเศษในบล็อกเชน ไม่สามารถเข้าถึงได้ด้วยสัญญาอัจฉริยะ แต่ให้ข้อมูลเกี่ยวกับธุรกรรมและสิ่งที่เกิดขึ้นในบล็อก เป็นเพราะไม่สามารถเข้าถึงได้ด้วยสัญญาอัจฉริยะจึงมีราคาถูกกว่า
คุณยังสามารถดูวิดีโอต่อไปนี้เกี่ยวกับเหตุการณ์และการเข้าสู่ระบบ Solidity:
https://www.bilibili.com/video/BV1iL4y1s7ro?spm_id_from=333.999.0.0
แล้วเหตุการณ์คืออะไร?
การสมัครสมาชิกการสมัครสมาชิกพวกเขามาเพื่อ "ฟัง" เหตุการณ์บางอย่าง ในความเป็นจริงนี่คือเครือข่ายเชนลิงค์ชื่อระดับแรก
ใช้กับกิจกรรมอะไรได้บ้าง?
ตอนนี้ หากคุณไม่ใช่ผู้ดำเนินการโหนด Chainlink หรือ Ethereum คุณอาจกำลังถามว่าเกิดอะไรขึ้นกับคุณ ด้วยกิจกรรม Solidity คุณสามารถ:
ทดสอบตัวแปรเฉพาะในสัญญาอัจฉริยะของคุณ
ตัวแปรดัชนีเพื่อสร้างสถานะที่เก็บไว้ใหม่
กราฟย่อย
สร้างกราฟย่อยเพื่ออ่านข้อมูลได้เร็วขึ้น
ชื่อระดับแรก
เหตุการณ์มีลักษณะอย่างไร?
โครงสร้างข้อมูลต่อไปนี้เป็นวิธีกำหนดเหตุการณ์ใน Solidity:

คุณสามารถคิดว่าเหตุการณ์เป็นชนิดพิเศษใหม่ เราได้สร้าง "ประเภท" ของเหตุการณ์ที่เรียกว่า storageNumber ชื่อของเหตุการณ์ถูกจัดเก็บหมายเลขซึ่งสามารถเก็บตัวแปรบางตัวได้ ในเหตุการณ์นี้มีพารามิเตอร์สองประเภท: จัดทำดัชนีและไม่ได้จัดทำดัชนี พารามิเตอร์ที่จัดทำดัชนี หรือที่เรียกว่า "หัวข้อ" เป็นพารามิเตอร์ที่ค้นหาได้ในเหตุการณ์ เราจะพูดถึงสิ่งเหล่านี้ในภายหลัง
จากนั้นเราสามารถปล่อยเหตุการณ์เช่นนี้:

ต่อไปนี้คือตัวอย่างสัญญาฉบับสมบูรณ์:

ในตอนนี้ เมื่อใดก็ตามที่เราเรียกใช้ฟังก์ชัน store ในตัวอย่างนี้ มันจะปล่อยเหตุการณ์ประเภทstoredNumber ลองดูตัวอย่างธุรกรรมที่เรียกใช้ฟังก์ชัน store โดยป้อนค่าเป็น 1 เราเข้าไปได้Kovan Etherscanดูการทำธุรกรรมนี้
เมื่อเลื่อนไปที่ส่วน "บันทึก" ของธุรกรรม เราจะเห็นสิ่งต่อไปนี้:

เหตุการณ์สามารถแบ่งออกเป็น:
ที่อยู่: ที่อยู่ ที่อยู่ของสัญญาหรือบัญชีที่ออกกิจกรรม
หัวข้อ: หัวข้อ พารามิเตอร์ดัชนีของเหตุการณ์
ข้อมูล: ข้อมูล การเข้ารหัส ABI หรือ "แฮช" ของพารามิเตอร์ที่ไม่ได้จัดทำดัชนีของเหตุการณ์ เนื่องจากเราทราบ ABI ของสัญญา (เพราะเราตรวจสอบสัญญาบน Etherscan) เราจึงสามารถดูได้ในโหมด "Dec" หรือ "Decoded" หรือในโหมด "hex", "Hexidecimal" หรือ "Encoded" ดั้งเดิม ตรวจสอบ หากเรายังไม่ได้ตรวจสอบสัญญา เราจะไม่เห็นเวอร์ชันที่ถอดรหัสแล้ว

คุณสามารถที่Solidityเอกสารอ่านเพิ่มเติมเกี่ยวกับเหตุการณ์ใน "บันทึก" และ "เหตุการณ์" มักใช้แทนกันได้ เนื่องจากในฐานะผู้พัฒนาสัญญาอัจฉริยะ เรามักสนใจเฉพาะ "เหตุการณ์" ในบันทึกเท่านั้น อย่างไรก็ตาม ในทางเทคนิคแล้ว บันทึกยังรวมถึง blockhash ที่อยู่ และข้อมูลอื่นๆ ที่ส่งคืนไปยังโหนด blockchain ของคุณด้วยการเรียก eth_getLogs คุณยังสามารถอ่านเพิ่มเติมเกี่ยวกับตัวกรองบานซึ่งเป็นเหตุผลว่าทำไมจึงสามารถสอบถามเหตุการณ์เหล่านี้ได้อย่างง่ายดาย
เหตุการณ์ในหมวกนิรภัย
ตอนนี้เราเข้าใจแล้วว่าเหตุการณ์คืออะไร เรามาเรียนรู้วิธีเข้าถึงและใช้งานในหมวกนิรภัยกัน คุณสามารถโคลน repo ต่อไปนี้และทำตาม:
git clone https://github.com/PatrickAlphaC/hardhat-events-logs
cd hardhat-events-logs
คุณต้องทำตามคำแนะนำใน README.md จึงจะเสร็จสมบูรณ์เครื่องมือพึ่งพาการติดตั้ง ซึ่งรวมถึง Node, Yarn และ Git
หากคุณปฏิบัติตาม README.md คุณจะสามารถ:
ปรับใช้สัญญาอัจฉริยะ
สร้างธุรกรรมที่ปล่อยเหตุการณ์
ดูบริบทของเหตุการณ์เหล่านี้
หากคุณพบปัญหาระหว่างขั้นตอนนี้ โปรดติดต่อGithub repoชื่อระดับแรก

เหตุการณ์ในบราวนี่
เหตุการณ์ในบราวนี่ค่อนข้างเหมือนเดิมเพราะสัญญาตรงกันทุกประการ
คุณสามารถโคลน repo ต่อไปนี้และทำตาม:
คุณต้องทำตามคำแนะนำใน README.md จึงจะเสร็จสมบูรณ์เครื่องมือพึ่งพาการติดตั้งซึ่งประกอบด้วย Node, Python, eth-brownie และ Git
หากคุณปฏิบัติตาม README.md คุณจะสามารถ:
ปรับใช้สัญญาอัจฉริยะ
สร้างธุรกรรมที่ปล่อยเหตุการณ์
ดูบริบทของเหตุการณ์เหล่านี้
หากคุณพบปัญหาระหว่างขั้นตอนนี้ โปรดติดต่อGithub repoสรุป

สรุป
บันทึกและเหตุการณ์เป็นส่วนสำคัญของการพัฒนาสัญญาอัจฉริยะ และเป็นโครงสร้างพื้นฐานที่สำคัญสำหรับโครงการต่างๆ เช่น Chainlink และ The Graph หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการพัฒนาสัญญาอัจฉริยะที่ทรงพลัง (โดยใช้ทักษะกิจกรรมที่คุณเพิ่งค้นพบ) อย่าลืมตรวจสอบเอกสาร Chainlinkเริ่มสร้างทันที! .


