false
false

Contract Address Details

0x9B105aefF69Cd26050798d575db17ffc2eAC4E4d

Contract Name
ECHeartBeat
Creator
0xa247cc–1aa1b2 at 0x613b8a–3da479
Balance
0 Berg
Tokens
Fetching tokens...
Transactions
1,295,315 Transactions
Transfers
0 Transfers
Gas Used
153,616,524,275
Last Balance Update
29769607
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
ECHeartBeat




Optimization enabled
true
Compiler version
v0.8.21+commit.d9974bed




Optimization runs
200
EVM Version
istanbul




Verified at
2025-08-01T05:30:19.851875Z

Contract source code

// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.8.0;

contract ECHeartBeat {
    struct Call {
        uint256 timestamp;
        string metadata;
    }

    address private owner;

    event OwnerChanged(address indexed previousOwner, address indexed newOwner);
    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Caller is not the owner");
        _;
    }

    mapping(address => Call[]) private callHistory;
    mapping(address => mapping(uint256 => bool)) private callExists;

    mapping(address => mapping(uint256 => uint256[])) private activeDays;
    mapping(address => uint256) private firstCallDay;
    address[] private nodeAddresses;

    event CallLogged(address indexed caller, uint256 timestamp, string metadata);

    function logCall(string calldata metadata) public {
        Call memory newCall = Call(block.timestamp, metadata);
        callHistory[msg.sender].push(newCall);

        if (!callExists[msg.sender][newCall.timestamp / 1 days]) {
            callExists[msg.sender][newCall.timestamp / 1 days] = true;
            activeDays[msg.sender][newCall.timestamp / 1 days].push(callHistory[msg.sender].length - 1);

            if (firstCallDay[msg.sender] == 0) {
                firstCallDay[msg.sender] = newCall.timestamp / 1 days;
                nodeAddresses.push(msg.sender);
            }
        }
        else {
            activeDays[msg.sender][newCall.timestamp / 1 days].push(callHistory[msg.sender].length - 1);
        }

        emit CallLogged(msg.sender, newCall.timestamp, metadata);
    }

    function getCurrentDay() public view returns (uint256){
        return block.timestamp / 1 days;
    }

    function getCallCount(address caller, uint256 day) public view returns (uint256) {
        return activeDays[caller][day].length;
    }

    function getTotalCalls(address caller) public view returns (uint256) {
        return callHistory[caller].length;
    }

    function getActiveDays(address caller) public view returns (uint256) {
        uint256 count = 0;
        for (uint256 day = firstCallDay[caller]; day <= block.timestamp / 1 days; day++) {
            if (callExists[caller][day]) {
                count++;
            }
        }
        return count;
    }

    function getFirstCallDay(address caller) public view returns (uint256) {
        return firstCallDay[caller];
    }

    function getCallMetadata(address caller, uint256 index) public view returns (string memory) {
        require(index < callHistory[caller].length, "Invalid index");
        return callHistory[caller][index].metadata;
    }

    function getCallsforday(address caller, uint256 day) public view returns (uint256[] memory){
        return activeDays[caller][day];
    }

    function getNodesCount() public view returns (uint256){
        return nodeAddresses.length;
    }

    function getNodeAddress(uint256 index) public view returns (address){
        return nodeAddresses[index];
    }

    function getCallHistoryCount(address nodeAddress) public view returns (uint256){
        return callHistory[nodeAddress].length;
    }

    function getCallHistoryLog(address nodeAddress, uint256 index) public view returns (Call memory){
        return callHistory[nodeAddress][index];
    }

    function changeOwner(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Invalid address");
        emit OwnerChanged(owner, newOwner);
        owner = newOwner;
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"CallLogged","inputs":[{"type":"address","name":"caller","internalType":"address","indexed":true},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false},{"type":"string","name":"metadata","internalType":"string","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerChanged","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeOwner","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getActiveDays","inputs":[{"type":"address","name":"caller","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCallCount","inputs":[{"type":"address","name":"caller","internalType":"address"},{"type":"uint256","name":"day","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCallHistoryCount","inputs":[{"type":"address","name":"nodeAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct ECHeartBeat.Call","components":[{"type":"uint256","name":"timestamp","internalType":"uint256"},{"type":"string","name":"metadata","internalType":"string"}]}],"name":"getCallHistoryLog","inputs":[{"type":"address","name":"nodeAddress","internalType":"address"},{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getCallMetadata","inputs":[{"type":"address","name":"caller","internalType":"address"},{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getCallsforday","inputs":[{"type":"address","name":"caller","internalType":"address"},{"type":"uint256","name":"day","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCurrentDay","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getFirstCallDay","inputs":[{"type":"address","name":"caller","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getNodeAddress","inputs":[{"type":"uint256","name":"index","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getNodesCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getTotalCalls","inputs":[{"type":"address","name":"caller","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"logCall","inputs":[{"type":"string","name":"metadata","internalType":"string"}]}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610d44806100326000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80635f1e2c721161008c5780637b712492116100665780637b712492146101da5780638c1cc04e14610136578063a6f9dae1146101ef578063c3ff6d6b1461020257600080fd5b80635f1e2c721461019257806361ea7208146101b25780636c424ec8146101ba57600080fd5b806301c27880146100d457806317a7bc5e146100fa57806326b071041461012357806327c15a12146101365780633e6968b61461015f578063446e847f14610167575b600080fd5b6100e76100e236600461095e565b610222565b6040519081526020015b60405180910390f35b6100e7610108366004610988565b6001600160a01b031660009081526004602052604090205490565b6100e7610131366004610988565b61024d565b6100e7610144366004610988565b6001600160a01b031660009081526001602052604090205490565b6100e76102cf565b61017a6101753660046109aa565b6102e3565b6040516001600160a01b0390911681526020016100f1565b6101a56101a036600461095e565b610313565b6040516100f19190610a09565b6005546100e7565b6101cd6101c836600461095e565b61040f565b6040516100f19190610a36565b6101ed6101e8366004610a49565b61053a565b005b6101ed6101fd366004610988565b6107d1565b61021561021036600461095e565b6108ce565b6040516100f19190610abb565b6001600160a01b03821660009081526003602090815260408083208484529091529020545b92915050565b6001600160a01b03811660009081526004602052604081205481905b6102766201518042610b15565b81116102c8576001600160a01b038416600090815260026020908152604080832084845290915290205460ff16156102b657816102b281610b37565b9250505b806102c081610b37565b915050610269565b5092915050565b60006102de6201518042610b15565b905090565b6000600582815481106102f8576102f8610b50565b6000918252602090912001546001600160a01b031692915050565b6040805180820190915260008152606060208201526001600160a01b038316600090815260016020526040902080548390811061035257610352610b50565b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461038590610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546103b190610b66565b80156103fe5780601f106103d3576101008083540402835291602001916103fe565b820191906000526020600020905b8154815290600101906020018083116103e157829003601f168201915b505050505081525050905092915050565b6001600160a01b038216600090815260016020526040902054606090821061046e5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260016020526040902080548390811061049857610498610b50565b906000526020600020906002020160010180546104b490610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546104e090610b66565b801561052d5780601f106105025761010080835404028352916020019161052d565b820191906000526020600020905b81548152906001019060200180831161051057829003601f168201915b5050505050905092915050565b6000604051806040016040528042815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505033815260016020818152604083208054808401825590845292819020855160029094020192835584015193945084939192508201906105c49082610c05565b505033600090815260026020526040812083519092506105e8906201518090610b15565b815260208101919091526040016000205460ff1661072757336000908152600260205260408120825160019290610623906201518090610b15565b815260208082019290925260409081016000908120805460ff191694151594909417909355338352600390915281208251909190610665906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161069291610cc5565b8154600181018355600092835260208084209091019190915533825260049052604081205490036107225780516106cd906201518090610b15565b336000818152600460205260408120929092556005805460018101825592527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910180546001600160a01b03191690911790555b61078d565b3360009081526003602052604081208251909190610749906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161077691610cc5565b815460018101835560009283526020909220909101555b805160405133917f7c7673cbcea84bd307d18815393ee76593a1e3c9e133d9301a6636b37c9fb170916107c4919087908790610cd8565b60405180910390a2505050565b6000546001600160a01b0316331461082b5760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610465565b6001600160a01b0381166108735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610465565b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260036020908152604080832084845282529182902080548351818402810184019094528084526060939283018282801561052d57602002820191906000526020600020905b815481526020019060010190808311610922575050505050905092915050565b80356001600160a01b038116811461095957600080fd5b919050565b6000806040838503121561097157600080fd5b61097a83610942565b946020939093013593505050565b60006020828403121561099a57600080fd5b6109a382610942565b9392505050565b6000602082840312156109bc57600080fd5b5035919050565b6000815180845260005b818110156109e9576020818501810151868301820152016109cd565b506000602082860101526020601f19601f83011685010191505092915050565b602081528151602082015260006020830151604080840152610a2e60608401826109c3565b949350505050565b6020815260006109a360208301846109c3565b60008060208385031215610a5c57600080fd5b823567ffffffffffffffff80821115610a7457600080fd5b818501915085601f830112610a8857600080fd5b813581811115610a9757600080fd5b866020828501011115610aa957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610af357835183529284019291840191600101610ad7565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b600082610b3257634e487b7160e01b600052601260045260246000fd5b500490565b600060018201610b4957610b49610aff565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680610b7a57607f821691505b602082108103610b9a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610c0057600081815260208120601f850160051c81016020861015610bdd5750805b601f850160051c820191505b81811015610bfc57828155600101610be9565b5050505b505050565b815167ffffffffffffffff811115610c1f57610c1f610ba0565b610c3381610c2d8454610b66565b84610bb6565b602080601f831160018114610c685760008415610c505750858301515b600019600386901b1c1916600185901b178555610bfc565b600085815260208120601f198616915b82811015610c9757888601518255948401946001909101908401610c78565b5085821015610cb55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561024757610247610aff565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea2646970667358221220a82f264cab54d8990d47b5baaf35f31d20e8f1df3c52a3a9553ad9dc19e0b15264736f6c63430008150033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80635f1e2c721161008c5780637b712492116100665780637b712492146101da5780638c1cc04e14610136578063a6f9dae1146101ef578063c3ff6d6b1461020257600080fd5b80635f1e2c721461019257806361ea7208146101b25780636c424ec8146101ba57600080fd5b806301c27880146100d457806317a7bc5e146100fa57806326b071041461012357806327c15a12146101365780633e6968b61461015f578063446e847f14610167575b600080fd5b6100e76100e236600461095e565b610222565b6040519081526020015b60405180910390f35b6100e7610108366004610988565b6001600160a01b031660009081526004602052604090205490565b6100e7610131366004610988565b61024d565b6100e7610144366004610988565b6001600160a01b031660009081526001602052604090205490565b6100e76102cf565b61017a6101753660046109aa565b6102e3565b6040516001600160a01b0390911681526020016100f1565b6101a56101a036600461095e565b610313565b6040516100f19190610a09565b6005546100e7565b6101cd6101c836600461095e565b61040f565b6040516100f19190610a36565b6101ed6101e8366004610a49565b61053a565b005b6101ed6101fd366004610988565b6107d1565b61021561021036600461095e565b6108ce565b6040516100f19190610abb565b6001600160a01b03821660009081526003602090815260408083208484529091529020545b92915050565b6001600160a01b03811660009081526004602052604081205481905b6102766201518042610b15565b81116102c8576001600160a01b038416600090815260026020908152604080832084845290915290205460ff16156102b657816102b281610b37565b9250505b806102c081610b37565b915050610269565b5092915050565b60006102de6201518042610b15565b905090565b6000600582815481106102f8576102f8610b50565b6000918252602090912001546001600160a01b031692915050565b6040805180820190915260008152606060208201526001600160a01b038316600090815260016020526040902080548390811061035257610352610b50565b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461038590610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546103b190610b66565b80156103fe5780601f106103d3576101008083540402835291602001916103fe565b820191906000526020600020905b8154815290600101906020018083116103e157829003601f168201915b505050505081525050905092915050565b6001600160a01b038216600090815260016020526040902054606090821061046e5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260016020526040902080548390811061049857610498610b50565b906000526020600020906002020160010180546104b490610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546104e090610b66565b801561052d5780601f106105025761010080835404028352916020019161052d565b820191906000526020600020905b81548152906001019060200180831161051057829003601f168201915b5050505050905092915050565b6000604051806040016040528042815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505033815260016020818152604083208054808401825590845292819020855160029094020192835584015193945084939192508201906105c49082610c05565b505033600090815260026020526040812083519092506105e8906201518090610b15565b815260208101919091526040016000205460ff1661072757336000908152600260205260408120825160019290610623906201518090610b15565b815260208082019290925260409081016000908120805460ff191694151594909417909355338352600390915281208251909190610665906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161069291610cc5565b8154600181018355600092835260208084209091019190915533825260049052604081205490036107225780516106cd906201518090610b15565b336000818152600460205260408120929092556005805460018101825592527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910180546001600160a01b03191690911790555b61078d565b3360009081526003602052604081208251909190610749906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161077691610cc5565b815460018101835560009283526020909220909101555b805160405133917f7c7673cbcea84bd307d18815393ee76593a1e3c9e133d9301a6636b37c9fb170916107c4919087908790610cd8565b60405180910390a2505050565b6000546001600160a01b0316331461082b5760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610465565b6001600160a01b0381166108735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610465565b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260036020908152604080832084845282529182902080548351818402810184019094528084526060939283018282801561052d57602002820191906000526020600020905b815481526020019060010190808311610922575050505050905092915050565b80356001600160a01b038116811461095957600080fd5b919050565b6000806040838503121561097157600080fd5b61097a83610942565b946020939093013593505050565b60006020828403121561099a57600080fd5b6109a382610942565b9392505050565b6000602082840312156109bc57600080fd5b5035919050565b6000815180845260005b818110156109e9576020818501810151868301820152016109cd565b506000602082860101526020601f19601f83011685010191505092915050565b602081528151602082015260006020830151604080840152610a2e60608401826109c3565b949350505050565b6020815260006109a360208301846109c3565b60008060208385031215610a5c57600080fd5b823567ffffffffffffffff80821115610a7457600080fd5b818501915085601f830112610a8857600080fd5b813581811115610a9757600080fd5b866020828501011115610aa957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610af357835183529284019291840191600101610ad7565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b600082610b3257634e487b7160e01b600052601260045260246000fd5b500490565b600060018201610b4957610b49610aff565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680610b7a57607f821691505b602082108103610b9a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610c0057600081815260208120601f850160051c81016020861015610bdd5750805b601f850160051c820191505b81811015610bfc57828155600101610be9565b5050505b505050565b815167ffffffffffffffff811115610c1f57610c1f610ba0565b610c3381610c2d8454610b66565b84610bb6565b602080601f831160018114610c685760008415610c505750858301515b600019600386901b1c1916600185901b178555610bfc565b600085815260208120601f198616915b82811015610c9757888601518255948401946001909101908401610c78565b5085821015610cb55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561024757610247610aff565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea2646970667358221220a82f264cab54d8990d47b5baaf35f31d20e8f1df3c52a3a9553ad9dc19e0b15264736f6c63430008150033