From deac3fe298b514912480402f75693170926ce73e Mon Sep 17 00:00:00 2001 From: yruej301 <114962854+yruej301@users.noreply.github.com> Date: Mon, 17 Feb 2025 18:24:51 -0500 Subject: [PATCH] chore: add LBA interfaces (#77) --- lba/contracts/interfaces/IAirdrop.sol | 23 ++++++++ lba/contracts/interfaces/IEndpoint.sol | 64 ++++++++++++++++++++++ lba/contracts/interfaces/ILBA.sol | 73 +++++++++++++++++++++++++ lba/contracts/interfaces/IStaking.sol | 75 ++++++++++++++++++++++++++ lba/contracts/interfaces/IVesting.sol | 22 ++++++++ 5 files changed, 257 insertions(+) create mode 100644 lba/contracts/interfaces/IAirdrop.sol create mode 100644 lba/contracts/interfaces/IEndpoint.sol create mode 100644 lba/contracts/interfaces/ILBA.sol create mode 100644 lba/contracts/interfaces/IStaking.sol create mode 100644 lba/contracts/interfaces/IVesting.sol diff --git a/lba/contracts/interfaces/IAirdrop.sol b/lba/contracts/interfaces/IAirdrop.sol new file mode 100644 index 0000000..ab5b899 --- /dev/null +++ b/lba/contracts/interfaces/IAirdrop.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface IAirdrop { + function claimToLBA( + uint256 amount, + uint256 totalAmount, + bytes32[] calldata proof + ) external; + + function claim( + uint32 epoch, + uint256 amount, + uint256 totalAmount, + bytes32[] calldata proof + ) external; + + function getClaimed( + address account + ) external view returns (uint256[] memory); + + function getClaimingDeadlines() external view returns (uint64[] memory); +} diff --git a/lba/contracts/interfaces/IEndpoint.sol b/lba/contracts/interfaces/IEndpoint.sol new file mode 100644 index 0000000..75e0200 --- /dev/null +++ b/lba/contracts/interfaces/IEndpoint.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface IEndpoint { + event SubmitTransactions(); + + event SubmitSlowModeTransaction( + uint64 executableAt, + address sender, + bytes tx + ); + + // events that we parse transactions into + enum TransactionType { + LiquidateSubaccount, + DepositCollateral, + WithdrawCollateral, + SpotTick, + UpdatePrice, + SettlePnl, + MatchOrders, + DepositInsurance, + ExecuteSlowMode, + MintLp, + BurnLp, + SwapAMM, + MatchOrderAMM, + DumpFees, + ClaimSequencerFees, + PerpTick, + ManualAssert, + Rebate, + UpdateProduct, + LinkSigner, + UpdateFeeRates, + BurnLpAndTransfer + } + + struct MintLp { + bytes32 sender; + uint32 productId; + uint128 amountBase; + uint128 quoteAmountLow; + uint128 quoteAmountHigh; + uint64 nonce; + } + + struct BurnLpAndTransfer { + bytes32 sender; + uint32 productId; + uint128 amount; + bytes32 recipient; + } + + function depositCollateral( + bytes12 subaccountName, + uint32 productId, + uint128 amount + ) external; + + function submitSlowModeTransaction(bytes calldata transaction) external; + + function getPriceX18(uint32 productId) external view returns (int128); +} diff --git a/lba/contracts/interfaces/ILBA.sol b/lba/contracts/interfaces/ILBA.sol new file mode 100644 index 0000000..0e29f5c --- /dev/null +++ b/lba/contracts/interfaces/ILBA.sol @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface ILBA { + enum Stage { + NotStarted, + DepositingTokens, + WithdrawingUsdc, + LBAFinished, + DepositedToVertex, + LpMinted, + LpVesting, + LpVested + } + + struct Config { + uint64 depositStartTime; + uint64 depositEndTime; + uint64 withdrawEndTime; + uint64 lpVestStartTime; + uint64 lpVestEndTime; + } + + struct State { + uint256 totalVrtxDeposited; + uint256 totalUsdcDeposited; + uint256 totalLpMinted; + uint256 totalLpWithdrawn; + uint256 cumulativeRewardsPerShareX18; + } + + function getStage() external view returns (Stage stage); + + function depositVrtx(address account, uint256 amount) external; + + function depositUsdc(uint256 amount) external; + + function getDepositedVrtx(address account) external view returns (uint256); + + function getDepositedUsdc(address account) external view returns (uint256); + + function getMaxWithdrawableUsdc( + address account + ) external view returns (uint256); + + function withdrawUsdc(uint256 amount) external; + + function getVrtxInitialPriceX18() external view returns (uint256); + + function getLpBalance(address account) external view returns (uint256); + + function getLockedLpBalance( + address account + ) external view returns (uint256 lockedLpBalance); + + function getWithdrawableLpBalance( + address account + ) external view returns (uint256); + + function withdrawLiquidity(uint256 lpAmount) external; + + function getConfig() external view returns (Config memory); + + function getState() external view returns (State memory); + + function getClaimableRewards( + address account + ) external view returns (uint256); + + function claimRewards() external; + + function distributeRewards(uint256 amount) external; +} diff --git a/lba/contracts/interfaces/IStaking.sol b/lba/contracts/interfaces/IStaking.sol new file mode 100644 index 0000000..2eef69f --- /dev/null +++ b/lba/contracts/interfaces/IStaking.sol @@ -0,0 +1,75 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface IStaking { + struct Segment { + uint64 startTime; + int256 vrtxSize; + address owner; + uint32 version; + } + + struct QueueIndex { + uint64 count; + uint64 upTo; + } + + struct State { + uint256 vrtxStaked; + int256 sumSize; + int256 sumSizeXTime; + } + + struct ReleaseSchedule { + uint64 releaseTime; + uint256 amount; + } + + struct Checkpoint { + uint64 time; + uint256 vrtxStaked; + int256 sumSize; + int256 sumSizeXTime; + uint256 rewards; + } + + struct LastActionTimes { + uint64 lastStakeTime; + uint64 lastWithdrawTime; + } + + struct WithdrawnVrtxStates { + uint256 vrtxClaimable; + uint256 vrtxPendingUnlock; + } + + function stake(uint256 amount) external; + + function withdraw(uint256 amount) external; + + function claimVrtx() external; + + function claimUsdc() external; + + function getWithdrawnVrtxStates( + address account + ) external view returns (WithdrawnVrtxStates memory); + + function getRewardsBreakdown( + address account + ) external view returns (uint256[] memory); + + function getUsdcClaimable(address account) external view returns (uint256); + + function getVrtxStaked(address account) external view returns (uint256); + + function getTotalVrtxStaked() external view returns (uint256); + + function getScore(address account) external view returns (uint256); + + function getTotalScore() external view returns (uint256); + + function getLastActionTimes( + address account + ) external view returns (LastActionTimes memory); +} diff --git a/lba/contracts/interfaces/IVesting.sol b/lba/contracts/interfaces/IVesting.sol new file mode 100644 index 0000000..df52a72 --- /dev/null +++ b/lba/contracts/interfaces/IVesting.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +pragma solidity ^0.8.0; + +interface IVesting { + function registerVesting( + address account, + uint256 amount, + uint64 period + ) external; + + function getVested( + uint64 vestingScheduleId + ) external view returns (uint256); + + function getVestable( + uint64 vestingScheduleId + ) external view returns (uint256); + + function getClaimable(address account) external view returns (uint256); + + function claim() external; +}