Source Code
Overview
MON Balance
MON Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DataStore
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.17;
import {Governable} from "./Governable.sol";
/// @title DataStore
/// @notice General purpose storage contract
/// @dev Access is restricted to governance
contract DataStore is Governable {
// Key-value stores
mapping(bytes32 => uint256) public uintValues;
mapping(bytes32 => int256) public intValues;
mapping(bytes32 => address) public addressValues;
mapping(bytes32 => bytes32) public dataValues;
mapping(bytes32 => bool) public boolValues;
mapping(bytes32 => string) public stringValues;
function initialize() external initializer {
_setGov(msg.sender);
}
/// @param key The key for the record
/// @param value value to store
/// @param overwrite Overwrites existing value if set to true
function setUint(
string calldata key,
uint256 value,
bool overwrite
) external onlyGov returns (bool) {
bytes32 hash = getHash(key);
if (overwrite || uintValues[hash] == 0) {
uintValues[hash] = value;
return true;
}
return false;
}
/// @param key The key for the record
function getUint(string calldata key) external view returns (uint256) {
return uintValues[getHash(key)];
}
/// @param key The key for the record
/// @param value value to store
/// @param overwrite Overwrites existing value if set to true
function setInt(
string calldata key,
int256 value,
bool overwrite
) external onlyGov returns (bool) {
bytes32 hash = getHash(key);
if (overwrite || intValues[hash] == 0) {
intValues[hash] = value;
return true;
}
return false;
}
/// @param key The key for the record
function getInt(string calldata key) external view returns (int256) {
return intValues[getHash(key)];
}
/// @param key The key for the record
/// @param value address to store
/// @param overwrite Overwrites existing value if set to true
function setAddress(
string calldata key,
address value,
bool overwrite
) external onlyGov returns (bool) {
bytes32 hash = getHash(key);
if (overwrite || addressValues[hash] == address(0)) {
addressValues[hash] = value;
return true;
}
return false;
}
/// @param key The key for the record
function getAddress(string calldata key) external view returns (address) {
return addressValues[getHash(key)];
}
/// @param key The key for the record
/// @param value byte value to store
function setData(
string calldata key,
bytes32 value
) external onlyGov returns (bool) {
dataValues[getHash(key)] = value;
return true;
}
/// @param key The key for the record
function getData(string calldata key) external view returns (bytes32) {
return dataValues[getHash(key)];
}
/// @param key The key for the record
/// @param value value to store (true / false)
function setBool(
string calldata key,
bool value
) external onlyGov returns (bool) {
boolValues[getHash(key)] = value;
return true;
}
/// @param key The key for the record
function getBool(string calldata key) external view returns (bool) {
return boolValues[getHash(key)];
}
/// @param key The key for the record
/// @param value string to store
function setString(
string calldata key,
string calldata value
) external onlyGov returns (bool) {
stringValues[getHash(key)] = value;
return true;
}
/// @param key The key for the record
function getString(
string calldata key
) external view returns (string memory) {
return stringValues[getHash(key)];
}
/// @param key string to hash
function getHash(string memory key) public pure returns (bytes32) {
return keccak256(abi.encodePacked(key));
}
}// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.17;
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
/// @title Governable
/// @notice Basic access control mechanism, gov has access to certain functions
abstract contract Governable is Initializable {
address public gov;
event SetGov(address prevGov, address nextGov);
/// @dev Reverts if called by any account other than gov
modifier onlyGov() {
require(msg.sender == gov, "!gov");
_;
}
/// @notice Sets a new governance address
/// @dev Only callable by governance
function setGov(address _gov) external onlyGov {
_setGov(_gov);
}
/// @notice Sets a new governance address
/// @dev Internal function without access restriction
function _setGov(address _gov) internal {
require(_gov != address(0), "!zero-gov");
address prevGov = gov;
gov = _gov;
emit SetGov(prevGov, _gov);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.2;
import "../../utils/Address.sol";
/**
* @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]
* ```
* 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 Indicates that the contract has been initialized.
* @custom:oz-retyped-from bool
*/
uint8 private _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private _initializing;
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint8 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 functions marked with `initializer` can be nested in the context of a
* constructor.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
bool isTopLevelCall = !_initializing;
require(
(isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1),
"Initializable: contract is already initialized"
);
_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 255 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint8 version) {
require(!_initializing && _initialized < version, "Initializable: contract is already initialized");
_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() {
require(_initializing, "Initializable: contract is not initializing");
_;
}
/**
* @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 {
require(!_initializing, "Initializable: contract is initializing");
if (_initialized < type(uint8).max) {
_initialized = type(uint8).max;
emit Initialized(type(uint8).max);
}
}
/**
* @dev Internal function that returns the initialized version. Returns `_initialized`
*/
function _getInitializedVersion() internal view returns (uint8) {
return _initialized;
}
/**
* @dev Internal function that returns the initialized version. Returns `_initializing`
*/
function _isInitializing() internal view returns (bool) {
return _initializing;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}{
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"chainlink/=node_modules/@chainlink/",
"pyth-sdk-solidity/=node_modules/@pythnetwork/pyth-sdk-solidity/",
"@uniswap/v2-periphery/=node_modules/@uniswap/v2-periphery/",
"@uniswap/v2-core/=node_modules/@uniswap/v2-core/",
"ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "london",
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"prevGov","type":"address"},{"indexed":false,"internalType":"address","name":"nextGov","type":"address"}],"name":"SetGov","type":"event"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"addressValues","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"boolValues","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"dataValues","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getBool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getData","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getInt","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"intValues","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"address","name":"value","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"setAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"bytes32","name":"value","type":"bytes32"}],"name":"setData","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"int256","name":"value","type":"int256"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"setInt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setString","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"setUint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"stringValues","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"uintValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080806040523461001657610d8c908161001c8239f35b600080fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816312d43a511461092c575080631870ad14146108c157806322538dae1461088f5780632f8e11ca1461084657806344a242b11461081a578063498bff00146107d25780635b6beeb9146107835780635cf740951461075d5780636e1a1336146105d2578063743df325146105ab5780637721dcbb146105475780638129fc1c1461042f5780639535ce12146103e25780639c981fcb14610398578063ae55c88814610351578063b8b2bdad146102d2578063bf40fac11461027f578063cfad57a214610239578063d38eebc714610212578063dcc2bc6e146101a8578063f15caeac146101705763fda69fae1461011557600080fd5b3461016c57602036600319011261016c5780356001600160401b038111610168579261015961015461014d8594602097369101610953565b36916109cb565b610c83565b81526002845220549051908152f35b8380fd5b8280fd5b503461016c57602036600319011261016c57816101a49361019992358152600660205220610a9a565b905191829182610a34565b0390f35b503461016c57606036600319011261016c5780356001600160401b03811161016857926101dd61020992602095369101610953565b6102006101e8610985565b93543360109190911c6001600160a01b031614610b40565b60243591610b72565b90519015158152f35b503461016c57602036600319011261016c5760209282913581526001845220549051908152f35b83823461027b57602036600319011261027b576001600160a01b039035818116810361016c5761027361027892845460101c163314610b40565b610cb3565b80f35b5080fd5b503461016c57602036600319011261016c5780356001600160401b0381116101685761015461014d602095936102b793369101610953565b8152600383528190205490516001600160a01b039091168152f35b503461016c578160031936011261016c578035906001600160401b0382116101685761030091369101610953565b906024359182151580930361034d5793610332610154859360209761014d60018060a01b03865460101c163314610b40565b815260058552209060ff801983541691161790555160018152f35b8480fd5b503461016c57602036600319011261016c5780356001600160401b0381116101685792829161038b61015461014d60209736908501610953565b8252845220549051908152f35b503461016c57602036600319011261016c5780356001600160401b038111610168576101a4936103d561015461014d610199958795369101610953565b8152600660205220610a9a565b503461016c57602036600319011261016c5780356001600160401b0381116101685760209361041d61015461014d60ff958795369101610953565b81526005855220541690519015158152f35b503461016c578260031936011261016c57825460ff8160081c16159182809361053a575b8015610523575b156104c9575060ff1981166001178455816104b8575b5061047a33610cb3565b610482575080f35b60207f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161ff001984541684555160018152a180f35b61ffff191661010117835538610470565b608490602085519162461bcd60e51b8352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152fd5b50303b15801561045a5750600160ff83161461045a565b50600160ff831610610453565b5091346105a857816003193601126105a8578235926001600160401b03841161027b5761059661015461057f60209636908501610953565b61014d60018060a01b03875460101c163314610b40565b82528352816024359120555160018152f35b80fd5b503461016c57602036600319011261016c5760209282913581526002845220549051908152f35b5091903461027b578060031936011261027b576001600160401b038335818111610168576106039036908601610953565b6024358381116107595761015461062061063a9236908a01610953565b94909361014d60018060a01b038a5460101c163314610b40565b85526020956006875284862093831161074657506106588354610a60565b601f8111610703575b5084601f83116001146106a15790829394959192610696575b50508160011b916000199060031b1c19161790555b5160018152f35b01359050388061067a565b90601f19831695848352878320925b888882106106ed575050836001959697106106d3575b505050811b01905561068f565b0135600019600384901b60f8161c191690553880806106c6565b60018395829394860135815501940191016106b0565b838652868620601f840160051c81019188851061073c575b601f0160051c01905b8181106107315750610661565b868155600101610724565b909150819061071b565b634e487b7160e01b865260419052602485fd5b8580fd5b503461016c57602036600319011261016c57602092818392358252845220549051908152f35b5091346105a85760203660031901126105a8578235906001600160401b0382116105a857366023830112156105a857506101546020938260246107cb943693013591016109cb565b9051908152f35b503461016c57602036600319011261016c5780356001600160401b038111610168579261080b61015461014d8594602097369101610953565b81526001845220549051908152f35b503461016c57602036600319011261016c578160209360ff923581526005855220541690519015158152f35b503461016c57606036600319011261016c5780356001600160401b038111610168579261087b61020992602095369101610953565b6108866101e8610985565b60243591610bc0565b503461016c57602036600319011261016c5735825260036020908152918190205490516001600160a01b039091168152f35b503461016c57606036600319011261016c578035906001600160401b038211610168576108f091369101610953565b602435916001600160a01b038084168403610759579161020993916109276020979461091a610985565b955460101c163314610b40565b610c0e565b84903461027b578160031936011261027b57905460101c6001600160a01b03168152602090f35b9181601f84011215610980578235916001600160401b038311610980576020838186019501011161098057565b600080fd5b60443590811515820361098057565b90601f801991011681019081106001600160401b038211176109b557604052565b634e487b7160e01b600052604160045260246000fd5b9291926001600160401b0382116109b557604051916109f4601f8201601f191660200184610994565b829481845281830111610980578281602093846000960137010152565b60005b838110610a245750506000910152565b8181015183820152602001610a14565b60409160208252610a548151809281602086015260208686019101610a11565b601f01601f1916010190565b90600182811c92168015610a90575b6020831014610a7a57565b634e487b7160e01b600052602260045260246000fd5b91607f1691610a6f565b9060405191826000825492610aae84610a60565b908184526001948581169081600014610b1d5750600114610ada575b5050610ad892500383610994565b565b9093915060005260209081600020936000915b818310610b05575050610ad893508201013880610aca565b85548884018501529485019487945091830191610aed565b915050610ad894506020925060ff191682840152151560051b8201013880610aca565b15610b4757565b606460405162461bcd60e51b815260206004820152600460248201526310b3b7bb60e11b6044820152fd5b61015490610b849294939436916109cb565b908015610baa575b610b97575050600090565b6000526001602052604060002055600190565b5080600052600160205260406000205415610b8c565b61015490610bd29294939436916109cb565b908015610bf8575b610be5575050600090565b6000526002602052604060002055600190565b5080600052600260205260406000205415610bda565b61015490610c209294939436916109cb565b908015610c64575b610c33575050600090565b600052600360205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055600190565b506000818152600360205260409020546001600160a01b031615610c28565b604051610cad60208281610ca08183019687815193849201610a11565b8101038084520182610994565b51902090565b6001600160a01b03818116918215610d25576000805462010000600160b01b03198116601093841b62010000600160b01b031617909155604080519190921c909216825260208201929092527f53351836099c03ffc3b1727d8abd4b0222afa87d4ed76ae3102d51369ef7f7859190a1565b60405162461bcd60e51b815260206004820152600960248201526810bd32b93796b3b7bb60b91b6044820152606490fdfea26469706673582212208491d32bba14448d3b5045d70d55f108a03cd393737ead9f8bb36b0e5601559b64736f6c63430008110033
Deployed Bytecode
0x6080604081815260048036101561001557600080fd5b600092833560e01c90816312d43a511461092c575080631870ad14146108c157806322538dae1461088f5780632f8e11ca1461084657806344a242b11461081a578063498bff00146107d25780635b6beeb9146107835780635cf740951461075d5780636e1a1336146105d2578063743df325146105ab5780637721dcbb146105475780638129fc1c1461042f5780639535ce12146103e25780639c981fcb14610398578063ae55c88814610351578063b8b2bdad146102d2578063bf40fac11461027f578063cfad57a214610239578063d38eebc714610212578063dcc2bc6e146101a8578063f15caeac146101705763fda69fae1461011557600080fd5b3461016c57602036600319011261016c5780356001600160401b038111610168579261015961015461014d8594602097369101610953565b36916109cb565b610c83565b81526002845220549051908152f35b8380fd5b8280fd5b503461016c57602036600319011261016c57816101a49361019992358152600660205220610a9a565b905191829182610a34565b0390f35b503461016c57606036600319011261016c5780356001600160401b03811161016857926101dd61020992602095369101610953565b6102006101e8610985565b93543360109190911c6001600160a01b031614610b40565b60243591610b72565b90519015158152f35b503461016c57602036600319011261016c5760209282913581526001845220549051908152f35b83823461027b57602036600319011261027b576001600160a01b039035818116810361016c5761027361027892845460101c163314610b40565b610cb3565b80f35b5080fd5b503461016c57602036600319011261016c5780356001600160401b0381116101685761015461014d602095936102b793369101610953565b8152600383528190205490516001600160a01b039091168152f35b503461016c578160031936011261016c578035906001600160401b0382116101685761030091369101610953565b906024359182151580930361034d5793610332610154859360209761014d60018060a01b03865460101c163314610b40565b815260058552209060ff801983541691161790555160018152f35b8480fd5b503461016c57602036600319011261016c5780356001600160401b0381116101685792829161038b61015461014d60209736908501610953565b8252845220549051908152f35b503461016c57602036600319011261016c5780356001600160401b038111610168576101a4936103d561015461014d610199958795369101610953565b8152600660205220610a9a565b503461016c57602036600319011261016c5780356001600160401b0381116101685760209361041d61015461014d60ff958795369101610953565b81526005855220541690519015158152f35b503461016c578260031936011261016c57825460ff8160081c16159182809361053a575b8015610523575b156104c9575060ff1981166001178455816104b8575b5061047a33610cb3565b610482575080f35b60207f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989161ff001984541684555160018152a180f35b61ffff191661010117835538610470565b608490602085519162461bcd60e51b8352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152fd5b50303b15801561045a5750600160ff83161461045a565b50600160ff831610610453565b5091346105a857816003193601126105a8578235926001600160401b03841161027b5761059661015461057f60209636908501610953565b61014d60018060a01b03875460101c163314610b40565b82528352816024359120555160018152f35b80fd5b503461016c57602036600319011261016c5760209282913581526002845220549051908152f35b5091903461027b578060031936011261027b576001600160401b038335818111610168576106039036908601610953565b6024358381116107595761015461062061063a9236908a01610953565b94909361014d60018060a01b038a5460101c163314610b40565b85526020956006875284862093831161074657506106588354610a60565b601f8111610703575b5084601f83116001146106a15790829394959192610696575b50508160011b916000199060031b1c19161790555b5160018152f35b01359050388061067a565b90601f19831695848352878320925b888882106106ed575050836001959697106106d3575b505050811b01905561068f565b0135600019600384901b60f8161c191690553880806106c6565b60018395829394860135815501940191016106b0565b838652868620601f840160051c81019188851061073c575b601f0160051c01905b8181106107315750610661565b868155600101610724565b909150819061071b565b634e487b7160e01b865260419052602485fd5b8580fd5b503461016c57602036600319011261016c57602092818392358252845220549051908152f35b5091346105a85760203660031901126105a8578235906001600160401b0382116105a857366023830112156105a857506101546020938260246107cb943693013591016109cb565b9051908152f35b503461016c57602036600319011261016c5780356001600160401b038111610168579261080b61015461014d8594602097369101610953565b81526001845220549051908152f35b503461016c57602036600319011261016c578160209360ff923581526005855220541690519015158152f35b503461016c57606036600319011261016c5780356001600160401b038111610168579261087b61020992602095369101610953565b6108866101e8610985565b60243591610bc0565b503461016c57602036600319011261016c5735825260036020908152918190205490516001600160a01b039091168152f35b503461016c57606036600319011261016c578035906001600160401b038211610168576108f091369101610953565b602435916001600160a01b038084168403610759579161020993916109276020979461091a610985565b955460101c163314610b40565b610c0e565b84903461027b578160031936011261027b57905460101c6001600160a01b03168152602090f35b9181601f84011215610980578235916001600160401b038311610980576020838186019501011161098057565b600080fd5b60443590811515820361098057565b90601f801991011681019081106001600160401b038211176109b557604052565b634e487b7160e01b600052604160045260246000fd5b9291926001600160401b0382116109b557604051916109f4601f8201601f191660200184610994565b829481845281830111610980578281602093846000960137010152565b60005b838110610a245750506000910152565b8181015183820152602001610a14565b60409160208252610a548151809281602086015260208686019101610a11565b601f01601f1916010190565b90600182811c92168015610a90575b6020831014610a7a57565b634e487b7160e01b600052602260045260246000fd5b91607f1691610a6f565b9060405191826000825492610aae84610a60565b908184526001948581169081600014610b1d5750600114610ada575b5050610ad892500383610994565b565b9093915060005260209081600020936000915b818310610b05575050610ad893508201013880610aca565b85548884018501529485019487945091830191610aed565b915050610ad894506020925060ff191682840152151560051b8201013880610aca565b15610b4757565b606460405162461bcd60e51b815260206004820152600460248201526310b3b7bb60e11b6044820152fd5b61015490610b849294939436916109cb565b908015610baa575b610b97575050600090565b6000526001602052604060002055600190565b5080600052600160205260406000205415610b8c565b61015490610bd29294939436916109cb565b908015610bf8575b610be5575050600090565b6000526002602052604060002055600190565b5080600052600260205260406000205415610bda565b61015490610c209294939436916109cb565b908015610c64575b610c33575050600090565b600052600360205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055600190565b506000818152600360205260409020546001600160a01b031615610c28565b604051610cad60208281610ca08183019687815193849201610a11565b8101038084520182610994565b51902090565b6001600160a01b03818116918215610d25576000805462010000600160b01b03198116601093841b62010000600160b01b031617909155604080519190921c909216825260208201929092527f53351836099c03ffc3b1727d8abd4b0222afa87d4ed76ae3102d51369ef7f7859190a1565b60405162461bcd60e51b815260206004820152600960248201526810bd32b93796b3b7bb60b91b6044820152606490fdfea26469706673582212208491d32bba14448d3b5045d70d55f108a03cd393737ead9f8bb36b0e5601559b64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.