Ana içeriğe geç

Olaylar ile akıllı sözleşmelerden veri toplama

akıllı sözleşmelerremixsolidityolaylar
Orta düzey
jdourlens
EthereumDev(opens in a new tab)
3 Nisan 2020
1 dakikalık okuma minute read
comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

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;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Private variable of type unsigned int to keep the number of counts
8 uint256 private count = 0;
9
10 // Function that increments our counter
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter to get the count value
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Tümünü göster
Kopyala

Ş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.

Remix ekran görüntüsü

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: @muratgozel(opens in a new tab), 23 Kasım 2023

Bu rehber yararlı oldu mu?