Source Code
Overview
HYPE Balance
HYPE Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 25573810 | 3 hrs ago | 0 HYPE | |||||
| 25573810 | 3 hrs ago | 0 HYPE | |||||
| 25561574 | 6 hrs ago | 0 HYPE | |||||
| 25561574 | 6 hrs ago | 0 HYPE | |||||
| 25559387 | 7 hrs ago | 0 HYPE | |||||
| 25559387 | 7 hrs ago | 0 HYPE | |||||
| 25558973 | 7 hrs ago | 0 HYPE | |||||
| 25558973 | 7 hrs ago | 0 HYPE | |||||
| 25557199 | 7 hrs ago | 0 HYPE | |||||
| 25557199 | 7 hrs ago | 0 HYPE | |||||
| 25550271 | 9 hrs ago | 0 HYPE | |||||
| 25550271 | 9 hrs ago | 0 HYPE | |||||
| 25550118 | 9 hrs ago | 0 HYPE | |||||
| 25550118 | 9 hrs ago | 0 HYPE | |||||
| 25550103 | 9 hrs ago | 0 HYPE | |||||
| 25550103 | 9 hrs ago | 0 HYPE | |||||
| 25548346 | 10 hrs ago | 0 HYPE | |||||
| 25548346 | 10 hrs ago | 0 HYPE | |||||
| 25548276 | 10 hrs ago | 0 HYPE | |||||
| 25548276 | 10 hrs ago | 0 HYPE | |||||
| 25548027 | 10 hrs ago | 0 HYPE | |||||
| 25548027 | 10 hrs ago | 0 HYPE | |||||
| 25547488 | 10 hrs ago | 0 HYPE | |||||
| 25547488 | 10 hrs ago | 0 HYPE | |||||
| 25547488 | 10 hrs ago | 0 HYPE |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AccountantRateProviderWrapper
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.21;
import { IRateProvider } from "src/interfaces/IRateProvider.sol";
import { AccessControl } from "@openzeppelin/contracts/access/AccessControl.sol";
interface IAccountantWithRateProviders {
function decimals() external view returns (uint8);
function getRate() external view returns (uint256);
function getRateSafe() external view returns (uint256);
}
/**
* @title AccountantRateProviderWrapper
* @notice Wraps an AccountantWithRateProviders contract and converts its rate decimals to 18
* @dev This contract takes rates from an existing AccountantWithRateProviders and normalizes them to 18 decimals
*/
contract AccountantRateProviderWrapper is IRateProvider, AccessControl {
// ========================================= CONSTANTS =========================================
bytes32 public constant GOVERNANCE_ROLE = keccak256("GOVERNANCE_ROLE");
// ========================================= STATE VARIABLES =========================================
/**
* @notice The AccountantWithRateProviders contract we're wrapping
*/
IAccountantWithRateProviders public accountant;
/**
* @notice The original decimals of the accountant
*/
uint8 public accountantDecimals;
/**
* @notice Conversion factor to convert from accountant decimals to 18 decimals
* @dev This is 10^(18 - accountantDecimals). If accountantDecimals == 18, this is 1
*/
uint256 public conversionFactor;
// ========================================= EVENTS =========================================
event AccountantUpdated(address indexed oldAccountant, address indexed newAccountant, uint8 oldDecimals, uint8 newDecimals, uint256 oldConversionFactor, uint256 newConversionFactor);
// ========================================= ERRORS =========================================
error AccountantDecimalsTooLarge();
error InvalidAccountantAddress();
// ========================================= CONSTRUCTOR =========================================
constructor(address _accountant, address _governance) {
_setRoleAdmin(GOVERNANCE_ROLE, GOVERNANCE_ROLE);
_grantRole(GOVERNANCE_ROLE, _governance);
_setAccountant(_accountant);
}
// ========================================= GOVERNANCE FUNCTIONS =========================================
/**
* @notice Update the accountant contract address
* @dev Only callable by governance role
* @param _newAccountant Address of the new AccountantWithRateProviders contract
*/
function setAccountant(address _newAccountant) external onlyRole(GOVERNANCE_ROLE) {
_setAccountant(_newAccountant);
}
// ========================================= VIEW FUNCTIONS =========================================
/**
* @notice Returns the number of decimals this rate provider uses (always 18)
*/
function decimals() external pure returns (uint8) {
return 18;
}
/**
* @notice Get the rate from the accountant, converted to 18 decimals
* @return rate The rate with 18 decimal precision
*/
function getRate() external view returns (uint256 rate) {
uint256 accountantRate = accountant.getRate();
rate = accountantRate * conversionFactor;
}
/**
* @notice Get the rate from the accountant safely, converted to 18 decimals
* @dev Reverts if the underlying accountant is paused
* @return rate The rate with 18 decimal precision
*/
function getRateSafe() external view returns (uint256 rate) {
uint256 accountantRate = accountant.getRateSafe();
rate = accountantRate * conversionFactor;
}
/**
* @notice Get the original rate from the accountant without decimal conversion
* @return rate The original rate from the accountant
*/
function getOriginalRate() external view returns (uint256 rate) {
return accountant.getRate();
}
/**
* @notice Get the original rate from the accountant safely without decimal conversion
* @return rate The original rate from the accountant
*/
function getOriginalRateSafe() external view returns (uint256 rate) {
return accountant.getRateSafe();
}
// ========================================= INTERNAL FUNCTIONS =========================================
/**
* @notice Internal function to set the accountant and update related state
* @param _newAccountant Address of the new AccountantWithRateProviders contract
*/
function _setAccountant(address _newAccountant) internal {
if (_newAccountant == address(0)) revert InvalidAccountantAddress();
// Store old values for event
address oldAccountant = address(accountant);
uint8 oldDecimals = accountantDecimals;
uint256 oldConversionFactor = conversionFactor;
// Set new accountant
accountant = IAccountantWithRateProviders(_newAccountant);
// Get new decimals and validate
uint8 newDecimals = accountant.decimals();
if (newDecimals > 18) revert AccountantDecimalsTooLarge();
// Update state
accountantDecimals = newDecimals;
conversionFactor = 10 ** (18 - newDecimals);
emit AccountantUpdated(oldAccountant, _newAccountant, oldDecimals, newDecimals, oldConversionFactor, conversionFactor);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
import {IAccessControl} from "./IAccessControl.sol";
import {Context} from "../utils/Context.sol";
import {ERC165} from "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```solidity
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```solidity
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
* to enforce additional security measures for this role.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address account => bool) hasRole;
bytes32 adminRole;
}
mapping(bytes32 role => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with an {AccessControlUnauthorizedAccount} error including the required role.
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual returns (bool) {
return _roles[role].hasRole[account];
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
* is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
* is missing `role`.
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address callerConfirmation) public virtual {
if (callerConfirmation != _msgSender()) {
revert AccessControlBadConfirmation();
}
_revokeRole(role, callerConfirmation);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
if (!hasRole(role, account)) {
_roles[role].hasRole[account] = true;
emit RoleGranted(role, account, _msgSender());
return true;
} else {
return false;
}
}
/**
* @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
if (hasRole(role, account)) {
_roles[role].hasRole[account] = false;
emit RoleRevoked(role, account, _msgSender());
return true;
} else {
return false;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev External interface of AccessControl declared to support ERC-165 detection.
*/
interface IAccessControl {
/**
* @dev The `account` is missing a role.
*/
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
/**
* @dev The caller of a function is not the expected one.
*
* NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
*/
error AccessControlBadConfirmation();
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
* Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*/
function renounceRole(bytes32 role, address callerConfirmation) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: GPL-3.0-or-later
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pragma solidity ^0.8.0;
interface IRateProvider {
function getRate() external view returns (uint256);
}{
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"appendCBOR": true,
"bytecodeHash": "ipfs",
"useLiteralContent": false
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [
"@solmate/=lib/solmate/src/",
"@forge-std/=lib/forge-std/src/",
"forge-std/=lib/forge-std/src/",
"@ds-test/=lib/forge-std/lib/ds-test/src/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@ion-protocol/=lib/ion-protocol/src/",
"@layerzerolabs/=node_modules/@layerzerolabs/",
"@axelar-network/=node_modules/@axelar-network/",
"@balancer-labs/v2-interfaces/=lib/ion-protocol/lib/balancer-v2-monorepo/pkg/interfaces/",
"@balancer-labs/v2-pool-stable/=lib/ion-protocol/lib/balancer-v2-monorepo/pkg/pool-stable/",
"@chainlink/=node_modules/@chainlink/",
"@chainlink/contracts/=lib/ion-protocol/lib/chainlink/contracts/",
"@eth-optimism/=node_modules/@eth-optimism/",
"@openzeppelin/contracts-upgradeable/=lib/ion-protocol/lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@uniswap/v3-core/=lib/ion-protocol/lib/v3-core/",
"@uniswap/v3-periphery/=lib/ion-protocol/lib/v3-periphery/",
"balancer-v2-monorepo/=lib/ion-protocol/lib/",
"chainlink/=lib/ion-protocol/lib/chainlink/",
"createx/=lib/createx/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-safe/=lib/ion-protocol/lib/forge-safe/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"hardhat-deploy/=node_modules/hardhat-deploy/",
"ion-protocol/=lib/ion-protocol/",
"openzeppelin-contracts-upgradeable/=lib/ion-protocol/lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/",
"pendle-core-v2-public/=lib/ion-protocol/lib/pendle-core-v2-public/contracts/",
"solady/=lib/ion-protocol/lib/solady/",
"solarray/=lib/ion-protocol/lib/solarray/src/",
"solidity-bytes-utils/=node_modules/solidity-bytes-utils/",
"solidity-stringutils/=lib/ion-protocol/lib/forge-safe/lib/surl/lib/solidity-stringutils/",
"solmate/=lib/solmate/src/",
"surl/=lib/ion-protocol/lib/forge-safe/lib/surl/",
"v3-core/=lib/ion-protocol/lib/v3-core/",
"v3-periphery/=lib/v3-periphery/contracts/"
],
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_accountant","type":"address"},{"internalType":"address","name":"_governance","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"AccountantDecimalsTooLarge","type":"error"},{"inputs":[],"name":"InvalidAccountantAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAccountant","type":"address"},{"indexed":true,"internalType":"address","name":"newAccountant","type":"address"},{"indexed":false,"internalType":"uint8","name":"oldDecimals","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"newDecimals","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"oldConversionFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newConversionFactor","type":"uint256"}],"name":"AccountantUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOVERNANCE_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accountant","outputs":[{"internalType":"contract IAccountantWithRateProviders","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accountantDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"conversionFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getOriginalRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalRateSafe","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRateSafe","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAccountant","type":"address"}],"name":"setAccountant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801562000010575f80fd5b5060405162000ee738038062000ee783398101604081905262000033916200030b565b6200004d5f8051602062000ec7833981519152806200007b565b620000675f8051602062000ec783398151915282620000c5565b50620000738262000171565b5050620004a3565b5f82815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1662000168575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200011f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016200016b565b505f5b92915050565b6001600160a01b03811662000199576040516345506e0560e01b815260040160405180910390fd5b600180546002546001600160a01b031982166001600160a01b038581169182179094556040805163313ce56760e01b8152905194841694600160a01b90940460ff16935f929163313ce5679160048083019260209291908290030181865afa15801562000208573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200022e919062000341565b905060128160ff161115620002565760405163671355b560e01b815260040160405180910390fd5b6001805460ff60a01b1916600160a01b60ff8416021790556200027b8160126200037e565b6200028890600a62000493565b60028190556040805160ff8681168252841660208201528082018590526060810192909252516001600160a01b0387811692908716917f4f15755e2e6ce37464872f4ed10b2356d3f53132ca54b548046fc1b534968a6e9181900360800190a35050505050565b80516001600160a01b038116811462000306575f80fd5b919050565b5f80604083850312156200031d575f80fd5b6200032883620002ef565b91506200033860208401620002ef565b90509250929050565b5f6020828403121562000352575f80fd5b815160ff8116811462000363575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200016b576200016b6200036a565b600181815b80851115620003da57815f1904821115620003be57620003be6200036a565b80851615620003cc57918102915b93841c93908002906200039f565b509250929050565b5f82620003f2575060016200016b565b816200040057505f6200016b565b8160018114620004195760028114620004245762000444565b60019150506200016b565b60ff8411156200043857620004386200036a565b50506001821b6200016b565b5060208310610133831016604e8410600b841016171562000469575081810a6200016b565b6200047583836200039a565b805f19048211156200048b576200048b6200036a565b029392505050565b5f6200036360ff841683620003e2565b610a1680620004b15f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c80634fb3ccc51161009e5780637f34b6a31161006e5780637f34b6a31461021257806391d148541461021a578063a217fddf1461022d578063d547741f14610234578063f36c8f5c14610247575f80fd5b80634fb3ccc5146101c2578063602631ef146101ed578063679aefce146101f6578063700137d6146101fe575f80fd5b8063313ce567116100d9578063313ce5671461017f57806336568abe1461019457806348ea7127146101a75780634dcca82b146101ba575f80fd5b806301ffc9a71461010a578063248a9ca314610132578063282a8700146101625780632f2ff15d1461016a575b5f80fd5b61011d6101183660046107d4565b61026e565b60405190151581526020015b60405180910390f35b610154610140366004610802565b5f9081526020819052604090206001015490565b604051908152602001610129565b6101546102a4565b61017d610178366004610834565b610330565b005b60125b60405160ff9091168152602001610129565b61017d6101a2366004610834565b61035a565b61017d6101b536600461085e565b610392565b6101546103c9565b6001546101d5906001600160a01b031681565b6040516001600160a01b039091168152602001610129565b61015460025481565b610154610439565b60015461018290600160a01b900460ff1681565b61015461048b565b61011d610228366004610834565b6104d1565b6101545f81565b61017d610242366004610834565b6104f9565b6101547f71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb181565b5f6001600160e01b03198216637965db0b60e01b148061029e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8060015f9054906101000a90046001600160a01b03166001600160a01b031663282a87006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031a9190610877565b90506002548161032a91906108a2565b91505090565b5f8281526020819052604090206001015461034a8161051d565b610354838361052a565b50505050565b6001600160a01b03811633146103835760405163334bd91960e11b815260040160405180910390fd5b61038d82826105b9565b505050565b7f71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb16103bc8161051d565b6103c582610622565b5050565b600154604080516333cd77e760e11b815290515f926001600160a01b03169163679aefce9160048083019260209291908290030181865afa158015610410573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104349190610877565b905090565b5f8060015f9054906101000a90046001600160a01b03166001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f6573d5f803e3d5ffd5b6001546040805162282a8760e81b815290515f926001600160a01b03169163282a87009160048083019260209291908290030181865afa158015610410573d5f803e3d5ffd5b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f828152602081905260409020600101546105138161051d565b61035483836105b9565b6105278133610797565b50565b5f61053583836104d1565b6105b2575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561056a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161029e565b505f61029e565b5f6105c483836104d1565b156105b2575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161029e565b6001600160a01b038116610649576040516345506e0560e01b815260040160405180910390fd5b600180546002546001600160a01b031982166001600160a01b038581169182179094556040805163313ce56760e01b8152905194841694600160a01b90940460ff16935f929163313ce5679160048083019260209291908290030181865afa1580156106b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106db91906108b9565b905060128160ff1611156107025760405163671355b560e01b815260040160405180910390fd5b6001805460ff60a01b1916600160a01b60ff8416021790556107258160126108d9565b61073090600a6109d2565b60028190556040805160ff8681168252841660208201528082018590526060810192909252516001600160a01b0387811692908716917f4f15755e2e6ce37464872f4ed10b2356d3f53132ca54b548046fc1b534968a6e9181900360800190a35050505050565b6107a182826104d1565b6103c55760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5f602082840312156107e4575f80fd5b81356001600160e01b0319811681146107fb575f80fd5b9392505050565b5f60208284031215610812575f80fd5b5035919050565b80356001600160a01b038116811461082f575f80fd5b919050565b5f8060408385031215610845575f80fd5b8235915061085560208401610819565b90509250929050565b5f6020828403121561086e575f80fd5b6107fb82610819565b5f60208284031215610887575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761029e5761029e61088e565b5f602082840312156108c9575f80fd5b815160ff811681146107fb575f80fd5b60ff828116828216039081111561029e5761029e61088e565b600181815b8085111561092c57815f19048211156109125761091261088e565b8085161561091f57918102915b93841c93908002906108f7565b509250929050565b5f826109425750600161029e565b8161094e57505f61029e565b8160018114610964576002811461096e5761098a565b600191505061029e565b60ff84111561097f5761097f61088e565b50506001821b61029e565b5060208310610133831016604e8410600b84101617156109ad575081810a61029e565b6109b783836108f2565b805f19048211156109ca576109ca61088e565b029392505050565b5f6107fb60ff84168361093456fea2646970667358221220d769eac807e3c92e867d62bca9ec54130a531f89ceb664021a0777659010b8d864736f6c6343000815003371840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb100000000000000000000000078e3ac5bf48dcaf1835e7f9861542c0d43d0b03e0000000000000000000000006335ee3e052c7a09048800376c8cbfe9cc5fb7a8
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c80634fb3ccc51161009e5780637f34b6a31161006e5780637f34b6a31461021257806391d148541461021a578063a217fddf1461022d578063d547741f14610234578063f36c8f5c14610247575f80fd5b80634fb3ccc5146101c2578063602631ef146101ed578063679aefce146101f6578063700137d6146101fe575f80fd5b8063313ce567116100d9578063313ce5671461017f57806336568abe1461019457806348ea7127146101a75780634dcca82b146101ba575f80fd5b806301ffc9a71461010a578063248a9ca314610132578063282a8700146101625780632f2ff15d1461016a575b5f80fd5b61011d6101183660046107d4565b61026e565b60405190151581526020015b60405180910390f35b610154610140366004610802565b5f9081526020819052604090206001015490565b604051908152602001610129565b6101546102a4565b61017d610178366004610834565b610330565b005b60125b60405160ff9091168152602001610129565b61017d6101a2366004610834565b61035a565b61017d6101b536600461085e565b610392565b6101546103c9565b6001546101d5906001600160a01b031681565b6040516001600160a01b039091168152602001610129565b61015460025481565b610154610439565b60015461018290600160a01b900460ff1681565b61015461048b565b61011d610228366004610834565b6104d1565b6101545f81565b61017d610242366004610834565b6104f9565b6101547f71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb181565b5f6001600160e01b03198216637965db0b60e01b148061029e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8060015f9054906101000a90046001600160a01b03166001600160a01b031663282a87006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031a9190610877565b90506002548161032a91906108a2565b91505090565b5f8281526020819052604090206001015461034a8161051d565b610354838361052a565b50505050565b6001600160a01b03811633146103835760405163334bd91960e11b815260040160405180910390fd5b61038d82826105b9565b505050565b7f71840dc4906352362b0cdaf79870196c8e42acafade72d5d5a6d59291253ceb16103bc8161051d565b6103c582610622565b5050565b600154604080516333cd77e760e11b815290515f926001600160a01b03169163679aefce9160048083019260209291908290030181865afa158015610410573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104349190610877565b905090565b5f8060015f9054906101000a90046001600160a01b03166001600160a01b031663679aefce6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102f6573d5f803e3d5ffd5b6001546040805162282a8760e81b815290515f926001600160a01b03169163282a87009160048083019260209291908290030181865afa158015610410573d5f803e3d5ffd5b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f828152602081905260409020600101546105138161051d565b61035483836105b9565b6105278133610797565b50565b5f61053583836104d1565b6105b2575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561056a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161029e565b505f61029e565b5f6105c483836104d1565b156105b2575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161029e565b6001600160a01b038116610649576040516345506e0560e01b815260040160405180910390fd5b600180546002546001600160a01b031982166001600160a01b038581169182179094556040805163313ce56760e01b8152905194841694600160a01b90940460ff16935f929163313ce5679160048083019260209291908290030181865afa1580156106b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106db91906108b9565b905060128160ff1611156107025760405163671355b560e01b815260040160405180910390fd5b6001805460ff60a01b1916600160a01b60ff8416021790556107258160126108d9565b61073090600a6109d2565b60028190556040805160ff8681168252841660208201528082018590526060810192909252516001600160a01b0387811692908716917f4f15755e2e6ce37464872f4ed10b2356d3f53132ca54b548046fc1b534968a6e9181900360800190a35050505050565b6107a182826104d1565b6103c55760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440160405180910390fd5b5f602082840312156107e4575f80fd5b81356001600160e01b0319811681146107fb575f80fd5b9392505050565b5f60208284031215610812575f80fd5b5035919050565b80356001600160a01b038116811461082f575f80fd5b919050565b5f8060408385031215610845575f80fd5b8235915061085560208401610819565b90509250929050565b5f6020828403121561086e575f80fd5b6107fb82610819565b5f60208284031215610887575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761029e5761029e61088e565b5f602082840312156108c9575f80fd5b815160ff811681146107fb575f80fd5b60ff828116828216039081111561029e5761029e61088e565b600181815b8085111561092c57815f19048211156109125761091261088e565b8085161561091f57918102915b93841c93908002906108f7565b509250929050565b5f826109425750600161029e565b8161094e57505f61029e565b8160018114610964576002811461096e5761098a565b600191505061029e565b60ff84111561097f5761097f61088e565b50506001821b61029e565b5060208310610133831016604e8410600b84101617156109ad575081810a61029e565b6109b783836108f2565b805f19048211156109ca576109ca61088e565b029392505050565b5f6107fb60ff84168361093456fea2646970667358221220d769eac807e3c92e867d62bca9ec54130a531f89ceb664021a0777659010b8d864736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000078e3ac5bf48dcaf1835e7f9861542c0d43d0b03e0000000000000000000000006335ee3e052c7a09048800376c8cbfe9cc5fb7a8
-----Decoded View---------------
Arg [0] : _accountant (address): 0x78E3Ac5Bf48dcAF1835e7F9861542c0D43D0B03E
Arg [1] : _governance (address): 0x6335ee3e052C7A09048800376C8CbFE9cc5fB7a8
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000078e3ac5bf48dcaf1835e7f9861542c0d43d0b03e
Arg [1] : 0000000000000000000000006335ee3e052c7a09048800376c8cbfe9cc5fb7a8
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in HYPE
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.