Solana Web3.js 2.x إصدار: فصل جديد في البرمجة الوظيفية
تم إطلاق Solana Web3.js كأحد المكتبات الغنية بالميزات في JavaScript النسخة 2.x رسميًا في نوفمبر من هذا العام. بالمقارنة مع النسخة 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:
جافا سكريبت
import { createSolanaRpc } من '@solana/web3.js';
كونست RPC = createSolanaRpc(');
// استخدم rpc لإرسال المعاملة
توقيع const = await rpc.sendAndConfirmTransaction(transaction);
في هذا الإصدار الجديد، عندما نقوم باستدعاء sendAndConfirmTransaction لإرسال المعاملة، فإنه سيقوم تلقائيًا بإطلاق طلب HTTPS، وإنشاء اتصال WSS للاشتراك في حالة المعاملة، وإرجاع تجزئة المعاملة بعد تأكيدها.
زوج المفاتيح
لقد شهدت الأجزاء المتعلقة بالمفتاح العام والمفتاح الخاص تغييرات كبيرة أيضًا. لم تعد هناك فئات Keypair و PublicKey المستخدمة بشكل شائع في الإصدار 1.x، وتم استبدالها ببعض الدوال.
على سبيل المثال، يمكن الآن استخدام await generateKeyPair() لإنشاء زوج مفاتيح، بدلاً من Keypair.generate() السابق.
من الجدير بالذكر أن الدالة الجديدة generateKeyPair تعيد Promise بدلاً من إرجاع زوج المفاتيح مباشرة. وذلك لأن التنفيذ الجديد يستفيد قدر الإمكان من واجهة برمجة تطبيقات التشفير على الويب في JavaScript، مستخدمًا التنفيذ الأصلي لـ Ed25519. العديد من طرق واجهة برمجة تطبيقات التشفير على الويب غير متزامنة. ومع ذلك، فإن هذا التغيير ليس غير مقبول، ففي عام 2024 الذي أوشك على الانتهاء، أصبح مطورو JavaScript معتادين جدًا على Promise.
إرسال المعاملة
يجب أن يكون مستخدمو الإصدار 1.x على دراية كبيرة بفئتي Transaction و VersionedTransaction، حيث أن العلاقة بينهما قد أزعجت العديد من المطورين.
في الإصدار 2.x ، لم تعد هذان الصنفان موجودين.
لم تعد الطرق المتعلقة ببرنامج النظام الموجودة في الإصدار القديم موجودة أيضًا، لذا يجب استيراد جميع الطرق الثابتة من فئة SystemProgram من مصادر أخرى.
على سبيل المثال، تتطلب تعليمات transfer الآن استدعاء دالة getTransferSolInstruction من @solana-program/system.
نظرًا لعدم تقديم الفئات بعد الآن، تقدم Web3.js شكل الأنابيب الشائع في البرمجة الوظيفية. فيما يلي مثال على استخدام دالة الأنابيب لتنفيذ وظيفة تحويل النسخة 1.x الأصلية:
جافا سكريبت
استيراد { الأنابيب } من '@solana / وظيفي' ؛
import { getTransferSolInstruction } من '@solana / system-program' ؛
import { createSolanaRpc } من '@solana/web3.js';
يمكن ملاحظة أن المعاملات لم تعد تبدأ من خلال Connection، بل يتم إنشاء دالة محددة من خلال مزود RPC الذي قمنا بتعريفه، ثم يتم استدعاء هذه الدالة لبدء المعاملة. مقارنةً بالإصدار 1.x، زاد حجم الكود، لكن الميزة هي زيادة إمكانية التخصيص.
تبدأ المعاملات من خلال بروتوكول HTTPS RPC، ثم يتم تأكيد نتائج المعاملات من خلال الاشتراك في WSS RPC. يمكن الشعور بأن الطريقة الجديدة تعتمد بشكل كبير على WSS، وأعتقد أن تطبيقات WSS ستصبح أكثر انتشارًا في المستقبل، مما يفرض أيضًا متطلبات أعلى على استقرار خدمات مزودي RPC.
React دعم
من المثير للاهتمام أن مشروع @solana/web3.js يتضمن أيضًا مكتبة تُدعى @solana/react، والتي توفر بعض Hooks الخاصة بـ React، وتحتوي على وظائف مثل signIn.
ملخص
إن إصدار النسخة 2.x من @solana/web3.js يعكس التزام فريق Solana بالتطور المستمر والتحسين. إنه يوفر للمطورين وسيلة فعالة ومرنة وقابلة للتخصيص للتفاعل مع شبكة Solana، مما يساعد على تعزيز اعتماد المنصة وتطويرها.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 18
أعجبني
18
8
إعادة النشر
مشاركة
تعليق
0/400
CommunityJanitor
· 08-10 07:13
لماذا هذه العملية تتكرر ببطء شديد؟
شاهد النسخة الأصليةرد0
ProposalManiac
· 08-09 22:16
هناك تقدم، لكن ليس كافياً بشكل جذري
شاهد النسخة الأصليةرد0
GhostChainLoyalist
· 08-09 07:05
2.0 لا يزال بطيئًا متى ستتعلمون أن تراقبوا تحديثات الإصدار طوال اليوم
شاهد النسخة الأصليةرد0
PanicSeller69
· 08-07 19:20
ما فائدة الترقية ، أليس علينا تغيير المكتبة؟
شاهد النسخة الأصليةرد0
MemeCoinSavant
· 08-07 07:47
استنادًا إلى af، سولانا تثبت الأهمية الإحصائية في تطور الويب 3 بصراحة
إصدار Solana Web3.js 2.x: ترقية كبيرة في البرمجة الوظيفية وتحسين الأداء
Solana Web3.js 2.x إصدار: فصل جديد في البرمجة الوظيفية
تم إطلاق Solana Web3.js كأحد المكتبات الغنية بالميزات في JavaScript النسخة 2.x رسميًا في نوفمبر من هذا العام. بالمقارنة مع النسخة 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:
جافا سكريبت import { createSolanaRpc } من '@solana/web3.js';
كونست RPC = createSolanaRpc(');
// استخدم rpc لإرسال المعاملة توقيع const = await rpc.sendAndConfirmTransaction(transaction);
في هذا الإصدار الجديد، عندما نقوم باستدعاء sendAndConfirmTransaction لإرسال المعاملة، فإنه سيقوم تلقائيًا بإطلاق طلب HTTPS، وإنشاء اتصال WSS للاشتراك في حالة المعاملة، وإرجاع تجزئة المعاملة بعد تأكيدها.
زوج المفاتيح
لقد شهدت الأجزاء المتعلقة بالمفتاح العام والمفتاح الخاص تغييرات كبيرة أيضًا. لم تعد هناك فئات Keypair و PublicKey المستخدمة بشكل شائع في الإصدار 1.x، وتم استبدالها ببعض الدوال.
على سبيل المثال، يمكن الآن استخدام await generateKeyPair() لإنشاء زوج مفاتيح، بدلاً من Keypair.generate() السابق.
من الجدير بالذكر أن الدالة الجديدة generateKeyPair تعيد Promise بدلاً من إرجاع زوج المفاتيح مباشرة. وذلك لأن التنفيذ الجديد يستفيد قدر الإمكان من واجهة برمجة تطبيقات التشفير على الويب في JavaScript، مستخدمًا التنفيذ الأصلي لـ Ed25519. العديد من طرق واجهة برمجة تطبيقات التشفير على الويب غير متزامنة. ومع ذلك، فإن هذا التغيير ليس غير مقبول، ففي عام 2024 الذي أوشك على الانتهاء، أصبح مطورو JavaScript معتادين جدًا على Promise.
إرسال المعاملة
يجب أن يكون مستخدمو الإصدار 1.x على دراية كبيرة بفئتي Transaction و VersionedTransaction، حيث أن العلاقة بينهما قد أزعجت العديد من المطورين.
في الإصدار 2.x ، لم تعد هذان الصنفان موجودين.
لم تعد الطرق المتعلقة ببرنامج النظام الموجودة في الإصدار القديم موجودة أيضًا، لذا يجب استيراد جميع الطرق الثابتة من فئة SystemProgram من مصادر أخرى.
على سبيل المثال، تتطلب تعليمات transfer الآن استدعاء دالة getTransferSolInstruction من @solana-program/system.
نظرًا لعدم تقديم الفئات بعد الآن، تقدم Web3.js شكل الأنابيب الشائع في البرمجة الوظيفية. فيما يلي مثال على استخدام دالة الأنابيب لتنفيذ وظيفة تحويل النسخة 1.x الأصلية:
جافا سكريبت استيراد { الأنابيب } من '@solana / وظيفي' ؛ import { getTransferSolInstruction } من '@solana / system-program' ؛ import { createSolanaRpc } من '@solana/web3.js';
كونست RPC = createSolanaRpc(');
معاملة CONST = pipe( createTransaction({ الإصدار: 0 }) ، addInstruction(getTransferSolInstruction({ من: senderPublicKey, إلى: recipientPublicKey، المبلغ: transferAmount, })) );
توقيع const = await rpc.sendAndConfirmTransaction(transaction);
يمكن ملاحظة أن المعاملات لم تعد تبدأ من خلال Connection، بل يتم إنشاء دالة محددة من خلال مزود RPC الذي قمنا بتعريفه، ثم يتم استدعاء هذه الدالة لبدء المعاملة. مقارنةً بالإصدار 1.x، زاد حجم الكود، لكن الميزة هي زيادة إمكانية التخصيص.
تبدأ المعاملات من خلال بروتوكول HTTPS RPC، ثم يتم تأكيد نتائج المعاملات من خلال الاشتراك في WSS RPC. يمكن الشعور بأن الطريقة الجديدة تعتمد بشكل كبير على WSS، وأعتقد أن تطبيقات WSS ستصبح أكثر انتشارًا في المستقبل، مما يفرض أيضًا متطلبات أعلى على استقرار خدمات مزودي RPC.
React دعم
من المثير للاهتمام أن مشروع @solana/web3.js يتضمن أيضًا مكتبة تُدعى @solana/react، والتي توفر بعض Hooks الخاصة بـ React، وتحتوي على وظائف مثل signIn.
ملخص
إن إصدار النسخة 2.x من @solana/web3.js يعكس التزام فريق Solana بالتطور المستمر والتحسين. إنه يوفر للمطورين وسيلة فعالة ومرنة وقابلة للتخصيص للتفاعل مع شبكة Solana، مما يساعد على تعزيز اعتماد المنصة وتطويرها.