Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
FeeCollector
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.17; import {Ownable} from "../utils/Ownable.sol"; import {ERC20} from "solmate/src/tokens/ERC20.sol"; import {RouterNotRegistered, CallerNotBungeeGateway, TransferFailed} from "../common/BungeeErrors.sol"; import {SafeTransferLib} from "solmate/src/utils/SafeTransferLib.sol"; import {IBungeeGateway} from "../interfaces/IBungeeGateway.sol"; struct FeesLocked { address feeToken; address feeTaker; uint256 amount; } contract FeeCollector is Ownable { using SafeTransferLib for ERC20; IBungeeGateway public immutable BUNGEE_GATEWAY; /// @notice address to identify the native token address public constant NATIVE_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; mapping(address feeToken => mapping(address feeTaker => uint256 amount)) public feeMap; mapping(bytes32 requestHash => FeesLocked feesCollected) public feeLockedMap; constructor(address _owner, address _bungeeGateway) Ownable(_owner) { BUNGEE_GATEWAY = IBungeeGateway(_bungeeGateway); } /** * @notice Register unlocked fee * @param feeTaker address of the fee taker * @param feeAmount amount of the fee * @param feeToken address of the fee token */ function registerFee(address feeTaker, uint256 feeAmount, address feeToken) external { // @todo how to register BungeeGateway and SwapExecutor as router if (!BUNGEE_GATEWAY.isBungeeRouter(msg.sender)) revert RouterNotRegistered(); feeMap[feeToken][feeTaker] = feeMap[feeToken][feeTaker] + feeAmount; } /** * @notice Register locked fee * @dev Only called by registered routers * @dev Locked fees are unlocked via settleFee or refundFee * @param feeTaker address of the fee taker * @param feeAmount amount of the fee * @param feeToken address of the fee token */ function registerFee(address feeTaker, uint256 feeAmount, address feeToken, bytes32 requestHash) external { if (!BUNGEE_GATEWAY.isBungeeRouter(msg.sender)) revert RouterNotRegistered(); feeLockedMap[requestHash] = FeesLocked({feeToken: feeToken, feeTaker: feeTaker, amount: feeAmount}); } /** * @notice Unlocks locked fee * @dev Only called by BungeeGateway * @param requestHash hash of the request */ function settleFee(bytes32 requestHash) external { if (msg.sender != address(BUNGEE_GATEWAY)) revert CallerNotBungeeGateway(); FeesLocked memory lockedFee = feeLockedMap[requestHash]; if (lockedFee.amount > 0) { feeMap[lockedFee.feeToken][lockedFee.feeTaker] = feeMap[lockedFee.feeToken][lockedFee.feeTaker] + lockedFee.amount; delete feeLockedMap[requestHash]; } } /** * @notice Refunds locked fee * @dev Only called by BungeeGateway * @dev Used when request is not fulfilled and is withdrawn by the user * @param requestHash hash of the request * @param to address to refund the fee */ function refundFee(bytes32 requestHash, address to) external { if (msg.sender != address(BUNGEE_GATEWAY)) revert CallerNotBungeeGateway(); FeesLocked memory lockedFee = feeLockedMap[requestHash]; if (lockedFee.amount > 0) { _sendFundsFromContract(lockedFee.feeToken, lockedFee.amount, to); delete feeLockedMap[requestHash]; } } /** * @notice Claim unlocked fee for a fee taker * @param token address of the token * @param feeTaker address of the fee taker */ function claimFee(address token, address feeTaker) external { uint256 claimAmount = feeMap[token][feeTaker]; // Sends funds to fee taker if (claimAmount > 0) { feeMap[token][feeTaker] = 0; _sendFundsFromContract(token, claimAmount, feeTaker); } } /** * @dev send funds to the provided address. * @param token address of the token * @param amount hash of the command. * @param to address, funds will be transferred to this address. */ function _sendFundsFromContract(address token, uint256 amount, address to) internal { /// native token case if (token == NATIVE_TOKEN_ADDRESS) { (bool success, ) = to.call{value: amount, gas: 5000}(""); if (!success) revert TransferFailed(); return; } /// ERC20 case ERC20(token).safeTransfer(to, amount); } /** * @notice send funds to the provided address if stuck, can be called only by owner. * @param token address of the token * @param amount hash of the command. * @param to address, funds will be transferred to this address. */ function rescue(address token, address to, uint256 amount) external onlyOwner { _sendFundsFromContract(token, amount, to); } receive() external payable {} }
// 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); } }
// 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), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. 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), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. 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), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. 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: MIT pragma solidity ^0.8.17; // error MofaSignatureInvalid(); error InsufficientNativeAmount(); error InvalidMultipleNativeTokens(); error FulfilmentChainInvalid(); error RequestAlreadyFulfilled(); error RouterNotRegistered(); error TransferFailed(); error CallerNotBungeeGateway(); error NoExecutionCacheFound(); error ExecutionCacheFailed(); error SwapOutputInsufficient(); error UnsupportedDestinationChainId(); error MinOutputNotMet(); error OnlyOwner(); error OnlyNominee(); error InvalidRequest(); error FulfilmentDeadlineNotMet(); error CallerNotDelegate(); error BungeeSiblingDoesNotExist(); error InvalidMsg(); error NotDelegate(); error RequestProcessed(); error RequestNotProcessed(); error InvalidSwitchboard(); error PromisedAmountNotMet(); error MsgReceiveFailed(); error RouterAlreadyWhitelisted(); error InvalidStake(); error RouterAlreadyRegistered(); error InvalidFulfil(); error InsufficientCapacity(); error ReleaseFundsNotImplemented();
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.17; interface IBungeeGateway { function setWhitelistedReceiver(address receiver, uint256 destinationChainId, address router) external; function getWhitelistedReceiver(address router, uint256 destinationChainId) external view returns (address); function inboundMsgFromSwitchboard(uint8 msgId, uint32 switchboardId, bytes calldata payload) external; function isBungeeRouter(address router) external view returns (bool); function withdrawnRequests(bytes32 requestHash) external view returns (bool); function withdrawRequestOnOrigin(bytes32 requestHash) external; function executeSOR(bytes calldata data) external payable returns (bytes memory); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.17; import {OnlyOwner, OnlyNominee} from "../common/BungeeErrors.sol"; abstract contract Ownable { address private _owner; address private _nominee; event OwnerNominated(address indexed nominee); event OwnerClaimed(address indexed claimer); constructor(address owner_) { _claimOwner(owner_); } modifier onlyOwner() { if (msg.sender != _owner) { revert OnlyOwner(); } _; } function owner() public view returns (address) { return _owner; } function nominee() public view returns (address) { return _nominee; } function nominateOwner(address nominee_) external { if (msg.sender != _owner) { revert OnlyOwner(); } _nominee = nominee_; emit OwnerNominated(_nominee); } function claimOwner() external { if (msg.sender != _nominee) { revert OnlyNominee(); } _claimOwner(msg.sender); } function _claimOwner(address claimer_) internal { _owner = claimer_; _nominee = address(0); emit OwnerClaimed(claimer_); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_bungeeGateway","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CallerNotBungeeGateway","type":"error"},{"inputs":[],"name":"OnlyNominee","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[],"name":"RouterNotRegistered","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"}],"name":"OwnerClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nominee","type":"address"}],"name":"OwnerNominated","type":"event"},{"inputs":[],"name":"BUNGEE_GATEWAY","outputs":[{"internalType":"contract IBungeeGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATIVE_TOKEN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"feeTaker","type":"address"}],"name":"claimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"feeLockedMap","outputs":[{"internalType":"address","name":"feeToken","type":"address"},{"internalType":"address","name":"feeTaker","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"feeToken","type":"address"},{"internalType":"address","name":"feeTaker","type":"address"}],"name":"feeMap","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nominee_","type":"address"}],"name":"nominateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestHash","type":"bytes32"},{"internalType":"address","name":"to","type":"address"}],"name":"refundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeTaker","type":"address"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"address","name":"feeToken","type":"address"}],"name":"registerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeTaker","type":"address"},{"internalType":"uint256","name":"feeAmount","type":"uint256"},{"internalType":"address","name":"feeToken","type":"address"},{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"registerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestHash","type":"bytes32"}],"name":"settleFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051610d39380380610d3983398101604081905261002f916100bb565b816100398161004c565b506001600160a01b0316608052506100ee565b600080546001600160a01b0383166001600160a01b0319918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b80516001600160a01b03811681146100b657600080fd5b919050565b600080604083850312156100ce57600080fd5b6100d78361009f565b91506100e56020840161009f565b90509250929050565b608051610c146101256000396000818161027c01528181610355015281816104fd015281816105f801526107a90152610c146000f3fe6080604052600436106100e15760003560e01c80635b94db271161007f5780638da5cb5b116100595780638da5cb5b1461029e578063d09f5a38146102bc578063df2ebdbb14610302578063eacedbf11461032a57600080fd5b80635b94db271461022a5780636cac65fb1461024a57806370372d851461026a57600080fd5b806320ff430b116100bb57806320ff430b146101b55780633bd1adec146101d5578063404e3d49146101ea57806355af6fa61461020a57600080fd5b80630e206ede146100ed578063111561041461010f57806320f99c0a1461018357600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5061010d610108366004610a2c565b61034a565b005b34801561011b57600080fd5b5061015861012a366004610a2c565b6003602052600090815260409020805460018201546002909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060015b60405180910390f35b34801561018f57600080fd5b506001546001600160a01b03165b6040516001600160a01b03909116815260200161017a565b3480156101c157600080fd5b5061010d6101d0366004610a61565b610477565b3480156101e157600080fd5b5061010d6104b2565b3480156101f657600080fd5b5061010d610205366004610a9d565b6104e8565b34801561021657600080fd5b5061010d610225366004610ad9565b6105ed565b34801561023657600080fd5b5061010d610245366004610b05565b6106c0565b34801561025657600080fd5b5061010d610265366004610b27565b610735565b34801561027657600080fd5b5061019d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102aa57600080fd5b506000546001600160a01b031661019d565b3480156102c857600080fd5b506102f46102d7366004610b27565b600260209081526000928352604080842090915290825290205481565b60405190815260200161017a565b34801561030e57600080fd5b5061019d73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561033657600080fd5b5061010d610345366004610b51565b610794565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461039357604051634556123760e01b815260040160405180910390fd5b600081815260036020908152604091829020825160608101845281546001600160a01b039081168252600183015416928101929092526002015491810182905290156104735760408082015182516001600160a01b039081166000908152600260209081528482208187015190931682529190915291909120546104179190610b95565b81516001600160a01b03908116600090815260026020818152604080842082880151909516845293815283832094909455858252600390935290812080546001600160a01b031990811682556001820180549091169055909101555b5050565b6000546001600160a01b031633146104a257604051635fc483c560e01b815260040160405180910390fd5b6104ad83828461089c565b505050565b6001546001600160a01b031633146104dd57604051637c91ccdd60e01b815260040160405180910390fd5b6104e633610954565b565b604051630f3c4e1b60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e789c3690602401602060405180830381865afa15801561054c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105709190610bbc565b61058d576040516315812c6160e11b815260040160405180910390fd5b6001600160a01b038082166000908152600260209081526040808320938716835292905220546105be908390610b95565b6001600160a01b0391821660009081526002602090815260408083209690941682529490945292209190915550565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063657604051634556123760e01b815260040160405180910390fd5b600082815260036020908152604091829020825160608101845281546001600160a01b039081168252600183015416928101929092526002015491810182905290156104ad5761068f816000015182604001518461089c565b5050600090815260036020526040812080546001600160a01b03199081168255600182018054909116905560020155565b6000546001600160a01b031633146106eb57604051635fc483c560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b6001600160a01b0380831660009081526002602090815260408083209385168352929052205480156104ad576001600160a01b0380841660009081526002602090815260408083209386168352929052908120556104ad83828461089c565b604051630f3c4e1b60e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631e789c3690602401602060405180830381865afa1580156107f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c9190610bbc565b610839576040516315812c6160e11b815260040160405180910390fd5b604080516060810182526001600160a01b03938416815294831660208087019182528683019586526000938452600390529120935184549083166001600160a01b0319918216178555905160018501805491909316911617905551600290910155565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601610940576000816001600160a01b03168361138890604051600060405180830381858888f193505050503d8060008114610913576040519150601f19603f3d011682016040523d82523d6000602084013e610918565b606091505b505090508061093a576040516312171d8360e31b815260040160405180910390fd5b50505050565b6104ad6001600160a01b03841682846109a7565b600080546001600160a01b0383166001600160a01b0319918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061093a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640160405180910390fd5b600060208284031215610a3e57600080fd5b5035919050565b80356001600160a01b0381168114610a5c57600080fd5b919050565b600080600060608486031215610a7657600080fd5b610a7f84610a45565b9250610a8d60208501610a45565b9150604084013590509250925092565b600080600060608486031215610ab257600080fd5b610abb84610a45565b925060208401359150610ad060408501610a45565b90509250925092565b60008060408385031215610aec57600080fd5b82359150610afc60208401610a45565b90509250929050565b600060208284031215610b1757600080fd5b610b2082610a45565b9392505050565b60008060408385031215610b3a57600080fd5b610b4383610a45565b9150610afc60208401610a45565b60008060008060808587031215610b6757600080fd5b610b7085610a45565b935060208501359250610b8560408601610a45565b9396929550929360600135925050565b80820180821115610bb657634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610bce57600080fd5b81518015158114610b2057600080fdfea2646970667358221220a041d48d6cf519ab7701718dd303678b99053cb00dd9e0d558f682f4825ec1c564736f6c63430008130033000000000000000000000000a5acba07788f16b4790fcbb09ca3b7fc8dd053a2000000000000000000000000d26410401cc61a24205a01cc620a73c010fba290
Deployed Bytecode
0x6080604052600436106100e15760003560e01c80635b94db271161007f5780638da5cb5b116100595780638da5cb5b1461029e578063d09f5a38146102bc578063df2ebdbb14610302578063eacedbf11461032a57600080fd5b80635b94db271461022a5780636cac65fb1461024a57806370372d851461026a57600080fd5b806320ff430b116100bb57806320ff430b146101b55780633bd1adec146101d5578063404e3d49146101ea57806355af6fa61461020a57600080fd5b80630e206ede146100ed578063111561041461010f57806320f99c0a1461018357600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5061010d610108366004610a2c565b61034a565b005b34801561011b57600080fd5b5061015861012a366004610a2c565b6003602052600090815260409020805460018201546002909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060015b60405180910390f35b34801561018f57600080fd5b506001546001600160a01b03165b6040516001600160a01b03909116815260200161017a565b3480156101c157600080fd5b5061010d6101d0366004610a61565b610477565b3480156101e157600080fd5b5061010d6104b2565b3480156101f657600080fd5b5061010d610205366004610a9d565b6104e8565b34801561021657600080fd5b5061010d610225366004610ad9565b6105ed565b34801561023657600080fd5b5061010d610245366004610b05565b6106c0565b34801561025657600080fd5b5061010d610265366004610b27565b610735565b34801561027657600080fd5b5061019d7f000000000000000000000000d26410401cc61a24205a01cc620a73c010fba29081565b3480156102aa57600080fd5b506000546001600160a01b031661019d565b3480156102c857600080fd5b506102f46102d7366004610b27565b600260209081526000928352604080842090915290825290205481565b60405190815260200161017a565b34801561030e57600080fd5b5061019d73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b34801561033657600080fd5b5061010d610345366004610b51565b610794565b336001600160a01b037f000000000000000000000000d26410401cc61a24205a01cc620a73c010fba290161461039357604051634556123760e01b815260040160405180910390fd5b600081815260036020908152604091829020825160608101845281546001600160a01b039081168252600183015416928101929092526002015491810182905290156104735760408082015182516001600160a01b039081166000908152600260209081528482208187015190931682529190915291909120546104179190610b95565b81516001600160a01b03908116600090815260026020818152604080842082880151909516845293815283832094909455858252600390935290812080546001600160a01b031990811682556001820180549091169055909101555b5050565b6000546001600160a01b031633146104a257604051635fc483c560e01b815260040160405180910390fd5b6104ad83828461089c565b505050565b6001546001600160a01b031633146104dd57604051637c91ccdd60e01b815260040160405180910390fd5b6104e633610954565b565b604051630f3c4e1b60e11b81523360048201527f000000000000000000000000d26410401cc61a24205a01cc620a73c010fba2906001600160a01b031690631e789c3690602401602060405180830381865afa15801561054c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105709190610bbc565b61058d576040516315812c6160e11b815260040160405180910390fd5b6001600160a01b038082166000908152600260209081526040808320938716835292905220546105be908390610b95565b6001600160a01b0391821660009081526002602090815260408083209690941682529490945292209190915550565b336001600160a01b037f000000000000000000000000d26410401cc61a24205a01cc620a73c010fba290161461063657604051634556123760e01b815260040160405180910390fd5b600082815260036020908152604091829020825160608101845281546001600160a01b039081168252600183015416928101929092526002015491810182905290156104ad5761068f816000015182604001518461089c565b5050600090815260036020526040812080546001600160a01b03199081168255600182018054909116905560020155565b6000546001600160a01b031633146106eb57604051635fc483c560e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2290600090a250565b6001600160a01b0380831660009081526002602090815260408083209385168352929052205480156104ad576001600160a01b0380841660009081526002602090815260408083209386168352929052908120556104ad83828461089c565b604051630f3c4e1b60e11b81523360048201527f000000000000000000000000d26410401cc61a24205a01cc620a73c010fba2906001600160a01b031690631e789c3690602401602060405180830381865afa1580156107f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c9190610bbc565b610839576040516315812c6160e11b815260040160405180910390fd5b604080516060810182526001600160a01b03938416815294831660208087019182528683019586526000938452600390529120935184549083166001600160a01b0319918216178555905160018501805491909316911617905551600290910155565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03841601610940576000816001600160a01b03168361138890604051600060405180830381858888f193505050503d8060008114610913576040519150601f19603f3d011682016040523d82523d6000602084013e610918565b606091505b505090508061093a576040516312171d8360e31b815260040160405180910390fd5b50505050565b6104ad6001600160a01b03841682846109a7565b600080546001600160a01b0383166001600160a01b0319918216811783556001805490921690915560405190917ffbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f8791a250565b600060405163a9059cbb60e01b81526001600160a01b0384166004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061093a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640160405180910390fd5b600060208284031215610a3e57600080fd5b5035919050565b80356001600160a01b0381168114610a5c57600080fd5b919050565b600080600060608486031215610a7657600080fd5b610a7f84610a45565b9250610a8d60208501610a45565b9150604084013590509250925092565b600080600060608486031215610ab257600080fd5b610abb84610a45565b925060208401359150610ad060408501610a45565b90509250925092565b60008060408385031215610aec57600080fd5b82359150610afc60208401610a45565b90509250929050565b600060208284031215610b1757600080fd5b610b2082610a45565b9392505050565b60008060408385031215610b3a57600080fd5b610b4383610a45565b9150610afc60208401610a45565b60008060008060808587031215610b6757600080fd5b610b7085610a45565b935060208501359250610b8560408601610a45565b9396929550929360600135925050565b80820180821115610bb657634e487b7160e01b600052601160045260246000fd5b92915050565b600060208284031215610bce57600080fd5b81518015158114610b2057600080fdfea2646970667358221220a041d48d6cf519ab7701718dd303678b99053cb00dd9e0d558f682f4825ec1c564736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5acba07788f16b4790fcbb09ca3b7fc8dd053a2000000000000000000000000d26410401cc61a24205a01cc620a73c010fba290
-----Decoded View---------------
Arg [0] : _owner (address): 0xa5acBA07788f16B4790FCBb09cA3b7Fc8dd053A2
Arg [1] : _bungeeGateway (address): 0xD26410401cC61a24205A01CC620A73c010FBA290
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5acba07788f16b4790fcbb09ca3b7fc8dd053a2
Arg [1] : 000000000000000000000000d26410401cc61a24205a01cc620a73c010fba290
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.