Solana Web3.js 2.x sürümü: Daha güçlü özellikler, daha optimize performans
Solana Web3.js, zengin özelliklere sahip bir JavaScript kütüphanesi olarak, bu yılın Kasım ayında 2.x sürümünü resmi olarak tanıttı. Bu yeni sürüm, 1.x sürümüne kıyasla önemli değişiklikler içeriyor ve bu yazıda ana değişiklikler özetlenecektir.
Henüz 2.x sürümü yeni yayınlandı, kullanım oranı düşük, birçok yaygın kütüphane henüz geçiş yapmadı, ancak bu değişiklikleri anlamak gelecekteki geçiş çalışmaları için yardımcı olacaktır.
Sürüm Karşılaştırması
1.x sürümü kullanımı oldukça basit, sadece bir paket var: @solana/web3.js, tüm işlevler bunun içinde toplanmış. Sınıf tabanlı bir tasarıma dayanıyor ve birçok yaygın işlemi kapsıyor. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevleri neredeyse kapsayan onlarca yöntem sunuyor.
Ancak, bu tasarım bazı sorunlar da beraberinde getiriyor. Geliştiricilerin gerçekte kullandığı işlevlerin yalnızca çok küçük bir kısmının bulunmasına rağmen, tüm kod kütüphanesi kullanıcı cihazına indirilecektir. Kod miktarı büyük olduğu için belirli bir yüklenme süresi yaşanabilir.
Buna karşılık, 2.x sürümü mevcut kod tabanını @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birden fazla küçük modüle ayırdı. Aynı zamanda, yeni sürüm sınıf tabanlı uygulamayı terk ederek daha çok tekil fonksiyon kullanımına yöneldi. Bu tasarım, JavaScript kod yapımında optimizasyonu kolaylaştırıyor; kullanılmayan kodlar silinecek ve kullanıcı cihazlarına indirilmeyecek. Resmi belgelerdeki istatistikler, yeni sürümü kullanan DApp'lerin genellikle %30'luk bir boyut optimizasyonu elde ettiğini gösteriyor; eğer sadece az sayıda özellik kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin dokümantasyon yazımında yeni zorluklar ortaya çıkardı; geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulabilmesi önemli bir sorun haline geldi. Ancak şu anda, her bir paketin isimlendirmesi oldukça anlamlı görünüyor ve adlarından genel olarak ne amaçla kullanıldıklarını anlamak mümkün. Bu, geliştiricilerin geçiş zorluğunu bir ölçüde azaltıyor.
Yeni sürümün kısa süre önce yayımlanmasından dolayı, birçok proje henüz geçiş yapmamıştır. Solana Cookbook'ta 2.x sürümüne dair örnekler de azdır. Ayrıca, yeni sürüm, anahtar çiftleri oluşturmak gibi çalışma zamanı yerleşik işlevlerini kullanma eğilimindedir, ancak belgelerde bu kısımlara dair tanımlar yetersizdir, bu durum geliştiricileri kafalarını karıştırabilir.
2.x versiyonunun bir diğer önemli özelliği sıfır bağımlılıktır. Bu, birçok kullanıcı için o kadar ö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ısına bakıldığında, daha fazla dış girdi ve bağımlılık güvenlik olaylarının meydana gelme olasılığını büyük ölçüde artırmaktadır. 2.x sürümünün piyasaya sürülmesiyle, Web3.js geliştirme ekibi daha fazla yerel işlev kullanmaya karar verdi ve dış bağımlılıkların ve Polyfill'lerin kullanılmasını kaldırdı. Gelecekte değişiklikler olabilse de, şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklikler
bağlantı
1.x sürümünde, Connection birçok yöntem sunar. Ancak ana 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 işlevsel bir yöntemle gerçekleştirildi:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
sendAndConfirmTransaction çağrıldığında, otomatik olarak HTTPS isteği başlatılır ve işlem durumunu abone olmak için WSS bağlantısı kurulur, işlem onaylandıktan sonra işlem hash'i döner.
anahtar çifti
Açık anahtar ve özel anahtar ile ilgili kısımda da önemli değişiklikler var. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey adlı iki sınıf artık yok, bazı fonksiyonlar ile değiştirildi.
Örneğin, artık await generateKeyPair() kullanarak anahtar çiftleri oluşturabilirsiniz, daha önce ise doğrudan Keypair.generate() ile oluşturuluyordu.
Dikkate değer bir nokta, yeni generateKeyPair'in bir Promise döndürmesidir, doğrudan bir anahtar çiftini döndürmemesidir. Bunun nedeni, yeni uygulamanın mümkün olduğunca JavaScript'in Web Crypto API'sini kullanması ve yerel Ed25519 uygulamasını kullanmasıdır. Web Crypto API'sinin birçok yöntemi asynchrondur. Ancak, bu değişiklik kabul edilemez değildir; 2024'ün sonuna yaklaşırken, JavaScript geliştiricileri artık Promise'lere oldukça aşinadır.
işlem gönder
1.x sürümündeki Transaction ve VersionedTransaction sınıfları 2.x sürümünde artık mevcut değildir.
Eski sürümde sunulan 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ğırmayı gerektiriyor.
Artık sınıf sağlamadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan pipe şeklini sunmaktadır. Aşağıda, pipe fonksiyonu kullanarak 1.x'in transfer işlevselliğini nasıl gerçekleştirebileceğinize dair bir örnek verilmiştir:
javascript
import { pipe } from "@solana/web3.js";
import { getTransferSolInstruction } from "@solana-program/system";
Görülebilir ki, işlemler artık Connection üzerinden başlatılmıyor, bunun yerine tanımladığımız RPC Sağlayıcısı 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 özelleştirilebilirlik daha güçlü hale gelmiştir.
İşlem HTTPS RPC üzerinden başlatılır ve ardından işlem sonucunu doğrulamak için WSS RPC'ye abone olunarak onaylanır. Yeni yöntemin WSS'ye çok bağımlı olduğu hissedilmektedir, gelecekte WSS 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 getiriyor.
React
Bahsetmeye değer ki, @solana/web3.js projesinde @solana/react adında bir kütüphane de bulunmaktadır ve bu kütüphane, signIn gibi bazı React Hook'ları içermektedir.
Özet
@solana/web3.js 2.x sürümünün yayınlanması, Solana ekibinin sürekli gelişim ve iyileştirme taahhüdünü tam olarak yansıtmaktadır. Bu, geliştiricilere Solana ağıyla etkileşimde bulunmak 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.
21 Likes
Reward
21
10
Share
Comment
0/400
failed_dev_successful_ape
· 07-20 13:15
2.0 gerçekten harika, sonunda bekledim.
View OriginalReply0
GateUser-44a00d6c
· 07-20 05:07
Kaçtım, kaçtım. Nihayet güncellemeyi bekledim.
View OriginalReply0
digital_archaeologist
· 07-20 03:59
Yine geldim, fena değil!
View OriginalReply0
nft_widow
· 07-19 21:58
Bu sefer de beni psikolojik olarak etkiliyorlar, değil mi?
View OriginalReply0
BrokenDAO
· 07-17 17:49
Yükseltmek çok havalı, ama ilk kim çukura atlayacak?
View OriginalReply0
MetaverseVagabond
· 07-17 17:47
Artık rahatça kod yazabiliyorum.
View OriginalReply0
NonFungibleDegen
· 07-17 17:42
solana hakkında gerçekten bullishim... v2 bunu yollayacak ser
View OriginalReply0
GasFeeNightmare
· 07-17 17:39
Gece geç saatte hala solun gas hareketlerini izliyorum... Ne zaman 1 gwei'ye düşecek?
Solana Web3.js 2.x sürümü: Modüler tasarım performansı ve güvenliği artırıyor
Solana Web3.js 2.x sürümü: Daha güçlü özellikler, daha optimize performans
Solana Web3.js, zengin özelliklere sahip bir JavaScript kütüphanesi olarak, bu yılın Kasım ayında 2.x sürümünü resmi olarak tanıttı. Bu yeni sürüm, 1.x sürümüne kıyasla önemli değişiklikler içeriyor ve bu yazıda ana değişiklikler özetlenecektir.
Henüz 2.x sürümü yeni yayınlandı, kullanım oranı düşük, birçok yaygın kütüphane henüz geçiş yapmadı, ancak bu değişiklikleri anlamak gelecekteki geçiş çalışmaları için yardımcı olacaktır.
Sürüm Karşılaştırması
1.x sürümü kullanımı oldukça basit, sadece bir paket var: @solana/web3.js, tüm işlevler bunun içinde toplanmış. Sınıf tabanlı bir tasarıma dayanıyor ve birçok yaygın işlemi kapsıyor. Örneğin, Connection sınıfı, geliştiricilerin ihtiyaç duyduğu tüm işlevleri neredeyse kapsayan onlarca yöntem sunuyor.
Ancak, bu tasarım bazı sorunlar da beraberinde getiriyor. Geliştiricilerin gerçekte kullandığı işlevlerin yalnızca çok küçük bir kısmının bulunmasına rağmen, tüm kod kütüphanesi kullanıcı cihazına indirilecektir. Kod miktarı büyük olduğu için belirli bir yüklenme süresi yaşanabilir.
Buna karşılık, 2.x sürümü mevcut kod tabanını @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions gibi birden fazla küçük modüle ayırdı. Aynı zamanda, yeni sürüm sınıf tabanlı uygulamayı terk ederek daha çok tekil fonksiyon kullanımına yöneldi. Bu tasarım, JavaScript kod yapımında optimizasyonu kolaylaştırıyor; kullanılmayan kodlar silinecek ve kullanıcı cihazlarına indirilmeyecek. Resmi belgelerdeki istatistikler, yeni sürümü kullanan DApp'lerin genellikle %30'luk bir boyut optimizasyonu elde ettiğini gösteriyor; eğer sadece az sayıda özellik kullanılıyorsa, optimizasyon oranı daha yüksek olabilir.
Bu değişim, Solana ekibinin dokümantasyon yazımında yeni zorluklar ortaya çıkardı; geliştiricilerin ihtiyaç duydukları işlevleri hızlı bir şekilde bulabilmesi önemli bir sorun haline geldi. Ancak şu anda, her bir paketin isimlendirmesi oldukça anlamlı görünüyor ve adlarından genel olarak ne amaçla kullanıldıklarını anlamak mümkün. Bu, geliştiricilerin geçiş zorluğunu bir ölçüde azaltıyor.
Yeni sürümün kısa süre önce yayımlanmasından dolayı, birçok proje henüz geçiş yapmamıştır. Solana Cookbook'ta 2.x sürümüne dair örnekler de azdır. Ayrıca, yeni sürüm, anahtar çiftleri oluşturmak gibi çalışma zamanı yerleşik işlevlerini kullanma eğilimindedir, ancak belgelerde bu kısımlara dair tanımlar yetersizdir, bu durum geliştiricileri kafalarını karıştırabilir.
2.x versiyonunun bir diğer önemli özelliği sıfır bağımlılıktır. Bu, birçok kullanıcı için o kadar ö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ısına bakıldığında, daha fazla dış girdi ve bağımlılık güvenlik olaylarının meydana gelme olasılığını büyük ölçüde artırmaktadır. 2.x sürümünün piyasaya sürülmesiyle, Web3.js geliştirme ekibi daha fazla yerel işlev kullanmaya karar verdi ve dış bağımlılıkların ve Polyfill'lerin kullanılmasını kaldırdı. Gelecekte değişiklikler olabilse de, şu anda 2.x sürümü tüm dış bağımlılıkları ortadan kaldırmıştır.
Önemli Değişiklikler
bağlantı
1.x sürümünde, Connection birçok yöntem sunar. Ancak ana 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 işlevsel bir yöntemle gerçekleştirildi:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
sendAndConfirmTransaction çağrıldığında, otomatik olarak HTTPS isteği başlatılır ve işlem durumunu abone olmak için WSS bağlantısı kurulur, işlem onaylandıktan sonra işlem hash'i döner.
anahtar çifti
Açık anahtar ve özel anahtar ile ilgili kısımda da önemli değişiklikler var. 1.x sürümünde yaygın olarak kullanılan Keypair ve PublicKey adlı iki sınıf artık yok, bazı fonksiyonlar ile değiştirildi.
Örneğin, artık await generateKeyPair() kullanarak anahtar çiftleri oluşturabilirsiniz, daha önce ise doğrudan Keypair.generate() ile oluşturuluyordu.
Dikkate değer bir nokta, yeni generateKeyPair'in bir Promise döndürmesidir, doğrudan bir anahtar çiftini döndürmemesidir. Bunun nedeni, yeni uygulamanın mümkün olduğunca JavaScript'in Web Crypto API'sini kullanması ve yerel Ed25519 uygulamasını kullanmasıdır. Web Crypto API'sinin birçok yöntemi asynchrondur. Ancak, bu değişiklik kabul edilemez değildir; 2024'ün sonuna yaklaşırken, JavaScript geliştiricileri artık Promise'lere oldukça aşinadır.
işlem gönder
1.x sürümündeki Transaction ve VersionedTransaction sınıfları 2.x sürümünde artık mevcut değildir.
Eski sürümde sunulan 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ğırmayı gerektiriyor.
Artık sınıf sağlamadığı için, Web3.js fonksiyonel programlamada yaygın olarak kullanılan pipe şeklini sunmaktadır. Aşağıda, pipe fonksiyonu kullanarak 1.x'in transfer işlevselliğini nasıl gerçekleştirebileceğinize dair bir örnek verilmiştir:
javascript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana-program/system";
const transaction = pipe( createTransaction({ version: 0 }), addInstruction( getTransferSolInstruction({ fromPublicKey, toPublicKey, lamports, }) ) );
Görülebilir ki, işlemler artık Connection üzerinden başlatılmıyor, bunun yerine tanımladığımız RPC Sağlayıcısı 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 özelleştirilebilirlik daha güçlü hale gelmiştir.
İşlem HTTPS RPC üzerinden başlatılır ve ardından işlem sonucunu doğrulamak için WSS RPC'ye abone olunarak onaylanır. Yeni yöntemin WSS'ye çok bağımlı olduğu hissedilmektedir, gelecekte WSS 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 getiriyor.
React
Bahsetmeye değer ki, @solana/web3.js projesinde @solana/react adında bir kütüphane de bulunmaktadır ve bu kütüphane, signIn gibi bazı React Hook'ları içermektedir.
Özet
@solana/web3.js 2.x sürümünün yayınlanması, Solana ekibinin sürekli gelişim ve iyileştirme taahhüdünü tam olarak yansıtmaktadır. Bu, geliştiricilere Solana ağıyla etkileşimde bulunmak için verimli, esnek ve özelleştirilebilir bir yol sunarak platformun benimsenmesi ve gelişimini teşvik etmeye yardımcı olmaktadır.