// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {IPoolManager} from "v4-core/src/interfaces/IPoolManager.sol";
import {IUnlockCallback} from "v4-core/src/interfaces/callback/IUnlockCallback.sol";
import {PoolKey} from "v4-core/src/types/PoolKey.sol";
import {SwapParams} from "v4-core/src/types/PoolOperation.sol";
import {Currency} from "v4-core/src/types/Currency.sol";
import {TickMath} from "v4-core/src/libraries/TickMath.sol";
import {TransientStateLibrary} from "v4-core/src/libraries/TransientStateLibrary.sol";
import {CurrencySettler} from "v4-core/test/utils/CurrencySettler.sol";
interface ERC20Like {
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
/// @title FirmStockRouter — production ETH→tokenized-stock purchase router (Uniswap v4).
/// @notice Implements the IStockRouter interface the FirmDistributor calls per round:
/// `buyStock(stock, recipient, minOut) payable` swaps the sent ETH into the stock
/// through admin-configured v4 pools and delivers it to the recipient.
///
/// Routes are configured per stock as either:
/// - single-hop: an ETH/stock v4 pool, or
/// - two-hop: ETH/USDG then USDG/stock (both legs inside ONE unlock, so the
/// intermediate USDG never touches this contract — flash-accounted).
///
/// This is the PERMISSIONLESS buy path (mirrors Index's buyStocksV4Fallback).
/// If Rialto RFQ access is obtained later, a separate Rialto router is added to the
/// FirmDistributor's router allowlist — no redeploy of this contract needed.
/// Swap mechanics follow Balloon's BalloonSwapRouter (proven on Robinhood Chain):
/// exact-input swap, output measured from NET currency deltas (after any hook
/// fees), minOut enforced on-chain.
contract FirmStockRouter is IUnlockCallback {
using CurrencySettler for Currency;
using TransientStateLibrary for IPoolManager;
IPoolManager public immutable manager;
address public owner;
struct Route {
bool configured;
bool twoHop;
PoolKey first; // single-hop: ETH/stock. two-hop: ETH/intermediate (USDG).
PoolKey second; // two-hop only: intermediate/stock.
}
mapping(address => Route) internal _routes;
event RouteSet(address indexed stock, bool twoHop);
event OwnerTransferred(address indexed newOwner);
event StockBought(address indexed stock, address indexed recipient, uint256 ethIn, uint256 stockOut);
event StockSold(address indexed stock, address indexed recipient, uint256 stockIn, uint256 ethOut);
error Unauthorized();
error ZeroAddress();
error ZeroAmount();
error RouteNotConfigured();
error BadRoute();
error TooLittleReceived(uint256 amountOut, uint256 minAmountOut);
error EthRefundFailed();
modifier onlyOwner() {
if (msg.sender != owner) revert Unauthorized();
_;
}
constructor(IPoolManager manager_, address owner_) {
if (address(manager_) == address(0) || owner_ == address(0)) revert ZeroAddress();
manager = manager_;
owner = owner_;
}
function transferOwnership(address newOwner) external onlyOwner {
if (newOwner == address(0)) revert ZeroAddress();
owner = newOwner;
emit OwnerTransferred(newOwner);
}
/// @notice Configure a single-hop route: a v4 pool pairing native ETH with the stock.
function setDirectRoute(address stock, PoolKey calldata ethStockKey) external onlyOwner {
if (stock == address(0)) revert ZeroAddress();
if (!_pairs(ethStockKey, address(0), stock)) revert BadRoute();
_routes[stock] = Route({configured: true, twoHop: false, first: ethStockKey, second: _emptyKey()});
emit RouteSet(stock, false);
}
/// @notice Configure a two-hop route: ETH/intermediate (e.g. USDG) then intermediate/stock.
function setTwoHopRoute(address stock, address intermediate, PoolKey calldata firstKey, PoolKey calldata secondKey)
external
onlyOwner
{
if (stock == address(0) || intermediate == address(0)) revert ZeroAddress();
if (!_pairs(firstKey, address(0), intermediate)) revert BadRoute();
if (!_pairs(secondKey, intermediate, stock)) revert BadRoute();
_routes[stock] = Route({configured: true, twoHop: true, first: firstKey, second: secondKey});
emit RouteSet(stock, true);
}
function getRoute(address stock) external view returns (Route memory) {
return _routes[stock];
}
/// @notice Buy `stock` with the sent ETH, delivering at least `minOut` to `recipient`.
/// IStockRouter entry point used by the FirmDistributor (permissionless —
/// only spends the caller's own msg.value).
function buyStock(address stock, address recipient, uint256 minOut)
external
payable
returns (uint256 out)
{
if (msg.value == 0) revert ZeroAmount();
if (recipient == address(0)) revert ZeroAddress();
Route memory route = _routes[stock];
if (!route.configured) revert RouteNotConfigured();
out = abi.decode(
manager.unlock(abi.encode(uint8(0), abi.encode(BuyData(stock, recipient, msg.value, minOut, route)))),
(uint256)
);
emit StockBought(stock, recipient, msg.value, out);
// Refund any ETH left over (defensive; exact-input swaps shouldn't leave any).
uint256 leftover = address(this).balance;
if (leftover > 0) {
(bool ok,) = msg.sender.call{value: leftover}("");
if (!ok) revert EthRefundFailed();
}
}
/// @notice Sell `amountIn` of `stock` for ETH along the configured route (reverse
/// direction), delivering at least `minOut` wei to `recipient`. Used by the
/// production swap UI for FIRM/stock sells (exact-input, minOut on-chain).
function sellStock(address stock, uint256 amountIn, address recipient, uint256 minOut)
external
returns (uint256 out)
{
if (amountIn == 0) revert ZeroAmount();
if (recipient == address(0)) revert ZeroAddress();
Route memory route = _routes[stock];
if (!route.configured) revert RouteNotConfigured();
// pull the tokens first; unlockCallback settles them into the PoolManager
ERC20Like(stock).transferFrom(msg.sender, address(this), amountIn);
out = abi.decode(
manager.unlock(abi.encode(uint8(1), abi.encode(SellData(stock, recipient, amountIn, minOut, route)))),
(uint256)
);
emit StockSold(stock, recipient, amountIn, out);
}
struct BuyData {
address stock;
address recipient;
uint256 ethIn;
uint256 minOut;
Route route;
}
struct SellData {
address stock;
address recipient;
uint256 amountIn;
uint256 minOut;
Route route;
}
/// @inheritdoc IUnlockCallback
function unlockCallback(bytes calldata rawData) external returns (bytes memory) {
if (msg.sender != address(manager)) revert Unauthorized();
(uint8 kind, bytes memory payload) = abi.decode(rawData, (uint8, bytes));
if (kind == 0) return _handleBuy(abi.decode(payload, (BuyData)));
return _handleSell(abi.decode(payload, (SellData)));
}
function _handleBuy(BuyData memory d) internal returns (bytes memory) {
// Hop 1: ETH (currency 0 by definition — native sorts first) → other currency.
_swapExactIn(d.route.first, Currency.wrap(address(0)), d.ethIn);
if (d.route.twoHop) {
// The intermediate is whichever side of the second key is NOT the stock.
Currency mid = Currency.unwrap(d.route.second.currency0) == d.stock
? d.route.second.currency1
: d.route.second.currency0;
int256 midDelta = manager.currencyDelta(address(this), mid);
// Hop 2 spends the entire intermediate output inside the same unlock.
if (midDelta > 0) _swapExactIn(d.route.second, mid, uint256(midDelta));
}
// Settle what we owe (ETH from the caller's value held by this contract) and
// take the stock output to the recipient.
Currency eth = Currency.wrap(address(0));
Currency stockCur = Currency.wrap(d.stock);
int256 ethDelta = manager.currencyDelta(address(this), eth);
if (ethDelta < 0) eth.settle(manager, address(this), uint256(-ethDelta), false);
int256 stockDelta = manager.currencyDelta(address(this), stockCur);
uint256 amountOut = stockDelta > 0 ? uint256(stockDelta) : 0;
if (amountOut < d.minOut) revert TooLittleReceived(amountOut, d.minOut);
if (amountOut > 0) stockCur.take(manager, d.recipient, amountOut, false);
return abi.encode(amountOut);
}
/// @dev Sell: stock → (intermediate →) ETH along the route in reverse. The router
/// already holds the pulled tokens; output ETH goes straight to the recipient.
function _handleSell(SellData memory d) internal returns (bytes memory) {
Currency stockCur = Currency.wrap(d.stock);
if (!d.route.twoHop) {
_swapExactIn(d.route.first, stockCur, d.amountIn);
} else {
_swapExactIn(d.route.second, stockCur, d.amountIn); // stock -> intermediate
Currency mid = Currency.unwrap(d.route.second.currency0) == d.stock
? d.route.second.currency1
: d.route.second.currency0;
int256 midDelta = manager.currencyDelta(address(this), mid);
if (midDelta > 0) _swapExactIn(d.route.first, mid, uint256(midDelta)); // intermediate -> ETH
}
int256 stockDelta = manager.currencyDelta(address(this), stockCur);
if (stockDelta < 0) stockCur.settle(manager, address(this), uint256(-stockDelta), false);
Currency eth = Currency.wrap(address(0));
int256 ethDelta = manager.currencyDelta(address(this), eth);
uint256 amountOut = ethDelta > 0 ? uint256(ethDelta) : 0;
if (amountOut < d.minOut) revert TooLittleReceived(amountOut, d.minOut);
if (amountOut > 0) eth.take(manager, d.recipient, amountOut, false);
return abi.encode(amountOut);
}
/// @dev Exact-input swap of `amountIn` of `inputCurrency` through `key`.
function _swapExactIn(PoolKey memory key, Currency inputCurrency, uint256 amountIn) internal {
bool zeroForOne = Currency.unwrap(key.currency0) == Currency.unwrap(inputCurrency);
manager.swap(
key,
SwapParams({
zeroForOne: zeroForOne,
amountSpecified: -int256(amountIn),
sqrtPriceLimitX96: zeroForOne ? TickMath.MIN_SQRT_PRICE + 1 : TickMath.MAX_SQRT_PRICE - 1
}),
""
);
}
function _pairs(PoolKey calldata key, address a, address b) internal pure returns (bool) {
address c0 = Currency.unwrap(key.currency0);
address c1 = Currency.unwrap(key.currency1);
return (c0 == a && c1 == b) || (c0 == b && c1 == a);
}
function _emptyKey() internal pure returns (PoolKey memory k) {}
/// @dev Holds the caller's msg.value between buyStock() and unlockCallback settle.
receive() external payable {}
}[
{
"type": "constructor",
"inputs": [
{
"name": "manager_",
"type": "address",
"internalType": "contract IPoolManager"
},
{
"name": "owner_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BadRoute",
"type": "error",
"inputs": []
},
{
"name": "EthRefundFailed",
"type": "error",
"inputs": []
},
{
"name": "RouteNotConfigured",
"type": "error",
"inputs": []
},
{
"name": "TooLittleReceived",
"type": "error",
"inputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "minAmountOut",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "ZeroAmount",
"type": "error",
"inputs": []
},
{
"name": "OwnerTransferred",
"type": "event",
"inputs": [
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RouteSet",
"type": "event",
"inputs": [
{
"name": "stock",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "twoHop",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "StockBought",
"type": "event",
"inputs": [
{
"name": "stock",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "ethIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "stockOut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "StockSold",
"type": "event",
"inputs": [
{
"name": "stock",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "stockIn",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "ethOut",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "buyStock",
"type": "function",
"inputs": [
{
"name": "stock",
"type": "address",
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "minOut",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "out",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "getRoute",
"type": "function",
"inputs": [
{
"name": "stock",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "configured",
"type": "bool",
"internalType": "bool"
},
{
"name": "twoHop",
"type": "bool",
"internalType": "bool"
},
{
"name": "first",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
},
{
"name": "second",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
}
],
"internalType": "struct FirmStockRouter.Route"
}
],
"stateMutability": "view"
},
{
"name": "manager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPoolManager"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "sellStock",
"type": "function",
"inputs": [
{
"name": "stock",
"type": "address",
"internalType": "address"
},
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "minOut",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "out",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "setDirectRoute",
"type": "function",
"inputs": [
{
"name": "stock",
"type": "address",
"internalType": "address"
},
{
"name": "ethStockKey",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTwoHopRoute",
"type": "function",
"inputs": [
{
"name": "stock",
"type": "address",
"internalType": "address"
},
{
"name": "intermediate",
"type": "address",
"internalType": "address"
},
{
"name": "firstKey",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
},
{
"name": "secondKey",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "unlockCallback",
"type": "function",
"inputs": [
{
"name": "rawData",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x60a03460cd57601f611b2a38819003918201601f19168301916001600160401b0383118484101760d157808492604094855283398101031260cd5780516001600160a01b0381169182820360cd57602001516001600160a01b038116929083900360cd5715801560c6575b60b7576080525f80546001600160a01b031916919091179055604051611a4490816100e682396080518181816105bf01528181610806015281816109980152818161113a01526118d90152f35b63d92e233d60e01b5f5260045ffd5b508115606a565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c9081630e196ef4146109c757508063481c6a7514610983578063481fd65c146108ff57806355993d18146106db5780638bf286b9146104425780638da5cb5b1461041b57806391dd7346146103a4578063dbd9eece1461011e5763f2fde38b1461008b575f61000f565b3461011a57602036600319011261011a576100a4610d46565b5f54906001600160a01b038216330361010c576001600160a01b03169081156100fd576001600160a01b03191681175f9081557f59f8e335c08d1479ecf855b99b0c772a9cba03a8abdff4d9b52a76f655072df69080a2005b63d92e233d60e01b5f5260045ffd5b6282b42960e81b5f5260045ffd5b5f80fd5b3461011a5760c036600319011261011a57610137610d46565b60a036602319011261011a575f546001600160a01b0316330361010c576001600160a01b031680156100fd576024356001600160a01b03811680820361011a57604435906001600160a01b03821680830361011a57848215928361039a575b831561037f575b50505015610370576101ad610e9c565b604051926101ba84610e12565b6001845260208401925f8452604051916101d383610e42565b8252602082015260643562ffffff8116810361011a5760408201526084358060020b810361011a57606082015260a435926001600160a01b038416840361011a57608082810194909452604085810192835260608087019485525f8881526001602081815284832099518a54965161ff0090151560081b1690151560ff1661ffff19909716969096179590951789559451805195890180546001600160a01b039788166001600160a01b0319918216179091558186015160028b018054848801518588015160b890811b62ffffff60b81b90811662ffffff60a01b60a094851b8116978f166001600160d01b0319968716179790971717909455958d015160038f018054918d169187169190911790559a51805160048f018054918d16918716919091179055808a015160058f018054838c01519a84015190981b90941698909c1b9093169a8a1694169390931798909817939093179055949095015160069096018054969093169590941694909417905590519081527f89f269674924ed0332959a111e2283a263230c667e9649bb1d98ff4e76d8c7599190a2005b63c4c321d160e01b5f5260045ffd5b14915081610391575b5084848161019d565b90501584610388565b8282149350610196565b3461011a57602036600319011261011a5760043567ffffffffffffffff811161011a573660238201121561011a5780600401359067ffffffffffffffff821161011a57366024838301011161011a576104179160246104039201611138565b604051918291602083526020830190610dee565b0390f35b3461011a575f36600319011261011a575f546040516001600160a01b039091168152602090f35b3461011a57608036600319011261011a5761045b610d46565b6044356001600160a01b038116916024359183900361011a5781156106cc5782156100fd5760018060a01b031691825f52600160205260405f20926104d56004604051956104a887610e12565b60ff81548181161515895260081c16151560208801526104ca60018201610ec6565b604088015201610ec6565b60608501528351156106bd576040516323b872dd60e01b8152336004820152306024820152604481018490526020816064815f865af1801561066b57610676575b505f61058a6105986105ba966040519061052f82610e42565b8582528660208301528760408301526064356060830152608082015261055c604051916020830190610f19565b610200815261056d61022082610e7a565b604051928391600160208401526040808401526060830190610dee565b03601f198101835282610e7a565b604051809681926348c8949160e01b8352602060048401526024830190610dee565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af193841561066b575f94610647575b506020845194818082019687920101031261011a577f90ae60af9124e87b731ed267829a979df7425d410f7e4799c982a7e1a2ce525d6040602095519481519081528587820152a3604051908152f35b6106649194503d805f833e61065c8183610e7a565b810190610f79565b92846105f7565b6040513d5f823e3d90fd5b6020813d6020116106b5575b8161068f60209383610e7a565b8101031261011a5761058a6105986105ba966106ab5f94610feb565b5096505050610516565b3d9150610682565b63140c2df160e01b5f5260045ffd5b631f2a200560e01b5f5260045ffd5b606036600319011261011a576106ef610d46565b6106f7610d5c565b34156106cc576001600160a01b03169081156100fd5760018060a01b031690815f52600160205260405f2061076160046040519261073484610e12565b60ff81548181161515865260081c161515602085015261075660018201610ec6565b604085015201610ec6565b60608201528051156106bd575f61058a6107df610801936040519061078582610e42565b878252866020830152346040830152604435606083015260808201526107b2604051916020830190610f19565b61020081526107c361022082610e7a565b6040519283918560208401526040808401526060830190610dee565b604051809381926348c8949160e01b8352602060048401526024830190610dee565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190811561066b575f916108e5575b506020815191818082019384920101031261011a5751917f84f79ec885c0e24b5af9422280864e2eb0afaee4d5dcd029f227210ef2f5b8ce60408051348152856020820152a34780610896575b602082604051908152f35b5f80808093335af13d156108e0573d6108ae81610f5d565b906108bc6040519283610e7a565b81525f60203d92013e5b156108d1578161088b565b631453fe1760e21b5f5260045ffd5b6108c6565b6108f991503d805f833e61065c8183610e7a565b8361083e565b3461011a57602036600319011261011a57610918610d46565b60405161092481610e12565b5f81525f6020820152610935610e9c565b60408201526060610944610e9c565b91015260018060a01b03165f52600160205261018060405f2061096f60046040519261073484610e12565b60608201526109816040518092610db5565bf35b3461011a575f36600319011261011a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461011a5761018036600319011261011a576109e1610d46565b906109ea610d5c565b9160a036604319011261011a5760a03660e319011261011a575f546001600160a01b0316330361010c576001600160a01b03169182158015610d35575b6100fd576044356001600160a01b038116919082810361011a57606435926001600160a01b03841680850361011a5781159182610d22575b8215610cfe575b5050156103705760e435916001600160a01b03831680840361011a5761010435916001600160a01b0383169081840361011a576001600160a01b031682811492899084610cf4575b8415610cd5575b505050501561037057610ac785610e12565b6001855260208501936001855260405192610ae184610e42565b8352602083015260843562ffffff8116810361011a57604083015260a4358060020b810361011a57606083015260c4356001600160a01b038116810361011a5760808301526040850191825260405192610b3a84610e42565b835260208301526101243562ffffff8116810361011a576040830152610144358060020b810361011a57606083015261016435926001600160a01b038416840361011a5760808381019490945260608581019384525f8781526001602081815260409283902098518954955161ff0090151560081b1690151560ff1661ffff19909616959095179490941788559351805188860180546001600160a01b039283166001600160a01b0319918216179091558286015160028b018054858701518689015160b890811b62ffffff60b81b90811662ffffff60a01b60a094851b8116978a166001600160d01b0319968716179790971717909455968d015160038f0180549188169187169190911790559a51805160048f018054918816918716919091179055808a015160058f018054838b01519b84015190991b90941699909c1b9093169a851695169490941798909817949094179091559490950151600690960180549690941695169490941790915590519081527f89f269674924ed0332959a111e2283a263230c667e9649bb1d98ff4e76d8c7599190a2005b1492509082610cea575b505087808881610ab5565b1490508780610cdf565b8382149450610aae565b6001600160a01b03851614915081610d19575b508680610a66565b90501586610d11565b6001600160a01b03851682149250610a5f565b506001600160a01b03811615610a27565b600435906001600160a01b038216820361011a57565b602435906001600160a01b038216820361011a57565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b9060e06060610dec93805115158452602081015115156020850152610de260408201516040860190610d72565b0151910190610d72565b565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6080810190811067ffffffffffffffff821117610e2e57604052565b634e487b7160e01b5f52604160045260245ffd5b60a0810190811067ffffffffffffffff821117610e2e57604052565b6060810190811067ffffffffffffffff821117610e2e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e2e57604052565b60405190610ea982610e42565b5f6080838281528260208201528260408201528260608201520152565b90604051610ed381610e42565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b90608080610dec9360018060a01b03815116845260018060a01b03602082015116602085015260408101516040850152606081015160608501520151910190610db5565b67ffffffffffffffff8111610e2e57601f01601f191660200190565b60208183031261011a5780519067ffffffffffffffff821161011a570181601f8201121561011a57805190610fad82610f5d565b92610fbb6040519485610e7a565b8284526020838301011161011a57815f9260208093018386015e8301015290565b9081602091031261011a575190565b5190811515820361011a57565b51906001600160a01b038216820361011a57565b91908260a091031261011a5760405161102481610e42565b809261102f81610ff8565b825261103d60208201610ff8565b6020830152604081015162ffffff8116810361011a5760408301526060810151908160020b820361011a57606083019190915260800151906001600160a01b038216820361011a5760800152565b8082039291610200841261011a576040516110a581610e42565b61018081956110b385610ff8565b83526110c160208601610ff8565b60208401526040850151604084015260608501516060840152607f19011261011a5761112f608092610160604051956110f987610e12565b611104868201610feb565b875261111260a08201610feb565b60208801526111248360c0830161100c565b60408801520161100c565b60608401520152565b7f0000000000000000000000000000000000000000000000000000000000000000916060916001600160a01b038416913383900361010c578101905f9360408284031261011a5781359160ff831680930361011a5760208101359067ffffffffffffffff821161011a57019183601f8401121561011a5782356111ba81610f5d565b936111c86040519586610e7a565b81855260208501956020838301011161011a57815f92602080930188378501015215611541575061020081518201918203126114925790602061120c92019061108b565b9260018060a01b038451166080850180516020810151155f146114c85750604061123f915101518260408801519161182e565b61124a8130846119c1565b848112611330575b505061125f90309061194a565b8281131561132857925b606081015180851061131157508361129a575b50505060405190602082015260208152611297604082610e7a565b90565b602001516001600160a01b0316813b1561130d578291606483926040519485938492630b0d9c0960e01b845282600485015260248401528860448401525af18015611302576112ea575b8061127c565b6112f5828092610e7a565b6112ff57806112e4565b80fd5b6040513d84823e3d90fd5b8280fd5b632743691d60e11b84526004859052602452604483fd5b508192611269565b6113399061180a565b90806113ad5750602060049160405192838092630476982d60e21b8252875af180156113a2579061125f9291611373575b505b905f611252565b6113949060203d60201161139b575b61138c8183610e7a565b810190610fdc565b505f61136a565b503d611382565b6040513d86823e3d90fd5b90833b156114b957604051632961046560e21b815260048101839052858160248183895af180156114bd57908693929161149e575b50906044602092604051948593849263a9059cbb60e01b845289600485015260248401525af180156113a257611461575b50604051630476982d60e21b815260208160048187875af180156113a2579061125f9291611442575b5061136c565b61145a9060203d60201161139b5761138c8183610e7a565b505f61143c565b6020813d602011611496575b8161147a60209383610e7a565b810103126114925761148b90610feb565b505f611413565b8380fd5b3d915061146d565b836114ac9194929394610e7a565b6114b9579084915f6113e2565b8480fd5b6040513d88823e3d90fd5b60606114dc9101518360408901519161182e565b805160600151805187516001600160a01b039182169116810361153a5750602001516001600160a01b03165b6115138130866119c1565b90868213611524575b50505061123f565b60406115329351015161182e565b5f808061151c565b9050611508565b9492935090610200825183019283031261011a57602061156292019061108b565b6080810180516040908101519083015181516001600160a01b031615906115889061180a565b81156117ef576401000276a4915b604051906115a382610e5e565b815260208101918252604081019260018060a01b031683526115d660405194633cf3645360e21b86526004860190610d72565b51151560a48401525160c483015260018060a01b0390511660e48201526101206101048201525f610124820152602081610144815f895af1801561066b576117c4575b508481516020810151611764575b505081516001600160a01b031692905082611642308361194a565b915f8312611709575b611657925030906119c1565b5f81131561170157935b8101518085106116eb57508361168c5750505060405190602082015260208152611297604082610e7a565b602001516001600160a01b0316823b1561011a5760645f92836040519586948593630b0d9c0960e01b8552600485015260248401528760448401525af1801561066b576116db575b808061127c565b5f6116e591610e7a565b5f6116d4565b84632743691d60e11b5f5260045260245260445ffd5b505f93611661565b9050602061171860049361180a565b604051630476982d60e21b81529384918290895af190811561066b57611657928592611745575b5061164b565b61175d9060203d60201161139b5761138c8183610e7a565b505f61173f565b0151805183516001600160a01b03918216911681036117bd5750602001516001600160a01b03165b6117978130866119c1565b90865f83136117a8575b9150611627565b6117b49351015161182e565b5f8080866117a1565b905061178c565b602090813d83116117e8575b6117da8183610e7a565b8101031261011a575f611619565b503d6117d0565b73fffd8963efd1fc6a506488495d951d5263988d2591611596565b600160ff1b811461181a575f0390565b634e487b7160e01b5f52601160045260245ffd5b805190926001600160a01b0392831691909216149061184c9061180a565b811561192f576401000276a4915b6040519061186782610e5e565b815260208101918252604081019260018060a01b0316835261189a60405194633cf3645360e21b86526004860190610d72565b51151560a48401525160c4830152516001600160a01b0390811660e48301526101206101048301525f61012483018190526020918391610144918391907f0000000000000000000000000000000000000000000000000000000000000000165af1801561066b576119085750565b602090813d8311611928575b61191e8183610e7a565b8101031261011a57565b503d611914565b73fffd8963efd1fc6a506488495d951d5263988d259161185a565b9060018060a01b03165f525f602052602060405f2060246040518094819363789add5560e11b8352600483015260018060a01b03165afa90811561066b575f91611992575090565b90506020813d6020116119b9575b816119ad60209383610e7a565b8101031261011a575190565b3d91506119a0565b6001600160a01b039182165f9081529282166020908152604093849020935163789add5560e11b815260048101949094529183916024918391165afa90811561066b575f9161199257509056fea2646970667358221220d265eca4783f3528cb26682afc093a94cba141a5f081502aa2b5444176115bcf64736f6c634300081a00330000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409510000000000000000000000007b4648df98e6ad815768693782546c62746a63f1
0x608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c9081630e196ef4146109c757508063481c6a7514610983578063481fd65c146108ff57806355993d18146106db5780638bf286b9146104425780638da5cb5b1461041b57806391dd7346146103a4578063dbd9eece1461011e5763f2fde38b1461008b575f61000f565b3461011a57602036600319011261011a576100a4610d46565b5f54906001600160a01b038216330361010c576001600160a01b03169081156100fd576001600160a01b03191681175f9081557f59f8e335c08d1479ecf855b99b0c772a9cba03a8abdff4d9b52a76f655072df69080a2005b63d92e233d60e01b5f5260045ffd5b6282b42960e81b5f5260045ffd5b5f80fd5b3461011a5760c036600319011261011a57610137610d46565b60a036602319011261011a575f546001600160a01b0316330361010c576001600160a01b031680156100fd576024356001600160a01b03811680820361011a57604435906001600160a01b03821680830361011a57848215928361039a575b831561037f575b50505015610370576101ad610e9c565b604051926101ba84610e12565b6001845260208401925f8452604051916101d383610e42565b8252602082015260643562ffffff8116810361011a5760408201526084358060020b810361011a57606082015260a435926001600160a01b038416840361011a57608082810194909452604085810192835260608087019485525f8881526001602081815284832099518a54965161ff0090151560081b1690151560ff1661ffff19909716969096179590951789559451805195890180546001600160a01b039788166001600160a01b0319918216179091558186015160028b018054848801518588015160b890811b62ffffff60b81b90811662ffffff60a01b60a094851b8116978f166001600160d01b0319968716179790971717909455958d015160038f018054918d169187169190911790559a51805160048f018054918d16918716919091179055808a015160058f018054838c01519a84015190981b90941698909c1b9093169a8a1694169390931798909817939093179055949095015160069096018054969093169590941694909417905590519081527f89f269674924ed0332959a111e2283a263230c667e9649bb1d98ff4e76d8c7599190a2005b63c4c321d160e01b5f5260045ffd5b14915081610391575b5084848161019d565b90501584610388565b8282149350610196565b3461011a57602036600319011261011a5760043567ffffffffffffffff811161011a573660238201121561011a5780600401359067ffffffffffffffff821161011a57366024838301011161011a576104179160246104039201611138565b604051918291602083526020830190610dee565b0390f35b3461011a575f36600319011261011a575f546040516001600160a01b039091168152602090f35b3461011a57608036600319011261011a5761045b610d46565b6044356001600160a01b038116916024359183900361011a5781156106cc5782156100fd5760018060a01b031691825f52600160205260405f20926104d56004604051956104a887610e12565b60ff81548181161515895260081c16151560208801526104ca60018201610ec6565b604088015201610ec6565b60608501528351156106bd576040516323b872dd60e01b8152336004820152306024820152604481018490526020816064815f865af1801561066b57610676575b505f61058a6105986105ba966040519061052f82610e42565b8582528660208301528760408301526064356060830152608082015261055c604051916020830190610f19565b610200815261056d61022082610e7a565b604051928391600160208401526040808401526060830190610dee565b03601f198101835282610e7a565b604051809681926348c8949160e01b8352602060048401526024830190610dee565b0381837f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03165af193841561066b575f94610647575b506020845194818082019687920101031261011a577f90ae60af9124e87b731ed267829a979df7425d410f7e4799c982a7e1a2ce525d6040602095519481519081528587820152a3604051908152f35b6106649194503d805f833e61065c8183610e7a565b810190610f79565b92846105f7565b6040513d5f823e3d90fd5b6020813d6020116106b5575b8161068f60209383610e7a565b8101031261011a5761058a6105986105ba966106ab5f94610feb565b5096505050610516565b3d9150610682565b63140c2df160e01b5f5260045ffd5b631f2a200560e01b5f5260045ffd5b606036600319011261011a576106ef610d46565b6106f7610d5c565b34156106cc576001600160a01b03169081156100fd5760018060a01b031690815f52600160205260405f2061076160046040519261073484610e12565b60ff81548181161515865260081c161515602085015261075660018201610ec6565b604085015201610ec6565b60608201528051156106bd575f61058a6107df610801936040519061078582610e42565b878252866020830152346040830152604435606083015260808201526107b2604051916020830190610f19565b61020081526107c361022082610e7a565b6040519283918560208401526040808401526060830190610dee565b604051809381926348c8949160e01b8352602060048401526024830190610dee565b0381837f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03165af190811561066b575f916108e5575b506020815191818082019384920101031261011a5751917f84f79ec885c0e24b5af9422280864e2eb0afaee4d5dcd029f227210ef2f5b8ce60408051348152856020820152a34780610896575b602082604051908152f35b5f80808093335af13d156108e0573d6108ae81610f5d565b906108bc6040519283610e7a565b81525f60203d92013e5b156108d1578161088b565b631453fe1760e21b5f5260045ffd5b6108c6565b6108f991503d805f833e61065c8183610e7a565b8361083e565b3461011a57602036600319011261011a57610918610d46565b60405161092481610e12565b5f81525f6020820152610935610e9c565b60408201526060610944610e9c565b91015260018060a01b03165f52600160205261018060405f2061096f60046040519261073484610e12565b60608201526109816040518092610db5565bf35b3461011a575f36600319011261011a576040517f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03168152602090f35b3461011a5761018036600319011261011a576109e1610d46565b906109ea610d5c565b9160a036604319011261011a5760a03660e319011261011a575f546001600160a01b0316330361010c576001600160a01b03169182158015610d35575b6100fd576044356001600160a01b038116919082810361011a57606435926001600160a01b03841680850361011a5781159182610d22575b8215610cfe575b5050156103705760e435916001600160a01b03831680840361011a5761010435916001600160a01b0383169081840361011a576001600160a01b031682811492899084610cf4575b8415610cd5575b505050501561037057610ac785610e12565b6001855260208501936001855260405192610ae184610e42565b8352602083015260843562ffffff8116810361011a57604083015260a4358060020b810361011a57606083015260c4356001600160a01b038116810361011a5760808301526040850191825260405192610b3a84610e42565b835260208301526101243562ffffff8116810361011a576040830152610144358060020b810361011a57606083015261016435926001600160a01b038416840361011a5760808381019490945260608581019384525f8781526001602081815260409283902098518954955161ff0090151560081b1690151560ff1661ffff19909616959095179490941788559351805188860180546001600160a01b039283166001600160a01b0319918216179091558286015160028b018054858701518689015160b890811b62ffffff60b81b90811662ffffff60a01b60a094851b8116978a166001600160d01b0319968716179790971717909455968d015160038f0180549188169187169190911790559a51805160048f018054918816918716919091179055808a015160058f018054838b01519b84015190991b90941699909c1b9093169a851695169490941798909817949094179091559490950151600690960180549690941695169490941790915590519081527f89f269674924ed0332959a111e2283a263230c667e9649bb1d98ff4e76d8c7599190a2005b1492509082610cea575b505087808881610ab5565b1490508780610cdf565b8382149450610aae565b6001600160a01b03851614915081610d19575b508680610a66565b90501586610d11565b6001600160a01b03851682149250610a5f565b506001600160a01b03811615610a27565b600435906001600160a01b038216820361011a57565b602435906001600160a01b038216820361011a57565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b9060e06060610dec93805115158452602081015115156020850152610de260408201516040860190610d72565b0151910190610d72565b565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6080810190811067ffffffffffffffff821117610e2e57604052565b634e487b7160e01b5f52604160045260245ffd5b60a0810190811067ffffffffffffffff821117610e2e57604052565b6060810190811067ffffffffffffffff821117610e2e57604052565b90601f8019910116810190811067ffffffffffffffff821117610e2e57604052565b60405190610ea982610e42565b5f6080838281528260208201528260408201528260608201520152565b90604051610ed381610e42565b82546001600160a01b0390811682526001840154808216602084015260a081901c62ffffff16604084015260b81c600290810b6060840152909301549092166080830152565b90608080610dec9360018060a01b03815116845260018060a01b03602082015116602085015260408101516040850152606081015160608501520151910190610db5565b67ffffffffffffffff8111610e2e57601f01601f191660200190565b60208183031261011a5780519067ffffffffffffffff821161011a570181601f8201121561011a57805190610fad82610f5d565b92610fbb6040519485610e7a565b8284526020838301011161011a57815f9260208093018386015e8301015290565b9081602091031261011a575190565b5190811515820361011a57565b51906001600160a01b038216820361011a57565b91908260a091031261011a5760405161102481610e42565b809261102f81610ff8565b825261103d60208201610ff8565b6020830152604081015162ffffff8116810361011a5760408301526060810151908160020b820361011a57606083019190915260800151906001600160a01b038216820361011a5760800152565b8082039291610200841261011a576040516110a581610e42565b61018081956110b385610ff8565b83526110c160208601610ff8565b60208401526040850151604084015260608501516060840152607f19011261011a5761112f608092610160604051956110f987610e12565b611104868201610feb565b875261111260a08201610feb565b60208801526111248360c0830161100c565b60408801520161100c565b60608401520152565b7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951916060916001600160a01b038416913383900361010c578101905f9360408284031261011a5781359160ff831680930361011a5760208101359067ffffffffffffffff821161011a57019183601f8401121561011a5782356111ba81610f5d565b936111c86040519586610e7a565b81855260208501956020838301011161011a57815f92602080930188378501015215611541575061020081518201918203126114925790602061120c92019061108b565b9260018060a01b038451166080850180516020810151155f146114c85750604061123f915101518260408801519161182e565b61124a8130846119c1565b848112611330575b505061125f90309061194a565b8281131561132857925b606081015180851061131157508361129a575b50505060405190602082015260208152611297604082610e7a565b90565b602001516001600160a01b0316813b1561130d578291606483926040519485938492630b0d9c0960e01b845282600485015260248401528860448401525af18015611302576112ea575b8061127c565b6112f5828092610e7a565b6112ff57806112e4565b80fd5b6040513d84823e3d90fd5b8280fd5b632743691d60e11b84526004859052602452604483fd5b508192611269565b6113399061180a565b90806113ad5750602060049160405192838092630476982d60e21b8252875af180156113a2579061125f9291611373575b505b905f611252565b6113949060203d60201161139b575b61138c8183610e7a565b810190610fdc565b505f61136a565b503d611382565b6040513d86823e3d90fd5b90833b156114b957604051632961046560e21b815260048101839052858160248183895af180156114bd57908693929161149e575b50906044602092604051948593849263a9059cbb60e01b845289600485015260248401525af180156113a257611461575b50604051630476982d60e21b815260208160048187875af180156113a2579061125f9291611442575b5061136c565b61145a9060203d60201161139b5761138c8183610e7a565b505f61143c565b6020813d602011611496575b8161147a60209383610e7a565b810103126114925761148b90610feb565b505f611413565b8380fd5b3d915061146d565b836114ac9194929394610e7a565b6114b9579084915f6113e2565b8480fd5b6040513d88823e3d90fd5b60606114dc9101518360408901519161182e565b805160600151805187516001600160a01b039182169116810361153a5750602001516001600160a01b03165b6115138130866119c1565b90868213611524575b50505061123f565b60406115329351015161182e565b5f808061151c565b9050611508565b9492935090610200825183019283031261011a57602061156292019061108b565b6080810180516040908101519083015181516001600160a01b031615906115889061180a565b81156117ef576401000276a4915b604051906115a382610e5e565b815260208101918252604081019260018060a01b031683526115d660405194633cf3645360e21b86526004860190610d72565b51151560a48401525160c483015260018060a01b0390511660e48201526101206101048201525f610124820152602081610144815f895af1801561066b576117c4575b508481516020810151611764575b505081516001600160a01b031692905082611642308361194a565b915f8312611709575b611657925030906119c1565b5f81131561170157935b8101518085106116eb57508361168c5750505060405190602082015260208152611297604082610e7a565b602001516001600160a01b0316823b1561011a5760645f92836040519586948593630b0d9c0960e01b8552600485015260248401528760448401525af1801561066b576116db575b808061127c565b5f6116e591610e7a565b5f6116d4565b84632743691d60e11b5f5260045260245260445ffd5b505f93611661565b9050602061171860049361180a565b604051630476982d60e21b81529384918290895af190811561066b57611657928592611745575b5061164b565b61175d9060203d60201161139b5761138c8183610e7a565b505f61173f565b0151805183516001600160a01b03918216911681036117bd5750602001516001600160a01b03165b6117978130866119c1565b90865f83136117a8575b9150611627565b6117b49351015161182e565b5f8080866117a1565b905061178c565b602090813d83116117e8575b6117da8183610e7a565b8101031261011a575f611619565b503d6117d0565b73fffd8963efd1fc6a506488495d951d5263988d2591611596565b600160ff1b811461181a575f0390565b634e487b7160e01b5f52601160045260245ffd5b805190926001600160a01b0392831691909216149061184c9061180a565b811561192f576401000276a4915b6040519061186782610e5e565b815260208101918252604081019260018060a01b0316835261189a60405194633cf3645360e21b86526004860190610d72565b51151560a48401525160c4830152516001600160a01b0390811660e48301526101206101048301525f61012483018190526020918391610144918391907f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951165af1801561066b576119085750565b602090813d8311611928575b61191e8183610e7a565b8101031261011a57565b503d611914565b73fffd8963efd1fc6a506488495d951d5263988d259161185a565b9060018060a01b03165f525f602052602060405f2060246040518094819363789add5560e11b8352600483015260018060a01b03165afa90811561066b575f91611992575090565b90506020813d6020116119b9575b816119ad60209383610e7a565b8101031261011a575190565b3d91506119a0565b6001600160a01b039182165f9081529282166020908152604093849020935163789add5560e11b815260048101949094529183916024918391165afa90811561066b575f9161199257509056fea2646970667358221220d265eca4783f3528cb26682afc093a94cba141a5f081502aa2b5444176115bcf64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x60ffae…a71e85 | 27 days agoSun, 19 Jul 2026 19:06:02 UTC | 0x59f8e3…2df6 | [0] 0x000000000000…5e3013d6 |
| 0x1710a4…f31cc3 | 27 days agoSun, 19 Jul 2026 18:59:10 UTC | 0x90ae60…525d | [0] 0x000000000000…9fdec851 [1] 0x000000000000…5e3013d6 data: 0x000000000000000000…4a0d4c29 |
| 0x4ad6e4…8e727e | 27 days agoSun, 19 Jul 2026 18:58:51 UTC | 0x84f79e…b8ce | [0] 0x000000000000…9fdec851 [1] 0x000000000000…5e3013d6 data: 0x000000000000000000…8014c907 |
| 0x6852eb…4ce381 | 27 days agoSun, 19 Jul 2026 18:57:33 UTC | 0x89f269…c759 | [0] 0x000000000000…58ef86a6 data: 0x000000000000000000…00000000 |
| 0x8e39e2…d3100d | 27 days agoSun, 19 Jul 2026 18:57:26 UTC | 0x89f269…c759 | [0] 0x000000000000…1c003b2d data: 0x000000000000000000…00000000 |
| 0xd7b8b9…6d0c53 | 27 days agoSun, 19 Jul 2026 18:57:23 UTC | 0x89f269…c759 | [0] 0x000000000000…fae35eea data: 0x000000000000000000…00000000 |
| 0x39e244…fdacb3 | 27 days agoSun, 19 Jul 2026 18:57:21 UTC | 0x89f269…c759 | [0] 0x000000000000…42446400 data: 0x000000000000000000…00000000 |
| 0x1a0187…c17f8b | 27 days agoSun, 19 Jul 2026 18:57:18 UTC | 0x89f269…c759 | [0] 0x000000000000…cb964f2a data: 0x000000000000000000…00000000 |
| 0x216833…8bc123 | 27 days agoSun, 19 Jul 2026 18:57:16 UTC | 0x89f269…c759 | [0] 0x000000000000…f75dee03 data: 0x000000000000000000…00000000 |
| 0x808cbf…3fdf98 | 27 days agoSun, 19 Jul 2026 18:57:14 UTC | 0x89f269…c759 | [0] 0x000000000000…320d9eec data: 0x000000000000000000…00000000 |
| 0x41affc…a8f3d9 | 27 days agoSun, 19 Jul 2026 18:57:12 UTC | 0x89f269…c759 | [0] 0x000000000000…232d4afd data: 0x000000000000000000…00000000 |
| 0x8a3b6e…e68923 | 27 days agoSun, 19 Jul 2026 18:57:09 UTC | 0x89f269…c759 | [0] 0x000000000000…669c2e74 data: 0x000000000000000000…00000000 |
| 0x461c73…14b6cc | 27 days agoSun, 19 Jul 2026 18:57:07 UTC | 0x89f269…c759 | [0] 0x000000000000…7ce02f35 data: 0x000000000000000000…00000000 |
| 0x4421d5…210773 | 27 days agoSun, 19 Jul 2026 18:57:05 UTC | 0x89f269…c759 | [0] 0x000000000000…0bc39681 data: 0x000000000000000000…00000000 |
| 0xd797a5…6352f3 | 27 days agoSun, 19 Jul 2026 18:57:02 UTC | 0x89f269…c759 | [0] 0x000000000000…adad4fe3 data: 0x000000000000000000…00000000 |
| 0xceca40…457a57 | 27 days agoSun, 19 Jul 2026 18:57:00 UTC | 0x89f269…c759 | [0] 0x000000000000…b3fb49c3 data: 0x000000000000000000…00000000 |
| 0xefd52b…557a52 | 27 days agoSun, 19 Jul 2026 18:56:58 UTC | 0x89f269…c759 | [0] 0x000000000000…7ccf450b data: 0x000000000000000000…00000000 |
| 0x07f1ae…e46848 | 27 days agoSun, 19 Jul 2026 18:56:55 UTC | 0x89f269…c759 | [0] 0x000000000000…30701867 data: 0x000000000000000000…00000000 |
| 0x95380d…774c46 | 27 days agoSun, 19 Jul 2026 18:56:53 UTC | 0x89f269…c759 | [0] 0x000000000000…e941bf54 data: 0x000000000000000000…00000000 |
| 0xbeae56…3c2371 | 27 days agoSun, 19 Jul 2026 18:56:51 UTC | 0x89f269…c759 | [0] 0x000000000000…d2023fdc data: 0x000000000000000000…00000000 |
| 0x406c72…d2fbb4 | 27 days agoSun, 19 Jul 2026 18:56:48 UTC | 0x89f269…c759 | [0] 0x000000000000…8f8a93f9 data: 0x000000000000000000…00000000 |
| 0xa1e517…95afee | 27 days agoSun, 19 Jul 2026 18:56:46 UTC | 0x89f269…c759 | [0] 0x000000000000…9fdec851 data: 0x000000000000000000…00000000 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 14,074,043 | 27 days agoSun, 19 Jul 2026 18:58:51 UTC | 0x4ad6e4…8e727e | CALL | buyStock | 0x46bb…d5d4 | OUT | 0x8366…0951 | 0.002 ETH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x60ffae…a71e85 | transferOwnership | 14,078,341 | 27 days agoSun, 19 Jul 2026 19:06:02 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000160 | |
| 0x1710a4…f31cc3 | sellStock | 14,074,237 | 27 days agoSun, 19 Jul 2026 18:59:10 UTC | 0x6ef7…13d6 | IN | FirmStockRouter | $0.000 ETH | 0.00001082 | |
| 0x4ad6e4…8e727e | buyStock | 14,074,043 | 27 days agoSun, 19 Jul 2026 18:58:51 UTC | 0x6ef7…13d6 | IN | FirmStockRouter | $3.760.002 ETH | 0.00001289 | |
| 0x6852eb…4ce381 | setDirectRoute | 14,073,274 | 27 days agoSun, 19 Jul 2026 18:57:33 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000472 | |
| 0x8e39e2…d3100d | setDirectRoute | 14,073,197 | 27 days agoSun, 19 Jul 2026 18:57:26 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000510 | |
| 0xd7b8b9…6d0c53 | setDirectRoute | 14,073,174 | 27 days agoSun, 19 Jul 2026 18:57:23 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000474 | |
| 0x39e244…fdacb3 | setDirectRoute | 14,073,151 | 27 days agoSun, 19 Jul 2026 18:57:21 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000469 | |
| 0x1a0187…c17f8b | setDirectRoute | 14,073,128 | 27 days agoSun, 19 Jul 2026 18:57:18 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000473 | |
| 0x216833…8bc123 | setDirectRoute | 14,073,105 | 27 days agoSun, 19 Jul 2026 18:57:16 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000470 | |
| 0x808cbf…3fdf98 | setDirectRoute | 14,073,082 | 27 days agoSun, 19 Jul 2026 18:57:14 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000469 | |
| 0x41affc…a8f3d9 | setDirectRoute | 14,073,059 | 27 days agoSun, 19 Jul 2026 18:57:12 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000472 | |
| 0x8a3b6e…e68923 | setDirectRoute | 14,073,036 | 27 days agoSun, 19 Jul 2026 18:57:09 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000472 | |
| 0x461c73…14b6cc | setDirectRoute | 14,073,013 | 27 days agoSun, 19 Jul 2026 18:57:07 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000470 | |
| 0x4421d5…210773 | setDirectRoute | 14,072,990 | 27 days agoSun, 19 Jul 2026 18:57:05 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000468 | |
| 0xd797a5…6352f3 | setDirectRoute | 14,072,967 | 27 days agoSun, 19 Jul 2026 18:57:02 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000471 | |
| 0xceca40…457a57 | setDirectRoute | 14,072,944 | 27 days agoSun, 19 Jul 2026 18:57:00 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000469 | |
| 0xefd52b…557a52 | setDirectRoute | 14,072,921 | 27 days agoSun, 19 Jul 2026 18:56:58 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000468 | |
| 0x07f1ae…e46848 | setDirectRoute | 14,072,898 | 27 days agoSun, 19 Jul 2026 18:56:55 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000470 | |
| 0x95380d…774c46 | setDirectRoute | 14,072,874 | 27 days agoSun, 19 Jul 2026 18:56:53 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000469 | |
| 0xbeae56…3c2371 | setDirectRoute | 14,072,851 | 27 days agoSun, 19 Jul 2026 18:56:51 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000468 | |
| 0x406c72…d2fbb4 | setDirectRoute | 14,072,828 | 27 days agoSun, 19 Jul 2026 18:56:48 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000474 | |
| 0xa1e517…95afee | setDirectRoute | 14,072,794 | 27 days agoSun, 19 Jul 2026 18:56:46 UTC | 0x7b46…63f1 | IN | FirmStockRouter | $0.000 ETH | 0.00000583 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x1710a4fe…f31cc3 | Transfer | 14,074,237 | 27 days agoSun, 19 Jul 2026 18:59:10 UTC | 0x46bb…d5d4 | OUT | 0x8366…0951 | 1,800 FIRM | The Firm (FIRM) | |
| 0x1710a4fe…f31cc3 | Transfer | 14,074,237 | 27 days agoSun, 19 Jul 2026 18:59:10 UTC | 0x6ef7…13d6 | IN | 0x46bb…d5d4 | 1,800 FIRM | The Firm (FIRM) |