Transaction Hash:
Block:
19529534 at Mar-28-2024 02:06:35 AM +UTC
Transaction Fee:
0.002625056277377596 ETH
$6.35
Gas Used:
94,492 Gas / 27.780725113 Gwei
Emitted Events:
343 |
BridgeReceiver.DepositReceived( depositor=[Sender] 0x40d0f44f595a4be6f4bca733cfb0fe58185a51a0, amount=60000000000000000, timestamp=1711591595 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x40D0f44f...8185a51a0 |
0.065855037504451792 Eth
Nonce: 8
|
0.003229981227074196 Eth
Nonce: 9
| 0.062625056277377596 | ||
0x9144E18C...aaE59Be45 | (ZKasino) | 9,010.29471716870565466 Eth | 9,010.35471716870565466 Eth | 0.06 | |
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 8.137810285423959876 Eth | 8.13781480687343576 Eth | 0.000004521449475884 |
Execution Trace
ETH 0.06
BridgeReceiver.CALL( )
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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 (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /* _,:j▒▒▒j:,_ _,÷░░░░░░░░░░░░░U~,_ ,:▒░░░░░░░░░░░░░░░░░░░░▒:,_ ╓:▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒:,_ ,:j░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╦-_ _,j░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░j~_ _,j░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒:,_ _,:▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒:,_ _,:▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒╔-_ ╓:R░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╦-,_ ,-j░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒~,_ _-j░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒:,_ _,÷░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╔-_ _,:▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╦-, ╓:╚░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒~,_ ╓-R░░░░░░░░░░,▄▄▓▓████████▓▓▄▄░░░░░░░░░░░░░░░░░░░░░░░░,▄▄▓▓█████████▓▄▄░░░░░░░░░░░░░░░░░░░░░░░░»▄▄▓▓█████████▓▓▄│░░░░░░░░░░░░░░░▒:,_ ,-j░░░░░░░░░░░░▄▓██████████████████▌░░░░░░░░░░░░░░░░░░░░▄▓██████████████████▓_░░░░░░░░░░░░░░░░░░░▄▓██████████████████▓∩░░░░░░░░░░░░░░░░░░╔,_ _,j░░░░░░░░░░░░░░░▓█████████████████████▌░░░░░░░░░░░░░░░░░░▓█████████████████████▓░░░░░░░░░░░░░░░░░░▓██████████████████████░░░░░░░░░░░░░░░░░░░ª` _,=▒░░░░░░░░░░░░░░░░░░██████████████████████Ñ░░░░░░░░░░░░░░░░░░██████████████████████Ñ░░░░░░░░░░░░░░░░░░▓█████████████████████▌░░░░░░░░░░░░░░░╚' _,, 'Ü░░░░░░░░░░░░░░░░░░░╙▀██████████████████▀`░░░░░░░░░░░░░░░░░░░ ▀██████████████████▀│░░░░░░░░░░░░░░░░░░░ ▀██████████████████▀│░░░░░░░░░░░░╩²` ,:▒░░░ ,-_ `'╚░░░░░░░░░░░░░░░░░│╙╙▀▀███████▀▀▀╙`░░░░░░░░░░░░░░░░░░░░░░░░»╙╙▀▀███████▀▀▀╙│░░░░░░░░░░░░░░░░░░░░░░░░»│╙▀▀███████▓▀▀╙│░░░░░░░░░░░░╙` _,j░░░░░░░ ░░░░╦,_ `ⁿ╚░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚ⁿ ╓:▒░░░░░░░░░░ ░░░░░░░▒=,_ `ⁿ╚░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ª` _,j░░░░░░░░░░░░░░ ░░░░░░░░░░░▒:,_ `²╩░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚' ╓:▒░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░▒~, '²Ü░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚ⁿ` _,j░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░▒-_ 'ª░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░P` _,:╚░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░╦,_ 'Ü░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚' ,-R░░░░░░░░░░░░,▄▄▄▄▄░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░=,_ `'╙░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░²` _,╔░░░░░░░░░░░░_▄▓████████▌░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒:,_ `'╚░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╙` ╓:R░░░░░░░░░░░░░_▓█████████████░░░░░░░ ░░░░░░░░░,▄▓█▓▓▄_░░░░░░░░░░░░░░░░░▒~, `ⁿ╚░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚'` _,j░░░░░░░░░░░░░░░░▄███████████████▒░░░░░░ ░░░░░░░░╓█████████▄░░░░░░░░░░░░░░░░░░░▒-_ 'ⁿ╚░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░H` ╓:╚░░░░░░░░░░░░░░░░░░╔████████████████H░░░░░░ ░░░░░░░░╫███████████▄░░░░░░░░░░░░░░░░░░░░░U,_ '²░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚' _-j░░░░░░░░░░░░░░░░░░░░░»█████████████████░░░░░░░ ░░░░░░░░╫████████████▄░░░░░░░░░░░░░░░░░░░░░░░░=,_ 'ª░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░²` _,:▒░░░░░░░░░░░░░░░░░░░░░░░░║████████████████`░░░░░░░ ░░░░░░░░"█████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░▒:,_ 'ª░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░H` ,-▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░╟███████████████░░░░░░░░░ ░░░░░░░░░╟████████████▌_░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒~╓ `'╙░░░░░░░░░░░░░░░░░░░░░░░╚' _,=░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████████Ñ░░░░░░░░░░ ░░░░░░░░░░╚██████████████▓▄_░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒~_ `ⁿ╚░░░░░░░░░░░░░░░░ª` ╓:R░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄██████████▀│»░░░░░░░░░░░ ░░░░░░░░░░░╙▓████████████████▓▄_░░░░░░░░░░░░░░░░░░░░░░░░░░░░░U~_ `ⁿ╚░░░░░░░░╚' _,j░░░░░░░,▄▄▓▓▄▄_░░░░░░░░░░░░░░░░░░░░░░▄▓███▀│╙╙╙││░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░╙▀███████`░│╙▀██████▓▄│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╔,_ `'''` ╓:▒░░░░░░░,▓█████████▌░░░░░░░░░░░░░░░░░░░,▓███▀`░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░»╙╙╙╙│░░░░░░░│╙▀█████▓▄▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒:,_ _,j░░░░░░░░░ç▓████████████▌░░░░░░░░░░░░░░░░,▓████`░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│╙▀██████▄▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒, ,j░░░░░░░░░░░╔███████████████░░░░░░░░░░░░░░░▓████Ñ░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│╙▀█████▓▄_░░░░░░░░░░░░░░░░░░░░░░░░░░░╦ ╒░░░░░░░░░░░░╔███████████████▌░░░░░░░░░░░░░▄████Ñ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░»╙▀▓█████▓▄_░░░░░░░░░░░░░░░░░░░░░░░░_ j░░░░░░░░░░░░▓███████████████░░░░░░░░░░░░▄████Ñ│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│╙▀██████▓▄_░░░░░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░███████████████Ñ░░░░░░░░░░╓▓███▀»░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ╙▀██████▓▄_░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░╫█████████████│░░░░░░░░░,▓███▀`░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│╙▀█████▓▓▄░░░░░░░░░░░░░` [░░░░░░░░░░░░Γ▓█████████▀Ñ░░░░░░░░░,▓████│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│╙▀████▌░░░░░░░░░░░░` [░░░░░░░░░░░░░░╙▀▀▀███▌`░░░░░░░░░░▓████Ñ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░»▄▄▓▓████░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░▄████Ñ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│▄▄▓███████▀▀ ░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░▄████▀»░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░_▄▄▓███████▀Ö│»░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓██▌░░░░░╓▓███▀`░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░,▄▓▓██████▓▀╙│»░░░░░░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓██▌░░░,▓███▀`░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄▄▓▓██████▀▀╙`░░░░░░░░░░░░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓██▌░_▓████│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄▄▓▓██████▀▀││░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓██▌▄████Ñ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░_▄▄▓███████▀▀│»░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓██████Ñ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░»▄▓▓██▓▓▄░░░░░░░░░ ░░░░░░░░░░░░░░░░░░,▄▄▓███████▀Ñ│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` [░░░░░░░░░░░░░░░░░░▓█████▄▄__░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄▓█████████▌░░░░░░░░ ░░░░░░░░░░░░░,▄▓▓██████▀▀Γ│»░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓█████████████▓▓▓▓▄▄▄▄▄,░░░░░░░░░░░░,▓████████████░░░░░░░░ ░░░░░░░░░░╓▓██████▀▀╙│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌│╙╙╙╙▀▀▀▀████████████████▓▓▓▓▄▄▄██████████████░░░░░░░░ ░░░░░░░░░░╟████▒│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░░░░░│││╙╙╙╙▀▀▀▀█████████████████████Ñ░░░░░░░░ ░░░░░░░░░░»▀█████▓▄,░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░││██████████████▌»░░░░░░░░ ░░░░░░░░░░░░││▀▓█████▓▄_░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████████▀░░░░░░░░░░ ░░░░░░░░░░░░░░░░│╙▀██████▓▄_░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███████████▓Ü░░░░░░░░░░H j░░░░░░░░░░░░░░░░░░░│╙▀██████▓▄_░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╙████████▀Ü░░░░░░░░░░░╚ ²░░░░░░░░░░░░░░░░░░░░░░│╙▀██████▓▄│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╙╙╙╙╙│░░░░░░░░░░░░╚` `ª░░░░░░░░░░░░░░░░░░░░░░░░│╙▀█████▓▓▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚²` `'╙░░░░░░░░░░░░░░░░░░░░░░░░│╙▀█████▓▄▄░░░░░░░░░▄▄▓▓▄▄░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░▓██▓▄▄▄▄│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ܲ` `ⁿ╙░░░░░░░░░░░░░░░░░░░░░░░░│╙▀█████▓▄▄░░░╓████████▓▄░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░_▄█████████▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░H' `ⁿ╚░░░░░░░░░░░░░░░░░░░░░░░»│╙▀█████▓▄▓██████████▓_░░░░░░░░░░░░` '░░░░░░░░░░░░░░_▓████████████▌░░░░░░░░░░░░░░░░░░░░░░░░░░░░╚' `ⁿ╚░░░░░░░░░░░░░░░░░░░░░░░░│╙▀████████████████▄░░░░░░░░░░░` '░░░░░░░░░░░░░╓███████████████░░░░░░░░░░░░░░░░░░░░░░░░╚'` `ⁿ╚░░░░░░░░░░░░░░░░░░░░░░░░╙▀██████████████▄░░░░░░░░░░` '░░░░░░░░░░░░╓████████████████░░░░░░░░░░░░░░░░░░░░ܲ` `ⁿ╚░░░░░░░░░░░░░░░░░░░░░░Γ██████████████░░░░░░░░░░` '░░░░░░░░░░░░████████████████▌░░░░░░░░░░░░░░░░░P' `ⁿ╚░░░░░░░░░░░░░░░░░░░╙█████████████▌░░░░░░░░░` '░░░░░░░░░░░░████████████████»░░░░░░░░░░░░░╚' `ⁿ╚░░░░░░░░░░░░░░░░╙████████████▌░░░░░░░░░` '░░░░░░░░░░░░██████████████▀»░░░░░░░░░░╚ⁿ `²╚░░░░░░░░░░░░░»╙██████████▒░░░░░░░░░` '░░░░░░░░░░░░╟███████████▀Ü░░░░░░░░╚²` `²Ü░░░░░░░░░░░░╙▀██████Ñ░░░░░░░░░░` '░░░░░░░░░░░░░╙▀██████▀▀│░░░░░░░H` '²Ü░░░░░░░░░░░│││»░░░░░░░░░░░░` '░░░░░░░░░░░░░░░»││││░░░░░░░╙' 'ª░░░░░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░░░░░░╚' 'ª░░░░░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░░░░╩^` 'ª░░░░░░░░░░░░░░░░` '░░░░░░░░░░░░░░░░ª` `'%░░░░░░░░░░░░╦ '░░░░░░░░░░░░╙' 'Ü░░░░░░░░░ '░░░░░░░░╚' `'╙░░░░░ '░░░░ܲ` `'╙╙ '░²`*/ import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract BridgeReceiver is Ownable { struct Deposit { address depositor; uint amount; uint timestamp; } Deposit[] public deposits; event DepositReceived( address indexed depositor, uint amount, uint timestamp ); event FundsMoved(address recipient, uint amount); function deposit() external payable { require(msg.value > 0, "Deposit must be greater than 0"); Deposit memory newDeposit = Deposit({ depositor: msg.sender, amount: msg.value, timestamp: block.timestamp }); deposits.push(newDeposit); emit DepositReceived(msg.sender, msg.value, block.timestamp); } function getAllDeposits() public view returns (Deposit[] memory) { return deposits; } function moveToBridge() external onlyOwner { uint amount = address(this).balance; require(amount > 0, "No ETH to withdraw"); (bool success, ) = owner().call{value: amount}(""); require(success, "Transfer failed"); emit FundsMoved(owner(), amount); } function moveAmountToBridge(uint _amount) external onlyOwner { require( _amount > 0 && _amount <= address(this).balance, "Invalid withdrawal amount" ); (bool success, ) = owner().call{value: _amount}(""); require(success, "Transfer failed"); emit FundsMoved(owner(), _amount); } function recoverERC20( address tokenAddress, address to, uint256 amount ) external onlyOwner { require(amount > 0, "Amount must be greater than 0"); require(to != address(0), "Cannot transfer to the zero address"); require( IERC20(tokenAddress).balanceOf(address(this)) >= amount, "Insufficient token balance" ); IERC20(tokenAddress).transfer(to, amount); } }