Ana içeriğe atla
Change page

Akıllı sözleşmelerle etkileşim kurma

Her zaman kendi akıllı sözleşmenizi yazıp dağıtmanız gerekmez. Bir geliştirici olarak çoğu zaman, başkalarının Ethereum ağına halihazırda dağıtmış olduğu akıllı sözleşmelerle etkileşim kurmak isteyeceksiniz.

Bu sayfa, bir akıllı sözleşmeyle etkileşim kurmanın iki temel yolunu (veri okuma ve veri yazma) ve her ikisini de yapmak için ihtiyaç duyduğunuz araçları kapsar.

Ön koşullar

Şunları anlamış olmalısınız:

Bir akıllı sözleşmeyle etkileşim kurmanın iki yolu

Bir akıllı sözleşmeyle etkileşim kurmak iki kategoriye ayrılır:

Bir sözleşmeden okuma yapma

Okuma, bir işlem oluşturmayan ve blokzincir üzerindeki hiçbir durumu değiştirmeyen ücretsiz bir operasyondur.

Bir sözleşmeden okuma yaptığınızda, sadece halihazırda var olan verileri sorgularsınız. Örneğin:

  • Bir ERC-20 token bakiyesini kontrol etme
  • Merkeziyetsiz bir borsadan güncel fiyatı okuma
  • Bir NFT'nin sahibini öğrenme

Okuma işlemleri durumu değiştirmediği için gaz maliyeti gerektirmez ve ETH'ye ihtiyaç duymadan herkes tarafından gerçekleştirilebilir.

Bir sözleşmeye yazma

Yazma, bir işlem gerektiren ve gaz maliyeti olan durum değiştiren bir operasyondur.

Bir sözleşmeye yazdığınızda, blokzincir durumunu değiştiren bir fonksiyonu tetiklersiniz. Örneğin:

  • Token transfer etme
  • Merkeziyetsiz bir borsada token takas etme
  • Bir NFT basma

Yazma işlemi her zaman şunları gerektirir:

  1. Gaz için yeterli ETH'ye sahip Dışarıdan Sahipli bir Hesap (EOA)
  2. Hesabın özel anahtarı tarafından imzalanmış bir işlem
  3. İşlemin madenciliğinin yapılması ve bir bloğa dahil edilmesi

Hesap soyutlama ile, bir akıllı sözleşme hesabı da yazma işlemlerini başlatabilir ve bir ödemeci kullanıcı adına gazı karşılayabilir; bu nedenle ETH tutan bir EOA kesinlikle gerekli değildir.

Sözleşme ABI'lerini anlama

Bir akıllı sözleşmeyle etkileşim kurmak için uygulamanızın sözleşmenin neler yapabileceğini bilmesi gerekir. İşte burada Uygulama İkili Arayüzü (ABI) devreye girer.

Bir ABI, şunları açıklayan bir JSON belgesidir:

  • Sözleşmenin sunduğu her fonksiyon (isim, girdiler, çıktılar)
  • Sözleşmenin yayabileceği her olay
  • Sözleşmeyle iletişim kurarken verilerin nasıl kodlanacağı ve çözüleceği

ABI'yi sözleşmenin kullanım kılavuzu olarak düşünün; o olmadan uygulamanız hangi fonksiyonların var olduğunu veya hangi parametreleri beklediklerini bilemez.

Bir sözleşmenin ABI'si nerede bulunur

  • Etherscan'deki doğrulanmış sözleşmeler - Etherscan (yeni sekmede açılır), doğrulanmış kaynak kodu için ABI'yi otomatik olarak sunar
  • Geliştiriciden - birçok proje ABI'lerini belgelerinde veya npm paketlerinde yayınlar
  • Kaynaktan oluşturma - Solidity kaynak koduna sahipseniz, ABI'yi üretmek için onu derleyebilirsiniz

Sözleşmelerle etkileşim kurmak için araçlar ve kütüphaneler

Geliştiriciler genellikle bir web uygulamasından, arka uçtan veya betikten sözleşmelerle etkileşim kurmak için bir JavaScript/TypeScript kütüphanesi kullanırlar.

İstemci kütüphaneleri (JavaScript/TypeScript)

Arka uç kütüphaneleri

Örnek: Viem ile bir token bakiyesini okuma

Örnek: ethers.js ile bir işlem gönderme

Olaylar ve günlükler

Akıllı sözleşmeler, bir şeyin gerçekleştiğini bildirmek için olaylar yayabilir. Uygulamanız, gerçek zamanlı olarak tepki vermek için bu olayları dinleyebilir.

İşlemleri simüle etme

Bir işlemi göndermeden önce, başarılı olup olmayacağını kontrol etmek ve gaz harcamadan dönüş değerini görmek için onu simüle edebilirsiniz. Bu, hataları erkenden yakalamak ve sonuçları önizlemek için faydalıdır.

Çoğu istemci kütüphanesi bunu eth_call aracılığıyla destekler:

// Viem ile
const result = await client.simulateContract({
  address: contractAddress,
  abi,
  functionName: 'swap',
  args: [amountIn],
  account: userAddress,
})

Cüzdanlar ve imzalama

Bir merkeziyetsiz uygulamada (dapp), kullanıcının cüzdanı (MetaMask, Rainbow veya WalletConnect gibi) imzalama işlemini halleder. Özel anahtarları doğrudan yönetmezsiniz.

Cüzdan kütüphaneleri ve bağlantı araçları bunu soyutlar, böylece uygulama mantığınızı oluşturmaya odaklanabilirsiniz.

Daha fazla bilgi