Solana'dan Chiliz Chain'e köprüleme
Solana’dan Chiliz Chain’e 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 (Solana) bir OFT Adapter ve hedef zincirde (Chiliz Chain) bir Native OFT.
LayerZero’nun OFT sözleşmeleri için kendi QuickStart’ını sağladığını unutmayın:
Ön Koşullar
Solana (Non-EVM) ile Chiliz Chain (EVM) arasında köprüleme, çift yığınlı 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:
Solana etkileşimleri için: Rustup (Solana akıllı sözleşmeleri Rust programlama dilini kullanır), Solana CLI ve Anchor framework, ve LayerZero’nun Solana SDK’sı.
Chiliz Chain etkileşimleri için: Node/npx ve Hardhat.
Bu kılavuz aşağıdakileri gerektirir:
Chiliz Chain’e köprülemek istediğiniz mevcut SPL Token’ın mint adresi.
Her zincir için bir Web3 cüzdanı:
Solana için: Solflare cüzdanı ile Solana Mainnet yapılandırması. İşte kurulum kılavuzu.
Chiliz Chain için: Chiliz Chain RPC yapılandırmasına sahip MetaMask cüzdanı.
Sözleşme dağıtımları ile mesaj gönderme için gereken gas ücretlerini ödeyecek kadar her zincirde yeterli gas tokenı.
Solana’da: SOL tokenları.
Chiliz Chain’de: CHZ tokenları.
1. Adım: Sözleşme Geliştirme
“Shared Decimals” Zorluğu
Ethereum Virtual Machine (EVM) token matematiğini Solana’dan farklı şekilde ele aldığı için, tokenlar köprüyü geçmeden önce ondalık hassasiyetlerini eşitlememiz gerekir:
Solana (Kaynak): Yerel SPL Token’lar genellikle 9 ondalık hassasiyete sahiptir.
Chiliz Chain (Hedef): Standart ERC-20 token’lar (ve yeni hedef OFT’niz) genellikle 18 ondalık kullanır.
Solana’dan 9 ondalıklı bir yükü doğrudan dönüştürmeden Chiliz’e gönderirseniz, EVM sözleşmesi miktarı yanlış yorumlar ve hedef zincirde bir tokenın mikroskobik bir kesri basılır.
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ı Solana’dan 1,00 SPL token köprülediğinde, Solana Adapter sayıyı 6 ondalığa ölçekler (SPL token’ın en düşük 3 ondalığını “toz” olarak kabul eder ve bunları kullanıcının cüzdanında güvenli şekilde bırakır).
6 ondalıklı mesaj yükü köprü üzerinden gönderilir.
Chiliz Chain Native OFT, 6 ondalıklı sayıyı alır ve yukarı ölçekleyerek kullanıcının EVM cüzdanına ERC-20 tokenını basmadan önce yerel 18 ondalığına çevirir.
Solana Program Geliştirme
Tokenınız zaten Solana’da bulunduğu için yeni bir token sözleşmesi oluşturmanız gerekmez. Bunun yerine Rust ile yazılmış bir Solana OFT Adapter Programı dağıtacaksınız. Bu program, kullanıcılar tokenlarını Chiliz Chain’e köprülediğinde SPL token’larınızı güvenli biçimde tutan merkeziyetsiz bir kilit kutusu gibi davranacak ve kullanıcılar geri köprüleme yaptığında onları serbest bırakacaktır.
LayerZero, Rust mantığını sıfırdan yazmanıza gerek kalmaması için önceden oluşturulmuş, denetlenmiş sözleşmeler içeren bir Anchor workspace sağlar.
1. LayerZero Solana SDK’sını klonlama
Resmî LayerZero geliştirici araçları deposunu klonlayarak başlayın; bu depo Solana OFT Adapter örneğini içerir.
Terminalinizi açın ve şunu çalıştırın:
2. Solana Adapter Programını Derleme
Bu dizin, hem Native OFT hem de OFT Adapter uygulamalarını içeren bir Anchor workspace’tir. Benzersiz Solana Program ID’nizi oluşturmak için Rust programını derlemeniz gerekir.
Derleme tamamlandıktan sonra, yeni Program ID’nizi almak için şunu çalıştırın:
Şunları güncellemeniz gerekir: Anchor.toml dosyası ve declare_id! makrosu programs/oft-adapter/src/lib.rs dosyasının içindeki yeni Program ID’nizle, dağıtımdan önce.
3. Solana Mainnet’e Dağıtım
Solana CLI’nizin Mainnet için yapılandırıldığından ve yerel cüzdanınızda dağıtım boyutunu ve depolama kirasını karşılayacak yeterli $SOL bulunduğundan emin olun.
4. OFT Adapter’ı Başlatma
Native OFT’nin (yeni bir Mint oluşturmayı gerektiren) aksine, Adapter’ı başlatmak yalnızca yeni dağıtılmış Program ID’nizi mevcut SPL Token Mint Address’inize bağlar.
LayerZero SDK, bu başlatmayı komut satırından yönetmek için Hardhat görevleri sağlar. Solana LayerZero Endpoint’inizin (30168) yapılandırıldığından emin olun, ardından şunu çalıştırın:
Burada kritik parametreler vardır:
--mint: Bu, köprülemek istediğiniz SPL token’ın tam Base58 Mint Address’i olmalıdır. Adapter bu token için özel bir emanet (escrow) hesabı oluşturacaktır.--shared-decimals 6: Bu, Adapter’ın EVM’ye göndermeden önce yükü nasıl ölçekleyeceğini belirler. Solana tokenınız 9 ondalığa sahipse, burada 6 shared decimals bırakmak, taşma sorunları olmadan köprü üzerinden güvenli biçimde çevrilmesini sağlar.
Bu başlatma işlemi Solana’da onaylandıktan sonra Adapter’ınız canlı olur ve SPL token’larınızı güvenle kilitlemeye hazırdır!
Chiliz Sözleşme Geliştirme
Solana SPL tokenınız henüz Chiliz Chain’de mevcut olmadığından, standart bir Native OFT sözleşmesi dağıtmanız gerekir. Bu sözleşme basıcı (minter) olarak görev yapacaktır. Solana Adapter’ınızdan doğrulanmış bir mesaj aldığında karşılık gelen ERC-20 tokenları basacak; bir kullanıcı Solana’ya geri köprü yaptığında ise onları yakacaktır.
“Shared Decimals Challenge” bölümünde tartıştığımız gibi, Solana Adapter’ınız yükü göndermeden önce 6 ondalığa düşürür.
LayerZero’nun EVM uygulaması, özel ölçekleme mantığı yazmanıza gerek olmayacak şekildedir. Varsayılan olarak, OFT.sol sözleşmesi 18 yerel ondalık ve 6 shared decimals kullanır. Solana’dan gelen 6 ondalıklı yükü otomatik olarak algılar ve ERC-20 tokenını kullanıcının cüzdanına basmadan önce bunu standart 18 ondalıklı formata () yükseltir.
OFT’yi Chiliz Chain’e Dağıtma
Şu adla yeni bir dosya oluşturun: ChilizNativeOFT.sol Hardhat projenizin contracts/ klasöründe:
Henüz dağıtmayın! Ama bunu aklınızda tutun:
Şunların olduğundan emin olun:
_nameve_symbolparametreleri, kullanıcılarınız için birleşik bir deneyim sağlamak amacıyla orijinal Solana SPL tokenınızla birebir eşleşmelidir.Chiliz Mainnet’e dağıtırken, Chiliz Endpoint V2 adresini (
0x6F475642a6e85809B1c36Fa62763669b1b48DD5B)_lzEndpoint.
olarak vereceksiniz
2. Adım: LayerZero Yapılandırması
Şimdi Solana Adapter’ınız başlatılmış ve Chiliz Native OFT’niz dağıtım için hazır olduğuna göre, aralarındaki bağlantıyı yapılandırmanız gerekir. Buradaki ana zorluk adres biçimlendirmesidir. LayerZero’nun zincirler arası mesajlaşması, tüm eş adreslerinbytes32
Ş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:
Oluşturucu, Solana Base58 adresinizin EVM’ye otomatik dönüştürülmesini yönetir Buradaki ana zorluk adres biçimlendirmesidir. LayerZero’nun zincirler arası mesajlaşması, tüm eş adreslerin Chiliz akıllı sözleşmesi tarafından gereken dolgu.
3. Adım: Dağıtım İş Akışı
Bu aşamada Solana Adapter’ınız zaten derlenmiş, dağıtılmış ve başlatılmış durumda (1. Adımda anlatıldığı gibi). Şimdi köprünün EVM tarafını—Native OFT’yi—Chiliz Chain’e dağıtmanız gerekir.
Bu sözleşmeyi Chiliz Mainnet’e göndermek için Hardhat kullanacaksınız.
1. Chiliz Native OFT Dağıtım Betiği
Hardhat projenizde, deploy/ dizininizde 01_deploy_chiliz_native_oft.tsadlı bir dağıtım betiği oluşturun. Bu betik, Chiliz üzerinde yeni ERC-20 tokenını başlatacaktır.
2. Solana Program Dağıtımı
Kısa bir hatırlatma olarak, Solana Adapter’ınız ilk dağıtım için Hardhat kullanmaz. Şunları zaten yapmış olmanız gerekir:
Çalıştırdınız
anchor buildveanchor deployRust programını Solana Mainnet’e göndermek için.Yürüttünüz
lz:oft-adapter-solana:initAdapter’ınızı mevcut SPL Token Mint’inize bağlamak için görevini.Ortaya çıkan Base58 Program ID’yi şuraya kopyaladınız:
layerzero.config.tsdosyanız.
3. Chiliz Dağıtımını Yürütme
Şunlardan emin olun: hardhat.config.ts dosyanızda RPC URL’si ve özel anahtarın chiliz ağı için doğru şekilde yapılandırılmış olması.
Native OFT’yi dağıtmak için terminalinizde şu komutu çalıştırın:
Dağıtım tamamlandığında, Hardhat yeni basılan Chiliz sözleşme adresini deployments/ klasörüne kaydedecektir. Artık hem Solana (SVM) hem de Chiliz Chain (EVM) üzerinde canlı sözleşmeleriniz var, ancak henüz birbirleriyle konuşmaları için yetkilendirilmediler.
4. Adım: Wiring ve Peering
Bu noktada Solana üzerinde bir Rust Adapter Programınız ve Chiliz Chain üzerinde bir Native EVM OFT’niz var. Bunların güvenli biçimde iletişim kurabilmesi için onları güvenilir eşler olarak birlikte “wire” etmeniz gerekir.
Ters yönde köprüleme yaparken olduğu gibi, burada da tamamen farklı iki Sanal Makine (SVM ve EVM) ile uğraşıyoruz. Bu nedenle, Zorunlu Seçenekleri (Gas Limitleri) doğru yapılandırmak, işlemlerinizin hedef zincirde takılmamasını sağlamak için kritik önemdedir.
Chiliz (EVM) için “Enforced Options”
Bir kullanıcı SPL token’ını Solana’dan Chiliz’e köprülediğinde, LayerZero Executor ERC-20 tokenları basmak için Chiliz sözleşmenizdeki lzReceive fonksiyonunu çağıracak EVM gas’ına ihtiyaç duyar.
Buna karşılık, dönüş yolculuğu için (Chiliz’den Solana’ya), Executor SPL token’larının kilidini açmak ve gerekirse Associated Token Account (ATA) için kirayı ödemek üzere Solana Compute Units ve Lamports’a ihtiyaç duyacaktır.
Yapılandırmayı Güncelleme
Executor’ın her iki yönde de yeterli gaza sahip olduğunu garanti etmek için, bu limitleri kablolamadan önce layerzero.config.ts dosyanızda tanımlamanız gerekir.
Şunu güncelleyin: connections dizisini, yapılandırma dosyanıza aşağıdakileri dahil edecek şekilde enforcedOptions:
Wire Görevini Yürütme
Yapılandırmanız kaydedildikten sonra, LayerZero V2 toolbox peering sürecini otomatikleştirir. Base58 Solana adresinizi çözer, gerekli Buradaki ana zorluk adres biçimlendirmesidir. LayerZero’nun zincirler arası mesajlaşması, tüm eş adreslerin EVM formatına doldurur ve yapılandırma işlemlerini hem Solana Mainnet’e hem de Chiliz Mainnet’e gönderir.
Terminalinizde aşağıdaki komutu çalıştırın:
CLI sizden işlemleri onaylamanızı isteyecektir. Kaynak işlemi göndermek için yapılandırılmış Solana cüzdanınızı kullanacak ($SOL maliyetiyle) ve Chiliz hedef işlemini göndermek için Hardhat’ı kullanacaktır ($CHZ maliyetiyle).
Chiliz tarafında, LayerZero Hardhat toolbox otomatik olarak 6 gerekli yapılandırma işlemi oluşturup yürütecektir:
setSendLibrary: Mesaj göndermek için V2 MessageLib’i atar.setReceiveLibrary: Mesaj almak için MessageLib’i atar.setConfig(Send Library): DVN’leri ve Executor’ı yapılandırır.setConfig(Receive Library): Gelen doğrulama için DVN’leri yapılandırır.setEnforcedOptions: Tutarlı yürütme parametreleri sağlar (özellikle dönüş yolculuğu için yeterli Solana Compute Units’in ödendiğinden emin olur).setPeer: Chiliz EID’sini, Solana Adapter’ınızın Base58 Program ID’sine kriptografik olarak bağlar (dönüştürülmüşBuradaki ana zorluk adres biçimlendirmesidir. LayerZero’nun zincirler arası mesajlaşması, tüm eş adreslerin).
Solana SDK, SVM tarafı için eşdeğer programatik talimatları altyapıda yönetir.
Her iki işlem de onaylandıktan sonra, Solana’dan Chiliz’e köprünüz resmen canlı ve güvenli izinlerle çalışır hale gelir!
5. Adım: İşletim ve Test
Solana Adapter’ınız dağıtılmış, Chiliz Native OFT’niz başlatılmış ve ikisi doğru şekilde birbirine bağlanmış durumda; böylece SPL Token’ınız artık SVM/EVM ayrımını geçmeye resmen hazırdır. Son adım, Solana’dan Chiliz Chain’e bir test transferi gerçekleştirmek ve bunu izlemektir.
1) Solana Cüzdanınızı Hazırlama
EVM’de olduğu gibi, bir Adapter’a yetki vermek için ayrı, önceden bir approve() işlemi gerçekleştirmeniz gerekmez; Solana token onaylarını ve transferlerini aynı işlem talimatları içinde yönetir.
Ancak, yerel Solana cüzdanınızın (projenizde yapılandırılmış olanın) köprülemek istediğiniz SPL token bakiyesine gerçekten sahip olduğundan ve ayrıca kaynak işlem ücretini ile LayerZero zincirler arası mesaj ücretini ödemek için yeterli $SOL bulunduğundan emin olmalısınız.
2) Zincirler Arası Mesajı Chiliz’e Gönderme
LayerZero V2 toolbox, kaynak zincir Solana olsa bile OFT transferlerini doğrudan komut satırından göndermek için bir Hardhat görevi içerir.
Solana’dan Solana’ya transferlerin aksine, burada hedefiniz standart bir EVM onaltılık cüzdan adresidir (örn. 0x123...). LayerZero CLI, yük için dolguyu ve bayt dönüşümünü otomatik olarak yönetir.
Terminalinizde aşağıdaki komutu çalıştırın:
Burada ne oluyor?
Betik zincirler arası ücreti
$SOL.olarak hesaplar
10 SPL token’ı cüzdanınızdan Solana Adapter’ın emanet hesabına transfer eden bir işlem oluşturur.
Adapter, 9 ondalıklı SPL token miktarını 6 shared decimals’e ölçekler.
LayerZero Endpoint paketi Chiliz Mainnet’e doğru yayar.
3) Paketi LayerZero Scan’de İzleme
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.
Bu araç hakkında daha fazla bilgi edinin:
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
4) Takılı Kalmış Mesajların Sorun Giderilmesi
İş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.
EğergasenforcedOptionsparametresilzReceive(5. Adımda yapılandırılan) Chiliz ağınınminting fonksiyonunu işlemesi için çok düşük ayarlandıysa, LayerZero Executor mesajı teslim edemez. Düzeltme: Tokenlarınızı kaybetmezsiniz. Takılı kalan mesajı LayerZero Scan arayüzü üzerinden manuel olarak iletebilirsiniz. Sadece EVM cüzdanınızı Chiliz Chain’e bağlayın, blok gezgininde “Force Resume” veya “Execute” düğmesine tıklayın ve mint işlemini tamamlamak için Chiliz gas ücretini kendiniz ödeyin.
Son güncelleme
Bu yararlı oldu mu?