Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 13797071 | 1092 days ago | IN | 0 ETH | 0.001234 | ||||
Set Token Config... | 12389917 | 1312 days ago | IN | 0 ETH | 0.00630524 | ||||
Set Token Config... | 12389907 | 1312 days ago | IN | 0 ETH | 0.00630445 | ||||
Set Token Config... | 12389901 | 1312 days ago | IN | 0 ETH | 0.00630524 | ||||
Set Token Config... | 12389891 | 1312 days ago | IN | 0 ETH | 0.00630524 | ||||
Set Token Config... | 12389884 | 1312 days ago | IN | 0 ETH | 0.00630524 | ||||
Set Token Config... | 12386621 | 1312 days ago | IN | 0 ETH | 0.00338985 | ||||
Set Token Config... | 12386602 | 1312 days ago | IN | 0 ETH | 0.00338985 | ||||
Set Token Config... | 12386587 | 1312 days ago | IN | 0 ETH | 0.00338985 | ||||
Set Token Config... | 12386572 | 1312 days ago | IN | 0 ETH | 0.00338943 | ||||
Set Token Config... | 12386474 | 1312 days ago | IN | 0 ETH | 0.00401192 | ||||
Set Token Config... | 12386465 | 1312 days ago | IN | 0 ETH | 0.00401242 | ||||
Transfer Ownersh... | 12380795 | 1313 days ago | IN | 0 ETH | 0.00137409 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ChainlinkPriceOracleProxy
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.16; import "./CTokenInterfaces.sol"; import "./SafeMath.sol"; // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/GSN/Context.sol /* * @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 GSN 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. */ contract Context { function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // Source: https://github.com/smartcontractkit/chainlink/blob/develop/evm-contracts/src/v0.6/interfaces/AggregatorV3Interface.sol interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract PriceOracle { /// @notice Indicator that this is a PriceOracle contract (for inspection) bool public constant isPriceOracle = true; /** * @notice Get the underlying price of a cToken asset * @param cToken The cToken to get the underlying price of * @return The underlying asset price mantissa (scaled by 1e18). * Zero means the price is unavailable. */ function getUnderlyingPrice(CTokenInterface cToken) external view returns (uint256); } contract ChainlinkPriceOracleProxy is Ownable, PriceOracle { using SafeMath for uint256; /// @notice Indicator that this is a PriceOracle contract (for inspection) bool public constant isPriceOracle = true; address public ethUsdChainlinkAggregatorAddress; address public bnbUsdChainlinkAggregatorAddress; address public btcUsdChainlinkAggregatorAddress; struct TokenConfig { address chainlinkAggregatorAddress; uint256 chainlinkPriceBase; // 0: Invalid, 1: USD, 2: ETH uint256 underlyingTokenDecimals; } mapping(address => TokenConfig) public tokenConfig; constructor(address ethUsdChainlinkAggregatorAddress_, address bnbUsdChainlinkAggregatorAddress_, address btcUsdChainlinkAggregatorAddress_) public { ethUsdChainlinkAggregatorAddress = ethUsdChainlinkAggregatorAddress_; bnbUsdChainlinkAggregatorAddress = bnbUsdChainlinkAggregatorAddress_; btcUsdChainlinkAggregatorAddress = btcUsdChainlinkAggregatorAddress_; } /** * @notice Get the underlying price of a cToken * @dev Implements the PriceOracle interface for Compound v2. * @param cToken The cToken address for price retrieval * @return Price denominated in USD, with 18 decimals, for the given cToken address. Comptroller needs prices in the format: ${raw price} * 1e(36 - baseUnit) */ function getUnderlyingPrice(CTokenInterface cToken) public view returns (uint256) { TokenConfig memory config = tokenConfig[address(cToken)]; (, int256 chainlinkPrice, , , ) = AggregatorV3Interface( config .chainlinkAggregatorAddress ) .latestRoundData(); require(chainlinkPrice > 0, "Chainlink price feed invalid"); uint256 underlyingPrice; if (config.chainlinkPriceBase == 1) { underlyingPrice = uint256(chainlinkPrice).mul(1e28).div( 10**config.underlyingTokenDecimals ); } else if (config.chainlinkPriceBase == 2) { //ETH (, int256 ethPriceInUsd, , , ) = AggregatorV3Interface( ethUsdChainlinkAggregatorAddress ) .latestRoundData(); require(ethPriceInUsd > 0, "ETH price invalid"); underlyingPrice = uint256(chainlinkPrice) .mul(uint256(ethPriceInUsd)) .mul(1e10) .div(10**config.underlyingTokenDecimals); } else if (config.chainlinkPriceBase == 3) { //BNB (, int256 bnbPriceInUsd, , , ) = AggregatorV3Interface( bnbUsdChainlinkAggregatorAddress ) .latestRoundData(); require(bnbPriceInUsd > 0, "BNB price invalid"); underlyingPrice = uint256(chainlinkPrice) .mul(uint256(bnbPriceInUsd)) .mul(1e10) .div(10**config.underlyingTokenDecimals); } else if (config.chainlinkPriceBase == 4) { //BTC (, int256 btcPriceInUsd, , , ) = AggregatorV3Interface( btcUsdChainlinkAggregatorAddress ) .latestRoundData(); require(btcPriceInUsd > 0, "BTC price invalid"); underlyingPrice = uint256(chainlinkPrice) .mul(uint256(btcPriceInUsd)) .mul(1e10) .div(10**config.underlyingTokenDecimals); } else { revert("Token config invalid"); } require(underlyingPrice > 0, "Underlying price invalid"); return underlyingPrice; } function setEthUsdChainlinkAggregatorAddress(address addr) external onlyOwner { ethUsdChainlinkAggregatorAddress = addr; } function setTokenConfigs( address[] calldata cTokenAddress, address[] calldata chainlinkAggregatorAddress, uint256[] calldata chainlinkPriceBase, uint256[] calldata underlyingTokenDecimals ) external onlyOwner { require( cTokenAddress.length == chainlinkAggregatorAddress.length && cTokenAddress.length == chainlinkPriceBase.length && cTokenAddress.length == underlyingTokenDecimals.length, "Arguments must have same length" ); for (uint256 i = 0; i < cTokenAddress.length; i++) { tokenConfig[cTokenAddress[i]] = TokenConfig({ chainlinkAggregatorAddress: chainlinkAggregatorAddress[i], chainlinkPriceBase: chainlinkPriceBase[i], underlyingTokenDecimals: underlyingTokenDecimals[i] }); emit TokenConfigUpdated( cTokenAddress[i], chainlinkAggregatorAddress[i], chainlinkPriceBase[i], underlyingTokenDecimals[i] ); } } event TokenConfigUpdated( address cTokenAddress, address chainlinkAggregatorAddress, uint256 chainlinkPriceBase, uint256 underlyingTokenDecimals ); }
pragma solidity ^0.5.16; import "./ComptrollerInterface.sol"; import "./InterestRateModel.sol"; import "./EIP20NonStandardInterface.sol"; contract CTokenStorage { /** * @dev Guard variable for re-entrancy checks */ bool internal _notEntered; /** * @notice EIP-20 token name for this token */ string public name; /** * @notice EIP-20 token symbol for this token */ string public symbol; /** * @notice EIP-20 token decimals for this token */ uint8 public decimals; /** * @notice Maximum borrow rate that can ever be applied (.0005% / block) */ uint internal constant borrowRateMaxMantissa = 0.0005e16; /** * @notice Maximum fraction of interest that can be set aside for reserves */ uint internal constant reserveFactorMaxMantissa = 1e18; /** * @notice Administrator for this contract */ address payable public admin; /** * @notice Pending administrator for this contract */ address payable public pendingAdmin; /** * @notice Contract which oversees inter-cToken operations */ ComptrollerInterface public comptroller; /** * @notice Model which tells what the current interest rate should be */ InterestRateModel public interestRateModel; /** * @notice Initial exchange rate used when minting the first CTokens (used when totalSupply = 0) */ uint internal initialExchangeRateMantissa; /** * @notice Fraction of interest currently set aside for reserves */ uint public reserveFactorMantissa; /** * @notice Block number that interest was last accrued at */ uint public accrualBlockNumber; /** * @notice Accumulator of the total earned interest rate since the opening of the market */ uint public borrowIndex; /** * @notice Total amount of outstanding borrows of the underlying in this market */ uint public totalBorrows; /** * @notice Total amount of reserves of the underlying held in this market */ uint public totalReserves; /** * @notice Total number of tokens in circulation */ uint public totalSupply; /** * @notice Official record of token balances for each account */ mapping (address => uint) internal accountTokens; /** * @notice Approved token transfer amounts on behalf of others */ mapping (address => mapping (address => uint)) internal transferAllowances; /** * @notice Container for borrow balance information * @member principal Total balance (with accrued interest), after applying the most recent balance-changing action * @member interestIndex Global borrowIndex as of the most recent balance-changing action */ struct BorrowSnapshot { uint principal; uint interestIndex; } /** * @notice Mapping of account addresses to outstanding borrow balances */ mapping(address => BorrowSnapshot) internal accountBorrows; } contract CTokenInterface is CTokenStorage { /** * @notice Indicator that this is a CToken contract (for inspection) */ bool public constant isCToken = true; /*** Market Events ***/ /** * @notice Event emitted when interest is accrued */ event AccrueInterest(uint cashPrior, uint interestAccumulated, uint borrowIndex, uint totalBorrows); /** * @notice Event emitted when tokens are minted */ event Mint(address minter, uint mintAmount, uint mintTokens); /** * @notice Event emitted when tokens are redeemed */ event Redeem(address redeemer, uint redeemAmount, uint redeemTokens); /** * @notice Event emitted when underlying is borrowed */ event Borrow(address borrower, uint borrowAmount, uint accountBorrows, uint totalBorrows); /** * @notice Event emitted when a borrow is repaid */ event RepayBorrow(address payer, address borrower, uint repayAmount, uint accountBorrows, uint totalBorrows); /** * @notice Event emitted when a borrow is liquidated */ event LiquidateBorrow(address liquidator, address borrower, uint repayAmount, address cTokenCollateral, uint seizeTokens); /*** Admin Events ***/ /** * @notice Event emitted when pendingAdmin is changed */ event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); /** * @notice Event emitted when pendingAdmin is accepted, which means admin is updated */ event NewAdmin(address oldAdmin, address newAdmin); /** * @notice Event emitted when comptroller is changed */ event NewComptroller(ComptrollerInterface oldComptroller, ComptrollerInterface newComptroller); /** * @notice Event emitted when interestRateModel is changed */ event NewMarketInterestRateModel(InterestRateModel oldInterestRateModel, InterestRateModel newInterestRateModel); /** * @notice Event emitted when the reserve factor is changed */ event NewReserveFactor(uint oldReserveFactorMantissa, uint newReserveFactorMantissa); /** * @notice Event emitted when the reserves are added */ event ReservesAdded(address benefactor, uint addAmount, uint newTotalReserves); /** * @notice Event emitted when the reserves are reduced */ event ReservesReduced(address admin, uint reduceAmount, uint newTotalReserves); /** * @notice EIP20 Transfer event */ event Transfer(address indexed from, address indexed to, uint amount); /** * @notice EIP20 Approval event */ event Approval(address indexed owner, address indexed spender, uint amount); /** * @notice Failure event */ event Failure(uint error, uint info, uint detail); /*** User Interface ***/ function transfer(address dst, uint amount) external returns (bool); function transferFrom(address src, address dst, uint amount) external returns (bool); function approve(address spender, uint amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint); function balanceOf(address owner) external view returns (uint); function balanceOfUnderlying(address owner) external returns (uint); function getAccountSnapshot(address account) external view returns (uint, uint, uint, uint); function borrowRatePerBlock() external view returns (uint); function supplyRatePerBlock() external view returns (uint); function totalBorrowsCurrent() external returns (uint); function borrowBalanceCurrent(address account) external returns (uint); function borrowBalanceStored(address account) public view returns (uint); function exchangeRateCurrent() public returns (uint); function exchangeRateStored() public view returns (uint); function getCash() external view returns (uint); function accrueInterest() public returns (uint); function seize(address liquidator, address borrower, uint seizeTokens) external returns (uint); /*** Admin Functions ***/ function _setPendingAdmin(address payable newPendingAdmin) external returns (uint); function _acceptAdmin() external returns (uint); function _setComptroller(ComptrollerInterface newComptroller) public returns (uint); function _setReserveFactor(uint newReserveFactorMantissa) external returns (uint); function _reduceReserves(uint reduceAmount) external returns (uint); function _setInterestRateModel(InterestRateModel newInterestRateModel) public returns (uint); } contract CErc20Storage { /** * @notice Underlying asset for this CToken */ address public underlying; } contract CErc20Interface is CErc20Storage { /*** User Interface ***/ function mint(uint mintAmount) external returns (uint); function redeem(uint redeemTokens) external returns (uint); function redeemUnderlying(uint redeemAmount) external returns (uint); function borrow(uint borrowAmount) external returns (uint); function repayBorrow(uint repayAmount) external returns (uint); function repayBorrowBehalf(address borrower, uint repayAmount) external returns (uint); function liquidateBorrow(address borrower, uint repayAmount, CTokenInterface cTokenCollateral) external returns (uint); function sweepToken(EIP20NonStandardInterface token) external; /*** Admin Functions ***/ function _addReserves(uint addAmount) external returns (uint); } contract CDelegationStorage { /** * @notice Implementation address for this contract */ address public implementation; } contract CDelegatorInterface is CDelegationStorage { /** * @notice Emitted when implementation is changed */ event NewImplementation(address oldImplementation, address newImplementation); /** * @notice Called by the admin to update the implementation of the delegator * @param implementation_ The address of the new implementation for delegation * @param allowResign Flag to indicate whether to call _resignImplementation on the old implementation * @param becomeImplementationData The encoded bytes data to be passed to _becomeImplementation */ function _setImplementation(address implementation_, bool allowResign, bytes memory becomeImplementationData) public; } contract CDelegateInterface is CDelegationStorage { /** * @notice Called by the delegator on a delegate to initialize it for duty * @dev Should revert if any issues arise which make it unfit for delegation * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) public; /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public; }
pragma solidity ^0.5.16; // From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol // Subject to the MIT license. /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, errorMessage); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction underflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on underflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot underflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, errorMessage); return c; } /** * @dev Returns the integer division of two unsigned integers. * Reverts on division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. * Reverts with custom message on division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
pragma solidity ^0.5.16; contract ComptrollerInterface { /// @notice Indicator that this is a Comptroller contract (for inspection) bool public constant isComptroller = true; /*** Assets You Are In ***/ function enterMarkets(address[] calldata cTokens) external returns (uint[] memory); function exitMarket(address cToken) external returns (uint); /*** Policy Hooks ***/ function mintAllowed(address cToken, address minter, uint mintAmount) external returns (uint); function mintVerify(address cToken, address minter, uint mintAmount, uint mintTokens) external; function redeemAllowed(address cToken, address redeemer, uint redeemTokens) external returns (uint); function redeemVerify(address cToken, address redeemer, uint redeemAmount, uint redeemTokens) external; function borrowAllowed(address cToken, address borrower, uint borrowAmount) external returns (uint); function borrowVerify(address cToken, address borrower, uint borrowAmount) external; function repayBorrowAllowed( address cToken, address payer, address borrower, uint repayAmount) external returns (uint); function repayBorrowVerify( address cToken, address payer, address borrower, uint repayAmount, uint borrowerIndex) external; function liquidateBorrowAllowed( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint repayAmount) external returns (uint); function liquidateBorrowVerify( address cTokenBorrowed, address cTokenCollateral, address liquidator, address borrower, uint repayAmount, uint seizeTokens) external; function seizeAllowed( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint seizeTokens) external returns (uint); function seizeVerify( address cTokenCollateral, address cTokenBorrowed, address liquidator, address borrower, uint seizeTokens) external; function transferAllowed(address cToken, address src, address dst, uint transferTokens) external returns (uint); function transferVerify(address cToken, address src, address dst, uint transferTokens) external; /*** Liquidity/Liquidation Calculations ***/ function liquidateCalculateSeizeTokens( address cTokenBorrowed, address cTokenCollateral, uint repayAmount) external view returns (uint, uint); }
pragma solidity ^0.5.16; /** * @title Compound's InterestRateModel Interface * @author Compound */ contract InterestRateModel { /// @notice Indicator that this is an InterestRateModel contract (for inspection) bool public constant isInterestRateModel = true; /** * @notice Calculates the current borrow interest rate per block * @param cash The total amount of cash the market has * @param borrows The total amount of borrows the market has outstanding * @param reserves The total amount of reserves the market has * @return The borrow rate per block (as a percentage, and scaled by 1e18) */ function getBorrowRate(uint cash, uint borrows, uint reserves) external view returns (uint); /** * @notice Calculates the current supply interest rate per block * @param cash The total amount of cash the market has * @param borrows The total amount of borrows the market has outstanding * @param reserves The total amount of reserves the market has * @param reserveFactorMantissa The current reserve factor the market has * @return The supply rate per block (as a percentage, and scaled by 1e18) */ function getSupplyRate(uint cash, uint borrows, uint reserves, uint reserveFactorMantissa) external view returns (uint); }
pragma solidity ^0.5.16; /** * @title EIP20NonStandardInterface * @dev Version of ERC20 with no return values for `transfer` and `transferFrom` * See https://medium.com/coinmonks/missing-return-value-bug-at-least-130-tokens-affected-d67bf08521ca */ interface EIP20NonStandardInterface { /** * @notice Get the total number of tokens in circulation * @return The supply of tokens */ function totalSupply() external view returns (uint256); /** * @notice Gets the balance of the specified address * @param owner The address from which the balance will be retrieved * @return The balance */ function balanceOf(address owner) external view returns (uint256 balance); /// /// !!!!!!!!!!!!!! /// !!! NOTICE !!! `transfer` does not return a value, in violation of the ERC-20 specification /// !!!!!!!!!!!!!! /// /** * @notice Transfer `amount` tokens from `msg.sender` to `dst` * @param dst The address of the destination account * @param amount The number of tokens to transfer */ function transfer(address dst, uint256 amount) external; /// /// !!!!!!!!!!!!!! /// !!! NOTICE !!! `transferFrom` does not return a value, in violation of the ERC-20 specification /// !!!!!!!!!!!!!! /// /** * @notice Transfer `amount` tokens from `src` to `dst` * @param src The address of the source account * @param dst The address of the destination account * @param amount The number of tokens to transfer */ function transferFrom(address src, address dst, uint256 amount) external; /** * @notice Approve `spender` to transfer up to `amount` from `src` * @dev This will overwrite the approval amount for `spender` * and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve) * @param spender The address of the account which may transfer tokens * @param amount The number of tokens that are approved * @return Whether or not the approval succeeded */ function approve(address spender, uint256 amount) external returns (bool success); /** * @notice Get the current allowance from `owner` for `spender` * @param owner The address of the account which owns the tokens to be spent * @param spender The address of the account which may transfer tokens * @return The number of tokens allowed to be spent */ function allowance(address owner, address spender) external view returns (uint256 remaining); event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"ethUsdChainlinkAggregatorAddress_","type":"address"},{"internalType":"address","name":"bnbUsdChainlinkAggregatorAddress_","type":"address"},{"internalType":"address","name":"btcUsdChainlinkAggregatorAddress_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"cTokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"chainlinkAggregatorAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainlinkPriceBase","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"underlyingTokenDecimals","type":"uint256"}],"name":"TokenConfigUpdated","type":"event"},{"constant":true,"inputs":[],"name":"bnbUsdChainlinkAggregatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"btcUsdChainlinkAggregatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethUsdChainlinkAggregatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract CTokenInterface","name":"cToken","type":"address"}],"name":"getUnderlyingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isPriceOracle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setEthUsdChainlinkAggregatorAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"cTokenAddress","type":"address[]"},{"internalType":"address[]","name":"chainlinkAggregatorAddress","type":"address[]"},{"internalType":"uint256[]","name":"chainlinkPriceBase","type":"uint256[]"},{"internalType":"uint256[]","name":"underlyingTokenDecimals","type":"uint256[]"}],"name":"setTokenConfigs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenConfig","outputs":[{"internalType":"address","name":"chainlinkAggregatorAddress","type":"address"},{"internalType":"uint256","name":"chainlinkPriceBase","type":"uint256"},{"internalType":"uint256","name":"underlyingTokenDecimals","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610fa3380380610fa38339818101604052606081101561003357600080fd5b508051602082015160409092015190919060006100576001600160e01b036100e316565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b0319918216179091556002805493851693821693909317909255600380549190931691161790556100e7565b3390565b610ead806100f66000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a61461027c5780638da5cb5b14610284578063ccdd3b781461028c578063f2fde38b14610294578063fc57d4df146102ba578063fe136c4e146102f2576100a9565b806326271c72146100ae57806331b9fb43146100d257806356f9ac3a146100fa5780635d85ff6c1461010257806366331bba14610260575b600080fd5b6100b6610340565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360208110156100e857600080fd5b50356001600160a01b031661034f565b005b6100b66103c9565b6100f86004803603608081101561011857600080fd5b810190602081018135600160201b81111561013257600080fd5b82018360208201111561014457600080fd5b803590602001918460208302840111600160201b8311171561016557600080fd5b919390929091602081019035600160201b81111561018257600080fd5b82018360208201111561019457600080fd5b803590602001918460208302840111600160201b831117156101b557600080fd5b919390929091602081019035600160201b8111156101d257600080fd5b8201836020820111156101e457600080fd5b803590602001918460208302840111600160201b8311171561020557600080fd5b919390929091602081019035600160201b81111561022257600080fd5b82018360208201111561023457600080fd5b803590602001918460208302840111600160201b8311171561025557600080fd5b5090925090506103d8565b61026861062f565b604080519115158252519081900360200190f35b6100f8610634565b6100b66106d6565b6100b66106e5565b6100f8600480360360208110156102aa57600080fd5b50356001600160a01b03166106f4565b6102e0600480360360208110156102d057600080fd5b50356001600160a01b03166107ec565b60408051918252519081900360200190f35b6103186004803603602081101561030857600080fd5b50356001600160a01b0316610c77565b604080516001600160a01b039094168452602084019290925282820152519081900360600190f35b6001546001600160a01b031681565b610357610ca2565b6000546001600160a01b039081169116146103a7576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6103e0610ca2565b6000546001600160a01b03908116911614610430576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b868514801561043e57508683145b801561044957508681145b61049a576040805162461bcd60e51b815260206004820152601f60248201527f417267756d656e7473206d75737420686176652073616d65206c656e67746800604482015290519081900360640190fd5b60005b878110156106245760405180606001604052808888848181106104bc57fe5b905060200201356001600160a01b03166001600160a01b031681526020018686848181106104e657fe5b9050602002013581526020018484848181106104fe57fe5b90506020020135815250600460008b8b8581811061051857fe5b602090810292909201356001600160a01b03908116845283830194909452506040918201600020845181546001600160a01b0319169416939093178355830151600183015591909101516002909101557f3a62a2a9de330d6d0431385221cf66bf13a97983e3d9182986b5db7cdcd9322089898381811061059557fe5b905060200201356001600160a01b03168888848181106105b157fe5b905060200201356001600160a01b03168787858181106105cd57fe5b905060200201358686868181106105e057fe5b604080516001600160a01b039788168152959096166020868101919091528587019490945292909202013560608301525090519081900360800190a160010161049d565b505050505050505050565b600181565b61063c610ca2565b6000546001600160a01b0390811691161461068c576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6002546001600160a01b031681565b6106fc610ca2565b6000546001600160a01b0390811691161461074c576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b6001600160a01b0381166107915760405162461bcd60e51b8152600401808060200182810382526026815260200180610e126026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006107f6610de7565b506001600160a01b0380831660009081526004602081815260408084208151606081018352815490961680875260018201549387019390935260020154858201528051633fabe5a360e21b81529051919263feaf968c928282019260a09290829003018186803b15801561086957600080fd5b505afa15801561087d573d6000803e3d6000fd5b505050506040513d60a081101561089357600080fd5b50602001519050600081136108ef576040805162461bcd60e51b815260206004820152601c60248201527f436861696e6c696e6b207072696365206665656420696e76616c696400000000604482015290519081900360640190fd5b600082602001516001141561093957604083015161093290600a0a610926846b204fce5e3e2502611000000063ffffffff610ca616565b9063ffffffff610d0816565b9050610c1a565b826020015160021415610a3e5760015460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561098b57600080fd5b505afa15801561099f573d6000803e3d6000fd5b505050506040513d60a08110156109b557600080fd5b5060200151905060008113610a05576040805162461bcd60e51b8152602060048201526011602482015270115512081c1c9a58d9481a5b9d985b1a59607a1b604482015290519081900360640190fd5b6040840151610a3690600a0a6109266402540be400610a2a878663ffffffff610ca616565b9063ffffffff610ca616565b915050610c1a565b826020015160031415610b0a5760025460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b158015610a9057600080fd5b505afa158015610aa4573d6000803e3d6000fd5b505050506040513d60a0811015610aba57600080fd5b5060200151905060008113610a05576040805162461bcd60e51b8152602060048201526011602482015270109390881c1c9a58d9481a5b9d985b1a59607a1b604482015290519081900360640190fd5b826020015160041415610bd65760035460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b158015610b5c57600080fd5b505afa158015610b70573d6000803e3d6000fd5b505050506040513d60a0811015610b8657600080fd5b5060200151905060008113610a05576040805162461bcd60e51b8152602060048201526011602482015270109510c81c1c9a58d9481a5b9d985b1a59607a1b604482015290519081900360640190fd5b6040805162461bcd60e51b8152602060048201526014602482015273151bdad95b8818dbdb999a59c81a5b9d985b1a5960621b604482015290519081900360640190fd5b60008111610c6f576040805162461bcd60e51b815260206004820152601860248201527f556e6465726c79696e6720707269636520696e76616c69640000000000000000604482015290519081900360640190fd5b949350505050565b6004602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b3390565b600082610cb557506000610d02565b82820282848281610cc257fe5b0414610cff5760405162461bcd60e51b8152600401808060200182810382526021815260200180610e386021913960400191505060405180910390fd5b90505b92915050565b6000610cff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183610dd15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d96578181015183820152602001610d7e565b50505050905090810190601f168015610dc35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610ddd57fe5b0495945050505050565b604051806060016040528060006001600160a01b031681526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820a6b3f86d396489274a93355ab4c712886a22a00601250c58c97b884a6d1180f164736f6c634300051000320000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4030086522a5beea4988f8ca5b36dbc97bee88c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a61461027c5780638da5cb5b14610284578063ccdd3b781461028c578063f2fde38b14610294578063fc57d4df146102ba578063fe136c4e146102f2576100a9565b806326271c72146100ae57806331b9fb43146100d257806356f9ac3a146100fa5780635d85ff6c1461010257806366331bba14610260575b600080fd5b6100b6610340565b604080516001600160a01b039092168252519081900360200190f35b6100f8600480360360208110156100e857600080fd5b50356001600160a01b031661034f565b005b6100b66103c9565b6100f86004803603608081101561011857600080fd5b810190602081018135600160201b81111561013257600080fd5b82018360208201111561014457600080fd5b803590602001918460208302840111600160201b8311171561016557600080fd5b919390929091602081019035600160201b81111561018257600080fd5b82018360208201111561019457600080fd5b803590602001918460208302840111600160201b831117156101b557600080fd5b919390929091602081019035600160201b8111156101d257600080fd5b8201836020820111156101e457600080fd5b803590602001918460208302840111600160201b8311171561020557600080fd5b919390929091602081019035600160201b81111561022257600080fd5b82018360208201111561023457600080fd5b803590602001918460208302840111600160201b8311171561025557600080fd5b5090925090506103d8565b61026861062f565b604080519115158252519081900360200190f35b6100f8610634565b6100b66106d6565b6100b66106e5565b6100f8600480360360208110156102aa57600080fd5b50356001600160a01b03166106f4565b6102e0600480360360208110156102d057600080fd5b50356001600160a01b03166107ec565b60408051918252519081900360200190f35b6103186004803603602081101561030857600080fd5b50356001600160a01b0316610c77565b604080516001600160a01b039094168452602084019290925282820152519081900360600190f35b6001546001600160a01b031681565b610357610ca2565b6000546001600160a01b039081169116146103a7576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031681565b6103e0610ca2565b6000546001600160a01b03908116911614610430576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b868514801561043e57508683145b801561044957508681145b61049a576040805162461bcd60e51b815260206004820152601f60248201527f417267756d656e7473206d75737420686176652073616d65206c656e67746800604482015290519081900360640190fd5b60005b878110156106245760405180606001604052808888848181106104bc57fe5b905060200201356001600160a01b03166001600160a01b031681526020018686848181106104e657fe5b9050602002013581526020018484848181106104fe57fe5b90506020020135815250600460008b8b8581811061051857fe5b602090810292909201356001600160a01b03908116845283830194909452506040918201600020845181546001600160a01b0319169416939093178355830151600183015591909101516002909101557f3a62a2a9de330d6d0431385221cf66bf13a97983e3d9182986b5db7cdcd9322089898381811061059557fe5b905060200201356001600160a01b03168888848181106105b157fe5b905060200201356001600160a01b03168787858181106105cd57fe5b905060200201358686868181106105e057fe5b604080516001600160a01b039788168152959096166020868101919091528587019490945292909202013560608301525090519081900360800190a160010161049d565b505050505050505050565b600181565b61063c610ca2565b6000546001600160a01b0390811691161461068c576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6002546001600160a01b031681565b6106fc610ca2565b6000546001600160a01b0390811691161461074c576040805162461bcd60e51b81526020600482018190526024820152600080516020610e59833981519152604482015290519081900360640190fd5b6001600160a01b0381166107915760405162461bcd60e51b8152600401808060200182810382526026815260200180610e126026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006107f6610de7565b506001600160a01b0380831660009081526004602081815260408084208151606081018352815490961680875260018201549387019390935260020154858201528051633fabe5a360e21b81529051919263feaf968c928282019260a09290829003018186803b15801561086957600080fd5b505afa15801561087d573d6000803e3d6000fd5b505050506040513d60a081101561089357600080fd5b50602001519050600081136108ef576040805162461bcd60e51b815260206004820152601c60248201527f436861696e6c696e6b207072696365206665656420696e76616c696400000000604482015290519081900360640190fd5b600082602001516001141561093957604083015161093290600a0a610926846b204fce5e3e2502611000000063ffffffff610ca616565b9063ffffffff610d0816565b9050610c1a565b826020015160021415610a3e5760015460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561098b57600080fd5b505afa15801561099f573d6000803e3d6000fd5b505050506040513d60a08110156109b557600080fd5b5060200151905060008113610a05576040805162461bcd60e51b8152602060048201526011602482015270115512081c1c9a58d9481a5b9d985b1a59607a1b604482015290519081900360640190fd5b6040840151610a3690600a0a6109266402540be400610a2a878663ffffffff610ca616565b9063ffffffff610ca616565b915050610c1a565b826020015160031415610b0a5760025460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b158015610a9057600080fd5b505afa158015610aa4573d6000803e3d6000fd5b505050506040513d60a0811015610aba57600080fd5b5060200151905060008113610a05576040805162461bcd60e51b8152602060048201526011602482015270109390881c1c9a58d9481a5b9d985b1a59607a1b604482015290519081900360640190fd5b826020015160041415610bd65760035460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b158015610b5c57600080fd5b505afa158015610b70573d6000803e3d6000fd5b505050506040513d60a0811015610b8657600080fd5b5060200151905060008113610a05576040805162461bcd60e51b8152602060048201526011602482015270109510c81c1c9a58d9481a5b9d985b1a59607a1b604482015290519081900360640190fd5b6040805162461bcd60e51b8152602060048201526014602482015273151bdad95b8818dbdb999a59c81a5b9d985b1a5960621b604482015290519081900360640190fd5b60008111610c6f576040805162461bcd60e51b815260206004820152601860248201527f556e6465726c79696e6720707269636520696e76616c69640000000000000000604482015290519081900360640190fd5b949350505050565b6004602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b3390565b600082610cb557506000610d02565b82820282848281610cc257fe5b0414610cff5760405162461bcd60e51b8152600401808060200182810382526021815260200180610e386021913960400191505060405180910390fd5b90505b92915050565b6000610cff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183610dd15760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d96578181015183820152602001610d7e565b50505050905090810190601f168015610dc35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610ddd57fe5b0495945050505050565b604051806060016040528060006001600160a01b031681526020016000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a72315820a6b3f86d396489274a93355ab4c712886a22a00601250c58c97b884a6d1180f164736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4030086522a5beea4988f8ca5b36dbc97bee88c
-----Decoded View---------------
Arg [0] : ethUsdChainlinkAggregatorAddress_ (address): 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
Arg [1] : bnbUsdChainlinkAggregatorAddress_ (address): 0x0000000000000000000000000000000000000000
Arg [2] : btcUsdChainlinkAggregatorAddress_ (address): 0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 000000000000000000000000f4030086522a5beea4988f8ca5b36dbc97bee88c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.