تم إصدار النسخة 2.x من مكتبة JavaScript الغنية بالميزات Solana Web3.js رسميًا في نوفمبر من هذا العام. وقد شهد هذا الإصدار الجديد تغييرات كبيرة مقارنة بالإصدار 1.x، وسيتم تلخيص التغييرات الرئيسية فيه في هذه المقالة.
على الرغم من أن الإصدار 2.x قد تم طرحه للتو، إلا أن استخدامه لا يزال منخفضًا، ولم تنتقل العديد من المكتبات المستخدمة على نطاق واسع بعد، ولكن فهم هذه التغييرات سيساعد في أعمال الانتقال المستقبلية.
مقارنة الإصدارات
تتميز النسخة 1.x بسهولة الاستخدام، حيث تحتوي على حزمة واحدة فقط: @solana/web3.js، وجميع الميزات مركزة فيها. تعتمد على تصميم قائم على الكائنات، حيث تغلف عددًا كبيرًا من العمليات الشائعة. على سبيل المثال، توفر فئة Connection عشرات الطرق، التي تغطي تقريبًا جميع الميزات التي يحتاجها المطورون.
ومع ذلك، فإن هذا التصميم يسبب بعض المشكلات. على الرغم من أن الميزات التي يستخدمها المطورون فعليًا قد تشكل جزءًا صغيرًا فقط، إلا أنه سيتم تنزيل مكتبة الشفرات بالكامل على أجهزة المستخدمين، وقد يؤدي حجم الشفرة الكبير إلى زيادة زمن التحميل.
بالمقارنة، تم تقسيم الكود الأساسي في الإصدار 2.x إلى وحدات صغيرة متعددة، مثل @solana/accounts، @solana/codecs، @solana/rpc، @solana/signers، @solana/transactions، وغيرها. في الوقت نفسه، تخلى الإصدار الجديد عن التنفيذ القائم على الفئات، معتمدًا أكثر على أسلوب الوظائف الفردية. هذا التصميم يساعد في تحسين بناء كود JavaScript، حيث سيتم حذف الأكواد غير المستخدمة ولن يتم تحميلها على أجهزة المستخدمين. تظهر الإحصاءات في الوثائق الرسمية أن استخدام الإصدار الجديد من DApp يمكن أن يحقق عادةً تحسينًا في الحجم بنسبة 30%، وإذا تم استخدام عدد قليل من الميزات فقط، فقد تكون نسبة التحسين أعلى.
هذا التغيير يطرح تحديات جديدة لفريق Solana في كتابة الوثائق، حيث أصبح من المهم كيفية تمكين المطورين من العثور بسرعة على الوظائف المطلوبة. ومع ذلك، يبدو أن تسمية الحزم المختلفة تتمتع بدلالة جيدة، حيث يمكن فهم أغراضها إلى حد ما من أسمائها، مما يقلل من صعوبة انتقال المطورين إلى حد ما.
نظرًا لأن الإصدار الجديد تم إصداره مؤخرًا، لم تقم العديد من المشاريع بعد بالانتقال. كما أن الأمثلة المتعلقة بإصدار 2.x على Solana Cookbook قليلة. بالإضافة إلى ذلك، يميل الإصدار الجديد إلى استخدام الميزات المدمجة في وقت التشغيل (مثل إنشاء أزواج المفاتيح)، ولكن الوصف في الوثائق لهذه الأجزاء غير كافٍ، مما قد يسبب ارتباكًا للمطورين.
الخاصية المهمة الأخرى في الإصدار 2.x هي عدم الاعتماد على أي شيء. قد لا تكون هذه النقطة مهمة للكثير من المستخدمين، ولكن من خلال الهجوم الذي وقع في أوائل ديسمبر من هذا العام على إصدارات @solana/web3.js 1.95.5 و 1.95.6، فإن المزيد من المدخلات والاعتمادات الخارجية سيزيد بشكل كبير من احتمال حدوث حوادث أمان. مع إصدار 2.x، قرر فريق تطوير Web3.js استخدام الوظائف الأصلية بشكل أكبر، وإلغاء الاعتماد على الخارج وإدخال Polyfills. على الرغم من أنه قد تكون هناك تغييرات في المستقبل، إلا أن الإصدار 2.x قد تخلص من جميع الاعتمادات الخارجية.
نقاط التغيير المهمة
الاتصال
في إصدار 1.x، توفر Connection العديد من الطرق. ولكن وظيفتها الرئيسية هي إنشاء مُرسل طلبات عن طريق تكوين عنوان طلب RPC، ثم إرسال طلبات متنوعة من خلاله.
عند استدعاء sendAndConfirmTransaction لإرسال المعاملة، سيتم تلقائيًا بدء طلب HTTPS، وإنشاء اتصال WSS للاشتراك في حالة المعاملة، وعند تأكيد المعاملة سيتم إرجاع تجزئة المعاملة.
زوج المفاتيح
لقد شهدت الأجزاء المتعلقة بالمفتاح العام والمفتاح الخاص تغييرات كبيرة. لم تعد الفئات المستخدمة بشكل شائع في الإصدار 1.x مثل Keypair و PublicKey موجودة، وتم استبدالها ببعض الدوال.
على سبيل المثال، يمكنك الآن استخدام await generateKeyPair() لإنشاء زوج مفاتيح، بينما كان يتم ذلك سابقًا مباشرة من خلال Keypair.generate().
من الجدير بالذكر أن generateKeyPair الجديدة تعيد Promise بدلاً من إعادة مجموعة المفاتيح مباشرة. وذلك لأن التنفيذ الجديد يستفيد قدر الإمكان من واجهة برمجة تطبيقات Web Crypto الخاصة بـ JavaScript، مستخدمًا تنفيذ Ed25519 الأصلي. العديد من طرق واجهة برمجة تطبيقات Web Crypto تكون غير متزامنة. ومع ذلك، فإن هذا التغيير ليس غير مقبول، ففي اليوم الذي يقترب فيه عام 2024 من نهايته، أصبح مطورو JavaScript على دراية كبيرة بـ Promise.
إرسال المعاملة
فئة Transaction و VersionedTransaction في الإصدار 1.x لم تعد موجودة في الإصدار 2.x.
لم تعد الطرق المتعلقة ببرنامج النظام المقدمة في الإصدار القديم موجودة، لذا يجب استيراد الطرق الثابتة من فئة SystemProgram من مكان آخر.
على سبيل المثال، تتطلب تعليمات transfer الآن استدعاء دالة getTransferSolInstruction من @solana-program/system.
نظرًا لعدم توفير الفئات بعد الآن، يوفر Web3.js شكل pipe الشائع في البرمجة الوظيفية. فيما يلي مثال على استخدام دالة pipe لتنفيذ وظيفة التحويل الأصلية من الإصدار 1.x:
جافا سكريبت
استيراد { الأنابيب } من "@solana / web3.js" ؛
import { getTransferSolInstruction } من "@solana-program / system" ؛
يمكن أن نرى أن المعاملات لم تعد تُ initiated عبر Connection، بل يتم إنشاؤها من خلال RPC Provider الذي قمنا بتعريفه لإنشاء وظيفة فريدة، ثم يتم استدعاء هذه الوظيفة لبدء المعاملة. مقارنة بالإصدار 1.x، زاد حجم الشيفرة، لكن قابلية التخصيص أصبحت أقوى.
تتم عملية التداول عبر HTTPS RPC ، ثم يتم تأكيد نتيجة التداول من خلال الاشتراك في WSS RPC. يمكن أن نشعر أن الطريقة الجديدة تعتمد بشكل كبير على WSS، وأعتقد أن تطبيق WSS سيزداد اتساعاً في المستقبل، وهذا بالفعل يتطلب مستوى أعلى من الاستقرار من مزودي خدمة RPC.
رد فعل
من الجدير بالذكر أن مشروع @solana/web3.js يتضمن أيضًا مكتبة تُدعى @solana/react، والتي توفر بعض React Hook، مع مجموعة من الوظائف المدمجة مثل signIn.
ملخص
إن إصدار النسخة 2.x من @solana/web3.js يعكس التزام فريق Solana بالتطور والتحسين المستمر. إنه يوفر للمطورين وسيلة فعالة ومرنة وقابلة للتخصيص للتفاعل مع شبكة Solana، مما يساعد في تعزيز اعتماد هذه المنصة وتطويرها.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 21
أعجبني
21
10
مشاركة
تعليق
0/400
failed_dev_successful_ape
· 07-20 13:15
2.0 رائع، أخيراً انتظرت هذا
شاهد النسخة الأصليةرد0
GateUser-44a00d6c
· 07-20 05:07
لقد هربت أخيرًا ، وانتظرت الترقية.
شاهد النسخة الأصليةرد0
digital_archaeologist
· 07-20 03:59
عادوا مرة أخرى، ليس سيئًا!
شاهد النسخة الأصليةرد0
nft_widow
· 07-19 21:58
هل هذه الموجة تأتي لتؤثر على حالتي النفسية مرة أخرى؟
شاهد النسخة الأصليةرد0
BrokenDAO
· 07-17 17:49
الترقية رائعة، لكن من يجرؤ على القفز أولاً؟
شاهد النسخة الأصليةرد0
MetaverseVagabond
· 07-17 17:47
استقر الأمر، الآن أصبح كتابة الكود مريحًا.
شاهد النسخة الأصليةرد0
NonFungibleDegen
· 07-17 17:42
صاعد af على سولانا بصراحة... v2 راح يرسلها ser
شاهد النسخة الأصليةرد0
GasFeeNightmare
· 07-17 17:39
في منتصف الليل لا زلت أراقب حركة الغاز لـ sol... متى ستنخفض إلى 1gwei؟
إصدار Solana Web3.js 2.x: تصميم معياري يعزز الأداء والأمان
Solana Web3.js 2.x إصدار: ميزات أقوى وأداء محسّن
تم إصدار النسخة 2.x من مكتبة JavaScript الغنية بالميزات Solana Web3.js رسميًا في نوفمبر من هذا العام. وقد شهد هذا الإصدار الجديد تغييرات كبيرة مقارنة بالإصدار 1.x، وسيتم تلخيص التغييرات الرئيسية فيه في هذه المقالة.
على الرغم من أن الإصدار 2.x قد تم طرحه للتو، إلا أن استخدامه لا يزال منخفضًا، ولم تنتقل العديد من المكتبات المستخدمة على نطاق واسع بعد، ولكن فهم هذه التغييرات سيساعد في أعمال الانتقال المستقبلية.
مقارنة الإصدارات
تتميز النسخة 1.x بسهولة الاستخدام، حيث تحتوي على حزمة واحدة فقط: @solana/web3.js، وجميع الميزات مركزة فيها. تعتمد على تصميم قائم على الكائنات، حيث تغلف عددًا كبيرًا من العمليات الشائعة. على سبيل المثال، توفر فئة Connection عشرات الطرق، التي تغطي تقريبًا جميع الميزات التي يحتاجها المطورون.
ومع ذلك، فإن هذا التصميم يسبب بعض المشكلات. على الرغم من أن الميزات التي يستخدمها المطورون فعليًا قد تشكل جزءًا صغيرًا فقط، إلا أنه سيتم تنزيل مكتبة الشفرات بالكامل على أجهزة المستخدمين، وقد يؤدي حجم الشفرة الكبير إلى زيادة زمن التحميل.
بالمقارنة، تم تقسيم الكود الأساسي في الإصدار 2.x إلى وحدات صغيرة متعددة، مثل @solana/accounts، @solana/codecs، @solana/rpc، @solana/signers، @solana/transactions، وغيرها. في الوقت نفسه، تخلى الإصدار الجديد عن التنفيذ القائم على الفئات، معتمدًا أكثر على أسلوب الوظائف الفردية. هذا التصميم يساعد في تحسين بناء كود JavaScript، حيث سيتم حذف الأكواد غير المستخدمة ولن يتم تحميلها على أجهزة المستخدمين. تظهر الإحصاءات في الوثائق الرسمية أن استخدام الإصدار الجديد من DApp يمكن أن يحقق عادةً تحسينًا في الحجم بنسبة 30%، وإذا تم استخدام عدد قليل من الميزات فقط، فقد تكون نسبة التحسين أعلى.
هذا التغيير يطرح تحديات جديدة لفريق Solana في كتابة الوثائق، حيث أصبح من المهم كيفية تمكين المطورين من العثور بسرعة على الوظائف المطلوبة. ومع ذلك، يبدو أن تسمية الحزم المختلفة تتمتع بدلالة جيدة، حيث يمكن فهم أغراضها إلى حد ما من أسمائها، مما يقلل من صعوبة انتقال المطورين إلى حد ما.
نظرًا لأن الإصدار الجديد تم إصداره مؤخرًا، لم تقم العديد من المشاريع بعد بالانتقال. كما أن الأمثلة المتعلقة بإصدار 2.x على Solana Cookbook قليلة. بالإضافة إلى ذلك، يميل الإصدار الجديد إلى استخدام الميزات المدمجة في وقت التشغيل (مثل إنشاء أزواج المفاتيح)، ولكن الوصف في الوثائق لهذه الأجزاء غير كافٍ، مما قد يسبب ارتباكًا للمطورين.
الخاصية المهمة الأخرى في الإصدار 2.x هي عدم الاعتماد على أي شيء. قد لا تكون هذه النقطة مهمة للكثير من المستخدمين، ولكن من خلال الهجوم الذي وقع في أوائل ديسمبر من هذا العام على إصدارات @solana/web3.js 1.95.5 و 1.95.6، فإن المزيد من المدخلات والاعتمادات الخارجية سيزيد بشكل كبير من احتمال حدوث حوادث أمان. مع إصدار 2.x، قرر فريق تطوير Web3.js استخدام الوظائف الأصلية بشكل أكبر، وإلغاء الاعتماد على الخارج وإدخال Polyfills. على الرغم من أنه قد تكون هناك تغييرات في المستقبل، إلا أن الإصدار 2.x قد تخلص من جميع الاعتمادات الخارجية.
نقاط التغيير المهمة
الاتصال
في إصدار 1.x، توفر Connection العديد من الطرق. ولكن وظيفتها الرئيسية هي إنشاء مُرسل طلبات عن طريق تكوين عنوان طلب RPC، ثم إرسال طلبات متنوعة من خلاله.
تم اعتماد طريقة أكثر وظيفية في تنفيذ الإصدار 2.x:
جافا سكريبت استيراد { createSolanaRpc } من "@solana / web3.js" ؛
const rpc = createSolanaRpc("");
عند استدعاء sendAndConfirmTransaction لإرسال المعاملة، سيتم تلقائيًا بدء طلب HTTPS، وإنشاء اتصال WSS للاشتراك في حالة المعاملة، وعند تأكيد المعاملة سيتم إرجاع تجزئة المعاملة.
زوج المفاتيح
لقد شهدت الأجزاء المتعلقة بالمفتاح العام والمفتاح الخاص تغييرات كبيرة. لم تعد الفئات المستخدمة بشكل شائع في الإصدار 1.x مثل Keypair و PublicKey موجودة، وتم استبدالها ببعض الدوال.
على سبيل المثال، يمكنك الآن استخدام await generateKeyPair() لإنشاء زوج مفاتيح، بينما كان يتم ذلك سابقًا مباشرة من خلال Keypair.generate().
من الجدير بالذكر أن generateKeyPair الجديدة تعيد Promise بدلاً من إعادة مجموعة المفاتيح مباشرة. وذلك لأن التنفيذ الجديد يستفيد قدر الإمكان من واجهة برمجة تطبيقات Web Crypto الخاصة بـ JavaScript، مستخدمًا تنفيذ Ed25519 الأصلي. العديد من طرق واجهة برمجة تطبيقات Web Crypto تكون غير متزامنة. ومع ذلك، فإن هذا التغيير ليس غير مقبول، ففي اليوم الذي يقترب فيه عام 2024 من نهايته، أصبح مطورو JavaScript على دراية كبيرة بـ Promise.
إرسال المعاملة
فئة Transaction و VersionedTransaction في الإصدار 1.x لم تعد موجودة في الإصدار 2.x.
لم تعد الطرق المتعلقة ببرنامج النظام المقدمة في الإصدار القديم موجودة، لذا يجب استيراد الطرق الثابتة من فئة SystemProgram من مكان آخر.
على سبيل المثال، تتطلب تعليمات transfer الآن استدعاء دالة getTransferSolInstruction من @solana-program/system.
نظرًا لعدم توفير الفئات بعد الآن، يوفر Web3.js شكل pipe الشائع في البرمجة الوظيفية. فيما يلي مثال على استخدام دالة pipe لتنفيذ وظيفة التحويل الأصلية من الإصدار 1.x:
جافا سكريبت استيراد { الأنابيب } من "@solana / web3.js" ؛ import { getTransferSolInstruction } من "@solana-program / system" ؛
معاملة CONST = pipe( createTransaction({ الإصدار: 0 }) ، addInstruction( getTransferSolInstruction({ منPublicKey، toPublicKey ، لامبورتس ، }) ) );
يمكن أن نرى أن المعاملات لم تعد تُ initiated عبر Connection، بل يتم إنشاؤها من خلال RPC Provider الذي قمنا بتعريفه لإنشاء وظيفة فريدة، ثم يتم استدعاء هذه الوظيفة لبدء المعاملة. مقارنة بالإصدار 1.x، زاد حجم الشيفرة، لكن قابلية التخصيص أصبحت أقوى.
تتم عملية التداول عبر HTTPS RPC ، ثم يتم تأكيد نتيجة التداول من خلال الاشتراك في WSS RPC. يمكن أن نشعر أن الطريقة الجديدة تعتمد بشكل كبير على WSS، وأعتقد أن تطبيق WSS سيزداد اتساعاً في المستقبل، وهذا بالفعل يتطلب مستوى أعلى من الاستقرار من مزودي خدمة RPC.
رد فعل
من الجدير بالذكر أن مشروع @solana/web3.js يتضمن أيضًا مكتبة تُدعى @solana/react، والتي توفر بعض React Hook، مع مجموعة من الوظائف المدمجة مثل signIn.
ملخص
إن إصدار النسخة 2.x من @solana/web3.js يعكس التزام فريق Solana بالتطور والتحسين المستمر. إنه يوفر للمطورين وسيلة فعالة ومرنة وقابلة للتخصيص للتفاعل مع شبكة Solana، مما يساعد في تعزيز اعتماد هذه المنصة وتطويرها.