หนึ่งในความท้าทายของ Ethereum คือ โดยค่าเริ่มต้น ขนาดและความซับซ้อนของโปรโตคอลบล็อกเชนใด ๆ จะเพิ่มขึ้นเมื่อเวลาผ่านไป สิ่งนี้เกิดขึ้นที่สองที่
เพื่อให้ Ethereum รักษาตัวเองในระยะยาวเราต้องการแรงกดดันที่แข็งแกร่งต่อแนวโน้มทั้งสองนี้ลดความซับซ้อนและขยายตัวเมื่อเวลาผ่านไป แต่ในขณะเดียวกันเราจําเป็นต้องรักษาหนึ่งในคุณสมบัติหลักที่ทําให้บล็อกเชนยอดเยี่ยม: ความคงทนของพวกเขา คุณสามารถใส่ NFT, บันทึกความรักในการทําธุรกรรม calldata หรือสัญญาอัจฉริยะที่มีเงินล้าน onchain เข้าไปในถ้ําเป็นเวลาสิบปีออกมาและพบว่ามันยังคงรอคุณอ่านและโต้ตอบด้วย เพื่อให้ dapps รู้สึกสบายใจที่จะกระจายอํานาจอย่างเต็มที่และลบคีย์อัปเกรดพวกเขาต้องมั่นใจว่าการพึ่งพาของพวกเขาจะไม่อัปเกรดในลักษณะที่ทําลายพวกเขาโดยเฉพาะ L1 เอง
The Purge, 2023 roadmap.
ความสมดุลระหว่างความต้องการทั้งสองนี้และลดหรือย้อนกลับการขยายตัวความซับซ้อนและการสลายตัวในขณะที่รักษาความต่อเนื่องเป็นไปได้อย่างแน่นอนหากเราใส่ใจ สิ่งมีชีวิตสามารถทําได้: ในขณะที่อายุมากที่สุดเมื่อเวลาผ่านไป ไม่มีใครโชคดี. ระบบสังคมแม้กระทั่งสามารถ มีอายุยืน. ในบางครั้ง Ethereum ได้แสดงความสำเร็จอยู่แล้ว: การทำงานที่ได้รับการพิสูจน์หากหายไปส่วนใหญ่, คำสั่ง SELFDESTRUCT หายไปแล้วเป็นส่วนใหญ่, และโหนดสายพันธุ์เบคอนเก็บข้อมูลเก่าได้มากที่สุดเพียงหกเดือนเท่านั้น การค้นหาทางออกนี้สำหรับ Ethereum ในลักษณะที่ทั่วไปยิ่งขึ้น และการเคลื่อนไหวไปสู่ผลลัพธ์ที่เป็นที่มั่นคงสำหรับระยะยาวเป็นที่เดียวของ Ethereum คือความท้าทายสุดท้ายของความยืดหยุ่นในระยะยาวของ Ethereum ความยั่งยืนทางเทคนิคและความปลอดภัยเป็นอุปสรรคสุดท้าย
ณ เวลาที่เขียนข้อความนี้ โหนด Ethereum ที่ซิงค์เต็มร้อยต้องการประมาณ 1.1 เทระไบต์ของพื้นที่ดิสก์สำหรับผู้ใช้งานการดำเนินการรวมถึงอีกหลายร้อยกิกะไบต์สำหรับไคลเอ็นต์การตกลง. ความส่วนใหญ่ของสิ่งนี้เป็นประวัติศาสตร์: ข้อมูลเกี่ยวกับบล็อกประวัติศาสตร์ ธุรกรรมและใบเสร็จ ส่วนใหญ่ของซึ่งอายุมากกว่าหลายปี นี้หมายความว่าขนาดของโหนดจะเพิ่มขึ้นด้วยร้อยกิกะไบต์ในแต่ละปี แม้ว่าขีดจำกัดแก๊สจะไม่เพิ่มขึ้นเลย
คุณลักษณะที่ทำให้เรื่องการเก็บประวัติง่ายขึ้นคือเพราะทุกบล็อกชี้ไปที่บล็อกก่อนหน้าผ่านลิงก์แฮช (และอื่น ๆ โครง สร้าง) โดยมีความเห็นชอบในปัจจุบันมีพอเพียงที่จะมีความเห็นชอบในประวัติศาสตร์ ตลอดจนกว่าเครือข่ายจะมีความเห็นชอบในบล็อกล่าสุด บล็อกหรือธุรกรรมหรือสถานะ (ยอดเงินในบัญชี นอนซ์ รหัส การจัดเก็บ) ใด ๆ สามารถให้ได้โดยผู้แสดงความคิดเห็นบุคคลเดียวพร้อมกับพยายาม Merkle และพยายามช่วยให้ผู้อื่นสามารถตรวจสอบความถูกต้องของมันได้ ในขณะที่ความเห็นชอบเป็นโมเดลความเชื่อ N/2 ของ N ประวัติศาสตร์คือ1-of-N โมเดลความเชื่อ N.
นี่เป็นการเปิดตัวเลือกมากมายสําหรับวิธีที่เราสามารถจัดเก็บประวัติ ตัวเลือกธรรมชาติหนึ่งคือเครือข่ายที่แต่ละโหนดจัดเก็บข้อมูลเพียงเล็กน้อยเท่านั้น นี่คือวิธีที่เครือข่ายฝนตกหนักทํางานมานานหลายทศวรรษ: ในขณะที่เครือข่ายจัดเก็บและแจกจ่ายไฟล์หลายล้านไฟล์ผู้เข้าร่วมแต่ละคนจะจัดเก็บและแจกจ่ายไฟล์เพียงไม่กี่ไฟล์เท่านั้น บางทีวิธีการนี้อาจไม่จําเป็นต้องลดความแข็งแกร่งของข้อมูล หากการทําให้โหนดทํางานราคาไม่แพงมากขึ้นเราสามารถไปที่เครือข่ายที่มีโหนด 100,000 โหนดซึ่งแต่ละโหนดจัดเก็บประวัติแบบสุ่ม 10% จากนั้นข้อมูลแต่ละชิ้นจะถูกจําลองแบบ 10,000 ครั้ง - ปัจจัยการจําลองแบบเดียวกันกับเครือข่าย 10,000 โหนดที่แต่ละโหนดจัดเก็บทุกอย่าง
วันนี้ Ethereum ได้เริ่มย้ายออกจากแบบจําลองของโหนดทั้งหมดที่จัดเก็บประวัติศาสตร์ทั้งหมดตลอดไป บล็อกฉันทามติ (เช่นส่วนที่เกี่ยวข้องกับการพิสูจน์ฉันทามติการถือหุ้น) จะถูกเก็บไว้เป็นเวลา ~ 6 เดือนเท่านั้น Blobs จะถูกเก็บไว้เป็นเวลา ~ 18 วันเท่านั้น EIP-4444มีเป้าหมายที่จะนำเสนอระยะเวลาการเก็บรักษาของบล็อกและใบเสร็จที่ย้อนหลังนาน 1 ปี ซึ่งเป็นเป้าหมายระยะยาวที่จะมีระยะเวลาที่เป็นไปตามกฏหมาย (ซึ่งอาจเป็น ~18 วัน) ในช่วงที่แต่ละโหนดรับผิดชอบในการเก็บรักษาทุกอย่างแล้วมีเครือข่ายแบบ peer-to-peer ที่ประกอบด้วยโหนด Ethereum ที่เก็บข้อมูลเก่าๆ ในรูปแบบการกระจายข้อมูล
รหัสการลบสามารถใช้เพื่อเพิ่มความแข็งแกร่งในขณะที่ยังคงรักษาอัตราการทำซ้ำเหมือนเดิม ในความจริง ต่อมาบล็อบมาพร้อมรหัสการลบเพื่อรองรับการสุ่มความพร้อมข้อมูล วิธีการที่ง่ายที่สุดอาจจะเป็นการนำรหัสการลบนี้มาใช้ซ้ำ และนำข้อมูลบล็อบการดำเนินการและตรงต่อมตัดสินใส่บล็อบด้วย
งานที่เหลือหลักๆ เป็นการสร้างและผสานโซลูชันกระจ敏จระจักในการเก็บประวัติแบบแจจอแจการเจดแจการ-อย่างน้อยแล้วประวัติการดำเนินงาน แต่ในที่สุดยังรวมถึงข้อตกลงและ blog วิธีที่ง่ายที่สุดสำหรับนี้คือ (i) การเพียงแค่นำเข้าห้องสมุดทอร์เรนต์ที่มีอยู่แล้ว และ (ii) หรือโซลูชันของ Ethereum-native ที่เรียกว่าเครือข่าย Portal. เมื่อเปิดตัวอย่างใดอย่างหนึ่งแล้วเราสามารถเปิด EIP-4444 ได้ EIP-4444 นั้นไม่ต้องใช้ hard fork แม้ว่าจะต้องใช้โปรโตคอลเครือข่ายเวอร์ชันใหม่ ด้วยเหตุนี้จึงมีค่าในการเปิดใช้งานสําหรับลูกค้าทั้งหมดในเวลาเดียวกันเพราะมิฉะนั้นมีความเสี่ยงที่ลูกค้าจะทํางานผิดปกติจากการเชื่อมต่อกับโหนดอื่น ๆ ที่คาดว่าจะดาวน์โหลดประวัติทั้งหมด แต่ไม่ได้รับจริง
ข้อแลกเปลี่ยนหลักเกี่ยวข้องกับความยากที่เราพยายามทําให้ข้อมูลทางประวัติศาสตร์ "โบราณ" พร้อมใช้งาน ทางออกที่ง่ายที่สุดคือการหยุดจัดเก็บประวัติศาสตร์โบราณในวันพรุ่งนี้และพึ่งพาโหนดเก็บถาวรที่มีอยู่และผู้ให้บริการส่วนกลางต่างๆสําหรับการจําลองแบบ นี่เป็นเรื่องง่าย แต่สิ่งนี้ทําให้ตําแหน่งของ Ethereum อ่อนแอลงในฐานะสถานที่ทําบันทึกถาวร เส้นทางที่ยากกว่า แต่ปลอดภัยกว่าคือการสร้างและรวมเครือข่าย torrent เพื่อจัดเก็บประวัติด้วยวิธีกระจายก่อน ที่นี่มีสองมิติของ "เราพยายามอย่างหนัก":
วิธีการที่เชื่อมั่นในระดับสูงสุดสำหรับ (1) จะเกี่ยวข้องพิสูจน์การเก็บรักษา: ซึ่งจริงๆ ต้องการให้ผู้พิสูจน์การเสียค่าของแต่ละคนเก็บบางเปอร์เซ็นต์ของประวัติ และตรวจสอบด้วยวิธีการเข้ารหัสทางคริปโตอย่างเป็นประจำว่าพวกเขาทำเช่นนั้น วิธีการที่สมเหตุสมผลกว่าคือกำหนดมาตรฐานอิสระสำหรับเปอร์เซ็นต์ของประวัติที่แต่ละลูกค้าเก็บไว้
สำหรับ (2) การปฏิบัติงานพื้นฐานนั้นเกี่ยวข้องกับการเรียกใช้งานงานที่ทำแล้วในปัจจุบัน: พอร์ทัลเก็บไฟล์ ERA ที่มีประวัติศาสตร์ Ethereum ทั้งหมดอยู่แล้ว การปฏิบัติงานที่ละเอียดอ่อนมากขึ้นจะเกี่ยวข้องกับการเชื่อมต่อขั้นตอนการซิงค์ ดังนั้นหากมีคนต้องการซิงค์โหนดเก็บประวัติศาสตร์ทั้งหมดหรือโหนดเก็บถาวร พวกเขาสามารถทำได้โดยตรงจากเครือข่ายพอร์ทัล โดยไม่ต้องมีโหนดเก็บถาวรอื่นออนไลน์อยู่
การลดข้อกําหนดในการจัดเก็บประวัติมีความสําคัญมากกว่าการไร้สัญชาติหากเราต้องการทําให้การเรียกใช้หรือหมุนโหนดเป็นเรื่องง่ายมาก: จาก 1.1 TB ที่โหนดจําเป็นต้องมี ~ 300 GB เป็นสถานะและส่วนที่เหลือ ~ 800 GB คือประวัติ วิสัยทัศน์ของโหนด Ethereum ที่ทํางานบนนาฬิกาอัจฉริยะและใช้เวลาเพียงไม่กี่นาทีในการตั้งค่าจะสามารถทําได้ก็ต่อเมื่อมีการใช้ทั้งการไร้สัญชาติและ EIP-4444
การจำกัดการเก็บรักษาประวัติยังทำให้เป็นไปได้มากขึ้นสำหรับการปฏิบัติงานของโหนด Ethereum รุ่นใหม่ๆ ที่รองรับเฉพาะเวอร์ชันล่าสุดของโปรโตคอล ซึ่งทำให้โหนดนั้นง่ายและกระชับมากขึ้น เช่น เราสามารถลบโค้ดหลายบรรทัดได้ด้วยความปลอดภัยตอนนี้ เนื่องจากช่องว่างในการเก็บข้อมูลที่สร้างขึ้นในช่วงการโจมตี DoS ในปี 2016 ได้ถูกลบออกทั้งหมดแล้วถูกนำออก. ตอนนี้การเปลี่ยนไปใช้หลักฐานการถือหุ้นเป็นประวัติศาสตร์โบราณลูกค้าสามารถลบรหัสที่เกี่ยวข้องกับการพิสูจน์การทํางานทั้งหมดได้อย่างปลอดภัย
แม้ว่าเราจะลบความจำเป็นในการเก็บรวมประวัติของไคลเอนต์ไปแล้ว ความต้องการในการเก็บข้อมูลของไคลเอนต์จะยังคงเติบโตต่อไป เพิ่มขึ้นประมาณ 50 กิโลไบต์ต่อปี เนื่องจากการเติบโตต่อเนื่องของสถานะ: ยอดเงินคงเหลือและเลข nonce รหัสสัญญาและการเก็บข้อมูลสัญญา ผู้ใช้สามารถชำระค่าใช้จ่ายครั้งเดียวเพื่อบังคับให้ไคลเอนต์ Ethereum ที่มีอยู่และที่จะเกิดขึ้นในอนาคตบรรษัท
รัฐนั้นยากต่อการ "หมดอายุ" มากกว่าประวัติศาสตร์เนื่องจาก EVM ได้รับการออกแบบโดยพื้นฐานจากสมมติฐานที่ว่าเมื่อวัตถุของรัฐถูกสร้างขึ้นแล้วมันจะอยู่ที่นั่นเสมอและสามารถอ่านได้โดยธุรกรรมใด ๆ ได้ตลอดเวลา หากเราแนะนําการไร้สัญชาติมีข้อโต้แย้งว่าบางทีปัญหานี้อาจไม่เลว: มีเพียงผู้สร้างบล็อกระดับพิเศษเท่านั้นที่จะต้องจัดเก็บสถานะและโหนดอื่น ๆ ทั้งหมด (แม้กระทั่ง รายการการรวมอยู่ในการผลิต!) สามารถทำงานในสภาวะที่ไม่มีสถานะ อย่างไรก็ตาม มีความเห็นว่าเราไม่ต้องการพึ่งพาความไม่มีสถานะมากเกินไป และในที่สุดเราอาจต้องการหมดอายุสถานะเพื่อที่จะรักษา Ethereum ให้เป็นสิ่งที่กระจายออกไป
ในวันนี้เมื่อคุณสร้างอ็อบเจ็กต์สถานะใหม่ (ซึ่งอาจเกิดขึ้นในหนึ่งในสามวิธี: (i) ส่ง ETH ไปยังบัญชีใหม่, (ii) สร้างบัญชีใหม่ด้วยโค้ด, (iii) ตั้งค่าช่องจังหวะการเก็บรักษาที่ไม่เคยถูกสัมผัสมาก่อน), อ็อบเจ็กต์สถานะนั้นจะอยู่ในสถานะตลอดไป สิ่งที่เราต้องการแทนคือให้วัตถุหมดอายุโดยอัตโนมัติตามเวลา ความท้าทายสำคัญคือการทำเช่นนี้ให้สำเร็จสองประการ:
มันง่ายที่จะแก้ปัญหาโดยไม่บรรลุเป้าหมายเหล่านี้ ตัวอย่างเช่น คุณสามารถให้อ็อบเจ็กต์แต่ละสถานะเก็บตัวนับสําหรับวันหมดอายุ (ซึ่งสามารถขยายได้โดยการเผาไหม้ ETH ซึ่งอาจเกิดขึ้นโดยอัตโนมัติทุกครั้งที่อ่านหรือเขียน) และมีกระบวนการที่วนซ้ําผ่านสถานะเพื่อลบออบเจ็กต์สถานะที่หมดอายุ อย่างไรก็ตามสิ่งนี้แนะนําการคํานวณเพิ่มเติม (และแม้แต่ข้อกําหนดในการจัดเก็บ) และไม่เป็นไปตามข้อกําหนดด้านความเป็นมิตรต่อผู้ใช้อย่างแน่นอน นักพัฒนาก็จะมีช่วงเวลาที่ยากลําบากในการให้เหตุผลเกี่ยวกับกรณีขอบที่เกี่ยวข้องกับค่าพื้นที่เก็บข้อมูลบางครั้งการรีเซ็ตเป็นศูนย์ หากคุณทําทั้งสัญญาจับเวลาหมดอายุสิ่งนี้จะทําให้ชีวิตง่ายขึ้นในทางเทคนิคสําหรับนักพัฒนา แต่มันทําให้เศรษฐศาสตร์ยากขึ้น: นักพัฒนาจะต้องคิดเกี่ยวกับวิธีการ "ส่งผ่าน" ต้นทุนการจัดเก็บอย่างต่อเนื่องให้กับผู้ใช้ของพวกเขา
เป็นปัญหาที่ชุมชนการพัฒนา Ethereum คอร์สตรัคเกอร์ต่อสู้กับมาหลายปี รวมถึงข้อเสนอเช่นบล็อกเชนเช่า“ และ “regenesisในที่สุด เรารวมส่วนที่ดีที่สุดจากข้อเสนอและรวมกันเข้าไปที่สองหมวดหมู่ของ "known least bad solutions":
ข้อเสนอให้หมดอายุส่วนบางส่งผลตามหลักการเดียวกัน พวกเราแบ่งสถานะเป็นชิ้นเล็ก ๆ ทุกคนจัดเก็บ 'แผนที่ระดับบน' ของสถานะที่ชัดเจนหรือไม่ชัดเจนโดยถาวร ข้อมูลภายในแต่ละชิ้นจะถูกเก็บไว้เท่านั้นหากข้อมูลนั้นได้รับการเข้าถึงเร็ว ๆ นี้มีกลไก 'การฟื้นคืนชีพ' ที่ถ้าชิ้นหนึ่งไม่ได้เก็บไว้อีกต่อไป ใครก็สามารถนำข้อมูลนั้นกลับมาโดยการ提供พิสูจน์ว่าข้อมูลนั้นเป็นอย่างไร
ความแตกต่างหลัก ๆ ระหว่างข้อเสนอเหล่านี้คือ: (i) เราจะกำหนดคำว่า "เร็ว ๆ นี้" อย่างไร และ (ii) เราจะกำหนดคำว่า "ชั่วโมง" อย่างไร หนึ่งข้อเสนอที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นEIP-7736, ซึ่งสร้างขึ้นบนการออกแบบ “stem-and-leaf” นำเสนอสำหรับต้นไม้ Verkleในการออกแบบนี้ ส่วนหัว รหัส และช่องจัดเก็บที่ติดกันจะถูกเก็บที่เดียวกันใต้ “แกน” เดียวกัน ข้อมูลที่เก็บที่เดียวกันในแกนนั้นสามารถมีได้สูงสุด 256 * 31 = 7,936 ไบต์ ในกรณีส่วนมาก เพียงแค่ส่วนหัวและรหัสทั้งหมดและหลายช่องจัดเก็บสำคัญของบัญชีจะถูกเก็บใต้แกนเดียวกัน หากข้อมูลในแกนที่กำหนดไว้ไม่ได้อ่านหรือเขียนเป็นเวลา 6 เดือน ข้อมูลจะไม่ถูกเก็บและจะถูกเก็บเพียงการสังซื้อรับ (“stub”) 32 ไบต์เท่านั้น ธุรกรรมในอนาคตที่เข้าถึงข้อมูลดังกล่าวจะต้อง “ฟื้นคืน” ข้อมูลด้วยการพิสูจน์ที่จะถูกตรวจสอบกับ stub
มีวิธีอื่น ๆ ในการนำแนวคิดที่คล้ายกันมาใช้งาน ตัวอย่างเช่นหากความละเอียดในระดับบัญชีไม่เพียงพอ เราสามารถทำแผนที่ที่แต่ละ 1/232 ของต้นไม้จะถูกควบคุมด้วยกลไกเหมือนกัน
สิ่งนี้ยุ่งยากกว่าเนื่องจากสิ่งจูงใจ: ผู้โจมตีสามารถบังคับให้ลูกค้าจัดเก็บสถานะจํานวนมากอย่างถาวรโดยใส่ข้อมูลจํานวนมากลงในทรีย่อยเดียวและส่งธุรกรรมเดียวทุกปีเพื่อ "ต่ออายุต้นไม้" หากคุณทําให้ค่าใช้จ่ายในการต่ออายุเป็นสัดส่วน (หรือระยะเวลาการต่ออายุผกผันตามสัดส่วน) กับขนาดต้นไม้ใครบางคนอาจทําให้ผู้ใช้รายอื่นเศร้าโศกโดยใส่ข้อมูลจํานวนมากลงในทรีย่อยเดียวกันกับพวกเขา เราสามารถพยายาม จํากัด ปัญหาทั้งสองโดยการทําให้ความละเอียดแบบไดนามิกตามขนาดต้นไม้ย่อย: ตัวอย่างเช่นแต่ละวัตถุสถานะ 216 = 65536 ติดต่อกันอาจถือว่าเป็น "กลุ่ม" อย่างไรก็ตามแนวคิดเหล่านี้มีความซับซ้อนมากขึ้น วิธีการตาม STEM นั้นง่ายและจัดแนวสิ่งจูงใจเพราะโดยทั่วไปข้อมูลทั้งหมดภายใต้ STEM จะเกี่ยวข้องกับแอปพลิเคชันหรือผู้ใช้เดียวกัน
หากเราต้องการหลีกเลี่ยงการเติบโตของสถานะถาวรทั้งหมด แม้แต่กระเป๋าสั้น 32 ไบต์ จะเป็นปัญหาที่ยาก เนื่องจาก@vbuterin/state_size_management#Resurrection-conflicts">resurrection conflicts: จะเกิดอะไรขึ้นถ้าวัตถุของรัฐถูกลบออกการดําเนินการ EVM ในภายหลังทําให้วัตถุของรัฐอื่นอยู่ในตําแหน่งเดียวกัน แต่หลังจากนั้นคนที่ใส่ใจเกี่ยวกับวัตถุสถานะเดิมจะกลับมาและพยายามกู้คืน? เมื่อสถานะบางส่วนหมดอายุ "ต้นขั้ว" จะป้องกันไม่ให้มีการสร้างข้อมูลใหม่ เมื่อหมดอายุเต็มสถานะเราไม่สามารถจัดเก็บแม้แต่ต้นขั้วได้
การออกแบบตามระยะเวลาที่อยู่เป็นแนวคิดที่รู้จักกันดีที่สุดในการแก้ปัญหานี้ แทนที่จะมีต้นไม้ของรัฐหนึ่งต้นที่จัดเก็บทั้งรัฐเรามีรายการต้นไม้ของรัฐที่เติบโตอย่างต่อเนื่องและรัฐใด ๆ ที่อ่านหรือเขียนจะถูกบันทึกไว้ในต้นไม้ของรัฐล่าสุด ต้นไม้ของรัฐที่ว่างเปล่าใหม่จะถูกเพิ่มหนึ่งครั้งต่อช่วงเวลา (คิดว่า: 1 ปี) ต้นไม้ของรัฐที่มีอายุมากกว่าจะถูกแช่แข็งเป็นของแข็ง โหนดเต็มคาดว่าจะเก็บต้นไม้สองต้นล่าสุดเท่านั้น หากวัตถุของรัฐไม่ได้สัมผัสเป็นเวลาสองช่วงเวลาและตกลงไปในต้นไม้ที่หมดอายุแล้วมันยังสามารถอ่านหรือเขียนถึงได้ แต่การทําธุรกรรมจะต้องพิสูจน์หลักฐานของ Merkle สําหรับมัน - และเมื่อเป็นเช่นนั้นสําเนาจะถูกบันทึกไว้ในต้นไม้ล่าสุดอีกครั้ง
แนวคิดหลักในการทําให้สิ่งนี้เป็นมิตรกับผู้ใช้และนักพัฒนาคือแนวคิดของช่วงเวลาที่อยู่ รอบระยะเวลาที่อยู่คือหมายเลขที่เป็นส่วนหนึ่งของที่อยู่ กฎสําคัญคือที่อยู่ที่มีช่วงเวลาที่อยู่ N สามารถอ่านหรือเขียนถึงในระหว่างหรือหลังช่วงเวลา N เท่านั้น (เช่นเมื่อรายการต้นไม้ของรัฐถึงความยาว N) หากคุณกําลังบันทึกวัตถุสถานะใหม่ (เช่นสัญญาใหม่หรือยอดคงเหลือ ERC20 ใหม่) หากคุณแน่ใจว่าได้ใส่วัตถุของรัฐลงในสัญญาที่มีระยะเวลาที่อยู่เป็น N หรือ N-1 คุณสามารถบันทึกได้ทันทีโดยไม่จําเป็นต้องแสดงหลักฐานว่าไม่มีอะไรมาก่อน ในทางกลับกันการเพิ่มเติมหรือแก้ไขใด ๆ ที่จะระบุในช่วงเวลาที่อยู่เก่าจําเป็นต้องมีการพิสูจน์
การออกแบบนี้รักษาคุณสมบัติปัจจุบันส่วนใหญ่ของ Ethereum มีน้ําหนักเบามากในการคํานวณเพิ่มเติมช่วยให้สามารถเขียนแอปพลิเคชันได้เกือบเหมือนที่เป็นอยู่ในปัจจุบัน (ERC20s จะต้องเขียนใหม่เพื่อให้แน่ใจว่ายอดคงเหลือของที่อยู่ที่มีระยะเวลาที่อยู่ N จะถูกเก็บไว้ในสัญญาลูกซึ่งมีระยะเวลาที่อยู่ N) และแก้ปัญหา "ผู้ใช้เข้าไปในถ้ําเป็นเวลาห้าปี" อย่างไรก็ตามมันมีปัญหาใหญ่อย่างหนึ่ง: ต้องขยายที่อยู่เกิน 20 ไบต์เพื่อให้พอดีกับระยะเวลาที่อยู่
หนึ่งข้อเสนอคือการนำเข้ารูปแบบที่อยู่ 32 ไบต์ใหม่ซึ่งรวมถึงหมายเลขเวอร์ชัน หมายเลขช่วงที่อยู่ และการแยกขยายแฮช
0x01000000000157aE408398dF7E5f4552091A69125d5dFcb7B8C2659029395bdF
เลขเวอร์ชันสีแดงคือเลขเวอร์ชัน สี่เลขศูนย์สีส้มที่นี่เป็นพื้นที่ว่างที่จะใส่หมายเลขชาร์ดในอนาคต สีเขียวคือหมายเลขระยะเวลาของที่อยู่ สีฟ้าคือแฮช 26 ไบต์
ความท้าทายสำคัญที่นี่คือความเข้ากันได้ย้อนหลัง สัญญาที่มีอยู่ออกแบบโดยใช้ที่อยู่ 20 ไบต์และบ่อยครั้งใช้เทคนิค byte-packing ที่สุดแน่นอนซึ่งเหลือเฉพาะที่อยู่ขนาด 20 ไบต์เท่านั้น@ipsilon/address-space-extension-exploration">หนึ่งไอเดียในการแก้ปัญหานี้เกี่ยวข้องกับแผนที่การแปลภาษาซึ่งสัญญาแบบเก่าที่ปฏิสัมพันธ์กับที่อยู่แบบใหม่จะเห็นแฮช 20 ไบต์ของที่อยู่แบบใหม่ อย่างไรก็ตามการทำให้มันปลอดภัยนี้มีความซับซ้อนที่สำคัญ
วิธีการอื่น ๆ ก็เข้าไปในทิศทางที่ต่างกัน: เราห้ามทันทีบางช่วงย่อยขนาด 2128 ของที่อยู่ (เช่น ทุกที่อยู่ที่เริ่มต้นด้วย 0xffffffff) แล้วใช้ช่วงนั้นเพื่อนำเสนอที่อยู่ที่มีระยะเวลาที่อยู่และแฮช 14 ไบต์
0xfffffff000169125d5dFcb7B8C2659029395bdF
ความเสียสละที่วิธีการนี้ทำได้คือเพิ่มความเสี่ยงด้านความปลอดภัยสําหรับที่อยู่ที่ขัดแย้งกัน: ที่อยู่ที่ถือสินทรัพย์หรือสิทธิ แต่โค้ดของมันยังไม่ได้เผยแพร่ไปยังเครือข่าย ความเสี่ยงเกี่ยวกับการมีคนสร้างที่อยู่ซึ่งอ้างว่ามีโค้ดชิ้นหนึ่ง (ที่ยังไม่ได้เผยแพร่) แต่ยังมีโค้ดอีกชิ้นที่ถูกต้องซึ่งมีการแฮชไปยังที่อยู่เดียวกัน การคำนวณให้เกิดการชนกันแบบนั้นต้องใช้ 280 hashes วันนี้; การกระทำพื้นที่ที่อยู่จะลดจำนวนนี้ลงเหลือเพียง 2 ที่สามารถเข้าถึงได้ง่ายมาก56 hashes.
พื้นที่ความเสี่ยงที่สำคัญ ที่อยู่ที่จำลองที่ไม่ใช่กระเป๋าเงินที่ถือโดยเจ้าของคนเดียว เป็นกรณีที่หาได้ยากในปัจจุบัน แต่เป็นไปได้ที่จะกลายเป็นสิ่งที่ทั่วไปมากขึ้นเมื่อเราเข้าสู่โลก multi-L2 วิธีการที่เดียวที่สามารถทำได้คือ ยอมรับความเสี่ยงนี้โดยตรง แต่ต้องระบุทุกกรณีการใช้ที่สามารถเกิดปัญหาและคิดทางเลือกที่มีประสิทธิภาพ
ฉันเห็นทางเลือกสี่ทางที่เป็นไปได้สำหรับอนาคต:
หนึ่งจุดสำคัญคือปัญหาที่ยากลำบากเกี่ยวกับการขยายพื้นที่ที่อยู่และการหดของพื้นที่ที่อยู่จะต้องได้รับการพิจารณาในที่สุดไม่ว่าจะมีการใช้แผนการหมดอายุของสถานะที่ขึ้นอยู่กับการเปลี่ยนแปลงรูปแบบของที่อยู่หรือไม่ ในปัจจุบันใช้เวลาประมาณ 280การแปลงค่าแฮชเพื่อสร้างการชนที่อยู่ ซึ่งเป็นภาระการคำนวณที่เป็นไปได้อยู่แล้วสำหรับผู้กระทำทรัพยากรที่ดีมาก: GPU สามารถทำได้ประมาณ 227 hashes, so running for a year it can compute 252, ดังนั้นทั้งหมด~2^30 GPUs ในโลก สามารถคํานวณการชนกันใน ~ 1/4 ของปีและ FPGA และ ASIC สามารถเร่งสิ่งนี้ต่อไปได้ ในอนาคตการโจมตีดังกล่าวจะเปิดกว้างสําหรับผู้คนมากขึ้นเรื่อย ๆ ดังนั้นค่าใช้จ่ายที่แท้จริงในการดําเนินการหมดอายุของรัฐเต็มรูปแบบอาจไม่สูงอย่างที่คิดเนื่องจากเราต้องแก้ปัญหาที่อยู่ที่ท้าทายมากนี้โดยไม่คํานึงถึง
การทําวันหมดอายุของรัฐอาจทําให้การเปลี่ยนจากรูปแบบต้นไม้ของรัฐหนึ่งไปยังอีกรูปแบบหนึ่งง่ายขึ้นเนื่องจากไม่จําเป็นต้องมีขั้นตอนการเปลี่ยน: คุณสามารถเริ่มสร้างต้นไม้ใหม่โดยใช้รูปแบบใหม่จากนั้นทํา hard fork เพื่อแปลงต้นไม้เก่า ดังนั้นแม้ว่าการหมดอายุของรัฐจะซับซ้อน แต่ก็มีประโยชน์ในการลดความซับซ้อนของแผนงานด้านอื่น ๆ
หนึ่งในเงื่อนไขสำคัญของความปลอดภัย ความเข้าถึงได้สะดวกและความเป็นกลางที่น่าเชื่อถือ คือความเรียบง่าย หากโปรโตคอลมีความสวยงามและเรียบง่ายจะช่วยลดโอกาสที่จะมีข้อบกพร่อง มันเพิ่มโอกาสที่นักพัฒนาใหม่จะสามารถเข้ามาและทํางานกับส่วนใดส่วนหนึ่งของมัน มีแนวโน้มที่จะยุติธรรมและง่ายต่อการป้องกันผลประโยชน์พิเศษ น่าเสียดายที่โปรโตคอลเช่นเดียวกับระบบสังคมใด ๆ โดยค่าเริ่มต้นจะซับซ้อนมากขึ้นเมื่อเวลาผ่านไป หากเราไม่ต้องการให้ Ethereum เข้าสู่หลุมดําที่มีความซับซ้อนเพิ่มขึ้นเรื่อย ๆ เราจําเป็นต้องทําหนึ่งในสองสิ่ง: (i) หยุดทําการเปลี่ยนแปลงและ ossify โปรโตคอล (ii) สามารถลบคุณสมบัติและลดความซับซ้อนได้จริง เส้นทางกลางของการเปลี่ยนแปลงโปรโตคอลน้อยลงและลบความซับซ้อนเล็กน้อยเมื่อเวลาผ่านไปก็เป็นไปได้เช่นกัน ส่วนนี้จะพูดถึงวิธีที่เราสามารถลดหรือลบความซับซ้อน
ไม่มีการแก้ไขเดียวใดที่สามารถลดความซับซ้อนของโปรโตคอลลงได้ ลักษณะธรรมชาติของปัญหาคือมีการแก้ไขเล็กน้อยมาก
ตัวอย่างหนึ่งที่เสร็จสมบูรณ์แล้วและสามารถใช้เป็นแบบแผนการดำเนินงานสำหรับวิธีการจัดการกับอื่น ๆ ได้แก่@vbuterin/selfdestruct">removal ของ SELFDESTRUCT opcode SELFDESTRUCT opcode เป็น opcode เดียวที่สามารถปรับเปลี่ยนช่องเก็บข้อมูลได้ไม่ จํากัด จํานวนภายในบล็อกเดียวทําให้ไคลเอนต์ต้องใช้ความซับซ้อนมากขึ้นอย่างมากเพื่อหลีกเลี่ยงการโจมตี DoS จุดประสงค์เดิมของ opcode คือเพื่อให้สามารถล้างสถานะโดยสมัครใจทําให้ขนาดของรัฐลดลงเมื่อเวลาผ่านไป ในทางปฏิบัติมีน้อยมากที่ลงเอยด้วยการใช้มัน การ opcode ถูกปรับลด เพื่ออนุญาตเฉพาะบัญชีที่ทําลายตัวเองที่สร้างขึ้นในธุรกรรมเดียวกันใน Dencun hardfork วิธีนี้ช่วยแก้ปัญหา DoS และช่วยให้โค้ดไคลเอ็นต์ง่ายขึ้นอย่างมาก ในอนาคตมันน่าจะสมเหตุสมผลที่จะลบ opcode อย่างสมบูรณ์ในที่สุด
ตัวอย่างบางประการที่สำคัญของโอกาสในการบรรลุเป้าหมายของโปรโตคอลที่ได้รับการระบุจนถึงตอนนี้รวมถึงต่อไปนี้ แรก ตัวอย่างบางอย่างที่อยู่นอก EVM; เหล่านี้มีความไม่รบและโดยน้อยเพียงพอที่จะได้รับการตกลงและนำมาใช้ในระยะเวลาที่สั้นกว่า
ตอนนี้มีตัวอย่างบางอย่างที่อยู่ภายใน EVM:
ข้อเสียเปรียบหลักในการทําการลดความซับซ้อนของคุณลักษณะนี้คือ (i) เราลดความซับซ้อนลงมากแค่ไหนและความเข้ากันได้ย้อนหลังได้เร็วแค่ไหนเมื่อเทียบกับ (ii) คุณค่าของ Ethereum ในฐานะห่วงโซ่มาจากการเป็นแพลตฟอร์มที่คุณสามารถปรับใช้แอปพลิเคชันและมั่นใจได้ว่าจะยังคงใช้งานได้หลายปีนับจากนี้ ในขณะเดียวกันก็เป็นไปได้ที่จะนําอุดมคตินั้นไปไกลเกินไปและ เพื่อจะพูดให้เข้าใจง่ายขึ้น วิลเลียม เจนนิงส์ ไบรอัน“ล้มล้าง Ethereum บนครูซิฟายเออร์เรียบร้อย” หากมีแอปพลิเคชันเพียงสองตัวใน Ethereum ที่ใช้คุณสมบัติที่กำหนด โดยที่หนึ่งไม่มีผู้ใช้เลยมาหลายปีและอีกตัวก็ใช้งานน้อยมากและรักษามูลค่ารวม $57 เท่านั้น แล้วเราควรเพียงนำคุณสมบัติออก เมื่อมีความจำเป็น จะจ่ายค่าเสียหายให้เหยื่อ $57 จากกระเป๋าเราเอง
ปัญหาทางสังคมที่กว้างขวางคือการสร้างท่อประมาณมาตรฐานสำหรับการทำการเปลี่ยนแปลงที่ไม่ใช่ฉุกเฉินที่ทำให้เกิดความไม่ประสบความสำเร็จในการเข้ากันได้ย้อนหลัง หนทางที่หนึ่งในการเข้ามาถึงเรื่องนี้คือการสำรวจและขยายที่ได้รับการรับรองอยู่แล้ว เช่น กระบวนการ SELFDESTRUCT ท่อประมาณมาตรฐานดูเหมือนอย่างไร
ควรมีท่อระบายนานหลายปีระหว่างขั้นตอนที่ 1 และขั้นตอนที่ 4 พร้อมข้อมูลชัดเจนเกี่ยวกับสิ่งที่อยู่ที่ขั้นไหน ณ จุดนั้น จะมีการแลกเปลี่ยนระหว่างความกระตือรือร้นและเร็วกับท่อระบายคุณลักษณะ โดยการมีการระบายท่อการเอาคุณลักษณะออก มีข้อจำกัด มากกว่าการระวังและใช้ทรัพยากรมากขึ้นในด้านอื่นของการพัฒนาโปรโตคอล แต่เรายังคงอยู่ห่างไกลจาก Pareto frontier
ชุดของการเปลี่ยนแปลงที่สำคัญที่ได้รับการเสนอให้ใช้กับ EVM คือ รูปแบบอ็อบเจ็กต์ EVM (EOF). EOF นำเสนอการเปลี่ยนแปลงจำนวนมาก เช่น การห้ามการสังเกตเห็นก๊าซ การสังเกตเห็นโค้ด (เช่น ไม่มี CODECOPY) อนุญาตให้กระโดดไปยังจุดที่เป็นค่าคงที่เท่านั้น จุดปลายทางคือการอนุญาตให้ EVM ได้รับการอัปเกรดมากขึ้น ในทางที่มีคุณสมบัติที่แข็งแกร่งมากขึ้น พร้อมทั้งยังรักษาความเข้ากันได้ย้อนหลัง (เนื่องจาก EVM ก่อน EOF ยังคงมีอยู่)
สิ่งนี้มีข้อได้เปรียบในการสร้างเส้นทางธรรมชาติในการเพิ่มคุณสมบัติ EVM ใหม่และส่งเสริมการโยกย้ายไปยัง EVM ที่เข้มงวดมากขึ้นพร้อมการรับประกันที่แข็งแกร่งขึ้น มีข้อเสียที่เพิ่มความซับซ้อนของโปรโตคอลอย่างมีนัยสําคัญเว้นแต่เราจะสามารถหาวิธีเลิกใช้และลบ EVM เก่าได้ในที่สุด คําถามสําคัญประการหนึ่งคือ: EOF มีบทบาทอย่างไรในข้อเสนอการลดความซับซ้อนของ EVM โดยเฉพาะอย่างยิ่งหากเป้าหมายคือการลดความซับซ้อนของ EVM โดยรวม
หลายข้อเสนอ "การปรับปรุง" ในส่วนที่เหลือของแผนการดำเนินงาน cŕ̰ ยังเป็นโอกาสที่จะทำความง่ายขึ้นของคุณสมบัติเก่า เพื่อทบทวนบางตัวอย่างจากข้างต้น:
วิธีการบูรณาการ Ethereum ที่เป็นรูปแบบที่เข้มงวดกว่าคือการเก็บโปรโตคอลเดิมไว้อยู่แต่ย้ายส่วนใหญ่ของมันจากฟีเจอร์โปรโตคอลเป็นรหัสสัญญากลับ
รุ่นที่สุด โดยการทำให้ Ethereum L1 “เทคนิค” เป็นแค่ beacon chain และนำเข้า VM ที่เรียบง่ายที่สุด (เช่นRISC-V, ไคโร, หรือบางสิ่งที่เฉพาะเจาะจงมากกว่าอีกสำหรับการพิสูจน์ระบบ) ซึ่งอนุญาตให้ผู้ใดก็สามารถสร้าง rollup ของตนเองได้ จากนั้น EVM ก็จะกลายเป็น rollup แรกของสิ่งเหล่านี้ นี่ก็คือผลลัพธ์ที่เป็นเรื่องตลกที่เหมือนกันกับสิ่งที่ข้อเสนอสภาพแวดล้อมการดำเนินการ ตั้งแต่ปี 2019-20แม้ว่า SNARKs จะทำให้เป็นไปได้มากขึ้นในการดำเนินการจริงๆ
แนวทางที่ปานกลางกว่าคือการรักษาความสัมพันธ์ระหว่างห่วงโซ่บีคอนและสภาพแวดล้อมการดําเนินการ Ethereum ปัจจุบันตามที่เป็นอยู่, แต่ทําการแลกเปลี่ยน EVM ในสถานที่. เราสามารถเลือก RISC-V, Cairo หรือ VM อื่นให้เป็น "Ethereum VM อย่างเป็นทางการ" ใหม่จากนั้นบังคับให้แปลงสัญญา EVM ทั้งหมดเป็นรหัส VM ใหม่ที่ตีความตรรกะของรหัสเดิม (โดยการรวบรวมหรือตีความ) ในทางทฤษฎีสิ่งนี้สามารถทําได้ด้วย "VM เป้าหมาย" เป็นเวอร์ชันของ EOF
หนึ่งในความท้าทายของ Ethereum คือ โดยค่าเริ่มต้น ขนาดและความซับซ้อนของโปรโตคอลบล็อกเชนใด ๆ จะเพิ่มขึ้นเมื่อเวลาผ่านไป สิ่งนี้เกิดขึ้นที่สองที่
เพื่อให้ Ethereum รักษาตัวเองในระยะยาวเราต้องการแรงกดดันที่แข็งแกร่งต่อแนวโน้มทั้งสองนี้ลดความซับซ้อนและขยายตัวเมื่อเวลาผ่านไป แต่ในขณะเดียวกันเราจําเป็นต้องรักษาหนึ่งในคุณสมบัติหลักที่ทําให้บล็อกเชนยอดเยี่ยม: ความคงทนของพวกเขา คุณสามารถใส่ NFT, บันทึกความรักในการทําธุรกรรม calldata หรือสัญญาอัจฉริยะที่มีเงินล้าน onchain เข้าไปในถ้ําเป็นเวลาสิบปีออกมาและพบว่ามันยังคงรอคุณอ่านและโต้ตอบด้วย เพื่อให้ dapps รู้สึกสบายใจที่จะกระจายอํานาจอย่างเต็มที่และลบคีย์อัปเกรดพวกเขาต้องมั่นใจว่าการพึ่งพาของพวกเขาจะไม่อัปเกรดในลักษณะที่ทําลายพวกเขาโดยเฉพาะ L1 เอง
The Purge, 2023 roadmap.
ความสมดุลระหว่างความต้องการทั้งสองนี้และลดหรือย้อนกลับการขยายตัวความซับซ้อนและการสลายตัวในขณะที่รักษาความต่อเนื่องเป็นไปได้อย่างแน่นอนหากเราใส่ใจ สิ่งมีชีวิตสามารถทําได้: ในขณะที่อายุมากที่สุดเมื่อเวลาผ่านไป ไม่มีใครโชคดี. ระบบสังคมแม้กระทั่งสามารถ มีอายุยืน. ในบางครั้ง Ethereum ได้แสดงความสำเร็จอยู่แล้ว: การทำงานที่ได้รับการพิสูจน์หากหายไปส่วนใหญ่, คำสั่ง SELFDESTRUCT หายไปแล้วเป็นส่วนใหญ่, และโหนดสายพันธุ์เบคอนเก็บข้อมูลเก่าได้มากที่สุดเพียงหกเดือนเท่านั้น การค้นหาทางออกนี้สำหรับ Ethereum ในลักษณะที่ทั่วไปยิ่งขึ้น และการเคลื่อนไหวไปสู่ผลลัพธ์ที่เป็นที่มั่นคงสำหรับระยะยาวเป็นที่เดียวของ Ethereum คือความท้าทายสุดท้ายของความยืดหยุ่นในระยะยาวของ Ethereum ความยั่งยืนทางเทคนิคและความปลอดภัยเป็นอุปสรรคสุดท้าย
ณ เวลาที่เขียนข้อความนี้ โหนด Ethereum ที่ซิงค์เต็มร้อยต้องการประมาณ 1.1 เทระไบต์ของพื้นที่ดิสก์สำหรับผู้ใช้งานการดำเนินการรวมถึงอีกหลายร้อยกิกะไบต์สำหรับไคลเอ็นต์การตกลง. ความส่วนใหญ่ของสิ่งนี้เป็นประวัติศาสตร์: ข้อมูลเกี่ยวกับบล็อกประวัติศาสตร์ ธุรกรรมและใบเสร็จ ส่วนใหญ่ของซึ่งอายุมากกว่าหลายปี นี้หมายความว่าขนาดของโหนดจะเพิ่มขึ้นด้วยร้อยกิกะไบต์ในแต่ละปี แม้ว่าขีดจำกัดแก๊สจะไม่เพิ่มขึ้นเลย
คุณลักษณะที่ทำให้เรื่องการเก็บประวัติง่ายขึ้นคือเพราะทุกบล็อกชี้ไปที่บล็อกก่อนหน้าผ่านลิงก์แฮช (และอื่น ๆ โครง สร้าง) โดยมีความเห็นชอบในปัจจุบันมีพอเพียงที่จะมีความเห็นชอบในประวัติศาสตร์ ตลอดจนกว่าเครือข่ายจะมีความเห็นชอบในบล็อกล่าสุด บล็อกหรือธุรกรรมหรือสถานะ (ยอดเงินในบัญชี นอนซ์ รหัส การจัดเก็บ) ใด ๆ สามารถให้ได้โดยผู้แสดงความคิดเห็นบุคคลเดียวพร้อมกับพยายาม Merkle และพยายามช่วยให้ผู้อื่นสามารถตรวจสอบความถูกต้องของมันได้ ในขณะที่ความเห็นชอบเป็นโมเดลความเชื่อ N/2 ของ N ประวัติศาสตร์คือ1-of-N โมเดลความเชื่อ N.
นี่เป็นการเปิดตัวเลือกมากมายสําหรับวิธีที่เราสามารถจัดเก็บประวัติ ตัวเลือกธรรมชาติหนึ่งคือเครือข่ายที่แต่ละโหนดจัดเก็บข้อมูลเพียงเล็กน้อยเท่านั้น นี่คือวิธีที่เครือข่ายฝนตกหนักทํางานมานานหลายทศวรรษ: ในขณะที่เครือข่ายจัดเก็บและแจกจ่ายไฟล์หลายล้านไฟล์ผู้เข้าร่วมแต่ละคนจะจัดเก็บและแจกจ่ายไฟล์เพียงไม่กี่ไฟล์เท่านั้น บางทีวิธีการนี้อาจไม่จําเป็นต้องลดความแข็งแกร่งของข้อมูล หากการทําให้โหนดทํางานราคาไม่แพงมากขึ้นเราสามารถไปที่เครือข่ายที่มีโหนด 100,000 โหนดซึ่งแต่ละโหนดจัดเก็บประวัติแบบสุ่ม 10% จากนั้นข้อมูลแต่ละชิ้นจะถูกจําลองแบบ 10,000 ครั้ง - ปัจจัยการจําลองแบบเดียวกันกับเครือข่าย 10,000 โหนดที่แต่ละโหนดจัดเก็บทุกอย่าง
วันนี้ Ethereum ได้เริ่มย้ายออกจากแบบจําลองของโหนดทั้งหมดที่จัดเก็บประวัติศาสตร์ทั้งหมดตลอดไป บล็อกฉันทามติ (เช่นส่วนที่เกี่ยวข้องกับการพิสูจน์ฉันทามติการถือหุ้น) จะถูกเก็บไว้เป็นเวลา ~ 6 เดือนเท่านั้น Blobs จะถูกเก็บไว้เป็นเวลา ~ 18 วันเท่านั้น EIP-4444มีเป้าหมายที่จะนำเสนอระยะเวลาการเก็บรักษาของบล็อกและใบเสร็จที่ย้อนหลังนาน 1 ปี ซึ่งเป็นเป้าหมายระยะยาวที่จะมีระยะเวลาที่เป็นไปตามกฏหมาย (ซึ่งอาจเป็น ~18 วัน) ในช่วงที่แต่ละโหนดรับผิดชอบในการเก็บรักษาทุกอย่างแล้วมีเครือข่ายแบบ peer-to-peer ที่ประกอบด้วยโหนด Ethereum ที่เก็บข้อมูลเก่าๆ ในรูปแบบการกระจายข้อมูล
รหัสการลบสามารถใช้เพื่อเพิ่มความแข็งแกร่งในขณะที่ยังคงรักษาอัตราการทำซ้ำเหมือนเดิม ในความจริง ต่อมาบล็อบมาพร้อมรหัสการลบเพื่อรองรับการสุ่มความพร้อมข้อมูล วิธีการที่ง่ายที่สุดอาจจะเป็นการนำรหัสการลบนี้มาใช้ซ้ำ และนำข้อมูลบล็อบการดำเนินการและตรงต่อมตัดสินใส่บล็อบด้วย
งานที่เหลือหลักๆ เป็นการสร้างและผสานโซลูชันกระจ敏จระจักในการเก็บประวัติแบบแจจอแจการเจดแจการ-อย่างน้อยแล้วประวัติการดำเนินงาน แต่ในที่สุดยังรวมถึงข้อตกลงและ blog วิธีที่ง่ายที่สุดสำหรับนี้คือ (i) การเพียงแค่นำเข้าห้องสมุดทอร์เรนต์ที่มีอยู่แล้ว และ (ii) หรือโซลูชันของ Ethereum-native ที่เรียกว่าเครือข่าย Portal. เมื่อเปิดตัวอย่างใดอย่างหนึ่งแล้วเราสามารถเปิด EIP-4444 ได้ EIP-4444 นั้นไม่ต้องใช้ hard fork แม้ว่าจะต้องใช้โปรโตคอลเครือข่ายเวอร์ชันใหม่ ด้วยเหตุนี้จึงมีค่าในการเปิดใช้งานสําหรับลูกค้าทั้งหมดในเวลาเดียวกันเพราะมิฉะนั้นมีความเสี่ยงที่ลูกค้าจะทํางานผิดปกติจากการเชื่อมต่อกับโหนดอื่น ๆ ที่คาดว่าจะดาวน์โหลดประวัติทั้งหมด แต่ไม่ได้รับจริง
ข้อแลกเปลี่ยนหลักเกี่ยวข้องกับความยากที่เราพยายามทําให้ข้อมูลทางประวัติศาสตร์ "โบราณ" พร้อมใช้งาน ทางออกที่ง่ายที่สุดคือการหยุดจัดเก็บประวัติศาสตร์โบราณในวันพรุ่งนี้และพึ่งพาโหนดเก็บถาวรที่มีอยู่และผู้ให้บริการส่วนกลางต่างๆสําหรับการจําลองแบบ นี่เป็นเรื่องง่าย แต่สิ่งนี้ทําให้ตําแหน่งของ Ethereum อ่อนแอลงในฐานะสถานที่ทําบันทึกถาวร เส้นทางที่ยากกว่า แต่ปลอดภัยกว่าคือการสร้างและรวมเครือข่าย torrent เพื่อจัดเก็บประวัติด้วยวิธีกระจายก่อน ที่นี่มีสองมิติของ "เราพยายามอย่างหนัก":
วิธีการที่เชื่อมั่นในระดับสูงสุดสำหรับ (1) จะเกี่ยวข้องพิสูจน์การเก็บรักษา: ซึ่งจริงๆ ต้องการให้ผู้พิสูจน์การเสียค่าของแต่ละคนเก็บบางเปอร์เซ็นต์ของประวัติ และตรวจสอบด้วยวิธีการเข้ารหัสทางคริปโตอย่างเป็นประจำว่าพวกเขาทำเช่นนั้น วิธีการที่สมเหตุสมผลกว่าคือกำหนดมาตรฐานอิสระสำหรับเปอร์เซ็นต์ของประวัติที่แต่ละลูกค้าเก็บไว้
สำหรับ (2) การปฏิบัติงานพื้นฐานนั้นเกี่ยวข้องกับการเรียกใช้งานงานที่ทำแล้วในปัจจุบัน: พอร์ทัลเก็บไฟล์ ERA ที่มีประวัติศาสตร์ Ethereum ทั้งหมดอยู่แล้ว การปฏิบัติงานที่ละเอียดอ่อนมากขึ้นจะเกี่ยวข้องกับการเชื่อมต่อขั้นตอนการซิงค์ ดังนั้นหากมีคนต้องการซิงค์โหนดเก็บประวัติศาสตร์ทั้งหมดหรือโหนดเก็บถาวร พวกเขาสามารถทำได้โดยตรงจากเครือข่ายพอร์ทัล โดยไม่ต้องมีโหนดเก็บถาวรอื่นออนไลน์อยู่
การลดข้อกําหนดในการจัดเก็บประวัติมีความสําคัญมากกว่าการไร้สัญชาติหากเราต้องการทําให้การเรียกใช้หรือหมุนโหนดเป็นเรื่องง่ายมาก: จาก 1.1 TB ที่โหนดจําเป็นต้องมี ~ 300 GB เป็นสถานะและส่วนที่เหลือ ~ 800 GB คือประวัติ วิสัยทัศน์ของโหนด Ethereum ที่ทํางานบนนาฬิกาอัจฉริยะและใช้เวลาเพียงไม่กี่นาทีในการตั้งค่าจะสามารถทําได้ก็ต่อเมื่อมีการใช้ทั้งการไร้สัญชาติและ EIP-4444
การจำกัดการเก็บรักษาประวัติยังทำให้เป็นไปได้มากขึ้นสำหรับการปฏิบัติงานของโหนด Ethereum รุ่นใหม่ๆ ที่รองรับเฉพาะเวอร์ชันล่าสุดของโปรโตคอล ซึ่งทำให้โหนดนั้นง่ายและกระชับมากขึ้น เช่น เราสามารถลบโค้ดหลายบรรทัดได้ด้วยความปลอดภัยตอนนี้ เนื่องจากช่องว่างในการเก็บข้อมูลที่สร้างขึ้นในช่วงการโจมตี DoS ในปี 2016 ได้ถูกลบออกทั้งหมดแล้วถูกนำออก. ตอนนี้การเปลี่ยนไปใช้หลักฐานการถือหุ้นเป็นประวัติศาสตร์โบราณลูกค้าสามารถลบรหัสที่เกี่ยวข้องกับการพิสูจน์การทํางานทั้งหมดได้อย่างปลอดภัย
แม้ว่าเราจะลบความจำเป็นในการเก็บรวมประวัติของไคลเอนต์ไปแล้ว ความต้องการในการเก็บข้อมูลของไคลเอนต์จะยังคงเติบโตต่อไป เพิ่มขึ้นประมาณ 50 กิโลไบต์ต่อปี เนื่องจากการเติบโตต่อเนื่องของสถานะ: ยอดเงินคงเหลือและเลข nonce รหัสสัญญาและการเก็บข้อมูลสัญญา ผู้ใช้สามารถชำระค่าใช้จ่ายครั้งเดียวเพื่อบังคับให้ไคลเอนต์ Ethereum ที่มีอยู่และที่จะเกิดขึ้นในอนาคตบรรษัท
รัฐนั้นยากต่อการ "หมดอายุ" มากกว่าประวัติศาสตร์เนื่องจาก EVM ได้รับการออกแบบโดยพื้นฐานจากสมมติฐานที่ว่าเมื่อวัตถุของรัฐถูกสร้างขึ้นแล้วมันจะอยู่ที่นั่นเสมอและสามารถอ่านได้โดยธุรกรรมใด ๆ ได้ตลอดเวลา หากเราแนะนําการไร้สัญชาติมีข้อโต้แย้งว่าบางทีปัญหานี้อาจไม่เลว: มีเพียงผู้สร้างบล็อกระดับพิเศษเท่านั้นที่จะต้องจัดเก็บสถานะและโหนดอื่น ๆ ทั้งหมด (แม้กระทั่ง รายการการรวมอยู่ในการผลิต!) สามารถทำงานในสภาวะที่ไม่มีสถานะ อย่างไรก็ตาม มีความเห็นว่าเราไม่ต้องการพึ่งพาความไม่มีสถานะมากเกินไป และในที่สุดเราอาจต้องการหมดอายุสถานะเพื่อที่จะรักษา Ethereum ให้เป็นสิ่งที่กระจายออกไป
ในวันนี้เมื่อคุณสร้างอ็อบเจ็กต์สถานะใหม่ (ซึ่งอาจเกิดขึ้นในหนึ่งในสามวิธี: (i) ส่ง ETH ไปยังบัญชีใหม่, (ii) สร้างบัญชีใหม่ด้วยโค้ด, (iii) ตั้งค่าช่องจังหวะการเก็บรักษาที่ไม่เคยถูกสัมผัสมาก่อน), อ็อบเจ็กต์สถานะนั้นจะอยู่ในสถานะตลอดไป สิ่งที่เราต้องการแทนคือให้วัตถุหมดอายุโดยอัตโนมัติตามเวลา ความท้าทายสำคัญคือการทำเช่นนี้ให้สำเร็จสองประการ:
มันง่ายที่จะแก้ปัญหาโดยไม่บรรลุเป้าหมายเหล่านี้ ตัวอย่างเช่น คุณสามารถให้อ็อบเจ็กต์แต่ละสถานะเก็บตัวนับสําหรับวันหมดอายุ (ซึ่งสามารถขยายได้โดยการเผาไหม้ ETH ซึ่งอาจเกิดขึ้นโดยอัตโนมัติทุกครั้งที่อ่านหรือเขียน) และมีกระบวนการที่วนซ้ําผ่านสถานะเพื่อลบออบเจ็กต์สถานะที่หมดอายุ อย่างไรก็ตามสิ่งนี้แนะนําการคํานวณเพิ่มเติม (และแม้แต่ข้อกําหนดในการจัดเก็บ) และไม่เป็นไปตามข้อกําหนดด้านความเป็นมิตรต่อผู้ใช้อย่างแน่นอน นักพัฒนาก็จะมีช่วงเวลาที่ยากลําบากในการให้เหตุผลเกี่ยวกับกรณีขอบที่เกี่ยวข้องกับค่าพื้นที่เก็บข้อมูลบางครั้งการรีเซ็ตเป็นศูนย์ หากคุณทําทั้งสัญญาจับเวลาหมดอายุสิ่งนี้จะทําให้ชีวิตง่ายขึ้นในทางเทคนิคสําหรับนักพัฒนา แต่มันทําให้เศรษฐศาสตร์ยากขึ้น: นักพัฒนาจะต้องคิดเกี่ยวกับวิธีการ "ส่งผ่าน" ต้นทุนการจัดเก็บอย่างต่อเนื่องให้กับผู้ใช้ของพวกเขา
เป็นปัญหาที่ชุมชนการพัฒนา Ethereum คอร์สตรัคเกอร์ต่อสู้กับมาหลายปี รวมถึงข้อเสนอเช่นบล็อกเชนเช่า“ และ “regenesisในที่สุด เรารวมส่วนที่ดีที่สุดจากข้อเสนอและรวมกันเข้าไปที่สองหมวดหมู่ของ "known least bad solutions":
ข้อเสนอให้หมดอายุส่วนบางส่งผลตามหลักการเดียวกัน พวกเราแบ่งสถานะเป็นชิ้นเล็ก ๆ ทุกคนจัดเก็บ 'แผนที่ระดับบน' ของสถานะที่ชัดเจนหรือไม่ชัดเจนโดยถาวร ข้อมูลภายในแต่ละชิ้นจะถูกเก็บไว้เท่านั้นหากข้อมูลนั้นได้รับการเข้าถึงเร็ว ๆ นี้มีกลไก 'การฟื้นคืนชีพ' ที่ถ้าชิ้นหนึ่งไม่ได้เก็บไว้อีกต่อไป ใครก็สามารถนำข้อมูลนั้นกลับมาโดยการ提供พิสูจน์ว่าข้อมูลนั้นเป็นอย่างไร
ความแตกต่างหลัก ๆ ระหว่างข้อเสนอเหล่านี้คือ: (i) เราจะกำหนดคำว่า "เร็ว ๆ นี้" อย่างไร และ (ii) เราจะกำหนดคำว่า "ชั่วโมง" อย่างไร หนึ่งข้อเสนอที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นที่เป็นEIP-7736, ซึ่งสร้างขึ้นบนการออกแบบ “stem-and-leaf” นำเสนอสำหรับต้นไม้ Verkleในการออกแบบนี้ ส่วนหัว รหัส และช่องจัดเก็บที่ติดกันจะถูกเก็บที่เดียวกันใต้ “แกน” เดียวกัน ข้อมูลที่เก็บที่เดียวกันในแกนนั้นสามารถมีได้สูงสุด 256 * 31 = 7,936 ไบต์ ในกรณีส่วนมาก เพียงแค่ส่วนหัวและรหัสทั้งหมดและหลายช่องจัดเก็บสำคัญของบัญชีจะถูกเก็บใต้แกนเดียวกัน หากข้อมูลในแกนที่กำหนดไว้ไม่ได้อ่านหรือเขียนเป็นเวลา 6 เดือน ข้อมูลจะไม่ถูกเก็บและจะถูกเก็บเพียงการสังซื้อรับ (“stub”) 32 ไบต์เท่านั้น ธุรกรรมในอนาคตที่เข้าถึงข้อมูลดังกล่าวจะต้อง “ฟื้นคืน” ข้อมูลด้วยการพิสูจน์ที่จะถูกตรวจสอบกับ stub
มีวิธีอื่น ๆ ในการนำแนวคิดที่คล้ายกันมาใช้งาน ตัวอย่างเช่นหากความละเอียดในระดับบัญชีไม่เพียงพอ เราสามารถทำแผนที่ที่แต่ละ 1/232 ของต้นไม้จะถูกควบคุมด้วยกลไกเหมือนกัน
สิ่งนี้ยุ่งยากกว่าเนื่องจากสิ่งจูงใจ: ผู้โจมตีสามารถบังคับให้ลูกค้าจัดเก็บสถานะจํานวนมากอย่างถาวรโดยใส่ข้อมูลจํานวนมากลงในทรีย่อยเดียวและส่งธุรกรรมเดียวทุกปีเพื่อ "ต่ออายุต้นไม้" หากคุณทําให้ค่าใช้จ่ายในการต่ออายุเป็นสัดส่วน (หรือระยะเวลาการต่ออายุผกผันตามสัดส่วน) กับขนาดต้นไม้ใครบางคนอาจทําให้ผู้ใช้รายอื่นเศร้าโศกโดยใส่ข้อมูลจํานวนมากลงในทรีย่อยเดียวกันกับพวกเขา เราสามารถพยายาม จํากัด ปัญหาทั้งสองโดยการทําให้ความละเอียดแบบไดนามิกตามขนาดต้นไม้ย่อย: ตัวอย่างเช่นแต่ละวัตถุสถานะ 216 = 65536 ติดต่อกันอาจถือว่าเป็น "กลุ่ม" อย่างไรก็ตามแนวคิดเหล่านี้มีความซับซ้อนมากขึ้น วิธีการตาม STEM นั้นง่ายและจัดแนวสิ่งจูงใจเพราะโดยทั่วไปข้อมูลทั้งหมดภายใต้ STEM จะเกี่ยวข้องกับแอปพลิเคชันหรือผู้ใช้เดียวกัน
หากเราต้องการหลีกเลี่ยงการเติบโตของสถานะถาวรทั้งหมด แม้แต่กระเป๋าสั้น 32 ไบต์ จะเป็นปัญหาที่ยาก เนื่องจาก@vbuterin/state_size_management#Resurrection-conflicts">resurrection conflicts: จะเกิดอะไรขึ้นถ้าวัตถุของรัฐถูกลบออกการดําเนินการ EVM ในภายหลังทําให้วัตถุของรัฐอื่นอยู่ในตําแหน่งเดียวกัน แต่หลังจากนั้นคนที่ใส่ใจเกี่ยวกับวัตถุสถานะเดิมจะกลับมาและพยายามกู้คืน? เมื่อสถานะบางส่วนหมดอายุ "ต้นขั้ว" จะป้องกันไม่ให้มีการสร้างข้อมูลใหม่ เมื่อหมดอายุเต็มสถานะเราไม่สามารถจัดเก็บแม้แต่ต้นขั้วได้
การออกแบบตามระยะเวลาที่อยู่เป็นแนวคิดที่รู้จักกันดีที่สุดในการแก้ปัญหานี้ แทนที่จะมีต้นไม้ของรัฐหนึ่งต้นที่จัดเก็บทั้งรัฐเรามีรายการต้นไม้ของรัฐที่เติบโตอย่างต่อเนื่องและรัฐใด ๆ ที่อ่านหรือเขียนจะถูกบันทึกไว้ในต้นไม้ของรัฐล่าสุด ต้นไม้ของรัฐที่ว่างเปล่าใหม่จะถูกเพิ่มหนึ่งครั้งต่อช่วงเวลา (คิดว่า: 1 ปี) ต้นไม้ของรัฐที่มีอายุมากกว่าจะถูกแช่แข็งเป็นของแข็ง โหนดเต็มคาดว่าจะเก็บต้นไม้สองต้นล่าสุดเท่านั้น หากวัตถุของรัฐไม่ได้สัมผัสเป็นเวลาสองช่วงเวลาและตกลงไปในต้นไม้ที่หมดอายุแล้วมันยังสามารถอ่านหรือเขียนถึงได้ แต่การทําธุรกรรมจะต้องพิสูจน์หลักฐานของ Merkle สําหรับมัน - และเมื่อเป็นเช่นนั้นสําเนาจะถูกบันทึกไว้ในต้นไม้ล่าสุดอีกครั้ง
แนวคิดหลักในการทําให้สิ่งนี้เป็นมิตรกับผู้ใช้และนักพัฒนาคือแนวคิดของช่วงเวลาที่อยู่ รอบระยะเวลาที่อยู่คือหมายเลขที่เป็นส่วนหนึ่งของที่อยู่ กฎสําคัญคือที่อยู่ที่มีช่วงเวลาที่อยู่ N สามารถอ่านหรือเขียนถึงในระหว่างหรือหลังช่วงเวลา N เท่านั้น (เช่นเมื่อรายการต้นไม้ของรัฐถึงความยาว N) หากคุณกําลังบันทึกวัตถุสถานะใหม่ (เช่นสัญญาใหม่หรือยอดคงเหลือ ERC20 ใหม่) หากคุณแน่ใจว่าได้ใส่วัตถุของรัฐลงในสัญญาที่มีระยะเวลาที่อยู่เป็น N หรือ N-1 คุณสามารถบันทึกได้ทันทีโดยไม่จําเป็นต้องแสดงหลักฐานว่าไม่มีอะไรมาก่อน ในทางกลับกันการเพิ่มเติมหรือแก้ไขใด ๆ ที่จะระบุในช่วงเวลาที่อยู่เก่าจําเป็นต้องมีการพิสูจน์
การออกแบบนี้รักษาคุณสมบัติปัจจุบันส่วนใหญ่ของ Ethereum มีน้ําหนักเบามากในการคํานวณเพิ่มเติมช่วยให้สามารถเขียนแอปพลิเคชันได้เกือบเหมือนที่เป็นอยู่ในปัจจุบัน (ERC20s จะต้องเขียนใหม่เพื่อให้แน่ใจว่ายอดคงเหลือของที่อยู่ที่มีระยะเวลาที่อยู่ N จะถูกเก็บไว้ในสัญญาลูกซึ่งมีระยะเวลาที่อยู่ N) และแก้ปัญหา "ผู้ใช้เข้าไปในถ้ําเป็นเวลาห้าปี" อย่างไรก็ตามมันมีปัญหาใหญ่อย่างหนึ่ง: ต้องขยายที่อยู่เกิน 20 ไบต์เพื่อให้พอดีกับระยะเวลาที่อยู่
หนึ่งข้อเสนอคือการนำเข้ารูปแบบที่อยู่ 32 ไบต์ใหม่ซึ่งรวมถึงหมายเลขเวอร์ชัน หมายเลขช่วงที่อยู่ และการแยกขยายแฮช
0x01000000000157aE408398dF7E5f4552091A69125d5dFcb7B8C2659029395bdF
เลขเวอร์ชันสีแดงคือเลขเวอร์ชัน สี่เลขศูนย์สีส้มที่นี่เป็นพื้นที่ว่างที่จะใส่หมายเลขชาร์ดในอนาคต สีเขียวคือหมายเลขระยะเวลาของที่อยู่ สีฟ้าคือแฮช 26 ไบต์
ความท้าทายสำคัญที่นี่คือความเข้ากันได้ย้อนหลัง สัญญาที่มีอยู่ออกแบบโดยใช้ที่อยู่ 20 ไบต์และบ่อยครั้งใช้เทคนิค byte-packing ที่สุดแน่นอนซึ่งเหลือเฉพาะที่อยู่ขนาด 20 ไบต์เท่านั้น@ipsilon/address-space-extension-exploration">หนึ่งไอเดียในการแก้ปัญหานี้เกี่ยวข้องกับแผนที่การแปลภาษาซึ่งสัญญาแบบเก่าที่ปฏิสัมพันธ์กับที่อยู่แบบใหม่จะเห็นแฮช 20 ไบต์ของที่อยู่แบบใหม่ อย่างไรก็ตามการทำให้มันปลอดภัยนี้มีความซับซ้อนที่สำคัญ
วิธีการอื่น ๆ ก็เข้าไปในทิศทางที่ต่างกัน: เราห้ามทันทีบางช่วงย่อยขนาด 2128 ของที่อยู่ (เช่น ทุกที่อยู่ที่เริ่มต้นด้วย 0xffffffff) แล้วใช้ช่วงนั้นเพื่อนำเสนอที่อยู่ที่มีระยะเวลาที่อยู่และแฮช 14 ไบต์
0xfffffff000169125d5dFcb7B8C2659029395bdF
ความเสียสละที่วิธีการนี้ทำได้คือเพิ่มความเสี่ยงด้านความปลอดภัยสําหรับที่อยู่ที่ขัดแย้งกัน: ที่อยู่ที่ถือสินทรัพย์หรือสิทธิ แต่โค้ดของมันยังไม่ได้เผยแพร่ไปยังเครือข่าย ความเสี่ยงเกี่ยวกับการมีคนสร้างที่อยู่ซึ่งอ้างว่ามีโค้ดชิ้นหนึ่ง (ที่ยังไม่ได้เผยแพร่) แต่ยังมีโค้ดอีกชิ้นที่ถูกต้องซึ่งมีการแฮชไปยังที่อยู่เดียวกัน การคำนวณให้เกิดการชนกันแบบนั้นต้องใช้ 280 hashes วันนี้; การกระทำพื้นที่ที่อยู่จะลดจำนวนนี้ลงเหลือเพียง 2 ที่สามารถเข้าถึงได้ง่ายมาก56 hashes.
พื้นที่ความเสี่ยงที่สำคัญ ที่อยู่ที่จำลองที่ไม่ใช่กระเป๋าเงินที่ถือโดยเจ้าของคนเดียว เป็นกรณีที่หาได้ยากในปัจจุบัน แต่เป็นไปได้ที่จะกลายเป็นสิ่งที่ทั่วไปมากขึ้นเมื่อเราเข้าสู่โลก multi-L2 วิธีการที่เดียวที่สามารถทำได้คือ ยอมรับความเสี่ยงนี้โดยตรง แต่ต้องระบุทุกกรณีการใช้ที่สามารถเกิดปัญหาและคิดทางเลือกที่มีประสิทธิภาพ
ฉันเห็นทางเลือกสี่ทางที่เป็นไปได้สำหรับอนาคต:
หนึ่งจุดสำคัญคือปัญหาที่ยากลำบากเกี่ยวกับการขยายพื้นที่ที่อยู่และการหดของพื้นที่ที่อยู่จะต้องได้รับการพิจารณาในที่สุดไม่ว่าจะมีการใช้แผนการหมดอายุของสถานะที่ขึ้นอยู่กับการเปลี่ยนแปลงรูปแบบของที่อยู่หรือไม่ ในปัจจุบันใช้เวลาประมาณ 280การแปลงค่าแฮชเพื่อสร้างการชนที่อยู่ ซึ่งเป็นภาระการคำนวณที่เป็นไปได้อยู่แล้วสำหรับผู้กระทำทรัพยากรที่ดีมาก: GPU สามารถทำได้ประมาณ 227 hashes, so running for a year it can compute 252, ดังนั้นทั้งหมด~2^30 GPUs ในโลก สามารถคํานวณการชนกันใน ~ 1/4 ของปีและ FPGA และ ASIC สามารถเร่งสิ่งนี้ต่อไปได้ ในอนาคตการโจมตีดังกล่าวจะเปิดกว้างสําหรับผู้คนมากขึ้นเรื่อย ๆ ดังนั้นค่าใช้จ่ายที่แท้จริงในการดําเนินการหมดอายุของรัฐเต็มรูปแบบอาจไม่สูงอย่างที่คิดเนื่องจากเราต้องแก้ปัญหาที่อยู่ที่ท้าทายมากนี้โดยไม่คํานึงถึง
การทําวันหมดอายุของรัฐอาจทําให้การเปลี่ยนจากรูปแบบต้นไม้ของรัฐหนึ่งไปยังอีกรูปแบบหนึ่งง่ายขึ้นเนื่องจากไม่จําเป็นต้องมีขั้นตอนการเปลี่ยน: คุณสามารถเริ่มสร้างต้นไม้ใหม่โดยใช้รูปแบบใหม่จากนั้นทํา hard fork เพื่อแปลงต้นไม้เก่า ดังนั้นแม้ว่าการหมดอายุของรัฐจะซับซ้อน แต่ก็มีประโยชน์ในการลดความซับซ้อนของแผนงานด้านอื่น ๆ
หนึ่งในเงื่อนไขสำคัญของความปลอดภัย ความเข้าถึงได้สะดวกและความเป็นกลางที่น่าเชื่อถือ คือความเรียบง่าย หากโปรโตคอลมีความสวยงามและเรียบง่ายจะช่วยลดโอกาสที่จะมีข้อบกพร่อง มันเพิ่มโอกาสที่นักพัฒนาใหม่จะสามารถเข้ามาและทํางานกับส่วนใดส่วนหนึ่งของมัน มีแนวโน้มที่จะยุติธรรมและง่ายต่อการป้องกันผลประโยชน์พิเศษ น่าเสียดายที่โปรโตคอลเช่นเดียวกับระบบสังคมใด ๆ โดยค่าเริ่มต้นจะซับซ้อนมากขึ้นเมื่อเวลาผ่านไป หากเราไม่ต้องการให้ Ethereum เข้าสู่หลุมดําที่มีความซับซ้อนเพิ่มขึ้นเรื่อย ๆ เราจําเป็นต้องทําหนึ่งในสองสิ่ง: (i) หยุดทําการเปลี่ยนแปลงและ ossify โปรโตคอล (ii) สามารถลบคุณสมบัติและลดความซับซ้อนได้จริง เส้นทางกลางของการเปลี่ยนแปลงโปรโตคอลน้อยลงและลบความซับซ้อนเล็กน้อยเมื่อเวลาผ่านไปก็เป็นไปได้เช่นกัน ส่วนนี้จะพูดถึงวิธีที่เราสามารถลดหรือลบความซับซ้อน
ไม่มีการแก้ไขเดียวใดที่สามารถลดความซับซ้อนของโปรโตคอลลงได้ ลักษณะธรรมชาติของปัญหาคือมีการแก้ไขเล็กน้อยมาก
ตัวอย่างหนึ่งที่เสร็จสมบูรณ์แล้วและสามารถใช้เป็นแบบแผนการดำเนินงานสำหรับวิธีการจัดการกับอื่น ๆ ได้แก่@vbuterin/selfdestruct">removal ของ SELFDESTRUCT opcode SELFDESTRUCT opcode เป็น opcode เดียวที่สามารถปรับเปลี่ยนช่องเก็บข้อมูลได้ไม่ จํากัด จํานวนภายในบล็อกเดียวทําให้ไคลเอนต์ต้องใช้ความซับซ้อนมากขึ้นอย่างมากเพื่อหลีกเลี่ยงการโจมตี DoS จุดประสงค์เดิมของ opcode คือเพื่อให้สามารถล้างสถานะโดยสมัครใจทําให้ขนาดของรัฐลดลงเมื่อเวลาผ่านไป ในทางปฏิบัติมีน้อยมากที่ลงเอยด้วยการใช้มัน การ opcode ถูกปรับลด เพื่ออนุญาตเฉพาะบัญชีที่ทําลายตัวเองที่สร้างขึ้นในธุรกรรมเดียวกันใน Dencun hardfork วิธีนี้ช่วยแก้ปัญหา DoS และช่วยให้โค้ดไคลเอ็นต์ง่ายขึ้นอย่างมาก ในอนาคตมันน่าจะสมเหตุสมผลที่จะลบ opcode อย่างสมบูรณ์ในที่สุด
ตัวอย่างบางประการที่สำคัญของโอกาสในการบรรลุเป้าหมายของโปรโตคอลที่ได้รับการระบุจนถึงตอนนี้รวมถึงต่อไปนี้ แรก ตัวอย่างบางอย่างที่อยู่นอก EVM; เหล่านี้มีความไม่รบและโดยน้อยเพียงพอที่จะได้รับการตกลงและนำมาใช้ในระยะเวลาที่สั้นกว่า
ตอนนี้มีตัวอย่างบางอย่างที่อยู่ภายใน EVM:
ข้อเสียเปรียบหลักในการทําการลดความซับซ้อนของคุณลักษณะนี้คือ (i) เราลดความซับซ้อนลงมากแค่ไหนและความเข้ากันได้ย้อนหลังได้เร็วแค่ไหนเมื่อเทียบกับ (ii) คุณค่าของ Ethereum ในฐานะห่วงโซ่มาจากการเป็นแพลตฟอร์มที่คุณสามารถปรับใช้แอปพลิเคชันและมั่นใจได้ว่าจะยังคงใช้งานได้หลายปีนับจากนี้ ในขณะเดียวกันก็เป็นไปได้ที่จะนําอุดมคตินั้นไปไกลเกินไปและ เพื่อจะพูดให้เข้าใจง่ายขึ้น วิลเลียม เจนนิงส์ ไบรอัน“ล้มล้าง Ethereum บนครูซิฟายเออร์เรียบร้อย” หากมีแอปพลิเคชันเพียงสองตัวใน Ethereum ที่ใช้คุณสมบัติที่กำหนด โดยที่หนึ่งไม่มีผู้ใช้เลยมาหลายปีและอีกตัวก็ใช้งานน้อยมากและรักษามูลค่ารวม $57 เท่านั้น แล้วเราควรเพียงนำคุณสมบัติออก เมื่อมีความจำเป็น จะจ่ายค่าเสียหายให้เหยื่อ $57 จากกระเป๋าเราเอง
ปัญหาทางสังคมที่กว้างขวางคือการสร้างท่อประมาณมาตรฐานสำหรับการทำการเปลี่ยนแปลงที่ไม่ใช่ฉุกเฉินที่ทำให้เกิดความไม่ประสบความสำเร็จในการเข้ากันได้ย้อนหลัง หนทางที่หนึ่งในการเข้ามาถึงเรื่องนี้คือการสำรวจและขยายที่ได้รับการรับรองอยู่แล้ว เช่น กระบวนการ SELFDESTRUCT ท่อประมาณมาตรฐานดูเหมือนอย่างไร
ควรมีท่อระบายนานหลายปีระหว่างขั้นตอนที่ 1 และขั้นตอนที่ 4 พร้อมข้อมูลชัดเจนเกี่ยวกับสิ่งที่อยู่ที่ขั้นไหน ณ จุดนั้น จะมีการแลกเปลี่ยนระหว่างความกระตือรือร้นและเร็วกับท่อระบายคุณลักษณะ โดยการมีการระบายท่อการเอาคุณลักษณะออก มีข้อจำกัด มากกว่าการระวังและใช้ทรัพยากรมากขึ้นในด้านอื่นของการพัฒนาโปรโตคอล แต่เรายังคงอยู่ห่างไกลจาก Pareto frontier
ชุดของการเปลี่ยนแปลงที่สำคัญที่ได้รับการเสนอให้ใช้กับ EVM คือ รูปแบบอ็อบเจ็กต์ EVM (EOF). EOF นำเสนอการเปลี่ยนแปลงจำนวนมาก เช่น การห้ามการสังเกตเห็นก๊าซ การสังเกตเห็นโค้ด (เช่น ไม่มี CODECOPY) อนุญาตให้กระโดดไปยังจุดที่เป็นค่าคงที่เท่านั้น จุดปลายทางคือการอนุญาตให้ EVM ได้รับการอัปเกรดมากขึ้น ในทางที่มีคุณสมบัติที่แข็งแกร่งมากขึ้น พร้อมทั้งยังรักษาความเข้ากันได้ย้อนหลัง (เนื่องจาก EVM ก่อน EOF ยังคงมีอยู่)
สิ่งนี้มีข้อได้เปรียบในการสร้างเส้นทางธรรมชาติในการเพิ่มคุณสมบัติ EVM ใหม่และส่งเสริมการโยกย้ายไปยัง EVM ที่เข้มงวดมากขึ้นพร้อมการรับประกันที่แข็งแกร่งขึ้น มีข้อเสียที่เพิ่มความซับซ้อนของโปรโตคอลอย่างมีนัยสําคัญเว้นแต่เราจะสามารถหาวิธีเลิกใช้และลบ EVM เก่าได้ในที่สุด คําถามสําคัญประการหนึ่งคือ: EOF มีบทบาทอย่างไรในข้อเสนอการลดความซับซ้อนของ EVM โดยเฉพาะอย่างยิ่งหากเป้าหมายคือการลดความซับซ้อนของ EVM โดยรวม
หลายข้อเสนอ "การปรับปรุง" ในส่วนที่เหลือของแผนการดำเนินงาน cŕ̰ ยังเป็นโอกาสที่จะทำความง่ายขึ้นของคุณสมบัติเก่า เพื่อทบทวนบางตัวอย่างจากข้างต้น:
วิธีการบูรณาการ Ethereum ที่เป็นรูปแบบที่เข้มงวดกว่าคือการเก็บโปรโตคอลเดิมไว้อยู่แต่ย้ายส่วนใหญ่ของมันจากฟีเจอร์โปรโตคอลเป็นรหัสสัญญากลับ
รุ่นที่สุด โดยการทำให้ Ethereum L1 “เทคนิค” เป็นแค่ beacon chain และนำเข้า VM ที่เรียบง่ายที่สุด (เช่นRISC-V, ไคโร, หรือบางสิ่งที่เฉพาะเจาะจงมากกว่าอีกสำหรับการพิสูจน์ระบบ) ซึ่งอนุญาตให้ผู้ใดก็สามารถสร้าง rollup ของตนเองได้ จากนั้น EVM ก็จะกลายเป็น rollup แรกของสิ่งเหล่านี้ นี่ก็คือผลลัพธ์ที่เป็นเรื่องตลกที่เหมือนกันกับสิ่งที่ข้อเสนอสภาพแวดล้อมการดำเนินการ ตั้งแต่ปี 2019-20แม้ว่า SNARKs จะทำให้เป็นไปได้มากขึ้นในการดำเนินการจริงๆ
แนวทางที่ปานกลางกว่าคือการรักษาความสัมพันธ์ระหว่างห่วงโซ่บีคอนและสภาพแวดล้อมการดําเนินการ Ethereum ปัจจุบันตามที่เป็นอยู่, แต่ทําการแลกเปลี่ยน EVM ในสถานที่. เราสามารถเลือก RISC-V, Cairo หรือ VM อื่นให้เป็น "Ethereum VM อย่างเป็นทางการ" ใหม่จากนั้นบังคับให้แปลงสัญญา EVM ทั้งหมดเป็นรหัส VM ใหม่ที่ตีความตรรกะของรหัสเดิม (โดยการรวบรวมหรือตีความ) ในทางทฤษฎีสิ่งนี้สามารถทําได้ด้วย "VM เป้าหมาย" เป็นเวอร์ชันของ EOF