BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

วิทยาศาสตร์ยอดนิยม: การตีความ Ethereum Yellow Paper (2/7)

以太坊爱好者
特邀专栏作者
2019-09-22 23:30
บทความนี้มีประมาณ 4657 คำ การอ่านทั้งหมดใช้เวลาประมาณ 7 นาที
องค์ประกอบหลักบางส่วนของ Ethereum และบทบาทในระบบโดยรวม
สรุปโดย AI
ขยาย
องค์ประกอบหลักบางส่วนของ Ethereum และบทบาทในระบบโดยรวม

หมายเหตุบรรณาธิการ: บทความนี้มาจากผู้ที่ชื่นชอบ Ethereum (ID: Ethfans)หมายเหตุบรรณาธิการ: บทความนี้มาจาก

ผู้ที่ชื่นชอบ Ethereum (ID: Ethfans)

, ผู้แต่ง: Lucas Saldanha, แปลและพิสูจน์อักษร: An Zi Clint & A Jian, พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต

ฉันหวังว่าคุณที่อยู่หน้าจอจะเข้าใจว่า Merkle tree คืออะไรและมีบทบาทอย่างไรใน Ethereum หลังจากอ่านจบ เข้าใจแนวคิดของ "สถานะโลก" และ "สถานะบัญชี" โครงสร้างของบล็อก

(ข้อจำกัดความรับผิดชอบ: บทความนี้อ้างอิงจาก Yellow Paper ของ Byzantine รุ่น e94ebda เมื่อวันที่ 5 มิถุนายน 2018)

ชื่อเรื่องรอง

ต้นเมิร์กเคิล

ก่อนที่จะพูดถึงวัตถุข้อมูลหลักของ Ethereum ฉันอยากจะแนะนำสั้น ๆ ว่าต้นไม้ Merkle คืออะไรและคุณลักษณะที่ทำให้มันใช้งานได้

ต้นไม้ Merkle-Patricia มีคุณสมบัติที่น่าสนใจมากมาย และหากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งานใน Ethereum ฉันขอแนะนำให้อ่านบทความนี้

ใน Merkle tree โหนดลีฟจะเก็บแฮชของข้อมูลบล็อก ในขณะที่โหนดที่ไม่ใช่ลีฟจะเก็บแฮชของโหนดย่อย

คำอธิบายภาพ

  • -แผนผังแผนผังของ Merkle tree (รวมถึงโหนดและความสัมพันธ์ระหว่างโหนด)-

  • การเปลี่ยนแปลงใด ๆ ในข้อมูลที่ชี้โดย Merkle tree จะทำให้เกิดการเปลี่ยนแปลงในแฮชของโหนด เนื่องจากค่าแฮชที่เก็บในแต่ละโหนดพาเรนต์ขึ้นอยู่กับข้อมูลที่อยู่ในโหนดลูก การเปลี่ยนแปลงข้อมูลในโหนดลูกจะทำให้แฮชของโหนดพาเรนต์เปลี่ยนไป และผลกระทบดังกล่าวเป็นปฏิกิริยาลูกโซ่ จากลีฟโหนดไปยังรูทโหนด ดังนั้นการเปลี่ยนแปลงข้อมูลที่โหนดปลายสุดชี้ไปจะทำให้เกิดการเปลี่ยนแปลงในแฮชที่จัดเก็บโดยโหนดรูท จากลักษณะโครงสร้างข้างต้น เราสามารถทราบคุณลักษณะที่สำคัญสองประการ:

เมื่อพิจารณาว่าข้อมูลที่ชี้ไปที่ Merkle tree สองต้นนั้นเหมือนกันทุกประการหรือไม่ เราไม่จำเป็นต้องเปรียบเทียบโหนดแต่ละโหนด แต่จำเป็นต้องเปรียบเทียบแฮชที่เก็บไว้ในรูทโหนดเท่านั้น

สิ่งสำคัญเกี่ยวกับแอตทริบิวต์แรกคือเราสามารถใช้เฉพาะค่าแฮชของรูทโหนดเพื่อทำเครื่องหมายข้อมูลที่ต้นไม้ทั้งต้นชี้ไปในช่วงเวลาหนึ่ง ซึ่งหมายความว่าสามารถทำเครื่องหมายบล็อกได้โดยการบันทึกค่าแฮชของรูทโหนดเท่านั้น (โดยไม่ต้องเก็บข้อมูลทั้งหมดในบล็อกเชน) และข้อมูลไม่สามารถแก้ไขได้

จนถึงตอนนี้ เราได้ชี้แจงบทบาทของรูตโหนดแฮชใน Merkle tree และเราจะแนะนำอ็อบเจกต์หลักใน Ethereum

ชื่อเรื่องรอง

สถานะของโลกคือการแมปจากที่อยู่ (บัญชี) ไปยังสถานะของบัญชี แม้ว่าสถานะของโลกจะไม่ได้ถูกจัดเก็บไว้ในบล็อกเชน แต่ในคำอธิบายของกระดาษเหลือง สถานะของโลกก็ได้รับการบันทึกโดยต้นไม้เช่นกัน (ต้นไม้นี้เรียกอีกอย่างว่าฐานข้อมูลของรัฐหรือต้นไม้ของรัฐ) สถานะโลกสามารถดูได้ว่าเป็นสถานะสากลที่ได้รับการปรับปรุงอย่างต่อเนื่องเมื่อมีการทำธุรกรรม Ethereum เป็นเหมือนคอมพิวเตอร์ที่กระจายอำนาจ และสถานะของโลกคือฮาร์ดไดรฟ์ของคอมพิวเตอร์เครื่องนี้

คำอธิบายภาพ

-แผนผังสถานะโลกและคลังเก็บบัญชี-

ชื่อเรื่องรอง

สถานะบัญชี

มีบัญชีสองประเภทใน Ethereum: บัญชีภายนอก (EOA) และบัญชีสัญญา บัญชีที่เราใช้ในการส่งและรับ Ethereum ซึ่งกันและกันและใช้งานสัญญาอัจฉริยะคือบัญชี EOA และบัญชีที่สร้างขึ้นโดยอัตโนมัติเมื่อใช้งานสัญญาอัจฉริยะคือบัญชีสัญญา สัญญาอัจฉริยะแต่ละรายการมีบัญชี Ethereum เฉพาะของตนเอง

nonce

สถานะบัญชีจะสะท้อนถึงข้อมูลต่างๆ ของบัญชี Ethereum ตัวอย่างเช่น จะเก็บข้อมูลยอดคงเหลือของ Ethereum ของบัญชีปัจจุบัน จำนวนธุรกรรมที่ส่งโดยบัญชีปัจจุบัน...แต่ละบัญชีมีสถานะบัญชี

balance

มาดูสิ่งที่รวมอยู่ในสถานะบัญชี:

storageRoot

จำนวนธุรกรรมที่ส่งจากที่อยู่นี้ (หากปัจจุบันเป็นบัญชี EOA) หรือการดำเนินการสร้างสัญญาที่สร้างโดยบัญชีนี้ (ไม่ต้องสนใจว่าการดำเนินการสร้างสัญญาจะเป็นอย่างไรในตอนนี้)

codeHash

จำนวนอีเธอร์ (หน่วยวัดเป็น Wei) ที่บัญชีนี้เป็นเจ้าของ

ค่าแฮชของรูทโหนดของโครงสร้างที่เก็บข้อมูลบัญชี (เราจะแนะนำที่เก็บข้อมูลบัญชีในภายหลัง)

สำหรับบัญชีสัญญา บัญชีนี้เก็บค่าแฮชของรหัส EVM สำหรับบัญชี EOA ให้เว้นว่างไว้

ความไม่เปลี่ยนแปลงของ codeHash ทำให้ไม่สามารถซ่อมแซมและอัปเดตสัญญาอัจฉริยะที่มีช่องโหว่หากมีการปรับใช้ ตามนั้น สัญญาใหม่เพียงฉบับเดียวเท่านั้นที่สามารถปรับใช้ได้ (และเวอร์ชันที่มีช่องโหว่จะมีอยู่ในบล็อกเชนเสมอ) ด้วยเหตุนี้จึงจำเป็นต้องใช้ Truffle สำหรับการพัฒนาและการปรับใช้สัญญาอัจฉริยะ และปฏิบัติตามข้อกำหนดของแนวปฏิบัติที่ดีที่สุดเมื่อตั้งโปรแกรมด้วย Solidity

-สถานะบัญชีและแผนผังการจัดเก็บบัญชี-

ซื้อขาย

ชื่อเรื่องรอง


  • ซื้อขาย

  • ธุรกรรมทำให้เกิดการเปลี่ยนแปลงจากสถานะปัจจุบันไปยังสถานะถัดไป มีการทำธุรกรรมสามประเภทใน Ethereum:

  • ธุรกรรมที่โอนมูลค่าระหว่าง EOA (เช่น การเปลี่ยนขนาดยอดคงเหลือของผู้ส่งและผู้รับ)


ส่งข้อความเพื่อเรียกธุรกรรมของสัญญา (เช่น เพื่อตั้งค่าในสัญญาโดยการส่งข้อความเรียกเพื่อทริกเกอร์เมธอด setter)

ธุรกรรมสำหรับการปรับใช้สัญญา (เช่น การสร้างบัญชีสัญญา)

nonce

(จากมุมมองทางเทคนิค ธุรกรรมสองรายการแรกเหมือนกัน... เป็นธุรกรรมทั้งหมดที่เปลี่ยนสถานะบัญชีผ่านการส่งข้อความ ยกเว้นรายการหนึ่งเป็นบัญชี EOA และอีกรายการเป็นบัญชีสัญญา ที่นี่ ธุรกรรม แบ่งออกเป็นสามประเภท ทั้งนี้ เพื่อความสะดวกของผู้อ่านในการทำความเข้าใจ)

gasPrice

การทำธุรกรรมประกอบด้วยส่วนต่าง ๆ ดังต่อไปนี้:

gasLimit

จำนวนธุรกรรมที่ออกโดยบัญชีนี้ (หมายเหตุการพิสูจน์อักษร: สามารถเข้าใจได้คร่าวๆ ว่า "นี่คือธุรกรรมแรกของบัญชีนี้")

to


  • ค่าธรรมเนียม (วัดเป็น Wei) จ่ายต่อหน่วยของก๊าซเมื่อทำธุรกรรมนี้ ทำการคำนวณ

  • ปริมาณก๊าซสูงสุดที่สามารถใช้ได้เมื่อทำธุรกรรมนี้

  • หากธุรกรรมนี้ใช้สำหรับส่งอีเธอร์ นี่คือที่อยู่ EOA เพื่อรับอีเธอร์


value


  • หากธุรกรรมนี้ใช้เพื่อส่งข้อความไปยังสัญญา (เช่น เรียกใช้เมธอดในสัญญาอัจฉริยะ) นี่คือที่อยู่ของสัญญา

  • ถ้าธุรกรรมนี้ถูกใช้เพื่อสร้างสัญญา ค่านี้จะว่างเปล่า

  • หากธุรกรรมนี้กำลังส่งหรือรับอีเทอร์ นี่คือจำนวนโทเค็นใน Wei ที่ส่งไปยังบัญชีผู้รับ


v, r, s

หากธุรกรรมนี้ใช้เพื่อส่งข้อความถึงคู่สัญญา นี่คือจำนวนเงินที่ Wei จ่ายให้กับสัญญาอัจฉริยะที่ได้รับข้อความนี้

dataหากธุรกรรมนี้ถูกใช้เพื่อสร้างสัญญา นี่คือจำนวนอีเธอร์ใน Wei ที่จัดเก็บไว้ในบัญชีเมื่อเริ่มต้นสัญญา

ค่าที่ใช้ในลายเซ็นเข้ารหัสของธุรกรรม ซึ่งสามารถใช้กำหนดผู้ส่งธุรกรรมได้

init(ใช้สำหรับโอนค่าและส่งข้อความไปยังสัญญาอัจฉริยะเท่านั้น)

ข้อมูลอินพุตที่แนบมากับการเรียกข้อความ (เช่น หากคุณต้องการดำเนินการเมธอด setter ในสัญญาอัจฉริยะ พื้นที่ข้อมูลควรมีตัวระบุของเมธอด setter และค่าพารามิเตอร์ที่คุณต้องการตั้งค่า)

(เฉพาะการทำสัญญา)

อย่างที่คุณคาดไว้ ธุรกรรมทั้งหมดในบล็อกจะถูกจัดเก็บไว้ใน Merkle tree ด้วยเช่นกัน และค่าแฮชของโหนดรูทของทรีนี้จะถูกบันทึกโดยส่วนหัวของบล็อก! มาวิเคราะห์โครงสร้างบล็อกของ Ethereum กัน

ปิดกั้น

ชื่อเรื่องรอง

ปิดกั้น

ส่วนหัวของบล็อกเป็นส่วนหนึ่งของบล็อกเชนใน Ethereum โดยจะบันทึกค่าแฮชของบล็อกก่อนหน้า (หรือที่เรียกว่าบล็อกหลัก) และสร้างห่วงโซ่ที่รับรองด้วยการเข้ารหัสผ่านการเชื่อมต่อของส่วนหัวของบล็อก

เนื้อหาของบล็อกประกอบด้วยชุดของธุรกรรมที่บันทึกไว้ในบล็อกนี้ เช่นเดียวกับรายการส่วนหัวของบล็อกลุง (ommer) หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับบล็อกลุงฉันแนะนำให้อ่านบทความนี้

คำอธิบายภาพ

parentHash

-แผนภาพนามธรรมของบล็อก Ethereum-

ommersHash

เรามาแนะนำว่าส่วนหัวของบล็อกประกอบด้วยส่วนใดบ้าง

beneficiary

แฮชส่วนหัวของบล็อกของบล็อกก่อนหน้า แต่ละบล็อกประกอบด้วยแฮชของบล็อกก่อนหน้า ย้อนกลับไปยังบล็อกการกำเนิดบนห่วงโซ่ นี่คือการออกแบบโครงสร้างของการรักษาข้อมูลที่จะไม่ถูกแก้ไข (การดัดแปลงใด ๆ กับบล็อกก่อนหน้าจะส่งผลต่อค่าแฮชของบล็อกที่ตามมาทั้งหมด)

stateRoot

ค่าแฮชของส่วนหัวของบล็อกลุงและส่วนหนึ่งของเนื้อหาบล็อก

transactionsRoot

บัญชี Ethereum ที่ได้รับรายได้จากการขุดบล็อคนี้

receiptsRoot

แฮชของโหนดรูทของแผนผังสถานะโลก (หลังจากดำเนินการธุรกรรมทั้งหมดแล้ว)

logsBloom

ค่าแฮชของรูทโหนดของทรานแซคชันทรี ต้นไม้นี้มีธุรกรรมทั้งหมดของตัวบล็อก

difficulty

เมื่อใดก็ตามที่มีการทำธุรกรรม Ethereum จะสร้างใบเสร็จการทำธุรกรรมที่สอดคล้องกับผลลัพธ์ นี่คือแฮชของโหนดรูทของแผนผังการรับธุรกรรม

number

ตัวกรอง Bloom ซึ่งใช้เพื่อระบุว่ามีการสร้างบันทึกบางอย่างโดยธุรกรรมในบล็อกหนึ่งๆ หรือไม่ (หากคุณสนใจในด้านนี้ คุณสามารถดูคำตอบนี้ได้ใน Stack Overflow) สิ่งนี้จะหลีกเลี่ยงการจัดเก็บข้อมูลบันทึกเป็นกลุ่ม (ประหยัดพื้นที่มาก)

gasLimit

ค่าความยากของบล็อกนี้ นี่คือการวัดความยากในการขุดบล็อกปัจจุบัน (รายละเอียดและการคำนวณของแนวคิดนี้ไม่ครอบคลุมที่นี่)

gasUsed

จำนวนบล็อกคำนำทั้งหมด ค่านี้ระบุความสูงของบล็อกเชน (เช่น จำนวนบล็อกในบล็อกเชน) จำนวนบล็อกการกำเนิดคือ 0

timestamp

ทุกธุรกรรมใช้ก๊าซ ขีด จำกัด ของก๊าซระบุปริมาณก๊าซทั้งหมดที่สามารถใช้โดยการทำธุรกรรมทั้งหมดที่บันทึกไว้ในบล็อกนี้ นี่เป็นวิธีการจำกัดจำนวนธุรกรรมภายในบล็อก

extraData

ปริมาณก๊าซทั้งหมดที่ใช้จริงโดยการทำธุรกรรมแต่ละครั้งในบล็อก

mixHash

การประทับเวลา Unix เมื่อสร้างบล็อก โปรดจำไว้ว่าเนื่องจากลักษณะการกระจายอำนาจของเครือข่าย Ethereum เราไม่สามารถเชื่อถือค่านี้ได้ โดยเฉพาะอย่างยิ่งเมื่อเขียนสัญญาอัจฉริยะที่เกี่ยวข้องกับตรรกะทางธุรกิจที่เกี่ยวข้องกับเวลา

nonce

อาร์เรย์ไบต์ที่มีความยาวผันแปรได้ซึ่งสามารถป้อนอะไรก็ได้ เมื่อนักขุดสร้างบล็อก พวกเขาสามารถเพิ่มอะไรก็ได้ในพื้นที่นี้

อุ๊ย... พูดแล้วเปรี้ยวปากเลย... แนะนำให้ใจเย็นๆ ค่อยๆ ซึมซับ! แต่ฉันต้องการย้ำอีกครั้งว่าการอ่านบทความนี้ไม่ควรมุ่งที่จะจำทุกคำนามและหน้าที่ของมัน (คุณสามารถค้นหาได้ใน Google) ความตั้งใจดั้งเดิมในการเขียนของฉันคือการแนะนำทุกแง่มุมของวัตถุ Ethereum ด้วยวิธีง่ายๆ (อย่างน้อยก็ง่ายกว่ากระดาษสีเหลือง) เพื่อช่วยให้ผู้เริ่มต้นเข้าใจว่าคำศัพท์ทางวิชาชีพเหล่านั้นหมายถึงอะไร แค่คิดว่าบทความนี้เป็น "การเรียนรู้ Ethereum Objects อย่างโง่เขลา"! 🙂

สรุปแล้ว

ชื่อเรื่องรอง


  • สรุปแล้ว

  • มาสรุปสิ่งที่เราได้เรียนรู้กันโดยสังเขป! โดยทั่วไปแล้ว Ethereum มีต้นไม้นำหน้าสี่ต้น:

  • โครงสร้างสถานะโลกประกอบด้วยการแมปจากที่อยู่ไปยังสถานะบัญชี ค่าแฮชของรูทโหนดของ world state tree จะถูกบันทึกโดยบล็อก (ในฟิลด์ stateRoot) ซึ่งระบุสถานะปัจจุบันเมื่อสร้างบล็อก มีต้นไม้สถานะโลกเพียงต้นเดียวในเครือข่ายทั้งหมด

  • โครงสร้างการจัดเก็บบัญชีเก็บข้อมูลที่เกี่ยวข้องกับสัญญาอัจฉริยะบางอย่าง แฮชของโหนดรูทของแผนผังหน่วยเก็บข้อมูลบัญชี (ในฟิลด์ storageRoot) ถูกบันทึกโดยสถานะบัญชี แต่ละบัญชีมีแผนผังการจัดเก็บบัญชี


โครงสร้างธุรกรรมประกอบด้วยข้อมูลธุรกรรมทั้งหมดในบล็อก แฮชของรูทโหนดของทรานแซกชันทรีได้รับการบันทึกโดยส่วนหัวของบล็อก (ในฟิลด์ทรานแซกชันรูท) แต่ละบล็อกมีแผนผังธุรกรรม


  • แผนผังการรับธุรกรรมประกอบด้วยข้อมูลการรับสินค้าสำหรับธุรกรรมทั้งหมดในบล็อก นอกจากนี้ ส่วนหัวของบล็อก (ในพื้นที่ ReceiptRoot) ยังเก็บค่าแฮชของโหนดรูทของทรีใบเสร็จของธุรกรรม แต่ละบล็อกมีทรีใบเสร็จของธุรกรรมที่สอดคล้องกัน

  • วัตถุที่เรากำลังพูดถึงในวันนี้คือ:

  • สถานะของโลก: ฮาร์ดไดรฟ์ของคอมพิวเตอร์แบบกระจาย Ethereum เป็นการแมปจากที่อยู่ไปยังสถานะบัญชี

  • สถานะบัญชี: เก็บข้อมูลสถานะของบัญชี Ethereum แต่ละบัญชี สถานะบัญชียังมี storageRoot ของโครงสร้างสถานะบัญชี ซึ่งมีข้อมูลการจัดเก็บของบัญชี


บล็อก: มีลิงก์ไปยังบล็อกก่อนหน้า (parentHash) และเก็บธุรกรรมที่เมื่อดำเนินการจะส่งผลให้เกิดสถานะใหม่ในระบบ บล็อกยังบันทึก stateRoot,transactionRoot,receiptRoot,รูทโหนดแฮชของ world state tree,transaction tree และทรานแซกชันใบเสร็จรับเงินที่สอดคล้องกัน

ฉันต้องการใช้รูปภาพเพื่อแสดงข้อมูลแนวคิดต่างๆ ที่กล่าวถึงในบทความ

คำอธิบายภาพ

ETH
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก
https://t.me/Odaily_News
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
บัญชีทางการ
https://twitter.com/OdailyChina
กลุ่มสนทนา
https://t.me/Odaily_CryptoPunk
ค้นหา
สารบัญบทความ
คลังบทความของผู้เขียน
以太坊爱好者
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android