Solidity Event 및 Event Logs 확인

jsbak·2022년 8월 18일
0

BlockChain

목록 보기
6/6

Event

  • Event

    Event에 object 도 담을 수 있다.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract EventTest {

    event testFunctionEvent(Test obj);

    struct Test {
        uint obj1;
        uint obj2;
    }

    Test public test = Test(1,2);

    function testFunction() external {
        emit testFunctionEvent(test);
    }
}
  • result
statustrue Transaction mined and execution succeed
transaction hash0xedb2b414342bda32c52e5a4f5209a91114dbdc12ee9e1d470cd30ae9ff5a5dd0
from0x5B38Da6a701c568545dCfcB03FcB875f56beddC4
toEventTest.testFunction() 0xd9145CCE52D386f254917e481eB44e9943F39138
gas31386 gas
transaction cost27292 gas
execution cost27292 gas
input0xe16...b4a9b
decoded input{}
decoded output{}
logs[{"from": "0xd9145CCE52D386f254917e481eB44e9943F39138",
"topic": "0xb2380244d2d07e23b168b64c32ce5655015c96af4c4631818021bb70aed6d65b",
"event": "testFunctionEvent","args": {"0": ["1","2"],"obj": ["1","2"]}}]
val0 wei
  • logs
logs	[
	{
		"from": "0xd9145CCE52D386f254917e481eB44e9943F39138",
		"topic": "0xb2380244d2d07e23b168b64c32ce5655015c96af4c4631818021bb70aed6d65b",
		"event": "testFunctionEvent",
		"args": {
			"0": [
				"1",
				"2"
			],
			"obj": [
				"1",
				"2"
			]
		}
	}
]

Ethereum Event 확인

Event

web3.eth.subscribe('logs')

var options = {
    fromBlock: 0,
    address: web3.eth.defaultAccount,
    topics: ["0x0000000000000000000000000000000000000000000000000000000000000000", null, null]
};
web3.eth.subscribe('logs', options, function (error, result) {
    if (!error)
        console.log(result);
})
    .on("data", function (log) {
        console.log(log);
    })
    .on("changed", function (log) {
});

Klaytn Event 확인

caver.rpc.klay.getLogs

caver.rpc.klay.getLogs(options [, callback])

caver.rpc.klay.getLogs({
        fromBlock: '0x1'
        toBlock: 'latest',
        address:'0x87ac99835e67168d4f9a40580f8f5c33550ba88b'
    }).then(console.log)

Result [
    {
        data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385',
        topics: [
            '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385
        ]
        logIndex: '0x0',
        transactionIndex: '0x0',
        transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385',
        blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7',
        blockNumber: '0x4d2',
        address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe'
    },
    {...}
]

myContract.events

myContract.events.eventName([options][, callback])

myContract.events.eventName({
    filter: {
      myIndexedParam: [20,23], 
      myOtherIndexedParam: '0x123456789...'
    }, // Using an array means OR: e.g. 20 or 23
    fromBlock: 0
  }, function(error, event) { console.log(event) })
  .on('connected', function(subscriptionId){
      console.log(subscriptionId)
  })
  .on('data', function(event){
      console.log(event) // same results as the optional callback above
  })
  .on('error', console.error)

// event output example
{
    returnValues: {
        myIndexedParam: 20,
        myOtherIndexedParam: '0x123456789...',
        myNonIndexParam: 'My string'
    },
    raw: {
        data: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385',
        topics: ['0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7', '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385']
    },
    event: 'eventName',
    signature: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7',
    logIndex: 0,
    transactionIndex: 0,
    transactionHash: '0x7f9fade1c0d57a7af66ab4ead79fade1c0d57a7af66ab4ead7c2c2eb7b11a91385',
    blockHash: '0xfd43ade1c09fade1c0d57a7af66ab4ead7c2c2eb7b11a91ffdd57a7af66ab4ead7',
    blocknumber: 1234,
    address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe',
    id: 'log_41d221bc',
}
profile
끄적끄적 쓰는곳

0개의 댓글