Solana Web3.js 2.x sürümü: Fonksiyonel programlamada yeni bir bölüm
Solana Web3.js, işlevselliği zengin bir JavaScript kütüphanesi olarak, bu yılın Kasım ayında 2.x versiyonunu resmi olarak piyasaya sürdü. 1.x sürümüne kıyasla, yeni versiyon önemli değişiklikler getirdi, bu yazıda ana güncellemeleri özetleyeceğiz.
2.x sürümünün yeni yayınlanmasına ve kullanım oranının henüz düşük olmasına rağmen, birçok yaygın kütüphanenin de henüz geçiş yapmamış olmasına rağmen, bu değişiklikleri anlamak gelecekteki proje yükseltmeleri için büyük fayda sağlayacaktır.
Sürüm Karşılaştırması
1.x sürümünün kullanımı oldukça basittir. Tek bir ana paket içerir: @solana/web3.js, tüm işlevleri entegre eder. Bu sürüm, sınıf tabanlı bir tasarıma dayanır ve çok sayıda yaygın işlemi kapsar. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevleri neredeyse kapsayan onlarca yöntem sunar.
Ancak, bu tasarım bazı sorunlar da getiriyor. Geliştiricilerin gerçek anlamda kullandığı işlevlerin belki de yalnızca küçük bir kısmı olsa da, tüm kütüphanenin kodu kullanıcı cihazına indirilecektir, bu da yükleme sürelerinin uzamasına neden olabilir.
2.x sürümü farklı bir yaklaşım benimsedi. Resmi ekip, mevcut kod deposunu @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birkaç küçük modüle böldü. Yeni sürüm, sınıf tabanlı uygulamayı terk ederek tek bir fonksiyon kullanma yöntemine geçti, bu da JavaScript kodunun derlenmesi sırasında optimizasyon için faydalıdır. Kullanılmayan kodlar silinecek ve gerçekte kullanıcı cihazına indirilmeyecek. Resmi belgelerdeki verilere göre, yeni sürümü kullanan DApp'ler genellikle %30'luk bir boyut optimizasyonu elde edebilir; eğer yalnızca az sayıda özellik kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin belgelerinin kalitesi için daha yüksek gereksinimler ortaya koydu. Geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulmalarını sağlamak kritik bir sorun haline geldi. Görünüşe göre, paket adlarının anlamı oldukça iyi; adından işlevlerini kabaca anlayabiliyoruz, bu da geliştiricilerin geçiş zorluğunu bir nebze azaltıyor.
Yeni yayımlandığı için birçok proje henüz taşınmamıştır. Solana Cookbook'ta 2.x sürümüyle ilgili örnekler de azdır. Ayrıca, yeni sürüm, anahtar çiftleri oluşturma gibi çalışma zamanı yerleşik işlevlerini kullanma eğilimindedir, ancak belgelerde bu kısımlara dair yeterli açıklama bulunmamakta, bu da bazı yerlerde geliştiricilerin kafasının karışması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 çok önemli olmayabilir, ancak bu yılın Aralık ayının başlarında @solana/web3.js 1.95.5 ve 1.95.6 sürümlerinde meydana gelen tedarik zinciri saldırılarını göz önünde bulundurursak, dış girdileri ve bağımlılıkları azaltmak, güvenlik olaylarının meydana gelme olasılığını önemli ölçüde düşürebilir. 2.x sürümünün piyasaya sürülmesiyle Web3.js geliştirme ekibi, daha fazla yerel işlevsellik kullanmaya karar verdi ve dış bağımlılıkların ve Polyfills'in kullanımını kaldırdı. Gelecekte değişiklikler olabilecekken, şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklik Noktaları
bağlantı
1.x sürümünde, Connection sınıfı birçok yöntem sunmaktadır. Ancak temel işlevi, RPC istek adresini yapılandırarak bir istek gönderici oluşturmak ve ardından çeşitli istekler göndermektir.
2.x sürümü daha fonksiyonel bir yaklaşım benimsemiştir:
javascript
import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
// rpc kullanarak işlem gönder
const imza = await rpc.sendAndConfirmTransaction(transaction);
Bu yeni sürümde, sendAndConfirmTransaction çağrıldığında, işlem gönderildiğinde otomatik olarak HTTPS isteği başlatır ve işlem durumunu abone olmak için bir WSS bağlantısı kurar, işlem onaylandıktan sonra işlem hash'ini döndürür.
anahtar çift
Açık anahtar ve özel anahtar ile ilgili kısımda da önemli değişiklikler oldu. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey sınıfları artık mevcut değil, bunların yerini bazı fonksiyonlar aldı.
Örneğin, artık await generateKeyPair() kullanarak anahtar çiftleri oluşturabilirsiniz, daha önceki Keypair.generate() yerine.
Dikkate değer olan, yeni generateKeyPair'ın doğrudan bir anahtar çifti döndürmek yerine bir Promise döndürmesidir. 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 sona ermek üzere olduğu bu günlerde, JavaScript geliştiricileri artık Promise ile oldukça aşinadır.
işlem gönder
1.x sürümündeki kullanıcılar, Transaction ve VersionedTransaction adlı bu iki sınıfa oldukça aşina olmalıdır, aralarındaki ilişki birçok geliştirici için kafa karıştırıcı olmuştur.
2.x sürümünde, bu iki sınıf artık mevcut değildir.
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 artık @solana-program/system içindeki getTransferSolInstruction fonksiyonunu çağırmak zorundadır.
Artık sınıf sağlanmadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan pipe biçimini sunmaktadır. Aşağıda, pipe fonksiyonu kullanarak orijinal 1.x versiyonunun transfer işlevselliğini gerçekleştiren bir örnek verilmiştir:
javascript
import { pipe } from '@solana/functional';
import { getTransferSolInstruction } from '@solana/system-program';
import { createSolanaRpc } from '@solana/web3.js';
Görüldüğü gibi, işlemler artık Connection aracılığıyla başlatılmıyor, bunun yerine tanımladığımız RPC Provider aracılığıyla belirli bir fonksiyon oluşturuluyor ve ardından bu fonksiyon çağrılarak işlem başlatılıyor. 1.x versiyonuna kıyasla kod miktarı artmış olsa da, avantajı daha fazla özelleştirilebilirlik sunmasıdır.
İşlem, HTTPS RPC üzerinden başlatılır ve ardından işlem sonucunu doğrulamak için WSS RPC üzerinden abone olunarak takip edilir. Yeni yöntemin WSS'e oldukça bağımlı olduğu hissediliyor, gelecekte WSS uygulamalarının giderek daha yaygın hale geleceğine inanılıyor, bu da RPC sağlayıcılarının hizmet istikrarı için daha yüksek gereksinimler ortaya koyuyor.
React desteği
İlginç bir şekilde, @solana/web3.js projesinde @solana/react adında bir kütüphane de bulunuyor ve bu kütüphane, signIn gibi bazı React Hook'ları sağlıyor.
Ö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. Bu, geliştiricilere Solana ağı ile etkileşimde bulunmaları için verimli, esnek ve özelleştirilebilir bir yol sunarak, platformun benimsenmesi ve gelişimini teşvik etmeye yardımcı olmaktadır.
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.
18 Likes
Reward
18
8
Repost
Share
Comment
0/400
CommunityJanitor
· 08-10 07:13
Bu neden bu kadar yavaş iterasyon yapıyor?
View OriginalReply0
ProposalManiac
· 08-09 22:16
Gelişme var, ama hâlâ yeterince radikal değil.
View OriginalReply0
GhostChainLoyalist
· 08-09 07:05
2.0 hala yavaş. Ne zaman sürekli güncellemeleri takip etmeyi öğrenilecek?
View OriginalReply0
PanicSeller69
· 08-07 19:20
Güncellemenin ne faydası var ki, yine de kütüphane değiştirmek zorundasınız.
View OriginalReply0
MemeCoinSavant
· 08-07 07:47
af tabanlı, solana web3 evriminde istatistiksel önemi kanıtlıyor bence
Solana Web3.js 2.x'in yayımlanması: Fonksiyonel programlama ve performans optimizasyonunda önemli bir yükseltme
Solana Web3.js 2.x sürümü: Fonksiyonel programlamada yeni bir bölüm
Solana Web3.js, işlevselliği zengin bir JavaScript kütüphanesi olarak, bu yılın Kasım ayında 2.x versiyonunu resmi olarak piyasaya sürdü. 1.x sürümüne kıyasla, yeni versiyon önemli değişiklikler getirdi, bu yazıda ana güncellemeleri özetleyeceğiz.
2.x sürümünün yeni yayınlanmasına ve kullanım oranının henüz düşük olmasına rağmen, birçok yaygın kütüphanenin de henüz geçiş yapmamış olmasına rağmen, bu değişiklikleri anlamak gelecekteki proje yükseltmeleri için büyük fayda sağlayacaktır.
Sürüm Karşılaştırması
1.x sürümünün kullanımı oldukça basittir. Tek bir ana paket içerir: @solana/web3.js, tüm işlevleri entegre eder. Bu sürüm, sınıf tabanlı bir tasarıma dayanır ve çok sayıda yaygın işlemi kapsar. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevleri neredeyse kapsayan onlarca yöntem sunar.
Ancak, bu tasarım bazı sorunlar da getiriyor. Geliştiricilerin gerçek anlamda kullandığı işlevlerin belki de yalnızca küçük bir kısmı olsa da, tüm kütüphanenin kodu kullanıcı cihazına indirilecektir, bu da yükleme sürelerinin uzamasına neden olabilir.
2.x sürümü farklı bir yaklaşım benimsedi. Resmi ekip, mevcut kod deposunu @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birkaç küçük modüle böldü. Yeni sürüm, sınıf tabanlı uygulamayı terk ederek tek bir fonksiyon kullanma yöntemine geçti, bu da JavaScript kodunun derlenmesi sırasında optimizasyon için faydalıdır. Kullanılmayan kodlar silinecek ve gerçekte kullanıcı cihazına indirilmeyecek. Resmi belgelerdeki verilere göre, yeni sürümü kullanan DApp'ler genellikle %30'luk bir boyut optimizasyonu elde edebilir; eğer yalnızca az sayıda özellik kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin belgelerinin kalitesi için daha yüksek gereksinimler ortaya koydu. Geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulmalarını sağlamak kritik bir sorun haline geldi. Görünüşe göre, paket adlarının anlamı oldukça iyi; adından işlevlerini kabaca anlayabiliyoruz, bu da geliştiricilerin geçiş zorluğunu bir nebze azaltıyor.
Yeni yayımlandığı için birçok proje henüz taşınmamıştır. Solana Cookbook'ta 2.x sürümüyle ilgili örnekler de azdır. Ayrıca, yeni sürüm, anahtar çiftleri oluşturma gibi çalışma zamanı yerleşik işlevlerini kullanma eğilimindedir, ancak belgelerde bu kısımlara dair yeterli açıklama bulunmamakta, bu da bazı yerlerde geliştiricilerin kafasının karışması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 çok önemli olmayabilir, ancak bu yılın Aralık ayının başlarında @solana/web3.js 1.95.5 ve 1.95.6 sürümlerinde meydana gelen tedarik zinciri saldırılarını göz önünde bulundurursak, dış girdileri ve bağımlılıkları azaltmak, güvenlik olaylarının meydana gelme olasılığını önemli ölçüde düşürebilir. 2.x sürümünün piyasaya sürülmesiyle Web3.js geliştirme ekibi, daha fazla yerel işlevsellik kullanmaya karar verdi ve dış bağımlılıkların ve Polyfills'in kullanımını kaldırdı. Gelecekte değişiklikler olabilecekken, şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklik Noktaları
bağlantı
1.x sürümünde, Connection sınıfı birçok yöntem sunmaktadır. Ancak temel işlevi, RPC istek adresini yapılandırarak bir istek gönderici oluşturmak ve ardından çeşitli istekler göndermektir.
2.x sürümü daha fonksiyonel bir yaklaşım benimsemiştir:
javascript import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
// rpc kullanarak işlem gönder const imza = await rpc.sendAndConfirmTransaction(transaction);
Bu yeni sürümde, sendAndConfirmTransaction çağrıldığında, işlem gönderildiğinde otomatik olarak HTTPS isteği başlatır ve işlem durumunu abone olmak için bir WSS bağlantısı kurar, işlem onaylandıktan sonra işlem hash'ini döndürür.
anahtar çift
Açık anahtar ve özel anahtar ile ilgili kısımda da önemli değişiklikler oldu. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey sınıfları artık mevcut değil, bunların yerini bazı fonksiyonlar aldı.
Örneğin, artık await generateKeyPair() kullanarak anahtar çiftleri oluşturabilirsiniz, daha önceki Keypair.generate() yerine.
Dikkate değer olan, yeni generateKeyPair'ın doğrudan bir anahtar çifti döndürmek yerine bir Promise döndürmesidir. 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 sona ermek üzere olduğu bu günlerde, JavaScript geliştiricileri artık Promise ile oldukça aşinadır.
işlem gönder
1.x sürümündeki kullanıcılar, Transaction ve VersionedTransaction adlı bu iki sınıfa oldukça aşina olmalıdır, aralarındaki ilişki birçok geliştirici için kafa karıştırıcı olmuştur.
2.x sürümünde, bu iki sınıf artık mevcut değildir.
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 artık @solana-program/system içindeki getTransferSolInstruction fonksiyonunu çağırmak zorundadır.
Artık sınıf sağlanmadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan pipe biçimini sunmaktadır. Aşağıda, pipe fonksiyonu kullanarak orijinal 1.x versiyonunun transfer işlevselliğini gerçekleştiren bir örnek verilmiştir:
javascript import { pipe } from '@solana/functional'; import { getTransferSolInstruction } from '@solana/system-program'; import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ from: senderPublicKey, alıcıPublicKey'e, miktar: transferAmount, })) );
const signature = await rpc.sendAndConfirmTransaction(transaction);
Görüldüğü gibi, işlemler artık Connection aracılığıyla başlatılmıyor, bunun yerine tanımladığımız RPC Provider aracılığıyla belirli bir fonksiyon oluşturuluyor ve ardından bu fonksiyon çağrılarak işlem başlatılıyor. 1.x versiyonuna kıyasla kod miktarı artmış olsa da, avantajı daha fazla özelleştirilebilirlik sunmasıdır.
İşlem, HTTPS RPC üzerinden başlatılır ve ardından işlem sonucunu doğrulamak için WSS RPC üzerinden abone olunarak takip edilir. Yeni yöntemin WSS'e oldukça bağımlı olduğu hissediliyor, gelecekte WSS uygulamalarının giderek daha yaygın hale geleceğine inanılıyor, bu da RPC sağlayıcılarının hizmet istikrarı için daha yüksek gereksinimler ortaya koyuyor.
React desteği
İlginç bir şekilde, @solana/web3.js projesinde @solana/react adında bir kütüphane de bulunuyor ve bu kütüphane, signIn gibi bazı React Hook'ları sağlıyor.
Ö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. Bu, geliştiricilere Solana ağı ile etkileşimde bulunmaları için verimli, esnek ve özelleştirilebilir bir yol sunarak, platformun benimsenmesi ve gelişimini teşvik etmeye yardımcı olmaktadır.