Solana Web3.js 2.x إصدار: تحديث كبير لمكتبة JavaScript القوية
أصدرت 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 لتنفيذ هذه الميزة:
جافا سكريبت
استيراد { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } من '@solana/web3.js';
في هذا الرمز، عندما نقوم باستدعاء sendAndConfirmTransaction لإرسال المعاملة، سيتم تلقائيًا بدء طلب HTTPS، وإنشاء اتصال WSS، والاشتراك في حالة المعاملة، وعند تأكيد المعاملة سيتم إرجاع تجزئة المعاملة.
زوج المفاتيح
هناك تغييرات كبيرة فيما يتعلق بالمفتاح العام والمفتاح الخاص. لم تعد هناك فئات Keypair و PublicKey المستخدمة في إصدار 1.x، حيث تم استبدالها ببعض الدوال.
على سبيل المثال، يمكنك استخدام await generateKeyPair() لإنشاء زوج المفاتيح، بدلاً من Keypair.generate() السابق.
من الجدير بالذكر أن الدالة الجديدة generateKeyPair تعيد الآن Promise، بدلاً من إرجاع زوج المفاتيح مباشرة. وذلك لأن التنفيذ الجديد يستفيد من واجهة برمجة تطبيقات التشفير الخاصة بـ JavaScript، حيث يستخدم تنفيذ Ed25519 الأصلي. العديد من طرق واجهة برمجة التطبيقات للتشفير غير متزامنة. ومع ذلك، فإن هذا التغيير ليس من الصعب تقبله، ففي نهاية عام 2023، أصبح مطورو JavaScript مألوفين جدًا مع Promise.
إرسال المعاملة
يجب أن يكون مستخدمو الإصدار 1.x على دراية جيدة بفئتين Transaction و VersionedTransaction. في الإصدار 2.x ، لم تعد هاتين الفئتين موجودتين.
لم تعد الطرق المتعلقة ببرنامج النظام المقدمة في الإصدار القديم موجودة، لذا يجب استيراد جميع الطرق الثابتة من فئة SystemProgram من أماكن أخرى.
على سبيل المثال، تتطلب تعليمات transfer الآن استدعاء دالة getTransferSolInstruction من @solana-program/system.
نظرًا لعدم توفير الفئات بعد الآن، فإن Web3.js يقدم شكل pipe الشائع في البرمجة الوظيفية. فيما يلي مثال على استخدام دالة pipe لتنفيذ وظيفة نقل الأموال الأصلية من الإصدار 1.x:
جافا سكريبت
استيراد { الأنابيب } من '@solana / وظيفي' ؛
import { getTransferSolInstruction } من '@solana / system-program' ؛
استيراد {
addSignatureToTransaction,
إنشاء المعاملة,
getBase58SignerFromPrivateKey ،
getSignatureFromSignedTransaction ،
getTransactionMessage ،
signTransaction,
} من '@solana/معاملات';
يمكن ملاحظة أن المعاملات لم تعد تبدأ من خلال Connection، بل يتم إنشاء دالة معينة من خلال مزود RPC الذي قمنا بتعريفه، ثم يتم استدعاء هذه الدالة لبدء المعاملة. مقارنةً بالإصدار 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، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 12
أعجبني
12
8
مشاركة
تعليق
0/400
SchrodingerWallet
· منذ 1 س
انتظر احترافيين ليتعرضوا للمشاكل أولاً
شاهد النسخة الأصليةرد0
AirdropFatigue
· منذ 11 س
ها ، لا يؤثر الانتقال أو عدمه بشكل كبير
شاهد النسخة الأصليةرد0
DegenGambler
· 08-06 03:11
أخيرًا ارتفع إلى 2.0 ~ مجرد مشاهدة المسرحية
شاهد النسخة الأصليةرد0
ser_we_are_ngmi
· 08-06 01:10
ما الفائدة من الترقية؟ يمكن استخدام 1.x.
شاهد النسخة الأصليةرد0
LayerHopper
· 08-06 01:10
كان يجب أن يتم الترقية بالفعل
شاهد النسخة الأصليةرد0
PumpAnalyst
· 08-06 00:55
من الناحية التقنية، يبدو أن تحديث هذا الإصدار غريب. لا يُنصح الحمقى بالتسرع في الترقية.
تم إصدار الإصدار 2.x من Solana Web3.js بشكل كبير، حيث تم تصميمه بشكل معياري مما يعزز الأداء بشكل كبير.
Solana Web3.js 2.x إصدار: تحديث كبير لمكتبة JavaScript القوية
أصدرت 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 لتنفيذ هذه الميزة:
جافا سكريبت استيراد { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } من '@solana/web3.js';
const rpc = createSolanaRpcApi( { httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
const { sendAndConfirmTransaction } = rpc;
في هذا الرمز، عندما نقوم باستدعاء sendAndConfirmTransaction لإرسال المعاملة، سيتم تلقائيًا بدء طلب HTTPS، وإنشاء اتصال WSS، والاشتراك في حالة المعاملة، وعند تأكيد المعاملة سيتم إرجاع تجزئة المعاملة.
زوج المفاتيح
هناك تغييرات كبيرة فيما يتعلق بالمفتاح العام والمفتاح الخاص. لم تعد هناك فئات Keypair و PublicKey المستخدمة في إصدار 1.x، حيث تم استبدالها ببعض الدوال.
على سبيل المثال، يمكنك استخدام await generateKeyPair() لإنشاء زوج المفاتيح، بدلاً من Keypair.generate() السابق.
من الجدير بالذكر أن الدالة الجديدة generateKeyPair تعيد الآن Promise، بدلاً من إرجاع زوج المفاتيح مباشرة. وذلك لأن التنفيذ الجديد يستفيد من واجهة برمجة تطبيقات التشفير الخاصة بـ JavaScript، حيث يستخدم تنفيذ Ed25519 الأصلي. العديد من طرق واجهة برمجة التطبيقات للتشفير غير متزامنة. ومع ذلك، فإن هذا التغيير ليس من الصعب تقبله، ففي نهاية عام 2023، أصبح مطورو JavaScript مألوفين جدًا مع Promise.
إرسال المعاملة
يجب أن يكون مستخدمو الإصدار 1.x على دراية جيدة بفئتين Transaction و VersionedTransaction. في الإصدار 2.x ، لم تعد هاتين الفئتين موجودتين.
لم تعد الطرق المتعلقة ببرنامج النظام المقدمة في الإصدار القديم موجودة، لذا يجب استيراد جميع الطرق الثابتة من فئة SystemProgram من أماكن أخرى.
على سبيل المثال، تتطلب تعليمات transfer الآن استدعاء دالة getTransferSolInstruction من @solana-program/system.
نظرًا لعدم توفير الفئات بعد الآن، فإن Web3.js يقدم شكل pipe الشائع في البرمجة الوظيفية. فيما يلي مثال على استخدام دالة pipe لتنفيذ وظيفة نقل الأموال الأصلية من الإصدار 1.x:
جافا سكريبت استيراد { الأنابيب } من '@solana / وظيفي' ؛ import { getTransferSolInstruction } من '@solana / system-program' ؛ استيراد { addSignatureToTransaction, إنشاء المعاملة, getBase58SignerFromPrivateKey ، getSignatureFromSignedTransaction ، getTransactionMessage ، signTransaction, } من '@solana/معاملات';
معاملة CONST = pipe( createTransaction()، addSignatureToTransaction(getTransferSolInstruction({})) ، );
const signedTransaction = signTransaction(transaction ، [signer]) ؛ توقيع const = getSignatureFromSignedTransaction(signedTransaction) ؛ رسالة const = getTransactionMessage(signedTransaction);
const txid = await sendAndConfirmTransaction({ signedTransaction });
يمكن ملاحظة أن المعاملات لم تعد تبدأ من خلال Connection، بل يتم إنشاء دالة معينة من خلال مزود RPC الذي قمنا بتعريفه، ثم يتم استدعاء هذه الدالة لبدء المعاملة. مقارنةً بالإصدار 1.x، زاد حجم الشيفرة، ولكن أصبح هناك قابلية أكبر للتخصيص.
تتم عملية التداول من خلال HTTPS RPC، ثم يتم تأكيد نتيجة التداول من خلال الاشتراك في WSS RPC. يمكننا أن نشعر أن الطريقة الجديدة تعتمد بشدة على WSS، ونعتقد أن تطبيق WSS سيكون أكثر شيوعًا في المستقبل، وهذا بالفعل يتطلب مزيدًا من الاستقرار في خدمات مزودي RPC.
رد فعل
من الجدير بالذكر أن مشروع @solana/web3.js يتضمن أيضًا مكتبة تُدعى @solana/react، والتي توفر بعض React Hook، وتحتوي على ميزات مثل signIn.
ملخص
إن إصدار النسخة 2.x من @solana/web3.js يعكس التزام فريق Solana بالتطور والتحسين المستمر. فهو يوفر للمطورين وسيلة فعالة ومرنة وقابلة للتخصيص للتفاعل مع شبكة Solana، مما يساعد على تعزيز اعتماد هذه المنصة وتطويرها.