Olaylar ile akıllı sözleşmelerden veri toplama
Solidity'de olaylar, akıllı sözleşmenin gönderebileceği kaydedilmiş sinyallerdir. Merkeziyetsiz uygulamalar ya da Ethereum JSON-RPC API'sine bağlı herhangi bir şey, bu olayları dinleyip gerektiği şekilde hareket edebilir. Her bir olay endekslenir böylece olay tarihi sonrasında tekrar aranabilir olur.
Olaylar
Bu makalenin yazıldığı sırada Ethereum blok zincirindeki en yaygın olay, biri token'ları transfer ettiğinde ERC20 token'ları tarafından yayılan Transfer olayıdır.
1event Transfer(address indexed from, address indexed to, uint256 value);Kopyala
Olay imzası sözleşme kodu içerisinde tanımlanmıştır ve yayın anahtarıyla yayınlanabilir. Örneğin Transfer olayı, transferi kimin (from) gerçekleştirdiğini, kime yönelik (to) gerçekleştirdiğini ve ne kadar token (value) transfer edildiğini kayıt altına alır.
Counter (Sayaç) akıllı sözleşmemize geri dönersek ve değer her değiştiğinde oturum açmaya karar verirsek. Bu sözleşmenin dağıtılması değil, kendisini genişleterek başka bir sözleşme oluşturmak için bir temel görevi görmesi hedeflendiğinden buna soyut sözleşme denir. Sayaç örneğimizde şöyle görünür:
1pragma solidity 0.5.17;23contract Counter {45 event ValueChanged(uint oldValue, uint256 newValue);67 // Private variable of type unsigned int to keep the number of counts8 uint256 private count = 0;910 // Function that increments our counter11 function increment() public {12 count += 1;13 emit ValueChanged(count - 1, count);14 }1516 // Getter to get the count value17 function getCount() public view returns (uint256) {18 return count;19 }2021}Tümünü gösterKopyala
Şu satırlara dikkat:
Satır 5: Olayımızı ve içeriğini, eski değeri ve yeni değeri beyan ederiz.
Satır 13: Değişkenimiz count değeri değiştiğinde olayımızı yayınlıyoruz.
Şimdi sözleşmemizi tekrar yayınlar ve increment fonksiyonunu çağırırsak Remix'in kayıtlarında logs dizisi içinde olayımızın gerçekleştiğini görebiliriz.
Kayıtlar, sözleşmelerdeki hataları ayıklamak için çok kullanışlıdır ve aynı zamanda sözleşmenizi kullanacak olan kişilerin nasıl kullandıklarını gözlemleyebilmenizi sağlar. İşlemler tarafından oluşturulan kayıtlar popüler blok arayıcılarında gösterilir ve ayrıca bu kayıtları, örneğin belirli olayları dinlemek ve bu olaylar gerçekleştiğinde harekete geçmek amacıyla zincir dışı komut dosyaları yaratmak için kullanabilirsiniz.
Son düzenleme: @nhsz(opens in a new tab), 15 Ağustos 2023