@@ -6,7 +6,7 @@ import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
66
77import { ACL , Lido , LidoLocator } from "typechain-types" ;
88
9- import { ether , impersonate , MAX_UINT256 } from "lib" ;
9+ import { advanceChainTime , ether , impersonate , MAX_UINT256 } from "lib" ;
1010import { TOTAL_BASIS_POINTS } from "lib/constants" ;
1111
1212import { deployLidoDao } from "test/deploy" ;
@@ -386,17 +386,20 @@ describe("Lido.sol:externalShares", () => {
386386
387387 it ( "Increases staking limit when burning" , async ( ) => {
388388 await lido . setMaxExternalRatioBP ( maxExternalRatioBP ) ;
389- await lido . setStakingLimit ( 10n , 1n ) ;
389+ await lido . setStakingLimit ( 10n , 10n ) ;
390390
391391 await lido . connect ( vaultHubSigner ) . mintExternalShares ( vaultHubSigner , 1n ) ;
392392
393- expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( 9n ) ;
393+ let limit = 9n ;
394+ expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( limit ) ;
394395
395396 await lido . connect ( vaultHubSigner ) . burnExternalShares ( 1n ) ;
396- expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( 10n ) ;
397+ limit += 1n ; // for mining block with burning
398+
399+ expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( limit + 1n ) ;
397400 } ) ;
398401
399- it ( "Restores staking limit to max when burning more" , async ( ) => {
402+ it ( "Bypasses staking limit when burning more than staking limit " , async ( ) => {
400403 await lido . setMaxExternalRatioBP ( maxExternalRatioBP ) ;
401404 await lido . connect ( vaultHubSigner ) . mintExternalShares ( vaultHubSigner , 5n ) ;
402405
@@ -407,10 +410,15 @@ describe("Lido.sol:externalShares", () => {
407410 const amountToMint = await lido . getPooledEthByShares ( sharesToMint ) ;
408411 await lido . connect ( vaultHubSigner ) . mintExternalShares ( vaultHubSigner , sharesToMint ) ;
409412
410- expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( 10n - amountToMint ) ;
413+ let limit = 10n - amountToMint ;
414+ expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( limit ) ;
411415
412- await lido . connect ( vaultHubSigner ) . burnExternalShares ( 10n ) ;
413- expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( 10n ) ;
416+ const sharesToBurn = 10n ;
417+ const amountToBurn = await lido . getPooledEthByShares ( sharesToBurn ) ;
418+ await lido . connect ( vaultHubSigner ) . burnExternalShares ( sharesToBurn ) ;
419+ limit += 1n ; // for mining block with burning
420+
421+ expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( limit + amountToBurn ) ;
414422 } ) ;
415423 } ) ;
416424
@@ -487,18 +495,16 @@ describe("Lido.sol:externalShares", () => {
487495
488496 it ( "Can mint and burn external shares without limit change after multiple loops" , async ( ) => {
489497 await lido . setMaxExternalRatioBP ( maxExternalRatioBP ) ;
490- await lido . setStakingLimit ( 1000n , 1n ) ;
498+ await lido . setStakingLimit ( 1000n , 100n ) ;
491499
492500 for ( let i = 1n ; i <= 500n ; i ++ ) {
493- const stakingLimitBefore = await lido . getCurrentStakeLimit ( ) ;
494- expect ( stakingLimitBefore ) . to . equal ( 1000n ) ;
495-
496501 await lido . connect ( vaultHubSigner ) . mintExternalShares ( vaultHubSigner , i ) ;
497502 await lido . connect ( vaultHubSigner ) . burnExternalShares ( i ) ;
498-
499- const stakingLimitAfter = await lido . getCurrentStakeLimit ( ) ;
500- expect ( stakingLimitAfter ) . to . equal ( stakingLimitBefore ) ;
501503 }
504+
505+ // need to mine a block to update the stake limit otherwise it will be 1000n + 100n (after burning)
506+ await advanceChainTime ( 1n ) ;
507+ expect ( await lido . getCurrentStakeLimit ( ) ) . to . equal ( 1000n ) ;
502508 } ) ;
503509 } ) ;
504510
0 commit comments