Ana içeriğe atla

Olaylar ile akıllı sözleşmelerden verileri günlüğe kaydetme

akıllı sözleşmeler
Remix
Solidity
olaylar
Orta
jdourlens
3 Nisan 2020
2 dakikalık okuma

Solidity'de, olaylar akıllı sözleşmelerin tetikleyebileceği gönderilen sinyallerdir. Merkeziyetsiz uygulamalar (dapp'ler) veya Ethereum JSON-RPC API'sine bağlı herhangi bir şey bu olayları dinleyebilir ve buna göre hareket edebilir. Bir olay, olay geçmişinin daha sonra aranabilmesi için dizine de eklenebilir.

Olaylar

Bu makalenin yazıldığı sırada Ethereum blokzincirindeki en yaygın olay, birisi token transfer ettiğinde ERC-20 token'ları tarafından yayımlanan Transfer olayıdır.

event Transfer(address indexed from, address indexed to, uint256 value);

Olay imzası, sözleşme kodunun içinde bildirilir ve emit anahtar kelimesi ile yayımlanabilir. Örneğin, transfer olayı transferi kimin gönderdiğini (from), kime gönderildiğini (to) ve ne kadar token transfer edildiğini (value) günlüğe kaydeder.

Counter akıllı sözleşmemize geri dönersek ve değer her değiştiğinde günlüğe kaydetmeye karar verirsek. Bu sözleşme dağıtılmak üzere değil, genişletilerek başka bir sözleşme oluşturmak için bir temel olarak hizmet etmek üzere tasarlandığından: buna soyut sözleşme denir. Sayaç örneğimizde bu şu şekilde görünür:

Şunlara dikkat edin:

  • Satır 5: Olayımızı ve neleri içerdiğini, eski değeri ve yeni değeri bildiriyoruz.

  • Satır 13: count değişkenimizi artırdığımızda olayı yayımlıyoruz.

Şimdi sözleşmeyi dağıtır ve increment işlevini çağırırsak, logs (günlükler) adlı bir dizi içindeki yeni işleme tıkladığınızda Remix'in bunu otomatik olarak görüntülediğini göreceğiz.

Remix screenshot

Günlükler, akıllı sözleşmelerinizde hata ayıklamak için gerçekten yararlıdır, ancak farklı kişiler tarafından kullanılan uygulamalar oluşturuyorsanız da önemlidir ve akıllı sözleşmenizin nasıl kullanıldığını izlemek ve anlamak için analiz yapmayı kolaylaştırır. İşlemler tarafından oluşturulan günlükler popüler blok gezginlerinde görüntülenir ve örneğin bunları belirli olayları dinlemek ve meydana geldiklerinde harekete geçmek üzere zincir dışı betikler oluşturmak için de kullanabilirsiniz.