Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20878596 | 79 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
BoringDrone
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.21; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {ERC721Holder} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; import {ERC1155Holder} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import {DroneLib} from "src/base/Drones/DroneLib.sol"; // . // ...... // .......... // ..:::....... // ..::........ // ....::::....... // ......::..:.... // ........:..:... // ............ .......:.:........ // ..:::......... ..........:..::... // ....::::..::..... ..........:...::.. // ....-:::...::.... ...............:-... // .....--::::.::................:...:... // ...:-::::::::..............:..:::. // .....--:::::-:.............:::::.... // ....:==-:::--............::..-... // .....:*+-:::::..........::.:-.. // ......:+*=---:.......:::::::...... // ........::::--+#*==:....:-------::........ // .....-=---=+-=+--===##==:..-+++++=====---:.... // ....=*##*====-+*=++=-===+#+=-=*+**+*******+==:...... // .....==:=####*=----*+==+=====::=#*++*******##*****=-:....... // ......:##+-++=+++=---+####*+==--:--=+#%#*###**********==++=-..... // ....-:+%*=---===++==+*%%%###++=-----+*#@%###@%%###****#*#%%**+=:.. // ..:*=-===----+*###**++%###%%#*+=+====+++**#@@%%%##**#%%#%@%###*-.... // ..+#=--++*+++*#%%%##***#%%%%%%#*+++==+***+++=+%%###%%%%%%%%@%##=.::. // ..-=#+==+#%%#***#++##%######%##%@%#*++##*+**+*##%%#%##%##+##@@%*+:=+:. // ..=+-*%%#*+#%%*+=%@#+*%@%%%%%%###%#*===*********##%%%*#*#@@%@%%*=-==::.. // ..*%#++####***+#@@%===-=+#%@%*+++##+=-==+*******#%@%*=##%@@@@%%**+=-+:.. // ..=###*++**+=+%@@@#--::.....::-*#=++=---==++++*#%%#+=-**@@@@@%**#-.... // ...-**++++===+@%%%%=...........+#*+##=::::::-=+%*---::-=+#@@@%#+##-.... // ....::::::---@@@%#*:... ...-#@#:........:=%@#:.....::=+*###**##:. // ..........=+%@%=.. ...*%%*.........:#@%-....=-:::-=+***#+-... // ...#@%%%#:.. ..:%@@=.. ...+%%... ...==---+*##*=... // ...#@@@@@%:. ..:#@%:.. ..=*#-... ..........-#**... // ..*@@@@@%-... ..:*#+.... ..=*@%.. ....=+.. // ..:%@%%%#:... ..-@@%:... ..+@@+. .... // .....-*%%*... ..=@@%-... ...=%#:. // ....:*#:..... ..-@%%-.. ..:%=... // ..:+++-....... ...+*#:.. ....**:. // ..-:...... ....==.......=*:.. // .... ...-#:. ....-+:... // .... ..:=:.. ..:*=.... // ....... .:=-... // ... ....... // // contract BoringDrone is ERC721Holder, ERC1155Holder { using Address for address; //============================== MODIFIERS =============================== modifier onlyBoringVault() { if (msg.sender != boringVault) revert BoringDrone__OnlyBoringVault(); _; } //============================== ERRORS =============================== error BoringDrone__OnlyBoringVault(); error BoringDrone__ReceiveFailed(); //============================== CONSTRUCTOR =============================== /** * @notice The address of the BoringVault that can control this drone. */ address internal immutable boringVault; /** * @notice The amount of gas needed to forward native to the BoringVault. * @dev This value was determined from guess and check. Realisitically, the value should be closer to 10k, but * 21k is used for extra safety. */ uint256 internal immutable safeGasToForwardNative; constructor(address _boringVault, uint256 _safeGasToForwardNative) { boringVault = _boringVault; safeGasToForwardNative = _safeGasToForwardNative < 21_000 ? 21_000 : _safeGasToForwardNative; } //============================== WITHDRAW =============================== /** * @notice Withdraws all native from the drone. */ function withdrawNativeFromDrone() external onlyBoringVault { (bool success,) = boringVault.call{value: address(this).balance}(""); if (!success) revert BoringDrone__ReceiveFailed(); } //============================== FALLBACK =============================== /** * @notice This contract in its current state can only be interacted with by the BoringVault. * @notice The real target is extracted from the call data using `extractTargetFromCalldata()`. * @notice The drone then forwards */ fallback() external payable onlyBoringVault { // Extract real target from end of calldata address target = DroneLib.extractTargetFromCalldata(); // Forward call to real target. target.functionCallWithValue(msg.data, msg.value); } //============================== RECEIVE =============================== receive() external payable { // If gas left is less than safe gas needed to forward native, return. if (gasleft() < safeGasToForwardNative) return; (bool success,) = boringVault.call{value: msg.value}(""); if (!success) revert BoringDrone__ReceiveFailed(); } }
// SPDX-License-Identifier: MIT // 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(); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.20; import {IERC721Receiver} from "../IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or * {IERC721-setApprovalForAll}. */ abstract contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.20; import {IERC165, ERC165} from "../../../utils/introspection/ERC165.sol"; import {IERC1155Receiver} from "../IERC1155Receiver.sol"; /** * @dev Simple implementation of `IERC1155Receiver` that will allow a contract to hold ERC1155 tokens. * * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be * stuck. */ abstract contract ERC1155Holder is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.0; library DroneLib { bytes32 internal constant TARGET_FLAG = keccak256(bytes("DroneLib.target")); function extractTargetFromCalldata() internal pure returns (address target) { target = extractTargetFromInput(msg.data); } function extractTargetFromInput(bytes calldata data) internal pure returns (address target) { // Look at the last 32 bytes of calldata and see if the TARGET_FLAG is there. uint256 length = data.length; if (length >= 68) { bytes32 flag = bytes32(data[length - 32:]); if (flag == TARGET_FLAG) { // If the flag is there, extract the target from the calldata. target = address(bytes20(data[length - 52:length - 32])); } } // else no target present, so target is address(0). } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.20; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be * reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Interface that must be implemented by smart contracts in order to receive * ERC-1155 token transfers. */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "remappings": [ "@solmate/=lib/solmate/src/", "@forge-std/=lib/forge-std/src/", "@ds-test/=lib/forge-std/lib/ds-test/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "@ccip/=lib/ccip/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "LayerZero-v2/=lib/LayerZero-v2/", "ccip/=lib/ccip/contracts/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "london", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_boringVault","type":"address"},{"internalType":"uint256","name":"_safeGasToForwardNative","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":"BoringDrone__OnlyBoringVault","type":"error"},{"inputs":[],"name":"BoringDrone__ReceiveFailed","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawNativeFromDrone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051610a69380380610a6983398101604081905261002f9161005a565b6001600160a01b038216608052615208811061004b578061004f565b6152085b60a052506100949050565b6000806040838503121561006d57600080fd5b82516001600160a01b038116811461008457600080fd5b6020939093015192949293505050565b60805160a05161099d6100cc6000396000605501526000818160810152818161011e0152818161039201526103d4015261099d6000f3fe60806040526004361061004e5760003560e01c806301ffc9a7146101b4578063150b7a02146101e9578063bc197c811461022d578063da3ef9d214610259578063f23a6e611461026e57610113565b36610113577f00000000000000000000000000000000000000000000000000000000000000005a101561007d57005b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163460405160006040518083038185875af1925050503d80600081146100ea576040519150601f19603f3d011682016040523d82523d6000602084013e6100ef565b606091505b505090508061011157604051632deea62960e21b815260040160405180910390fd5b005b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461015c57604051631924434360e21b815260040160405180910390fd5b600061016661029a565b90506101116000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506001600160a01b038416919050346102ac565b3480156101c057600080fd5b506101d46101cf3660046105a8565b610350565b60405190151581526020015b60405180910390f35b3480156101f557600080fd5b506102146102043660046106a5565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101e0565b34801561023957600080fd5b5061021461024836600461078d565b63bc197c8160e01b95945050505050565b34801561026557600080fd5b50610111610387565b34801561027a57600080fd5b50610214610289366004610837565b63f23a6e6160e01b95945050505050565b60006102a7600036610467565b905090565b6060814710156102d65760405163cd78605960e01b81523060048201526024015b60405180910390fd5b600080856001600160a01b031684866040516102f2919061089c565b60006040518083038185875af1925050503d806000811461032f576040519150601f19603f3d011682016040523d82523d6000602084013e610334565b606091505b5091509150610344868383610523565b925050505b9392505050565b60006001600160e01b03198216630271189760e51b148061038157506301ffc9a760e01b6001600160e01b03198316145b92915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103d057604051631924434360e21b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03164760405160006040518083038185875af1925050503d806000811461043d576040519150601f19603f3d011682016040523d82523d6000602084013e610442565b606091505b505090508061046457604051632deea62960e21b815260040160405180910390fd5b50565b6000816044811061051c57600084846104816020856108cb565b61048c9282906108ec565b61049591610916565b60408051808201909152600f81526e111c9bdb99531a588b9d185c99d95d608a1b60209091015290507fc1b9dfe6c6d6343c26291b77edfcc5dbc62c3afa2ee72581da4e3cdbe96a0a4f810161051a5784846104f26034856108cb565b906104fe6020866108cb565b9261050b939291906108ec565b61051491610934565b60601c92505b505b5092915050565b606082610538576105338261057f565b610349565b815115801561054f57506001600160a01b0384163b155b1561057857604051639996b31560e01b81526001600160a01b03851660048201526024016102cd565b5080610349565b80511561058f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000602082840312156105ba57600080fd5b81356001600160e01b03198116811461034957600080fd5b80356001600160a01b03811681146105e957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561062d5761062d6105ee565b604052919050565b600082601f83011261064657600080fd5b813567ffffffffffffffff811115610660576106606105ee565b610673601f8201601f1916602001610604565b81815284602083860101111561068857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156106bb57600080fd5b6106c4856105d2565b93506106d2602086016105d2565b925060408501359150606085013567ffffffffffffffff8111156106f557600080fd5b61070187828801610635565b91505092959194509250565b600082601f83011261071e57600080fd5b8135602067ffffffffffffffff82111561073a5761073a6105ee565b8160051b610749828201610604565b928352848101820192828101908785111561076357600080fd5b83870192505b8483101561078257823582529183019190830190610769565b979650505050505050565b600080600080600060a086880312156107a557600080fd5b6107ae866105d2565b94506107bc602087016105d2565b9350604086013567ffffffffffffffff808211156107d957600080fd5b6107e589838a0161070d565b945060608801359150808211156107fb57600080fd5b61080789838a0161070d565b9350608088013591508082111561081d57600080fd5b5061082a88828901610635565b9150509295509295909350565b600080600080600060a0868803121561084f57600080fd5b610858866105d2565b9450610866602087016105d2565b93506040860135925060608601359150608086013567ffffffffffffffff81111561089057600080fd5b61082a88828901610635565b6000825160005b818110156108bd57602081860181015185830152016108a3565b506000920191825250919050565b8181038181111561038157634e487b7160e01b600052601160045260246000fd5b600080858511156108fc57600080fd5b8386111561090957600080fd5b5050820193919092039150565b8035602083101561038157600019602084900360031b1b1692915050565b6bffffffffffffffffffffffff19813581811691601485101561051a5760149490940360031b84901b169092169291505056fea2646970667358221220d185ce9ab11312aef744e55ccd39b94a4c554aba63f61da23eb0598ba6643d3364736f6c63430008150033000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa50000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061004e5760003560e01c806301ffc9a7146101b4578063150b7a02146101e9578063bc197c811461022d578063da3ef9d214610259578063f23a6e611461026e57610113565b36610113577f00000000000000000000000000000000000000000000000000000000000052085a101561007d57005b60007f000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa56001600160a01b03163460405160006040518083038185875af1925050503d80600081146100ea576040519150601f19603f3d011682016040523d82523d6000602084013e6100ef565b606091505b505090508061011157604051632deea62960e21b815260040160405180910390fd5b005b336001600160a01b037f000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa5161461015c57604051631924434360e21b815260040160405180910390fd5b600061016661029a565b90506101116000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506001600160a01b038416919050346102ac565b3480156101c057600080fd5b506101d46101cf3660046105a8565b610350565b60405190151581526020015b60405180910390f35b3480156101f557600080fd5b506102146102043660046106a5565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101e0565b34801561023957600080fd5b5061021461024836600461078d565b63bc197c8160e01b95945050505050565b34801561026557600080fd5b50610111610387565b34801561027a57600080fd5b50610214610289366004610837565b63f23a6e6160e01b95945050505050565b60006102a7600036610467565b905090565b6060814710156102d65760405163cd78605960e01b81523060048201526024015b60405180910390fd5b600080856001600160a01b031684866040516102f2919061089c565b60006040518083038185875af1925050503d806000811461032f576040519150601f19603f3d011682016040523d82523d6000602084013e610334565b606091505b5091509150610344868383610523565b925050505b9392505050565b60006001600160e01b03198216630271189760e51b148061038157506301ffc9a760e01b6001600160e01b03198316145b92915050565b336001600160a01b037f000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa516146103d057604051631924434360e21b815260040160405180910390fd5b60007f000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa56001600160a01b03164760405160006040518083038185875af1925050503d806000811461043d576040519150601f19603f3d011682016040523d82523d6000602084013e610442565b606091505b505090508061046457604051632deea62960e21b815260040160405180910390fd5b50565b6000816044811061051c57600084846104816020856108cb565b61048c9282906108ec565b61049591610916565b60408051808201909152600f81526e111c9bdb99531a588b9d185c99d95d608a1b60209091015290507fc1b9dfe6c6d6343c26291b77edfcc5dbc62c3afa2ee72581da4e3cdbe96a0a4f810161051a5784846104f26034856108cb565b906104fe6020866108cb565b9261050b939291906108ec565b61051491610934565b60601c92505b505b5092915050565b606082610538576105338261057f565b610349565b815115801561054f57506001600160a01b0384163b155b1561057857604051639996b31560e01b81526001600160a01b03851660048201526024016102cd565b5080610349565b80511561058f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000602082840312156105ba57600080fd5b81356001600160e01b03198116811461034957600080fd5b80356001600160a01b03811681146105e957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561062d5761062d6105ee565b604052919050565b600082601f83011261064657600080fd5b813567ffffffffffffffff811115610660576106606105ee565b610673601f8201601f1916602001610604565b81815284602083860101111561068857600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156106bb57600080fd5b6106c4856105d2565b93506106d2602086016105d2565b925060408501359150606085013567ffffffffffffffff8111156106f557600080fd5b61070187828801610635565b91505092959194509250565b600082601f83011261071e57600080fd5b8135602067ffffffffffffffff82111561073a5761073a6105ee565b8160051b610749828201610604565b928352848101820192828101908785111561076357600080fd5b83870192505b8483101561078257823582529183019190830190610769565b979650505050505050565b600080600080600060a086880312156107a557600080fd5b6107ae866105d2565b94506107bc602087016105d2565b9350604086013567ffffffffffffffff808211156107d957600080fd5b6107e589838a0161070d565b945060608801359150808211156107fb57600080fd5b61080789838a0161070d565b9350608088013591508082111561081d57600080fd5b5061082a88828901610635565b9150509295509295909350565b600080600080600060a0868803121561084f57600080fd5b610858866105d2565b9450610866602087016105d2565b93506040860135925060608601359150608086013567ffffffffffffffff81111561089057600080fd5b61082a88828901610635565b6000825160005b818110156108bd57602081860181015185830152016108a3565b506000920191825250919050565b8181038181111561038157634e487b7160e01b600052601160045260246000fd5b600080858511156108fc57600080fd5b8386111561090957600080fd5b5050820193919092039150565b8035602083101561038157600019602084900360031b1b1692915050565b6bffffffffffffffffffffffff19813581811691601485101561051a5760149490940360031b84901b169092169291505056fea2646970667358221220d185ce9ab11312aef744e55ccd39b94a4c554aba63f61da23eb0598ba6643d3364736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa50000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _boringVault (address): 0xf8203A33027607D2C82dFd67b46986096257dFA5
Arg [1] : _safeGasToForwardNative (uint256): 0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f8203a33027607d2c82dfd67b46986096257dfa5
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
3573:2538:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5946:22;5934:9;:34;5930:47;;;3573:2538;5930:47;5988:12;6005:11;-1:-1:-1;;;;;6005:16:7;6029:9;6005:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5987:56;;;6058:7;6053:49;;6074:28;;-1:-1:-1;;;6074:28:7;;;;;;;;;;;6053:49;5841:268;3573:2538;3784:10;-1:-1:-1;;;;;3798:11:7;3784:25;;3780:68;;3818:30;;-1:-1:-1;;;3818:30:7;;;;;;;;;;;3780:68;5570:14:::1;5587:36;:34;:36::i;:::-;5570:53;;5674:49;5703:8;;5674:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;5674:28:7;::::1;::::0;;-1:-1:-1;5713:9:7::1;5674:28;:49::i;649:221:1:-:0;;;;;;;;;;-1:-1:-1;649:221:1;;;;;:::i;:::-;;:::i;:::-;;;680:14:9;;673:22;655:41;;643:2;628:18;649:221:1;;;;;;;;639:153:3;;;;;;;;;;-1:-1:-1;639:153:3;;;;;:::i;:::-;-1:-1:-1;;;639:153:3;;;;;;;;;;-1:-1:-1;;;;;;2536:33:9;;;2518:52;;2506:2;2491:18;639:153:3;2374:202:9;1101:247:1;;;;;;;;;;-1:-1:-1;1101:247:1;;;;;:::i;:::-;-1:-1:-1;;;1101:247:1;;;;;;;;4922:204:7;;;;;;;;;;;;;:::i;876:219:1:-;;;;;;;;;;-1:-1:-1;876:219:1;;;;;:::i;:::-;-1:-1:-1;;;876:219:1;;;;;;;;170:134:8;230:14;265:32;288:8;;265:22;:32::i;:::-;256:41;;170:134;:::o;3180:392:4:-;3279:12;3331:5;3307:21;:29;3303:108;;;3359:41;;-1:-1:-1;;;3359:41:4;;3394:4;3359:41;;;5003:51:9;4976:18;;3359:41:4;;;;;;;;3303:108;3421:12;3435:23;3462:6;-1:-1:-1;;;;;3462:11:4;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;;;;3180:392;;;;;;:::o;649:221:1:-;751:4;-1:-1:-1;;;;;;774:49:1;;-1:-1:-1;;;774:49:1;;:89;;-1:-1:-1;;;;;;;;;;861:40:5;;;827:36:1;767:96;649:221;-1:-1:-1;;649:221:1:o;4922:204:7:-;3784:10;-1:-1:-1;;;;;3798:11:7;3784:25;;3780:68;;3818:30;;-1:-1:-1;;;3818:30:7;;;;;;;;;;;3780:68;4993:12:::1;5010:11;-1:-1:-1::0;;;;;5010:16:7::1;5034:21;5010:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4992:68;;;5075:7;5070:49;;5091:28;;-1:-1:-1::0;;;5091:28:7::1;;;;;;;;;;;5070:49;4982:144;4922:204::o:0;310:585:8:-;386:14;515:4;550:2;540:12;;536:292;;568:12;591:4;;596:11;605:2;596:6;:11;:::i;:::-;591:18;;;;;:::i;:::-;583:27;;;:::i;:::-;138:24;;;;;;;;;;;;-1:-1:-1;;;138:24:8;;;;;568:42;-1:-1:-1;629:19:8;;;625:193;;772:4;;777:11;786:2;777:6;:11;:::i;:::-;772:29;789:11;798:2;789:6;:11;:::i;:::-;772:29;;;;;;;:::i;:::-;764:38;;;:::i;:::-;756:47;;747:56;;625:193;554:274;536:292;402:493;310:585;;;;:::o;4625:582:4:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:4;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:4;;-1:-1:-1;;;;;5021:32:9;;5121:24:4;;;5003:51:9;4976:18;;5121:24:4;4857:203:9;5041:119:4;-1:-1:-1;5180:10:4;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:4;;;;;;;;;;;224:286:9;282:6;335:2;323:9;314:7;310:23;306:32;303:52;;;351:1;348;341:12;303:52;377:23;;-1:-1:-1;;;;;;429:32:9;;419:43;;409:71;;476:1;473;466:12;707:173;775:20;;-1:-1:-1;;;;;824:31:9;;814:42;;804:70;;870:1;867;860:12;804:70;707:173;;;:::o;885:127::-;946:10;941:3;937:20;934:1;927:31;977:4;974:1;967:15;1001:4;998:1;991:15;1017:275;1088:2;1082:9;1153:2;1134:13;;-1:-1:-1;;1130:27:9;1118:40;;1188:18;1173:34;;1209:22;;;1170:62;1167:88;;;1235:18;;:::i;:::-;1271:2;1264:22;1017:275;;-1:-1:-1;1017:275:9:o;1297:530::-;1339:5;1392:3;1385:4;1377:6;1373:17;1369:27;1359:55;;1410:1;1407;1400:12;1359:55;1446:6;1433:20;1472:18;1468:2;1465:26;1462:52;;;1494:18;;:::i;:::-;1538:55;1581:2;1562:13;;-1:-1:-1;;1558:27:9;1587:4;1554:38;1538:55;:::i;:::-;1618:2;1609:7;1602:19;1664:3;1657:4;1652:2;1644:6;1640:15;1636:26;1633:35;1630:55;;;1681:1;1678;1671:12;1630:55;1746:2;1739:4;1731:6;1727:17;1720:4;1711:7;1707:18;1694:55;1794:1;1769:16;;;1787:4;1765:27;1758:38;;;;1773:7;1297:530;-1:-1:-1;;;1297:530:9:o;1832:537::-;1927:6;1935;1943;1951;2004:3;1992:9;1983:7;1979:23;1975:33;1972:53;;;2021:1;2018;2011:12;1972:53;2044:29;2063:9;2044:29;:::i;:::-;2034:39;;2092:38;2126:2;2115:9;2111:18;2092:38;:::i;:::-;2082:48;;2177:2;2166:9;2162:18;2149:32;2139:42;;2232:2;2221:9;2217:18;2204:32;2259:18;2251:6;2248:30;2245:50;;;2291:1;2288;2281:12;2245:50;2314:49;2355:7;2346:6;2335:9;2331:22;2314:49;:::i;:::-;2304:59;;;1832:537;;;;;;;:::o;2581:712::-;2635:5;2688:3;2681:4;2673:6;2669:17;2665:27;2655:55;;2706:1;2703;2696:12;2655:55;2742:6;2729:20;2768:4;2791:18;2787:2;2784:26;2781:52;;;2813:18;;:::i;:::-;2859:2;2856:1;2852:10;2882:28;2906:2;2902;2898:11;2882:28;:::i;:::-;2944:15;;;3014;;;3010:24;;;2975:12;;;;3046:15;;;3043:35;;;3074:1;3071;3064:12;3043:35;3110:2;3102:6;3098:15;3087:26;;3122:142;3138:6;3133:3;3130:15;3122:142;;;3204:17;;3192:30;;3155:12;;;;3242;;;;3122:142;;;3282:5;2581:712;-1:-1:-1;;;;;;;2581:712:9:o;3298:943::-;3452:6;3460;3468;3476;3484;3537:3;3525:9;3516:7;3512:23;3508:33;3505:53;;;3554:1;3551;3544:12;3505:53;3577:29;3596:9;3577:29;:::i;:::-;3567:39;;3625:38;3659:2;3648:9;3644:18;3625:38;:::i;:::-;3615:48;;3714:2;3703:9;3699:18;3686:32;3737:18;3778:2;3770:6;3767:14;3764:34;;;3794:1;3791;3784:12;3764:34;3817:61;3870:7;3861:6;3850:9;3846:22;3817:61;:::i;:::-;3807:71;;3931:2;3920:9;3916:18;3903:32;3887:48;;3960:2;3950:8;3947:16;3944:36;;;3976:1;3973;3966:12;3944:36;3999:63;4054:7;4043:8;4032:9;4028:24;3999:63;:::i;:::-;3989:73;;4115:3;4104:9;4100:19;4087:33;4071:49;;4145:2;4135:8;4132:16;4129:36;;;4161:1;4158;4151:12;4129:36;;4184:51;4227:7;4216:8;4205:9;4201:24;4184:51;:::i;:::-;4174:61;;;3298:943;;;;;;;;:::o;4246:606::-;4350:6;4358;4366;4374;4382;4435:3;4423:9;4414:7;4410:23;4406:33;4403:53;;;4452:1;4449;4442:12;4403:53;4475:29;4494:9;4475:29;:::i;:::-;4465:39;;4523:38;4557:2;4546:9;4542:18;4523:38;:::i;:::-;4513:48;;4608:2;4597:9;4593:18;4580:32;4570:42;;4659:2;4648:9;4644:18;4631:32;4621:42;;4714:3;4703:9;4699:19;4686:33;4742:18;4734:6;4731:30;4728:50;;;4774:1;4771;4764:12;4728:50;4797:49;4838:7;4829:6;4818:9;4814:22;4797:49;:::i;5065:412::-;5194:3;5232:6;5226:13;5257:1;5267:129;5281:6;5278:1;5275:13;5267:129;;;5379:4;5363:14;;;5359:25;;5353:32;5340:11;;;5333:53;5296:12;5267:129;;;-1:-1:-1;5451:1:9;5415:16;;5440:13;;;-1:-1:-1;5415:16:9;5065:412;-1:-1:-1;5065:412:9:o;5482:225::-;5549:9;;;5570:11;;;5567:134;;;5623:10;5618:3;5614:20;5611:1;5604:31;5658:4;5655:1;5648:15;5686:4;5683:1;5676:15;5712:331;5817:9;5828;5870:8;5858:10;5855:24;5852:44;;;5892:1;5889;5882:12;5852:44;5921:6;5911:8;5908:20;5905:40;;;5941:1;5938;5931:12;5905:40;-1:-1:-1;;5967:23:9;;;6012:25;;;;;-1:-1:-1;5712:331:9:o;6048:255::-;6168:19;;6207:2;6199:11;;6196:101;;;-1:-1:-1;;6268:2:9;6264:12;;;6261:1;6257:20;6253:33;6242:45;6048:255;;;;:::o;6308:337::-;-1:-1:-1;;6429:19:9;;6516:11;;;;6547:2;6539:11;;6536:103;;;6609:2;6605:12;;;;6602:1;6598:20;6594:29;;;6586:38;6582:47;;;;6308:337;-1:-1:-1;;6308:337:9:o
Swarm Source
ipfs://d185ce9ab11312aef744e55ccd39b94a4c554aba63f61da23eb0598ba6643d33
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.