Solidity-이벤트

이벤트는 계약의 상속 가능한 구성원입니다. 이벤트가 발생하면 트랜잭션 로그에 전달 된 인수가 저장됩니다. 이러한 로그는 블록 체인에 저장되며 계약이 블록 체인에 존재할 때까지 계약 주소를 사용하여 액세스 할 수 있습니다. 생성 된 이벤트는 계약 내에서 액세스 할 수 없으며이를 생성하고 생성 한 이벤트도 액세스 할 수 없습니다.

이벤트 키워드를 사용하여 이벤트를 선언 할 수 있습니다.

//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"]
   }
}