Chiliz Chain'den Solana'ya köprüleme

Chiliz Chain’den Solana’ya mevcut bir token’ı köprülemek için, iki ayrı akıllı sözleşme yazıp dağıtmanız gerekir: token’ın zaten bulunduğu zincirde (Chiliz Chain) bir OFT Adapter ve hedef zincirde (Solana) bir Native OFT.

LayerZero’nun OFT sözleşmeleri için kendi QuickStart’ını sağladığını unutmayın:

Ön Koşullar

Chiliz Chain (EVM) ile Solana (Non-EVM) arasında köprü kurmak çift yığın geliştirme gerektirir. Her iki ekosistem için de ortamların ve cüzdanların kurulmuş olması gerekir.

Bu nedenle aşağıdaki ortamlara ihtiyacınız olacak:

Bu kılavuz aşağıdakileri gerektirir:

1. Adım: Sözleşme Geliştirme

“Shared Decimals” Zorluğu

Solana token matematiğini Ethereum Virtual Machine’den (EVM) farklı şekilde ele aldığı için, ondalıkları doğru biçimde yönetmemiz gerekir:

  • Chiliz Chain (EVM): Standart ERC-20 token’ları genellikle 18 ondalık hassasiyete sahiptir.

  • Solana: Yerel SPL Token’ları genellikle 9 ondalık hassasiyete sahiptir.

Eğer birimi Chiliz’den Solana’ya gönderirseniz, Solana sözleşmesi miktarı yanlış yorumlar ve bu da hedef zincirde token’ın aşırı şişmesine yol açar.

Matematiği normalleştirmek için LayerZero bir sharedDecimals yapılandırması kullanır. Varsayılan olarak, LayerZero V2 OFT standardı sharedDecimals değerini 6 olarak ayarlar.

  • Bir kullanıcı Chiliz’den 1.00 token köprülediğinde, Adapter en düşük 12 ondalığı atar (bunları "dust" olarak değerlendirir) ve sayıyı 6 ondalığa düşürür.

  • Mesaj köprü üzerinden gönderilir.

  • Solana programı 6 ondalıklı sayıyı alır ve onu yukarı basmadan önce yerel 9 ondalığına ölçekler.

Buradan daha fazlasını öğrenin.

Hazırlanması OFTAdapter Chiliz Chain üzerinde

Şu OFTAdapter sözleşme, mevcut token’ınız için bir kilit kutusu gibi davranır. Kullanıcılar token’larını Chiliz Chain’den dışarı köprülediğinde, bu sözleşme orijinal ERC20 token’ları kilitler.

Çünkü LayerZero’nun OFTAdapter ayarlar sharedDecimals varsayılan olarak 6’ya, standart uygulamayı kullanabilirsiniz. Bunu değiştirmek isterseniz (örneğin 8’e), sharedDecimals() fonksiyonunu yürütmesini söyler.

Şu adla yeni bir dosya oluşturun: ChilizTokenAdapter.sol sözleşmenizi contracts klasörüne koyun:

Gördüğünüz gibi bu sözleşme LayerZero OFT Adapter sözleşmesinive ayrıca standart bir Ownable.sol sözleşmesini genişletiyor; böylece yönetim anahtarları veriliyor. Her ikisine de ihtiyacınız var; böylece siz ve yalnızca siz, zincirleri güvenli bir şekilde birbirine bağlayabilirsiniz.

Hazırlama ve Dağıtma OFT Solana üzerinde

Chiliz Chain’den farklı olarak, Solana Ethereum Virtual Machine’i (EVM) veya Solidity dilini kullanmaz. Solana akıllı sözleşmeleri ("Programs" olarak adlandırılır) şu dilde yazılır: Rust.

Token’ınızı köprülemek için Solana üzerinde bir OFT programı dağıtmanız gerekir. Bu program, Chiliz’de dağıtılmış OFTAdapter’ınızdan doğrulanmış bir mesaj aldığında, ilgili SPL token’ı kullanıcının Solana cüzdanına basacaktır.

LayerZero bir kullanıma hazır Anchor örneği sunar; böylece köprü mantığını Rust ile sıfırdan yazmanız gerekmez.

1. LayerZero OFT Solana örneğini klonlayın:

2. Rust programını derleyin

Bu ayrıca size benzersiz Solana Program ID’nizi de oluşturur (EVM’deki sözleşme adresine eşdeğer):

Derleme tamamlandıktan sonra, Anchor yeni bir keypair oluşturacaktır: target/deploy/oft_solana-keypair.json. Aşağıdaki komutu çalıştırarak yeni Program ID’nizi alabilirsiniz:

3. Solana Mainnet’e dağıtın

Solana CLI’nizin Mainnet için yapılandırıldığından ve yerel cüzdanınızda dağıtım ve depolama kirası için yeterli $SOL bulunduğundan emin olun. Şunu güncellemeyi unutmayın: Anchor.toml dosyası ve lib.rs dağıtmadan önce declare_id! makrosunu bu yeni Program ID ile.

4. OFT ve SPL Mint’i başlatın

Solana’da bir token’ın mantığı ve defteri ayrıdır. Yeni bir Mint Account (SPL Token) başlatmalı ve yeni dağıttığınız OFT Program’ı Mint Authority olarak atamalısınız. Bu, yalnızca LayerZero köprüsünün Solana üzerinde yeni token basabilmesini sağlar.

LayerZero SDK, bu başlatmayı doğrudan komut satırından yönetmek için Hardhat/TypeScript görevleri sağlar. Projenizde oft-solana LayerZero Endpoint’inizi Solana için yapılandırın (30168) ve başlatma betiğini çalıştırın:

Kritik Parametreler:

  • --mint-decimals 9: Solana’daki standart SPL token hassasiyetini belirler.

  • --shared-decimals 6: Chiliz Chain’inizde yapılandırdığınız paylaşılan ondalıklarla (veya varsayılanla) eşleşmelidir OFTAdapter. Bu, 1 Chiliz token = 1 Solana token olmasını garanti eden şeydir.

Bu başlatma işlemi Solana blok zincirinde onaylandıktan sonra, yerel OFT programınız tamamen kurulmuş olur ve Chiliz OFTAdapter’a bağlanmaya hazırdır!

olarak vereceksiniz

Chiliz Adapter’ınız dağıtılmış ve Solana OFT programınız başlatılmış haldeyken, şimdi bunların bağlantısını yapılandırmanız gerekir. EVM ve non-EVM ağları arasındaki farkın en net görüldüğü yer burasıdır.

Adres Biçimlendirme:

  • Chiliz Chain (EVM): Standart 20 baytlık onaltılık adresler kullanır (örneğin, 0x123...).

  • Solana: Base58 ile kodlanmış adresler kullanır (örneğin, YourProgramId111111111111111111111111111111).

LayerZero’nun zincirler arası mesajlaşması tüm eş adreslerinin şu biçimde olmasını gerektirir: Buradaki ana zorluk adres biçimlendirmesidir. LayerZero’nun zincirler arası mesajlaşması, tüm eş adreslerin. Neyse ki LayerZero V2 Hardhat araçları, konfigürasyonunuzda uç noktaları doğru tanımladığınız sürece Base58’den Bytes32’ye dönüşümü sizin için otomatik olarak yapar.

Şu olarak biçimlendirilmesini gerektirir. LayerZero V2 Hardhat toolbox bunu, Base58 Solana Adapter Program ID’nizi çözümleyip onu standart EVM formatına doldurarak otomatik olarak yönetir. Simple Config Generator

yapılandırma kablolamasını oluşturmak için önerilen yoldur; çünkü çift yönlü kablolamayı otomatikleştirir ve önerilen güvenlik yapılandırmalarını altyapıda uygular. layerzero.config.ts dosyanızı Hardhat projenizin kök dizininde oluşturun veya güncelleyin:

LayerZero kablolama görevi bunu okuyacak, Base58 dizesini çözecek, 32 bayta dolduracak ve bunu güvenli bir şekilde Chiliz OFTAdapter’ın setPeer fonksiyonunu yürütmesini söyler.

3. Adım: Dağıtım İş Akışı

Sözleşmeleriniz yazıldıktan ve layerzero.config.ts hazırlandıktan sonra, Chiliz OFTAdapter’ı dağıtma zamanı gelmiştir. 1. Adımda Anchor kullanarak Solana yerel OFT programını zaten oluşturup dağıttığınız için, bu adım Hardhat kullanarak köprünün EVM tarafını dağıtmaya odaklanır.

Chiliz OFTAdapter sözleşmesinin dağıtılması

Hardhat projenizde, deploy/ dizininizde 01_deploy_chiliz_solana_adapter.ts. Bu betik, mevcut token adresinizi ve Chiliz Endpoint V2 adresini (EID) kurucuya iletir.

Chiliz OFTAdapter’ın dağıtılması

Devam etmeden önce şunlardan emin olun:

  • ortaya çıkan Base58 Program ID’yi kendi dosyanıza kopyaladınız layerzero.config.ts dosyanız.

  • sizin hardhat.config.ts RPC URL’si ve özel anahtar Chiliz Chain Mainnet için doğru şekilde yapılandırılmıştır.

EVM Adapter’ı dağıtmak için terminalinizde aşağıdaki komutu çalıştırın:

Dağıtım tamamlandığında, Hardhat Chiliz sözleşme adresini şu klasöre kaydedecektir: deployments/ klasörü.

Bu noktada, hem Chiliz Chain (EVM) hem de Solana (SVM) üzerinde çalışan sözleşmeleriniz var, ancak henüz birbirlerine güvenmiyorlar. Onları tanıştırma zamanı!

4. Adım: Wiring ve Peering

OFTAdapter sözleşmenizin ve OFT programınızın iletişim kurmasına izin vermek için, onları güvenilir eşler olarak birbirine "wire" etmeniz gerekir.

Tamamen farklı iki Sanal Makine (EVM ve SVM) arasında köprü kurduğumuz için, yapılandırma özel dikkat gerektirir.

EVM gas ve Solana compute units

Bir kullanıcı Chiliz Chain’den başka bir EVM zincirine (Base gibi) token köprülediğinde, LayerZero Executor çağrı yapmak için EVM gas’a ihtiyaç duyar lzReceive.

Ancak Chiliz Chain’den Solana’ya köprüleme yapıldığında, hedef zincir EVM gas kullanmaz. Compute Units ve Lamports ($SOL’un kesirleri) kullanır. Ayrıca, bir kullanıcı token’ınız henüz bulunmayan bir Solana cüzdanına token köprülerse, Executor’ın onlar için Associated Token Account (ATA) oluşturmak üzere Solana’nın "rent exemption" ücretini ödemesi gerekir. Bu, hedefte gerçek $SOL değeri harcanmasını gerektirir.

Executor’ın Solana üzerinde token basmak ve ATA oluşturmak için yeterli Compute Units ve Lamports’a sahip olmasını garanti etmek için, bunları kendi layerzero.config.ts dosyayı önce kablolama

işlemini terminalinizde çalıştırın:

Bu, gerekli 6 yapılandırma işlemini hazırlayacaktır:

  1. setSendLibrary: Giden paketler için MessageLib’i atar.

  2. setReceiveLibrary: Gelen paketler için MessageLib’i atar.

  3. setConfig: DVN’leri ve Executor’ı yapılandırır.

  4. setConfig : Gelen doğrulama için DVN’leri yapılandırır.

  5. setEnforcedOptions: Tutarlı yürütme parametreleri sağlar (kullanıcının Solana Compute Units ve Lamport kirasını karşılamak için peşin olarak yeterince ödeme yapmasını sağlamak açısından kritik).

  6. setPeer: Solana EID’yi hedef Base58 Program ID’nize bağlar.

LayerZero V2 araç seti ağır işi otomatikleştirir: Base58 Solana adresini çözecek, gerekli Buradaki ana zorluk adres biçimlendirmesidir. LayerZero’nun zincirler arası mesajlaşması, tüm eş adreslerin EVM biçimine dolduracak ve setPeer ve setEnforcedOptions işlemlerini her iki zincire gönderecektir.

Kablolama işlemleri onaylandıktan sonra, EVM’den Solana’ya köprünüz çalışır durumdadır ve güvenli şekilde yetkilendirilmiştir.

Token’ınız resmen EVM/SVM ayrımını geçmeye hazır!

5. Adım: İşletim ve Test

Chiliz Adapter’ınız dağıtılmış, Solana Native OFT’niz başlatılmış ve ikisi düzgün şekilde birbirine bağlanmış durumda; token’ınız artık resmen EVM/SVM ayrımını geçmeye hazır. Son adım, Chiliz Chain’den Solana’ya bir test transferi gerçekleştirmek ve bunu izlemektir.

1) Zincirler Arası Mesajı Solana’ya Gönderme

LayerZero V2 araç seti, OFT transferlerini doğrudan komut satırından göndermek için bir Hardhat görevi içerir.

Hedefinizin standart bir onaltılık dize olduğu EVM’den EVM’ye transferlerin aksine, burada hedefiniz Base58 Solana cüzdan adresidir. LayerZero CLI, mesaj yükü için Base58’den Bytes32’ye dönüşümü otomatik olarak yönetir.

Terminalinizde aşağıdaki komutu çalıştırın:

Burada ne oluyor?

  1. Betik, zincirler arası ücreti $CHZ cinsinden hesaplar (bu ücret EVM gas’ını, doğrulayıcı ağ ücretlerini ve Solana hedef ücretlerini karşılar).

  2. Şunu çağırır: send() fonksiyonunu Chiliz Adapter’ınızda bulur.

  3. Adapter 10 token’ı (18 ondalık) kilitler. Yükü 6’ya düşürmek için en düşük 12 ondalığı "dust" olarak atar (bunları Chiliz cüzdanınızda bırakır) sharedDecimals.

  4. LayerZero Endpoint paketi Solana Mainnet’e gönderir.

2) Paketin LayerZero Scan üzerinde Takibi

Solana’ya köprüleme, iki tamamen farklı mutabakat mekanizması arasında çeviri yapmayı ve SVM kesinliğini beklemeyi içerdiğinden, asenkron bir gecikme normaldir.

Solana’dan köprüleme, iki tamamen farklı mutabakat mekanizması arasında çeviri yapmayı ve EVM’de yürütmeden önce işlemi SVM üzerinde kesinleştirmeyi içerdiğinden, asenkron gecikme normaldir.

Bu yolculuğu gerçek zamanlı izlemek için, CLI çıktısında görünen LayerZero Scan bağlantısına tıklayın.

Ondalık Çeviri

Solana Native OFT, köprüden gelen 6 ondalıklı yükü otomatik olarak standart SPL 9 ondalığına ölçeklendirecektir; böylece Solana cüzdanınız tam olarak 10 token alır.

Chiliz Native OFT, 6 ondalıklı yükü otomatik olarak EVM standardı 18 ondalığa yükseltecektir; böylece tam olarak 10 tam token alırsınız

İşleminiz Chiliz üzerinde onaylandı olarak işaretlenip Solana üzerinde yürütülemezse, en yaygın neden Yetersiz Lamports veya Compute Units hatasıdır.

  • Hedef Solana cüzdanında belirli token’ınız için önceden bir Associated Token Account (ATA) yoksa, LayerZero Executor bunu oluşturmak için Solana "rent exemption" ücretini ödemek zorunda kalmıştır.

  • İşleminiz Solana’da onaylanmış olarak işaretlenmesine rağmen Chiliz üzerinde yürütülemezse, en yaygın neden bir EVM Out-of-Gas hatasıdır. value parametresi (Lamports) sizin enforcedOptions bu kirayı karşılamak için çok düşük ayarlanmışsa veya Eğer (Compute Units) yetersizse, Executor kendi cebinden ödeme yapmayı reddeder ve mesaj takılır.

  • Düzeltme: Token’larınızı kaybetmezsiniz. LayerZero Scan UI üzerinden takılmış bir mesajı manuel olarak ilerletebilirsiniz. Solana cüzdanınızı bağlayın, blok gezgininde "Force Resume" veya "Execute" düğmesine tıklayın ve mint işlemini tamamlamak için yerel hedef ücretini (Compute Units + ATA Rent, $SOL cinsinden) kendiniz ödeyin.

Son güncelleme

Bu yararlı oldu mu?