Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 5419252 | 136 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TempOracle
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0
pragma solidity ^0.8.20;
import { Access } from "../administrator/Access.sol";
/**
* @title TempOracle
* @notice Simple temporary oracle for testing purposes
*/
contract TempOracle is Access {
// Price data
int256 private _price;
uint256 private _updatedAt;
uint80 private _roundId;
uint8 private _decimals;
/**
* @notice Initialize the TempOracle
* @param _administrator Address of the administrator contract
* @param initialPrice Initial price value (normalized to specified decimals)
* @param priceDecimals Number of decimals for the price feed
*/
function init(
address _administrator,
int256 initialPrice,
uint8 priceDecimals
) public initializer {
__Access_init(_administrator);
_price = initialPrice;
_updatedAt = block.timestamp;
_roundId = 1;
_decimals = priceDecimals;
}
/**
* @notice Update the price
* @param newPrice The new price value
*/
function updatePrice(int256 newPrice) external onlyMinterAndRedeemer {
require(newPrice > 0, "Price must be positive");
_price = newPrice;
_updatedAt = block.timestamp;
_roundId++;
}
/**
* @notice Get the latest round data
* @return roundId The round ID
* @return answer The price
* @return startedAt When the round started
* @return updatedAt When the round was updated
* @return answeredInRound The round in which the answer was computed
*/
function latestRoundData() external view returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
) {
return (
_roundId,
_price,
_updatedAt,
_updatedAt,
_roundId
);
}
/**
* @notice Get the number of decimals for the price feed
* @return The number of decimals
*/
function decimals() external view returns (uint8) {
return _decimals;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.20;
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
*
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*
* [CAUTION]
* ====
* Avoid leaving a contract uninitialized.
*
* An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
* contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
* the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
*
* [.hljs-theme-light.nopadding]
* ```
* /// @custom:oz-upgrades-unsafe-allow constructor
* constructor() {
* _disableInitializers();
* }
* ```
* ====
*/
abstract contract Initializable {
/**
* @dev Storage of the initializable contract.
*
* It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions
* when using with upgradeable contracts.
*
* @custom:storage-location erc7201:openzeppelin.storage.Initializable
*/
struct InitializableStorage {
/**
* @dev Indicates that the contract has been initialized.
*/
uint64 _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool _initializing;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;
/**
* @dev The contract is already initialized.
*/
error InvalidInitialization();
/**
* @dev The contract is not initializing.
*/
error NotInitializing();
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint64 version);
/**
* @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
* `onlyInitializing` functions can be used to initialize parent contracts.
*
* Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any
* number of times. This behavior in the constructor can be useful during testing and is not expected to be used in
* production.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
// Cache values to avoid duplicated sloads
bool isTopLevelCall = !$._initializing;
uint64 initialized = $._initialized;
// Allowed calls:
// - initialSetup: the contract is not in the initializing state and no previous version was
// initialized
// - construction: the contract is initialized at version 1 (no reinitialization) and the
// current contract is just being deployed
bool initialSetup = initialized == 0 && isTopLevelCall;
bool construction = initialized == 1 && address(this).code.length == 0;
if (!initialSetup && !construction) {
revert InvalidInitialization();
}
$._initialized = 1;
if (isTopLevelCall) {
$._initializing = true;
}
_;
if (isTopLevelCall) {
$._initializing = false;
emit Initialized(1);
}
}
/**
* @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
* contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
* used to initialize parent contracts.
*
* A reinitializer may be used after the original initialization step. This is essential to configure modules that
* are added through upgrades and that require initialization.
*
* When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
* cannot be nested. If one is invoked in the context of another, execution will revert.
*
* Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
* a contract, executing them in the right order is up to the developer or operator.
*
* WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint64 version) {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing || $._initialized >= version) {
revert InvalidInitialization();
}
$._initialized = version;
$._initializing = true;
_;
$._initializing = false;
emit Initialized(version);
}
/**
* @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
* {initializer} and {reinitializer} modifiers, directly or indirectly.
*/
modifier onlyInitializing() {
_checkInitializing();
_;
}
/**
* @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.
*/
function _checkInitializing() internal view virtual {
if (!_isInitializing()) {
revert NotInitializing();
}
}
/**
* @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
* Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
* to any version. It is recommended to use this to lock implementation contracts that are designed to be called
* through proxies.
*
* Emits an {Initialized} event the first time it is successfully executed.
*/
function _disableInitializers() internal virtual {
// solhint-disable-next-line var-name-mixedcase
InitializableStorage storage $ = _getInitializableStorage();
if ($._initializing) {
revert InvalidInitialization();
}
if ($._initialized != type(uint64).max) {
$._initialized = type(uint64).max;
emit Initialized(type(uint64).max);
}
}
/**
* @dev Returns the highest version that has been initialized. See {reinitializer}.
*/
function _getInitializedVersion() internal view returns (uint64) {
return _getInitializableStorage()._initialized;
}
/**
* @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
*/
function _isInitializing() internal view returns (bool) {
return _getInitializableStorage()._initializing;
}
/**
* @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.
*
* NOTE: Consider following the ERC-7201 formula to derive storage locations.
*/
function _initializableStorageSlot() internal pure virtual returns (bytes32) {
return INITIALIZABLE_STORAGE;
}
/**
* @dev Returns a pointer to the storage namespace.
*/
// solhint-disable-next-line var-name-mixedcase
function _getInitializableStorage() private pure returns (InitializableStorage storage $) {
bytes32 slot = _initializableStorageSlot();
assembly {
$.slot := slot
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
import {Initializable} from "../proxy/utils/Initializable.sol";
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuardUpgradeable is Initializable {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
/// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard
struct ReentrancyGuardStorage {
uint256 _status;
}
// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff))
bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;
function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) {
assembly {
$.slot := ReentrancyGuardStorageLocation
}
}
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
function __ReentrancyGuard_init() internal onlyInitializing {
__ReentrancyGuard_init_unchained();
}
function __ReentrancyGuard_init_unchained() internal onlyInitializing {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
$._status = NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
// On the first call to nonReentrant, _status will be NOT_ENTERED
if ($._status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
$._status = ENTERED;
}
function _nonReentrantAfter() private {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
$._status = NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage();
return $._status == ENTERED;
}
}// SPDX-License-Identifier: GPL-2.0
pragma solidity ^0.8.20;
import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
import { Common } from "../libs/Common.sol";
import { Constants } from "../libs/Constants.sol";
import { IBlackList } from "./interface/IBlackList.sol";
import { IPausable } from "./interface/IPausable.sol";
import { IRole } from "./interface/IRole.sol";
// To define all the access modifiers
abstract contract Access is ReentrancyGuardUpgradeable {
address public administrator;
event AdministratorSet(address indexed caller, address indexed newAdministrator);
/**
* @notice Initialize the contract with administrator address
* @param _administrator address of the administrator
*/
function __Access_init(address _administrator) internal onlyInitializing {
__ReentrancyGuard_init();
require(_administrator != address(0), "!administrator");
administrator = _administrator;
}
modifier onlyAdmin() {
require(IRole(administrator).hasRole(Constants.ADMIN_ROLE, msg.sender), "!admin");
_;
}
modifier onlyCollateralManager() {
require(IRole(administrator).hasRole(Constants.COLLATERAL_MANAGER_ROLE, msg.sender), "!cmgr");
_;
}
modifier onlyBridge() {
require(IRole(administrator).hasRole(Constants.BRIDGE_ROLE, msg.sender), "!bridge");
_;
}
modifier onlyOperator() {
require(IRole(administrator).hasRole(Constants.BRIDGE_ROLE, msg.sender) || IRole(administrator).hasRole(Constants.LOCKBOX_ROLE, msg.sender) || IRole(administrator).hasRole(Constants.YIELD_ROLE, msg.sender), "!operator");
_;
}
modifier onlyManager() {
require(IRole(administrator).hasRole(Constants.MANAGER_ROLE, msg.sender), "!manager");
_;
}
modifier onlyMinterAndRedeemer() {
require(IRole(administrator).hasRole(Constants.MINTER_AND_REDEEMER_ROLE, msg.sender), "!minter");
_;
}
modifier onlyRewarder() {
require(IRole(administrator).hasRole(Constants.REWARDER_ROLE, msg.sender), "!rewarder");
_;
}
modifier onlyBond() {
require(IRole(administrator).hasRole(Constants.BOND_ROLE, msg.sender), "!bond");
_;
}
modifier notPaused() {
require(!IPausable(administrator).isPaused(address(this)), "paused");
_;
}
modifier notBlacklisted(address user) {
require(!IBlackList(administrator).isBlackListed(user), "blacklisted");
_;
}
/**
* @notice Set the administrator address
* @param _administrator address of the new administrator
*/
function setAdministrator(address _administrator) external onlyAdmin {
require(Common.isContract(_administrator), "!contract");
administrator = _administrator;
emit AdministratorSet(msg.sender, _administrator);
}
}// SPDX-License-Identifier: GPL-2.0
pragma solidity ^0.8.20;
interface IBlackList {
//functions
function blackListUsers(address[] calldata _users) external;
function removeBlackListUsers(address[] calldata _clearedUsers) external;
function isBlackListed(address _user) external view returns (bool);
//events
event BlackListed(address indexed _sender, address indexed _user);
event BlackListCleared(address indexed _sender, address indexed _user);
}// SPDX-License-Identifier: GPL-2.0
pragma solidity ^0.8.20;
interface IPausable {
function pause() external;
function unpause() external;
function pauseSC(address _sc) external;
function unpauseSC(address _sc) external;
function isPaused(address _sc) external view returns (bool);
//events
event Paused(address indexed _sender);
event Unpaused(address indexed _sender);
event Paused(address indexed _sender, address indexed _sc);
event Unpaused(address indexed _sender, address indexed _sc);
}// SPDX-License-Identifier: GPL-2.0
pragma solidity ^0.8.20;
interface IRole {
//functions
function grantRoles(bytes32 _role, address[] calldata _accounts) external;
function revokeRoles(bytes32 _role, address[] calldata _accounts) external;
function hasRole(bytes32 _role, address _account) external view returns (bool);
function hasRoles(bytes32[] calldata _role, address[] calldata _accounts) external view returns (bool[] memory);
//events
event RoleGranted(bytes32 indexed _role, address indexed _sender, address indexed _account);
event RoleRevoked(bytes32 indexed _role, address indexed _sender, address indexed _account);
}// SPDX-License-Identifier: GPL-2.0
pragma solidity ^0.8.20;
library Common {
/**
* @notice Check if an address is a contract
* @param _addr address to check
* @return true if the address is a contract, false otherwise
*/
function isContract(address _addr) internal view returns (bool) {
return _addr != address(0) && _addr.code.length != 0;
}
}// SPDX-License-Identifier: GPL-2.0
pragma solidity ^0.8.20;
library Constants {
// admin role
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN");
// role for minting and redeeming tokens
bytes32 public constant MINTER_AND_REDEEMER_ROLE = keccak256("MINTER_AND_REDEEMER");
// role for collateral manager who can transfer collateral
bytes32 public constant COLLATERAL_MANAGER_ROLE = keccak256("COLLATERAL_MANAGER");
// role for rewarder who can transfer reward
bytes32 public constant REWARDER_ROLE = keccak256("REWARDER");
// role for managing blacklist addresses
bytes32 public constant MANAGER_ROLE = keccak256("MANAGER");
// role assigned to bridges
bytes32 public constant BRIDGE_ROLE = keccak256("BRIDGE");
// role for perpetual bond
bytes32 public constant BOND_ROLE = keccak256("BOND");
// role for lockbox
bytes32 public constant LOCKBOX_ROLE = keccak256("LOCKBOX");
// role for yield
bytes32 public constant YIELD_ROLE = keccak256("YIELD");
uint256 constant PINT = 1e18;
uint256 constant HUNDRED_PERCENT = 100e18;
uint256 constant ONE_PERCENT = 1e18;
uint256 constant HUNDRED = 100;
// Period for vesting strategy rewards
uint256 constant VESTING_PERIOD = 24 hours;
// Bridge transaction types
bytes32 public constant BRIDGE_SEND_HASH = keccak256("BRIDGE_SEND");
}{
"evmVersion": "cancun",
"libraries": {},
"metadata": {
"appendCBOR": true,
"bytecodeHash": "ipfs",
"useLiteralContent": false
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [
"@layerzerolabs/oft-evm/=lib/devtools/packages/oft-evm/",
"@layerzerolabs/oapp-evm/=lib/devtools/packages/oapp-evm/",
"@layerzerolabs/lz-evm-protocol-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/protocol/",
"@layerzerolabs/lz-evm-messagelib-v2/=lib/layerzero-v2/packages/layerzero-v2/evm/messagelib/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"@openzeppelin-upgradeable/contracts/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@chainlink/contracts-ccip/=lib/chainlink/contracts/",
"@chainlink/contracts/=lib/chainlink/contracts/",
"solidity-bytes-utils/=lib/solidity-bytes-utils/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"chainlink/=lib/chainlink/",
"devtools/=lib/devtools/packages/toolbox-foundry/src/",
"ds-test/=lib/layerzero-v2/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"layerzero-v2/=lib/layerzero-v2/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"newAdministrator","type":"address"}],"name":"AdministratorSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"inputs":[],"name":"administrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_administrator","type":"address"},{"internalType":"int256","name":"initialPrice","type":"int256"},{"internalType":"uint8","name":"priceDecimals","type":"uint8"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_administrator","type":"address"}],"name":"setAdministrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"newPrice","type":"int256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608080604052346015576106ae908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80631cd15dff146103c1578063313ce5671461039e578063d4c19bda1461023f578063df8089ef146100c9578063f53d0a8e146100a25763feaf968c1461005b575f80fd5b3461009e575f36600319011261009e5760a06001600160501b03600354166001549060025460405192828452602084015280604084015260608301526080820152f35b5f80fd5b3461009e575f36600319011261009e575f546040516001600160a01b039091168152602090f35b3461009e57602036600319011261009e576100e26105c9565b5f54604051632474521560e21b81527fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4260048201523360248201526020816044816001600160a01b0386165afa908115610234575f91610205575b50156101d7576001600160a01b0382169182151590816101cc575b501561019b5781906bffffffffffffffffffffffff60a01b16175f55337fbc5dab480bc3beb0582944eefba927e4358ed22805ac40b2078d517b8a036ae75f80a3005b60405162461bcd60e51b81526020600482015260096024820152680858dbdb9d1c9858dd60ba1b6044820152606490fd5b90503b151583610158565b60405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606490fd5b610227915060203d60201161022d575b61021f81836105df565b810190610615565b8361013d565b503d610215565b6040513d5f823e3d90fd5b3461009e57602036600319011261009e576004356044602060018060a01b035f541660405192838092632474521560e21b82527f196445be8e29cb4e505699c67ec8eceb0187441d0913818e000a48d538545d1460048301523360248301525afa908115610234575f9161037f575b5015610350575f81131561031257600155426002556003546001600160501b0381166001600160501b0381146102fe5760016001600160501b03910116906001600160501b031916176003555f80f35b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b81526020600482015260166024820152755072696365206d75737420626520706f73697469766560501b6044820152606490fd5b60405162461bcd60e51b815260206004820152600760248201526610b6b4b73a32b960c91b6044820152606490fd5b610398915060203d60201161022d5761021f81836105df565b826102ae565b3461009e575f36600319011261009e57602060ff60035460501c16604051908152f35b3461009e57606036600319011261009e576103da6105c9565b60443560ff8116810361009e575f80516020610659833981519152549160ff8360401c16159267ffffffffffffffff8116801590816105c1575b60011490816105b7575b1590816105ae575b5061059f5767ffffffffffffffff1981166001175f805160206106598339815191525583610573575b5061045861062d565b61046061062d565b61046861062d565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b031690811561053d576001916bffffffffffffffffffffffff60a01b5f5416175f556024358255426002556003549060ff60501b9060501b16906affffffffffffffffffffff191617176003556104e657005b68ff0000000000000000195f8051602061065983398151915254165f80516020610659833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60405162461bcd60e51b815260206004820152600e60248201526d10b0b236b4b734b9ba3930ba37b960911b6044820152606490fd5b68ffffffffffffffffff191668010000000000000001175f80516020610659833981519152558361044f565b63f92ee8a960e01b5f5260045ffd5b90501585610426565b303b15915061041e565b859150610414565b600435906001600160a01b038216820361009e57565b90601f8019910116810190811067ffffffffffffffff82111761060157604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261009e5751801515810361009e5790565b60ff5f805160206106598339815191525460401c161561064957565b631afcd79f60e31b5f5260045ffdfef0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220e028430259966211001e00494195ae1bd19717aceb095ad5461c9a6e5789499364736f6c634300081a0033
Deployed Bytecode
0x60806040526004361015610011575f80fd5b5f3560e01c80631cd15dff146103c1578063313ce5671461039e578063d4c19bda1461023f578063df8089ef146100c9578063f53d0a8e146100a25763feaf968c1461005b575f80fd5b3461009e575f36600319011261009e5760a06001600160501b03600354166001549060025460405192828452602084015280604084015260608301526080820152f35b5f80fd5b3461009e575f36600319011261009e575f546040516001600160a01b039091168152602090f35b3461009e57602036600319011261009e576100e26105c9565b5f54604051632474521560e21b81527fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4260048201523360248201526020816044816001600160a01b0386165afa908115610234575f91610205575b50156101d7576001600160a01b0382169182151590816101cc575b501561019b5781906bffffffffffffffffffffffff60a01b16175f55337fbc5dab480bc3beb0582944eefba927e4358ed22805ac40b2078d517b8a036ae75f80a3005b60405162461bcd60e51b81526020600482015260096024820152680858dbdb9d1c9858dd60ba1b6044820152606490fd5b90503b151583610158565b60405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606490fd5b610227915060203d60201161022d575b61021f81836105df565b810190610615565b8361013d565b503d610215565b6040513d5f823e3d90fd5b3461009e57602036600319011261009e576004356044602060018060a01b035f541660405192838092632474521560e21b82527f196445be8e29cb4e505699c67ec8eceb0187441d0913818e000a48d538545d1460048301523360248301525afa908115610234575f9161037f575b5015610350575f81131561031257600155426002556003546001600160501b0381166001600160501b0381146102fe5760016001600160501b03910116906001600160501b031916176003555f80f35b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b81526020600482015260166024820152755072696365206d75737420626520706f73697469766560501b6044820152606490fd5b60405162461bcd60e51b815260206004820152600760248201526610b6b4b73a32b960c91b6044820152606490fd5b610398915060203d60201161022d5761021f81836105df565b826102ae565b3461009e575f36600319011261009e57602060ff60035460501c16604051908152f35b3461009e57606036600319011261009e576103da6105c9565b60443560ff8116810361009e575f80516020610659833981519152549160ff8360401c16159267ffffffffffffffff8116801590816105c1575b60011490816105b7575b1590816105ae575b5061059f5767ffffffffffffffff1981166001175f805160206106598339815191525583610573575b5061045861062d565b61046061062d565b61046861062d565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00556001600160a01b031690811561053d576001916bffffffffffffffffffffffff60a01b5f5416175f556024358255426002556003549060ff60501b9060501b16906affffffffffffffffffffff191617176003556104e657005b68ff0000000000000000195f8051602061065983398151915254165f80516020610659833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60405162461bcd60e51b815260206004820152600e60248201526d10b0b236b4b734b9ba3930ba37b960911b6044820152606490fd5b68ffffffffffffffffff191668010000000000000001175f80516020610659833981519152558361044f565b63f92ee8a960e01b5f5260045ffd5b90501585610426565b303b15915061041e565b859150610414565b600435906001600160a01b038216820361009e57565b90601f8019910116810190811067ffffffffffffffff82111761060157604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261009e5751801515810361009e5790565b60ff5f805160206106598339815191525460401c161561064957565b631afcd79f60e31b5f5260045ffdfef0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220e028430259966211001e00494195ae1bd19717aceb095ad5461c9a6e5789499364736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.