Olaylar ile akıllı sözleşmelerden verileri günlüğe kaydetme
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:
pragma solidity 0.5.17;
contract Counter {
event ValueChanged(uint oldValue, uint256 newValue);
// Sayım adedini tutmak için unsigned int türünde özel değişken
uint256 private count = 0;
// Sayacımızı artıran fonksiyon
function increment() public {
count += 1;
emit ValueChanged(count - 1, count);
}
// Sayım değerini almak için getter
function getCount() public view returns (uint256) {
return count;
}
}
Ş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.
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.
