Solana Web3.js 2.x Sürümü: Fonksiyon zengini JavaScript kütüphanesinde büyük bir yükseltme
Solana Web3.js, güçlü bir JavaScript kütüphanesi olarak, bu yılın Kasım ayında 2.x sürümünü resmi olarak yayınladı. Bu yükseltme önemli değişiklikler getirdi, ana güncellemeleri kısaca özetleyelim.
2.x versiyonu yeni çıkmış olmasına rağmen, kullanım oranı henüz yaygınlaşmamıştır ve birçok yaygın kullanılan kütüphane henüz geçiş yapmamıştır. Ancak, bu değişiklikleri önceden anlamak, gelecekteki güncellemeler için hazırlık açısından büyük fayda sağlayacaktır.
Versiyon Karşılaştırması
Inkar edilemez ki, eski sürüm kullanımı daha basit ve doğrudandır. 1.x sürümü yalnızca bir @solana/web3.js paketi içerir ve tüm işlevler burada toplanmıştır. Sınıf tabanlı bir tasarıma dayanarak, yaygın işlemlerin çoğunu kapsayan birçok işlem içerir. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevleri neredeyse kapsayan onlarca yöntem sunar. Ayrıca, Solana cookbook'ta geliştiricilerin ihtiyaç duyduğu işlevleri bulmalarını kolaylaştıran zengin örnek kodlar da sağlanmaktadır.
Ancak, bu tasarım bazı sorunlar da getiriyor. Geliştiricilerin gerçekten kullandığı işlevler belki de yalnızca bir kısmı olsa da, tüm kod kütüphanesi kullanıcı cihazına indirilecektir. Kütüphanenin kod miktarı büyük olduğundan, bu belirli bir süre alabilir.
Karşılaştırıldığında, 2.x sürümü modüler bir tasarım yaklaşımı benimsemiştir. Resmi ekip, mevcut kod havuzunu @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birçok küçük modüle ayırmıştır. Aynı zamanda, yeni sürüm sınıf tabanlı uygulamadan vazgeçmiş ve daha çok tekil fonksiyonlar kullanmıştır. Bu tasarım, JavaScript kodu derlenirken optimizasyon açısından oldukça yardımcıdır; kullanılmayan kodlar silinecek ve kullanıcı cihazına indirilmeyecektir. Resmi belgelerdeki istatistiklere göre, yeni sürümü kullanan DApp'ler temel olarak %30'luk bir boyut optimizasyonu elde edebilmektedir; eğer yalnızca çok az bir kısmı kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin belgelerinin kalitesi için daha yüksek gereksinimler getirdi; geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulabilmesi önemli bir sorun haline geldi. Görünüşe göre, en azından paket adları iyi bir anlamsal yapıya sahip, isimlerinden genel olarak ne işe yaradıklarını anlayabiliyoruz. Bu, geliştiricilerin geçiş zorluğunu bir ölçüde azaltabilir.
Elbette, henüz yeni yayımlandığı için birçok proje henüz geçiş yapmadı. Solana Cookbook'ta 2.x sürümüyle ilgili örnekler de nispeten az. Ayrıca, yeni sürümün yerleşik çalışma zamanı işlevlerini (örneğin, anahtar çiftleri oluşturma) kullanma eğiliminde olması nedeniyle, belgelerde bu kısımlara dair açıklamaların yetersiz olması, bazı yerlerin geliştiricileri kafa karıştırıcı bulmasına neden olabilir.
2.x sürümünün bir diğer önemli özelliği sıfır bağımlılıktır. Bu, birçok kullanıcı için önemli olmayabilir, ancak bu yılın Aralık ayı başında @solana/web3.js 1.95.5 ve 1.95.6 sürümlerinde meydana gelen tedarik zinciri saldırıları göz önüne alındığında, daha fazla dış girdi ve bağımlılık güvenlik olaylarının meydana gelme olasılığını önemli ölçüde artırabilir. 2.x sürümünün piyasaya sürülmesiyle birlikte, Web3.js geliştirme ekibi daha fazla yerel işlevselliği kullanmaya karar vererek dış bağımlılıkların ve Polyfills'in getirilmesini iptal etti. Gelecekte değişiklikler olabilir, ancak en azından şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklikler
bağlan
Daha önce belirtildiği gibi, 1.x sürümü Connection aracılığıyla birçok yöntem sunmaktadır. Ancak, ana işlevi, bir RPC istemci adresi yapılandırarak bir istek gönderici oluşturmak ve ardından bunu kullanarak çeşitli istekler göndermektir.
2.x'te, daha işlevsel bir yaklaşım benimsenmiştir:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
"sendAndConfirmTransaction" fonksiyonunu çağırdığımızda, otomatik olarak HTTPS isteği başlatılır ve WSS bağlantısı kurulur, işlem durumu abone olunur, işlem onaylandığında işlem hash'i döner.
anahtar çift
Açık anahtar ve özel anahtar ile ilgili kısımlar da önemli değişiklikler geçirdi. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey adlı iki sınıf artık mevcut değil, bunların yerini bazı işlevler aldı.
Örneğin, "await generateKeyPair()" kullanarak bir anahtar çifti oluşturulabilir, oysa daha önce "Keypair.generate()" ile doğrudan anahtar çifti oluşturuluyordu.
Yeni generateKeyPair'in bir Promise döndürdüğünü ve daha önce olduğu gibi doğrudan bir anahtar çifti döndürmediğini fark etmiş olabilirsiniz. Bunun nedeni, yeni uygulamanın mümkün olduğunca JavaScript'in Web Crypto API'sinden yararlanması ve yerel Ed25519 uygulamasını kullanmasıdır. Web Crypto API'sinin birçok yöntemi asenkroniktir. Ancak bu değişiklik kabul edilemez değil, 2024 yılının sonuna yaklaşırken, JavaScript geliştiricileri Promise'lere oldukça aşina hale geldi.
işlem gönder
1.x kullanıcıları muhtemelen "Transaction" ve "VersionedTransaction" iki sınıfına aşinadır. Solana'yı ilk öğrendiğinizde, bunlar arasındaki ilişki kafa karıştırıcı olabilir.
2.x sürümünde bu iki sınıf da artık mevcut değil.
Eski sürümde sağlanan System Program ile ilgili yöntemler artık mevcut değil, bu nedenle "SystemProgram" sınıfındaki statik yöntemlerin başka yerlerden getirilmesi gerekiyor.
Örneğin "transfer" komutu, "@solana-program/system" içindeki "getTransferSolInstruction" fonksiyonunu çağırmayı gerektirir.
Artık sınıf sağlanmadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan "pipe" formatını sunmaktadır. Aşağıda, pipe fonksiyonu aracılığıyla aslında 1.x sürümündeki transfer işlevselliğinin nasıl gerçekleştirileceğine dair bir örnek verilmiştir:
javascript
import { pipe } from "@solana/web3.js";
import { getTransferSolInstruction } from "@solana/system-program";
const imza = await sendAndConfirmTransaction(rpc, transaction);
Görülebilir ki, işlem artık Connection üzerinden başlatılmıyor, bunun yerine tanımladığımız RPC Provider aracılığıyla özel bir fonksiyon oluşturuluyor ve ardından bu fonksiyon çağrılarak işlem başlatılıyor. 1.x versiyonuna göre, kod miktarı artmış durumda, ancak avantajı daha fazla özelleştirilebilirliğe sahip olması.
İşlemler HTTPS RPC üzerinden başlatılır ve ardından işlem sonuçlarını doğrulamak için WSS RPC'ye abone olunur. Yeni yöntemlerin WSS'ye çok bağımlı olduğu hissediliyor, gelecekte WSS'nin uygulamalarının giderek daha yaygın hale geleceğine inanıyorum, bu da gerçekten RPC sağlayıcılarının hizmet istikrarı için daha yüksek talepler getirdi.
React
İlginçtir ki, @solana/web3.js projesinde @solana/react adlı bir kütüphane de bulunmaktadır; bu kütüphane bazı React Hook'ları sunmakta ve signIn gibi işlevleri içermektedir.
Özet
@solana/web3.js 2.x sürümünün yayımlanması, Solana ekibinin sürekli gelişim ve iyileştirme taahhüdünü tam olarak yansıtmaktadır. Geliştiricilere, Solana ağıyla etkileşimde bulunmak için verimli, esnek ve özelleştirilebilir bir yol sunarak, bu platformun benimsenmesini ve gelişimini teşvik etmektedir.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
11 Likes
Reward
11
6
Share
Comment
0/400
RetiredMiner
· 5h ago
Yaşlanmışken hala yeni versiyonu denemek.
View OriginalReply0
IntrovertMetaverse
· 07-31 08:40
Güncellemeler hızlı ama kimse kullanmıyor.
View OriginalReply0
LeverageAddict
· 07-29 23:23
Eski proje grubunu öldürmek
View OriginalReply0
OnchainHolmes
· 07-29 23:22
Sonunda beklediğim şey geldi, kaçtım kaçtım.
View OriginalReply0
TokenVelocityTrauma
· 07-29 23:21
Yükseltme gibi şeyler çok zahmetli değil mi? Hoşça kal.
Solana Web3.js 2.x sürümünde önemli bir güncelleme: Modüler tasarım performansı ve güvenliği artırıyor
Solana Web3.js 2.x Sürümü: Fonksiyon zengini JavaScript kütüphanesinde büyük bir yükseltme
Solana Web3.js, güçlü bir JavaScript kütüphanesi olarak, bu yılın Kasım ayında 2.x sürümünü resmi olarak yayınladı. Bu yükseltme önemli değişiklikler getirdi, ana güncellemeleri kısaca özetleyelim.
2.x versiyonu yeni çıkmış olmasına rağmen, kullanım oranı henüz yaygınlaşmamıştır ve birçok yaygın kullanılan kütüphane henüz geçiş yapmamıştır. Ancak, bu değişiklikleri önceden anlamak, gelecekteki güncellemeler için hazırlık açısından büyük fayda sağlayacaktır.
Versiyon Karşılaştırması
Inkar edilemez ki, eski sürüm kullanımı daha basit ve doğrudandır. 1.x sürümü yalnızca bir @solana/web3.js paketi içerir ve tüm işlevler burada toplanmıştır. Sınıf tabanlı bir tasarıma dayanarak, yaygın işlemlerin çoğunu kapsayan birçok işlem içerir. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevleri neredeyse kapsayan onlarca yöntem sunar. Ayrıca, Solana cookbook'ta geliştiricilerin ihtiyaç duyduğu işlevleri bulmalarını kolaylaştıran zengin örnek kodlar da sağlanmaktadır.
Ancak, bu tasarım bazı sorunlar da getiriyor. Geliştiricilerin gerçekten kullandığı işlevler belki de yalnızca bir kısmı olsa da, tüm kod kütüphanesi kullanıcı cihazına indirilecektir. Kütüphanenin kod miktarı büyük olduğundan, bu belirli bir süre alabilir.
Karşılaştırıldığında, 2.x sürümü modüler bir tasarım yaklaşımı benimsemiştir. Resmi ekip, mevcut kod havuzunu @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birçok küçük modüle ayırmıştır. Aynı zamanda, yeni sürüm sınıf tabanlı uygulamadan vazgeçmiş ve daha çok tekil fonksiyonlar kullanmıştır. Bu tasarım, JavaScript kodu derlenirken optimizasyon açısından oldukça yardımcıdır; kullanılmayan kodlar silinecek ve kullanıcı cihazına indirilmeyecektir. Resmi belgelerdeki istatistiklere göre, yeni sürümü kullanan DApp'ler temel olarak %30'luk bir boyut optimizasyonu elde edebilmektedir; eğer yalnızca çok az bir kısmı kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin belgelerinin kalitesi için daha yüksek gereksinimler getirdi; geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulabilmesi önemli bir sorun haline geldi. Görünüşe göre, en azından paket adları iyi bir anlamsal yapıya sahip, isimlerinden genel olarak ne işe yaradıklarını anlayabiliyoruz. Bu, geliştiricilerin geçiş zorluğunu bir ölçüde azaltabilir.
Elbette, henüz yeni yayımlandığı için birçok proje henüz geçiş yapmadı. Solana Cookbook'ta 2.x sürümüyle ilgili örnekler de nispeten az. Ayrıca, yeni sürümün yerleşik çalışma zamanı işlevlerini (örneğin, anahtar çiftleri oluşturma) kullanma eğiliminde olması nedeniyle, belgelerde bu kısımlara dair açıklamaların yetersiz olması, bazı yerlerin geliştiricileri kafa karıştırıcı bulmasına neden olabilir.
2.x sürümünün bir diğer önemli özelliği sıfır bağımlılıktır. Bu, birçok kullanıcı için önemli olmayabilir, ancak bu yılın Aralık ayı başında @solana/web3.js 1.95.5 ve 1.95.6 sürümlerinde meydana gelen tedarik zinciri saldırıları göz önüne alındığında, daha fazla dış girdi ve bağımlılık güvenlik olaylarının meydana gelme olasılığını önemli ölçüde artırabilir. 2.x sürümünün piyasaya sürülmesiyle birlikte, Web3.js geliştirme ekibi daha fazla yerel işlevselliği kullanmaya karar vererek dış bağımlılıkların ve Polyfills'in getirilmesini iptal etti. Gelecekte değişiklikler olabilir, ancak en azından şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklikler
bağlan
Daha önce belirtildiği gibi, 1.x sürümü Connection aracılığıyla birçok yöntem sunmaktadır. Ancak, ana işlevi, bir RPC istemci adresi yapılandırarak bir istek gönderici oluşturmak ve ardından bunu kullanarak çeşitli istekler göndermektir.
2.x'te, daha işlevsel bir yaklaşım benimsenmiştir:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
"sendAndConfirmTransaction" fonksiyonunu çağırdığımızda, otomatik olarak HTTPS isteği başlatılır ve WSS bağlantısı kurulur, işlem durumu abone olunur, işlem onaylandığında işlem hash'i döner.
anahtar çift
Açık anahtar ve özel anahtar ile ilgili kısımlar da önemli değişiklikler geçirdi. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey adlı iki sınıf artık mevcut değil, bunların yerini bazı işlevler aldı.
Örneğin, "await generateKeyPair()" kullanarak bir anahtar çifti oluşturulabilir, oysa daha önce "Keypair.generate()" ile doğrudan anahtar çifti oluşturuluyordu.
Yeni generateKeyPair'in bir Promise döndürdüğünü ve daha önce olduğu gibi doğrudan bir anahtar çifti döndürmediğini fark etmiş olabilirsiniz. Bunun nedeni, yeni uygulamanın mümkün olduğunca JavaScript'in Web Crypto API'sinden yararlanması ve yerel Ed25519 uygulamasını kullanmasıdır. Web Crypto API'sinin birçok yöntemi asenkroniktir. Ancak bu değişiklik kabul edilemez değil, 2024 yılının sonuna yaklaşırken, JavaScript geliştiricileri Promise'lere oldukça aşina hale geldi.
işlem gönder
1.x kullanıcıları muhtemelen "Transaction" ve "VersionedTransaction" iki sınıfına aşinadır. Solana'yı ilk öğrendiğinizde, bunlar arasındaki ilişki kafa karıştırıcı olabilir.
2.x sürümünde bu iki sınıf da artık mevcut değil.
Eski sürümde sağlanan System Program ile ilgili yöntemler artık mevcut değil, bu nedenle "SystemProgram" sınıfındaki statik yöntemlerin başka yerlerden getirilmesi gerekiyor.
Örneğin "transfer" komutu, "@solana-program/system" içindeki "getTransferSolInstruction" fonksiyonunu çağırmayı gerektirir.
Artık sınıf sağlanmadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan "pipe" formatını sunmaktadır. Aşağıda, pipe fonksiyonu aracılığıyla aslında 1.x sürümündeki transfer işlevselliğinin nasıl gerçekleştirileceğine dair bir örnek verilmiştir:
javascript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana/system-program";
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ from: senderPublicKey, alıcıPublicKey'e, miktar: lamports, })), setComputeUnitLimit(200_000), addSignature(senderSignature) );
const imza = await sendAndConfirmTransaction(rpc, transaction);
Görülebilir ki, işlem artık Connection üzerinden başlatılmıyor, bunun yerine tanımladığımız RPC Provider aracılığıyla özel bir fonksiyon oluşturuluyor ve ardından bu fonksiyon çağrılarak işlem başlatılıyor. 1.x versiyonuna göre, kod miktarı artmış durumda, ancak avantajı daha fazla özelleştirilebilirliğe sahip olması.
İşlemler HTTPS RPC üzerinden başlatılır ve ardından işlem sonuçlarını doğrulamak için WSS RPC'ye abone olunur. Yeni yöntemlerin WSS'ye çok bağımlı olduğu hissediliyor, gelecekte WSS'nin uygulamalarının giderek daha yaygın hale geleceğine inanıyorum, bu da gerçekten RPC sağlayıcılarının hizmet istikrarı için daha yüksek talepler getirdi.
React
İlginçtir ki, @solana/web3.js projesinde @solana/react adlı bir kütüphane de bulunmaktadır; bu kütüphane bazı React Hook'ları sunmakta ve signIn gibi işlevleri içermektedir.
Özet
@solana/web3.js 2.x sürümünün yayımlanması, Solana ekibinin sürekli gelişim ve iyileştirme taahhüdünü tam olarak yansıtmaktadır. Geliştiricilere, Solana ağıyla etkileşimde bulunmak için verimli, esnek ve özelleştirilebilir bir yol sunarak, bu platformun benimsenmesini ve gelişimini teşvik etmektedir.