บัญชีและสถานะ
EOA และสัญญา
บัญชีและสถานะ เป็นบทเรียน Web3 & DApp Development Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Web3 & DApp Development Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
สถานะของโลกคืออะไร
สถานะของโลกของ Ethereum คือภาพรวมทั้งหมดของบัญชีและข้อมูลของบัญชีเหล่านั้น ณ ช่วงเวลาหนึ่ง
ทุกธุรกรรมจะเปลี่ยนสถานะนี้จากเวอร์ชันที่ถูกต้องหนึ่งไปเป็นเวอร์ชันที่ถูกต้องถัดไป บัญชีคือองค์ประกอบพื้นฐานของสถานะนี้
บัญชีสองประเภท
Ethereum มีบัญชีอยู่สองประเภทเท่านั้น:
- บัญชีที่ควบคุมจากภายนอก (EOA) — ควบคุมด้วยคีย์ส่วนตัว (ผู้ใช้)
- บัญชีสัญญา — ควบคุมด้วยโค้ดของบัญชี
ทั้งสองประเภทใช้รูปแบบแอดเดรสขนาด 20 ไบต์เหมือนกัน
บัญชีที่ควบคุมจากภายนอก
EOA ถูกควบคุมด้วยคีย์ส่วนตัว และสามารถเริ่มธุรกรรมได้ เช่น ส่ง ETH หรือเรียกใช้สัญญา
EOA ไม่มีโค้ดของตนเอง แต่เป็นเพียงบัญชีที่ควบคุมด้วยคีย์ ซึ่งมนุษย์หรือบอตเป็นผู้ดำเนินการ
EOA {
address: 0xAbc...123
balance: 4.2 ETH
nonce: 17
code: none
}บัญชีสัญญา
บัญชีสัญญา มีโค้ด (ไบต์โค้ด) และสตอเรจ บัญชีนี้ไม่มีคีย์ส่วนตัวและไม่สามารถเริ่มธุรกรรมได้ด้วยตนเอง
บัญชีจะทำงานเมื่อถูกเรียกโดย EOA หรือสัญญาอื่นเท่านั้น โดยเรียกใช้โค้ดเพื่อตอบสนองต่อการเรียก
Contract {
address: 0xDef...456
balance: 10 ETH
code: 0x6080604052...
storage: { slot0: ..., slot1: ... }
}ฟิลด์ทั้งสี่ของบัญชี
บัญชีทุกบัญชีเก็บฟิลด์สี่รายการ:
- nonce — จำนวนธุรกรรม (EOA) หรือจำนวนสัญญาที่สร้าง (สัญญา)
- balance — จำนวน ETH ที่ถือครองในหน่วย wei
- storageRoot — แฮชของสตอเรจของบัญชี
- codeHash — แฮชของโค้ดของบัญชี
ความแตกต่างระหว่าง EOA กับสัญญา
ความแตกต่างสำคัญคือ:
- มีเพียง EOA เท่านั้นที่สามารถ เริ่มต้นธุรกรรม
- มีเพียง สัญญา เท่านั้นที่มีโค้ดและสตอเรจจำนวนมาก
- codeHash ของ EOA เป็นค่าว่าง ส่วนของสัญญาไม่เป็นค่าว่าง
สถานะเปลี่ยนแปลงอย่างไร
สถานะจะเปลี่ยนแปลงผ่านธุรกรรมเท่านั้น ธุรกรรมอาจย้าย ETH นำสัญญาไปใช้งาน หรือเรียกสัญญาที่อัปเดตสตอเรจของตน
หลังแต่ละบล็อก สถานะของโลกจะเลื่อนไปเป็นเวอร์ชันใหม่ที่ทุกฝ่ายเห็นพ้องกัน
ต้นไม้สถานะ
บัญชีทั้งหมดถูกเก็บไว้ใน Merkle Patricia Trie ขนาดใหญ่ แฮชรากของมัน ซึ่งเรียกว่า state root จะถูกบันทึกไว้ในส่วนหัวของแต่ละบล็อก
แฮชเดียวนี้ยืนยันสถานะของโลกทั้งหมด เช่นเดียวกับที่ Merkle root ยืนยันธุรกรรมทั้งหมด
block header includes:
stateRoot -> all accounts
txRoot -> all transactions
receiptRoot -> all receiptsการสร้างบัญชี
EOA ถือว่ามีอยู่ทันทีที่สร้างคู่คีย์ขึ้นมา ไม่จำเป็นต้องดำเนินการบนเชนจนกว่าจะมีการทำธุรกรรม
บัญชีสัญญาถูกสร้างขึ้นเมื่อธุรกรรมนำสัญญาไปใช้งาน เรียกใช้โค้ดตัวสร้าง และจัดเก็บไบต์โค้ดที่ได้
การโต้ตอบกับสัญญาอัจฉริยะ
หากต้องการโต้ตอบกับสัญญา EOA จะส่งธุรกรรมที่ระบุแอดเดรสของสัญญาและข้อมูลฟังก์ชัน
EVM จะค้นหาโค้ดของสัญญาด้วย codeHash แล้วเรียกใช้โค้ดนั้น ซึ่งอาจอัปเดตสตอเรจได้
สรุปภาพรวม
สถานะของ Ethereum คือกลุ่มบัญชี EOA ถูกควบคุมด้วยคีย์และเป็นผู้เริ่มธุรกรรม ส่วนสัญญาถือโค้ดและสตอเรจ และตอบสนองต่อการเรียก
state root ในแต่ละบล็อกยืนยันข้อมูลทั้งหมดนี้
ตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับบัญชีของคุณ
ทบทวน: บัญชีและสถานะ
คุณได้เรียนรู้ว่า:
- Ethereum มี EOA (ควบคุมด้วยคีย์) และ บัญชีสัญญา (ควบคุมด้วยโค้ด)
- มีเพียง EOA เท่านั้นที่สามารถ เริ่มต้นธุรกรรมได้
- แต่ละบัญชีมี nonce, ยอดคงเหลือ, storageRoot และ codeHash
- รากสถานะจะผูกมัดกับบัญชีทั้งหมด
คุณเรียนจบเส้นทางพื้นฐาน Web3 แล้ว
เรียนรู้ Web3 & DApp Development Fundamentals ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 29
- บทเรียน
- 105
คำถามที่พบบ่อย
บทเรียน “บัญชีและสถานะ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “บัญชีและสถานะ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Web3 & DApp Development Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “บัญชีและสถานะ”
EOA และสัญญา คุณปฏิบัติ Web3 & DApp Development Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Web3 & DApp Development Fundamentals หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Web3 & DApp Development Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “บัญชีและสถานะ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Web3 & DApp Development Fundamentals นี้ได้ไหม
ได้ บทเรียน Web3 & DApp Development Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ