Solidity - Etkinlikler
Olay, bir sözleşmenin miras alınabilen bir üyesidir. Bir olay yayınlanır, aktarılan argümanları işlem günlüklerinde saklar. Bu günlükler blok zincirinde saklanır ve sözleşme blok zincirinde mevcut olana kadar sözleşmenin adresi kullanılarak erişilebilir. Oluşturulan bir olaya, onları oluşturan ve yayan olandan bile sözleşmelerden erişilemez.
Bir olay, event anahtar sözcüğü kullanılarak bildirilebilir.
//Declare an Event
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
//Emit an event
emit Deposit(msg.sender, _id, msg.value);
Misal
Solidity'de bir olayın nasıl çalıştığını anlamak için aşağıdaki kodu deneyin.
Önce bir sözleşme oluşturun ve bir etkinlik yayınlayın.
pragma solidity ^0.5.0;
contract Test {
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
function deposit(bytes32 _id) public payable {
emit Deposit(msg.sender, _id, msg.value);
}
}
Ardından JavaScript kodunda sözleşmenin etkinliğine erişin.
var abi = /* abi as generated using compiler */;
var ClientReceipt = web3.eth.contract(abi);
var clientReceiptContract = ClientReceipt.at("0x1234...ab67" /* address */);
var event = clientReceiptContract.Deposit(function(error, result) {
if (!error)console.log(result);
});
Aşağıdakine benzer ayrıntıları yazdırmalıdır -
Çıktı
{
"returnValues": {
"_from": "0x1111...FFFFCCCC",
"_id": "0x50...sd5adb20",
"_value": "0x420042"
},
"raw": {
"data": "0x7f...91385",
"topics": ["0xfd4...b4ead7", "0x7f...1a91385"]
}
}