// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import {IClassicFactory} from "./interfaces/IClassicFactory.sol";
import {IClassicPool} from "./interfaces/IClassicPool.sol";
import {IClassicPoolCallee} from "./interfaces/IClassicPoolCallee.sol";
import {ApexErrors} from "./libraries/common/ApexErrors.sol";
contract ClassicPool is IClassicPool, ERC20, ReentrancyGuard {
struct Observation {
uint256 timestamp;
uint256 reserve0Cumulative;
uint256 reserve1Cumulative;
}
uint256 public constant MINIMUM_LIQUIDITY = 10 ** 3;
uint256 internal constant MINIMUM_K = 10 ** 9;
uint256 internal constant FEE_DENOM = 1_000_000;
uint256 internal constant PERIOD_SIZE = 1800;
Observation[] public observations;
address public immutable factory;
address public token0;
address public token1;
address public feeReceiver;
uint112 private reserve0;
uint112 private reserve1;
uint32 private blockTimestampLast;
uint256 public reserve0CumulativeLast;
uint256 public reserve1CumulativeLast;
uint256 public kLast;
uint256 public protocolFee;
uint256 public fee;
uint256 internal decimals0;
uint256 internal decimals1;
bool public stable;
string internal _apexName;
string internal _apexSymbol;
modifier onlyFactory() {
require(msg.sender == factory, ApexErrors.NOT_AUTHORIZED(msg.sender));
_;
}
constructor() ERC20("", "") {
factory = msg.sender;
}
function initialize(address token0_, address token1_, bool stable_) external onlyFactory {
token0 = token0_;
token1 = token1_;
stable = stable_;
string memory symbol0 = IERC20Metadata(token0_).symbol();
string memory symbol1 = IERC20Metadata(token1_).symbol();
if (stable_) {
_apexName = string.concat("Giga Stable AMM - ", symbol0, "/", symbol1);
_apexSymbol = string.concat("GIGA-sAMM-", symbol0, "/", symbol1);
} else {
_apexName = string.concat("Giga Volatile AMM - ", symbol0, "/", symbol1);
_apexSymbol = string.concat("GIGA-vAMM-", symbol0, "/", symbol1);
}
observations.push(Observation(block.timestamp, 0, 0));
decimals0 = 10 ** IERC20Metadata(token0_).decimals();
decimals1 = 10 ** IERC20Metadata(token1_).decimals();
}
function getReserves() public view returns (uint112 reserve0_, uint112 reserve1_, uint32 blockTimestampLast_) {
reserve0_ = reserve0;
reserve1_ = reserve1;
blockTimestampLast_ = blockTimestampLast;
}
function _safeTransfer(address token, address to, uint256 value) private {
require(token.code.length > 0);
(bool success, bytes memory data) = token.call(abi.encodeCall(IERC20.transfer, (to, value)));
if (!(success && (data.length == 0 || abi.decode(data, (bool))))) {
revert ApexErrors.SAFE_TRANSFER_FAILED();
}
}
function _update(uint256 balance0, uint256 balance1, uint112 reserve0_, uint112 reserve1_) private {
require(balance0 <= type(uint112).max && balance1 <= type(uint112).max, ApexErrors.OVERFLOW());
uint256 blockTimestamp = block.timestamp;
uint256 timeElapsed;
unchecked {
timeElapsed = blockTimestamp - uint256(blockTimestampLast);
if (timeElapsed > 0 && reserve0_ != 0 && reserve1_ != 0) {
reserve0CumulativeLast += reserve0_ * timeElapsed;
reserve1CumulativeLast += reserve1_ * timeElapsed;
}
}
Observation memory point = lastObservation();
timeElapsed = blockTimestamp - point.timestamp;
if (timeElapsed > PERIOD_SIZE) {
observations.push(Observation(blockTimestamp, reserve0CumulativeLast, reserve1CumulativeLast));
}
reserve0 = uint112(balance0);
reserve1 = uint112(balance1);
blockTimestampLast = uint32(blockTimestamp);
emit Sync(reserve0, reserve1);
}
function _mintFee(uint112 reserve0_, uint112 reserve1_) private returns (bool feeOn) {
address cachedFeeReceiver = feeReceiver;
uint256 cachedKLast = kLast;
feeOn = cachedFeeReceiver != address(0);
if (feeOn) {
uint256 cachedProtocolFee = protocolFee;
if (cachedKLast != 0) {
if (stable) {
uint256 k = _k(reserve0_, reserve1_);
if (k > cachedKLast) {
uint256 fourthRootE18 = Math.sqrt(Math.mulDiv(Math.sqrt(cachedKLast), 1e36, Math.sqrt(k)));
uint256 numerator = cachedProtocolFee * (1e18 - fourthRootE18) * 1e18;
uint256 denominator = (FEE_DENOM * 1e18) - (cachedProtocolFee * (1e18 - fourthRootE18));
uint256 feeAsLiquidity = (totalSupply() * numerator) / denominator / 1e18;
if (feeAsLiquidity > 0) {
_mint(cachedFeeReceiver, feeAsLiquidity);
}
}
} else {
uint256 rootK = Math.sqrt(_k(reserve0_, reserve1_));
uint256 rootKLast = Math.sqrt(cachedKLast);
if (rootK > rootKLast) {
uint256 diffK = rootK - rootKLast;
uint256 dueToProtocol = (diffK * cachedProtocolFee) / FEE_DENOM;
uint256 dueToLp = rootKLast + diffK - dueToProtocol;
uint256 feeAsLiquidity = (totalSupply() * dueToProtocol) / dueToLp;
if (feeAsLiquidity > 0) {
_mint(cachedFeeReceiver, feeAsLiquidity);
}
}
}
}
} else if (cachedKLast != 0) {
kLast = _k(reserve0, reserve1);
}
}
function mint(address to) external nonReentrant returns (uint256 liquidity) {
(uint112 reserve0_, uint112 reserve1_,) = getReserves();
uint256 balance0 = IERC20Metadata(token0).balanceOf(address(this));
uint256 balance1 = IERC20Metadata(token1).balanceOf(address(this));
uint256 amount0 = balance0 - reserve0_;
uint256 amount1 = balance1 - reserve1_;
bool feeOn = _mintFee(reserve0_, reserve1_);
uint256 totalSupply_ = totalSupply();
if (totalSupply_ == 0) {
liquidity = Math.sqrt(amount0 * amount1) - MINIMUM_LIQUIDITY;
_mint(address(0xdead), MINIMUM_LIQUIDITY);
if (stable) {
require(_k(amount0, amount1) >= MINIMUM_K, ApexErrors.K());
require(((amount0 * 1e18) / decimals0 == (amount1 * 1e18) / decimals1), ApexErrors.UNSTABLE_RATIO());
}
} else {
liquidity = Math.min((amount0 * totalSupply_) / reserve0_, (amount1 * totalSupply_) / reserve1_);
}
require(liquidity != 0, ApexErrors.INSUFFICIENT_LIQUIDITY_MINTED());
_mint(to, liquidity);
_update(balance0, balance1, reserve0_, reserve1_);
if (feeOn) kLast = _k(reserve0, reserve1);
emit Mint(msg.sender, amount0, amount1);
}
function burn(address to) external nonReentrant returns (uint256 amount0, uint256 amount1) {
(uint112 reserve0_, uint112 reserve1_,) = getReserves();
address token0_ = token0;
address token1_ = token1;
uint256 balance0 = IERC20Metadata(token0_).balanceOf(address(this));
uint256 balance1 = IERC20Metadata(token1_).balanceOf(address(this));
uint256 liquidity = balanceOf(address(this));
bool feeOn = _mintFee(reserve0_, reserve1_);
uint256 totalSupply_ = totalSupply();
amount0 = (liquidity * balance0) / totalSupply_;
amount1 = (liquidity * balance1) / totalSupply_;
require(amount0 != 0 && amount1 != 0, ApexErrors.INSUFFICIENT_LIQUIDITY_BURNED());
_burn(address(this), liquidity);
_safeTransfer(token0_, to, amount0);
_safeTransfer(token1_, to, amount1);
balance0 = IERC20Metadata(token0_).balanceOf(address(this));
balance1 = IERC20Metadata(token1_).balanceOf(address(this));
_update(balance0, balance1, reserve0_, reserve1_);
if (feeOn) kLast = _k(reserve0, reserve1);
emit Burn(msg.sender, amount0, amount1, to);
}
function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external nonReentrant {
require(amount0Out != 0 || amount1Out != 0, ApexErrors.INSUFFICIENT_OUTPUT_AMOUNT());
(uint112 reserve0_, uint112 reserve1_,) = getReserves();
require(amount0Out < reserve0_ && amount1Out < reserve1_, ApexErrors.INSUFFICIENT_LIQUIDITY());
uint256 amount0In;
uint256 amount1In;
uint256 balance0;
uint256 balance1;
{
address token0_ = token0;
address token1_ = token1;
require(to != token0_ && to != token1_, ApexErrors.INVALID_TRANSFER());
if (amount0Out > 0) _safeTransfer(token0_, to, amount0Out);
if (amount1Out > 0) _safeTransfer(token1_, to, amount1Out);
if (data.length > 0) {
IClassicPoolCallee(to).hook(msg.sender, amount0Out, amount1Out, data);
}
balance0 = IERC20Metadata(token0_).balanceOf(address(this));
balance1 = IERC20Metadata(token1_).balanceOf(address(this));
unchecked {
amount0In = balance0 > reserve0_ - amount0Out ? balance0 - (reserve0_ - amount0Out) : 0;
amount1In = balance1 > reserve1_ - amount1Out ? balance1 - (reserve1_ - amount1Out) : 0;
}
require(amount0In != 0 || amount1In != 0, ApexErrors.INSUFFICIENT_INPUT_AMOUNT());
uint256 balance0Adjusted = balance0 - ((amount0In * fee) / FEE_DENOM);
uint256 balance1Adjusted = balance1 - ((amount1In * fee) / FEE_DENOM);
require(_k(balance0Adjusted, balance1Adjusted) >= _k(reserve0_, reserve1_), ApexErrors.K());
}
_update(balance0, balance1, reserve0_, reserve1_);
emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
}
function skim(address to) external nonReentrant {
require(IClassicFactory(factory).skimEnabled(address(this)), ApexErrors.SKIM_DISABLED());
address token0_ = token0;
address token1_ = token1;
_safeTransfer(token0_, to, IERC20Metadata(token0_).balanceOf(address(this)) - reserve0);
_safeTransfer(token1_, to, IERC20Metadata(token1_).balanceOf(address(this)) - reserve1);
}
function sync() external nonReentrant {
_update(
IERC20Metadata(token0).balanceOf(address(this)),
IERC20Metadata(token1).balanceOf(address(this)),
reserve0,
reserve1
);
}
function setFeeReceiver(address feeReceiver_) external onlyFactory {
feeReceiver = feeReceiver_;
}
function setProtocolFee(uint256 protocolFee_) external onlyFactory {
protocolFee = protocolFee_;
}
function setFee(uint256 fee_) external onlyFactory {
fee = fee_;
}
function mintFee() external nonReentrant {
uint112 reserve0_ = reserve0;
uint112 reserve1_ = reserve1;
bool feeOn = _mintFee(reserve0_, reserve1_);
if (feeOn) kLast = _k(reserve0_, reserve1_);
}
function _k(uint256 x, uint256 y) internal view returns (uint256) {
if (stable) {
uint256 scaledX = (x * 1e18) / decimals0;
uint256 scaledY = (y * 1e18) / decimals1;
uint256 a = (scaledX * scaledY) / 1e18;
uint256 b = ((scaledX * scaledX) / 1e18) + ((scaledY * scaledY) / 1e18);
return (a * b) / 1e18;
}
return x * y;
}
function _f(uint256 x0, uint256 y) internal pure returns (uint256) {
return (x0 * ((((y * y) / 1e18) * y) / 1e18)) / 1e18 + (((((x0 * x0) / 1e18) * x0) / 1e18) * y) / 1e18;
}
function _d(uint256 x0, uint256 y) internal pure returns (uint256) {
return (3 * x0 * ((y * y) / 1e18)) / 1e18 + ((((x0 * x0) / 1e18) * x0) / 1e18);
}
function _getY(uint256 x0, uint256 xy, uint256 y) internal pure returns (uint256) {
for (uint256 i = 0; i < 255; ++i) {
uint256 yPrev = y;
uint256 k = _f(x0, y);
if (k < xy) {
uint256 dy = ((xy - k) * 1e18) / _d(x0, y);
y = y + dy;
} else {
uint256 dy = ((k - xy) * 1e18) / _d(x0, y);
y = y - dy;
}
if (y > yPrev) {
if (y - yPrev <= 1) return y;
} else {
if (yPrev - y <= 1) return y;
}
}
return y;
}
function getAmountOut(uint256 amountIn, address tokenIn) external view returns (uint256 amountOut) {
(uint256 reserve0_, uint256 reserve1_) = (reserve0, reserve1);
amountIn -= (amountIn * fee) / FEE_DENOM;
return _getAmountOut(amountIn, tokenIn, reserve0_, reserve1_) - 1;
}
function _getAmountOut(uint256 amountIn, address tokenIn, uint256 reserve0_, uint256 reserve1_)
internal
view
returns (uint256)
{
if (stable) {
uint256 xy = _k(reserve0_, reserve1_);
reserve0_ = (reserve0_ * 1e18) / decimals0;
reserve1_ = (reserve1_ * 1e18) / decimals1;
(uint256 stableReserveA, uint256 stableReserveB) =
tokenIn == token0 ? (reserve0_, reserve1_) : (reserve1_, reserve0_);
amountIn = tokenIn == token0 ? (amountIn * 1e18) / decimals0 : (amountIn * 1e18) / decimals1;
uint256 y = stableReserveB - _getY(amountIn + stableReserveA, xy, stableReserveB);
return (y * (tokenIn == token0 ? decimals1 : decimals0)) / 1e18;
}
(uint256 reserveA, uint256 reserveB) = tokenIn == token0 ? (reserve0_, reserve1_) : (reserve1_, reserve0_);
return (amountIn * reserveB) / (reserveA + amountIn);
}
function metadata()
external
view
returns (
uint256 decimals0_,
uint256 decimals1_,
uint256 reserve0_,
uint256 reserve1_,
bool stable_,
address token0_,
address token1_
)
{
return (decimals0, decimals1, reserve0, reserve1, stable, token0, token1);
}
function name() public view override returns (string memory) {
return _apexName;
}
function symbol() public view override returns (string memory) {
return _apexSymbol;
}
function observationLength() external view returns (uint256) {
return observations.length;
}
function lastObservation() public view returns (Observation memory) {
return observations[observations.length - 1];
}
function currentCumulativePrices()
public
view
returns (uint256 reserve0Cumulative, uint256 reserve1Cumulative, uint256 blockTimestamp)
{
blockTimestamp = block.timestamp;
reserve0Cumulative = reserve0CumulativeLast;
reserve1Cumulative = reserve1CumulativeLast;
(uint112 reserve0_, uint112 reserve1_, uint32 blockTimestampLast_) = getReserves();
if (blockTimestampLast_ != uint32(blockTimestamp)) {
uint256 timeElapsed = blockTimestamp - uint256(blockTimestampLast_);
reserve0Cumulative += reserve0_ * timeElapsed;
reserve1Cumulative += reserve1_ * timeElapsed;
}
}
function current(address tokenIn, uint256 amountIn) external view returns (uint256 amountOut) {
Observation memory observation = lastObservation();
(uint256 reserve0Cumulative, uint256 reserve1Cumulative,) = currentCumulativePrices();
if (block.timestamp == observation.timestamp) {
observation = observations[observations.length - 2];
}
uint256 timeElapsed = block.timestamp - observation.timestamp;
uint256 reserve0Average = (reserve0Cumulative - observation.reserve0Cumulative) / timeElapsed;
uint256 reserve1Average = (reserve1Cumulative - observation.reserve1Cumulative) / timeElapsed;
amountOut = _getAmountOut(amountIn, tokenIn, reserve0Average, reserve1Average);
}
function quote(address tokenIn, uint256 amountIn, uint256 granularity) external view returns (uint256 amountOut) {
uint256[] memory prices_ = sample(tokenIn, amountIn, granularity, 1);
uint256 priceAverageCumulative;
for (uint256 i = 0; i < prices_.length; ++i) {
priceAverageCumulative += prices_[i];
}
return priceAverageCumulative / granularity;
}
function prices(address tokenIn, uint256 amountIn, uint256 points) external view returns (uint256[] memory) {
return sample(tokenIn, amountIn, points, 1);
}
function sample(address tokenIn, uint256 amountIn, uint256 points, uint256 window)
public
view
returns (uint256[] memory)
{
uint256[] memory prices_ = new uint256[](points);
uint256 length = observations.length - 1;
uint256 i = length - (points * window);
uint256 nextIndex;
uint256 index;
for (; i < length; i += window) {
nextIndex = i + window;
uint256 timeElapsed = observations[nextIndex].timestamp - observations[i].timestamp;
uint256 reserve0Average =
(observations[nextIndex].reserve0Cumulative - observations[i].reserve0Cumulative) / timeElapsed;
uint256 reserve1Average =
(observations[nextIndex].reserve1Cumulative - observations[i].reserve1Cumulative) / timeElapsed;
prices_[index] = _getAmountOut(amountIn, tokenIn, reserve0Average, reserve1Average);
unchecked {
index = index + 1;
}
}
return prices_;
}
}[
{
"type": "constructor",
"inputs": [],
"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": "INSUFFICIENT_INPUT_AMOUNT",
"type": "error",
"inputs": []
},
{
"name": "INSUFFICIENT_LIQUIDITY",
"type": "error",
"inputs": []
},
{
"name": "INSUFFICIENT_LIQUIDITY_BURNED",
"type": "error",
"inputs": []
},
{
"name": "INSUFFICIENT_LIQUIDITY_MINTED",
"type": "error",
"inputs": []
},
{
"name": "INSUFFICIENT_OUTPUT_AMOUNT",
"type": "error",
"inputs": []
},
{
"name": "INVALID_TRANSFER",
"type": "error",
"inputs": []
},
{
"name": "K",
"type": "error",
"inputs": []
},
{
"name": "MathOverflowedMulDiv",
"type": "error",
"inputs": []
},
{
"name": "NOT_AUTHORIZED",
"type": "error",
"inputs": [
{
"name": "caller",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OVERFLOW",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SAFE_TRANSFER_FAILED",
"type": "error",
"inputs": []
},
{
"name": "SKIM_DISABLED",
"type": "error",
"inputs": []
},
{
"name": "UNSTABLE_RATIO",
"type": "error",
"inputs": []
},
{
"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": "Burn",
"type": "event",
"inputs": [
{
"name": "sender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount0",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amount1",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Mint",
"type": "event",
"inputs": [
{
"name": "sender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount0",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amount1",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Swap",
"type": "event",
"inputs": [
{
"name": "sender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount0In",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amount1In",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amount0Out",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "amount1Out",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Sync",
"type": "event",
"inputs": [
{
"name": "reserve0",
"type": "uint112",
"indexed": false,
"internalType": "uint112"
},
{
"name": "reserve1",
"type": "uint112",
"indexed": false,
"internalType": "uint112"
}
],
"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": "MINIMUM_LIQUIDITY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"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": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "burn",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "amount0",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount1",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "current",
"type": "function",
"inputs": [
{
"name": "tokenIn",
"type": "address",
"internalType": "address"
},
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "currentCumulativePrices",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "reserve0Cumulative",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "reserve1Cumulative",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "blockTimestamp",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "factory",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "fee",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "feeReceiver",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "getAmountOut",
"type": "function",
"inputs": [
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "tokenIn",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getReserves",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "reserve0_",
"type": "uint112",
"internalType": "uint112"
},
{
"name": "reserve1_",
"type": "uint112",
"internalType": "uint112"
},
{
"name": "blockTimestampLast_",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "initialize",
"type": "function",
"inputs": [
{
"name": "token0_",
"type": "address",
"internalType": "address"
},
{
"name": "token1_",
"type": "address",
"internalType": "address"
},
{
"name": "stable_",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "kLast",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lastObservation",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "timestamp",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "reserve0Cumulative",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "reserve1Cumulative",
"type": "uint256",
"internalType": "uint256"
}
],
"internalType": "struct ClassicPool.Observation"
}
],
"stateMutability": "view"
},
{
"name": "metadata",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "decimals0_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "decimals1_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "reserve0_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "reserve1_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "stable_",
"type": "bool",
"internalType": "bool"
},
{
"name": "token0_",
"type": "address",
"internalType": "address"
},
{
"name": "token1_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "mint",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "liquidity",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "mintFee",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "observationLength",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "observations",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "timestamp",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "reserve0Cumulative",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "reserve1Cumulative",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "prices",
"type": "function",
"inputs": [
{
"name": "tokenIn",
"type": "address",
"internalType": "address"
},
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "points",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "protocolFee",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "quote",
"type": "function",
"inputs": [
{
"name": "tokenIn",
"type": "address",
"internalType": "address"
},
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "granularity",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "amountOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "reserve0CumulativeLast",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "reserve1CumulativeLast",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "sample",
"type": "function",
"inputs": [
{
"name": "tokenIn",
"type": "address",
"internalType": "address"
},
{
"name": "amountIn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "points",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "window",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "setFee",
"type": "function",
"inputs": [
{
"name": "fee_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setFeeReceiver",
"type": "function",
"inputs": [
{
"name": "feeReceiver_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setProtocolFee",
"type": "function",
"inputs": [
{
"name": "protocolFee_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "skim",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "stable",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "swap",
"type": "function",
"inputs": [
{
"name": "amount0Out",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount1Out",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "sync",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "token0",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "token1",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"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"
}
]0x608060405234801561000f575f5ffd5b506004361061024a575f3560e01c8063787dce3d11610140578063bf944dbc116100bf578063ddca3f4311610084578063ddca3f43146105a9578063e4bbb5a8146105b2578063ebeb31db146105c5578063efdcd974146105cd578063f140a35a146105e0578063fff6cae9146105f3575f5ffd5b8063bf944dbc1461054a578063c245febc14610553578063c45a01551461055c578063d21220a714610583578063dd62ed3e14610596575f5ffd5b8063a9059cbb11610105578063a9059cbb146104ff578063b0e21e8a14610512578063b3f006741461051b578063ba9a7a561461052e578063bc25cf7714610537575f5ffd5b8063787dce3d1461047f57806389afcb44146104925780638a7b8cf2146104ba57806395d89b41146104e45780639e8cc04b146104ec575f5ffd5b806323b872dd116101cc5780635881c475116101915780635881c4751461041557806369fe0e2d146104285780636a6278421461043b57806370a082311461044e5780637464fc3d14610476575f5ffd5b806323b872dd14610362578063252c09d714610375578063313ce56714610388578063392f37e914610397578063517b3f8214610402575f5ffd5b806313345fe11161021257806313345fe1146102f857806313966db51461031857806318160ddd146103205780631df8c7171461033257806322be3de114610355575f5ffd5b8063022c0d9f1461024e57806306fdde03146102635780630902f1ac14610281578063095ea7b3146102b55780630dfe1681146102d8575b5f5ffd5b61026161025c366004612d21565b6105fb565b005b61026b6109cb565b6040516102789190612dad565b60405180910390f35b610289610a5b565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610278565b6102c86102c3366004612de2565b610a85565b6040519015158152602001610278565b6007546102eb906001600160a01b031681565b6040516102789190612e0a565b61030b610306366004612e1e565b610a9e565b6040516102789190612e54565b610261610c84565b6002545b604051908152602001610278565b61033a610ce5565b60408051938452602084019290925290820152606001610278565b6012546102c89060ff1681565b6102c8610370366004612e96565b610d6b565b61033a610383366004612ed0565b610d90565b60405160128152602001610278565b601054601154600a546012546007546008546040805196875260208701959095526001600160701b0380851695870195909552600160701b909304909316606085015260ff16151560808401526001600160a01b0391821660a08401521660c082015260e001610278565b610324610410366004612de2565b610dc1565b61030b610423366004612ee7565b610ea1565b610261610436366004612ed0565b610eb0565b610324610449366004612f17565b610f0a565b61032461045c366004612f17565b6001600160a01b03165f9081526020819052604090205490565b610324600d5481565b61026161048d366004612ed0565b611219565b6104a56104a0366004612f17565b61126a565b60408051928352602083019190915201610278565b6104c261157e565b6040805182518152602080840151908201529181015190820152606001610278565b61026b6115f8565b6103246104fa366004612ee7565b611607565b6102c861050d366004612de2565b611668565b610324600e5481565b6009546102eb906001600160a01b031681565b6103246103e881565b610261610545366004612f17565b611675565b610324600b5481565b610324600c5481565b6102eb7f0000000000000000000000006fdf38f92ead1adfc04b73aaa947ab254f6c091681565b6008546102eb906001600160a01b031681565b6103246105a4366004612f30565b611818565b610324600f5481565b6102616105c0366004612f6e565b611842565b600654610324565b6102616105db366004612f17565b611bec565b6103246105ee366004612fb2565b611c5a565b610261611cbe565b610603611dcc565b8415158061061057508315155b61062d576040516309f7208b60e21b815260040160405180910390fd5b5f5f610637610a5b565b5091509150816001600160701b03168710801561065c5750806001600160701b031686105b6106795760405163827e7b7f60e01b815260040160405180910390fd5b6007546008545f918291829182916001600160a01b0391821691908116908b1682148015906106ba5750806001600160a01b03168b6001600160a01b031614155b6106d757604051630de2b4ad60e31b815260040160405180910390fd5b8c156106e8576106e8828c8f611df6565b8b156106f9576106f9818c8e611df6565b8815610761578a6001600160a01b0316639a7bff79338f8f8e8e6040518663ffffffff1660e01b8152600401610733959493929190612fd3565b5f604051808303815f87803b15801561074a575f5ffd5b505af115801561075c573d5f5f3e3d5ffd5b505050505b6040516370a0823160e01b81526001600160a01b038316906370a082319061078d903090600401612e0a565b602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cc919061301e565b6040516370a0823160e01b81529094506001600160a01b038216906370a08231906107fb903090600401612e0a565b602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a919061301e565b92508c886001600160701b0316038411610854575f610863565b8c886001600160701b03160384035b95508b876001600160701b031603831161087d575f61088c565b8b876001600160701b03160383035b94508515158061089b57508415155b6108b85760405163367e619960e11b815260040160405180910390fd5b5f620f4240600f54886108cb9190613049565b6108d59190613074565b6108df9086613093565b90505f620f4240600f54886108f49190613049565b6108fe9190613074565b6109089086613093565b90506109268a6001600160701b03168a6001600160701b0316611ee9565b6109308383611ee9565b101561094f5760405163a932492f60e01b815260040160405180910390fd5b5050505061095f82828888611fd6565b60408051858152602081018590529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a35050505050506109c46001600555565b5050505050565b6060601380546109da906130a6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a06906130a6565b8015610a515780601f10610a2857610100808354040283529160200191610a51565b820191905f5260205f20905b815481529060010190602001808311610a3457829003601f168201915b5050505050905090565b600a546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b5f33610a928185856121e2565b60019150505b92915050565b60605f836001600160401b03811115610ab957610ab96130de565b604051908082528060200260200182016040528015610ae2578160200160208202803683370190505b506006549091505f90610af790600190613093565b90505f610b048587613049565b610b0e9083613093565b90505f5f5b83831015610c7457610b2587846130f2565b91505f60068481548110610b3b57610b3b613105565b905f5260205f2090600302015f015460068481548110610b5d57610b5d613105565b905f5260205f2090600302015f0154610b769190613093565b90505f8160068681548110610b8d57610b8d613105565b905f5260205f2090600302016001015460068681548110610bb057610bb0613105565b905f5260205f20906003020160010154610bca9190613093565b610bd49190613074565b90505f8260068781548110610beb57610beb613105565b905f5260205f2090600302016002015460068781548110610c0e57610c0e613105565b905f5260205f20906003020160020154610c289190613093565b610c329190613074565b9050610c408c8e84846121f4565b888581518110610c5257610c52613105565b6020908102919091010152505050600101610c6d87846130f2565b9250610b13565b509293505050505b949350505050565b610c8c611dcc565b600a546001600160701b0380821691600160701b9004165f610cae8383612392565b90508015610cd657610cd2836001600160701b0316836001600160701b0316611ee9565b600d555b505050610ce36001600555565b565b600b54600c54425f8080610cf7610a5b565b9250925092508363ffffffff168163ffffffff1614610d63575f610d2163ffffffff831686613093565b9050610d36816001600160701b038616613049565b610d4090886130f2565b9650610d55816001600160701b038516613049565b610d5f90876130f2565b9550505b505050909192565b5f33610d788582856125bf565b610d8385858561260f565b60019150505b9392505050565b60068181548110610d9f575f80fd5b5f91825260209091206003909102018054600182015460029092015490925083565b5f5f610dcb61157e565b90505f5f610dd7610ce5565b50845191935091504203610e3c5760068054610df590600290613093565b81548110610e0557610e05613105565b905f5260205f2090600302016040518060600160405290815f82015481526020016001820154815260200160028201548152505092505b82515f90610e4a9042613093565b90505f81856020015185610e5e9190613093565b610e689190613074565b90505f82866040015185610e7c9190613093565b610e869190613074565b9050610e94888a84846121f4565b9998505050505050505050565b6060610c7c8484846001610a9e565b336001600160a01b037f0000000000000000000000006fdf38f92ead1adfc04b73aaa947ab254f6c0916168114610f0457604051632bc10c3360e01b8152600401610efb9190612e0a565b60405180910390fd5b50600f55565b5f610f13611dcc565b5f5f610f1d610a5b565b506007546040516370a0823160e01b81529294509092505f916001600160a01b03909116906370a0823190610f56903090600401612e0a565b602060405180830381865afa158015610f71573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f95919061301e565b6008546040516370a0823160e01b81529192505f916001600160a01b03909116906370a0823190610fca903090600401612e0a565b602060405180830381865afa158015610fe5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611009919061301e565b90505f61101f6001600160701b03861684613093565b90505f6110356001600160701b03861684613093565b90505f6110428787612392565b90505f61104e60025490565b9050805f03611120576103e861106c6110678587613049565b61266c565b6110769190613093565b985061108661dead6103e8612750565b60125460ff161561111b57633b9aca006110a08585611ee9565b10156110bf5760405163a932492f60e01b815260040160405180910390fd5b6011546110d484670de0b6b3a7640000613049565b6110de9190613074565b6010546110f386670de0b6b3a7640000613049565b6110fd9190613074565b1461111b57604051631bca023d60e31b815260040160405180910390fd5b611167565b6111646001600160701b0389166111378387613049565b6111419190613074565b6001600160701b0389166111558487613049565b61115f9190613074565b612788565b98505b885f03611187576040516314e13d6d60e31b815260040160405180910390fd5b6111918a8a612750565b61119d86868a8a611fd6565b81156111c757600a546111c3906001600160701b0380821691600160701b900416611ee9565b600d555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250505050505050506112146001600555565b919050565b336001600160a01b037f0000000000000000000000006fdf38f92ead1adfc04b73aaa947ab254f6c091616811461126457604051632bc10c3360e01b8152600401610efb9190612e0a565b50600e55565b5f5f611274611dcc565b5f5f61127e610a5b565b506007546008546040516370a0823160e01b81529395509193506001600160a01b03908116929116905f9083906370a08231906112bf903090600401612e0a565b602060405180830381865afa1580156112da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fe919061301e565b90505f826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161132d9190612e0a565b602060405180830381865afa158015611348573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136c919061301e565b305f908152602081905260408120549192506113888888612392565b90505f61139460025490565b9050806113a18685613049565b6113ab9190613074565b9a50806113b88585613049565b6113c29190613074565b99508a158015906113d257508915155b6113ef5760405163ca7551f760e01b815260040160405180910390fd5b6113f9308461279d565b611404878d8d611df6565b61140f868d8c611df6565b6040516370a0823160e01b81526001600160a01b038816906370a082319061143b903090600401612e0a565b602060405180830381865afa158015611456573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147a919061301e565b6040516370a0823160e01b81529095506001600160a01b038716906370a08231906114a9903090600401612e0a565b602060405180830381865afa1580156114c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e8919061301e565b93506114f685858b8b611fd6565b811561152057600a5461151c906001600160701b0380821691600160701b900416611ee9565b600d555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506115796001600555565b915091565b61159f60405180606001604052805f81526020015f81526020015f81525090565b600680546115af90600190613093565b815481106115bf576115bf613105565b905f5260205f2090600302016040518060600160405290815f820154815260200160018201548152602001600282015481525050905090565b6060601480546109da906130a6565b5f5f6116168585856001610a9e565b90505f805b82518110156116535782818151811061163657611636613105565b60200260200101518261164991906130f2565b915060010161161b565b5061165e8482613074565b9695505050505050565b5f33610a9281858561260f565b61167d611dcc565b6040516334ad98e160e21b81526001600160a01b037f0000000000000000000000006fdf38f92ead1adfc04b73aaa947ab254f6c0916169063d2b66384906116c9903090600401612e0a565b602060405180830381865afa1580156116e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117089190613119565b61172557604051635712a7b360e11b815260040160405180910390fd5b600754600854600a546040516370a0823160e01b81526001600160a01b0393841693909216916117c191849186916001600160701b03169083906370a0823190611773903090600401612e0a565b602060405180830381865afa15801561178e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b2919061301e565b6117bc9190613093565b611df6565b600a546040516370a0823160e01b81526118099183918691600160701b90046001600160701b0316906001600160a01b038416906370a0823190611773903090600401612e0a565b50506118156001600555565b50565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b336001600160a01b037f0000000000000000000000006fdf38f92ead1adfc04b73aaa947ab254f6c091616811461188d57604051632bc10c3360e01b8152600401610efb9190612e0a565b50600780546001600160a01b038086166001600160a01b0319928316811790935560088054918616919092161790556012805483151560ff19909116179055604080516395d89b4160e01b815290515f92916395d89b4191600480830192869291908290030181865afa158015611906573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261192d9190810190613134565b90505f836001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa15801561196b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119929190810190613134565b90508215611a015781816040516020016119ad9291906131fb565b604051602081830303815290604052601390816119ca919061328b565b5081816040516020016119de929190613345565b604051602081830303815290604052601490816119fb919061328b565b50611a64565b8181604051602001611a14929190613363565b60405160208183030381529060405260139081611a31919061328b565b508181604051602001611a4592919061338b565b60405160208183030381529060405260149081611a62919061328b565b505b604080516060810182524281525f602080830182815283850183815260068054600181018255945293517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600390940293840155517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4083015591517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4190910155815163313ce56760e01b815291516001600160a01b0388169263313ce5679260048083019391928290030181865afa158015611b42573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6691906133a9565b611b7190600a6134ac565b601081905550836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bb3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd791906133a9565b611be290600a6134ac565b6011555050505050565b336001600160a01b037f0000000000000000000000006fdf38f92ead1adfc04b73aaa947ab254f6c0916168114611c3757604051632bc10c3360e01b8152600401610efb9190612e0a565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b600a54600f545f916001600160701b0380821692600160701b9092041690620f424090611c879087613049565b611c919190613074565b611c9b9086613093565b94506001611cab868685856121f4565b611cb59190613093565b95945050505050565b611cc6611dcc565b6007546040516370a0823160e01b8152611dc2916001600160a01b0316906370a0823190611cf8903090600401612e0a565b602060405180830381865afa158015611d13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d37919061301e565b6008546040516370a0823160e01b81526001600160a01b03909116906370a0823190611d67903090600401612e0a565b602060405180830381865afa158015611d82573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da6919061301e565b600a546001600160701b0380821691600160701b900416611fd6565b610ce36001600555565b600260055403611def57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b5f836001600160a01b03163b11611e0b575f5ffd5b6040516001600160a01b038381166024830152604482018390525f91829186169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b17905251611e6491906134ba565b5f604051808303815f865af19150503d805f8114611e9d576040519150601f19603f3d011682016040523d82523d5f602084013e611ea2565b606091505b5091509150818015611ecc575080511580611ecc575080806020019051810190611ecc9190613119565b6109c4576040516355ee504b60e01b815260040160405180910390fd5b6012545f9060ff1615611fcc576010545f90611f0d85670de0b6b3a7640000613049565b611f179190613074565b90505f60115484670de0b6b3a7640000611f319190613049565b611f3b9190613074565b90505f670de0b6b3a7640000611f518385613049565b611f5b9190613074565b90505f670de0b6b3a7640000611f718480613049565b611f7b9190613074565b670de0b6b3a7640000611f8e8680613049565b611f989190613074565b611fa291906130f2565b9050670de0b6b3a7640000611fb78284613049565b611fc19190613074565b945050505050610a98565b610d898284613049565b6001600160701b038411801590611ff457506001600160701b038311155b612011576040516395a5c7f960e01b815260040160405180910390fd5b600a544290600160e01b900463ffffffff1680820390821480159061203e57506001600160701b03841615155b801561205257506001600160701b03831615155b1561207d57600b80546001600160701b038681168402909101909155600c8054918516830290910190555b5f61208661157e565b80519091506120959084613093565b91506107088211156121495760408051606081018252848152600b5460208201908152600c54928201928352600680546001810182555f9190915291517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f600390930292830155517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4082015590517ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d41909101555b600a805463ffffffff8516600160e01b026001600160e01b036001600160701b038a8116600160701b9081026001600160e01b03199095168d83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a150505050505050565b6121ef83838360016127d1565b505050565b6012545f9060ff1615612341575f61220c8484611ee9565b60105490915061222485670de0b6b3a7640000613049565b61222e9190613074565b60115490945061224684670de0b6b3a7640000613049565b6122509190613074565b6007549093505f9081906001600160a01b03888116911614612273578486612276565b85855b60075491935091506001600160a01b038881169116146122b4576011546122a589670de0b6b3a7640000613049565b6122af9190613074565b6122d3565b6010546122c989670de0b6b3a7640000613049565b6122d39190613074565b97505f6122ea6122e3848b6130f2565b85846128a3565b6122f49083613093565b600754909150670de0b6b3a7640000906001600160a01b038a811691161461231e57601054612322565b6011545b61232c9083613049565b6123369190613074565b945050505050610c7c565b6007545f9081906001600160a01b03878116911614612361578385612364565b84845b909250905061237387836130f2565b61237d8289613049565b6123879190613074565b979650505050505050565b600954600d546001600160a01b0390911680158015929061258d57600e5481156125875760125460ff16156124d7575f6123de876001600160701b0316876001600160701b0316611ee9565b9050828111156124d1575f6124166110676123f88661266c565b6ec097ce7bc90715b34b9f10000000006124118661266c565b6129a3565b90505f61242b82670de0b6b3a7640000613093565b6124359085613049565b61244790670de0b6b3a7640000613049565b90505f61245c83670de0b6b3a7640000613093565b6124669086613049565b61247b620f4240670de0b6b3a7640000613049565b6124859190613093565b90505f670de0b6b3a7640000828461249c60025490565b6124a69190613049565b6124b09190613074565b6124ba9190613074565b905080156124cc576124cc8882612750565b505050505b50612587565b5f6124f7611067886001600160701b0316886001600160701b0316611ee9565b90505f6125038461266c565b905080821115612584575f6125188284613093565b90505f620f42406125298684613049565b6125339190613074565b90505f8161254184866130f2565b61254b9190613093565b90505f818361255960025490565b6125639190613049565b61256d9190613074565b9050801561257f5761257f8982612750565b505050505b50505b506125b7565b80156125b757600a546125b3906001600160701b0380821691600160701b900416611ee9565b600d555b505092915050565b5f6125ca8484611818565b90505f19811461260957818110156125fb57828183604051637dc7a0d960e11b8152600401610efb939291906134c5565b61260984848484035f6127d1565b50505050565b6001600160a01b038316612638575f604051634b637e8f60e11b8152600401610efb9190612e0a565b6001600160a01b038216612661575f60405163ec442f0560e01b8152600401610efb9190612e0a565b6121ef838383612a62565b5f815f0361267b57505f919050565b5f600161268784612b75565b901c6001901b905060018184816126a0576126a0613060565b048201901c905060018184816126b8576126b8613060565b048201901c905060018184816126d0576126d0613060565b048201901c905060018184816126e8576126e8613060565b048201901c9050600181848161270057612700613060565b048201901c9050600181848161271857612718613060565b048201901c9050600181848161273057612730613060565b048201901c9050610d898182858161274a5761274a613060565b04612788565b6001600160a01b038216612779575f60405163ec442f0560e01b8152600401610efb9190612e0a565b6127845f8383612a62565b5050565b5f8183106127965781610d89565b5090919050565b6001600160a01b0382166127c6575f604051634b637e8f60e11b8152600401610efb9190612e0a565b612784825f83612a62565b6001600160a01b0384166127fa575f60405163e602df0560e01b8152600401610efb9190612e0a565b6001600160a01b038316612823575f604051634a1406b160e11b8152600401610efb9190612e0a565b6001600160a01b038085165f908152600160209081526040808320938716835292905220829055801561260957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161289591815260200190565b60405180910390a350505050565b5f805b60ff81101561299a57825f6128bb8783612c08565b90508581101561290a575f6128d08887612ca4565b6128da8389613093565b6128ec90670de0b6b3a7640000613049565b6128f69190613074565b905061290281876130f2565b95505061294b565b5f6129158887612ca4565b61291f8884613093565b61293190670de0b6b3a7640000613049565b61293b9190613074565b90506129478187613093565b9550505b8185111561297457600161295f8387613093565b1161296f57849350505050610d89565b612990565b60016129808684613093565b1161299057849350505050610d89565b50506001016128a6565b50909392505050565b5f838302815f1985870982811083820303915050805f036129d7578382816129cd576129cd613060565b0492505050610d89565b8084116129f75760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6001600160a01b038316612a8c578060025f828254612a8191906130f2565b90915550612ae99050565b6001600160a01b0383165f9081526020819052604090205481811015612acb5783818360405163391434e360e21b8152600401610efb939291906134c5565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216612b0557600280548290039055612b23565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b6891815260200190565b60405180910390a3505050565b5f80608083901c15612b8957608092831c92015b604083901c15612b9b57604092831c92015b602083901c15612bad57602092831c92015b601083901c15612bbf57601092831c92015b600883901c15612bd157600892831c92015b600483901c15612be357600492831c92015b600283901c15612bf557600292831c92015b600183901c15610a985760010192915050565b5f670de0b6b3a764000082818581612c208280613049565b612c2a9190613074565b612c349190613049565b612c3e9190613074565b612c489190613049565b612c529190613074565b670de0b6b3a7640000808481612c688280613049565b612c729190613074565b612c7c9190613049565b612c869190613074565b612c909086613049565b612c9a9190613074565b610d8991906130f2565b5f670de0b6b3a76400008381612cba8280613049565b612cc49190613074565b612cce9190613049565b612cd89190613074565b670de0b6b3a764000080612cec8580613049565b612cf69190613074565b612d01866003613049565b612c909190613049565b80356001600160a01b0381168114611214575f5ffd5b5f5f5f5f5f60808688031215612d35575f5ffd5b8535945060208601359350612d4c60408701612d0b565b925060608601356001600160401b03811115612d66575f5ffd5b8601601f81018813612d76575f5ffd5b80356001600160401b03811115612d8b575f5ffd5b886020828401011115612d9c575f5ffd5b959894975092955050506020019190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215612df3575f5ffd5b612dfc83612d0b565b946020939093013593505050565b6001600160a01b0391909116815260200190565b5f5f5f5f60808587031215612e31575f5ffd5b612e3a85612d0b565b966020860135965060408601359560600135945092505050565b602080825282518282018190525f918401906040840190835b81811015612e8b578351835260209384019390920191600101612e6d565b509095945050505050565b5f5f5f60608486031215612ea8575f5ffd5b612eb184612d0b565b9250612ebf60208501612d0b565b929592945050506040919091013590565b5f60208284031215612ee0575f5ffd5b5035919050565b5f5f5f60608486031215612ef9575f5ffd5b612f0284612d0b565b95602085013595506040909401359392505050565b5f60208284031215612f27575f5ffd5b610d8982612d0b565b5f5f60408385031215612f41575f5ffd5b612f4a83612d0b565b9150612f5860208401612d0b565b90509250929050565b8015158114611815575f5ffd5b5f5f5f60608486031215612f80575f5ffd5b612f8984612d0b565b9250612f9760208501612d0b565b91506040840135612fa781612f61565b809150509250925092565b5f5f60408385031215612fc3575f5ffd5b82359150612f5860208401612d0b565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f6020828403121561302e575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a9857610a98613035565b634e487b7160e01b5f52601260045260245ffd5b5f8261308e57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610a9857610a98613035565b600181811c908216806130ba57607f821691505b6020821081036130d857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b80820180821115610a9857610a98613035565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613129575f5ffd5b8151610d8981612f61565b5f60208284031215613144575f5ffd5b81516001600160401b03811115613159575f5ffd5b8201601f81018413613169575f5ffd5b80516001600160401b03811115613182576131826130de565b604051601f8201601f19908116603f011681016001600160401b03811182821017156131b0576131b06130de565b6040528181528282016020018610156131c7575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b71023b4b3b09029ba30b136329020a6a69016960751b81525f61322160128301856131e4565b602f60f81b8152611cb560018201856131e4565b601f8211156121ef57828211156121ef57805f5260205f20601f840160051c602085101561326057505f5b90810190601f840160051c035f5b81811015613283575f8382015560010161326e565b505050505050565b81516001600160401b038111156132a4576132a46130de565b6132b8816132b284546130a6565b84613235565b6020601f8211600181146132ea575f83156132d35750848201515b5f19600385901b1c1916600184901b1784556109c4565b5f84815260208120601f198516915b8281101561331957878501518255602094850194600190920191016132f9565b508482101561333657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b69474947412d73414d4d2d60b01b81525f613221600a8301856131e4565b73023b4b3b0902b37b630ba34b6329020a6a69016960651b81525f61322160148301856131e4565b69474947412d76414d4d2d60b01b81525f613221600a8301856131e4565b5f602082840312156133b9575f5ffd5b815160ff81168114610d89575f5ffd5b6001815b6001841115613404578085048111156133e8576133e8613035565b60018416156133f657908102905b60019390931c9280026133cd565b935093915050565b5f8261341a57506001610a98565b8161342657505f610a98565b816001811461343c576002811461344657613462565b6001915050610a98565b60ff84111561345757613457613035565b50506001821b610a98565b5060208310610133831016604e8410600b8410161715613485575081810a610a98565b6134915f1984846133c9565b805f19048211156134a4576134a4613035565b029392505050565b5f610d8960ff84168361340c565b5f610d8982846131e4565b6001600160a01b03939093168352602083019190915260408201526060019056fea164736f6c6343000823000a
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x7a1d44…967638 | 1 hr agoMon, 17 Aug 2026 23:58:20 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…cc94a2a5 |
| 0x7a1d44…967638 | 1 hr agoMon, 17 Aug 2026 23:58:20 UTC | Sync | data: 0x000000000000000000…0ead4ab6 |
| 0x860504…99abc3 | 3 hrs agoMon, 17 Aug 2026 21:38:54 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…00000000 |
| 0x860504…99abc3 | 3 hrs agoMon, 17 Aug 2026 21:38:54 UTC | Sync | data: 0x000000000000000000…db41ed5b |
| 0x947541…069f38 | 6 hrs agoMon, 17 Aug 2026 18:32:21 UTC | Swap | [0] 0x000000000000…152e326a [1] 0x000000000000…152e326a data: 0x000000000000000000…00000000 |
| 0x947541…069f38 | 6 hrs agoMon, 17 Aug 2026 18:32:21 UTC | Sync | data: 0x000000000000000000…e216eae6 |
| 0xcb2b04…b52a3f | 6 hrs agoMon, 17 Aug 2026 18:24:55 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…00000000 |
| 0xcb2b04…b52a3f | 6 hrs agoMon, 17 Aug 2026 18:24:55 UTC | Sync | data: 0x000000000000000000…74e0eae6 |
| 0x43ceee…080347 | 8 hrs agoMon, 17 Aug 2026 16:12:21 UTC | Swap | [0] 0x000000000000…152e326a [1] 0x000000000000…152e326a data: 0x000000000000000000…81fe401d |
| 0x43ceee…080347 | 8 hrs agoMon, 17 Aug 2026 16:12:21 UTC | Sync | data: 0x000000000000000000…00de7345 |
| 0x0e2ade…0c6ba2 | 9 hrs agoMon, 17 Aug 2026 15:40:01 UTC | Swap | [0] 0x000000000000…b2f5e8b6 [1] 0x000000000000…b2f5e8b6 data: 0x000000000000000000…00000000 |
| 0x0e2ade…0c6ba2 | 9 hrs agoMon, 17 Aug 2026 15:40:01 UTC | Sync | data: 0x000000000000000000…82dcb362 |
| 0xa00237…d274ce | 10 hrs agoMon, 17 Aug 2026 14:29:40 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…15b94018 |
| 0xa00237…d274ce | 10 hrs agoMon, 17 Aug 2026 14:29:40 UTC | Sync | data: 0x000000000000000000…8ca3ea14 |
| 0x9c7884…b23a04 | 13 hrs agoMon, 17 Aug 2026 11:35:44 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…00000000 |
| 0x9c7884…b23a04 | 13 hrs agoMon, 17 Aug 2026 11:35:44 UTC | Sync | data: 0x000000000000000000…a25d2a2c |
| 0x4b06c0…14fca3 | 14 hrs agoMon, 17 Aug 2026 10:21:56 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…ac11b898 |
| 0x4b06c0…14fca3 | 14 hrs agoMon, 17 Aug 2026 10:21:56 UTC | Sync | data: 0x000000000000000000…a5461d8b |
| 0xd40dcd…8afcc5 | 20 hrs agoMon, 17 Aug 2026 05:01:18 UTC | Swap | [0] 0x000000000000…d113f996 [1] 0x000000000000…d113f996 data: 0x000000000000000000…00000000 |
| 0xd40dcd…8afcc5 | 20 hrs agoMon, 17 Aug 2026 05:01:18 UTC | Sync | data: 0x000000000000000000…5157d623 |
| 0x937ea8…771ec5 | 20 hrs agoMon, 17 Aug 2026 04:39:45 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…00000000 |
| 0x937ea8…771ec5 | 20 hrs agoMon, 17 Aug 2026 04:39:45 UTC | Sync | data: 0x000000000000000000…40dd9623 |
| 0x13385a…1157b0 | 1 day agoMon, 17 Aug 2026 01:00:00 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…eb2eecff |
| 0x13385a…1157b0 | 1 day agoMon, 17 Aug 2026 01:00:00 UTC | Sync | data: 0x000000000000000000…34004247 |
| 0x46af54…840195 | 1 day agoSun, 16 Aug 2026 23:22:24 UTC | Swap | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…20cbbe5f data: 0x000000000000000000…724fdb86 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x36b651…4310d4 | Approve | 35,657,439 | 4 days agoThu, 13 Aug 2026 19:54:24 UTC | 0xf8af…5029 | IN | Giga Volatile AMM - CASHCAT/WETH | $0.000 ETH | 0.00000207 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x7a1d4421…967638 | Transfer | 39,249,653 | 1 hr agoMon, 17 Aug 2026 23:58:20 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | 0.000099 WETH | WETH (WETH) | |
| 0x7a1d4421…967638 | Transfer | 39,249,653 | 1 hr agoMon, 17 Aug 2026 23:58:20 UTC | 0x39b3…be5f | IN | 0xb5d9…fe64 | $0.221.704297 CASHCAT | ||
| 0x91f57fd9…f8f0c8 | Transfer | 39,169,511 | 3 hrs agoMon, 17 Aug 2026 21:44:31 UTC | 0x602e…7bd0 | IN | 0xb5d9…fe64 | 1 USDG | Global Dollar (USDG) | |
| 0x860504a4…99abc3 | Transfer | 39,166,153 | 3 hrs agoMon, 17 Aug 2026 21:38:54 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | $0.141.102829 CASHCAT | ||
| 0x860504a4…99abc3 | Transfer | 39,166,153 | 3 hrs agoMon, 17 Aug 2026 21:38:54 UTC | 0x39b3…be5f | IN | 0xb5d9…fe64 | 0.000065 WETH | WETH (WETH) | |
| 0x947541a5…069f38 | Transfer | 39,054,575 | 6 hrs agoMon, 17 Aug 2026 18:32:21 UTC | 0xb5d9…fe64 | OUT | 0x4afc…326a | $0.292.282586 CASHCAT | ||
| 0x947541a5…069f38 | Transfer | 39,054,575 | 6 hrs agoMon, 17 Aug 2026 18:32:21 UTC | 0x4afc…326a | IN | 0xb5d9…fe64 | 0.000129 WETH | WETH (WETH) | |
| 0xcb2b045a…b52a3f | Transfer | 39,050,130 | 6 hrs agoMon, 17 Aug 2026 18:24:55 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | $0.302.328492 CASHCAT | ||
| 0xcb2b045a…b52a3f | Transfer | 39,050,130 | 6 hrs agoMon, 17 Aug 2026 18:24:55 UTC | 0x39b3…be5f | IN | 0xb5d9…fe64 | 0.000124 WETH | WETH (WETH) | |
| 0x43ceee81…080347 | Transfer | 38,970,778 | 8 hrs agoMon, 17 Aug 2026 16:12:21 UTC | 0xb5d9…fe64 | OUT | 0x4afc…326a | 0.000138 WETH | WETH (WETH) | |
| 0x43ceee81…080347 | Transfer | 38,970,778 | 8 hrs agoMon, 17 Aug 2026 16:12:21 UTC | 0x4afc…326a | IN | 0xb5d9…fe64 | $0.342.603502 CASHCAT | ||
| 0x0e2ade97…0c6ba2 | Transfer | 38,951,416 | 9 hrs agoMon, 17 Aug 2026 15:40:01 UTC | 0xb5d9…fe64 | OUT | 0x2b5f…e8b6 | $0.191.452479 CASHCAT | ||
| 0x0e2ade97…0c6ba2 | Transfer | 38,951,416 | 9 hrs agoMon, 17 Aug 2026 15:40:01 UTC | 0x2b5f…e8b6 | IN | 0xb5d9…fe64 | 0.000078 WETH | WETH (WETH) | |
| 0xa002377f…d274ce | Transfer | 38,909,252 | 10 hrs agoMon, 17 Aug 2026 14:29:40 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | 0.000132 WETH | WETH (WETH) | |
| 0xa002377f…d274ce | Transfer | 38,909,252 | 10 hrs agoMon, 17 Aug 2026 14:29:40 UTC | 0x39b3…be5f | IN | 0xb5d9…fe64 | $0.312.417838 CASHCAT | ||
| 0x9c788411…b23a04 | Transfer | 38,805,094 | 13 hrs agoMon, 17 Aug 2026 11:35:44 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | $0.312.413810 CASHCAT | ||
| 0x9c788411…b23a04 | Transfer | 38,805,094 | 13 hrs agoMon, 17 Aug 2026 11:35:44 UTC | 0x39b3…be5f | IN | 0xb5d9…fe64 | 0.000132 WETH | WETH (WETH) | |
| 0x4b06c03b…14fca3 | Transfer | 38,760,987 | 14 hrs agoMon, 17 Aug 2026 10:21:56 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | 0.000125 WETH | WETH (WETH) | |
| 0x4b06c03b…14fca3 | Transfer | 38,760,987 | 14 hrs agoMon, 17 Aug 2026 10:21:56 UTC | 0x39b3…be5f | IN | 0xb5d9…fe64 | $0.302.289667 CASHCAT | ||
| 0xd40dcdcd…8afcc5 | Transfer | 38,569,373 | 20 hrs agoMon, 17 Aug 2026 05:01:18 UTC | 0xb5d9…fe64 | OUT | 0x8f10…f996 | $0.231.807561 CASHCAT | ||
| 0xd40dcdcd…8afcc5 | Transfer | 38,569,373 | 20 hrs agoMon, 17 Aug 2026 05:01:18 UTC | 0x8f10…f996 | IN | 0xb5d9…fe64 | 0.0001 WETH | WETH (WETH) | |
| 0x937ea828…771ec5 | Transfer | 38,556,496 | 20 hrs agoMon, 17 Aug 2026 04:39:45 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | $0.352.677038 CASHCAT | ||
| 0x937ea828…771ec5 | Transfer | 38,556,496 | 20 hrs agoMon, 17 Aug 2026 04:39:45 UTC | 0x39b3…be5f | IN | 0xb5d9…fe64 | 0.000139 WETH | WETH (WETH) | |
| 0x8023b82d…db564a | Transfer | 38,441,186 | 23 hrs agoMon, 17 Aug 2026 01:26:50 UTC | 0xf8e0…c306 | IN | 0xb5d9…fe64 | 5 ZSWAP | ZygoSwap (ZSWAP) | |
| 0x13385a5d…1157b0 | Transfer | 38,425,146 | 1 day agoMon, 17 Aug 2026 01:00:00 UTC | 0xb5d9…fe64 | OUT | 0x39b3…be5f | 0.000213 WETH | WETH (WETH) |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 10,450,396 | 33 days agoWed, 15 Jul 2026 14:04:11 UTC | 0xed7e78…0631f4 | CREATE2 | addLiquidity | 0x6fdf…0916 | IN | 0xb5d9…fe64 | 0 ETH |