Contract
0xb678B2ae7dF978Ee4Aba4f9ce0564c0c1b0E9FC8
2
Contract Overview
Balance:
0 FTM
FTM Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x044d06a30075191fda41664783429888f97431ad5a28051ba214c5732b6120ae | 0x60e06040 | 56853026 | 24 days 16 hrs ago | 0xbcb909975715dc8fde643ee44b89e3fd6a35a259 | IN | Create: HGeist | 0 FTM | 0.077047988483 |
[ Download CSV Export ]
Latest 3 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x0e1270833141a3fcf478a449b9ff4d30d30abd5e02b24b652e5f8cf78ba93fa3 | 57599417 | 13 days 2 hrs ago | 0xb678b2ae7df978ee4aba4f9ce0564c0c1b0e9fc8 | Fantom Finance: Wrapped Fantom Token | 0.5 FTM | ||
0x488c687ab332ef9c05f8aaeae2400cab93fe5f8371b8c2c3b5ff1e7ddcb9f11d | 57046397 | 21 days 17 hrs ago | 0xb678b2ae7df978ee4aba4f9ce0564c0c1b0e9fc8 | Fantom Finance: Wrapped Fantom Token | 0.5 FTM | ||
0x044d06a30075191fda41664783429888f97431ad5a28051ba214c5732b6120ae | 56853026 | 24 days 16 hrs ago | 0xbcb909975715dc8fde643ee44b89e3fd6a35a259 | Contract Creation | 0 FTM |
[ Download CSV Export ]
Contract Name:
HGeist
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) 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 `amount` 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 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; import "../../../utils/Address.sol"; /** * @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; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @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, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Config { // function signature of "postProcess()" bytes4 public constant POSTPROCESS_SIG = 0xc2722916; // The base amount of percentage function uint256 public constant PERCENTAGE_BASE = 1 ether; // Handler post-process type. Others should not happen now. enum HandlerType { Token, Custom, Others } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./lib/LibCache.sol"; import "./lib/LibStack.sol"; /// @notice A cache structure composed by a bytes32 array contract Storage { using LibCache for mapping(bytes32 => bytes32); using LibStack for bytes32[]; bytes32[] public stack; mapping(bytes32 => bytes32) public cache; // keccak256 hash of "msg.sender" // prettier-ignore bytes32 public constant MSG_SENDER_KEY = 0xb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a; modifier isStackEmpty() { require(stack.length == 0, "Stack not empty"); _; } modifier isInitialized() { require(_getSender() != address(0), "Sender is not initialized"); _; } modifier isNotInitialized() { require(_getSender() == address(0), "Sender is initialized"); _; } function _setSender() internal isNotInitialized { cache.setAddress(MSG_SENDER_KEY, msg.sender); } function _resetSender() internal { cache.setAddress(MSG_SENDER_KEY, address(0)); } function _getSender() internal view returns (address) { return cache.getAddress(MSG_SENDER_KEY); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../interface/IERC20Usdt.sol"; import "../Config.sol"; import "../Storage.sol"; abstract contract HandlerBase is Storage, Config { using SafeERC20 for IERC20; using LibStack for bytes32[]; address public constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; function postProcess() external payable virtual { revert("Invalid post process"); /* Implementation template bytes4 sig = stack.getSig(); if (sig == bytes4(keccak256(bytes("handlerFunction_1()")))) { // Do something } else if (sig == bytes4(keccak256(bytes("handlerFunction_2()")))) { bytes32 temp = stack.get(); // Do something } else revert("Invalid post process"); */ } function _updateToken(address token) internal { stack.setAddress(token); // Ignore token type to fit old handlers // stack.setHandlerType(uint256(HandlerType.Token)); } function _updatePostProcess(bytes32[] memory params) internal { for (uint256 i = params.length; i > 0; i--) { stack.set(params[i - 1]); } stack.set(msg.sig); stack.setHandlerType(HandlerType.Custom); } function getContractName() public pure virtual returns (string memory); function _revertMsg( string memory functionName, string memory reason ) internal pure { revert( string( abi.encodePacked( getContractName(), "_", functionName, ": ", reason ) ) ); } function _revertMsg(string memory functionName) internal pure { _revertMsg(functionName, "Unspecified"); } function _requireMsg( bool condition, string memory functionName, string memory reason ) internal pure { if (!condition) _revertMsg(functionName, reason); } function _uint2String(uint256 n) internal pure returns (string memory) { if (n == 0) { return "0"; } else { uint256 len = 0; for (uint256 temp = n; temp > 0; temp /= 10) { len++; } bytes memory str = new bytes(len); for (uint256 i = len; i > 0; i--) { str[i - 1] = bytes1(uint8(48 + (n % 10))); n /= 10; } return string(str); } } function _getBalance( address token, uint256 amount ) internal view returns (uint256) { if (amount != type(uint256).max) { return amount; } // ETH case if (token == address(0) || token == NATIVE_TOKEN_ADDRESS) { return address(this).balance; } // ERC20 token case return IERC20(token).balanceOf(address(this)); } function _tokenApprove( address token, address spender, uint256 amount ) internal { try IERC20Usdt(token).approve(spender, amount) {} catch { IERC20(token).safeApprove(spender, 0); IERC20(token).safeApprove(spender, amount); } } function _tokenApproveZero(address token, address spender) internal { if (IERC20Usdt(token).allowance(address(this), spender) > 0) { try IERC20Usdt(token).approve(spender, 0) {} catch { IERC20Usdt(token).approve(spender, 1); } } } function _isNotNativeToken(address token) internal pure returns (bool) { return (token != address(0) && token != NATIVE_TOKEN_ADDRESS); } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity ^0.8.0; interface IFlashLoanReceiver { function executeOperation( address[] calldata assets, uint256[] calldata amounts, uint256[] calldata premiums, address initiator, bytes calldata params ) external returns (bool); }
// SPDX-License-Identifier: agpl-3.0 pragma solidity ^0.8.0; /** * @title LendingPoolAddressesProvider contract * @dev Main registry of addresses part of or connected to the protocol, including permissioned roles * - Acting also as factory of proxies and admin of those, so with right to change its implementations * - Owned by the Aave Governance * @author Aave **/ interface ILendingPoolAddressesProviderV2 { event MarketIdSet(string newMarketId); event LendingPoolUpdated(address indexed newAddress); event ConfigurationAdminUpdated(address indexed newAddress); event EmergencyAdminUpdated(address indexed newAddress); event LendingPoolConfiguratorUpdated(address indexed newAddress); event LendingPoolCollateralManagerUpdated(address indexed newAddress); event PriceOracleUpdated(address indexed newAddress); event LendingRateOracleUpdated(address indexed newAddress); event ProxyCreated(bytes32 id, address indexed newAddress); event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy); function getMarketId() external view returns (string memory); function setMarketId(string calldata marketId) external; function setAddress(bytes32 id, address newAddress) external; function setAddressAsProxy(bytes32 id, address impl) external; function getAddress(bytes32 id) external view returns (address); function getLendingPool() external view returns (address); function setLendingPoolImpl(address pool) external; function getLendingPoolConfigurator() external view returns (address); function setLendingPoolConfiguratorImpl(address configurator) external; function getLendingPoolCollateralManager() external view returns (address); function setLendingPoolCollateralManager(address manager) external; function getPoolAdmin() external view returns (address); function setPoolAdmin(address admin) external; function getEmergencyAdmin() external view returns (address); function setEmergencyAdmin(address admin) external; function getPriceOracle() external view returns (address); function setPriceOracle(address priceOracle) external; function getLendingRateOracle() external view returns (address); function setLendingRateOracle(address lendingRateOracle) external; }
// SPDX-License-Identifier: agpl-3.0 pragma solidity ^0.8.0; import {ILendingPoolAddressesProviderV2} from "./ILendingPoolAddressesProviderV2.sol"; import {DataTypes} from "./libraries/DataTypes.sol"; interface ILendingPoolV2 { /** * @dev Emitted on deposit() * @param reserve The address of the underlying asset of the reserve * @param user The address initiating the deposit * @param onBehalfOf The beneficiary of the deposit, receiving the aTokens * @param amount The amount deposited * @param referral The referral code used **/ event Deposit( address indexed reserve, address user, address indexed onBehalfOf, uint256 amount, uint16 indexed referral ); /** * @dev Emitted on withdraw() * @param reserve The address of the underlyng asset being withdrawn * @param user The address initiating the withdrawal, owner of aTokens * @param to Address that will receive the underlying * @param amount The amount to be withdrawn **/ event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount); /** * @dev Emitted on borrow() and flashLoan() when debt needs to be opened * @param reserve The address of the underlying asset being borrowed * @param user The address of the user initiating the borrow(), receiving the funds on borrow() or just * initiator of the transaction on flashLoan() * @param onBehalfOf The address that will be getting the debt * @param amount The amount borrowed out * @param borrowRateMode The rate mode: 1 for Stable, 2 for Variable * @param borrowRate The numeric rate at which the user has borrowed * @param referral The referral code used **/ event Borrow( address indexed reserve, address user, address indexed onBehalfOf, uint256 amount, uint256 borrowRateMode, uint256 borrowRate, uint16 indexed referral ); /** * @dev Emitted on repay() * @param reserve The address of the underlying asset of the reserve * @param user The beneficiary of the repayment, getting his debt reduced * @param repayer The address of the user initiating the repay(), providing the funds * @param amount The amount repaid **/ event Repay( address indexed reserve, address indexed user, address indexed repayer, uint256 amount ); /** * @dev Emitted on swapBorrowRateMode() * @param reserve The address of the underlying asset of the reserve * @param user The address of the user swapping his rate mode * @param rateMode The rate mode that the user wants to swap to **/ event Swap(address indexed reserve, address indexed user, uint256 rateMode); /** * @dev Emitted on setUserUseReserveAsCollateral() * @param reserve The address of the underlying asset of the reserve * @param user The address of the user enabling the usage as collateral **/ event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user); /** * @dev Emitted on setUserUseReserveAsCollateral() * @param reserve The address of the underlying asset of the reserve * @param user The address of the user enabling the usage as collateral **/ event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user); /** * @dev Emitted on rebalanceStableBorrowRate() * @param reserve The address of the underlying asset of the reserve * @param user The address of the user for which the rebalance has been executed **/ event RebalanceStableBorrowRate(address indexed reserve, address indexed user); /** * @dev Emitted on flashLoan() * @param target The address of the flash loan receiver contract * @param initiator The address initiating the flash loan * @param asset The address of the asset being flash borrowed * @param amount The amount flash borrowed * @param premium The fee flash borrowed * @param referralCode The referral code used **/ event FlashLoan( address indexed target, address indexed initiator, address indexed asset, uint256 amount, uint256 premium, uint16 referralCode ); /** * @dev Emitted when the pause is triggered. */ event Paused(); /** * @dev Emitted when the pause is lifted. */ event Unpaused(); /** * @dev Emitted when a borrower is liquidated. This event is emitted by the LendingPool via * LendingPoolCollateral manager using a DELEGATECALL * This allows to have the events in the generated ABI for LendingPool. * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation * @param user The address of the borrower getting liquidated * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover * @param liquidatedCollateralAmount The amount of collateral received by the liiquidator * @param liquidator The address of the liquidator * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants * to receive the underlying collateral asset directly **/ event LiquidationCall( address indexed collateralAsset, address indexed debtAsset, address indexed user, uint256 debtToCover, uint256 liquidatedCollateralAmount, address liquidator, bool receiveAToken ); /** * @dev Emitted when the state of a reserve is updated. NOTE: This event is actually declared * in the ReserveLogic library and emitted in the updateInterestRates() function. Since the function is internal, * the event will actually be fired by the LendingPool contract. The event is therefore replicated here so it * gets added to the LendingPool ABI * @param reserve The address of the underlying asset of the reserve * @param liquidityRate The new liquidity rate * @param stableBorrowRate The new stable borrow rate * @param variableBorrowRate The new variable borrow rate * @param liquidityIndex The new liquidity index * @param variableBorrowIndex The new variable borrow index **/ event ReserveDataUpdated( address indexed reserve, uint256 liquidityRate, uint256 stableBorrowRate, uint256 variableBorrowRate, uint256 liquidityIndex, uint256 variableBorrowIndex ); /** * @dev Deposits an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. * - E.g. User deposits 100 USDC and gets in return 100 aUSDC * @param asset The address of the underlying asset to deposit * @param amount The amount to be deposited * @param onBehalfOf The address that will receive the aTokens, same as msg.sender if the user * wants to receive them on his own wallet, or a different address if the beneficiary of aTokens * is a different wallet * @param referralCode Code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man **/ function deposit( address asset, uint256 amount, address onBehalfOf, uint16 referralCode ) external; /** * @dev Withdraws an `amount` of underlying asset from the reserve, burning the equivalent aTokens owned * E.g. User has 100 aUSDC, calls withdraw() and receives 100 USDC, burning the 100 aUSDC * @param asset The address of the underlying asset to withdraw * @param amount The underlying amount to be withdrawn * - Send the value type(uint256).max in order to withdraw the whole aToken balance * @param to Address that will receive the underlying, same as msg.sender if the user * wants to receive it on his own wallet, or a different address if the beneficiary is a * different wallet * @return The final amount withdrawn **/ function withdraw( address asset, uint256 amount, address to ) external returns (uint256); /** * @dev Allows users to borrow a specific `amount` of the reserve underlying asset, provided that the borrower * already deposited enough collateral, or he was given enough allowance by a credit delegator on the * corresponding debt token (StableDebtToken or VariableDebtToken) * - E.g. User borrows 100 USDC passing as `onBehalfOf` his own address, receiving the 100 USDC in his wallet * and 100 stable/variable debt tokens, depending on the `interestRateMode` * @param asset The address of the underlying asset to borrow * @param amount The amount to be borrowed * @param interestRateMode The interest rate mode at which the user wants to borrow: 1 for Stable, 2 for Variable * @param referralCode Code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man * @param onBehalfOf Address of the user who will receive the debt. Should be the address of the borrower itself * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator * if he has been given credit delegation allowance **/ function borrow( address asset, uint256 amount, uint256 interestRateMode, uint16 referralCode, address onBehalfOf ) external; /** * @notice Repays a borrowed `amount` on a specific reserve, burning the equivalent debt tokens owned * - E.g. User repays 100 USDC, burning 100 variable/stable debt tokens of the `onBehalfOf` address * @param asset The address of the borrowed underlying asset previously borrowed * @param amount The amount to repay * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode` * @param rateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable * @param onBehalfOf Address of the user who will get his debt reduced/removed. Should be the address of the * user calling the function if he wants to reduce/remove his own debt, or the address of any other * other borrower whose debt should be removed * @return The final amount repaid **/ function repay( address asset, uint256 amount, uint256 rateMode, address onBehalfOf ) external returns (uint256); /** * @dev Allows a borrower to swap his debt between stable and variable mode, or viceversa * @param asset The address of the underlying asset borrowed * @param rateMode The rate mode that the user wants to swap to **/ function swapBorrowRateMode(address asset, uint256 rateMode) external; /** * @dev Rebalances the stable interest rate of a user to the current stable rate defined on the reserve. * - Users can be rebalanced if the following conditions are satisfied: * 1. Usage ratio is above 95% * 2. the current deposit APY is below REBALANCE_UP_THRESHOLD * maxVariableBorrowRate, which means that too much has been * borrowed at a stable rate and depositors are not earning enough * @param asset The address of the underlying asset borrowed * @param user The address of the user to be rebalanced **/ function rebalanceStableBorrowRate(address asset, address user) external; /** * @dev Allows depositors to enable/disable a specific deposited asset as collateral * @param asset The address of the underlying asset deposited * @param useAsCollateral `true` if the user wants to use the deposit as collateral, `false` otherwise **/ function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external; /** * @dev Function to liquidate a non-healthy position collateral-wise, with Health Factor below 1 * - The caller (liquidator) covers `debtToCover` amount of debt of the user getting liquidated, and receives * a proportionally amount of the `collateralAsset` plus a bonus to cover market risk * @param collateralAsset The address of the underlying asset used as collateral, to receive as result of the liquidation * @param debtAsset The address of the underlying borrowed asset to be repaid with the liquidation * @param user The address of the borrower getting liquidated * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover * @param receiveAToken `true` if the liquidators wants to receive the collateral aTokens, `false` if he wants * to receive the underlying collateral asset directly **/ function liquidationCall( address collateralAsset, address debtAsset, address user, uint256 debtToCover, bool receiveAToken ) external; /** * @dev Allows smartcontracts to access the liquidity of the pool within one transaction, * as long as the amount taken plus a fee is returned. * IMPORTANT There are security concerns for developers of flashloan receiver contracts that must be kept into consideration. * For further details please visit https://developers.aave.com * @param receiverAddress The address of the contract receiving the funds, implementing the IFlashLoanReceiver interface * @param assets The addresses of the assets being flash-borrowed * @param amounts The amounts amounts being flash-borrowed * @param modes Types of the debt to open if the flash loan is not returned: * 0 -> Don't open any debt, just revert if funds can't be transferred from the receiver * 1 -> Open debt at stable rate for the value of the amount flash-borrowed to the `onBehalfOf` address * 2 -> Open debt at variable rate for the value of the amount flash-borrowed to the `onBehalfOf` address * @param onBehalfOf The address that will receive the debt in the case of using on `modes` 1 or 2 * @param params Variadic packed params to pass to the receiver as extra information * @param referralCode Code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man **/ function flashLoan( address receiverAddress, address[] calldata assets, uint256[] calldata amounts, uint256[] calldata modes, address onBehalfOf, bytes calldata params, uint16 referralCode ) external; /** * @dev Returns the user account data across all the reserves * @param user The address of the user * @return totalCollateralETH the total collateral in ETH of the user * @return totalDebtETH the total debt in ETH of the user * @return availableBorrowsETH the borrowing power left of the user * @return currentLiquidationThreshold the liquidation threshold of the user * @return ltv the loan to value of the user * @return healthFactor the current health factor of the user **/ function getUserAccountData(address user) external view returns ( uint256 totalCollateralETH, uint256 totalDebtETH, uint256 availableBorrowsETH, uint256 currentLiquidationThreshold, uint256 ltv, uint256 healthFactor ); function initReserve( address reserve, address aTokenAddress, address stableDebtAddress, address variableDebtAddress, address interestRateStrategyAddress ) external; function setReserveInterestRateStrategyAddress(address reserve, address rateStrategyAddress) external; function setConfiguration(address reserve, uint256 configuration) external; /** * @dev Returns the configuration of the reserve * @param asset The address of the underlying asset of the reserve * @return The configuration of the reserve **/ function getConfiguration(address asset) external view returns (DataTypes.ReserveConfigurationMap memory); /** * @dev Returns the configuration of the user across all the reserves * @param user The user address * @return The configuration of the user **/ function getUserConfiguration(address user) external view returns (DataTypes.UserConfigurationMap memory); /** * @dev Returns the normalized income normalized income of the reserve * @param asset The address of the underlying asset of the reserve * @return The reserve's normalized income */ function getReserveNormalizedIncome(address asset) external view returns (uint256); /** * @dev Returns the normalized variable debt per unit of asset * @param asset The address of the underlying asset of the reserve * @return The reserve normalized variable debt */ function getReserveNormalizedVariableDebt(address asset) external view returns (uint256); /** * @dev Returns the state and configuration of the reserve * @param asset The address of the underlying asset of the reserve * @return The state of the reserve **/ function getReserveData(address asset) external view returns (DataTypes.ReserveData memory); function finalizeTransfer( address asset, address from, address to, uint256 amount, uint256 balanceFromAfter, uint256 balanceToBefore ) external; function getReservesList() external view returns (address[] memory); function getAddressesProvider() external view returns (ILendingPoolAddressesProviderV2); function setPause(bool val) external; function paused() external view returns (bool); }
// SPDX-License-Identifier: agpl-3.0 pragma solidity ^0.8.0; library DataTypes { // refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties. struct ReserveData { //stores the reserve configuration ReserveConfigurationMap configuration; //the liquidity index. Expressed in ray uint128 liquidityIndex; //variable borrow index. Expressed in ray uint128 variableBorrowIndex; //the current supply rate. Expressed in ray uint128 currentLiquidityRate; //the current variable borrow rate. Expressed in ray uint128 currentVariableBorrowRate; //the current stable borrow rate. Expressed in ray uint128 currentStableBorrowRate; uint40 lastUpdateTimestamp; //tokens addresses address aTokenAddress; address stableDebtTokenAddress; address variableDebtTokenAddress; //address of the interest rate strategy address interestRateStrategyAddress; //the id of the reserve. Represents the position in the list of the active reserves uint8 id; } struct ReserveConfigurationMap { //bit 0-15: LTV //bit 16-31: Liq. threshold //bit 32-47: Liq. bonus //bit 48-55: Decimals //bit 56: Reserve is active //bit 57: reserve is frozen //bit 58: borrowing is enabled //bit 59: stable rate borrowing enabled //bit 60-63: reserved //bit 64-79: reserve factor uint256 data; } struct UserConfigurationMap { uint256 data; } enum InterestRateMode { NONE, STABLE, VARIABLE } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.10; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../../interface/IProxy.sol"; import "../HandlerBase.sol"; import "../wrappednativetoken/IWrappedNativeToken.sol"; import "../aavev2/ILendingPoolV2.sol"; import "../aavev2/IFlashLoanReceiver.sol"; import "../aavev2/ILendingPoolAddressesProviderV2.sol"; import "../aavev2/libraries/DataTypes.sol"; contract HGeist is HandlerBase, IFlashLoanReceiver { using SafeERC20 for IERC20; address public immutable provider; address public immutable wrappedNativeToken; uint16 public immutable referralCode; constructor( address wrappedNativeToken_, address provider_, uint16 referralCode_ ) { wrappedNativeToken = wrappedNativeToken_; provider = provider_; referralCode = referralCode_; } function getContractName() public pure override returns (string memory) { return "HGeist"; } function deposit(address asset, uint256 amount) external payable { amount = _getBalance(asset, amount); _deposit(asset, amount); } function depositETH(uint256 amount) external payable { amount = _getBalance(NATIVE_TOKEN_ADDRESS, amount); IWrappedNativeToken(wrappedNativeToken).deposit{value: amount}(); _deposit(wrappedNativeToken, amount); _updateToken(wrappedNativeToken); } function withdraw( address asset, uint256 amount ) external payable returns (uint256 withdrawAmount) { withdrawAmount = _withdraw(asset, amount); _updateToken(asset); } function withdrawETH( uint256 amount ) external payable returns (uint256 withdrawAmount) { withdrawAmount = _withdraw(wrappedNativeToken, amount); IWrappedNativeToken(wrappedNativeToken).withdraw(withdrawAmount); } function repay( address asset, uint256 amount, uint256 rateMode, address onBehalfOf ) external payable returns (uint256 remainDebt) { remainDebt = _repay(asset, amount, rateMode, onBehalfOf); } function repayETH( uint256 amount, uint256 rateMode, address onBehalfOf ) external payable returns (uint256 remainDebt) { IWrappedNativeToken(wrappedNativeToken).deposit{value: amount}(); remainDebt = _repay(wrappedNativeToken, amount, rateMode, onBehalfOf); _updateToken(wrappedNativeToken); } function borrow( address asset, uint256 amount, uint256 rateMode ) external payable { address onBehalfOf = _getSender(); _borrow(asset, amount, rateMode, onBehalfOf); _updateToken(asset); } function borrowETH(uint256 amount, uint256 rateMode) external payable { address onBehalfOf = _getSender(); _borrow(wrappedNativeToken, amount, rateMode, onBehalfOf); IWrappedNativeToken(wrappedNativeToken).withdraw(amount); } function flashLoan( address[] calldata assets, uint256[] calldata amounts, uint256[] calldata modes, bytes calldata params ) external payable { _requireMsg( assets.length == amounts.length, "flashLoan", "assets and amounts do not match" ); _requireMsg( assets.length == modes.length, "flashLoan", "assets and modes do not match" ); address onBehalfOf = _getSender(); address pool = ILendingPoolAddressesProviderV2(provider) .getLendingPool(); try ILendingPoolV2(pool).flashLoan( address(this), assets, amounts, modes, onBehalfOf, params, referralCode ) {} catch Error(string memory reason) { _revertMsg("flashLoan", reason); } catch { _revertMsg("flashLoan"); } // approve lending pool zero for (uint256 i = 0; i < assets.length; i++) { _tokenApproveZero(assets[i], pool); if (modes[i] != 0) _updateToken(assets[i]); } } function executeOperation( address[] memory assets, uint256[] memory amounts, uint256[] memory premiums, address initiator, bytes memory params ) external override returns (bool) { _requireMsg( msg.sender == ILendingPoolAddressesProviderV2(provider).getLendingPool(), "executeOperation", "invalid caller" ); _requireMsg( initiator == address(this), "executeOperation", "not initiated by the proxy" ); ( address[] memory tos, bytes32[] memory configs, bytes[] memory datas ) = abi.decode(params, (address[], bytes32[], bytes[])); IProxy(address(this)).execs(tos, configs, datas); address pool = ILendingPoolAddressesProviderV2(provider) .getLendingPool(); for (uint256 i = 0; i < assets.length; i++) { uint256 amountOwing = amounts[i] + premiums[i]; _tokenApprove(assets[i], pool, amountOwing); } return true; } /* ========== INTERNAL FUNCTIONS ========== */ function _deposit(address asset, uint256 amount) internal { (address pool, address aToken) = _getLendingPoolAndAToken(asset); _tokenApprove(asset, pool, amount); try ILendingPoolV2(pool).deposit( asset, amount, address(this), referralCode ) {} catch Error(string memory reason) { _revertMsg("deposit", reason); } catch { _revertMsg("deposit"); } _tokenApproveZero(asset, pool); _updateToken(aToken); } function _withdraw( address asset, uint256 amount ) internal returns (uint256 withdrawAmount) { (address pool, address aToken) = _getLendingPoolAndAToken(asset); amount = _getBalance(aToken, amount); try ILendingPoolV2(pool).withdraw(asset, amount, address(this)) returns (uint256 ret) { withdrawAmount = ret; } catch Error(string memory reason) { _revertMsg("withdraw", reason); } catch { _revertMsg("withdraw"); } } function _repay( address asset, uint256 amount, uint256 rateMode, address onBehalfOf ) internal returns (uint256 remainDebt) { address pool = ILendingPoolAddressesProviderV2(provider) .getLendingPool(); _tokenApprove(asset, pool, amount); try ILendingPoolV2(pool).repay(asset, amount, rateMode, onBehalfOf) {} catch Error(string memory reason) { _revertMsg("repay", reason); } catch { _revertMsg("repay"); } _tokenApproveZero(asset, pool); DataTypes.ReserveData memory reserve = ILendingPoolV2(pool) .getReserveData(asset); remainDebt = DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE ? IERC20(reserve.stableDebtTokenAddress).balanceOf(onBehalfOf) : IERC20(reserve.variableDebtTokenAddress).balanceOf(onBehalfOf); } function _borrow( address asset, uint256 amount, uint256 rateMode, address onBehalfOf ) internal { address pool = ILendingPoolAddressesProviderV2(provider) .getLendingPool(); try ILendingPoolV2(pool).borrow( asset, amount, rateMode, referralCode, onBehalfOf ) {} catch Error(string memory reason) { _revertMsg("borrow", reason); } catch { _revertMsg("borrow"); } } function _getLendingPoolAndAToken( address underlying ) internal view returns (address pool, address aToken) { pool = ILendingPoolAddressesProviderV2(provider).getLendingPool(); try ILendingPoolV2(pool).getReserveData(underlying) returns ( DataTypes.ReserveData memory data ) { aToken = data.aTokenAddress; _requireMsg( aToken != address(0), "General", "gToken should not be zero address" ); } catch Error(string memory reason) { _revertMsg("General", reason); } catch { _revertMsg("General"); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IWrappedNativeToken { function deposit() external payable; function withdraw(uint256 wad) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IERC20Usdt { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external; function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external; function transferFrom(address sender, address recipient, uint256 amount) external; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IProxy { function batchExec(address[] calldata tos, bytes32[] calldata configs, bytes[] memory datas, uint256[] calldata ruleIndexes) external payable; function execs(address[] calldata tos, bytes32[] calldata configs, bytes[] memory datas) external payable; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library LibCache { function set( mapping(bytes32 => bytes32) storage _cache, bytes32 _key, bytes32 _value ) internal { _cache[_key] = _value; } function setAddress( mapping(bytes32 => bytes32) storage _cache, bytes32 _key, address _value ) internal { _cache[_key] = bytes32(uint256(uint160(_value))); } function setUint256( mapping(bytes32 => bytes32) storage _cache, bytes32 _key, uint256 _value ) internal { _cache[_key] = bytes32(_value); } function getAddress( mapping(bytes32 => bytes32) storage _cache, bytes32 _key ) internal view returns (address ret) { ret = address(uint160(uint256(_cache[_key]))); } function getUint256( mapping(bytes32 => bytes32) storage _cache, bytes32 _key ) internal view returns (uint256 ret) { ret = uint256(_cache[_key]); } function get( mapping(bytes32 => bytes32) storage _cache, bytes32 _key ) internal view returns (bytes32 ret) { ret = _cache[_key]; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../Config.sol"; library LibStack { function setAddress(bytes32[] storage _stack, address _input) internal { _stack.push(bytes32(uint256(uint160(_input)))); } function set(bytes32[] storage _stack, bytes32 _input) internal { _stack.push(_input); } function setHandlerType( bytes32[] storage _stack, Config.HandlerType _input ) internal { _stack.push(bytes12(uint96(_input))); } function getAddress( bytes32[] storage _stack ) internal returns (address ret) { ret = address(uint160(uint256(peek(_stack)))); _stack.pop(); } function getSig(bytes32[] storage _stack) internal returns (bytes4 ret) { ret = bytes4(peek(_stack)); _stack.pop(); } function get(bytes32[] storage _stack) internal returns (bytes32 ret) { ret = peek(_stack); _stack.pop(); } function peek( bytes32[] storage _stack ) internal view returns (bytes32 ret) { uint256 length = _stack.length; require(length > 0, "stack empty"); ret = _stack[length - 1]; } function peek( bytes32[] storage _stack, uint256 _index ) internal view returns (bytes32 ret) { uint256 length = _stack.length; require(length > 0, "stack empty"); require(length > _index, "not enough elements in stack"); ret = _stack[length - _index - 1]; } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"wrappedNativeToken_","type":"address"},{"internalType":"address","name":"provider_","type":"address"},{"internalType":"uint16","name":"referralCode_","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MSG_SENDER_KEY","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTAGE_BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POSTPROCESS_SIG","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"}],"name":"borrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"}],"name":"borrowETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"cache","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"modes","type":"uint256[]"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"flashLoan","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"postProcess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"provider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralCode","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repay","outputs":[{"internalType":"uint256","name":"remainDebt","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"address","name":"onBehalfOf","type":"address"}],"name":"repayETH","outputs":[{"internalType":"uint256","name":"remainDebt","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stack","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wrappedNativeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162002d6f38038062002d6f833981016040819052620000349162000071565b6001600160a01b0392831660a052911660805261ffff1660c052620000c5565b80516001600160a01b03811681146200006c57600080fd5b919050565b6000806000606084860312156200008757600080fd5b620000928462000054565b9250620000a26020850162000054565b9150604084015161ffff81168114620000ba57600080fd5b809150509250925092565b60805160a05160c051612bf56200017a600039600081816102fd015281816106af01528181610f3101526116640152600081816101d401528181610458015281816104cf015281816104f90152818161085c0152818161089901528181610c9701528181610cd501528181610d5f01528181610dd60152610e04015260008181610141015281816105f40152818161090901528181610aec0152818161128a015281816115b4015261190b0152612bf56000f3fe60806040526004361061012a5760003560e01c806399eb59b9116100ab578063df2ebdbb1161006f578063df2ebdbb14610352578063f14210a61461037a578063f3fef3a31461038d578063f538ba51146103a0578063f5f5ba72146103b3578063fa2901a5146103e857600080fd5b806399eb59b9146102a3578063c1bce0b7146102d0578063c2722916146102e3578063d8b6d252146102eb578063dc9031c41461033257600080fd5b806354296154116100f2578063542961541461021e578063573ade81146102315780636fab3b731461024457806387c1394314610257578063920f5c841461027357600080fd5b8063085d48831461012f5780630f532d181461018057806317fcb39b146101c257806347e7ef24146101f65780635358fbda1461020b575b600080fd5b34801561013b57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018c57600080fd5b506101b47fb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a81565b604051908152602001610177565b3480156101ce57600080fd5b506101637f000000000000000000000000000000000000000000000000000000000000000081565b610209610204366004611e5a565b61041c565b005b610209610219366004611e86565b610436565b61020961022c366004611eeb565b610520565b6101b461023f366004611fdc565b610834565b610209610252366004612026565b61084b565b34801561026357600080fd5b506101b4670de0b6b3a764000081565b34801561027f57600080fd5b5061029361028e3660046121ce565b610902565b6040519015158152602001610177565b3480156102af57600080fd5b506101b46102be366004611e86565b60016020526000908152604090205481565b6102096102de3660046122f5565b610c04565b610209610c2b565b3480156102f757600080fd5b5061031f7f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff9091168152602001610177565b34801561033e57600080fd5b506101b461034d366004611e86565b610c6f565b34801561035e57600080fd5b5061016373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6101b4610388366004611e86565b610c90565b6101b461039b366004611e5a565b610d3e565b6101b46103ae36600461232a565b610d5b565b3480156103bf57600080fd5b5060408051808201825260068152651211d95a5cdd60d21b6020820152905161017791906123bb565b3480156103f457600080fd5b50610403636139148b60e11b81565b6040516001600160e01b03199091168152602001610177565b6104268282610e2f565b90506104328282610ee7565b5050565b61045473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82610e2f565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b50505050506104f47f000000000000000000000000000000000000000000000000000000000000000082610ee7565b61051d7f0000000000000000000000000000000000000000000000000000000000000000611021565b50565b6040805180820182526009815268333630b9b42637b0b760b91b6020808301919091528251808401909352601f83527f61737365747320616e6420616d6f756e747320646f206e6f74206d617463680090830152610582918988149190611060565b6040805180820182526009815268333630b9b42637b0b760b91b6020808301919091528251808401909352601d83527f61737365747320616e64206d6f64657320646f206e6f74206d61746368000000908301526105e4918986149190611060565b60006105ee611074565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610650573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067491906123d9565b60405163ab9c4b5d60e01b81529091506001600160a01b0382169063ab9c4b5d906106d79030908e908e908e908e908e908e908c908f908f907f000000000000000000000000000000000000000000000000000000000000000090600401612455565b600060405180830381600087803b1580156106f157600080fd5b505af1925050508015610702575060015b61078b5761070e612517565b806308c379a0141561075f5750610723612533565b8061072e5750610761565b61075960405180604001604052806009815260200168333630b9b42637b0b760b91b815250826110c2565b5061078b565b505b61078b60405180604001604052806009815260200168333630b9b42637b0b760b91b815250611119565b60005b89811015610827576107c68b8b838181106107ab576107ab6125bd565b90506020020160208101906107c091906125d3565b83611146565b8686828181106107d8576107d86125bd565b90506020020135600014610815576108158b8b838181106107fb576107fb6125bd565b905060200201602081019061081091906125d3565b611021565b8061081f81612606565b91505061078e565b5050505050505050505050565b600061084285858585611285565b95945050505050565b6000610855611074565b90506108837f00000000000000000000000000000000000000000000000000000000000000008484846115b0565b604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156108e557600080fd5b505af11580156108f9573d6000803e3d6000fd5b50505050505050565b60006109f27f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098991906123d9565b6001600160a01b0316336001600160a01b0316146040518060400160405280601081526020016f32bc32b1baba32a7b832b930ba34b7b760811b8152506040518060400160405280600e81526020016d34b73b30b634b21031b0b63632b960911b815250611060565b610a6e306001600160a01b0316846001600160a01b0316146040518060400160405280601081526020016f32bc32b1baba32a7b832b930ba34b7b760811b8152506040518060400160405280601a81526020017f6e6f7420696e69746961746564206279207468652070726f7879000000000000815250611060565b600080600084806020019051810190610a879190612764565b604051637193850960e01b815292955090935091503090637193850990610ab6908690869086906004016128ad565b600060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b5050505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c91906123d9565b905060005b8a51811015610bf3576000898281518110610b8e57610b8e6125bd565b60200260200101518b8381518110610ba857610ba86125bd565b6020026020010151610bba9190612944565b9050610be08c8381518110610bd157610bd16125bd565b60200260200101518483611756565b5080610beb81612606565b915050610b71565b5060019a9950505050505050505050565b6000610c0e611074565b9050610c1c848484846115b0565b610c2584611021565b50505050565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c696420706f73742070726f6365737360601b60448201526064015b60405180910390fd5b60008181548110610c7f57600080fd5b600091825260209091200154905081565b6000610cbc7f0000000000000000000000000000000000000000000000000000000000000000836117de565b604051632e1a7d4d60e01b8152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015610d2157600080fd5b505af1158015610d35573d6000803e3d6000fd5b50505050919050565b6000610d4a83836117de565b9050610d5583611021565b92915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b5050505050610dfd7f0000000000000000000000000000000000000000000000000000000000000000858585611285565b9050610e287f0000000000000000000000000000000000000000000000000000000000000000611021565b9392505050565b60006000198214610e41575080610d55565b6001600160a01b0383161580610e7357506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15610e7f575047610d55565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e28919061295c565b600080610ef384611906565b91509150610f02848385611756565b60405163e8eda9df60e01b81526001600160a01b0385811660048301526024820185905230604483015261ffff7f000000000000000000000000000000000000000000000000000000000000000016606483015283169063e8eda9df90608401600060405180830381600087803b158015610f7c57600080fd5b505af1925050508015610f8d575060015b61101257610f99612517565b806308c379a01415610fe85750610fae612533565b80610fb95750610fea565b610fe26040518060400160405280600781526020016619195c1bdcda5d60ca1b815250826110c2565b50611012565b505b6110126040518060400160405280600781526020016619195c1bdcda5d60ca1b815250611119565b61101c8483611146565b610c25815b600080546001810182559080526001600160a01b0382167f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5639091015550565b8261106f5761106f82826110c2565b505050565b7fb2f2618cecbbb6e7468cc0f2aa43858ad8d153e0280b22285e28e853bb9d453a60005260016020527fe066822ceb6294079ebca45035319f95ccb12306128dbdf5a257f0d1235733c95490565b6040805180820190915260068152651211d95a5cdd60d21b602082015282826040516020016110f393929190612975565b60408051601f198184030181529082905262461bcd60e51b8252610c66916004016123bb565b61051d816040518060400160405280600b81526020016a155b9cdc1958da599a595960aa1b8152506110c2565b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa158015611196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ba919061295c565b11156104325760405163095ea7b360e01b81526001600160a01b0382811660048301526000602483015283169063095ea7b390604401600060405180830381600087803b15801561120a57600080fd5b505af192505050801561121b575060015b6104325760405163095ea7b360e01b81526001600160a01b0382811660048301526001602483015283169063095ea7b390604401600060405180830381600087803b15801561126957600080fd5b505af115801561127d573d6000803e3d6000fd5b505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a91906123d9565b9050611317868287611756565b60405163573ade8160e01b81526001600160a01b0387811660048301526024820187905260448201869052848116606483015282169063573ade81906084016020604051808303816000875af1925050508015611391575060408051601f3d908101601f1916820190925261138e9181019061295c565b60015b6114175761139d612517565b806308c379a014156113ea57506113b2612533565b806113bd57506113ec565b6113e460405180604001604052806005815260200164726570617960d81b815250826110c2565b50611419565b505b61141260405180604001604052806005815260200164726570617960d81b815250611119565b611419565b505b6114238682611146565b6040516335ea6a7560e01b81526001600160a01b038781166004830152600091908316906335ea6a759060240161018060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114929190612a5d565b905060018560028111156114a8576114a8612b4a565b60028111156114b9576114b9612b4a565b14611534576101208101516040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa15801561150b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152f919061295c565b6115a5565b6101008101516040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa158015611581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a5919061295c565b979650505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123d9565b60405163a415bcad60e01b81526001600160a01b038781166004830152602482018790526044820186905261ffff7f000000000000000000000000000000000000000000000000000000000000000016606483015284811660848301529192509082169063a415bcad9060a401600060405180830381600087803b1580156116bb57600080fd5b505af19250505080156116cc575060015b61174f576116d8612517565b806308c379a0141561172657506116ed612533565b806116f85750611728565b61172060405180604001604052806006815260200165626f72726f7760d01b815250826110c2565b5061174f565b505b61174f60405180604001604052806006815260200165626f72726f7760d01b815250611119565b5050505050565b60405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905284169063095ea7b390604401600060405180830381600087803b1580156117a057600080fd5b505af19250505080156117b1575060015b61106f576117ca6001600160a01b038416836000611adb565b61106f6001600160a01b0384168383611adb565b60008060006117ec85611906565b915091506117fa8185610e2f565b604051631a4ca37b60e21b81526001600160a01b03878116600483015260248201839052306044830152919550908316906369328dec906064016020604051808303816000875af192505050801561186f575060408051601f3d908101601f1916820190925261186c9181019061295c565b60015b6118fb5761187b612517565b806308c379a014156118cb5750611890612533565b8061189b57506118cd565b6118c560405180604001604052806008815260200167776974686472617760c01b815250826110c2565b506118fe565b505b6118f660405180604001604052806008815260200167776974686472617760c01b815250611119565b6118fe565b92505b505092915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198b91906123d9565b6040516335ea6a7560e01b81526001600160a01b038581166004830152919350908316906335ea6a759060240161018060405180830381865afa9250505080156119f2575060408051601f3d908101601f191682019092526119ef91810190612a5d565b60015b611a7c576119fe612517565b806308c379a01415611a4d5750611a13612533565b80611a1e5750611a4f565b611a476040518060400160405280600781526020016611d95b995c985b60ca1b815250826110c2565b50915091565b505b611a776040518060400160405280600781526020016611d95b995c985b60ca1b815250611119565b915091565b8060e001519150611a4760006001600160a01b0316836001600160a01b031614156040518060400160405280600781526020016611d95b995c985b60ca1b815250604051806060016040528060218152602001612b9f60219139611060565b801580611b555750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b53919061295c565b155b611bc05760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610c66565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663095ea7b360e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649084015261106f92869291600091611c50918516908490611ccd565b80519091501561106f5780806020019051810190611c6e9190612b60565b61106f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c66565b6060611cdc8484600085611ce4565b949350505050565b606082471015611d455760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c66565b843b611d935760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c66565b600080866001600160a01b03168587604051611daf9190612b82565b60006040518083038185875af1925050503d8060008114611dec576040519150601f19603f3d011682016040523d82523d6000602084013e611df1565b606091505b50915091506115a582828660608315611e0b575081610e28565b825115611e1b5782518084602001fd5b8160405162461bcd60e51b8152600401610c6691906123bb565b6001600160a01b038116811461051d57600080fd5b8035611e5581611e35565b919050565b60008060408385031215611e6d57600080fd5b8235611e7881611e35565b946020939093013593505050565b600060208284031215611e9857600080fd5b5035919050565b60008083601f840112611eb157600080fd5b50813567ffffffffffffffff811115611ec957600080fd5b6020830191508360208260051b8501011115611ee457600080fd5b9250929050565b6000806000806000806000806080898b031215611f0757600080fd5b883567ffffffffffffffff80821115611f1f57600080fd5b611f2b8c838d01611e9f565b909a50985060208b0135915080821115611f4457600080fd5b611f508c838d01611e9f565b909850965060408b0135915080821115611f6957600080fd5b611f758c838d01611e9f565b909650945060608b0135915080821115611f8e57600080fd5b818b0191508b601f830112611fa257600080fd5b813581811115611fb157600080fd5b8c6020828501011115611fc357600080fd5b6020830194508093505050509295985092959890939650565b60008060008060808587031215611ff257600080fd5b8435611ffd81611e35565b93506020850135925060408501359150606085013561201b81611e35565b939692955090935050565b6000806040838503121561203957600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561208457612084612048565b6040525050565b604051610180810167ffffffffffffffff811182821017156120af576120af612048565b60405290565b600067ffffffffffffffff8211156120cf576120cf612048565b5060051b60200190565b600082601f8301126120ea57600080fd5b813560206120f7826120b5565b604051612104828261205e565b83815260059390931b850182019282810191508684111561212457600080fd5b8286015b8481101561213f5780358352918301918301612128565b509695505050505050565b600067ffffffffffffffff82111561216457612164612048565b50601f01601f191660200190565b600082601f83011261218357600080fd5b813561218e8161214a565b60405161219b828261205e565b8281528560208487010111156121b057600080fd5b82602086016020830137600092810160200192909252509392505050565b600080600080600060a086880312156121e657600080fd5b853567ffffffffffffffff808211156121fe57600080fd5b818801915088601f83011261221257600080fd5b8135602061221f826120b5565b60405161222c828261205e565b83815260059390931b850182019282810191508c84111561224c57600080fd5b948201945b8386101561227357853561226481611e35565b82529482019490820190612251565b9950508901359250508082111561228957600080fd5b61229589838a016120d9565b955060408801359150808211156122ab57600080fd5b6122b789838a016120d9565b94506122c560608901611e4a565b935060808801359150808211156122db57600080fd5b506122e888828901612172565b9150509295509295909350565b60008060006060848603121561230a57600080fd5b833561231581611e35565b95602085013595506040909401359392505050565b60008060006060848603121561233f57600080fd5b8335925060208401359150604084013561235881611e35565b809150509250925092565b60005b8381101561237e578181015183820152602001612366565b83811115610c255750506000910152565b600081518084526123a7816020860160208601612363565b601f01601f19169290920160200192915050565b602081526000610e28602083018461238f565b8051611e5581611e35565b6000602082840312156123eb57600080fd5b8151610e2881611e35565b81835260006001600160fb1b0383111561240f57600080fd5b8260051b8083602087013760009401602001938452509192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b038c8116825260e06020830181905282018b90526000908c906101008401835b8e8110156124a557833561248f81611e35565b831682526020938401939091019060010161247c565b5084810360408601526124b9818d8f6123f6565b9250505082810360608401526124d081898b6123f6565b6001600160a01b0388166080850152905082810360a08401526124f481868861242c565b91505061250760c083018461ffff169052565b9c9b505050505050505050505050565b600060033d11156125305760046000803e5060005160e01c5b90565b600060443d10156125415790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561257157505050505090565b82850191508151818111156125895750505050505090565b843d87010160208285010111156125a35750505050505090565b6125b26020828601018761205e565b509095945050505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156125e557600080fd5b8135610e2881611e35565b634e487b7160e01b600052601160045260246000fd5b600060001982141561261a5761261a6125f0565b5060010190565b600082601f83011261263257600080fd5b8151602061263f826120b5565b60405161264c828261205e565b83815260059390931b850182019282810191508684111561266c57600080fd5b8286015b8481101561213f5780518352918301918301612670565b600082601f83011261269857600080fd5b815160206126a5826120b5565b604080516126b3838261205e565b84815260059490941b86018301938381019250878511156126d357600080fd5b8387015b8581101561275857805167ffffffffffffffff8111156126f75760008081fd5b8801603f81018a136127095760008081fd5b858101516127168161214a565b8551612722828261205e565b8281528c8784860101111561273957600091508182fd5b612748838a8301898701612363565b87525050509284019284016126d7565b50979650505050505050565b60008060006060848603121561277957600080fd5b835167ffffffffffffffff8082111561279157600080fd5b818601915086601f8301126127a557600080fd5b815160206127b2826120b5565b6040516127bf828261205e565b83815260059390931b850182019282810191508a8411156127df57600080fd5b948201945b838610156128065785516127f781611e35565b825294820194908201906127e4565b9189015191975090935050508082111561281f57600080fd5b61282b87838801612621565b9350604086015191508082111561284157600080fd5b5061284e86828701612687565b9150509250925092565b600081518084526020808501808196508360051b8101915082860160005b858110156128a057828403895261288e84835161238f565b98850198935090840190600101612876565b5091979650505050505050565b606080825284519082018190526000906020906080840190828801845b828110156128ef5781516001600160a01b0316845292840192908401906001016128ca565b5050508381038285015285518082528683019183019060005b8181101561292457835183529284019291840191600101612908565b505084810360408601526129388187612858565b98975050505050505050565b60008219821115612957576129576125f0565b500190565b60006020828403121561296e57600080fd5b5051919050565b60008451612987818460208901612363565b605f60f81b90830190815284516129a5816001840160208901612363565b6101d160f51b6001929091019182015283516129c8816003840160208801612363565b0160030195945050505050565b6000602082840312156129e757600080fd5b6040516020810181811067ffffffffffffffff82111715612a0a57612a0a612048565b6040529151825250919050565b80516fffffffffffffffffffffffffffffffff81168114611e5557600080fd5b805164ffffffffff81168114611e5557600080fd5b805160ff81168114611e5557600080fd5b60006101808284031215612a7057600080fd5b612a7861208b565b612a8284846129d5565b8152612a9060208401612a17565b6020820152612aa160408401612a17565b6040820152612ab260608401612a17565b6060820152612ac360808401612a17565b6080820152612ad460a08401612a17565b60a0820152612ae560c08401612a37565b60c0820152612af660e084016123ce565b60e0820152610100612b098185016123ce565b90820152610120612b1b8482016123ce565b90820152610140612b2d8482016123ce565b90820152610160612b3f848201612a4c565b908201529392505050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215612b7257600080fd5b81518015158114610e2857600080fd5b60008251612b94818460208701612363565b919091019291505056fe67546f6b656e2073686f756c64206e6f74206265207a65726f2061646472657373a2646970667358221220be93cdf4b4bff3f56de946f17605fb07685e07434cd122f94a19768dd28a942964736f6c634300080a003300000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c830000000000000000000000006c793c628fe2b480c5e6fb7957dda4b9291f9c9b0000000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c830000000000000000000000006c793c628fe2b480c5e6fb7957dda4b9291f9c9b0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : wrappedNativeToken_ (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [1] : provider_ (address): 0x6c793c628fe2b480c5e6fb7957dda4b9291f9c9b
Arg [2] : referralCode_ (uint16): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Arg [1] : 0000000000000000000000006c793c628fe2b480c5e6fb7957dda4b9291f9c9b
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.