false
false

Contract Address Details

0x5c190f7253930C473822AcDED40B2eF1936B4075

Contract Name
ECHeartBeat
Creator
0x0aef73–e763b2 at 0xb5a93b–389aff
Balance
0 Berg
Tokens
Fetching tokens...
Transactions
6,984,616 Transactions
Transfers
0 Transfers
Gas Used
831,270,254,384
Last Balance Update
29769467
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
default




Verified at
2023-10-19T06:57:44.931649Z

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

0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610d44806100326000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80635f1e2c721161008c5780637b712492116100665780637b712492146101da5780638c1cc04e14610136578063a6f9dae1146101ef578063c3ff6d6b1461020257600080fd5b80635f1e2c721461019257806361ea7208146101b25780636c424ec8146101ba57600080fd5b806301c27880146100d457806317a7bc5e146100fa57806326b071041461012357806327c15a12146101365780633e6968b61461015f578063446e847f14610167575b600080fd5b6100e76100e236600461095e565b610222565b6040519081526020015b60405180910390f35b6100e7610108366004610988565b6001600160a01b031660009081526004602052604090205490565b6100e7610131366004610988565b61024d565b6100e7610144366004610988565b6001600160a01b031660009081526001602052604090205490565b6100e76102cf565b61017a6101753660046109aa565b6102e3565b6040516001600160a01b0390911681526020016100f1565b6101a56101a036600461095e565b610313565b6040516100f19190610a09565b6005546100e7565b6101cd6101c836600461095e565b61040f565b6040516100f19190610a36565b6101ed6101e8366004610a49565b61053a565b005b6101ed6101fd366004610988565b6107d1565b61021561021036600461095e565b6108ce565b6040516100f19190610abb565b6001600160a01b03821660009081526003602090815260408083208484529091529020545b92915050565b6001600160a01b03811660009081526004602052604081205481905b6102766201518042610b15565b81116102c8576001600160a01b038416600090815260026020908152604080832084845290915290205460ff16156102b657816102b281610b37565b9250505b806102c081610b37565b915050610269565b5092915050565b60006102de6201518042610b15565b905090565b6000600582815481106102f8576102f8610b50565b6000918252602090912001546001600160a01b031692915050565b6040805180820190915260008152606060208201526001600160a01b038316600090815260016020526040902080548390811061035257610352610b50565b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461038590610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546103b190610b66565b80156103fe5780601f106103d3576101008083540402835291602001916103fe565b820191906000526020600020905b8154815290600101906020018083116103e157829003601f168201915b505050505081525050905092915050565b6001600160a01b038216600090815260016020526040902054606090821061046e5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260016020526040902080548390811061049857610498610b50565b906000526020600020906002020160010180546104b490610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546104e090610b66565b801561052d5780601f106105025761010080835404028352916020019161052d565b820191906000526020600020905b81548152906001019060200180831161051057829003601f168201915b5050505050905092915050565b6000604051806040016040528042815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505033815260016020818152604083208054808401825590845292819020855160029094020192835584015193945084939192508201906105c49082610c05565b505033600090815260026020526040812083519092506105e8906201518090610b15565b815260208101919091526040016000205460ff1661072757336000908152600260205260408120825160019290610623906201518090610b15565b815260208082019290925260409081016000908120805460ff191694151594909417909355338352600390915281208251909190610665906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161069291610cc5565b8154600181018355600092835260208084209091019190915533825260049052604081205490036107225780516106cd906201518090610b15565b336000818152600460205260408120929092556005805460018101825592527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910180546001600160a01b03191690911790555b61078d565b3360009081526003602052604081208251909190610749906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161077691610cc5565b815460018101835560009283526020909220909101555b805160405133917f7c7673cbcea84bd307d18815393ee76593a1e3c9e133d9301a6636b37c9fb170916107c4919087908790610cd8565b60405180910390a2505050565b6000546001600160a01b0316331461082b5760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610465565b6001600160a01b0381166108735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610465565b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260036020908152604080832084845282529182902080548351818402810184019094528084526060939283018282801561052d57602002820191906000526020600020905b815481526020019060010190808311610922575050505050905092915050565b80356001600160a01b038116811461095957600080fd5b919050565b6000806040838503121561097157600080fd5b61097a83610942565b946020939093013593505050565b60006020828403121561099a57600080fd5b6109a382610942565b9392505050565b6000602082840312156109bc57600080fd5b5035919050565b6000815180845260005b818110156109e9576020818501810151868301820152016109cd565b506000602082860101526020601f19601f83011685010191505092915050565b602081528151602082015260006020830151604080840152610a2e60608401826109c3565b949350505050565b6020815260006109a360208301846109c3565b60008060208385031215610a5c57600080fd5b823567ffffffffffffffff80821115610a7457600080fd5b818501915085601f830112610a8857600080fd5b813581811115610a9757600080fd5b866020828501011115610aa957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610af357835183529284019291840191600101610ad7565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b600082610b3257634e487b7160e01b600052601260045260246000fd5b500490565b600060018201610b4957610b49610aff565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680610b7a57607f821691505b602082108103610b9a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610c0057600081815260208120601f850160051c81016020861015610bdd5750805b601f850160051c820191505b81811015610bfc57828155600101610be9565b5050505b505050565b815167ffffffffffffffff811115610c1f57610c1f610ba0565b610c3381610c2d8454610b66565b84610bb6565b602080601f831160018114610c685760008415610c505750858301515b600019600386901b1c1916600185901b178555610bfc565b600085815260208120601f198616915b82811015610c9757888601518255948401946001909101908401610c78565b5085821015610cb55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561024757610247610aff565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea264697066735822122046514a25f17a7dd20d01e2ff961e6f0f6fe39116e5b1329396ff07262a9fc5ed64736f6c63430008130033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80635f1e2c721161008c5780637b712492116100665780637b712492146101da5780638c1cc04e14610136578063a6f9dae1146101ef578063c3ff6d6b1461020257600080fd5b80635f1e2c721461019257806361ea7208146101b25780636c424ec8146101ba57600080fd5b806301c27880146100d457806317a7bc5e146100fa57806326b071041461012357806327c15a12146101365780633e6968b61461015f578063446e847f14610167575b600080fd5b6100e76100e236600461095e565b610222565b6040519081526020015b60405180910390f35b6100e7610108366004610988565b6001600160a01b031660009081526004602052604090205490565b6100e7610131366004610988565b61024d565b6100e7610144366004610988565b6001600160a01b031660009081526001602052604090205490565b6100e76102cf565b61017a6101753660046109aa565b6102e3565b6040516001600160a01b0390911681526020016100f1565b6101a56101a036600461095e565b610313565b6040516100f19190610a09565b6005546100e7565b6101cd6101c836600461095e565b61040f565b6040516100f19190610a36565b6101ed6101e8366004610a49565b61053a565b005b6101ed6101fd366004610988565b6107d1565b61021561021036600461095e565b6108ce565b6040516100f19190610abb565b6001600160a01b03821660009081526003602090815260408083208484529091529020545b92915050565b6001600160a01b03811660009081526004602052604081205481905b6102766201518042610b15565b81116102c8576001600160a01b038416600090815260026020908152604080832084845290915290205460ff16156102b657816102b281610b37565b9250505b806102c081610b37565b915050610269565b5092915050565b60006102de6201518042610b15565b905090565b6000600582815481106102f8576102f8610b50565b6000918252602090912001546001600160a01b031692915050565b6040805180820190915260008152606060208201526001600160a01b038316600090815260016020526040902080548390811061035257610352610b50565b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461038590610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546103b190610b66565b80156103fe5780601f106103d3576101008083540402835291602001916103fe565b820191906000526020600020905b8154815290600101906020018083116103e157829003601f168201915b505050505081525050905092915050565b6001600160a01b038216600090815260016020526040902054606090821061046e5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260016020526040902080548390811061049857610498610b50565b906000526020600020906002020160010180546104b490610b66565b80601f01602080910402602001604051908101604052809291908181526020018280546104e090610b66565b801561052d5780601f106105025761010080835404028352916020019161052d565b820191906000526020600020905b81548152906001019060200180831161051057829003601f168201915b5050505050905092915050565b6000604051806040016040528042815260200184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505033815260016020818152604083208054808401825590845292819020855160029094020192835584015193945084939192508201906105c49082610c05565b505033600090815260026020526040812083519092506105e8906201518090610b15565b815260208101919091526040016000205460ff1661072757336000908152600260205260408120825160019290610623906201518090610b15565b815260208082019290925260409081016000908120805460ff191694151594909417909355338352600390915281208251909190610665906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161069291610cc5565b8154600181018355600092835260208084209091019190915533825260049052604081205490036107225780516106cd906201518090610b15565b336000818152600460205260408120929092556005805460018101825592527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910180546001600160a01b03191690911790555b61078d565b3360009081526003602052604081208251909190610749906201518090610b15565b81526020808201929092526040908101600090812033825260019384905291902054909161077691610cc5565b815460018101835560009283526020909220909101555b805160405133917f7c7673cbcea84bd307d18815393ee76593a1e3c9e133d9301a6636b37c9fb170916107c4919087908790610cd8565b60405180910390a2505050565b6000546001600160a01b0316331461082b5760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610465565b6001600160a01b0381166108735760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610465565b600080546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260036020908152604080832084845282529182902080548351818402810184019094528084526060939283018282801561052d57602002820191906000526020600020905b815481526020019060010190808311610922575050505050905092915050565b80356001600160a01b038116811461095957600080fd5b919050565b6000806040838503121561097157600080fd5b61097a83610942565b946020939093013593505050565b60006020828403121561099a57600080fd5b6109a382610942565b9392505050565b6000602082840312156109bc57600080fd5b5035919050565b6000815180845260005b818110156109e9576020818501810151868301820152016109cd565b506000602082860101526020601f19601f83011685010191505092915050565b602081528151602082015260006020830151604080840152610a2e60608401826109c3565b949350505050565b6020815260006109a360208301846109c3565b60008060208385031215610a5c57600080fd5b823567ffffffffffffffff80821115610a7457600080fd5b818501915085601f830112610a8857600080fd5b813581811115610a9757600080fd5b866020828501011115610aa957600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610af357835183529284019291840191600101610ad7565b50909695505050505050565b634e487b7160e01b600052601160045260246000fd5b600082610b3257634e487b7160e01b600052601260045260246000fd5b500490565b600060018201610b4957610b49610aff565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680610b7a57607f821691505b602082108103610b9a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f821115610c0057600081815260208120601f850160051c81016020861015610bdd5750805b601f850160051c820191505b81811015610bfc57828155600101610be9565b5050505b505050565b815167ffffffffffffffff811115610c1f57610c1f610ba0565b610c3381610c2d8454610b66565b84610bb6565b602080601f831160018114610c685760008415610c505750858301515b600019600386901b1c1916600185901b178555610bfc565b600085815260208120601f198616915b82811015610c9757888601518255948401946001909101908401610c78565b5085821015610cb55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561024757610247610aff565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f191601019291505056fea264697066735822122046514a25f17a7dd20d01e2ff961e6f0f6fe39116e5b1329396ff07262a9fc5ed64736f6c63430008130033