Solidity-events

提供:Dev Guides
移動先:案内検索

堅牢性-イベント

イベントは、コントラクトの継承可能なメンバーです。 イベントが発行され、渡された引数がトランザクションログに保存されます。 これらのログはブロックチェーンに保存され、契約がブロックチェーンに存在するまで契約のアドレスを使用してアクセスできます。 生成されたイベントには、コントラクト内からアクセスできません。また、それらを作成および発行したイベントにもアクセスできません。

イベントは、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"]
   }
}