{"name":"HoodLocker","address":"0x6a249F0c1173d68b0Dd6a7Eb265315a6B0707cC5","chainId":46630,"chainName":"Robinhood Testnet","rpc":"https://rpc.testnet.chain.robinhood.com","hoodieNft":"0xCBDEE2b95C4F02Bf05A1E3E0dcec79495Eb0e83E","docs":"/llms.txt","source":"/contract","abi":[{"type":"constructor","inputs":[{"name":"initialOwner","type":"address","internalType":"address"},{"name":"ochToken","type":"address","internalType":"address"},{"name":"hoodieNft_","type":"address","internalType":"address"},{"name":"devRecipient_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_BATCH","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MAX_DEV_BPS","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"MAX_FEE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MAX_PAGE","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"activeLockedOf","inputs":[{"name":"who","type":"address","internalType":"address"},{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"devBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"devRecipient","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"extend","inputs":[{"name":"lockId","type":"uint256","internalType":"uint256"},{"name":"newUnlockTime","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"feeAmount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"feeForAsset","inputs":[{"name":"asset","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"feeLockDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"feeRecipient","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"feeToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"getLock","inputs":[{"name":"lockId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct HoodLocker.Lock","components":[{"name":"token","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"unlockTime","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"enum HoodLocker.AssetType"},{"name":"withdrawn","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getLockTokenIds","inputs":[{"name":"lockId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"getLocks","inputs":[{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"page","type":"tuple[]","internalType":"struct HoodLocker.Lock[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"unlockTime","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"enum HoodLocker.AssetType"},{"name":"withdrawn","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getLocksByOwner","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct HoodLocker.Lock[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"unlockTime","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"enum HoodLocker.AssetType"},{"name":"withdrawn","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getLocksByToken","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct HoodLocker.Lock[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"unlockTime","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"enum HoodLocker.AssetType"},{"name":"withdrawn","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"hasCommitment","inputs":[{"name":"who","type":"address","internalType":"address"},{"name":"token","type":"address","internalType":"address"},{"name":"minAmount","type":"uint256","internalType":"uint256"},{"name":"minUnlock","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hoodieNft","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC721"}],"stateMutability":"view"},{"type":"function","name":"lock","inputs":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"unlockTime","type":"uint256","internalType":"uint256"},{"name":"beneficiary","type":"address","internalType":"address"},{"name":"maxFee","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"lockId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"lockBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"lockIdsByOwner","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"lockIdsByToken","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"lockNFT","inputs":[{"name":"collection","type":"address","internalType":"address"},{"name":"tokenIds","type":"uint256[]","internalType":"uint256[]"},{"name":"unlockTime","type":"uint256","internalType":"uint256"},{"name":"beneficiary","type":"address","internalType":"address"},{"name":"maxFee","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"lockId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"locks","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"token","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"unlockTime","type":"uint256","internalType":"uint256"},{"name":"kind","type":"uint8","internalType":"enum HoodLocker.AssetType"},{"name":"withdrawn","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"locksCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"onERC721Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"ownerLockCount","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pendingOwner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFee","inputs":[{"name":"feeAmount_","type":"uint256","internalType":"uint256"},{"name":"feeRecipient_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeLockDuration","inputs":[{"name":"seconds_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFeeSplit","inputs":[{"name":"lockBps_","type":"uint16","internalType":"uint16"},{"name":"devBps_","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tokenLockCount","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalLocked","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalToDev","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"lockId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Extended","inputs":[{"name":"lockId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"newUnlockTime","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FeeCollected","inputs":[{"name":"payer","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"dev","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"locked","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FeeLockDurationUpdated","inputs":[{"name":"feeLockDuration","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FeeSplitUpdated","inputs":[{"name":"lockBps","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"devBps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"FeeUpdated","inputs":[{"name":"feeAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"feeRecipient","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Locked","inputs":[{"name":"lockId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"creator","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unlockTime","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NFTLocked","inputs":[{"name":"lockId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"collection","type":"address","indexed":true,"internalType":"address"},{"name":"tokenIds","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Withdrawn","inputs":[{"name":"lockId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AlreadyWithdrawn","inputs":[]},{"type":"error","name":"BatchTooLarge","inputs":[]},{"type":"error","name":"CannotShorten","inputs":[]},{"type":"error","name":"DevShareTooHigh","inputs":[]},{"type":"error","name":"FeeTooHigh","inputs":[]},{"type":"error","name":"InvalidBps","inputs":[]},{"type":"error","name":"InvalidLockId","inputs":[]},{"type":"error","name":"InvalidUnlockTime","inputs":[]},{"type":"error","name":"NoTokenIds","inputs":[]},{"type":"error","name":"NoTokensReceived","inputs":[]},{"type":"error","name":"NotLockOwner","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"StillLocked","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]}]}