Sunday, June 29, 2025
HomeอีเธอเรียมEthereumJS VM v5 เปิดตัว | บล็อกมูลนิธิ Ethereum

EthereumJS VM v5 เปิดตัว | บล็อกมูลนิธิ Ethereum


ในขณะที่ทุกคนจ้องมองด้วยความประหลาดใจในวันที่ 1 ธันวาคม เวลา 12.00 น. UTC โดยคาดว่าจะมีกำเนิด Eth 2.0 Beaconchain ภายในทีม JavaScript เราได้เตรียมการเปิดตัว genesis เล็ก ๆ ของเราเองอย่างเงียบ ๆ ใต้เงามืด เนื่องจากเราอยู่ในกลุ่ม Eth 1.0 ที่ดีอยู่แล้ว เราก็รู้สึกตื่นเต้นกับเรื่องนี้เช่นกัน

เรื่องราวความเป็นมาบางส่วน: การ EthereumJS ระบบนิเวศโดยรอบ วีเอ็ม ประกอบด้วยชุดไลบรารีแบบโมดูลาร์ (vm, blockchain, merkle-patricia-tree, tx,…) แต่ละชุดห่อหุ้มชุดฟังก์ชันการทำงานเฉพาะของตัวเอง แม้ว่าสิ่งนี้จะดีสำหรับผู้ใช้ แต่ก็กลับกลายเป็นว่าไม่ได้ดีนักสำหรับการพัฒนา เนื่องจากบ่อยครั้งจำเป็นต้องทำการเปลี่ยนแปลงในไลบรารีหลาย ๆ ตัวในคราวเดียว ซึ่งเป็นเรื่องยากและใช้เวลานานในการดำเนินการในลักษณะการรักษาความสอดคล้องกันโดยมีไลบรารี ในที่เก็บข้อมูลที่แตกต่างกัน เมื่อต้นปีนี้ เราจึงตัดสินใจอัปเดตการตั้งค่าของเราและรวมไลบรารีที่เกี่ยวข้องกับ VM ไว้ในที่เดียว โมโนเรโป– นี่คือพื้นที่เก็บข้อมูลเดียวที่สามารถกำหนดเป้าหมายการเปลี่ยนแปลงในไลบรารีหลายแห่งภายในคำขอดึงข้อมูลเดียว และรันชุดทดสอบไลบรารีต่างๆ ทั้งหมดพร้อมกันเพื่อให้มั่นใจถึงความสอดคล้องกัน ในขณะเดียวกันก็ได้รับประโยชน์จากการมีหลายแพ็คเกจที่ปล่อยออกมาทั้งหมดแยกกัน

นับตั้งแต่การเปลี่ยนมาใช้ monorepo กิจกรรมการพัฒนาของเราก็ระเบิดขึ้นอย่างแท้จริง 😋 เราค้นพบหลายสิ่งหลายอย่างที่เราต้องการทำให้ดีขึ้นจนเราไม่สามารถหยุดได้ โดยเฉพาะอย่างยิ่งเมื่อการเปลี่ยนแปลงครั้งหนึ่งมักจะกระตุ้นให้เกิดการเปลี่ยนแปลงอีก ซึ่งตอนนี้เป็นเพียง “สิ่งที่ต้องทำอย่างชัดเจน”

ดังนั้นเราจึงพัฒนา และพัฒนาแล้ว และพัฒนาแล้ว โดยพื้นฐานแล้วตลอดทั้งปี นั่นคือเหตุผลหลักที่ทำให้คุณได้ยินข่าวคราวจากเราค่อนข้างน้อยในช่วงหลายเดือนที่ผ่านมา เนื่องจากเรายุ่งกับเรื่องทั้งหมดนี้มาก

แม้ว่าในตอนท้ายของกระบวนการบางครั้งเราก็สงสัยว่าเราจะรวมสิ่งต่าง ๆ เข้าด้วยกันอีกครั้งได้หรือไม่ (ดูบันทึกประจำรุ่นที่ครอบคลุมของเราเพื่อทำความเข้าใจในสิ่งที่ฉันหมายถึง) ฉันภูมิใจมากในวันนี้ที่ในที่สุดฉันก็สามารถประกาศได้: เรา ทำมัน– 😋 ขอขอบคุณทีมงานที่น่าทึ่งสำหรับงานที่ยอดเยี่ยมและทุ่มเทในเรื่องนี้

นี่ไม่ใช่หนึ่ง แต่เป็นหกรุ่นหลักในไลบรารีหลักของเรา โดยมีเครื่องเสมือนของเราอยู่แถวหน้า:


ในโพสต์นี้ เราจะไม่ลงรายละเอียดทางเทคนิคมากนัก แต่จะให้ภาพรวมในระดับสูงแทน หากต้องการภาพที่สมบูรณ์ยิ่งขึ้น โปรดดูบันทึกประจำรุ่นตามลิงก์ด้านบน เราใส่ใจอย่างยิ่งในการทำให้สิ่งเหล่านี้ประกอบด้วยและสามารถอ่านได้ และให้ภาพรวมที่ดีเกี่ยวกับการเปลี่ยนแปลงที่เกี่ยวข้อง (ด่วน) ทั้งหมด

อาจเป็นเพียงบันทึกสำคัญประการหนึ่ง: เราเปลี่ยนไปใช้ รูปแบบการตั้งชื่อใหม่ ตามการเผยแพร่เหล่านี้ และคุณต้องใช้ชื่อใหม่เพื่อรับเวอร์ชันใหม่ อดีต ethereumjs-vm แพ็คเกจเช่นตอนนี้ติดตั้งดังนี้:

npm set up @ethereumjs/vm

ตกลง. จริงๆ แล้วมีอะไรอยู่ในนั้น? มาดูกันอย่างรวดเร็ว

ฮาร์ดฟอร์กทั้งหมด

EthereumJS VM เวอร์ชัน 5 ตอนนี้รองรับ hardforks ทั้งหมดกลับไปสู่จุดกำเนิดแล้ว นี่คือไพรเมอร์ในประวัติศาสตร์ของ JavaScript Ethereum และเราหวังว่าสิ่งนี้จะเปิดขึ้นสำหรับกรณีการใช้งานใหม่ที่น่าตื่นเต้นมากมาย เรามีของเราเอง เพิ่มเติมเกี่ยวกับเรื่องนี้ด้านล่าง

VM บน HF เฉพาะสามารถเริ่มต้นด้วย:

import VM from '@ethereumjs/vm';
import Widespread from '@ethereumjs/frequent';

const frequent = new Widespread({ chain: 'mainnet', hardfork: 'spuriousDragon' });
const vm = new VM({ frequent });

VM ที่เน้น EIP

ในขณะที่ Hardfork เหมาะที่จะรวมชุดการเปลี่ยนแปลงที่ตกลงไว้เข้าด้วยกัน แต่ VM ที่เน้น Hardfork กลับกลายเป็นว่าไม่มีความยืดหยุ่นเพียงพอที่จะเปิดใช้งานการพัฒนาที่ขับเคลื่อนด้วยอนาคต ซึ่งยังไม่เสร็จสิ้นในระยะเวลาหนึ่ง ซึ่ง EIP จะทำให้กลายเป็น Hardfork ใหม่ (ที่ เบอร์ลิน hardfork ดูเหมือนจะเป็นตัวอย่างที่ดีที่สุดสำหรับเรื่องนี้)

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

import Widespread from '@ethereumjs/frequent';
import VM from '@ethereumjs/vm';

const frequent = new Widespread({ chain: 'mainnet', eips: (2537) });
const vm = new VM({ frequent });

ในขั้นเริ่มต้น เรารองรับ EIP ใหม่ต่อไปนี้ (ส่วนใหญ่กำหนดเป้าหมายสำหรับ เบอร์ลิน hardfork) ด้วย VM เวอร์ชัน 5ปล่อย:


TypeScript

ในวงจรการเปิดตัว EthereumJS นี้ เราสามารถพูดได้อย่างมั่นใจว่าเราได้นำไลบรารี่ของเรามาสู่กลุ่มเทคโนโลยีสมัยใหม่แบบองค์รวม ส่วนสำคัญประการหนึ่งของสิ่งนี้: ด้วยการเปิดตัวใหม่ เรากำลังเข้าใกล้การวางแผนอันยาวนานและดำเนินการตามการเปลี่ยนแปลงของ TypeScript และไลบรารีหลักทั้งหมดของเราตลอดจนการพึ่งพาภายในก็ถูกเขียนด้วย TypeScript

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

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

สภาพแวดล้อมการพัฒนาของคุณด้วยการพิมพ์ TypeScript ที่เหมาะสมตอนนี้เพิ่งรู้ว่า บล็อกเชน ตัวแปรคือ @ethereumjs/บล็อคเชน object (ยึดมั่นในคำพูดของคุณ นักพัฒนา Go และ Rust 😅 ) และไม่ใช่แค่ “บางสิ่งบางอย่าง” ดังนั้นโค้ดของเราเองจะได้รับโค้ด (TypeScript) ของคุณตามลำดับ ซึ่งจะทำให้สามารถอ่านได้ง่ายขึ้นมากเมื่อใช้ไลบรารีเวอร์ชันใหม่

สัญญา

หากคุณไม่ค่อยสนใจ JavaScript มากนัก คุณสามารถข้ามส่วนนี้ได้ แต่หากคุณเป็นนักพัฒนา JavaScript คุณคงจะถอนหายใจด้วยความโล่งใจกับข่าวเหล่านี้ ดังนั้น อย่างน้อยเราจะกล่าวถึงเรื่องนี้สั้นๆ:

การเปลี่ยนแปลงอีกครั้งสิ้นสุดลง ขณะนี้ API ไลบรารีทั้งหมดทำงานร่วมกับ JavaScript Guarantees ดังนั้นจึงไม่มีการโทรกลับอีกต่อไปทั่วทั้งสแต็กของเรา

การใช้งานห้องสมุดเปลี่ยนแปลงจาก:

blockchain.getBlock(blockId, block => {
  console.log(block);
});

ตัวอย่าง API ใหม่:

const block = await blockchain.getBlock(blockId);
console.log(block);

การเยื้องเล็กน้อยในตัวอย่างนี้อาจดูเหมือนไม่มีความหมายมากนักตั้งแต่แรกเห็น ในการเรียกรูปแบบเก่าๆ เหล่านี้หลายๆ ครั้งซ้อนกัน คุณจะยิ่งลึกลงไปเรื่อยๆ และในบางจุดโค้ดก็ไม่สามารถอ่านได้ เพียง google “callback hell” หากคุณสนใจว่าสิ่งนี้จะเป็นอย่างไร 🙂 สัญญาอนุญาตให้เขียนโค้ดที่อ่านง่ายขึ้นอย่างเห็นได้ชัด

การปรับโครงสร้างห้องสมุด

บางครั้งอาจเป็นเรื่องยากเล็กน้อยที่จะจินตนาการถึงความจำเป็นในการเปลี่ยนเครื่องยนต์หากรถยังวิ่งอยู่ แต่ถึงจุดหนึ่งก็จะมีความจำเป็นหากคุณต้องการเดินทางต่อไปอีก 10,000 ไมล์อย่างปลอดภัย ด้วยการรีแฟคเตอร์ในซอฟต์แวร์ มักจะคล้ายกันเล็กน้อย 😀 ในซีรีส์การเปิดตัวนี้ เราได้ปรับปรุงพื้นฐานของห้องสมุดกลางบางแห่งและของเราใหม่ ปิดกั้นของเรา ข้อความ และส่วนหนึ่งของเรา บล็อกเชน ห้องสมุดได้รับการเขียนใหม่อย่างมีนัยสำคัญ

ตอนนี้การทำงานกับไลบรารีเหล่านี้น่าจะง่ายกว่ามาก และห้องสมุดเหล่านี้ควรได้รับการเตรียมพร้อมอย่างดีเพื่อมอบพื้นฐานที่มั่นคงและปลอดภัยเพื่อต่อยอดภายในระบบนิเวศ Ethereum JavaScript ในอีกหลายปีข้างหน้า

แนวโน้ม

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

สำหรับตัวเราเอง การเปิดตัวเหล่านี้ถือเป็นรากฐานที่มั่นคงในการก้าวไปสู่วงจรการพัฒนาที่มีแนวทางในอนาคตมากขึ้น และเราตั้งตารอที่จะเห็นสิ่งนี้เข้ามามีบทบาทอย่างกระตือรือร้น เนื่องจาก VM มีฮาร์ดฟอร์คทั้งหมดที่ใช้งานอยู่ ตอนนี้จึงเป็นไปได้ที่จะรวม VM เข้ากับการปรับปรุงใหม่ของเรา ไคลเอนต์ EthereumJS โครงการ. เราจะไม่เข้าร่วม mainnet กับลูกค้ารายนี้ในเร็วๆ นี้ แต่อย่างไรก็ตาม เราจะสามารถแบ่งปันเพื่อช่วยปรับปรุงความหลากหลายของลูกค้าได้ ลูกค้าใหม่ในขั้นตอนแรกจะอนุญาตให้เราเข้าร่วมการทดสอบการพัฒนาเช่น โยโล่ v2 (และการติดตาม) และช่วยค้นหาและป้องกันข้อบกพร่องที่เป็นเอกฉันท์ระหว่างลูกค้าอย่างแข็งขัน นอกจากนี้เรายังสามารถมีส่วนร่วมอย่างแข็งขันมากขึ้นในการวิจัยโปรโตคอลในอนาคตและมีส่วนร่วมในการดำเนินการวิจัยในที่สุด คุณจะได้ยินข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้เมื่อเรามีเวอร์ชันแรกของไคลเอนต์ที่ใช้งานได้ของเราพร้อมแล้ว (โดยกำหนดเป้าหมายไปที่การซิงค์แบบเต็ม โยโล่ v2) จะเป็นต้นปีหน้า

สำหรับตอนนี้ เราขออวยพรให้ทุกคนมีสมาธิส่งท้ายปี พร้อมกับวันเปิดตัวบีคอนเชนอันน่าตื่นเต้น (สัปดาห์)!

ทีมงานจาวาสคริปต์ของ EF



RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

ความเห็นล่าสุด