ETH Price: $3,406.30 (+2.53%)

Contract

0xd909C5862Cdb164aDB949D92622082f0092eFC3d
 

Overview

ETH Balance

0.009679423372552321 ETH

Eth Value

$32.97 (@ $3,406.30/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer212472142024-11-23 1:40:5931 days ago1732326059IN
Interest Protocol: IPT Token
0 ETH0.0005431311.99603801
Approve210759332024-10-30 3:59:4755 days ago1730260787IN
Interest Protocol: IPT Token
0 ETH0.0005736911.10435366
Approve209981622024-10-19 7:36:3565 days ago1729323395IN
Interest Protocol: IPT Token
0 ETH0.000448648.69795193
Delegate208724242024-10-01 18:25:5983 days ago1727807159IN
Interest Protocol: IPT Token
0 ETH0.000962418
Propose208157692024-09-23 20:47:4791 days ago1727124467IN
Interest Protocol: IPT Token
0 ETH0.0005010415.741193
Propose208157612024-09-23 20:46:1191 days ago1727124371IN
Interest Protocol: IPT Token
0 ETH0.0005158116.20537373
Approve208098542024-09-23 0:58:3592 days ago1727053115IN
Interest Protocol: IPT Token
0 ETH0.00036267.02017883
Approve207014882024-09-07 21:42:47107 days ago1725745367IN
Interest Protocol: IPT Token
0 ETH0.000065651.26667412
Approve205860492024-08-22 18:50:59123 days ago1724352659IN
Interest Protocol: IPT Token
0 ETH0.000082881.60465462
Delegate205703642024-08-20 14:14:59125 days ago1724163299IN
Interest Protocol: IPT Token
0 ETH0.000437833.75081127
Delegate204716232024-08-06 19:29:35139 days ago1722972575IN
Interest Protocol: IPT Token
0 ETH0.000226041.93647774
Transfer203944962024-07-27 1:07:23150 days ago1722042443IN
Interest Protocol: IPT Token
0 ETH0.000082061.42541944
Delegate203552612024-07-21 13:38:11155 days ago1721569091IN
Interest Protocol: IPT Token
0 ETH0.000257472.55309133
Approve203192802024-07-16 13:10:11160 days ago1721135411IN
Interest Protocol: IPT Token
0 ETH0.000243278.20316579
Approve199550062024-05-26 15:40:35211 days ago1716738035IN
Interest Protocol: IPT Token
0 ETH0.0006192811.98391246
Approve199478142024-05-25 15:33:59212 days ago1716651239IN
Interest Protocol: IPT Token
0 ETH0.000271965.25348466
Approve199221882024-05-22 1:34:59216 days ago1716341699IN
Interest Protocol: IPT Token
0 ETH0.000387397.5
Delegate198428152024-05-10 23:07:47227 days ago1715382467IN
Interest Protocol: IPT Token
0 ETH0.000623466.08742485
Delegate198427932024-05-10 23:03:11227 days ago1715382191IN
Interest Protocol: IPT Token
0 ETH0.000453765.24355431
Approve197782442024-05-01 22:23:23236 days ago1714602203IN
Interest Protocol: IPT Token
0 ETH0.000396587.65182255
Approve197782352024-05-01 22:21:35236 days ago1714602095IN
Interest Protocol: IPT Token
0 ETH0.000292755.65511066
Approve196704452024-04-16 20:32:47251 days ago1713299567IN
Interest Protocol: IPT Token
0 ETH0.000471449.12936432
Transfer196648752024-04-16 1:48:59252 days ago1713232139IN
Interest Protocol: IPT Token
0 ETH0.000721137.95491091
Approve196537052024-04-14 12:14:47253 days ago1713096887IN
Interest Protocol: IPT Token
0 ETH0.000517039.98729205
Approve196067792024-04-07 22:26:59260 days ago1712528819IN
Interest Protocol: IPT Token
0 ETH0.0011283621.79616302
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xaF239a6f...4287b93e1
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
InterestProtocolToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : TokenDelegator.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
pragma experimental ABIEncoderV2;

import "./IToken.sol";
import "./TokenStorage.sol";

contract InterestProtocolToken is TokenDelegatorStorage, TokenEvents, ITokenDelegator {
  constructor(
    address account_,
    address owner_,
    address implementation_,
    uint256 initialSupply_
  ) {
    require(implementation_ != address(0), "TokenDelegator: invalid address");
    owner = owner_;
    delegateTo(implementation_, abi.encodeWithSignature("initialize(address,uint256)", account_, initialSupply_));

    implementation = implementation_;

    emit NewImplementation(address(0), implementation);
  }

  /**
   * @notice Called by the admin to update the implementation of the delegator
   * @param implementation_ The address of the new implementation for delegation
   */
  function _setImplementation(address implementation_) external override onlyOwner {
    require(implementation_ != address(0), "_setImplementation: invalid addr");

    address oldImplementation = implementation;
    implementation = implementation_;

    emit NewImplementation(oldImplementation, implementation);
  }

  /**
   * @notice Called by the admin to update the owner of the delegator
   * @param owner_ The address of the new owner
   */
  function _setOwner(address owner_) external override onlyOwner {
    owner = owner_;
  }

  /**
   * @notice Internal method to delegate execution to another contract
   * @dev It returns to the external caller whatever the implementation returns or forwards reverts
   * @param callee The contract to delegatecall
   * @param data The raw data to delegatecall
   */
  function delegateTo(address callee, bytes memory data) internal {
    //solhint-disable-next-line avoid-low-level-calls
    (bool success, bytes memory returnData) = callee.delegatecall(data);
    //solhint-disable-next-line no-inline-assembly
    assembly {
      if eq(success, 0) {
        revert(add(returnData, 0x20), returndatasize())
      }
    }
  }

  /**
   * @dev Delegates execution to an implementation contract.
   * It returns to the external caller whatever the implementation returns
   * or forwards reverts.
   */
  // solhint-disable-next-line no-complex-fallback
  fallback() external payable override {
    // delegate all other functions to current implementation
    //solhint-disable-next-line avoid-low-level-calls
    (bool success, ) = implementation.delegatecall(msg.data);
    //solhint-disable-next-line no-inline-assembly
    assembly {
      let free_mem_ptr := mload(0x40)
      returndatacopy(free_mem_ptr, 0, returndatasize())
      switch success
      case 0 {
        revert(free_mem_ptr, returndatasize())
      }
      default {
        return(free_mem_ptr, returndatasize())
      }
    }
  }

  receive() external payable override {}
}

File 2 of 4 : IToken.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
pragma experimental ABIEncoderV2;

/// @title interface to interact with TokenDelgator
interface ITokenDelegator {
  function _setImplementation(address implementation_) external;

  function _setOwner(address owner_) external;

  fallback() external payable;

  receive() external payable;
}

/// @title interface to interact with TokenDelgate
interface ITokenDelegate {
  function initialize(address account_, uint256 initialSupply_) external;

  function changeName(string calldata name_) external;

  function changeSymbol(string calldata symbol_) external;

  function allowance(address account, address spender) external view returns (uint256);

  function approve(address spender, uint256 rawAmount) external returns (bool);

  function balanceOf(address account) external view returns (uint256);

  function transfer(address dst, uint256 rawAmount) external returns (bool);

  function transferFrom(
    address src,
    address dst,
    uint256 rawAmount
  ) external returns (bool);

  function mint(address dst, uint256 rawAmount) external;

  function permit(
    address owner,
    address spender,
    uint256 rawAmount,
    uint256 deadline,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external;

  function delegate(address delegatee) external;

  function delegateBySig(
    address delegatee,
    uint256 nonce,
    uint256 expiry,
    uint8 v,
    bytes32 r,
    bytes32 s
  ) external;

  function getCurrentVotes(address account) external view returns (uint96);

  function getPriorVotes(address account, uint256 blockNumber) external view returns (uint96);
}

/// @title interface which contains all events emitted by delegator & delegate
interface TokenEvents {
  /// @notice An event thats emitted when an account changes its delegate
  event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

  /// @notice An event thats emitted when a delegate account's vote balance changes
  event DelegateVotesChanged(address indexed delegate, uint256 previousBalance, uint256 newBalance);

  /// @notice An event thats emitted when the minter changes
  event MinterChanged(address indexed oldMinter, address indexed newMinter);

  /// @notice The standard EIP-20 transfer event
  event Transfer(address indexed from, address indexed to, uint256 amount);

  /// @notice The standard EIP-20 approval event
  event Approval(address indexed owner, address indexed spender, uint256 amount);

  /// @notice Emitted when implementation is changed
  event NewImplementation(address oldImplementation, address newImplementation);

  /// @notice An event thats emitted when the token symbol is changed
  event ChangedSymbol(string oldSybmol, string newSybmol);

  /// @notice An event thats emitted when the token name is changed
  event ChangedName(string oldName, string newName);
}

File 3 of 4 : TokenStorage.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
pragma experimental ABIEncoderV2;

import "../../_external/Context.sol";

contract TokenDelegatorStorage is Context {
  /// @notice Active brains of Token
  address public implementation;

  /// @notice EIP-20 token name for this token
  string public name = "Interest Protocol";

  /// @notice EIP-20 token symbol for this token
  string public symbol = "IPT";

  /// @notice Total number of tokens in circulation
  uint256 public totalSupply;

  /// @notice EIP-20 token decimals for this token
  uint8 public constant decimals = 18;

  address public owner;
  /// @notice onlyOwner modifier checks if sender is owner
  modifier onlyOwner() {
    require(owner == _msgSender(), "onlyOwner: sender not owner");
    _;
  }
}

/**
 * @title Storage for Token Delegate
 * @notice For future upgrades, do not change TokenDelegateStorageV1. Create a new
 * contract which implements TokenDelegateStorageV1 and following the naming convention
 * TokenDelegateStorageVX.
 */
contract TokenDelegateStorageV1 is TokenDelegatorStorage {
  // Allowance amounts on behalf of others
  mapping(address => mapping(address => uint96)) internal allowances;

  // Official record of token balances for each account
  mapping(address => uint96) internal balances;

  /// @notice A record of each accounts delegate
  mapping(address => address) public delegates;

  /// @notice A checkpoint for marking number of votes from a given block
  struct Checkpoint {
    uint32 fromBlock;
    uint96 votes;
  }
  /// @notice A record of votes checkpoints for each account, by index
  mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

  /// @notice The number of checkpoints for each account
  mapping(address => uint32) public numCheckpoints;

  /// @notice A record of states for signing / validating signatures
  mapping(address => uint256) public nonces;
}

File 4 of 4 : Context.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
  function _msgSender() internal view virtual returns (address) {
    return msg.sender;
  }

  function _msgData() internal view virtual returns (bytes calldata) {
    this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "orderLiterals": true,
      "deduplicate": true,
      "cse": true,
      "yul": true
    }
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"implementation_","type":"address"},{"internalType":"uint256","name":"initialSupply_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"oldName","type":"string"},{"indexed":false,"internalType":"string","name":"newName","type":"string"}],"name":"ChangedName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"oldSybmol","type":"string"},{"indexed":false,"internalType":"string","name":"newSybmol","type":"string"}],"name":"ChangedSymbol","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMinter","type":"address"},{"indexed":true,"internalType":"address","name":"newMinter","type":"address"}],"name":"MinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"implementation_","type":"address"}],"name":"_setImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"_setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x60806040526004361061007f5760003560e01c80638da5cb5b1161004e5780638da5cb5b146101af57806395d89b41146101cf578063bb913f41146101e4578063fc2011221461020657610086565b806306fdde031461010157806318160ddd1461012c578063313ce567146101505780635c60da1b1461017757610086565b3661008657005b600080546040516001600160a01b03909116906100a69083903690610453565b600060405180830381855af49150503d80600081146100e1576040519150601f19603f3d011682016040523d82523d6000602084013e6100e6565b606091505b505090506040513d6000823e8180156100fd573d82f35b3d82fd5b34801561010d57600080fd5b50610116610226565b6040516101239190610463565b60405180910390f35b34801561013857600080fd5b5061014260035481565b604051908152602001610123565b34801561015c57600080fd5b50610165601281565b60405160ff9091168152602001610123565b34801561018357600080fd5b50600054610197906001600160a01b031681565b6040516001600160a01b039091168152602001610123565b3480156101bb57600080fd5b50600454610197906001600160a01b031681565b3480156101db57600080fd5b506101166102b4565b3480156101f057600080fd5b506102046101ff3660046104b8565b6102c1565b005b34801561021257600080fd5b506102046102213660046104b8565b6103d7565b60018054610233906104e8565b80601f016020809104026020016040519081016040528092919081815260200182805461025f906104e8565b80156102ac5780601f10610281576101008083540402835291602001916102ac565b820191906000526020600020905b81548152906001019060200180831161028f57829003601f168201915b505050505081565b60028054610233906104e8565b6004546001600160a01b031633146103205760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c794f776e65723a2073656e646572206e6f74206f776e6572000000000060448201526064015b60405180910390fd5b6001600160a01b0381166103765760405162461bcd60e51b815260206004820181905260248201527f5f736574496d706c656d656e746174696f6e3a20696e76616c696420616464726044820152606401610317565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a15050565b6004546001600160a01b031633146104315760405162461bcd60e51b815260206004820152601b60248201527f6f6e6c794f776e65723a2073656e646572206e6f74206f776e657200000000006044820152606401610317565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b8183823760009101908152919050565b600060208083528351808285015260005b8181101561049057858101830151858201604001528201610474565b818111156104a2576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156104ca57600080fd5b81356001600160a01b03811681146104e157600080fd5b9392505050565b600181811c908216806104fc57607f821691505b6020821081141561051d57634e487b7160e01b600052602260045260246000fd5b5091905056fea264697066735822122030726c53700bc0a134db0774685b9f4c81bce607a2b087f9ed21a1685c6c933064736f6c63430008090033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Interest Protocol is a new borrow/lend protocol that is highly capital-efficient thanks to its unique combination of fractional reserves and over-collateralization.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.