S Price: $0.813684 (-4.32%)

Contract

0x161b091fB5c89A4dB69f65fBdFBf281e7A6C2831

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Lock Liquidity96603652025-02-23 22:05:5617 hrs ago1740348356IN
0x161b091f...e7A6C2831
0 S0.0025944955.01
Lock Liquidity96598522025-02-23 22:02:5617 hrs ago1740348176IN
0x161b091f...e7A6C2831
0 S0.0014224455.01

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniV3LiquidityLocker

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at SonicScan.org on 2025-02-23
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IERC721 {
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function ownerOf(uint256 tokenId) external view returns (address);
    function approve(address to, uint256 tokenId) external;
}

abstract contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        _transferOwnership(initialOwner);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface INonfungiblePositionManager is IERC721 {
}

contract UniV3LiquidityLocker is Ownable {
    INonfungiblePositionManager public immutable uniswapV3NFT;
    
    struct LockedPosition {
        address owner;
        uint256 unlockTime;
    }
    
    mapping(uint256 => LockedPosition) public lockedPositions;
    
    event LiquidityLocked(address indexed user, uint256 indexed tokenId, uint256 unlockTime);
    event LiquidityUnlocked(address indexed user, uint256 indexed tokenId);

    constructor(address _uniswapV3NFT) Ownable(msg.sender) {
        uniswapV3NFT = INonfungiblePositionManager(_uniswapV3NFT);
    }

    function lockLiquidity(uint256 tokenId, uint256 lockDuration) external {
        require(lockDuration >= 1 days, "Minimum lock duration is 1 day");
        require(uniswapV3NFT.ownerOf(tokenId) == msg.sender, "You must own the LP NFT");

        uniswapV3NFT.safeTransferFrom(msg.sender, address(this), tokenId);
        
        lockedPositions[tokenId] = LockedPosition({
            owner: msg.sender,
            unlockTime: block.timestamp + lockDuration
        });

        emit LiquidityLocked(msg.sender, tokenId, block.timestamp + lockDuration);
    }

    function unlockLiquidity(uint256 tokenId) external {
        LockedPosition storage position = lockedPositions[tokenId];

        require(position.owner == msg.sender, "Not the owner of this NFT");
        require(block.timestamp >= position.unlockTime, "Liquidity is still locked");

        uniswapV3NFT.safeTransferFrom(address(this), msg.sender, tokenId);
        delete lockedPositions[tokenId];
        emit LiquidityUnlocked(msg.sender, tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_uniswapV3NFT","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"LiquidityLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"LiquidityUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"lockDuration","type":"uint256"}],"name":"lockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockedPositions","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV3NFT","outputs":[{"internalType":"contract INonfungiblePositionManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unlockLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561000f575f80fd5b5060405161081838038061081883398101604081905261002e91610099565b336100388161004a565b506001600160a01b03166080526100c6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156100a9575f80fd5b81516001600160a01b03811681146100bf575f80fd5b9392505050565b6080516107266100f25f395f818160bf0152818161022501528181610347015261042801526107265ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c806301a5e163146100645780637011b726146100ba5780638da5cb5b146100f957806396e8392414610109578063ec87682a1461011e578063f2fde38b14610131575b5f80fd5b610096610072366004610643565b600160208190525f918252604090912080549101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152015b60405180910390f35b6100e17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b1565b5f546001600160a01b03166100e1565b61011c610117366004610643565b610144565b005b61011c61012c36600461065a565b6102d4565b61011c61013f36600461068e565b61051b565b5f81815260016020526040902080546001600160a01b031633146101af5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420746865206f776e6572206f662074686973204e46540000000000000060448201526064015b60405180910390fd5b80600101544210156102035760405162461bcd60e51b815260206004820152601960248201527f4c6971756964697479206973207374696c6c206c6f636b65640000000000000060448201526064016101a6565b604051632142170760e11b8152306004820152336024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e906064015f604051808303815f87803b15801561026e575f80fd5b505af1158015610280573d5f803e3d5ffd5b5050505f83815260016020819052604080832080546001600160a01b03191681559091018290555184925033917fbc075837768dcd77a58731f7945fff3f5c9d285e3ade5c5b3c6f4fd15342457891a35050565b620151808110156103275760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206c6f636b206475726174696f6e206973203120646179000060448201526064016101a6565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561038c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b091906106b0565b6001600160a01b0316146104065760405162461bcd60e51b815260206004820152601760248201527f596f75206d757374206f776e20746865204c50204e465400000000000000000060448201526064016101a6565b604051632142170760e11b8152336004820152306024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e906064015f604051808303815f87803b158015610471575f80fd5b505af1158015610483573d5f803e3d5ffd5b505060408051808201909152338152915050602081016104a383426106cb565b90525f838152600160208181526040909220835181546001600160a01b0319166001600160a01b03909116178155929091015191015581337fe3afae9ec63e6f2e914c17bab8493b603680a72d9e6dfacf25ac6a4806555d4161050684426106cb565b60405190815260200160405180910390a35050565b3361052d5f546001600160a01b031690565b6001600160a01b0316146105835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a6565b6001600160a01b0381166105e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101a6565b6105f1816105f4565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610653575f80fd5b5035919050565b5f806040838503121561066b575f80fd5b50508035926020909101359150565b6001600160a01b03811681146105f1575f80fd5b5f6020828403121561069e575f80fd5b81356106a98161067a565b9392505050565b5f602082840312156106c0575f80fd5b81516106a98161067a565b808201808211156106ea57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220c6628462d15714e80dacbe9929f4d8843d962ca86301ef54fcb31be8f71abc4264736f6c6343000814003300000000000000000000000056cfc796bc88c9c7e1b38c2b0af9b7120b079aef

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c806301a5e163146100645780637011b726146100ba5780638da5cb5b146100f957806396e8392414610109578063ec87682a1461011e578063f2fde38b14610131575b5f80fd5b610096610072366004610643565b600160208190525f918252604090912080549101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152015b60405180910390f35b6100e17f00000000000000000000000056cfc796bc88c9c7e1b38c2b0af9b7120b079aef81565b6040516001600160a01b0390911681526020016100b1565b5f546001600160a01b03166100e1565b61011c610117366004610643565b610144565b005b61011c61012c36600461065a565b6102d4565b61011c61013f36600461068e565b61051b565b5f81815260016020526040902080546001600160a01b031633146101af5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420746865206f776e6572206f662074686973204e46540000000000000060448201526064015b60405180910390fd5b80600101544210156102035760405162461bcd60e51b815260206004820152601960248201527f4c6971756964697479206973207374696c6c206c6f636b65640000000000000060448201526064016101a6565b604051632142170760e11b8152306004820152336024820152604481018390527f00000000000000000000000056cfc796bc88c9c7e1b38c2b0af9b7120b079aef6001600160a01b0316906342842e0e906064015f604051808303815f87803b15801561026e575f80fd5b505af1158015610280573d5f803e3d5ffd5b5050505f83815260016020819052604080832080546001600160a01b03191681559091018290555184925033917fbc075837768dcd77a58731f7945fff3f5c9d285e3ade5c5b3c6f4fd15342457891a35050565b620151808110156103275760405162461bcd60e51b815260206004820152601e60248201527f4d696e696d756d206c6f636b206475726174696f6e206973203120646179000060448201526064016101a6565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000056cfc796bc88c9c7e1b38c2b0af9b7120b079aef1690636352211e90602401602060405180830381865afa15801561038c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b091906106b0565b6001600160a01b0316146104065760405162461bcd60e51b815260206004820152601760248201527f596f75206d757374206f776e20746865204c50204e465400000000000000000060448201526064016101a6565b604051632142170760e11b8152336004820152306024820152604481018390527f00000000000000000000000056cfc796bc88c9c7e1b38c2b0af9b7120b079aef6001600160a01b0316906342842e0e906064015f604051808303815f87803b158015610471575f80fd5b505af1158015610483573d5f803e3d5ffd5b505060408051808201909152338152915050602081016104a383426106cb565b90525f838152600160208181526040909220835181546001600160a01b0319166001600160a01b03909116178155929091015191015581337fe3afae9ec63e6f2e914c17bab8493b603680a72d9e6dfacf25ac6a4806555d4161050684426106cb565b60405190815260200160405180910390a35050565b3361052d5f546001600160a01b031690565b6001600160a01b0316146105835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a6565b6001600160a01b0381166105e85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101a6565b6105f1816105f4565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610653575f80fd5b5035919050565b5f806040838503121561066b575f80fd5b50508035926020909101359150565b6001600160a01b03811681146105f1575f80fd5b5f6020828403121561069e575f80fd5b81356106a98161067a565b9392505050565b5f602082840312156106c0575f80fd5b81516106a98161067a565b808201808211156106ea57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220c6628462d15714e80dacbe9929f4d8843d962ca86301ef54fcb31be8f71abc4264736f6c63430008140033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000056CFC796bC88C9c7e1b38C2b0aF9B7120B079aef

-----Decoded View---------------
Arg [0] : _uniswapV3NFT (address): 0x56CFC796bC88C9c7e1b38C2b0aF9B7120B079aef

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000056CFC796bC88C9c7e1b38C2b0aF9B7120B079aef


Deployed Bytecode Sourcemap

1228:1648:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1441:57;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1441:57:0;;;;;;;;;;-1:-1:-1;;;;;391:32:1;;;373:51;;455:2;440:18;;433:34;;;;346:18;1441:57:0;;;;;;;;1276;;;;;;;;-1:-1:-1;;;;;677:32:1;;;659:51;;647:2;632:18;1276:57:0;478:238:1;551:87:0;597:7;624:6;-1:-1:-1;;;;;624:6:0;551:87;;2405:468;;;;;;:::i;:::-;;:::i;:::-;;1824:573;;;;;;:::i;:::-;;:::i;772:201::-;;;;;;:::i;:::-;;:::i;2405:468::-;2467:31;2501:24;;;:15;:24;;;;;2546:14;;-1:-1:-1;;;;;2546:14:0;2564:10;2546:28;2538:66;;;;-1:-1:-1;;;2538:66:0;;1772:2:1;2538:66:0;;;1754:21:1;1811:2;1791:18;;;1784:30;1850:27;1830:18;;;1823:55;1895:18;;2538:66:0;;;;;;;;;2642:8;:19;;;2623:15;:38;;2615:76;;;;-1:-1:-1;;;2615:76:0;;2126:2:1;2615:76:0;;;2108:21:1;2165:2;2145:18;;;2138:30;2204:27;2184:18;;;2177:55;2249:18;;2615:76:0;1924:349:1;2615:76:0;2704:65;;-1:-1:-1;;;2704:65:0;;2742:4;2704:65;;;2518:34:1;2749:10:0;2568:18:1;;;2561:43;2620:18;;;2613:34;;;2704:12:0;-1:-1:-1;;;;;2704:29:0;;;;2453:18:1;;2704:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2787:24:0;;;;:15;:24;;;;;;;;2780:31;;-1:-1:-1;;;;;;2780:31:0;;;;;;;;;2827:38;2803:7;;-1:-1:-1;2845:10:0;;2827:38;;;2456:417;2405:468;:::o;1824:573::-;1930:6;1914:12;:22;;1906:65;;;;-1:-1:-1;;;1906:65:0;;2860:2:1;1906:65:0;;;2842:21:1;2899:2;2879:18;;;2872:30;2938:32;2918:18;;;2911:60;2988:18;;1906:65:0;2658:354:1;1906:65:0;1990:29;;-1:-1:-1;;;1990:29:0;;;;;3163:25:1;;;2023:10:0;;-1:-1:-1;;;;;1990:12:0;:20;;;;3136:18:1;;1990:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1990:43:0;;1982:79;;;;-1:-1:-1;;;1982:79:0;;3657:2:1;1982:79:0;;;3639:21:1;3696:2;3676:18;;;3669:30;3735:25;3715:18;;;3708:53;3778:18;;1982:79:0;3455:347:1;1982:79:0;2074:65;;-1:-1:-1;;;2074:65:0;;2104:10;2074:65;;;2518:34:1;2124:4:0;2568:18:1;;;2561:43;2620:18;;;2613:34;;;2074:12:0;-1:-1:-1;;;;;2074:29:0;;;;2453:18:1;;2074:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2187:116:0;;;;;;;;;2224:10;2187:116;;;-1:-1:-1;;2187:116:0;;;2261:30;2279:12;2261:15;:30;:::i;:::-;2187:116;;2160:24;;;;:15;:24;;;;;;;;:143;;;;-1:-1:-1;;;;;;2160:143:0;-1:-1:-1;;;;;2160:143:0;;;;;;;;;;;;;;:24;2337:10;2321:68;2358:30;2376:12;2358:15;:30;:::i;:::-;2321:68;;3163:25:1;;;3151:2;3136:18;2321:68:0;;;;;;;1824:573;;:::o;772:201::-;697:10;686:7;597;624:6;-1:-1:-1;;;;;624:6:0;;551:87;686:7;-1:-1:-1;;;;;686:21:0;;678:66;;;;-1:-1:-1;;;678:66:0;;4236:2:1;678:66:0;;;4218:21:1;;;4255:18;;;4248:30;4314:34;4294:18;;;4287:62;4366:18;;678:66:0;4034:356:1;678:66:0;-1:-1:-1;;;;;861:22:0;::::1;853:73;;;::::0;-1:-1:-1;;;853:73:0;;4597:2:1;853:73:0::1;::::0;::::1;4579:21:1::0;4636:2;4616:18;;;4609:30;4675:34;4655:18;;;4648:62;-1:-1:-1;;;4726:18:1;;;4719:36;4772:19;;853:73:0::1;4395:402:1::0;853:73:0::1;937:28;956:8;937:18;:28::i;:::-;772:201:::0;:::o;981:183::-;1047:16;1066:6;;-1:-1:-1;;;;;1083:17:0;;;-1:-1:-1;;;;;;1083:17:0;;;;;;1116:40;;1066:6;;;;;;;1116:40;;1047:16;1116:40;1036:128;981:183;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;929:248::-;997:6;1005;1058:2;1046:9;1037:7;1033:23;1029:32;1026:52;;;1074:1;1071;1064:12;1026:52;-1:-1:-1;;1097:23:1;;;1167:2;1152:18;;;1139:32;;-1:-1:-1;929:248:1:o;1182:131::-;-1:-1:-1;;;;;1257:31:1;;1247:42;;1237:70;;1303:1;1300;1293:12;1318:247;1377:6;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1485:9;1472:23;1504:31;1529:5;1504:31;:::i;:::-;1554:5;1318:247;-1:-1:-1;;;1318:247:1:o;3199:251::-;3269:6;3322:2;3310:9;3301:7;3297:23;3293:32;3290:52;;;3338:1;3335;3328:12;3290:52;3370:9;3364:16;3389:31;3414:5;3389:31;:::i;3807:222::-;3872:9;;;3893:10;;;3890:133;;;3945:10;3940:3;3936:20;3933:1;3926:31;3980:4;3977:1;3970:15;4008:4;4005:1;3998:15;3890:133;3807:222;;;;:::o

Swarm Source

ipfs://c6628462d15714e80dacbe9929f4d8843d962ca86301ef54fcb31be8f71abc42

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.