Source Code
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23028417 | 212 days ago | 92.11475207 ETH | ||||
| Transfer | 23028417 | 212 days ago | 92.11475207 ETH | ||||
| Transfer | 23024577 | 212 days ago | 0.00745232 ETH | ||||
| Transfer | 23024577 | 212 days ago | 0.00745232 ETH | ||||
| Transfer | 23015970 | 213 days ago | 0.00621079 ETH | ||||
| Transfer | 23015970 | 213 days ago | 0.00621079 ETH | ||||
| Transfer | 23010271 | 214 days ago | 0.02399219 ETH | ||||
| Transfer | 23010271 | 214 days ago | 0.02399219 ETH | ||||
| Transfer | 23007171 | 215 days ago | 0.0220417 ETH | ||||
| Transfer | 23007171 | 215 days ago | 0.0220417 ETH | ||||
| Transfer | 23004427 | 215 days ago | 0.05053546 ETH | ||||
| Transfer | 23004427 | 215 days ago | 0.05053546 ETH | ||||
| Transfer | 23002414 | 215 days ago | 0.00124114 ETH | ||||
| Transfer | 23002414 | 215 days ago | 0.00124114 ETH | ||||
| Transfer | 23001968 | 215 days ago | 0.05381948 ETH | ||||
| Transfer | 23001968 | 215 days ago | 0.03574556 ETH | ||||
| Transfer | 22999595 | 216 days ago | 1.55976972 ETH | ||||
| Transfer | 22998907 | 216 days ago | 0.00263703 ETH | ||||
| Transfer | 22998850 | 216 days ago | 0.00111269 ETH | ||||
| Transfer | 22998850 | 216 days ago | 0.00111269 ETH | ||||
| Transfer | 22995096 | 216 days ago | 0.01408183 ETH | ||||
| Transfer | 22995096 | 216 days ago | 0.01408183 ETH | ||||
| Transfer | 22993186 | 217 days ago | 0.02382636 ETH | ||||
| Transfer | 22993186 | 217 days ago | 0.02382636 ETH | ||||
| Transfer | 22993115 | 217 days ago | 0.95053361 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AssetsVault
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity =0.8.21;
import {TransferHelper} from "v3-periphery/libraries/TransferHelper.sol";
error AssetsVault__ZeroAddress();
error AssetsVault__NotPermit();
error AssetsVault__InvalidAmount();
/**
* @title ReETH Assets Vault
* @author Mavvverick
* @notice The ReETH Assets Vault is a secure smart contract designed to hold ETH deposits
* in exchange for issuing ReETH tokens for the re.al Chain network. Users can deposit ETH into the real Vault,
* which securely stores it in this vault until they choose to redeem it for ReETH tokens.
* These tokens represent a claim to the underlying ETH assets and yield held within the Vault.
*/
contract AssetsVault {
address public realVault;
address public immutable strategyManager;
event VaultUpdated(address oldRealVault, address newRealVault);
/**
* @dev Modifier to restrict access to only permitted addresses.
* Only the real vault and strategy manager are permitted to execute certain functions.
*/
modifier onlyPermit() {
if (realVault != msg.sender && strategyManager != msg.sender) revert AssetsVault__NotPermit();
_;
}
/**
* @param _realVault Address of the real vault contract.
* @param _strategyManager Address of the strategy manager contract.
*/
constructor(address _realVault, address _strategyManager) {
if (_realVault == address(0) || _strategyManager == address(0)) revert AssetsVault__ZeroAddress();
realVault = _realVault;
strategyManager = _strategyManager;
}
/**
* @dev Deposit function to accept incoming Ether.
*/
function deposit() external payable {
if (msg.value == 0) revert AssetsVault__InvalidAmount();
}
/**
* @dev Withdraw function to transfer Ether to a specified address.
* Only permitted addresses can execute this function.
* @param _to Address to which Ether will be transferred.
* @param _amount Amount of Ether to transfer.
*/
function withdraw(address _to, uint256 _amount) external onlyPermit {
TransferHelper.safeTransferETH(_to, _amount);
}
/**
* @dev Function to set a new vault address.
* Only permitted addresses can execute this function.
* @param _vault Address of the new vault contract.
*/
function setNewVault(address _vault) external onlyPermit {
if (_vault == address(0)) revert AssetsVault__ZeroAddress();
emit VaultUpdated(realVault, _vault);
realVault = _vault;
}
/**
* @dev Function to get the balance of Ether held by the contract.
* @return amount The balance of Ether held by the contract.
*/
function getBalance() external view returns (uint256 amount) {
amount = address(this).balance;
}
/**
* @dev Fallback function to receive Ether.
*/
receive() external payable {}
}// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.6.0;
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
library TransferHelper {
/// @notice Transfers tokens from the targeted address to the given destination
/// @notice Errors with 'STF' if transfer fails
/// @param token The contract address of the token to be transferred
/// @param from The originating address from which the tokens will be transferred
/// @param to The destination address of the transfer
/// @param value The amount to be transferred
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
(bool success, bytes memory data) =
token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'STF');
}
/// @notice Transfers tokens from msg.sender to a recipient
/// @dev Errors with ST if transfer fails
/// @param token The contract address of the token which will be transferred
/// @param to The recipient of the transfer
/// @param value The value of the transfer
function safeTransfer(
address token,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'ST');
}
/// @notice Approves the stipulated contract to spend the given allowance in the given token
/// @dev Errors with 'SA' if transfer fails
/// @param token The contract address of the token to be approved
/// @param to The target of the approval
/// @param value The amount of the given token the target will be allowed to spend
function safeApprove(
address token,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'SA');
}
/// @notice Transfers ETH to the recipient address
/// @dev Fails with `STE`
/// @param to The destination of the transfer
/// @param value The value to be transferred
function safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, 'STE');
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
}{
"remappings": [
"src/=src/",
"forge-std/=lib/forge-std/src/",
"oz/=lib/openzeppelin-contracts/contracts/",
"v3-periphery/=lib/v3-periphery/contracts/",
"@uniswap/v3-core/=lib/v3-core/",
"v3-core-0.8/=lib/v3-core-0.8/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"v3-core/=lib/v3-core/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_realVault","type":"address"},{"internalType":"address","name":"_strategyManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AssetsVault__InvalidAmount","type":"error"},{"inputs":[],"name":"AssetsVault__NotPermit","type":"error"},{"inputs":[],"name":"AssetsVault__ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRealVault","type":"address"},{"indexed":false,"internalType":"address","name":"newRealVault","type":"address"}],"name":"VaultUpdated","type":"event"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"realVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_vault","type":"address"}],"name":"setNewVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategyManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a060405234801561000f575f80fd5b5060405161051d38038061051d83398101604081905261002e916100a8565b6001600160a01b038216158061004b57506001600160a01b038116155b1561006957604051635fe427b360e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b03938416179055166080526100d9565b80516001600160a01b03811681146100a3575f80fd5b919050565b5f80604083850312156100b9575f80fd5b6100c28361008d565b91506100d06020840161008d565b90509250929050565b60805161041f6100fe5f395f818160c80152818161016b015261025a015261041f5ff3fe608060405260043610610057575f3560e01c806312065fe0146100625780631a7a29b81461008157806339b70e38146100b7578063d0e30db0146100ea578063e7b77f70146100f4578063f3fef3a314610113575f80fd5b3661005e57005b5f80fd5b34801561006d575f80fd5b506040514781526020015b60405180910390f35b34801561008c575f80fd5b505f5461009f906001600160a01b031681565b6040516001600160a01b039091168152602001610078565b3480156100c2575f80fd5b5061009f7f000000000000000000000000000000000000000000000000000000000000000081565b6100f2610132565b005b3480156100ff575f80fd5b506100f261010e366004610375565b610154565b34801561011e575f80fd5b506100f261012d366004610395565b610243565b345f0361015257604051630263405b60e31b815260040160405180910390fd5b565b5f546001600160a01b0316331480159061019757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314155b156101b55760405163a0f0aeb360e01b815260040160405180910390fd5b6001600160a01b0381166101dc57604051635fe427b360e01b815260040160405180910390fd5b5f54604080516001600160a01b03928316815291831660208301527f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea39910160405180910390a15f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331480159061028657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314155b156102a45760405163a0f0aeb360e01b815260040160405180910390fd5b6102ae82826102b2565b5050565b604080515f808252602082019092526001600160a01b0384169083906040516102db91906103bd565b5f6040518083038185875af1925050503d805f8114610315576040519150601f19603f3d011682016040523d82523d5f602084013e61031a565b606091505b50509050806103555760405162461bcd60e51b815260206004820152600360248201526253544560e81b604482015260640160405180910390fd5b505050565b80356001600160a01b0381168114610370575f80fd5b919050565b5f60208284031215610385575f80fd5b61038e8261035a565b9392505050565b5f80604083850312156103a6575f80fd5b6103af8361035a565b946020939093013593505050565b5f82515f5b818110156103dc57602081860181015185830152016103c2565b505f92019182525091905056fea2646970667358221220c4c3fece723b81a4a3fa608ed530b6699000e996f5437d248c420d1ae180d8c564736f6c63430008150033000000000000000000000000fc1db08622e81b2afd643318f6b8b79e9980a5e10000000000000000000000005cba18d504d4158dc1a18c5dc6bb2a30b230ddd8
Deployed Bytecode
0x608060405260043610610057575f3560e01c806312065fe0146100625780631a7a29b81461008157806339b70e38146100b7578063d0e30db0146100ea578063e7b77f70146100f4578063f3fef3a314610113575f80fd5b3661005e57005b5f80fd5b34801561006d575f80fd5b506040514781526020015b60405180910390f35b34801561008c575f80fd5b505f5461009f906001600160a01b031681565b6040516001600160a01b039091168152602001610078565b3480156100c2575f80fd5b5061009f7f0000000000000000000000005cba18d504d4158dc1a18c5dc6bb2a30b230ddd881565b6100f2610132565b005b3480156100ff575f80fd5b506100f261010e366004610375565b610154565b34801561011e575f80fd5b506100f261012d366004610395565b610243565b345f0361015257604051630263405b60e31b815260040160405180910390fd5b565b5f546001600160a01b0316331480159061019757507f0000000000000000000000005cba18d504d4158dc1a18c5dc6bb2a30b230ddd86001600160a01b03163314155b156101b55760405163a0f0aeb360e01b815260040160405180910390fd5b6001600160a01b0381166101dc57604051635fe427b360e01b815260040160405180910390fd5b5f54604080516001600160a01b03928316815291831660208301527f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea39910160405180910390a15f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331480159061028657507f0000000000000000000000005cba18d504d4158dc1a18c5dc6bb2a30b230ddd86001600160a01b03163314155b156102a45760405163a0f0aeb360e01b815260040160405180910390fd5b6102ae82826102b2565b5050565b604080515f808252602082019092526001600160a01b0384169083906040516102db91906103bd565b5f6040518083038185875af1925050503d805f8114610315576040519150601f19603f3d011682016040523d82523d5f602084013e61031a565b606091505b50509050806103555760405162461bcd60e51b815260206004820152600360248201526253544560e81b604482015260640160405180910390fd5b505050565b80356001600160a01b0381168114610370575f80fd5b919050565b5f60208284031215610385575f80fd5b61038e8261035a565b9392505050565b5f80604083850312156103a6575f80fd5b6103af8361035a565b946020939093013593505050565b5f82515f5b818110156103dc57602081860181015185830152016103c2565b505f92019182525091905056fea2646970667358221220c4c3fece723b81a4a3fa608ed530b6699000e996f5437d248c420d1ae180d8c564736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fc1db08622e81b2afd643318f6b8b79e9980a5e10000000000000000000000005cba18d504d4158dc1a18c5dc6bb2a30b230ddd8
-----Decoded View---------------
Arg [0] : _realVault (address): 0xFC1db08622e81b2AFd643318f6B8B79E9980A5e1
Arg [1] : _strategyManager (address): 0x5Cba18d504D4158dC1A18C5Dc6BB2a30B230DdD8
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fc1db08622e81b2afd643318f6b8b79e9980a5e1
Arg [1] : 0000000000000000000000005cba18d504d4158dc1a18c5dc6bb2a30b230ddd8
Loading...
Loading
Loading...
Loading
Net Worth in USD
$9,971.72
Net Worth in ETH
4.858167
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,052.57 | 4.8582 | $9,971.72 |
Loading...
Loading
Loading...
Loading
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.