Contract
0xF96149e31c3af9650d209C5Fe26A9b06C5BC91D4
1
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xb71c01475fadf7ad51a5c6cd469191873e3fb32f6950106e20b563b21244c4de | 0x60e06040 | 43756818 | 117 days 11 hrs ago | 0xf87bc5535602077d340806d71f805ea9907a843d | IN | Contract Creation | 0 ETH | 0.00043956 |
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xCaF661885a702F88280e2c4b8d1B9cf77Dc4D4da
Contract Name:
TridentSushiRollCP
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; import "../abstract/SelfPermit.sol"; import "../abstract/Multicall.sol"; import "../interfaces/IUniswapV2Minimal.sol"; import "../interfaces/IBentoBoxMinimal.sol"; import "../interfaces/ITridentRouter.sol"; import "../interfaces/IMasterDeployer.sol"; import "../interfaces/IPoolFactory.sol"; import "../interfaces/IPool.sol"; import "../interfaces/IConstantProductPool.sol"; /// @notice Liquidity migrator from UniV2 style pool to Trident Constant product pool. contract TridentSushiRollCP is SelfPermit, Multicall { error MinimumOutput(); IBentoBoxMinimal public immutable bentoBox; IPoolFactory public immutable poolFactoryCP; IMasterDeployer public immutable masterDeployer; constructor( IBentoBoxMinimal _bentoBox, IPoolFactory _poolFactoryCP, IMasterDeployer _masterDeployer ) { bentoBox = _bentoBox; poolFactoryCP = _poolFactoryCP; masterDeployer = _masterDeployer; } /** @notice Function to migrate existing Sushiswap or other Uniswap V2 style pools to Trident. @param pair Uniswap V2 style liquidity pool address. @param amount Liquidity amount (Lp token balance) to be migrated. @param swapFee Swap fee of the Trident CP pool we are migrating into. @param twapSupport Whether the Trident CP pool we are migrating into supports twap oracles. @param minToken0Received Slippage protection for removing liquidity from a UniV2 style pool. @param minToken1Received Slippage protection for removing liquidity from a UniV2 style pool. @param minLpReceived Slippage protection for minting liquidity on the Trident CP pool. @dev If the pool with the current conditions doesn't exist it will be deployed. */ function migrateLegacyToCP( IUniswapV2Minimal pair, uint256 amount, uint256 swapFee, bool twapSupport, uint256 minToken0Received, uint256 minToken1Received, uint256 minLpReceived ) external returns (uint256 liquidity) { address token0 = pair.token0(); address token1 = pair.token1(); bytes memory poolData = abi.encode(token0, token1, swapFee, twapSupport); address tridentPool = poolFactoryCP.configAddress(keccak256(poolData)); if (tridentPool == address(0)) { tridentPool = masterDeployer.deployPool(address(poolFactoryCP), poolData); } pair.transferFrom(msg.sender, address(pair), amount); (uint256 amount0, uint256 amount1) = pair.burn(address(bentoBox)); if (amount0 < minToken0Received || amount1 < minToken1Received) revert MinimumOutput(); bentoBox.deposit(token0, address(bentoBox), tridentPool, amount0, 0); bentoBox.deposit(token1, address(bentoBox), tridentPool, amount1, 0); liquidity = IPool(tridentPool).mint(abi.encode(msg.sender)); if (liquidity < minLpReceived) revert MinimumOutput(); } /** @notice Function to migrate betewwn Trident CP pools with different fee / twap settings. @param currentPool Trident CP pool address we want to migrate from. Can be form an outdated CP factory. @param amount Liquidity amount (Lp token balance) to be migrated. @param swapFee Swap fee of the Trident CP pool we are migrating into. @param twapSupport Whether the Trident CP pool we are migrating into supports twap oracles. @param minToken0Received Slippage protection for removing liquidity. Values are in BentoBox shares. @param minToken1Received Slippage protection for removing liquidity. Values are in BentoBox shares. @param minLpReceived Slippage protection for minting liquidity on the Trident CP pool. @dev If the pool with the current conditions doesn't exist it will be deployed. */ function migrateCP( IConstantProductPool currentPool, uint256 amount, uint256 swapFee, bool twapSupport, uint256 minToken0Received, uint256 minToken1Received, uint256 minLpReceived ) external returns (uint256 liquidity) { address[] memory tokens = currentPool.getAssets(); bytes memory newPoolData = abi.encode(tokens[0], tokens[1], swapFee, twapSupport); address newPool = poolFactoryCP.configAddress(keccak256(newPoolData)); if (newPool == address(0)) { newPool = masterDeployer.deployPool(address(poolFactoryCP), newPoolData); } currentPool.transferFrom(msg.sender, address(currentPool), amount); IPool.TokenAmount[] memory tokenAmounts = currentPool.burn(abi.encode(newPool, false)); (uint256 amount0, uint256 amount1) = (tokenAmounts[0].amount, tokenAmounts[1].amount); if (amount0 < minToken0Received || amount1 < minToken1Received) revert MinimumOutput(); liquidity = IPool(newPool).mint(abi.encode(msg.sender)); if (liquidity < minLpReceived) revert MinimumOutput(); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol"; import "../interfaces/IERC20PermitAllowed.sol"; abstract contract SelfPermit { function selfPermit( address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public payable { IERC20Permit(token).permit(msg.sender, address(this), value, deadline, v, r, s); } function selfPermitIfNecessary( address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external payable { if (IERC20(token).allowance(msg.sender, address(this)) < value) selfPermit(token, value, deadline, v, r, s); } function selfPermitAllowed( address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) public payable { IERC20PermitAllowed(token).permit(msg.sender, address(this), nonce, expiry, true, v, r, s); } function selfPermitAllowedIfNecessary( address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s ) external payable { if (IERC20(token).allowance(msg.sender, address(this)) < type(uint256).max) selfPermitAllowed(token, nonce, expiry, v, r, s); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; /// @notice Helper utility that enables calling multiple local methods in a single call. /// @author Modified from Uniswap (https://github.com/Uniswap/v3-periphery/blob/main/contracts/base/Multicall.sol) /// License-Identifier: GPL-2.0-or-later abstract contract Multicall { function multicall(bytes[] calldata data) public payable returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i; i < data.length;) { (bool success, bytes memory result) = address(this).delegatecall(data[i]); if (!success) { // Next 5 lines from https://ethereum.stackexchange.com/a/83577 if (result.length < 68) revert(); assembly { result := add(result, 0x04) } revert(abi.decode(result, (string))); } results[i] = result; // cannot realistically overflow on human timescales unchecked { ++i; } } } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @notice Minimal Uniswap V2 LP interface. interface IUniswapV2Minimal is IERC20 { function token0() external view returns (address); function token1() external view returns (address); function burn(address to) external returns (uint256 amount0, uint256 amount1); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; import "../libraries/RebaseLibrary.sol"; /// @notice Minimal BentoBox vault interface. /// @dev `token` is aliased as `address` from `IERC20` for simplicity. interface IBentoBoxMinimal { /// @notice Balance per ERC-20 token per account in shares. function balanceOf(address, address) external view returns (uint256); /// @dev Helper function to represent an `amount` of `token` in shares. /// @param token The ERC-20 token. /// @param amount The `token` amount. /// @param roundUp If the result `share` should be rounded up. /// @return share The token amount represented in shares. function toShare( address token, uint256 amount, bool roundUp ) external view returns (uint256 share); /// @dev Helper function to represent shares back into the `token` amount. /// @param token The ERC-20 token. /// @param share The amount of shares. /// @param roundUp If the result should be rounded up. /// @return amount The share amount back into native representation. function toAmount( address token, uint256 share, bool roundUp ) external view returns (uint256 amount); /// @notice Registers this contract so that users can approve it for BentoBox. function registerProtocol() external; /// @notice Deposit an amount of `token` represented in either `amount` or `share`. /// @param token The ERC-20 token to deposit. /// @param from which account to pull the tokens. /// @param to which account to push the tokens. /// @param amount Token amount in native representation to deposit. /// @param share Token amount represented in shares to deposit. Takes precedence over `amount`. /// @return amountOut The amount deposited. /// @return shareOut The deposited amount represented in shares. function deposit( address token, address from, address to, uint256 amount, uint256 share ) external payable returns (uint256 amountOut, uint256 shareOut); /// @notice Withdraws an amount of `token` from a user account. /// @param token_ The ERC-20 token to withdraw. /// @param from which user to pull the tokens. /// @param to which user to push the tokens. /// @param amount of tokens. Either one of `amount` or `share` needs to be supplied. /// @param share Like above, but `share` takes precedence over `amount`. function withdraw( address token_, address from, address to, uint256 amount, uint256 share ) external returns (uint256 amountOut, uint256 shareOut); /// @notice Transfer shares from a user account to another one. /// @param token The ERC-20 token to transfer. /// @param from which user to pull the tokens. /// @param to which user to push the tokens. /// @param share The amount of `token` in shares. function transfer( address token, address from, address to, uint256 share ) external; /// @dev Reads the Rebase `totals`from storage for a given token function totals(address token) external view returns (Rebase memory total); /// @dev Approves users' BentoBox assets to a "master" contract. function setMasterContractApproval( address user, address masterContract, bool approved, uint8 v, bytes32 r, bytes32 s ) external; function harvest( address token, bool balance, uint256 maxChangeAmount ) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; /// @notice Trident pool router interface. interface ITridentRouter { struct Path { address pool; bytes data; } struct ExactInputSingleParams { uint256 amountIn; uint256 amountOutMinimum; address pool; address tokenIn; bytes data; } struct ExactInputParams { address tokenIn; uint256 amountIn; uint256 amountOutMinimum; Path[] path; } struct TokenInput { address token; bool native; uint256 amount; } struct InitialPath { address tokenIn; address pool; bool native; uint256 amount; bytes data; } struct PercentagePath { address tokenIn; address pool; uint64 balancePercentage; // Multiplied by 10^6. 100% = 100_000_000 bytes data; } struct Output { address token; address to; bool unwrapBento; uint256 minAmount; } struct ComplexPathParams { InitialPath[] initialPath; PercentagePath[] percentagePath; Output[] output; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; /// @notice Trident pool deployer interface. interface IMasterDeployer { function barFee() external view returns (uint256); function barFeeTo() external view returns (address); function bento() external view returns (address); function migrator() external view returns (address); function pools(address pool) external view returns (bool); function deployPool(address factory, bytes calldata deployData) external returns (address); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; /// @notice Trident pool deployment interface. interface IPoolFactory { function deployPool(bytes calldata _deployData) external returns (address pool); function configAddress(bytes32 data) external returns (address pool); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.5.0; pragma experimental ABIEncoderV2; /// @notice Trident pool interface. interface IPool { /// @notice Executes a swap from one token to another. /// @dev The input tokens must've already been sent to the pool. /// @param data ABI-encoded params that the pool requires. /// @return finalAmountOut The amount of output tokens that were sent to the user. function swap(bytes calldata data) external returns (uint256 finalAmountOut); /// @notice Executes a swap from one token to another with a callback. /// @dev This function allows borrowing the output tokens and sending the input tokens in the callback. /// @param data ABI-encoded params that the pool requires. /// @return finalAmountOut The amount of output tokens that were sent to the user. function flashSwap(bytes calldata data) external returns (uint256 finalAmountOut); /// @notice Mints liquidity tokens. /// @param data ABI-encoded params that the pool requires. /// @return liquidity The amount of liquidity tokens that were minted for the user. function mint(bytes calldata data) external returns (uint256 liquidity); /// @notice Burns liquidity tokens. /// @dev The input LP tokens must've already been sent to the pool. /// @param data ABI-encoded params that the pool requires. /// @return withdrawnAmounts The amount of various output tokens that were sent to the user. function burn(bytes calldata data) external returns (TokenAmount[] memory withdrawnAmounts); /// @notice Burns liquidity tokens for a single output token. /// @dev The input LP tokens must've already been sent to the pool. /// @param data ABI-encoded params that the pool requires. /// @return amountOut The amount of output tokens that were sent to the user. function burnSingle(bytes calldata data) external returns (uint256 amountOut); /// @return A unique identifier for the pool type. function poolIdentifier() external pure returns (bytes32); /// @return An array of tokens supported by the pool. function getAssets() external view returns (address[] memory); /// @notice Simulates a trade and returns the expected output. /// @dev The pool does not need to include a trade simulator directly in itself - it can use a library. /// @param data ABI-encoded params that the pool requires. /// @return finalAmountOut The amount of output tokens that will be sent to the user if the trade is executed. function getAmountOut(bytes calldata data) external view returns (uint256 finalAmountOut); /// @notice Simulates a trade and returns the expected output. /// @dev The pool does not need to include a trade simulator directly in itself - it can use a library. /// @param data ABI-encoded params that the pool requires. /// @return finalAmountIn The amount of input tokens that are required from the user if the trade is executed. function getAmountIn(bytes calldata data) external view returns (uint256 finalAmountIn); /// @dev This event must be emitted on all swaps. event Swap(address indexed recipient, address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOut); /// @dev This struct frames output tokens for burns. struct TokenAmount { address token; uint256 amount; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IPool.sol"; interface IConstantProductPool is IPool, IERC20 { function getNativeReserves() external view returns ( uint256 _nativeReserve0, uint256 _nativeReserve1, uint32 ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0; interface IERC20PermitAllowed { function permit( address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s ) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8; struct Rebase { uint128 elastic; uint128 base; } /// @notice A rebasing library library RebaseLibrary { /// @notice Calculates the base value in relationship to `elastic` and `total`. function toBase(Rebase memory total, uint256 elastic) internal pure returns (uint256 base) { if (total.elastic == 0) { base = elastic; } else { base = (elastic * total.base) / total.elastic; } } /// @notice Calculates the elastic value in relationship to `base` and `total`. function toElastic(Rebase memory total, uint256 base) internal pure returns (uint256 elastic) { if (total.base == 0) { elastic = base; } else { elastic = (base * total.elastic) / total.base; } } }
{ "optimizer": { "enabled": true, "runs": 999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
[{"inputs":[{"internalType":"contract IBentoBoxMinimal","name":"_bentoBox","type":"address"},{"internalType":"contract IPoolFactory","name":"_poolFactoryCP","type":"address"},{"internalType":"contract IMasterDeployer","name":"_masterDeployer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MinimumOutput","type":"error"},{"inputs":[],"name":"bentoBox","outputs":[{"internalType":"contract IBentoBoxMinimal","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterDeployer","outputs":[{"internalType":"contract IMasterDeployer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IConstantProductPool","name":"currentPool","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"bool","name":"twapSupport","type":"bool"},{"internalType":"uint256","name":"minToken0Received","type":"uint256"},{"internalType":"uint256","name":"minToken1Received","type":"uint256"},{"internalType":"uint256","name":"minLpReceived","type":"uint256"}],"name":"migrateCP","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Minimal","name":"pair","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"bool","name":"twapSupport","type":"bool"},{"internalType":"uint256","name":"minToken0Received","type":"uint256"},{"internalType":"uint256","name":"minToken1Received","type":"uint256"},{"internalType":"uint256","name":"minLpReceived","type":"uint256"}],"name":"migrateLegacyToCP","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"poolFactoryCP","outputs":[{"internalType":"contract IPoolFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowedIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitIfNecessary","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162001ab538038062001ab583398101604081905262000034916200006b565b6001600160a01b0392831660805290821660a0521660c052620000bf565b6001600160a01b03811681146200006857600080fd5b50565b6000806000606084860312156200008157600080fd5b83516200008e8162000052565b6020850151909350620000a18162000052565b6040850151909250620000b48162000052565b809150509250925092565b60805160a05160c0516119876200012e60003960008181610203015281816105480152610b360152600081816101cf0152818161046c0152818161057501528181610a5a0152610b6301526000818161013001528181610caf01528181610db50152610e8601526119876000f3fe6080604052600436106100b15760003560e01c8063ac9650d811610069578063c98ce1c91161004e578063c98ce1c9146101bd578063cf58879a146101f1578063f3995c671461022557600080fd5b8063ac9650d81461018a578063c2e3140a146101aa57600080fd5b806354b6ee591161009a57806354b6ee59146100fe5780636b2ace871461011e578063a4a78f0c1461017757600080fd5b80634659a494146100b6578063543d0ee9146100cb575b600080fd5b6100c96100c43660046112ca565b610238565b005b3480156100d757600080fd5b506100eb6100e636600461133a565b6102f3565b6040519081526020015b60405180910390f35b34801561010a57600080fd5b506100eb61011936600461133a565b6108ce565b34801561012a57600080fd5b506101527f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f5565b6100c96101853660046112ca565b610f40565b61019d61019836600461139f565b611012565b6040516100f5919061148e565b6100c96101b83660046112ca565b611182565b3480156101c957600080fd5b506101527f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fd57600080fd5b506101527f000000000000000000000000000000000000000000000000000000000000000081565b6100c96102333660046112ca565b611228565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e4810182905273ffffffffffffffffffffffffffffffffffffffff871690638fcbaf0c90610104015b600060405180830381600087803b1580156102d357600080fd5b505af11580156102e7573d6000803e3d6000fd5b50505050505050505050565b6000808873ffffffffffffffffffffffffffffffffffffffff166367e4ac2c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610341573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261038791908101906115d9565b905060008160008151811061039e5761039e611678565b6020026020010151826001815181106103b9576103b9611678565b60200260200101518989604051602001610407949392919073ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152901515606082015260800190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160208201207ff6ab6d99000000000000000000000000000000000000000000000000000000008352600483015291506000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063f6ab6d99906024016020604051808303816000875af11580156104ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ee91906116a7565b905073ffffffffffffffffffffffffffffffffffffffff81166105e5576040517f250558dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063250558dc9061059f907f00000000000000000000000000000000000000000000000000000000000000009086906004016116cb565b6020604051808303816000875af11580156105be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e291906116a7565b90505b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8c1660248201819052604482018c9052906323b872dd906064016020604051808303816000875af115801561065f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106839190611702565b506040805173ffffffffffffffffffffffffffffffffffffffff8381166020830152600082840181905283518084038501815260608401948590527f2a07b6c70000000000000000000000000000000000000000000000000000000090945292908e1691632a07b6c7916106f99160640161171f565b6000604051808303816000875af1158015610718573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261075e9190810190611732565b90506000808260008151811061077657610776611678565b6020026020010151602001518360018151811061079557610795611678565b60200260200101516020015191509150898210806107b257508881105b156107e9576040517f9b9d48e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805133602082015273ffffffffffffffffffffffffffffffffffffffff861691637ba0e2e791015b6040516020818303038152906040526040518263ffffffff1660e01b815260040161083e919061171f565b6020604051808303816000875af115801561085d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088191906117e6565b9650878710156108bd576040517f9b9d48e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050979650505050505050565b6000808873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094091906116a7565b905060008973ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906116a7565b6040805173ffffffffffffffffffffffffffffffffffffffff8086166020830152831691810191909152606081018a9052881515608082015290915060009060a001604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160208201207ff6ab6d99000000000000000000000000000000000000000000000000000000008352600483015291506000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063f6ab6d99906024016020604051808303816000875af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc91906116a7565b905073ffffffffffffffffffffffffffffffffffffffff8116610bd3576040517f250558dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063250558dc90610b8d907f00000000000000000000000000000000000000000000000000000000000000009086906004016116cb565b6020604051808303816000875af1158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd091906116a7565b90505b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8d1660248201819052604482018d9052906323b872dd906064016020604051808303816000875af1158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c719190611702565b506040517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260009182918f16906389afcb449060240160408051808303816000875af1158015610d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2891906117ff565b9150915089821080610d3957508881105b15610d70576040517f9b9d48e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f02b9446c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830181905290851660448301526064820184905260006084830152906302b9446c9060a40160408051808303816000875af1158015610e1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3f91906117ff565b50506040517f02b9446c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f000000000000000000000000000000000000000000000000000000000000000081166024830181905290851660448301526064820183905260006084830152906302b9446c9060a40160408051808303816000875af1158015610eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1091906117ff565b50506040805133602082015273ffffffffffffffffffffffffffffffffffffffff851691637ba0e2e79101610813565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523360048201523060248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff691906117e6565b101561100a5761100a868686868686610238565b505050505050565b60608167ffffffffffffffff81111561102d5761102d61150e565b60405190808252806020026020018201604052801561106057816020015b606081526020019060019003908161104b5790505b50905060005b8281101561117b576000803086868581811061108457611084611678565b90506020028101906110969190611823565b6040516110a492919061188f565b600060405180830381855af49150503d80600081146110df576040519150601f19603f3d011682016040523d82523d6000602084013e6110e4565b606091505b509150915081611153576044815110156110fd57600080fd5b60048101905080806020019051810190611117919061189f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a919061171f565b60405180910390fd5b8084848151811061116657611166611678565b60209081029190910101525050600101611066565b5092915050565b6040517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152859073ffffffffffffffffffffffffffffffffffffffff88169063dd62ed3e90604401602060405180830381865afa1580156111f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121891906117e6565b101561100a5761100a8686868686865b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c4810182905273ffffffffffffffffffffffffffffffffffffffff87169063d505accf9060e4016102b9565b73ffffffffffffffffffffffffffffffffffffffff811681146112c757600080fd5b50565b60008060008060008060c087890312156112e357600080fd5b86356112ee816112a5565b95506020870135945060408701359350606087013560ff8116811461131257600080fd5b9598949750929560808101359460a0909101359350915050565b80151581146112c757600080fd5b600080600080600080600060e0888a03121561135557600080fd5b8735611360816112a5565b96506020880135955060408801359450606088013561137e8161132c565b9699959850939660808101359560a0820135955060c0909101359350915050565b600080602083850312156113b257600080fd5b823567ffffffffffffffff808211156113ca57600080fd5b818501915085601f8301126113de57600080fd5b8135818111156113ed57600080fd5b8660208260051b850101111561140257600080fd5b60209290920196919550909350505050565b60005b8381101561142f578181015183820152602001611417565b8381111561143e576000848401525b50505050565b6000815180845261145c816020860160208601611414565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611501577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526114ef858351611444565b945092850192908501906001016114b5565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156115605761156061150e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156115ad576115ad61150e565b604052919050565b600067ffffffffffffffff8211156115cf576115cf61150e565b5060051b60200190565b600060208083850312156115ec57600080fd5b825167ffffffffffffffff81111561160357600080fd5b8301601f8101851361161457600080fd5b8051611627611622826115b5565b611566565b81815260059190911b8201830190838101908783111561164657600080fd5b928401925b8284101561166d57835161165e816112a5565b8252928401929084019061164b565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156116b957600080fd5b81516116c4816112a5565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006116fa6040830184611444565b949350505050565b60006020828403121561171457600080fd5b81516116c48161132c565b6020815260006116c46020830184611444565b6000602080838503121561174557600080fd5b825167ffffffffffffffff81111561175c57600080fd5b8301601f8101851361176d57600080fd5b805161177b611622826115b5565b81815260069190911b8201830190838101908783111561179a57600080fd5b928401925b8284101561166d57604084890312156117b85760008081fd5b6117c061153d565b84516117cb816112a5565b8152848601518682015282526040909301929084019061179f565b6000602082840312156117f857600080fd5b5051919050565b6000806040838503121561181257600080fd5b505080516020909101519092909150565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261185857600080fd5b83018035915067ffffffffffffffff82111561187357600080fd5b60200191503681900382131561188857600080fd5b9250929050565b8183823760009101908152919050565b6000602082840312156118b157600080fd5b815167ffffffffffffffff808211156118c957600080fd5b818401915084601f8301126118dd57600080fd5b8151818111156118ef576118ef61150e565b61192060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611566565b915080825285602082850101111561193757600080fd5b611948816020840160208601611414565b5094935050505056fea26469706673582212200dbb40c5db2ae38e1373d2fa446ad1508eed9a378de75f9f05e554dba1a9829d64736f6c634300080a003300000000000000000000000074c764d41b77dbbb4fe771dab1939b00b146894a000000000000000000000000051715a8665ad070963013a95b004fb77aab00df000000000000000000000000fb39216449db04a1dbab41b7a5ac2a2d4f43b50e
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.