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);
}
}
status | true Transaction mined and execution succeed |
transaction hash | 0xedb2b414342bda32c52e5a4f5209a91114dbdc12ee9e1d470cd30ae9ff5a5dd0 |
from | 0x5B38Da6a701c568545dCfcB03FcB875f56beddC4 |
to | EventTest.testFunction() 0xd9145CCE52D386f254917e481eB44e9943F39138 |
gas | 31386 gas |
transaction cost | 27292 gas |
execution cost | 27292 gas |
input | 0xe16...b4a9b |
decoded input | {} |
decoded output | {} |
logs | [{"from": "0xd9145CCE52D386f254917e481eB44e9943F39138", |
"topic": "0xb2380244d2d07e23b168b64c32ce5655015c96af4c4631818021bb70aed6d65b", | |
"event": "testFunctionEvent","args": {"0": ["1","2"],"obj": ["1","2"]}}] | |
val | 0 wei |
logs [
{
"from": "0xd9145CCE52D386f254917e481eB44e9943F39138",
"topic": "0xb2380244d2d07e23b168b64c32ce5655015c96af4c4631818021bb70aed6d65b",
"event": "testFunctionEvent",
"args": {
"0": [
"1",
"2"
],
"obj": [
"1",
"2"
]
}
}
]
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) {
});
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.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',
}