// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.26;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IStrategy} from "./interfaces/IStrategy.sol";
/// @title HerneVault
/// @notice Generic Beefy V7-style vault: a single `want` token, ERC-20 "moo" shares,
/// and one bound strategy that does all the protocol-specific work. The vault
/// itself never talks to Morpho/Uniswap/etc directly and holds no fee logic —
/// performanceFee/callFee are strategy-level concerns (see IStrategy.harvest()),
/// since different strategies realize yield in different ways (share-price growth
/// for StrategySteakUSDG, LP fee collection for StrategyUniV3WETH). One vault is
/// deployed per strategy (e.g. mooHerneUSDG wraps StrategySteakUSDG).
contract HerneVault is ERC20, Ownable {
IERC20 public immutable want;
IStrategy public strategy;
event StrategySet(address indexed strategy);
event Deposited(address indexed user, uint256 wantIn, uint256 shares);
event Withdrawn(address indexed user, uint256 shares, uint256 wantOut);
constructor(
address want_,
string memory name_,
string memory symbol_,
address owner_
) ERC20(name_, symbol_) Ownable(owner_) {
want = IERC20(want_);
}
/// @notice One-time strategy binding. No migration path in v1 — deploy a new
/// vault to switch strategies.
function setStrategy(address strategy_) external onlyOwner {
require(address(strategy) == address(0), "strategy already set");
require(IStrategy(strategy_).vault() == address(this), "strategy not bound to this vault");
require(IStrategy(strategy_).want() == address(want), "want mismatch");
strategy = IStrategy(strategy_);
emit StrategySet(strategy_);
}
/// @notice Total want-denominated value under vault management: idle balance
/// plus whatever the strategy has deployed.
function balance() public view returns (uint256) {
return want.balanceOf(address(this)) + strategy.balanceOf();
}
/// @notice Want-per-share, scaled by 1e18. 1e18 before the first deposit.
function getPricePerFullShare() public view returns (uint256) {
uint256 supply = totalSupply();
return supply == 0 ? 1e18 : (balance() * 1e18) / supply;
}
/// @notice Deposits `amount` of `want`, mints shares pro-rata to the vault's
/// balance immediately before the deposit, then puts the funds to work.
function deposit(uint256 amount) external returns (uint256 shares) {
require(amount > 0, "zero amount");
uint256 balBefore = balance();
want.transferFrom(msg.sender, address(this), amount);
uint256 balAfter = want.balanceOf(address(this)) + strategy.balanceOf();
uint256 deposited = balAfter - balBefore; // fee-on-transfer safe
uint256 supply = totalSupply();
shares = supply == 0 ? deposited : (deposited * supply) / balBefore;
require(shares > 0, "zero shares");
_mint(msg.sender, shares);
_earn();
emit Deposited(msg.sender, deposited, shares);
}
/// @notice Sends the vault's idle `want` balance to the strategy to be deployed.
function _earn() internal {
uint256 idle = want.balanceOf(address(this));
if (idle > 0) {
want.transfer(address(strategy), idle);
strategy.deposit();
}
}
/// @notice Burns `shares` and returns the pro-rata `want` value, pulling from
/// the strategy if the vault's idle balance isn't enough.
function withdraw(uint256 shares) external returns (uint256 amount) {
require(shares > 0 && shares <= balanceOf(msg.sender), "bad shares");
uint256 supply = totalSupply();
amount = (balance() * shares) / supply;
_burn(msg.sender, shares);
uint256 idle = want.balanceOf(address(this));
if (idle < amount) {
strategy.withdraw(amount - idle);
uint256 idleAfter = want.balanceOf(address(this));
if (idleAfter < amount) amount = idleAfter; // absorb any withdrawal slippage
}
want.transfer(msg.sender, amount);
emit Withdrawn(msg.sender, shares, amount);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "want_",
"type": "address",
"internalType": "address"
},
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "owner_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Deposited",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "wantIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "shares",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "StrategySet",
"type": "event",
"inputs": [
{
"name": "strategy",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Withdrawn",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "shares",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "wantOut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balance",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "deposit",
"type": "function",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "shares",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "getPricePerFullShare",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setStrategy",
"type": "function",
"inputs": [
{
"name": "strategy_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "strategy",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IStrategy"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "want",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "withdraw",
"type": "function",
"inputs": [
{
"name": "shares",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
}
]0x60a060405234801561000f575f80fd5b5060405161189238038061189283398101604081905261002e916101a1565b808383600361003d83826102ab565b50600461004a82826102ab565b5050506001600160a01b03811661007a57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61008381610098565b505050506001600160a01b0316608052610365565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80516001600160a01b03811681146100ff575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610127575f80fd5b81516001600160401b0381111561014057610140610104565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016e5761016e610104565b604052818152838201602001851015610185575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f80608085870312156101b4575f80fd5b6101bd856100e9565b60208601519094506001600160401b038111156101d8575f80fd5b6101e487828801610118565b604087015190945090506001600160401b03811115610201575f80fd5b61020d87828801610118565b92505061021c606086016100e9565b905092959194509250565b600181811c9082168061023b57607f821691505b60208210810361025957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102a657805f5260205f20601f840160051c810160208510156102845750805b601f840160051c820191505b818110156102a3575f8155600101610290565b50505b505050565b81516001600160401b038111156102c4576102c4610104565b6102d8816102d28454610227565b8461025f565b6020601f82116001811461030a575f83156102f35750848201515b5f19600385901b1c1916600184901b1784556102a3565b5f84815260208120601f198516915b828110156103395787850151825560209485019460019092019101610319565b508482101561035657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516114d66103bc5f395f81816101780152818161044e01528181610545015281816105e3015281816107b2015281816109c501528181610ab101528181610ba401528181610f1a0152610fbc01526114d65ff3fe608060405234801561000f575f80fd5b506004361061011c575f3560e01c8063715018a6116100a9578063a9059cbb1161006e578063a9059cbb14610260578063b69ef8a814610273578063b6b55f251461027b578063dd62ed3e1461028e578063f2fde38b146102c6575f80fd5b8063715018a61461022457806377c7b8fc1461022c5780638da5cb5b1461023457806395d89b4114610245578063a8c62e761461024d575f80fd5b806323b872dd116100ef57806323b872dd146101b25780632e1a7d4d146101c5578063313ce567146101d857806333a100ca146101e757806370a08231146101fc575f80fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631f1fcd5114610173575b5f80fd5b6101286102d9565b6040516101359190611286565b60405180910390f35b61015161014c3660046112cf565b610369565b6040519015158152602001610135565b6002545b604051908152602001610135565b61019a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610135565b6101516101c03660046112f9565b610382565b6101656101d3366004611337565b6103a5565b60405160128152602001610135565b6101fa6101f536600461134e565b610698565b005b61016561020a36600461134e565b6001600160a01b03165f9081526020819052604090205490565b6101fa6108c9565b6101656108dc565b6005546001600160a01b031661019a565b610128610929565b60065461019a906001600160a01b031681565b61015161026e3660046112cf565b610938565b610165610945565b610165610289366004611337565b610a45565b61016561029c366004611370565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101fa6102d436600461134e565b610cf1565b6060600380546102e8906113a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610314906113a7565b801561035f5780601f106103365761010080835404028352916020019161035f565b820191905f5260205f20905b81548152906001019060200180831161034257829003601f168201915b5050505050905090565b5f33610376818585610d2e565b60019150505b92915050565b5f3361038f858285610d40565b61039a858585610dbc565b506001949350505050565b5f80821180156103c35750335f908152602081905260409020548211155b6104015760405162461bcd60e51b815260206004820152600a6024820152696261642073686172657360b01b60448201526064015b60405180910390fd5b5f61040b60025490565b90508083610417610945565b61042191906113f3565b61042b919061140a565b91506104373384610e19565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561049b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104bf9190611429565b9050828110156105c7576006546001600160a01b0316632e1a7d4d6104e48386611440565b6040518263ffffffff1660e01b815260040161050291815260200190565b5f604051808303815f87803b158015610519575f80fd5b505af115801561052b573d5f803e3d5ffd5b50506040516370a0823160e01b81523060048201525f92507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a0823190602401602060405180830381865afa158015610593573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b79190611429565b9050838110156105c5578093505b505b60405163a9059cbb60e01b8152336004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015610631573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106559190611453565b50604080518581526020810185905233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6910160405180910390a25050919050565b6106a0610e51565b6006546001600160a01b0316156106f05760405162461bcd60e51b81526020600482015260146024820152731cdd1c985d1959de48185b1c9958591e481cd95d60621b60448201526064016103f8565b306001600160a01b0316816001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610736573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075a9190611472565b6001600160a01b0316146107b05760405162461bcd60e51b815260206004820181905260248201527f7374726174656779206e6f7420626f756e6420746f2074686973207661756c7460448201526064016103f8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316631f1fcd516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a9190611472565b6001600160a01b0316146108805760405162461bcd60e51b815260206004820152600d60248201526c0eec2dce840dad2e6dac2e8c6d609b1b60448201526064016103f8565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fe70d79dad95c835bdd87e9cf4665651c9e5abb3b756e4fd2bf45f29c95c3aa40905f90a250565b6108d1610e51565b6108da5f610e7e565b565b5f806108e760025490565b9050801561091957806108f8610945565b61090a90670de0b6b3a76400006113f3565b610914919061140a565b610923565b670de0b6b3a76400005b91505090565b6060600480546102e8906113a7565b5f33610376818585610dbc565b6006546040805163722713f760e01b815290515f926001600160a01b03169163722713f79160048083019260209291908290030181865afa15801561098c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b09190611429565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a369190611429565b610a40919061148d565b905090565b5f808211610a835760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bc8185b5bdd5b9d60aa1b60448201526064016103f8565b5f610a8c610945565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b239190611453565b506006546040805163722713f760e01b815290515f926001600160a01b03169163722713f79160048083019260209291908290030181865afa158015610b6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8f9190611429565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190611429565b610c1f919061148d565b90505f610c2c8383611440565b90505f610c3860025490565b90508015610c5a5783610c4b82846113f3565b610c55919061140a565b610c5c565b815b94505f8511610c9b5760405162461bcd60e51b815260206004820152600b60248201526a7a65726f2073686172657360a81b60448201526064016103f8565b610ca53386610ecf565b610cad610f03565b604080518381526020810187905233917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a250505050919050565b610cf9610e51565b6001600160a01b038116610d2257604051631e4fbdf760e01b81525f60048201526024016103f8565b610d2b81610e7e565b50565b610d3b838383600161108e565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610db65781811015610da857604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103f8565b610db684848484035f61108e565b50505050565b6001600160a01b038316610de557604051634b637e8f60e11b81525f60048201526024016103f8565b6001600160a01b038216610e0e5760405163ec442f0560e01b81525f60048201526024016103f8565b610d3b838383611160565b6001600160a01b038216610e4257604051634b637e8f60e11b81525f60048201526024016103f8565b610e4d825f83611160565b5050565b6005546001600160a01b031633146108da5760405163118cdaa760e01b81523360048201526024016103f8565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610ef85760405163ec442f0560e01b81525f60048201526024016103f8565b610e4d5f8383611160565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610f67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8b9190611429565b90508015610d2b5760065460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303815f875af1158015611004573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110289190611453565b5060065f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611075575f80fd5b505af1158015611087573d5f803e3d5ffd5b5050505050565b6001600160a01b0384166110b75760405163e602df0560e01b81525f60048201526024016103f8565b6001600160a01b0383166110e057604051634a1406b160e11b81525f60048201526024016103f8565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610db657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161115291815260200190565b60405180910390a350505050565b6001600160a01b03831661118a578060025f82825461117f919061148d565b909155506111fa9050565b6001600160a01b0383165f90815260208190526040902054818110156111dc5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103f8565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661121657600280548290039055611234565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161127991815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610d2b575f80fd5b5f80604083850312156112e0575f80fd5b82356112eb816112bb565b946020939093013593505050565b5f805f6060848603121561130b575f80fd5b8335611316816112bb565b92506020840135611326816112bb565b929592945050506040919091013590565b5f60208284031215611347575f80fd5b5035919050565b5f6020828403121561135e575f80fd5b8135611369816112bb565b9392505050565b5f8060408385031215611381575f80fd5b823561138c816112bb565b9150602083013561139c816112bb565b809150509250929050565b600181811c908216806113bb57607f821691505b6020821081036113d957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761037c5761037c6113df565b5f8261142457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611439575f80fd5b5051919050565b8181038181111561037c5761037c6113df565b5f60208284031215611463575f80fd5b81518015158114611369575f80fd5b5f60208284031215611482575f80fd5b8151611369816112bb565b8082018082111561037c5761037c6113df56fea2646970667358221220b3181fd14126ddd754ed243f83b3f7c860fa1da7d43e491befc1f4b6b2e4e9af64736f6c634300081a00330000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d168000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000002e5073c8e08a6a9640ff330c406bc6c537ad7fb400000000000000000000000000000000000000000000000000000000000000104865726e652055534447205661756c7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6d6f6f4865726e65555344470000000000000000000000000000000000000000
0x608060405234801561000f575f80fd5b506004361061011c575f3560e01c8063715018a6116100a9578063a9059cbb1161006e578063a9059cbb14610260578063b69ef8a814610273578063b6b55f251461027b578063dd62ed3e1461028e578063f2fde38b146102c6575f80fd5b8063715018a61461022457806377c7b8fc1461022c5780638da5cb5b1461023457806395d89b4114610245578063a8c62e761461024d575f80fd5b806323b872dd116100ef57806323b872dd146101b25780632e1a7d4d146101c5578063313ce567146101d857806333a100ca146101e757806370a08231146101fc575f80fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd146101615780631f1fcd5114610173575b5f80fd5b6101286102d9565b6040516101359190611286565b60405180910390f35b61015161014c3660046112cf565b610369565b6040519015158152602001610135565b6002545b604051908152602001610135565b61019a7f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d16881565b6040516001600160a01b039091168152602001610135565b6101516101c03660046112f9565b610382565b6101656101d3366004611337565b6103a5565b60405160128152602001610135565b6101fa6101f536600461134e565b610698565b005b61016561020a36600461134e565b6001600160a01b03165f9081526020819052604090205490565b6101fa6108c9565b6101656108dc565b6005546001600160a01b031661019a565b610128610929565b60065461019a906001600160a01b031681565b61015161026e3660046112cf565b610938565b610165610945565b610165610289366004611337565b610a45565b61016561029c366004611370565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101fa6102d436600461134e565b610cf1565b6060600380546102e8906113a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610314906113a7565b801561035f5780601f106103365761010080835404028352916020019161035f565b820191905f5260205f20905b81548152906001019060200180831161034257829003601f168201915b5050505050905090565b5f33610376818585610d2e565b60019150505b92915050565b5f3361038f858285610d40565b61039a858585610dbc565b506001949350505050565b5f80821180156103c35750335f908152602081905260409020548211155b6104015760405162461bcd60e51b815260206004820152600a6024820152696261642073686172657360b01b60448201526064015b60405180910390fd5b5f61040b60025490565b90508083610417610945565b61042191906113f3565b61042b919061140a565b91506104373384610e19565b6040516370a0823160e01b81523060048201525f907f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0316906370a0823190602401602060405180830381865afa15801561049b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104bf9190611429565b9050828110156105c7576006546001600160a01b0316632e1a7d4d6104e48386611440565b6040518263ffffffff1660e01b815260040161050291815260200190565b5f604051808303815f87803b158015610519575f80fd5b505af115801561052b573d5f803e3d5ffd5b50506040516370a0823160e01b81523060048201525f92507f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b031691506370a0823190602401602060405180830381865afa158015610593573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b79190611429565b9050838110156105c5578093505b505b60405163a9059cbb60e01b8152336004820152602481018490527f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015610631573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106559190611453565b50604080518581526020810185905233917f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6910160405180910390a25050919050565b6106a0610e51565b6006546001600160a01b0316156106f05760405162461bcd60e51b81526020600482015260146024820152731cdd1c985d1959de48185b1c9958591e481cd95d60621b60448201526064016103f8565b306001600160a01b0316816001600160a01b031663fbfa77cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610736573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075a9190611472565b6001600160a01b0316146107b05760405162461bcd60e51b815260206004820181905260248201527f7374726174656779206e6f7420626f756e6420746f2074686973207661756c7460448201526064016103f8565b7f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0316816001600160a01b0316631f1fcd516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a9190611472565b6001600160a01b0316146108805760405162461bcd60e51b815260206004820152600d60248201526c0eec2dce840dad2e6dac2e8c6d609b1b60448201526064016103f8565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fe70d79dad95c835bdd87e9cf4665651c9e5abb3b756e4fd2bf45f29c95c3aa40905f90a250565b6108d1610e51565b6108da5f610e7e565b565b5f806108e760025490565b9050801561091957806108f8610945565b61090a90670de0b6b3a76400006113f3565b610914919061140a565b610923565b670de0b6b3a76400005b91505090565b6060600480546102e8906113a7565b5f33610376818585610dbc565b6006546040805163722713f760e01b815290515f926001600160a01b03169163722713f79160048083019260209291908290030181865afa15801561098c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b09190611429565b6040516370a0823160e01b81523060048201527f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0316906370a0823190602401602060405180830381865afa158015610a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a369190611429565b610a40919061148d565b905090565b5f808211610a835760405162461bcd60e51b815260206004820152600b60248201526a1e995c9bc8185b5bdd5b9d60aa1b60448201526064016103f8565b5f610a8c610945565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091507f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0316906323b872dd906064016020604051808303815f875af1158015610aff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b239190611453565b506006546040805163722713f760e01b815290515f926001600160a01b03169163722713f79160048083019260209291908290030181865afa158015610b6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8f9190611429565b6040516370a0823160e01b81523060048201527f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0316906370a0823190602401602060405180830381865afa158015610bf1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c159190611429565b610c1f919061148d565b90505f610c2c8383611440565b90505f610c3860025490565b90508015610c5a5783610c4b82846113f3565b610c55919061140a565b610c5c565b815b94505f8511610c9b5760405162461bcd60e51b815260206004820152600b60248201526a7a65726f2073686172657360a81b60448201526064016103f8565b610ca53386610ecf565b610cad610f03565b604080518381526020810187905233917f73a19dd210f1a7f902193214c0ee91dd35ee5b4d920cba8d519eca65a7b488ca910160405180910390a250505050919050565b610cf9610e51565b6001600160a01b038116610d2257604051631e4fbdf760e01b81525f60048201526024016103f8565b610d2b81610e7e565b50565b610d3b838383600161108e565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f19811015610db65781811015610da857604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016103f8565b610db684848484035f61108e565b50505050565b6001600160a01b038316610de557604051634b637e8f60e11b81525f60048201526024016103f8565b6001600160a01b038216610e0e5760405163ec442f0560e01b81525f60048201526024016103f8565b610d3b838383611160565b6001600160a01b038216610e4257604051634b637e8f60e11b81525f60048201526024016103f8565b610e4d825f83611160565b5050565b6005546001600160a01b031633146108da5760405163118cdaa760e01b81523360048201526024016103f8565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216610ef85760405163ec442f0560e01b81525f60048201526024016103f8565b610e4d5f8383611160565b6040516370a0823160e01b81523060048201525f907f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0316906370a0823190602401602060405180830381865afa158015610f67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8b9190611429565b90508015610d2b5760065460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390527f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1689091169063a9059cbb906044016020604051808303815f875af1158015611004573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110289190611453565b5060065f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611075575f80fd5b505af1158015611087573d5f803e3d5ffd5b5050505050565b6001600160a01b0384166110b75760405163e602df0560e01b81525f60048201526024016103f8565b6001600160a01b0383166110e057604051634a1406b160e11b81525f60048201526024016103f8565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610db657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161115291815260200190565b60405180910390a350505050565b6001600160a01b03831661118a578060025f82825461117f919061148d565b909155506111fa9050565b6001600160a01b0383165f90815260208190526040902054818110156111dc5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016103f8565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661121657600280548290039055611234565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161127991815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610d2b575f80fd5b5f80604083850312156112e0575f80fd5b82356112eb816112bb565b946020939093013593505050565b5f805f6060848603121561130b575f80fd5b8335611316816112bb565b92506020840135611326816112bb565b929592945050506040919091013590565b5f60208284031215611347575f80fd5b5035919050565b5f6020828403121561135e575f80fd5b8135611369816112bb565b9392505050565b5f8060408385031215611381575f80fd5b823561138c816112bb565b9150602083013561139c816112bb565b809150509250929050565b600181811c908216806113bb57607f821691505b6020821081036113d957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761037c5761037c6113df565b5f8261142457634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611439575f80fd5b5051919050565b8181038181111561037c5761037c6113df565b5f60208284031215611463575f80fd5b81518015158114611369575f80fd5b5f60208284031215611482575f80fd5b8151611369816112bb565b8082018082111561037c5761037c6113df56fea2646970667358221220b3181fd14126ddd754ed243f83b3f7c860fa1da7d43e491befc1f4b6b2e4e9af64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| DIH | 1 | $0.0000102 | $0 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xbdc9f4…61d34f | 38 days agoThu, 09 Jul 2026 19:42:17 UTC | 0xe70d79…aa40 | [0] 0x000000000000…89f0343c |
| 0x79d074…5518c5 | 38 days agoThu, 09 Jul 2026 19:32:31 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…37ad7fb4 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xc59e420e…12cc24 | Transfer | 18,963,672 | 23 days agoSat, 25 Jul 2026 11:11:21 UTC | 0xcaf7…5d11 | IN | 0x43bb…0f25 | $0.001 DIH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xbdc9f4…61d34f | setStrategy | 5,477,096 | 38 days agoThu, 09 Jul 2026 19:42:17 UTC | 0x2e50…7fb4 | IN | HerneVault | $0.000 ETH | 0.00000205 |