-
Notifications
You must be signed in to change notification settings - Fork 93
OETH withdrawal queue #2062
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
OETH withdrawal queue #2062
Changes from all commits
Commits
Show all changes
244 commits
Select commit
Hold shift + click to select a range
063d8b2
initial commit of the native staking strategy
sparrowDom 6e8332b
fix text
sparrowDom b933f22
add some more functionality
sparrowDom 0a43d14
finish up the fuse interval test, update deploy script
sparrowDom d31fe30
some natspec and refactoring
sparrowDom 03c544c
add some more accounting logic
sparrowDom 9aa0d73
finish up accounting and add tests for it
sparrowDom e99f86c
add some comments
sparrowDom 52ba11e
add tests for manually fixing accounting
sparrowDom e656ecb
lint and prettier
sparrowDom fe113a5
undo file delete
sparrowDom 71ad71f
implement the collect rewards function and add tests for it
sparrowDom 2c448bb
implement and test checkBalance
sparrowDom 5d5e9cb
add functions to register and exit/remove the ssv validator
sparrowDom 121c7f7
Native staking updates (#2023)
naddison36 8a64dc8
Native staking changes (#2024)
naddison36 8419fc7
Native staking changes and unit tests (#2029)
naddison36 87c5254
allow for WETH to send ETH to the contract
sparrowDom 1d66508
shorten error message
sparrowDom 00ec878
fix depositing bug
sparrowDom ec4933b
Holesky deploy (#2026)
sparrowDom 6179cb1
manuallyFixAccounting changes (#2034)
naddison36 da6a7b5
fix fork tests
sparrowDom fd17ec9
Merge branch 'master' into sparrowDom/nativeStaking
sparrowDom 8f7d3d5
prettier
sparrowDom 967fe49
fix unit test
sparrowDom 1af324d
mainnet native staking fork tests (#2037)
naddison36 ce2ec63
fix unit tests
sparrowDom fe12d23
fix global hooks filter
sparrowDom c61c9bb
add github workflow
sparrowDom 7e2e640
another workflow fix
sparrowDom af8ea03
another workflow fix
sparrowDom 32480dd
fix holesky tests
sparrowDom 0fb09ea
remove the .only
sparrowDom c7175bb
prettier
sparrowDom 69abd8f
Sparrow dom/native staking defender action (#2051)
sparrowDom 2f7a9cd
Fix fork tests (#2050)
naddison36 0623a47
add payable to fee accumulator (#2053)
sparrowDom f268742
fix linter
naddison36 20d29a1
Fix balancer fork test
naddison36 2a93df2
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 b898801
Fixed resolveContract for none proxied contracts
naddison36 25170aa
simplified woethCcipZapperFixture
naddison36 e1ff728
Regenerated latest contract diagrams
naddison36 c09cd46
Resolved Slither divide-before-multiply warning
naddison36 9d83e97
Native staking deployment to reduceQueueTime
naddison36 7eb135b
Fixed fork test harvesting CRV rewards
naddison36 579a93c
gas optimisation
sparrowDom 4c864ca
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 e7b96e9
make verification automatic
sparrowDom 8a53f3e
removed wethToVault from manuallyFixAccounting
naddison36 98a193a
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into s…
naddison36 905abf9
native staking strategy redeployed
sparrowDom fc48427
adjust the comment
sparrowDom 4b51655
add rate limit to calling manually fix accounting (#2057)
sparrowDom 657b064
Correct deployName in Native Staking deploy script
naddison36 769018a
Fix linter
naddison36 b98e9de
Remove approveAssets on Swapper contract in 095_ogn_buyback script as…
naddison36 622a3b4
Fix Holesky fork tests
naddison36 c25745d
Fix mainnet fork tests
naddison36 4ca3136
skip deploy 095_ogn_buyback for now
naddison36 37c9d0a
fix some Slither errors
naddison36 193af2f
Fix Slither warnings
naddison36 6d5034a
Upgrade the CI to use node.js 20.x
naddison36 848d578
Fix CI
naddison36 79d5058
Fix CI
naddison36 7b7ac39
Upgrade to node.js 20
naddison36 6b2be67
Still upgrade the buyback contracts but not approveAssets on the swapper
naddison36 5f2f8f6
Upgrade actions so they don't use node.js 16
naddison36 6baed9b
attempt to fix holesky fork run
sparrowDom 9ce05e1
Generated latest contract diagram
naddison36 8c052d8
fix codecov upload
naddison36 3687fbe
Fix OETH process diagram for native staking
naddison36 6df4f5f
add a withdrawal event when withdrawing WETH to vault (#2059)
sparrowDom 614b11e
Regenerated latest native staking diagram
naddison36 21d5569
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 8be6f90
Changed vault mint to call to Dripper.collect
naddison36 c8288b7
Added more vault mint fork tests
naddison36 63a11f7
first implementation of the withdrawal queue
naddison36 abe0e9c
Fix Slither
naddison36 cfe6a81
add a util contract that is able to recalculate a valid deposit data …
sparrowDom 3a35b55
Slither fixes
naddison36 28ae453
Fix linter
naddison36 ad492cc
Updated contract diagram
naddison36 4872259
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 c491131
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 e8c15b5
Prettier native staking test
naddison36 acad4b9
Renamed native staking deploy script
naddison36 638bf30
Fix event values (#2060)
sparrowDom b4e9c3f
Deploy latest Native Staking Strategy to Holesky (#2073)
naddison36 77d7b07
Deploy native staking Proxy via Relayer (#2066)
sparrowDom 4c25093
Setup basic defender action (#2072)
sparrowDom c4456b9
Output more contract details in 097 deploy script
naddison36 c1922b6
Added claimWithdrawals to OETHVaultCore
naddison36 e5ebf29
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into n…
naddison36 0643034
prettier
naddison36 a50f2d2
Add getting WETH from Dripper on mints over rebaseThreshold
naddison36 82b4fd1
Restricted OETH's depositToStrategy to only deposit WETH
naddison36 10b95df
Fixed unit tests
naddison36 f27966b
Suppress Slither
naddison36 112dd37
Changed ssv util getClusterInfo to use the SSV API instead of the ssv…
naddison36 f3e9d35
Fix Native Staking fork tests
naddison36 4e9e24f
Fix Native Staking fork tests
naddison36 8cf9a25
Changed ssv util getClusterInfo to use the SSV API instead of the ssv…
naddison36 fc09bed
Prettier
naddison36 bb3b7e6
ValidatorRegistrator.stakeEth gas improvement when multiple validators
naddison36 e163cff
Corrected stakeEth call in OETH processes diagram
naddison36 cdb36ef
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into n…
naddison36 9d302ec
Fixes to withdrawal queue
naddison36 ef1c325
Add more withdrawal queue unit tests
naddison36 267d045
More withdrawal queue unit tests
naddison36 beb9170
Fixed adjusting the vault value for the withdrawal queue
naddison36 10259ce
Add more withdrawal queue tests
naddison36 dd7632d
Implemented withdrawAll in MockStrategy
naddison36 84d9a7f
Fixed bug in claimWithdrawals
naddison36 bb8577f
Complete code coverage of OETH Vault unit tests
naddison36 e853081
Added fork test for registering a validator twice
naddison36 12bba64
Stake funds with confirmations for front-running protection of Beacon…
sparrowDom 5632653
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into n…
naddison36 0a0e9da
Updated Buyback value flow for OETH
naddison36 93b3cdf
Updated Native staking process diagram
naddison36 003fcdb
Updated OETH Vault diagrams
naddison36 9295fe7
Add process for pausing the Native Staking Strategy
naddison36 8748170
Merge remote-tracking branch 'origin/master' into sparrowDom/nativeSt…
naddison36 270a3f6
Removed the redundant condition in the fuse interval check (#2082)
naddison36 706da2e
OZ - Native Staking - M-01 All Addresses Are Registered Validators by…
naddison36 71adea7
OZ - Native Staking - N-07 Lack of Indexed Event Parameters (#2083)
naddison36 8f8118d
Deployed new Native Staking Strategy
naddison36 d398042
generated latest NativeStakingSSVStrategy docs
naddison36 b6c2219
P2P API changes (#2084)
naddison36 81b9359
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into n…
naddison36 49439ec
Hardhat tasks for Native Staking (#2085)
naddison36 8e75f24
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into n…
naddison36 2081919
bumped the deploy script number
naddison36 6ecf222
Cap the validators a Native Staking Strategy can hold (#2087)
naddison36 c807e8d
don't format Defender Action code in dist folder
naddison36 8ab4317
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into n…
naddison36 7f54c94
Deployed latest NativeStakingSSVStrategy contract to Holesky
naddison36 c4f2a30
Merge remote-tracking branch 'origin/sparrowDom/nativeStaking' into n…
naddison36 2c90f9f
Fix deployment file
shahthepro 35c4848
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 7849b81
Merge remote-tracking branch 'origin/nicka/oeth-arm' into nicka/oeth-arm
naddison36 d8b0fea
updated deploy number for OETH withdrawal queue
naddison36 a2dada1
Fixed unit tests
naddison36 532e9b9
Remove stETH from Vault in OETH Withdrawal Queue deployment is not al…
naddison36 2075e66
Skipping OETH Vault collateral swaps
naddison36 4ecffac
Skipping OETH whale redeem in fork tests
naddison36 f2c278b
Fixed spelling in comments of VaultStorage
naddison36 8f46a2b
Fail CI if any mainnet fork tests fail
naddison36 2f90d78
Continue with fork tests if any fail but still fail the CI job
naddison36 bafeff1
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 faf9521
increment deploy script number
naddison36 8094ddd
restore Github Actions config
naddison36 e811fc7
Updated OETHVaultCore comments
naddison36 0cd7ac2
Upgraded OETH Vault on Holesky to include the withdrawal queue
naddison36 ba3c28c
Added Vault requestWithdrawal andclaimWithdrawal Hardhat tasks
naddison36 39d9a86
OETHVaultCore Natspec updates
naddison36 4e3a58d
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 99f17e5
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 f8d4974
Add 30 minute time delay between request and claim from the OETH With…
clement-ux b277f36
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 937a084
fix: test expectRevert with new error message
clement-ux ae24a1f
Merge remote-tracking branch 'origin/nicka/oeth-arm' into nicka/oeth-arm
naddison36 b07ce57
Fixed unit tests
naddison36 bdeb1de
Remove stETH and rETH asset from OETH Vault
naddison36 25f1b53
Skip legacy strategy tests
naddison36 3049eff
Skiped legacy Oracle prices
naddison36 3c9c9ec
Skipped Aura price tests
naddison36 14746bb
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 b7a6a10
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 dc58a1c
Remove rETH as an asset from the Vault
naddison36 5815778
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 c607bc7
Added call to cacheWETHAssetIndex after stETH is removed from the Vault
naddison36 33a5678
Updated vault storage diagrams
naddison36 cbd6764
Added second native staking strategy as the default for WETH
naddison36 f93f6ab
Add solvency check. (#2131)
clement-ux d3de400
Fixed claim Natspec now the delay is in place
naddison36 ecc2773
Changed console debug in assertUpgradeIsSafe to use logger
naddison36 74875cd
Updated Natspec
naddison36 5c2ab55
Assert totalValue in withdrawal queue unit tests
naddison36 cccc048
Merge remote-tracking branch 'origin/nicka/oeth-arm' into nicka/oeth-arm
naddison36 6ba210a
Fixed prettier
naddison36 52b2fe3
Asset vault checkBalance of WETH to OETH Vault unit tests
naddison36 f9e9fdd
_checkBalance and _totalValue on OETH Vault to protect against insolv…
naddison36 e85f4fb
Override _totalValueInVault in OETH Vault
naddison36 8c77769
Removed super._totalValue call
naddison36 6eda2ed
Fix AMO fork tests
naddison36 1ab9752
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 28e3ead
Generated latest OETH Vault diagrams
naddison36 e86fa11
Don't account for WETH reserved for withdrawal during allocation (#2138)
shahthepro 0f383e0
WIP more unit tests
naddison36 e66dc12
Added more unit tests
naddison36 d67d1bf
Merge remote-tracking branch 'origin/nicka/oeth-arm' into nicka/oeth-arm
naddison36 61ead28
Added more withdrawal unit tests
naddison36 b0cd078
Fix skipped test
shahthepro 5ac4175
Add extra test to OETH ARM. (#2139)
clement-ux 5b61c2b
fix: reduce delay period between request and claim to 10min. (#2140)
clement-ux 975c3c6
Refactor OETH Vault's `_allocate()` (#2141)
naddison36 5422808
Add extra test for OETH Withdraw Queue (#2142)
clement-ux 839bde2
Override allocate on OETH Vault so _addWithdrawalQueueLiquidity is no…
naddison36 5d29d45
Skip waiting for confirmation on Tenderly testnets
shahthepro bb5a82a
Fix unit tests
shahthepro 8bd687b
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 9135275
Add snapVault hardhat task
naddison36 cc6f2f3
Updated insolvency unit tests
naddison36 133ddcb
Added more insolvency unit tests
naddison36 fb765e1
Fix _totalValue so it handles when vault value is less than the outst…
naddison36 f3053f2
Added SafeCast to unit128
naddison36 22b8b2b
Reject redeems and withdrawals if no available assets due to insolvency
naddison36 e59268f
Redeem to no longer try and get liquidity from the default strategy i…
naddison36 74afa41
Simplify _wethAvailable
naddison36 dc46164
refactor of _claimWithdrawal
naddison36 4f5a57d
Generated latest OETHVaultCore diagram
naddison36 193ad6d
Fix Slither
naddison36 f4de2e6
Updated the other _wethAvailable function
naddison36 b9d5e00
Set Vault buffer to 0.2%
naddison36 acf271d
Swapped order in deploy script
naddison36 5978d6d
Simplify _totalValue logic
naddison36 6b26be9
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 faa060a
Moved the burn of OETH lower in the request withdrawal
naddison36 d16970d
Added reentrant protection to addWithdrawalQueueLiquidity
naddison36 b6a2fbb
Refactor _addWithdrawalQueueLiquidity
naddison36 0ad9592
Added vault buffer to snapVault Hardhat task
naddison36 eca6ffa
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 f15891d
fix: change `CLAIM_DELAY` visibility to `public`.
clement-ux 365f2e0
Added SafeCast to uint128
naddison36 38a4b40
Refactor of _wethAvailable to use explicit returns
naddison36 380c3b5
Revert OETH swapCollateral now only WETH
naddison36 9c32a73
Generated latest OETH Vault diagrams
naddison36 008c8e3
Generated latest OSDU Vault diagrams
naddison36 2181617
Generated Dripper and Harvester diagrams
naddison36 1a659bc
Fix linter
naddison36 f9a89d3
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 9c78cce
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 231459a
Fix vault storage slots
naddison36 d36241b
Generate new vault diagrams
naddison36 afba028
Fixed slither issues in VaultStorage
naddison36 1647eca
Skip Flux strategy fork tests as DAI market is 100% utilized which is…
naddison36 08536cf
Move DripperChanged event with other withdrawal queue events
naddison36 a5b2f70
Deployed the latest OETHVault to Holesky
naddison36 486cf25
Fixed Available in snapVault Hardhat task
naddison36 8f89126
Fixed _wethAvailable on OETHVaultAdmin to match OETHVaultCore
naddison36 8c25150
Fix js linter
naddison36 0324e41
Merge remote-tracking branch 'origin/master' into nicka/oeth-arm
naddison36 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| // SPDX-License-Identifier: MIT | ||
| pragma solidity ^0.8.0; | ||
|
|
||
| interface IDripper { | ||
| /// @notice How much funds have dripped out already and are currently | ||
| // available to be sent to the vault. | ||
| /// @return The amount that would be sent if a collect was called | ||
| function availableFunds() external view returns (uint256); | ||
|
|
||
| /// @notice Collect all dripped funds and send to vault. | ||
| /// Recalculate new drip rate. | ||
| function collect() external; | ||
|
|
||
| /// @notice Collect all dripped funds, send to vault, recalculate new drip | ||
| /// rate, and rebase mToken. | ||
| function collectAndRebase() external; | ||
|
|
||
| /// @notice Change the drip duration. Governor only. | ||
| /// @param _durationSeconds the number of seconds to drip out the entire | ||
| /// balance over if no collects were called during that time. | ||
| function setDripDuration(uint256 _durationSeconds) external; | ||
|
|
||
| /// @dev Transfer out ERC20 tokens held by the contract. Governor only. | ||
| /// @param _asset ERC20 token address | ||
| /// @param _amount amount to transfer | ||
| function transferToken(address _asset, uint256 _amount) external; | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,12 +1,105 @@ | ||
| // SPDX-License-Identifier: MIT | ||
| pragma solidity ^0.8.0; | ||
|
|
||
| import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; | ||
| import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; | ||
|
|
||
| import { IStrategy } from "../interfaces/IStrategy.sol"; | ||
| import { IVault } from "../interfaces/IVault.sol"; | ||
| import { VaultAdmin } from "./VaultAdmin.sol"; | ||
|
|
||
| /** | ||
| * @title OETH VaultAdmin Contract | ||
| * @author Origin Protocol Inc | ||
| */ | ||
| contract OETHVaultAdmin is VaultAdmin { | ||
| using SafeERC20 for IERC20; | ||
|
|
||
| address public immutable weth; | ||
|
|
||
| constructor(address _weth) { | ||
| weth = _weth; | ||
| } | ||
|
|
||
| /// @dev Simplified version of the deposit function as WETH is the only supported asset. | ||
| function _depositToStrategy( | ||
| address _strategyToAddress, | ||
| address[] calldata _assets, | ||
| uint256[] calldata _amounts | ||
| ) internal override { | ||
| require( | ||
| strategies[_strategyToAddress].isSupported, | ||
| "Invalid to Strategy" | ||
| ); | ||
| require( | ||
| _assets.length == 1 && _amounts.length == 1 && _assets[0] == weth, | ||
| "Only WETH is supported" | ||
| ); | ||
|
|
||
| // Check the there is enough WETH to transfer once the WETH reserved for the withdrawal queue is accounted for | ||
| require(_amounts[0] <= _wethAvailable(), "Not enough WETH available"); | ||
DanielVF marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| // Send required amount of funds to the strategy | ||
| IERC20(weth).safeTransfer(_strategyToAddress, _amounts[0]); | ||
|
|
||
| // Deposit all the funds that have been sent to the strategy | ||
| IStrategy(_strategyToAddress).depositAll(); | ||
| } | ||
|
|
||
| function _withdrawFromStrategy( | ||
| address _recipient, | ||
| address _strategyFromAddress, | ||
| address[] calldata _assets, | ||
| uint256[] calldata _amounts | ||
| ) internal override { | ||
| super._withdrawFromStrategy( | ||
| _recipient, | ||
| _strategyFromAddress, | ||
| _assets, | ||
| _amounts | ||
| ); | ||
|
|
||
| IVault(address(this)).addWithdrawalQueueLiquidity(); | ||
| } | ||
|
|
||
| function _withdrawAllFromStrategy(address _strategyAddr) internal override { | ||
| super._withdrawAllFromStrategy(_strategyAddr); | ||
|
|
||
| IVault(address(this)).addWithdrawalQueueLiquidity(); | ||
| } | ||
|
|
||
| function _withdrawAllFromStrategies() internal override { | ||
| super._withdrawAllFromStrategies(); | ||
|
|
||
| IVault(address(this)).addWithdrawalQueueLiquidity(); | ||
| } | ||
|
|
||
| /// @dev Calculate how much WETH in the vault is not reserved for the withdrawal queue. | ||
| // That is, it is available to be redeemed or deposited into a strategy. | ||
| function _wethAvailable() internal view returns (uint256 wethAvailable) { | ||
DanielVF marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata; | ||
|
|
||
| // The amount of WETH that is still to be claimed in the withdrawal queue | ||
| uint256 outstandingWithdrawals = queue.queued - queue.claimed; | ||
|
|
||
| // The amount of sitting in WETH in the vault | ||
| uint256 wethBalance = IERC20(weth).balanceOf(address(this)); | ||
|
|
||
| // If there is not enough WETH in the vault to cover the outstanding withdrawals | ||
| if (wethBalance <= outstandingWithdrawals) { | ||
| return 0; | ||
| } | ||
|
|
||
| return wethBalance - outstandingWithdrawals; | ||
| } | ||
|
|
||
| function _swapCollateral( | ||
| address, | ||
| address, | ||
| uint256, | ||
| uint256, | ||
| bytes calldata | ||
| ) internal pure override returns (uint256) { | ||
| revert("Collateral swap not supported"); | ||
| } | ||
| } | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.