More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,069 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Migrate BIT | 18804663 | 391 days ago | IN | 0 ETH | 0.00079057 | ||||
Migrate BIT | 18804661 | 391 days ago | IN | 0 ETH | 0.0007488 | ||||
Migrate BIT | 18653748 | 412 days ago | IN | 0 ETH | 0.00045436 | ||||
Migrate BIT | 18052285 | 496 days ago | IN | 0 ETH | 0.00021483 | ||||
Migrate BIT | 17952221 | 510 days ago | IN | 0 ETH | 0.00025352 | ||||
Migrate BIT | 17945061 | 511 days ago | IN | 0 ETH | 0.00033629 | ||||
Migrate All BIT | 17942596 | 512 days ago | IN | 0 ETH | 0.00095182 | ||||
Migrate All BIT | 17942594 | 512 days ago | IN | 0 ETH | 0.00098946 | ||||
Migrate All BIT | 17942593 | 512 days ago | IN | 0 ETH | 0.00090842 | ||||
Migrate BIT | 17929199 | 513 days ago | IN | 0 ETH | 0.0029968 | ||||
Migrate BIT | 17929072 | 513 days ago | IN | 0 ETH | 0.00333509 | ||||
Migrate BIT | 17928228 | 514 days ago | IN | 0 ETH | 0.0043321 | ||||
Migrate BIT | 17927484 | 514 days ago | IN | 0 ETH | 0.00253427 | ||||
Migrate BIT | 17927207 | 514 days ago | IN | 0 ETH | 0.00232618 | ||||
Migrate BIT | 17926909 | 514 days ago | IN | 0 ETH | 0.00194079 | ||||
Migrate BIT | 17926720 | 514 days ago | IN | 0 ETH | 0.00166972 | ||||
Migrate BIT | 17926718 | 514 days ago | IN | 0 ETH | 0.00188132 | ||||
Migrate BIT | 17926616 | 514 days ago | IN | 0 ETH | 0.00253145 | ||||
Migrate BIT | 17926557 | 514 days ago | IN | 0 ETH | 0.00256633 | ||||
Migrate BIT | 17926493 | 514 days ago | IN | 0 ETH | 0.00299626 | ||||
Migrate BIT | 17926307 | 514 days ago | IN | 0 ETH | 0.00243142 | ||||
Migrate BIT | 17926198 | 514 days ago | IN | 0 ETH | 0.00174761 | ||||
Migrate BIT | 17925644 | 514 days ago | IN | 0 ETH | 0.00237101 | ||||
Migrate BIT | 17925575 | 514 days ago | IN | 0 ETH | 0.00257888 | ||||
Migrate BIT | 17925497 | 514 days ago | IN | 0 ETH | 0.00242878 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MantleTokenMigrator
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.15; import {ERC20} from "solmate/src/tokens/ERC20.sol"; import {SafeTransferLib} from "solmate/src/utils/SafeTransferLib.sol"; /// @title Mantle Token Migrator /// @author 0xMantle /// @notice Token migration contract for the BIT to MNT token migration contract MantleTokenMigrator { using SafeTransferLib for ERC20; /* ========== STATE VARIABLES ========== */ /// @dev The address of the BIT token contract address public immutable BIT_TOKEN_ADDRESS; /// @dev The address of the MNT token contract address public immutable MNT_TOKEN_ADDRESS; /// @dev The address of the treasury contract that receives defunded tokens address public treasury; /// @dev The address of the owner of the contract /// @notice The owner of the contract is initially the deployer of the contract but will be transferred /// to a multisig wallet immediately after deployment address public owner; /// @dev Boolean indicating if this contract is halted bool public halted; /* ========== EVENTS ========== */ // TokenSwap Events /// @dev Emitted when a user swaps BIT for MNT /// @param to The address of the user that swapped BIT for MNT /// @param amountSwapped The amount of BIT swapped and MNT received event TokensMigrated(address indexed to, uint256 amountSwapped); // Contract State Events /// @dev Emitted when the owner of the contract is changed /// @param previousOwner The address of the previous owner of this contract /// @param newOwner The address of the new owner of this contract event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /// @dev Emitted when the contract is halted /// @param halter The address of the caller that halted this contract event ContractHalted(address indexed halter); /// @dev Emitted when the contract is unhalted /// @param halter The address of the caller that unhalted this contract event ContractUnhalted(address indexed halter); /// @dev Emitted when the treasury address is changed /// @param previousTreasury The address of the previous treasury /// @param newTreasury The address of the new treasury event TreasuryChanged(address indexed previousTreasury, address indexed newTreasury); // Admin Events /// @dev Emitted when non BIT/MNT tokens are swept from the contract by the owner to the recipient address /// @param token The address of the token contract that was swept /// @param recipient The address of the recipient of the swept tokens /// @param amount The amount of tokens swept event TokensSwept(address indexed token, address indexed recipient, uint256 amount); /// @dev Emitted when BIT/MNT tokens are defunded from the contract by the owner to the treasury /// @param defunder The address of the defunder /// @param token The address of the token contract that was defunded /// @param amount The amount of tokens defunded event ContractDefunded(address indexed defunder, address indexed token, uint256 amount); /* ========== ERRORS ========== */ /// @notice Thrown when the caller is not the owner and the function being called uses the {onlyOwner} modifier /// @param caller The address of the caller error MantleTokenMigrator_OnlyOwner(address caller); /// @notice Thrown when the contract is halted and the function being called uses the {onlyWhenNotHalted} modifier error MantleTokenMigrator_OnlyWhenNotHalted(); /// @notice Thrown when the input passed into the {_migrateTokens} function is zero error MantleTokenMigrator_ZeroSwap(); /// @notice Thrown when at least one of the inputs passed into the constructor is a zero value error MantleTokenMigrator_ImproperlyInitialized(); /// @notice Thrown when the {_tokenAddress} passed into the {sweepTokens} function is the BIT or MNT token address /// @param token The address of the token contract error MantleTokenMigrator_SweepNotAllowed(address token); /// @notice Thrown when the {_tokenAddress} passed into the {defundContract} function is NOT the BIT or MNT token address /// @param token The address of the token contract error MantleTokenMigrator_InvalidFundingToken(address token); /// @notice Thrown when the treasury is the zero address error MantleTokenMigrator_InvalidTreasury(address treasury); /* ========== MODIFIERS ========== */ /// @notice Modifier that checks that the caller is the owner of the contract /// @dev Throws {MantleTokenMigrator_OnlyOwner} if the caller is not the owner modifier onlyOwner() { if (msg.sender != owner) revert MantleTokenMigrator_OnlyOwner(msg.sender); _; } /// @notice Modifier that checks that the contract is not halted /// @dev Throws {MantleTokenMigrator_OnlyWhenNotHalted} if the contract is halted modifier onlyWhenNotHalted() { if (halted) revert MantleTokenMigrator_OnlyWhenNotHalted(); _; } /// @notice Initializes the MantleTokenMigrator contract, setting the initial deployer as the contract owner /// @dev _bitTokenAddress, _mntTokenAddress, _tokenConversionNumerator, and _tokenConversionDenominator are immutable: they can only be set once during construction /// @dev the contract is initialized in a halted state /// @dev Requirements: /// - all parameters must be non-zero /// - _bitTokenAddress and _mntTokenAddress are assumed to have the same number of decimals /// @param _bitTokenAddress The address of the BIT token contract /// @param _mntTokenAddress The address of the MNT token contract /// @param _treasury The address of the treasury contract that receives defunded tokens constructor(address _bitTokenAddress, address _mntTokenAddress, address _treasury) { if (_bitTokenAddress == address(0) || _mntTokenAddress == address(0) || _treasury == address(0)) { revert MantleTokenMigrator_ImproperlyInitialized(); } owner = msg.sender; halted = true; BIT_TOKEN_ADDRESS = _bitTokenAddress; MNT_TOKEN_ADDRESS = _mntTokenAddress; treasury = _treasury; } /* ========== TOKEN SWAPPING ========== */ /// @notice Swaps all of the caller's BIT tokens for MNT tokens /// @dev emits a {TokensMigrated} event /// @dev Requirements: /// - The caller must have approved this contract to spend their BIT tokens /// - The caller must have a non-zero balance of BIT tokens /// - The contract must not be halted function migrateAllBIT() external onlyWhenNotHalted { uint256 amount = ERC20(BIT_TOKEN_ADDRESS).balanceOf(msg.sender); _migrateTokens(amount); } /// @notice Swaps a specified amount of the caller's BIT tokens for MNT tokens /// @dev emits a {TokensMigrated} event /// @dev Requirements: /// - The caller must have approved this contract to spend at least {_amount} of their BIT tokens /// - The caller must have a balance of at least {_amount} of BIT tokens /// - The contract must not be halted /// - {_amount} must be non-zero /// @param _amount The amount of BIT tokens to swap function migrateBIT(uint256 _amount) external onlyWhenNotHalted { _migrateTokens(_amount); } /// @notice Internal function that swaps a specified amount of the caller's BIT tokens for MNT tokens /// @dev emits a {TokensMigrated} event /// @dev Requirements: /// - The caller must have approved this contract to spend at least {_amount} of their BIT tokens /// - The caller must have a balance of at least {_amount} of BIT tokens /// - {_amount} must be non-zero /// @param _amount The amount of BIT tokens to swap function _migrateTokens(uint256 _amount) internal { if (_amount == 0) revert MantleTokenMigrator_ZeroSwap(); // transfer user's BIT tokens to this contract ERC20(BIT_TOKEN_ADDRESS).safeTransferFrom(msg.sender, address(this), _amount); // transfer MNT tokens to user, if there are insufficient tokens, in the contract this will revert ERC20(MNT_TOKEN_ADDRESS).safeTransfer(msg.sender, _amount); emit TokensMigrated(msg.sender, _amount); } /* ========== ADMIN UTILS ========== */ // Ownership Functions /// @notice Transfers ownership of the contract to a new address /// @dev emits an {OwnershipTransferred} event /// @dev Requirements: /// - The caller must be the contract owner function transferOwnership(address _newOwner) public onlyOwner { owner = _newOwner; emit OwnershipTransferred(msg.sender, _newOwner); } // Contract State Functions /// @notice Halts the contract, preventing token migrations /// @dev emits a {ContractHalted} event /// @dev Requirements: /// - The caller must be the contract owner function haltContract() public onlyOwner { halted = true; emit ContractHalted(msg.sender); } /// @notice Unhalts the contract, allowing token migrations /// @dev emits a {ContractUnhalted} event /// @dev Requirements: /// - The caller must be the contract owner function unhaltContract() public onlyOwner { halted = false; emit ContractUnhalted(msg.sender); } /// @notice Sets the treasury address /// @dev emits a {TreasuryChanged} event /// @dev Requirements: /// - The caller must be the contract owner function setTreasury(address _treasury) public onlyOwner { if (_treasury == address(0)) { revert MantleTokenMigrator_InvalidTreasury(_treasury); } emit TreasuryChanged(treasury, _treasury); treasury = _treasury; } // Token Management Functions /// @notice Defunds the contract by transferring a specified amount of BIT or MNT tokens to the treasury address /// @dev emits a {ContractDefunded} event /// @dev Requirements: /// - The caller must be the contract owner /// - {_tokenAddress} must be either the BIT or the MNT token address /// - The contract must have a balance of at least {_amount} of {_tokenAddress} tokens /// @param _tokenAddress The address of the token to defund /// @param _amount The amount of tokens to defund function defundContract(address _tokenAddress, uint256 _amount) public onlyOwner { if (_tokenAddress != BIT_TOKEN_ADDRESS && _tokenAddress != MNT_TOKEN_ADDRESS) { revert MantleTokenMigrator_InvalidFundingToken(_tokenAddress); } // we can only defund BIT or MNT into the predefined treasury address ERC20(_tokenAddress).safeTransfer(treasury, _amount); emit ContractDefunded(treasury, _tokenAddress, _amount); } /// @notice Sweeps a specified amount of tokens to an arbitrary address /// @dev emits a {TokensSwept} event /// @dev Requirements: /// - The caller must be the contract owner /// - {_tokenAddress} must not the BIT or the MNT token address /// - The contract must have a balance of at least {_amount} of {_tokenAddress} tokens /// @param _tokenAddress The address of the token to sweep /// @param _recipient The address to sweep the tokens to /// @param _amount The amount of tokens to sweep function sweepTokens(address _tokenAddress, address _recipient, uint256 _amount) public onlyOwner { // we can only sweep tokens that are not BIT or MNT to an arbitrary addres if ((_tokenAddress == BIT_TOKEN_ADDRESS) || (_tokenAddress == MNT_TOKEN_ADDRESS)) { revert MantleTokenMigrator_SweepNotAllowed(_tokenAddress); } ERC20(_tokenAddress).safeTransfer(_recipient, _amount); emit TokensSwept(_tokenAddress, _recipient, _amount); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; import {ERC20} from "../tokens/ERC20.sol"; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), from) // Append the "from" argument. mstore(add(freeMemoryPointer, 36), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) ) } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), to) // Append the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. success := and( // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data. or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize())), // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. // Counterintuitively, this call must be positioned second to the or() call in the // surrounding and() call or else returndatasize() will be zero during the computation. call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) ) } require(success, "APPROVE_FAILED"); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_bitTokenAddress","type":"address"},{"internalType":"address","name":"_mntTokenAddress","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MantleTokenMigrator_ImproperlyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"MantleTokenMigrator_InvalidFundingToken","type":"error"},{"inputs":[{"internalType":"address","name":"treasury","type":"address"}],"name":"MantleTokenMigrator_InvalidTreasury","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"MantleTokenMigrator_OnlyOwner","type":"error"},{"inputs":[],"name":"MantleTokenMigrator_OnlyWhenNotHalted","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"MantleTokenMigrator_SweepNotAllowed","type":"error"},{"inputs":[],"name":"MantleTokenMigrator_ZeroSwap","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"defunder","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ContractDefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"halter","type":"address"}],"name":"ContractHalted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"halter","type":"address"}],"name":"ContractUnhalted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSwapped","type":"uint256"}],"name":"TokensMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTreasury","type":"address"},{"indexed":true,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryChanged","type":"event"},{"inputs":[],"name":"BIT_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MNT_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"defundContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"haltContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"halted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrateAllBIT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"migrateBIT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sweepTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unhaltContract","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b506040516200163138038062001631833981810160405281019062000037919062000285565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806200009f5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80620000d75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156200010f576040517fabf2a69500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060146101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620002e1565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200024d8262000220565b9050919050565b6200025f8162000240565b81146200026b57600080fd5b50565b6000815190506200027f8162000254565b92915050565b600080600060608486031215620002a157620002a06200021b565b5b6000620002b1868287016200026e565b9350506020620002c4868287016200026e565b9250506040620002d7868287016200026e565b9150509250925092565b60805160a0516112f9620003386000396000818161034f0152818161045a015281816107810152610e5401526000818161021601528181610405015281816105f00152818161072a0152610e0801526112f96000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638e65b3831161008c578063b9b8af0b11610066578063b9b8af0b146101a2578063f0f44260146101c0578063f2fde38b146101dc578063f5720c4a146101f8576100cf565b80638e65b383146101725780639843d1c01461017c578063a0c0a98114610198576100cf565b806320928eda146100d45780636041bbe1146100f257806361d027b3146100fc5780636f5949aa1461011a5780638b6ca32c146101385780638da5cb5b14610154575b600080fd5b6100dc610214565b6040516100e99190610fc9565b60405180910390f35b6100fa610238565b005b610104610329565b6040516101119190610fc9565b60405180910390f35b61012261034d565b60405161012f9190610fc9565b60405180910390f35b610152600480360381019061014d919061104b565b610371565b005b61015c61057f565b6040516101699190610fc9565b60405180910390f35b61017a6105a5565b005b6101966004803603810190610191919061109e565b610696565b005b6101a06108e6565b005b6101aa6109d8565b6040516101b791906110f9565b60405180910390f35b6101da60048036038101906101d59190611114565b6109eb565b005b6101f660048036038101906101f19190611114565b610bab565b005b610212600480360381019061020d9190611141565b610cdb565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102ca57336040517f7a9022e10000000000000000000000000000000000000000000000000000000081526004016102c19190610fc9565b60405180910390fd5b60018060146101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f6e1f55f40740bb867f895786e5eb43b6cf4252b6d799b4fe46c98f8e55b0d2e260405160405180910390a2565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461040357336040517f7a9022e10000000000000000000000000000000000000000000000000000000081526004016103fa9190610fc9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806104a857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156104ea57826040517fbcdd3a2e0000000000000000000000000000000000000000000000000000000081526004016104e19190610fc9565b60405180910390fd5b61051582828573ffffffffffffffffffffffffffffffffffffffff16610d2e9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fd092d7fceb5ea5a962639fcc27a7bb315e7637e699e3b108cd570c38c758430083604051610572919061117d565b60405180910390a3505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff16156105ec576040517f16ffb99d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016106479190610fc9565b602060405180830381865afa158015610664573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068891906111ad565b905061069381610dc6565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461072857336040517f7a9022e100000000000000000000000000000000000000000000000000000000815260040161071f9190610fc9565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156107d057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561081257816040517fa37879940000000000000000000000000000000000000000000000000000000081526004016108099190610fc9565b60405180910390fd5b61085d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16610d2e9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2f631ed25e9466ee2a68047d23fdf75c6f52356252725d1286150e8842597d7d836040516108da919061117d565b60405180910390a35050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097857336040517f7a9022e100000000000000000000000000000000000000000000000000000000815260040161096f9190610fc9565b60405180910390fd5b6000600160146101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167fe6a38c17b992afcaee76437ed3019e174719c8e7b94d53c8b2a2851323d3955660405160405180910390a2565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a7d57336040517f7a9022e1000000000000000000000000000000000000000000000000000000008152600401610a749190610fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610aee57806040517f5b24187d000000000000000000000000000000000000000000000000000000008152600401610ae59190610fc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8c3aa5f43a388513435861bf27dfad7829cd248696fed367c62d441f6295449660405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3d57336040517f7a9022e1000000000000000000000000000000000000000000000000000000008152600401610c349190610fc9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600160149054906101000a900460ff1615610d22576040517f16ffb99d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2b81610dc6565b50565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790611237565b60405180910390fd5b50505050565b60008103610e00576040517f9df281a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4d3330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610ee9909392919063ffffffff16565b610e9833827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d2e9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f2558d4091fc8e966ac64668ecbe596974579c9f0e5b2e11d94d1469934ab5fd882604051610ede919061117d565b60405180910390a250565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f78906112a3565b60405180910390fd5b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fb382610f88565b9050919050565b610fc381610fa8565b82525050565b6000602082019050610fde6000830184610fba565b92915050565b600080fd5b610ff281610fa8565b8114610ffd57600080fd5b50565b60008135905061100f81610fe9565b92915050565b6000819050919050565b61102881611015565b811461103357600080fd5b50565b6000813590506110458161101f565b92915050565b60008060006060848603121561106457611063610fe4565b5b600061107286828701611000565b935050602061108386828701611000565b925050604061109486828701611036565b9150509250925092565b600080604083850312156110b5576110b4610fe4565b5b60006110c385828601611000565b92505060206110d485828601611036565b9150509250929050565b60008115159050919050565b6110f3816110de565b82525050565b600060208201905061110e60008301846110ea565b92915050565b60006020828403121561112a57611129610fe4565b5b600061113884828501611000565b91505092915050565b60006020828403121561115757611156610fe4565b5b600061116584828501611036565b91505092915050565b61117781611015565b82525050565b6000602082019050611192600083018461116e565b92915050565b6000815190506111a78161101f565b92915050565b6000602082840312156111c3576111c2610fe4565b5b60006111d184828501611198565b91505092915050565b600082825260208201905092915050565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b6000611221600f836111da565b915061122c826111eb565b602082019050919050565b6000602082019050818103600083015261125081611214565b9050919050565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b600061128d6014836111da565b915061129882611257565b602082019050919050565b600060208201905081810360008301526112bc81611280565b905091905056fea2646970667358221220e35ba4378473e13fd707925dda4195414cdc3434eb387e56e946c254ea966fec64736f6c634300080f00330000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c50000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf3540000000000000000000000009deaa906829d8cf05ff1f24663ad553cb90bf241
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638e65b3831161008c578063b9b8af0b11610066578063b9b8af0b146101a2578063f0f44260146101c0578063f2fde38b146101dc578063f5720c4a146101f8576100cf565b80638e65b383146101725780639843d1c01461017c578063a0c0a98114610198576100cf565b806320928eda146100d45780636041bbe1146100f257806361d027b3146100fc5780636f5949aa1461011a5780638b6ca32c146101385780638da5cb5b14610154575b600080fd5b6100dc610214565b6040516100e99190610fc9565b60405180910390f35b6100fa610238565b005b610104610329565b6040516101119190610fc9565b60405180910390f35b61012261034d565b60405161012f9190610fc9565b60405180910390f35b610152600480360381019061014d919061104b565b610371565b005b61015c61057f565b6040516101699190610fc9565b60405180910390f35b61017a6105a5565b005b6101966004803603810190610191919061109e565b610696565b005b6101a06108e6565b005b6101aa6109d8565b6040516101b791906110f9565b60405180910390f35b6101da60048036038101906101d59190611114565b6109eb565b005b6101f660048036038101906101f19190611114565b610bab565b005b610212600480360381019061020d9190611141565b610cdb565b005b7f0000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c581565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102ca57336040517f7a9022e10000000000000000000000000000000000000000000000000000000081526004016102c19190610fc9565b60405180910390fd5b60018060146101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f6e1f55f40740bb867f895786e5eb43b6cf4252b6d799b4fe46c98f8e55b0d2e260405160405180910390a2565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf35481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461040357336040517f7a9022e10000000000000000000000000000000000000000000000000000000081526004016103fa9190610fc9565b60405180910390fd5b7f0000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806104a857507f0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf35473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156104ea57826040517fbcdd3a2e0000000000000000000000000000000000000000000000000000000081526004016104e19190610fc9565b60405180910390fd5b61051582828573ffffffffffffffffffffffffffffffffffffffff16610d2e9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fd092d7fceb5ea5a962639fcc27a7bb315e7637e699e3b108cd570c38c758430083604051610572919061117d565b60405180910390a3505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160149054906101000a900460ff16156105ec576040517f16ffb99d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f0000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c573ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016106479190610fc9565b602060405180830381865afa158015610664573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068891906111ad565b905061069381610dc6565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461072857336040517f7a9022e100000000000000000000000000000000000000000000000000000000815260040161071f9190610fc9565b60405180910390fd5b7f0000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156107d057507f0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf35473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561081257816040517fa37879940000000000000000000000000000000000000000000000000000000081526004016108099190610fc9565b60405180910390fd5b61085d60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16610d2e9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2f631ed25e9466ee2a68047d23fdf75c6f52356252725d1286150e8842597d7d836040516108da919061117d565b60405180910390a35050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097857336040517f7a9022e100000000000000000000000000000000000000000000000000000000815260040161096f9190610fc9565b60405180910390fd5b6000600160146101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167fe6a38c17b992afcaee76437ed3019e174719c8e7b94d53c8b2a2851323d3955660405160405180910390a2565b600160149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a7d57336040517f7a9022e1000000000000000000000000000000000000000000000000000000008152600401610a749190610fc9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610aee57806040517f5b24187d000000000000000000000000000000000000000000000000000000008152600401610ae59190610fc9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8c3aa5f43a388513435861bf27dfad7829cd248696fed367c62d441f6295449660405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3d57336040517f7a9022e1000000000000000000000000000000000000000000000000000000008152600401610c349190610fc9565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600160149054906101000a900460ff1615610d22576040517f16ffb99d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2b81610dc6565b50565b60006040517fa9059cbb000000000000000000000000000000000000000000000000000000008152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790611237565b60405180910390fd5b50505050565b60008103610e00576040517f9df281a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4d3330837f0000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c573ffffffffffffffffffffffffffffffffffffffff16610ee9909392919063ffffffff16565b610e9833827f0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf35473ffffffffffffffffffffffffffffffffffffffff16610d2e9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f2558d4091fc8e966ac64668ecbe596974579c9f0e5b2e11d94d1469934ab5fd882604051610ede919061117d565b60405180910390a250565b60006040517f23b872dd0000000000000000000000000000000000000000000000000000000081528460048201528360248201528260448201526020600060648360008a5af13d15601f3d1160016000511416171691505080610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f78906112a3565b60405180910390fd5b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610fb382610f88565b9050919050565b610fc381610fa8565b82525050565b6000602082019050610fde6000830184610fba565b92915050565b600080fd5b610ff281610fa8565b8114610ffd57600080fd5b50565b60008135905061100f81610fe9565b92915050565b6000819050919050565b61102881611015565b811461103357600080fd5b50565b6000813590506110458161101f565b92915050565b60008060006060848603121561106457611063610fe4565b5b600061107286828701611000565b935050602061108386828701611000565b925050604061109486828701611036565b9150509250925092565b600080604083850312156110b5576110b4610fe4565b5b60006110c385828601611000565b92505060206110d485828601611036565b9150509250929050565b60008115159050919050565b6110f3816110de565b82525050565b600060208201905061110e60008301846110ea565b92915050565b60006020828403121561112a57611129610fe4565b5b600061113884828501611000565b91505092915050565b60006020828403121561115757611156610fe4565b5b600061116584828501611036565b91505092915050565b61117781611015565b82525050565b6000602082019050611192600083018461116e565b92915050565b6000815190506111a78161101f565b92915050565b6000602082840312156111c3576111c2610fe4565b5b60006111d184828501611198565b91505092915050565b600082825260208201905092915050565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b6000611221600f836111da565b915061122c826111eb565b602082019050919050565b6000602082019050818103600083015261125081611214565b9050919050565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b600061128d6014836111da565b915061129882611257565b602082019050919050565b600060208201905081810360008301526112bc81611280565b905091905056fea2646970667358221220e35ba4378473e13fd707925dda4195414cdc3434eb387e56e946c254ea966fec64736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c50000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf3540000000000000000000000009deaa906829d8cf05ff1f24663ad553cb90bf241
-----Decoded View---------------
Arg [0] : _bitTokenAddress (address): 0x1A4b46696b2bB4794Eb3D4c26f1c55F9170fa4C5
Arg [1] : _mntTokenAddress (address): 0x3c3a81e81dc49A522A592e7622A7E711c06bf354
Arg [2] : _treasury (address): 0x9deAA906829D8cf05ff1f24663aD553cb90bF241
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001a4b46696b2bb4794eb3d4c26f1c55f9170fa4c5
Arg [1] : 0000000000000000000000003c3a81e81dc49a522a592e7622a7e711c06bf354
Arg [2] : 0000000000000000000000009deaa906829d8cf05ff1f24663ad553cb90bf241
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.