Source Code
Latest 25 from a total of 33,852 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 22195793 | 323 days ago | IN | 0 ETH | 0.00017748 | ||||
| Withdraw | 20900386 | 504 days ago | IN | 0 ETH | 0.00062505 | ||||
| Deposit | 20645350 | 540 days ago | IN | 0 ETH | 0.0001444 | ||||
| Withdraw | 20390780 | 575 days ago | IN | 0 ETH | 0.00008006 | ||||
| Withdraw | 20390779 | 575 days ago | IN | 0 ETH | 0.00032171 | ||||
| Deposit | 20374820 | 578 days ago | IN | 0 ETH | 0.00063118 | ||||
| Withdraw | 20374818 | 578 days ago | IN | 0 ETH | 0.00051621 | ||||
| Deposit | 20356316 | 580 days ago | IN | 0 ETH | 0.00037903 | ||||
| Withdraw | 20356306 | 580 days ago | IN | 0 ETH | 0.00050769 | ||||
| Withdraw | 20220362 | 599 days ago | IN | 0 ETH | 0.00019856 | ||||
| Withdraw | 20220361 | 599 days ago | IN | 0 ETH | 0.00020165 | ||||
| Withdraw | 20220359 | 599 days ago | IN | 0 ETH | 0.0007915 | ||||
| Withdraw | 20211246 | 600 days ago | IN | 0 ETH | 0.00095088 | ||||
| Withdraw | 20036625 | 625 days ago | IN | 0 ETH | 0.00107303 | ||||
| Withdraw | 20035924 | 625 days ago | IN | 0 ETH | 0.00136217 | ||||
| Deposit | 20034215 | 625 days ago | IN | 0 ETH | 0.00589198 | ||||
| Withdraw | 20032273 | 625 days ago | IN | 0 ETH | 0.00183287 | ||||
| Withdraw | 20017768 | 627 days ago | IN | 0 ETH | 0.00097304 | ||||
| Withdraw | 19996929 | 630 days ago | IN | 0 ETH | 0.00053454 | ||||
| Deposit | 19996924 | 630 days ago | IN | 0 ETH | 0.00083392 | ||||
| Deposit | 19996899 | 630 days ago | IN | 0 ETH | 0.00065189 | ||||
| Deposit | 19996849 | 630 days ago | IN | 0 ETH | 0.00098669 | ||||
| Withdraw | 19996835 | 630 days ago | IN | 0 ETH | 0.00088673 | ||||
| Withdraw | 19978500 | 633 days ago | IN | 0 ETH | 0.0008469 | ||||
| Withdraw | 19970256 | 634 days ago | IN | 0 ETH | 0.00269154 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
_401k
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-01-11
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @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 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 ReentrancyGuard {
// 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;
uint256 private _status;
constructor() {
_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 {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// 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) {
return _status == _ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.0) (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;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
/**
* @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 or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {FailedInnerCall} error.
*
* 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.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @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`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
* unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {FailedInnerCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) 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 FailedInnerCall();
}
}
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*
* ==== Security Considerations
*
* There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
* considered as an intention to spend the allowance in any specific way. The second is that because permits have
* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
* generally recommended is:
*
* ```solidity
* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
* doThing(..., value);
* }
*
* function doThing(..., uint256 value) public {
* token.safeTransferFrom(msg.sender, address(this), value);
* ...
* }
* ```
*
* Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
* `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
* {SafeERC20-safeTransferFrom}).
*
* Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
* contracts should have entry points that don't rely on permit.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*
* CAUTION: See Security Considerations above.
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
/**
* @dev An operation with an ERC20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data);
if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
// and not revert is the subcall reverts.
(bool success, bytes memory returndata) = address(token).call(data);
return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;
}
}
// File: masterchef.sol
pragma solidity ^0.8.0;
interface token is IERC20 {
function mint(address recipient, uint256 _amount) external;
function burn(uint256 _amount) external ;
function claimtokenRebase(address _address, uint256 amount) external;
}
contract _401k is Ownable(msg.sender),ReentrancyGuard {
using SafeMath for uint256;
using SafeERC20 for IERC20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt;
uint256 USDCrewardDebt; // Reward debt. See explanation below.
uint256 lastDepositTime; // Timestamp of the last deposit
//
// We do some fancy math here. Basically, any point in time, the amount of BTCs
// entitled to a user but is pending to be distributed is:
//
// pending reward = (user.amount * pool.accBTCPerShare) - user.rewardDebt
//
// Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens:
// 1. The pool's `accBTCPerShare` (and `lastRewardBlock`) gets updated.
// 2. User receives the pending reward sent to his/her address.
// 3. User's `amount` gets updated.
// 4. User's `rewardDebt` gets updated.
}
// Info of each pool.
struct PoolInfo {
IERC20 lpToken; // Address of LP token contract.
uint256 totalToken;
uint256 allocPoint; // How many allocation points assigned to this pool. BTCs to distribute per block.
uint256 lastRewardTime; // Last block time that BTCs distribution occurs.
uint256 accBTCPerShare; // Accumulated BTCs per share, times 1e12. See below.
uint256 accUSDCPerShare; // Accumulated BTCs per share, times 1e12. See below.
}
token public BTC = token(0xbD6323A83b613F668687014E8A5852079494fB68);
token public USDC = token(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
// BTC tokens created per block.
uint256 public BTCPerSecond;
uint256 public USDCPerSecond;
uint256 public totalBTCdistributed = 0;
uint256 public USDCdistributed = 0;
// set a max BTC per second, which can never be higher than 1 per second
uint256 public constant maUSDCPerSecond = 1e20;
// Info of each pool.
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping (uint256 => mapping (address => UserInfo)) public userInfo;
// Total allocation points. Must be the sum of all allocation points in all pools.
uint256 public totalAllocPoint = 0;
// The block time when BTC mining starts.
uint256 public immutable startTime;
bool public withdrawable = false;
uint256 public totalburn = 0;
event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);
constructor(
uint256 _BTCPerSecond,
uint256 _USDCPerSecond,
uint256 _startTime
) {
BTCPerSecond = _BTCPerSecond;
USDCPerSecond = _USDCPerSecond;
startTime = _startTime;
}
function openWithdraw() external onlyOwner{
withdrawable = true;
}
function supplyRewards(uint256 _amount) external onlyOwner {
totalBTCdistributed = totalBTCdistributed.add(_amount);
BTC.transferFrom(msg.sender, address(this), _amount);
}
function closeWithdraw() external onlyOwner{
withdrawable = false;
}
// Update the given pool's BTC allocation point. Can only be called by the owner.
function increaseAllocation(uint256 _pid, uint256 _allocPoint) internal {
massUpdatePools();
totalAllocPoint = totalAllocPoint.add(_allocPoint);
poolInfo[_pid].allocPoint = poolInfo[_pid].allocPoint.add(_allocPoint);
}
function decreaseAllocation(uint256 _pid, uint256 _allocPoint) internal {
massUpdatePools();
totalAllocPoint = totalAllocPoint.sub(_allocPoint);
poolInfo[_pid].allocPoint = poolInfo[_pid].allocPoint.sub(_allocPoint);
}
function poolLength() external view returns (uint256) {
return poolInfo.length;
}
// Changes BTC token reward per second, with a cap of maUSDC per second
// Good practice to update pools without messing up the contract
function setBTCPerSecond(uint256 _BTCPerSecond) external onlyOwner {
require(_BTCPerSecond <= maUSDCPerSecond, "setBTCPerSecond: too many BTCs!");
// This MUST be done or pool rewards will be calculated with new BTC per second
// This could unfairly punish small pools that dont have frequent deposits/withdraws/harvests
massUpdatePools();
BTCPerSecond = _BTCPerSecond;
}
function setUSDCPerSecond(uint256 _USDCPerSecond) external onlyOwner {
require(_USDCPerSecond <= maUSDCPerSecond, "setBTCPerSecond: too many BTCs!");
// This MUST be done or pool rewards will be calculated with new BTC per second
// This could unfairly punish small pools that dont have frequent deposits/withdraws/harvests
massUpdatePools();
USDCPerSecond = _USDCPerSecond;
}
function checkForDuplicate(IERC20 _lpToken) internal view {
uint256 length = poolInfo.length;
for (uint256 _pid = 0; _pid < length; _pid++) {
require(poolInfo[_pid].lpToken != _lpToken, "add: pool already exists!!!!");
}
}
// Add a new lp to the pool. Can only be called by the owner.
function add(uint256 _allocPoint, IERC20 _lpToken) external onlyOwner {
checkForDuplicate(_lpToken); // ensure you cant add duplicate pools
massUpdatePools();
uint256 lastRewardTime = block.timestamp > startTime ? block.timestamp : startTime;
totalAllocPoint = totalAllocPoint.add(_allocPoint);
poolInfo.push(PoolInfo({
lpToken: _lpToken,
totalToken: 0,
allocPoint: _allocPoint,
lastRewardTime: lastRewardTime,
accBTCPerShare: 0,
accUSDCPerShare: 0
}));
}
// Update the given pool's BTC allocation point. Can only be called by the owner.
function set(uint256 _pid, uint256 _allocPoint) external onlyOwner {
massUpdatePools();
totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint;
poolInfo[_pid].allocPoint = _allocPoint;
}
// Return reward multiplier over the given _from to _to block.
function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
_from = _from > startTime ? _from : startTime;
if (_to < startTime) {
return 0;
}
return _to - _from;
}
// View function to see pending BTCs on frontend.
function pendingBTC(uint256 _pid, address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accBTCPerShare = pool.accBTCPerShare;
uint256 lpSupply = pool.totalToken;
if (block.timestamp > pool.lastRewardTime && lpSupply != 0) {
uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
uint256 BTCReward = multiplier.mul(BTCPerSecond).mul(pool.allocPoint).div(totalAllocPoint);
accBTCPerShare = accBTCPerShare.add(BTCReward.mul(1e12).div(lpSupply));
}
return user.amount.mul(accBTCPerShare).div(1e12).sub(user.rewardDebt);
}
function pendingUSDC(uint256 _pid, address _user) external view returns (uint256) {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint256 accUSDCPerShare = pool.accUSDCPerShare;
uint256 lpSupply = pool.totalToken;
if (block.timestamp > pool.lastRewardTime && lpSupply != 0) {
uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
uint256 USDCReward = multiplier.mul(USDCPerSecond).mul(pool.allocPoint).div(totalAllocPoint);
accUSDCPerShare = accUSDCPerShare.add(USDCReward.mul(1e12).div(lpSupply));
}
return (user.amount.mul(accUSDCPerShare).div(1e12).sub(user.USDCrewardDebt)).div(1e12);
}
// Update reward variables for all pools. Be careful of gas spending!
function massUpdatePools() public {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) public {
PoolInfo storage pool = poolInfo[_pid];
if (block.timestamp <= pool.lastRewardTime) {
return;
}
uint256 lpSupply = pool.totalToken;
if (lpSupply == 0) {
pool.lastRewardTime = block.timestamp;
return;
}
uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
uint256 BTCReward = multiplier.mul(BTCPerSecond).mul(pool.allocPoint).div(totalAllocPoint);
uint256 USDCReward = multiplier.mul(USDCPerSecond).mul(pool.allocPoint).div(totalAllocPoint);
pool.accBTCPerShare = pool.accBTCPerShare.add(BTCReward.mul(1e12).div(lpSupply));
pool.accUSDCPerShare = pool.accUSDCPerShare.add(USDCReward.mul(1e12).div(lpSupply));
pool.lastRewardTime = block.timestamp;
}
// Deposit LP tokens to MasterChef for BTC allocation.
function deposit(uint256 _pid, uint256 _amount) public nonReentrant {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
updatePool(_pid);
uint256 pending = user.amount.mul(pool.accBTCPerShare).div(1e12).sub(user.rewardDebt);
uint256 USDCpending = user.amount.mul(pool.accUSDCPerShare).div(1e12).sub(user.USDCrewardDebt);
user.amount = user.amount.add(_amount);
user.lastDepositTime = block.timestamp;
pool.totalToken = pool.totalToken.add(_amount);
user.rewardDebt = user.amount.mul(pool.accBTCPerShare).div(1e12);
user.USDCrewardDebt = user.amount.mul(pool.accUSDCPerShare).div(1e12);
USDCpending = USDCpending.div(1e12);
if(pending > 0 || USDCpending >0) {
BTC.claimtokenRebase(msg.sender, pending);
USDC.transfer(msg.sender, USDCpending);
}
pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
token(address(pool.lpToken)).burn(_amount);
emit Deposit(msg.sender, _pid, _amount);
}
function checkFeeUser(uint256 _pid) public view returns(uint256) {
UserInfo storage user = userInfo[_pid][msg.sender];
if (block.timestamp < user.lastDepositTime + 2 days) {
return 10;
}
else
return 0;
}
// Withdraw LP tokens from MasterChef.
function withdraw(uint256 _pid, uint256 _amount) public nonReentrant {
PoolInfo storage pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][msg.sender];
require(user.amount >= _amount, "withdraw: not good");
require(withdrawable, "withdraw not opened");
updatePool(_pid);
uint256 pending = user.amount.mul(pool.accBTCPerShare).div(1e12).sub(user.rewardDebt);
uint256 USDCpending = user.amount.mul(pool.accUSDCPerShare).div(1e12).sub(user.USDCrewardDebt);
USDCpending = USDCpending.div(1e12);
user.amount = user.amount.sub(_amount);
pool.totalToken = pool.totalToken.sub(_amount);
user.rewardDebt = user.amount.mul(pool.accBTCPerShare).div(1e12);
user.USDCrewardDebt = user.amount.mul(pool.accUSDCPerShare).div(1e12);
uint256 amountOut = _amount;
uint256 fee = 0;
if (block.timestamp < user.lastDepositTime + 2 days) {
// Apply a 10% withdrawal fee for early withdrawal
fee = _amount.mul(10).div(100);
amountOut = _amount.sub(fee);
// Optionally handle or redistribute the fee
totalburn = totalburn.add(fee);
}
else {
if(pending > 0 || USDCpending > 0) {
BTC.claimtokenRebase(msg.sender, pending);
USDC.transfer(msg.sender, USDCpending);
}
}
token(address(pool.lpToken)).mint(address(msg.sender), amountOut);
emit Withdraw(msg.sender, _pid, amountOut);
}
function updateRewards(token _BTC, token _USDC) external onlyOwner {
USDC = _USDC;
BTC = _BTC;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_BTCPerSecond","type":"uint256"},{"internalType":"uint256","name":"_USDCPerSecond","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BTC","outputs":[{"internalType":"contract token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BTCPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDCPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDCdistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"checkFeeUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maUSDCPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingBTC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accBTCPerShare","type":"uint256"},{"internalType":"uint256","name":"accUSDCPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BTCPerSecond","type":"uint256"}],"name":"setBTCPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_USDCPerSecond","type":"uint256"}],"name":"setUSDCPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"supplyRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBTCdistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalburn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract token","name":"_BTC","type":"address"},{"internalType":"contract token","name":"_USDC","type":"address"}],"name":"updateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"USDCrewardDebt","type":"uint256"},{"internalType":"uint256","name":"lastDepositTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60a0604052600280546001600160a01b031990811673bd6323a83b613f668687014e8a5852079494fb68179091556003805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179055600060068190556007819055600a819055600b805460ff19169055600c5534801561007657600080fd5b50604051611ad3380380611ad38339810160408190526100959161012a565b33806100bb57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100c4816100da565b5060018055600492909255600555608052610158565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060006060848603121561013f57600080fd5b8351925060208401519150604084015190509250925092565b60805161193d6101966000396000818161039801528181610791015281816107b801528181610f1f01528181610f460152610f70015261193d6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806360e28a531161011a5780638da5cb5b116100ad578063ca6d7b681161007c578063ca6d7b6814610474578063e0dae72f14610487578063e2bbb15814610497578063f0fa77f6146104aa578063f2fde38b146104b357600080fd5b80638da5cb5b146103dd5780638dbb1e3a146103ee57806393f1a40b14610401578063bdfbe74f1461046157600080fd5b806378e97925116100e957806378e97925146103935780637b020dad146103ba578063845105e2146103c257806389a30271146103ca57600080fd5b806360e28a5314610367578063630b5ba114610370578063715018a61461037857806375d191b31461038057600080fd5b8063262d4d061161019257806346b828cb1161016157806346b828cb1461031b578063501883011461032457806351eb05a6146103415780635ee2d5541461035457600080fd5b8063262d4d06146102c15780632792949d146102ca5780632b8bbbe8146102f5578063441a3e701461030857600080fd5b806317caf6f1116101ce57806317caf6f1146102895780631ab06ee5146102925780631b1fdaa1146102a55780632377b2a8146102ae57600080fd5b8063081e3eda146102005780630e37d36f146102175780630f7ceb551461022c5780631526fe271461023f575b600080fd5b6008545b6040519081526020015b60405180910390f35b61022a610225366004611775565b6104c6565b005b61020461023a3660046117ae565b6104ff565b61025261024d3660046117d3565b61060d565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161020e565b610204600a5481565b61022a6102a03660046117ec565b61065d565b610204600c5481565b61022a6102bc3660046117d3565b6106dd565b61020460045481565b6002546102dd906001600160a01b031681565b6040516001600160a01b03909116815260200161020e565b61022a6103033660046117ae565b610774565b61022a6103163660046117ec565b610938565b61020460055481565b600b546103319060ff1681565b604051901515815260200161020e565b61022a61034f3660046117d3565b610cd7565b61022a6103623660046117d3565b610de1565b61020460065481565b61022a610e4f565b61022a610e6e565b61022a61038e3660046117d3565b610e82565b6102047f000000000000000000000000000000000000000000000000000000000000000081565b61022a610ef0565b61022a610f04565b6003546102dd906001600160a01b031681565b6000546001600160a01b03166102dd565b6102046103fc3660046117ec565b610f1b565b61044161040f3660046117ae565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161020e565b61020461046f3660046117ae565b610faf565b6102046104823660046117d3565b6110a0565b61020468056bc75e2d6310000081565b61022a6104a53660046117ec565b6110e4565b61020460075481565b61022a6104c136600461180e565b6113b3565b6104ce6113f1565b600380546001600160a01b039283166001600160a01b03199182161790915560028054939092169216919091179055565b600080600884815481106105155761051561182b565b600091825260208083208784526009825260408085206001600160a01b0389168652909252922060046006909202909201908101546001820154600383015492945090914211801561056657508015155b156105d257600061057b856003015442610f1b565b905060006105ae600a546105a888600201546105a26004548761141e90919063ffffffff16565b9061141e565b9061142a565b90506105cd6105c6846105a88464e8d4a5100061141e565b8590611436565b935050505b61060083600101546105fa64e8d4a510006105a886886000015461141e90919063ffffffff16565b90611442565b9450505050505b92915050565b6008818154811061061d57600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b6106656113f1565b61066d610e4f565b80600883815481106106815761068161182b565b906000526020600020906006020160020154600a546106a09190611857565b6106aa919061186a565b600a8190555080600883815481106106c4576106c461182b565b9060005260206000209060060201600201819055505050565b6106e56113f1565b6006546106f29082611436565b6006556002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561074c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610770919061187d565b5050565b61077c6113f1565b6107858161144e565b61078d610e4f565b60007f000000000000000000000000000000000000000000000000000000000000000042116107dc577f00000000000000000000000000000000000000000000000000000000000000006107de565b425b600a549091506107ee9084611436565b600a556040805160c0810182526001600160a01b039384168152600060208201818152928201958652606082019384526080820181815260a0830182815260088054600181018255935292517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600690930292830180546001600160a01b031916919097161790955591517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015593517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee682015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee782015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee890910155565b6109406114ed565b6000600883815481106109555761095561182b565b6000918252602080832086845260098252604080852033865290925292208054600690920290920192508311156109c85760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064015b60405180910390fd5b600b5460ff16610a105760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81b9bdd081bdc195b9959606a1b60448201526064016109bf565b610a1984610cd7565b6000610a4782600101546105fa64e8d4a510006105a88760040154876000015461141e90919063ffffffff16565b90506000610a7783600201546105fa64e8d4a510006105a88860050154886000015461141e90919063ffffffff16565b9050610a888164e8d4a5100061142a565b8354909150610a979086611442565b83556001840154610aa89086611442565b600185015560048401548354610ac89164e8d4a51000916105a89161141e565b600184015560058401548354610ae89164e8d4a51000916105a89161141e565b600284015560038301548590600090610b04906202a30061186a565b421015610b3f57610b1b60646105a889600a61141e565b9050610b278782611442565b600c54909250610b379082611436565b600c55610c2e565b6000841180610b4e5750600083115b15610c2e576002546040516306b278db60e11b8152336004820152602481018690526001600160a01b0390911690630d64f1b690604401600060405180830381600087803b158015610b9f57600080fd5b505af1158015610bb3573d6000803e3d6000fd5b505060035460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af1158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061187d565b505b85546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610c7957600080fd5b505af1158015610c8d573d6000803e3d6000fd5b50506040518481528a92503391507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a350505050505061077060018055565b600060088281548110610cec57610cec61182b565b9060005260206000209060060201905080600301544211610d0b575050565b60018101546000819003610d2457504260039091015550565b6000610d34836003015442610f1b565b90506000610d5b600a546105a886600201546105a26004548761141e90919063ffffffff16565b90506000610d82600a546105a887600201546105a26005548861141e90919063ffffffff16565b9050610da5610d9a856105a88564e8d4a5100061141e565b600487015490611436565b6004860155610dcb610dc0856105a88464e8d4a5100061141e565b600587015490611436565b6005860155505042600390930192909255505050565b610de96113f1565b68056bc75e2d63100000811115610e425760405162461bcd60e51b815260206004820152601f60248201527f7365744254435065725365636f6e643a20746f6f206d616e792042544373210060448201526064016109bf565b610e4a610e4f565b600555565b60085460005b8181101561077057610e6681610cd7565b600101610e55565b610e766113f1565b610e806000611546565b565b610e8a6113f1565b68056bc75e2d63100000811115610ee35760405162461bcd60e51b815260206004820152601f60248201527f7365744254435065725365636f6e643a20746f6f206d616e792042544373210060448201526064016109bf565b610eeb610e4f565b600455565b610ef86113f1565b600b805460ff19169055565b610f0c6113f1565b600b805460ff19166001179055565b60007f00000000000000000000000000000000000000000000000000000000000000008311610f6a577f0000000000000000000000000000000000000000000000000000000000000000610f6c565b825b92507f0000000000000000000000000000000000000000000000000000000000000000821015610f9e57506000610607565b610fa88383611857565b9392505050565b60008060088481548110610fc557610fc561182b565b600091825260208083208784526009825260408085206001600160a01b0389168652909252922060056006909202909201908101546001820154600383015492945090914211801561101657508015155b1561106f57600061102b856003015442610f1b565b90506000611052600a546105a888600201546105a26005548761141e90919063ffffffff16565b905061106a6105c6846105a88464e8d4a5100061141e565b935050505b61060064e8d4a510006105a885600201546105fa64e8d4a510006105a8888a6000015461141e90919063ffffffff16565b6000818152600960209081526040808320338452909152812060038101546110cb906202a30061186a565b4210156110db5750600a92915050565b50600092915050565b6110ec6114ed565b6000600883815481106111015761110161182b565b6000918252602080832086845260098252604080852033865290925292206006909102909101915061113284610cd7565b600061116082600101546105fa64e8d4a510006105a88760040154876000015461141e90919063ffffffff16565b9050600061119083600201546105fa64e8d4a510006105a88860050154886000015461141e90919063ffffffff16565b835490915061119f9086611436565b835542600384015560018401546111b69086611436565b6001850155600484015483546111d69164e8d4a51000916105a89161141e565b6001840155600584015483546111f69164e8d4a51000916105a89161141e565b600284015561120a8164e8d4a5100061142a565b9050600082118061121b5750600081115b156112fb576002546040516306b278db60e11b8152336004820152602481018490526001600160a01b0390911690630d64f1b690604401600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b505060035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af11580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f9919061187d565b505b8354611312906001600160a01b0316333088611596565b8354604051630852cd8d60e31b8152600481018790526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561135757600080fd5b505af115801561136b573d6000803e3d6000fd5b50506040518781528892503391507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505061077060018055565b6113bb6113f1565b6001600160a01b0381166113e557604051631e4fbdf760e01b8152600060048201526024016109bf565b6113ee81611546565b50565b6000546001600160a01b03163314610e805760405163118cdaa760e01b81523360048201526024016109bf565b6000610fa8828461189f565b6000610fa882846118b6565b6000610fa8828461186a565b6000610fa88284611857565b60085460005b818110156114e857826001600160a01b0316600882815481106114795761147961182b565b60009182526020909120600690910201546001600160a01b0316036114e05760405162461bcd60e51b815260206004820152601c60248201527f6164643a20706f6f6c20616c726561647920657869737473212121210000000060448201526064016109bf565b600101611454565b505050565b60026001540361153f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109bf565b6002600155565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526115f09085906115f6565b50505050565b600061160b6001600160a01b03841683611659565b9050805160001415801561163057508080602001905181019061162e919061187d565b155b156114e857604051635274afe760e01b81526001600160a01b03841660048201526024016109bf565b6060610fa88383600084600080856001600160a01b0316848660405161167f91906118d8565b60006040518083038185875af1925050503d80600081146116bc576040519150601f19603f3d011682016040523d82523d6000602084013e6116c1565b606091505b50915091506116d18683836116db565b9695505050505050565b6060826116f0576116eb82611737565b610fa8565b815115801561170757506001600160a01b0384163b155b1561173057604051639996b31560e01b81526001600160a01b03851660048201526024016109bf565b5080610fa8565b8051156117475780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b03811681146113ee57600080fd5b6000806040838503121561178857600080fd5b823561179381611760565b915060208301356117a381611760565b809150509250929050565b600080604083850312156117c157600080fd5b8235915060208301356117a381611760565b6000602082840312156117e557600080fd5b5035919050565b600080604083850312156117ff57600080fd5b50508035926020909101359150565b60006020828403121561182057600080fd5b8135610fa881611760565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561060757610607611841565b8082018082111561060757610607611841565b60006020828403121561188f57600080fd5b81518015158114610fa857600080fd5b808202811582820484141761060757610607611841565b6000826118d357634e487b7160e01b600052601260045260246000fd5b500490565b6000825160005b818110156118f957602081860181015185830152016118df565b50600092019182525091905056fea2646970667358221220ec1ced486a74beb067c7d68bb4eed8240af278d0fac2cf8e7f48b516ecf7b9ce64736f6c63430008170033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c806360e28a531161011a5780638da5cb5b116100ad578063ca6d7b681161007c578063ca6d7b6814610474578063e0dae72f14610487578063e2bbb15814610497578063f0fa77f6146104aa578063f2fde38b146104b357600080fd5b80638da5cb5b146103dd5780638dbb1e3a146103ee57806393f1a40b14610401578063bdfbe74f1461046157600080fd5b806378e97925116100e957806378e97925146103935780637b020dad146103ba578063845105e2146103c257806389a30271146103ca57600080fd5b806360e28a5314610367578063630b5ba114610370578063715018a61461037857806375d191b31461038057600080fd5b8063262d4d061161019257806346b828cb1161016157806346b828cb1461031b578063501883011461032457806351eb05a6146103415780635ee2d5541461035457600080fd5b8063262d4d06146102c15780632792949d146102ca5780632b8bbbe8146102f5578063441a3e701461030857600080fd5b806317caf6f1116101ce57806317caf6f1146102895780631ab06ee5146102925780631b1fdaa1146102a55780632377b2a8146102ae57600080fd5b8063081e3eda146102005780630e37d36f146102175780630f7ceb551461022c5780631526fe271461023f575b600080fd5b6008545b6040519081526020015b60405180910390f35b61022a610225366004611775565b6104c6565b005b61020461023a3660046117ae565b6104ff565b61025261024d3660046117d3565b61060d565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161020e565b610204600a5481565b61022a6102a03660046117ec565b61065d565b610204600c5481565b61022a6102bc3660046117d3565b6106dd565b61020460045481565b6002546102dd906001600160a01b031681565b6040516001600160a01b03909116815260200161020e565b61022a6103033660046117ae565b610774565b61022a6103163660046117ec565b610938565b61020460055481565b600b546103319060ff1681565b604051901515815260200161020e565b61022a61034f3660046117d3565b610cd7565b61022a6103623660046117d3565b610de1565b61020460065481565b61022a610e4f565b61022a610e6e565b61022a61038e3660046117d3565b610e82565b6102047f000000000000000000000000000000000000000000000000000000000000000081565b61022a610ef0565b61022a610f04565b6003546102dd906001600160a01b031681565b6000546001600160a01b03166102dd565b6102046103fc3660046117ec565b610f1b565b61044161040f3660046117ae565b600960209081526000928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161020e565b61020461046f3660046117ae565b610faf565b6102046104823660046117d3565b6110a0565b61020468056bc75e2d6310000081565b61022a6104a53660046117ec565b6110e4565b61020460075481565b61022a6104c136600461180e565b6113b3565b6104ce6113f1565b600380546001600160a01b039283166001600160a01b03199182161790915560028054939092169216919091179055565b600080600884815481106105155761051561182b565b600091825260208083208784526009825260408085206001600160a01b0389168652909252922060046006909202909201908101546001820154600383015492945090914211801561056657508015155b156105d257600061057b856003015442610f1b565b905060006105ae600a546105a888600201546105a26004548761141e90919063ffffffff16565b9061141e565b9061142a565b90506105cd6105c6846105a88464e8d4a5100061141e565b8590611436565b935050505b61060083600101546105fa64e8d4a510006105a886886000015461141e90919063ffffffff16565b90611442565b9450505050505b92915050565b6008818154811061061d57600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b6106656113f1565b61066d610e4f565b80600883815481106106815761068161182b565b906000526020600020906006020160020154600a546106a09190611857565b6106aa919061186a565b600a8190555080600883815481106106c4576106c461182b565b9060005260206000209060060201600201819055505050565b6106e56113f1565b6006546106f29082611436565b6006556002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303816000875af115801561074c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610770919061187d565b5050565b61077c6113f1565b6107858161144e565b61078d610e4f565b60007f000000000000000000000000000000000000000000000000000000000000000042116107dc577f00000000000000000000000000000000000000000000000000000000000000006107de565b425b600a549091506107ee9084611436565b600a556040805160c0810182526001600160a01b039384168152600060208201818152928201958652606082019384526080820181815260a0830182815260088054600181018255935292517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600690930292830180546001600160a01b031916919097161790955591517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015593517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee682015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee782015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee890910155565b6109406114ed565b6000600883815481106109555761095561182b565b6000918252602080832086845260098252604080852033865290925292208054600690920290920192508311156109c85760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064015b60405180910390fd5b600b5460ff16610a105760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81b9bdd081bdc195b9959606a1b60448201526064016109bf565b610a1984610cd7565b6000610a4782600101546105fa64e8d4a510006105a88760040154876000015461141e90919063ffffffff16565b90506000610a7783600201546105fa64e8d4a510006105a88860050154886000015461141e90919063ffffffff16565b9050610a888164e8d4a5100061142a565b8354909150610a979086611442565b83556001840154610aa89086611442565b600185015560048401548354610ac89164e8d4a51000916105a89161141e565b600184015560058401548354610ae89164e8d4a51000916105a89161141e565b600284015560038301548590600090610b04906202a30061186a565b421015610b3f57610b1b60646105a889600a61141e565b9050610b278782611442565b600c54909250610b379082611436565b600c55610c2e565b6000841180610b4e5750600083115b15610c2e576002546040516306b278db60e11b8152336004820152602481018690526001600160a01b0390911690630d64f1b690604401600060405180830381600087803b158015610b9f57600080fd5b505af1158015610bb3573d6000803e3d6000fd5b505060035460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af1158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061187d565b505b85546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610c7957600080fd5b505af1158015610c8d573d6000803e3d6000fd5b50506040518481528a92503391507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a350505050505061077060018055565b600060088281548110610cec57610cec61182b565b9060005260206000209060060201905080600301544211610d0b575050565b60018101546000819003610d2457504260039091015550565b6000610d34836003015442610f1b565b90506000610d5b600a546105a886600201546105a26004548761141e90919063ffffffff16565b90506000610d82600a546105a887600201546105a26005548861141e90919063ffffffff16565b9050610da5610d9a856105a88564e8d4a5100061141e565b600487015490611436565b6004860155610dcb610dc0856105a88464e8d4a5100061141e565b600587015490611436565b6005860155505042600390930192909255505050565b610de96113f1565b68056bc75e2d63100000811115610e425760405162461bcd60e51b815260206004820152601f60248201527f7365744254435065725365636f6e643a20746f6f206d616e792042544373210060448201526064016109bf565b610e4a610e4f565b600555565b60085460005b8181101561077057610e6681610cd7565b600101610e55565b610e766113f1565b610e806000611546565b565b610e8a6113f1565b68056bc75e2d63100000811115610ee35760405162461bcd60e51b815260206004820152601f60248201527f7365744254435065725365636f6e643a20746f6f206d616e792042544373210060448201526064016109bf565b610eeb610e4f565b600455565b610ef86113f1565b600b805460ff19169055565b610f0c6113f1565b600b805460ff19166001179055565b60007f00000000000000000000000000000000000000000000000000000000000000008311610f6a577f0000000000000000000000000000000000000000000000000000000000000000610f6c565b825b92507f0000000000000000000000000000000000000000000000000000000000000000821015610f9e57506000610607565b610fa88383611857565b9392505050565b60008060088481548110610fc557610fc561182b565b600091825260208083208784526009825260408085206001600160a01b0389168652909252922060056006909202909201908101546001820154600383015492945090914211801561101657508015155b1561106f57600061102b856003015442610f1b565b90506000611052600a546105a888600201546105a26005548761141e90919063ffffffff16565b905061106a6105c6846105a88464e8d4a5100061141e565b935050505b61060064e8d4a510006105a885600201546105fa64e8d4a510006105a8888a6000015461141e90919063ffffffff16565b6000818152600960209081526040808320338452909152812060038101546110cb906202a30061186a565b4210156110db5750600a92915050565b50600092915050565b6110ec6114ed565b6000600883815481106111015761110161182b565b6000918252602080832086845260098252604080852033865290925292206006909102909101915061113284610cd7565b600061116082600101546105fa64e8d4a510006105a88760040154876000015461141e90919063ffffffff16565b9050600061119083600201546105fa64e8d4a510006105a88860050154886000015461141e90919063ffffffff16565b835490915061119f9086611436565b835542600384015560018401546111b69086611436565b6001850155600484015483546111d69164e8d4a51000916105a89161141e565b6001840155600584015483546111f69164e8d4a51000916105a89161141e565b600284015561120a8164e8d4a5100061142a565b9050600082118061121b5750600081115b156112fb576002546040516306b278db60e11b8152336004820152602481018490526001600160a01b0390911690630d64f1b690604401600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b505060035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb91506044016020604051808303816000875af11580156112d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f9919061187d565b505b8354611312906001600160a01b0316333088611596565b8354604051630852cd8d60e31b8152600481018790526001600160a01b03909116906342966c6890602401600060405180830381600087803b15801561135757600080fd5b505af115801561136b573d6000803e3d6000fd5b50506040518781528892503391507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a35050505061077060018055565b6113bb6113f1565b6001600160a01b0381166113e557604051631e4fbdf760e01b8152600060048201526024016109bf565b6113ee81611546565b50565b6000546001600160a01b03163314610e805760405163118cdaa760e01b81523360048201526024016109bf565b6000610fa8828461189f565b6000610fa882846118b6565b6000610fa8828461186a565b6000610fa88284611857565b60085460005b818110156114e857826001600160a01b0316600882815481106114795761147961182b565b60009182526020909120600690910201546001600160a01b0316036114e05760405162461bcd60e51b815260206004820152601c60248201527f6164643a20706f6f6c20616c726561647920657869737473212121210000000060448201526064016109bf565b600101611454565b505050565b60026001540361153f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109bf565b6002600155565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526115f09085906115f6565b50505050565b600061160b6001600160a01b03841683611659565b9050805160001415801561163057508080602001905181019061162e919061187d565b155b156114e857604051635274afe760e01b81526001600160a01b03841660048201526024016109bf565b6060610fa88383600084600080856001600160a01b0316848660405161167f91906118d8565b60006040518083038185875af1925050503d80600081146116bc576040519150601f19603f3d011682016040523d82523d6000602084013e6116c1565b606091505b50915091506116d18683836116db565b9695505050505050565b6060826116f0576116eb82611737565b610fa8565b815115801561170757506001600160a01b0384163b155b1561173057604051639996b31560e01b81526001600160a01b03851660048201526024016109bf565b5080610fa8565b8051156117475780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b03811681146113ee57600080fd5b6000806040838503121561178857600080fd5b823561179381611760565b915060208301356117a381611760565b809150509250929050565b600080604083850312156117c157600080fd5b8235915060208301356117a381611760565b6000602082840312156117e557600080fd5b5035919050565b600080604083850312156117ff57600080fd5b50508035926020909101359150565b60006020828403121561182057600080fd5b8135610fa881611760565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561060757610607611841565b8082018082111561060757610607611841565b60006020828403121561188f57600080fd5b81518015158114610fa857600080fd5b808202811582820484141761060757610607611841565b6000826118d357634e487b7160e01b600052601260045260246000fd5b500490565b6000825160005b818110156118f957602081860181015185830152016118df565b50600092019182525091905056fea2646970667358221220ec1ced486a74beb067c7d68bb4eed8240af278d0fac2cf8e7f48b516ecf7b9ce64736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _BTCPerSecond (uint256): 0
Arg [1] : _USDCPerSecond (uint256): 0
Arg [2] : _startTime (uint256): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
33607:12840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37673:95;37745:8;:15;37673:95;;;160:25:1;;;148:2;133:18;37673:95:0;;;;;;;;46325:119;;;;;;:::i;:::-;;:::i;:::-;;40463:733;;;;;;:::i;:::-;;:::i;35716:26::-;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1605:32:1;;;1587:51;;1669:2;1654:18;;1647:34;;;;1697:18;;;1690:34;;;;1755:2;1740:18;;1733:34;1798:3;1783:19;;1776:35;1625:3;1827:19;;1820:35;1574:3;1559:19;35716:26:0;1286:575:1;35959:34:0;;;;;;39835:243;;;;;;:::i;:::-;;:::i;36129:28::-;;;;;;36748:195;;;;;;:::i;:::-;;:::i;35397:27::-;;;;;;35206:68;;;;;-1:-1:-1;;;;;35206:68:0;;;;;;-1:-1:-1;;;;;2297:32:1;;;2279:51;;2267:2;2252:18;35206:68:0;2119:217:1;39142:598:0;;;;;;:::i;:::-;;:::i;44700:1617::-;;;;;;:::i;:::-;;:::i;35431:28::-;;;;;;36090:32;;;;;;;;;;;;2847:14:1;;2840:22;2822:41;;2810:2;2795:18;36090:32:0;2682:187:1;42301:866:0;;;;;;:::i;:::-;;:::i;38357:431::-;;;;;;:::i;:::-;;:::i;35468:38::-;;;;;;42045:180;;;:::i;6494:103::-;;;:::i;37923:426::-;;;;;;:::i;:::-;;:::i;36047:34::-;;;;;36955:82;;;:::i;36660:80::-;;;:::i;35281:69::-;;;;;-1:-1:-1;;;;;35281:69:0;;;5819:87;5865:7;5892:6;-1:-1:-1;;;;;5892:6:0;5819:87;;40160:240;;;;;;:::i;:::-;;:::i;35798:66::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3313:25:1;;;3369:2;3354:18;;3347:34;;;;3397:18;;;3390:34;3455:2;3440:18;;3433:34;3300:3;3285:19;35798:66:0;3082:391:1;41204:758:0;;;;;;:::i;:::-;;:::i;44377:271::-;;;;;;:::i;:::-;;:::i;35634:46::-;;35676:4;35634:46;;43235:1134;;;;;;:::i;:::-;;:::i;35513:34::-;;;;;;6752:220;;;;;;:::i;:::-;;:::i;46325:119::-;5705:13;:11;:13::i;:::-;46403:4:::1;:12:::0;;-1:-1:-1;;;;;46403:12:0;;::::1;-1:-1:-1::0;;;;;;46403:12:0;;::::1;;::::0;;;46426:3:::1;:10:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;46325:119::o;40463:733::-;40535:7;40555:21;40579:8;40588:4;40579:14;;;;;;;;:::i;:::-;;;;;;;;;40628;;;:8;:14;;;;;;-1:-1:-1;;;;;40628:21:0;;;;;;;;;40685:19;40579:14;;;;;;;40685:19;;;;40734:15;;;;40782:19;;;;40579:14;;-1:-1:-1;40685:19:0;;40764:15;:37;:54;;;;-1:-1:-1;40805:13:0;;;40764:54;40760:349;;;40835:18;40856:51;40870:4;:19;;;40891:15;40856:13;:51::i;:::-;40835:72;;40922:17;40942:70;40996:15;;40942:49;40975:4;:15;;;40942:28;40957:12;;40942:10;:14;;:28;;;;:::i;:::-;:32;;:49::i;:::-;:53;;:70::i;:::-;40922:90;-1:-1:-1;41044:53:0;41063:33;41087:8;41063:19;40922:90;41077:4;41063:13;:19::i;:33::-;41044:14;;:18;:53::i;:::-;41027:70;;40820:289;;40760:349;41126:62;41172:4;:15;;;41126:41;41162:4;41126:31;41142:14;41126:4;:11;;;:15;;:31;;;;:::i;:41::-;:45;;:62::i;:::-;41119:69;;;;;;40463:733;;;;;:::o;35716:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35716:26:0;;;;-1:-1:-1;35716:26:0;;;;;:::o;39835:243::-;5705:13;:11;:13::i;:::-;39915:17:::1;:15;:17::i;:::-;40009:11;39981:8;39990:4;39981:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;39963:15;;:43;;;;:::i;:::-;:57;;;;:::i;:::-;39945:15;:75;;;;40059:11;40031:8;40040:4;40031:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;39835:243:::0;;:::o;36748:195::-;5705:13;:11;:13::i;:::-;36840:19:::1;::::0;:32:::1;::::0;36864:7;36840:23:::1;:32::i;:::-;36818:19;:54:::0;36883:3:::1;::::0;:52:::1;::::0;-1:-1:-1;;;36883:52:0;;36900:10:::1;36883:52;::::0;::::1;4504:34:1::0;36920:4:0::1;4554:18:1::0;;;4547:43;4606:18;;;4599:34;;;-1:-1:-1;;;;;36883:3:0;;::::1;::::0;:16:::1;::::0;4439:18:1;;36883:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36748:195:::0;:::o;39142:598::-;5705:13;:11;:13::i;:::-;39225:27:::1;39243:8;39225:17;:27::i;:::-;39304:17;:15;:17::i;:::-;39334:22;39377:9;39359:15;:27;:57;;39407:9;39359:57;;;39389:15;39359:57;39445:15;::::0;39334:82;;-1:-1:-1;39445:32:0::1;::::0;39465:11;39445:19:::1;:32::i;:::-;39427:15;:50:::0;39502:229:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;39502:229:0;;::::1;::::0;;-1:-1:-1;39502:229:0::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;39488:8:::1;:244:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;39488:244:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39142:598::o;44700:1617::-;2345:21;:19;:21::i;:::-;44782::::1;44806:8;44815:4;44806:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;44855;;;:8:::1;:14:::0;;;;;;44870:10:::1;44855:26:::0;;;;;;;44902:11;;44806:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;44902:22:0;-1:-1:-1;44902:22:0::1;44894:53;;;::::0;-1:-1:-1;;;44894:53:0;;5128:2:1;44894:53:0::1;::::0;::::1;5110:21:1::0;5167:2;5147:18;;;5140:30;-1:-1:-1;;;5186:18:1;;;5179:48;5244:18;;44894:53:0::1;;;;;;;;;44966:12;::::0;::::1;;44958:44;;;::::0;-1:-1:-1;;;44958:44:0;;5475:2:1;44958:44:0::1;::::0;::::1;5457:21:1::0;5514:2;5494:18;;;5487:30;-1:-1:-1;;;5533:18:1;;;5526:49;5592:18;;44958:44:0::1;5273:343:1::0;44958:44:0::1;45015:16;45026:4;45015:10;:16::i;:::-;45044:15;45062:67;45113:4;:15;;;45062:46;45103:4;45062:36;45078:4;:19;;;45062:4;:11;;;:15;;:36;;;;:::i;:67::-;45044:85;;45140:19;45162:72;45214:4;:19;;;45162:47;45204:4;45162:37;45178:4;:20;;;45162:4;:11;;;:15;;:37;;;;:::i;:72::-;45140:94:::0;-1:-1:-1;45259:21:0::1;45140:94:::0;45275:4:::1;45259:15;:21::i;:::-;45307:11:::0;;45245:35;;-1:-1:-1;45307:24:0::1;::::0;45323:7;45307:15:::1;:24::i;:::-;45293:38:::0;;45360:15:::1;::::0;::::1;::::0;:28:::1;::::0;45380:7;45360:19:::1;:28::i;:::-;45342:15;::::0;::::1;:46:::0;45433:19:::1;::::0;::::1;::::0;45417:11;;:46:::1;::::0;45458:4:::1;::::0;45417:36:::1;::::0;:15:::1;:36::i;:46::-;45399:15;::::0;::::1;:64:::0;45512:20:::1;::::0;::::1;::::0;45496:11;;:47:::1;::::0;45538:4:::1;::::0;45496:37:::1;::::0;:15:::1;:37::i;:47::-;45474:19;::::0;::::1;:69:::0;45644:20:::1;::::0;::::1;::::0;45576:7;;45556:17:::1;::::0;45644:29:::1;::::0;45667:6:::1;45644:29;:::i;:::-;45626:15;:47;45622:549;;;45768:24;45788:3;45768:15;:7:::0;45780:2:::1;45768:11;:15::i;:24::-;45762:30:::0;-1:-1:-1;45823:16:0::1;:7:::0;45762:30;45823:11:::1;:16::i;:::-;45932:9;::::0;45811:28;;-1:-1:-1;45932:18:0::1;::::0;45946:3;45932:13:::1;:18::i;:::-;45920:9;:30:::0;45622:549:::1;;;46005:1;45995:7;:11;:30;;;;46024:1;46010:11;:15;45995:30;45992:168;;;46046:3;::::0;:41:::1;::::0;-1:-1:-1;;;46046:41:0;;46067:10:::1;46046:41;::::0;::::1;5795:51:1::0;5862:18;;;5855:34;;;-1:-1:-1;;;;;46046:3:0;;::::1;::::0;:20:::1;::::0;5768:18:1;;46046:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;46106:4:0::1;::::0;:38:::1;::::0;-1:-1:-1;;;46106:38:0;;46120:10:::1;46106:38;::::0;::::1;5795:51:1::0;5862:18;;;5855:34;;;-1:-1:-1;;;;;46106:4:0;;::::1;::::0;-1:-1:-1;46106:13:0::1;::::0;-1:-1:-1;5768:18:1;;46106:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45992:168;46195:12:::0;;46181:65:::1;::::0;-1:-1:-1;;;46181:65:0;;46223:10:::1;46181:65;::::0;::::1;5795:51:1::0;5862:18;;;5855:34;;;-1:-1:-1;;;;;46195:12:0;;::::1;::::0;46181:33:::1;::::0;5768:18:1;;46181:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;46272:37:0::1;::::0;160:25:1;;;46293:4:0;;-1:-1:-1;46281:10:0::1;::::0;-1:-1:-1;46272:37:0::1;::::0;148:2:1;133:18;46272:37:0::1;;;;;;;44769:1548;;;;;;2389:20:::0;1783:1;2909:22;;2726:213;42301:866;42353:21;42377:8;42386:4;42377:14;;;;;;;;:::i;:::-;;;;;;;;;;;42353:38;;42425:4;:19;;;42406:15;:38;42402:77;;42461:7;42301:866;:::o;42402:77::-;42508:15;;;;42489:16;42538:13;;;42534:104;;-1:-1:-1;42590:15:0;42568:19;;;;:37;-1:-1:-1;42301:866:0:o;42534:104::-;42648:18;42669:51;42683:4;:19;;;42704:15;42669:13;:51::i;:::-;42648:72;;42731:17;42751:70;42805:15;;42751:49;42784:4;:15;;;42751:28;42766:12;;42751:10;:14;;:28;;;;:::i;:70::-;42731:90;;42832:18;42853:71;42908:15;;42853:50;42887:4;:15;;;42853:29;42868:13;;42853:10;:14;;:29;;;;:::i;:71::-;42832:92;-1:-1:-1;42959:58:0;42983:33;43007:8;42983:19;:9;42997:4;42983:13;:19::i;:33::-;42959:19;;;;;:23;:58::i;:::-;42937:19;;;:80;43051:60;43076:34;43101:8;43076:20;:10;43091:4;43076:14;:20::i;:34::-;43051:20;;;;;:24;:60::i;:::-;43028:20;;;:83;-1:-1:-1;;43144:15:0;43122:19;;;;:37;;;;-1:-1:-1;;;42301:866:0:o;38357:431::-;5705:13;:11;:13::i;:::-;35676:4:::1;38445:14;:33;;38437:77;;;::::0;-1:-1:-1;;;38437:77:0;;6102:2:1;38437:77:0::1;::::0;::::1;6084:21:1::0;6141:2;6121:18;;;6114:30;6180:33;6160:18;;;6153:61;6231:18;;38437:77:0::1;5900:355:1::0;38437:77:0::1;38719:17;:15;:17::i;:::-;38750:13;:30:::0;38357:431::o;42045:180::-;42107:8;:15;42090:14;42133:85;42161:6;42155:3;:12;42133:85;;;42191:15;42202:3;42191:10;:15::i;:::-;42169:5;;42133:85;;6494:103;5705:13;:11;:13::i;:::-;6559:30:::1;6586:1;6559:18;:30::i;:::-;6494:103::o:0;37923:426::-;5705:13;:11;:13::i;:::-;35676:4:::1;38009:13;:32;;38001:76;;;::::0;-1:-1:-1;;;38001:76:0;;6102:2:1;38001:76:0::1;::::0;::::1;6084:21:1::0;6141:2;6121:18;;;6114:30;6180:33;6160:18;;;6153:61;6231:18;;38001:76:0::1;5900:355:1::0;38001:76:0::1;38282:17;:15;:17::i;:::-;38313:12;:28:::0;37923:426::o;36955:82::-;5705:13;:11;:13::i;:::-;37009:12:::1;:20:::0;;-1:-1:-1;;37009:20:0::1;::::0;;36955:82::o;36660:80::-;5705:13;:11;:13::i;:::-;36713:12:::1;:19:::0;;-1:-1:-1;;36713:19:0::1;36728:4;36713:19;::::0;;36660:80::o;40160:240::-;40232:7;40268:9;40260:5;:17;:37;;40288:9;40260:37;;;40280:5;40260:37;40252:45;;40318:9;40312:3;:15;40308:56;;;-1:-1:-1;40351:1:0;40344:8;;40308:56;40381:11;40387:5;40381:3;:11;:::i;:::-;40374:18;40160:240;-1:-1:-1;;;40160:240:0:o;41204:758::-;41277:7;41297:21;41321:8;41330:4;41321:14;;;;;;;;:::i;:::-;;;;;;;;;41370;;;:8;:14;;;;;;-1:-1:-1;;;;;41370:21:0;;;;;;;;;41428:20;41321:14;;;;;;;41428:20;;;;41478:15;;;;41526:19;;;;41321:14;;-1:-1:-1;41428:20:0;;41508:15;:37;:54;;;;-1:-1:-1;41549:13:0;;;41508:54;41504:354;;;41579:18;41600:51;41614:4;:19;;;41635:15;41600:13;:51::i;:::-;41579:72;;41666:18;41687:71;41742:15;;41687:50;41721:4;:15;;;41687:29;41702:13;;41687:10;:14;;:29;;;;:::i;:71::-;41666:92;-1:-1:-1;41791:55:0;41811:34;41836:8;41811:20;41666:92;41826:4;41811:14;:20::i;41791:55::-;41773:73;;41564:294;;41504:354;41875:79;41949:4;41876:67;41923:4;:19;;;41876:42;41913:4;41876:32;41892:15;41876:4;:11;;;:15;;:32;;;;:::i;44377:271::-;44433:7;44477:14;;;:8;:14;;;;;;;;44492:10;44477:26;;;;;;;44536:20;;;;:29;;44559:6;44536:29;:::i;:::-;44518:15;:47;44514:126;;;-1:-1:-1;44593:2:0;;44377:271;-1:-1:-1;;44377:271:0:o;44514:126::-;-1:-1:-1;44639:1:0;;44377:271;-1:-1:-1;;44377:271:0:o;43235:1134::-;2345:21;:19;:21::i;:::-;43316::::1;43340:8;43349:4;43340:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;43389;;;:8:::1;:14:::0;;;;;;43404:10:::1;43389:26:::0;;;;;;;43340:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;43428:16:0::1;43398:4:::0;43428:10:::1;:16::i;:::-;43457:15;43475:67;43526:4;:15;;;43475:46;43516:4;43475:36;43491:4;:19;;;43475:4;:11;;;:15;;:36;;;;:::i;:67::-;43457:85;;43553:19;43575:72;43627:4;:19;;;43575:47;43617:4;43575:37;43591:4;:20;;;43575:4;:11;;;:15;;:37;;;;:::i;:72::-;43674:11:::0;;43553:94;;-1:-1:-1;43674:24:0::1;::::0;43690:7;43674:15:::1;:24::i;:::-;43660:38:::0;;43732:15:::1;43709:20;::::0;::::1;:38:::0;43776:15:::1;::::0;::::1;::::0;:28:::1;::::0;43796:7;43776:19:::1;:28::i;:::-;43758:15;::::0;::::1;:46:::0;43849:19:::1;::::0;::::1;::::0;43833:11;;:46:::1;::::0;43874:4:::1;::::0;43833:36:::1;::::0;:15:::1;:36::i;:46::-;43815:15;::::0;::::1;:64:::0;43928:20:::1;::::0;::::1;::::0;43912:11;;:47:::1;::::0;43954:4:::1;::::0;43912:37:::1;::::0;:15:::1;:37::i;:47::-;43890:19;::::0;::::1;:69:::0;43984:21:::1;:11:::0;44000:4:::1;43984:15;:21::i;:::-;43970:35;;44029:1;44019:7;:11;:29;;;;44047:1;44034:11;:14;44019:29;44016:155;;;44065:3;::::0;:41:::1;::::0;-1:-1:-1;;;44065:41:0;;44086:10:::1;44065:41;::::0;::::1;5795:51:1::0;5862:18;;;5855:34;;;-1:-1:-1;;;;;44065:3:0;;::::1;::::0;:20:::1;::::0;5768:18:1;;44065:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44121:4:0::1;::::0;:38:::1;::::0;-1:-1:-1;;;44121:38:0;;44135:10:::1;44121:38;::::0;::::1;5795:51:1::0;5862:18;;;5855:34;;;-1:-1:-1;;;;;44121:4:0;;::::1;::::0;-1:-1:-1;44121:13:0::1;::::0;-1:-1:-1;5768:18:1;;44121:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44016:155;44181:12:::0;;:74:::1;::::0;-1:-1:-1;;;;;44181:12:0::1;44219:10;44240:4;44247:7:::0;44181:29:::1;:74::i;:::-;44281:12:::0;;44267:42:::1;::::0;-1:-1:-1;;;44267:42:0;;::::1;::::0;::::1;160:25:1::0;;;-1:-1:-1;;;;;44281:12:0;;::::1;::::0;44267:33:::1;::::0;133:18:1;;44267:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44327:34:0::1;::::0;160:25:1;;;44347:4:0;;-1:-1:-1;44335:10:0::1;::::0;-1:-1:-1;44327:34:0::1;::::0;148:2:1;133:18;44327:34:0::1;;;;;;;43303:1066;;;;2389:20:::0;1783:1;2909:22;;2726:213;6752:220;5705:13;:11;:13::i;:::-;-1:-1:-1;;;;;6837:22:0;::::1;6833:93;;6883:31;::::0;-1:-1:-1;;;6883:31:0;;6911:1:::1;6883:31;::::0;::::1;2279:51:1::0;2252:18;;6883:31:0::1;2119:217:1::0;6833:93:0::1;6936:28;6955:8;6936:18;:28::i;:::-;6752:220:::0;:::o;5984:166::-;5865:7;5892:6;-1:-1:-1;;;;;5892:6:0;4015:10;6044:23;6040:103;;6091:40;;-1:-1:-1;;;6091:40:0;;4015:10;6091:40;;;2279:51:1;2252:18;;6091:40:0;2119:217:1;10944:98:0;11002:7;11029:5;11033:1;11029;:5;:::i;11343:98::-;11401:7;11428:5;11432:1;11428;:5;:::i;10206:98::-;10264:7;10291:5;10295:1;10291;:5;:::i;10587:98::-;10645:7;10672:5;10676:1;10672;:5;:::i;38798:269::-;38884:8;:15;38867:14;38910:148;38940:6;38933:4;:13;38910:148;;;39005:8;-1:-1:-1;;;;;38979:34:0;:8;38988:4;38979:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;38979:22:0;:34;38971:75;;;;-1:-1:-1;;;38971:75:0;;6857:2:1;38971:75:0;;;6839:21:1;6896:2;6876:18;;;6869:30;6935;6915:18;;;6908:58;6983:18;;38971:75:0;6655:352:1;38971:75:0;38948:6;;38910:148;;;;38856:211;38798:269;:::o;2425:293::-;1827:1;2559:7;;:19;2551:63;;;;-1:-1:-1;;;2551:63:0;;7214:2:1;2551:63:0;;;7196:21:1;7253:2;7233:18;;;7226:30;7292:33;7272:18;;;7265:61;7343:18;;2551:63:0;7012:355:1;2551:63:0;1827:1;2692:7;:18;2425:293::o;7132:191::-;7206:16;7225:6;;-1:-1:-1;;;;;7242:17:0;;;-1:-1:-1;;;;;;7242:17:0;;;;;;7275:40;;7225:6;;;;;;;7275:40;;7206:16;7275:40;7195:128;7132:191;:::o;29175:190::-;29303:53;;;-1:-1:-1;;;;;4522:15:1;;;29303:53:0;;;4504:34:1;4574:15;;4554:18;;;4547:43;4606:18;;;;4599:34;;;29303:53:0;;;;;;;;;;4439:18:1;;;;29303:53:0;;;;;;;;-1:-1:-1;;;;;29303:53:0;-1:-1:-1;;;29303:53:0;;;29276:81;;29296:5;;29276:19;:81::i;:::-;29175:190;;;;:::o;31579:638::-;32003:23;32029:33;-1:-1:-1;;;;;32029:27:0;;32057:4;32029:27;:33::i;:::-;32003:59;;32077:10;:17;32098:1;32077:22;;:57;;;;;32115:10;32104:30;;;;;;;;;;;;:::i;:::-;32103:31;32077:57;32073:137;;;32158:40;;-1:-1:-1;;;32158:40:0;;-1:-1:-1;;;;;2297:32:1;;32158:40:0;;;2279:51:1;2252:18;;32158:40:0;2119:217:1;17066:153:0;17141:12;17173:38;17195:6;17203:4;17209:1;17141:12;17799;17813:23;17840:6;-1:-1:-1;;;;;17840:11:0;17859:5;17866:4;17840:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17798:73;;;;17889:55;17916:6;17924:7;17933:10;17889:26;:55::i;:::-;17882:62;17554:398;-1:-1:-1;;;;;;17554:398:0:o;19030:597::-;19178:12;19208:7;19203:417;;19232:19;19240:10;19232:7;:19::i;:::-;19203:417;;;19460:17;;:22;:49;;;;-1:-1:-1;;;;;;19486:18:0;;;:23;19460:49;19456:121;;;19537:24;;-1:-1:-1;;;19537:24:0;;-1:-1:-1;;;;;2297:32:1;;19537:24:0;;;2279:51:1;2252:18;;19537:24:0;2119:217:1;19456:121:0;-1:-1:-1;19598:10:0;19591:17;;20180:528;20313:17;;:21;20309:392;;20545:10;20539:17;20602:15;20589:10;20585:2;20581:19;20574:44;20309:392;20672:17;;-1:-1:-1;;;20672:17:0;;;;;;;;;;;196:138:1;-1:-1:-1;;;;;278:31:1;;268:42;;258:70;;324:1;321;314:12;339:430;435:6;443;496:2;484:9;475:7;471:23;467:32;464:52;;;512:1;509;502:12;464:52;551:9;538:23;570:38;602:5;570:38;:::i;:::-;627:5;-1:-1:-1;684:2:1;669:18;;656:32;697:40;656:32;697:40;:::i;:::-;756:7;746:17;;;339:430;;;;;:::o;774:322::-;842:6;850;903:2;891:9;882:7;878:23;874:32;871:52;;;919:1;916;909:12;871:52;955:9;942:23;932:33;;1015:2;1004:9;1000:18;987:32;1028:38;1060:5;1028:38;:::i;1101:180::-;1160:6;1213:2;1201:9;1192:7;1188:23;1184:32;1181:52;;;1229:1;1226;1219:12;1181:52;-1:-1:-1;1252:23:1;;1101:180;-1:-1:-1;1101:180:1:o;1866:248::-;1934:6;1942;1995:2;1983:9;1974:7;1970:23;1966:32;1963:52;;;2011:1;2008;2001:12;1963:52;-1:-1:-1;;2034:23:1;;;2104:2;2089:18;;;2076:32;;-1:-1:-1;1866:248:1:o;3478:254::-;3537:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:52;;;3606:1;3603;3596:12;3558:52;3645:9;3632:23;3664:38;3696:5;3664:38;:::i;3737:127::-;3798:10;3793:3;3789:20;3786:1;3779:31;3829:4;3826:1;3819:15;3853:4;3850:1;3843:15;3869:127;3930:10;3925:3;3921:20;3918:1;3911:31;3961:4;3958:1;3951:15;3985:4;3982:1;3975:15;4001:128;4068:9;;;4089:11;;;4086:37;;;4103:18;;:::i;4134:125::-;4199:9;;;4220:10;;;4217:36;;;4233:18;;:::i;4644:277::-;4711:6;4764:2;4752:9;4743:7;4739:23;4735:32;4732:52;;;4780:1;4777;4770:12;4732:52;4812:9;4806:16;4865:5;4858:13;4851:21;4844:5;4841:32;4831:60;;4887:1;4884;4877:12;6260:168;6333:9;;;6364;;6381:15;;;6375:22;;6361:37;6351:71;;6402:18;;:::i;6433:217::-;6473:1;6499;6489:132;;6543:10;6538:3;6534:20;6531:1;6524:31;6578:4;6575:1;6568:15;6606:4;6603:1;6596:15;6489:132;-1:-1:-1;6635:9:1;;6433:217::o;7372:412::-;7501:3;7539:6;7533:13;7564:1;7574:129;7588:6;7585:1;7582:13;7574:129;;;7686:4;7670:14;;;7666:25;;7660:32;7647:11;;;7640:53;7603:12;7574:129;;;-1:-1:-1;7758:1:1;7722:16;;7747:13;;;-1:-1:-1;7722:16:1;7372:412;-1:-1:-1;7372:412:1:o
Swarm Source
ipfs://ec1ced486a74beb067c7d68bb4eed8240af278d0fac2cf8e7f48b516ecf7b9ce
Loading...
Loading
Loading...
Loading
Net Worth in USD
$109.93
Net Worth in ETH
0.055715
Token Allocations
USDC
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1 | 109.928 | $109.93 |
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.