堅牢性-イベント
イベントは、コントラクトの継承可能なメンバーです。イベントが発行され、渡された引数がトランザクションログに保存されます。これらのログはブロックチェーンに保存され、契約がブロックチェーンに存在するまで、契約のアドレスを使用してアクセスできます。生成されたイベントは、それらを作成して発行したものでさえも、コントラクト内からアクセスできません。
イベントは、eventキーワードを使用して宣言できます。
//Declare an Event
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
//Emit an event
emit Deposit(msg.sender, _id, msg.value);
例
次のコードを試して、Solidityでイベントがどのように機能するかを理解してください。
まず、コントラクトを作成し、イベントを発行します。
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);
}
}
次に、JavaScriptコードでコントラクトのイベントにアクセスします。
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);
});
次のような詳細を出力する必要があります-
出力
{
"returnValues": {
"_from": "0x1111...FFFFCCCC",
"_id": "0x50...sd5adb20",
"_value": "0x420042"
},
"raw": {
"data": "0x7f...91385",
"topics": ["0xfd4...b4ead7", "0x7f...1a91385"]
}
}