@@ -184,77 +184,51 @@ function createSlasherInitParams() {
184184/**
185185 * Helper function to deploy a complete vault (vault + delegator + slasher)
186186 */
187- async function deployVault ( vaultConfigurator , burnerRouterAddr , admin , operator ) {
187+ async function deployVault ( vaultConfigurator , burnerRouterAddr , adminAddress , operator ) {
188188 const vaultParams = {
189189 version : 1 ,
190- owner : admin ,
191- vaultParams : createVaultInitParams ( burnerRouterAddr , admin ) ,
190+ owner : adminAddress ,
191+ vaultParams : createVaultInitParams ( burnerRouterAddr , adminAddress ) ,
192192 delegatorIndex : 2 , // OperatorSpecificDelegator (index 2)
193- delegatorParams : createDelegatorInitParams ( admin , operator ) ,
193+ delegatorParams : createDelegatorInitParams ( adminAddress , operator ) ,
194194 withSlasher : true ,
195195 slasherIndex : 0 , // instant Slasher (index 0)
196196 slasherParams : createSlasherInitParams ( ) ,
197197 } ;
198198
199199 const [ vaultAddr , delegatorAddr , slasherAddr ] = await vaultConfigurator . create . staticCall ( vaultParams ) ;
200- const [ delegator , slasher ] = await Promise . all ( [
200+ await vaultConfigurator . create ( vaultParams ) ;
201+
202+ const [ vault , delegator , slasher ] = await Promise . all ( [
203+ ethers . getContractAt ( VAULT_ABI , vaultAddr ) ,
201204 ethers . getContractAt ( DELEGATOR_ABI , delegatorAddr ) ,
202205 ethers . getContractAt ( SLASHER_ABI , slasherAddr ) ,
203206 ] ) ;
204- await vaultConfigurator . create ( vaultParams ) ;
205- const vault = await ethers . getContractAt ( VAULT_ABI , vaultAddr ) ;
206207
207- return { vault, vaultAddr , delegator, delegatorAddr , slasher, slasherAddr } ;
208+ return { vault, delegator, slasher } ;
208209}
209210
210211/**
211- * Helper function to deploy and verify a vault
212+ * Verifies that a deployed vault is wired to the expected owner, delegator, slasher and burner.
212213 */
213- async function deployAndVerifyVault ( vaultNumber , operator ) {
214- const vaultKey = `vault${ vaultNumber } ` ;
215- const vaultAddrKey = `vault${ vaultNumber } Addr` ;
216- const delegatorKey = `delegator${ vaultNumber } ` ;
217- const delegatorAddrKey = `delegator${ vaultNumber } Addr` ;
218- const slasherKey = `slasher${ vaultNumber } ` ;
219- const slasherAddrKey = `slasher${ vaultNumber } Addr` ;
220- const vaultAdminKey = `vault${ vaultNumber } Admin` ;
221- const delegatorAdminKey = `delegator${ vaultNumber } Admin` ;
222-
223- const result = await deployVault (
224- this . vaultConfigurator ,
225- this . burnerRouterAddr ,
226- SAFE_MULTISIG_NETWORK_OPERATOR_MIDDLEWARE ,
227- operator ,
228- ) ;
229-
230- this [ vaultKey ] = result . vault ;
231- this [ vaultAddrKey ] = result . vaultAddr ;
232- this [ delegatorKey ] = result . delegator ;
233- this [ delegatorAddrKey ] = result . delegatorAddr ;
234- this [ slasherKey ] = result . slasher ;
235- this [ slasherAddrKey ] = result . slasherAddr ;
236-
237- expect ( this [ vaultAddrKey ] ) . to . not . equal ( ethers . ZeroAddress ) ;
214+ async function verifyVaultDeployment ( vaultNumber , vaultData , expectedOwner , expectedBurner ) {
215+ const [ ownerAddr , delegatorAddr , slasherAddr , burnerAddr ] = await Promise . all ( [
216+ vaultData . vault . owner ( ) ,
217+ vaultData . vault . delegator ( ) ,
218+ vaultData . vault . slasher ( ) ,
219+ vaultData . vault . burner ( ) ,
220+ ] ) ;
238221
239- this [ vaultAdminKey ] = this . safeMultisigNetwork ;
240- this [ delegatorAdminKey ] = this . safeMultisigNetwork ;
222+ expect ( vaultData . vault . target ) . to . not . equal ( ethers . ZeroAddress ) ;
223+ expect ( ownerAddr ) . to . equal ( expectedOwner ) ;
224+ expect ( delegatorAddr ) . to . equal ( vaultData . delegator . target ) ;
225+ expect ( slasherAddr ) . to . equal ( vaultData . slasher . target ) ;
226+ expect ( burnerAddr ) . to . equal ( expectedBurner ) ;
241227
242- const [ owner , delegator , slasher , burner ] = await Promise . all ( [
243- result . vault . owner ( ) ,
244- result . vault . delegator ( ) ,
245- result . vault . slasher ( ) ,
246- result . vault . burner ( ) ,
247- ] ) ;
248- expect ( owner ) . to . equal ( SAFE_MULTISIG_NETWORK_OPERATOR_MIDDLEWARE ) ;
249- expect ( delegator ) . to . equal ( this [ delegatorAddrKey ] ) ;
250- expect ( slasher ) . to . equal ( this [ slasherAddrKey ] ) ;
251- expect ( burner ) . to . equal ( this . burnerRouterAddr ) ;
252-
253- console . log ( `Vault ${ vaultNumber } deployed at:` , this [ vaultAddrKey ] ) ;
254- console . log ( `Vault ${ vaultNumber } slasher deployed at:` , this [ slasherAddrKey ] ) ;
255- console . log ( `Vault ${ vaultNumber } delegator deployed at:` , this [ delegatorAddrKey ] ) ;
256- console . log ( `Vault ${ vaultNumber } operator:` , operator ) ;
257- console . log ( `Vault ${ vaultNumber } burnerRouter set to:` , burner ) ;
228+ console . log ( `Vault ${ vaultNumber } deployed at:` , vaultData . vault . target ) ;
229+ console . log ( `Vault ${ vaultNumber } slasher deployed at:` , vaultData . slasher . target ) ;
230+ console . log ( `Vault ${ vaultNumber } delegator deployed at:` , vaultData . delegator . target ) ;
231+ console . log ( `Vault ${ vaultNumber } burner set to:` , burnerAddr ) ;
258232}
259233
260234describe ( 'Symbiotic Integration' , function ( ) {
@@ -480,10 +454,49 @@ describe('Symbiotic Integration', function () {
480454 } ) ;
481455
482456 it ( 'deploy all vaults successfully' , async function ( ) {
483- await deployAndVerifyVault . call ( this , 1 , this . operator1 . address ) ; // Vault 1
484- await deployAndVerifyVault . call ( this , 2 , this . operator1 . address ) ; // Vault 2
485- await deployAndVerifyVault . call ( this , 3 , this . operator1 . address ) ; // Vault 3
486- await deployAndVerifyVault . call ( this , 4 , this . operator1 . address ) ; // Vault 4
457+ const vaultAdmin = this . safeMultisigNetwork ;
458+ const delegatorAdmin = this . safeMultisigNetwork ;
459+ const operatorAddress = this . operator1 . address ;
460+
461+ const deployedVault1 = await deployVault (
462+ this . vaultConfigurator ,
463+ this . burnerRouterAddr ,
464+ vaultAdmin . address ,
465+ operatorAddress ,
466+ ) ;
467+ this . vault1 = { ...deployedVault1 , admin : vaultAdmin , delegatorAdmin } ;
468+ await verifyVaultDeployment ( 1 , this . vault1 , vaultAdmin . address , this . burnerRouterAddr ) ;
469+ console . log ( 'Vault 1 operator:' , operatorAddress ) ;
470+
471+ const deployedVault2 = await deployVault (
472+ this . vaultConfigurator ,
473+ this . burnerRouterAddr ,
474+ vaultAdmin . address ,
475+ operatorAddress ,
476+ ) ;
477+ this . vault2 = { ...deployedVault2 , admin : vaultAdmin , delegatorAdmin } ;
478+ await verifyVaultDeployment ( 2 , this . vault2 , vaultAdmin . address , this . burnerRouterAddr ) ;
479+ console . log ( 'Vault 2 operator:' , operatorAddress ) ;
480+
481+ const deployedVault3 = await deployVault (
482+ this . vaultConfigurator ,
483+ this . burnerRouterAddr ,
484+ vaultAdmin . address ,
485+ operatorAddress ,
486+ ) ;
487+ this . vault3 = { ...deployedVault3 , admin : vaultAdmin , delegatorAdmin } ;
488+ await verifyVaultDeployment ( 3 , this . vault3 , vaultAdmin . address , this . burnerRouterAddr ) ;
489+ console . log ( 'Vault 3 operator:' , operatorAddress ) ;
490+
491+ const deployedVault4 = await deployVault (
492+ this . vaultConfigurator ,
493+ this . burnerRouterAddr ,
494+ vaultAdmin . address ,
495+ operatorAddress ,
496+ ) ;
497+ this . vault4 = { ...deployedVault4 , admin : vaultAdmin , delegatorAdmin } ;
498+ await verifyVaultDeployment ( 4 , this . vault4 , vaultAdmin . address , this . burnerRouterAddr ) ;
499+ console . log ( 'Vault 4 operator:' , operatorAddress ) ;
487500 } ) ;
488501
489502 it ( 'stake in vaults - 2 stakers per vault' , async function ( ) {
@@ -504,32 +517,32 @@ describe('Symbiotic Integration', function () {
504517 const staker8Vault4Amount = parseEther ( '10000' ) ;
505518
506519 await Promise . all ( [
507- this . wstETH . connect ( this . staker1 ) . approve ( this . vault1Addr , staker1Vault1Amount ) ,
508- this . wstETH . connect ( this . staker2 ) . approve ( this . vault1Addr , staker2Vault1Amount ) ,
509- this . wstETH . connect ( this . staker3 ) . approve ( this . vault2Addr , staker3Vault2Amount ) ,
510- this . wstETH . connect ( this . staker4 ) . approve ( this . vault2Addr , staker4Vault2Amount ) ,
511- this . wstETH . connect ( this . staker5 ) . approve ( this . vault3Addr , staker5Vault3Amount ) ,
512- this . wstETH . connect ( this . staker6 ) . approve ( this . vault3Addr , staker6Vault3Amount ) ,
513- this . wstETH . connect ( this . staker7 ) . approve ( this . vault4Addr , staker7Vault4Amount ) ,
514- this . wstETH . connect ( this . staker8 ) . approve ( this . vault4Addr , staker8Vault4Amount ) ,
520+ this . wstETH . connect ( this . staker1 ) . approve ( this . vault1 . vault . target , staker1Vault1Amount ) ,
521+ this . wstETH . connect ( this . staker2 ) . approve ( this . vault1 . vault . target , staker2Vault1Amount ) ,
522+ this . wstETH . connect ( this . staker3 ) . approve ( this . vault2 . vault . target , staker3Vault2Amount ) ,
523+ this . wstETH . connect ( this . staker4 ) . approve ( this . vault2 . vault . target , staker4Vault2Amount ) ,
524+ this . wstETH . connect ( this . staker5 ) . approve ( this . vault3 . vault . target , staker5Vault3Amount ) ,
525+ this . wstETH . connect ( this . staker6 ) . approve ( this . vault3 . vault . target , staker6Vault3Amount ) ,
526+ this . wstETH . connect ( this . staker7 ) . approve ( this . vault4 . vault . target , staker7Vault4Amount ) ,
527+ this . wstETH . connect ( this . staker8 ) . approve ( this . vault4 . vault . target , staker8Vault4Amount ) ,
515528 ] ) ;
516529
517530 await Promise . all ( [
518- this . vault1 . connect ( this . staker1 ) . deposit ( this . staker1 . address , staker1Vault1Amount ) , // vault 1 - staker 1 & 2
519- this . vault1 . connect ( this . staker2 ) . deposit ( this . staker2 . address , staker2Vault1Amount ) , // vault 1 - staker 1 & 2
520- this . vault2 . connect ( this . staker3 ) . deposit ( this . staker3 . address , staker3Vault2Amount ) , // vault 2 - staker 3 & 4
521- this . vault2 . connect ( this . staker4 ) . deposit ( this . staker4 . address , staker4Vault2Amount ) , // vault 2 - staker 3 & 4
522- this . vault3 . connect ( this . staker5 ) . deposit ( this . staker5 . address , staker5Vault3Amount ) , // vault 3 - staker 5 & 6
523- this . vault3 . connect ( this . staker6 ) . deposit ( this . staker6 . address , staker6Vault3Amount ) , // vault 3 - staker 5 & 6
524- this . vault4 . connect ( this . staker7 ) . deposit ( this . staker7 . address , staker7Vault4Amount ) , // vault 4 - staker 7 & 8
525- this . vault4 . connect ( this . staker8 ) . deposit ( this . staker8 . address , staker8Vault4Amount ) , // vault 4 - staker 7 & 8
531+ this . vault1 . vault . connect ( this . staker1 ) . deposit ( this . staker1 . address , staker1Vault1Amount ) , // vault 1 - staker 1 & 2
532+ this . vault1 . vault . connect ( this . staker2 ) . deposit ( this . staker2 . address , staker2Vault1Amount ) , // vault 1 - staker 1 & 2
533+ this . vault2 . vault . connect ( this . staker3 ) . deposit ( this . staker3 . address , staker3Vault2Amount ) , // vault 2 - staker 3 & 4
534+ this . vault2 . vault . connect ( this . staker4 ) . deposit ( this . staker4 . address , staker4Vault2Amount ) , // vault 2 - staker 3 & 4
535+ this . vault3 . vault . connect ( this . staker5 ) . deposit ( this . staker5 . address , staker5Vault3Amount ) , // vault 3 - staker 5 & 6
536+ this . vault3 . vault . connect ( this . staker6 ) . deposit ( this . staker6 . address , staker6Vault3Amount ) , // vault 3 - staker 5 & 6
537+ this . vault4 . vault . connect ( this . staker7 ) . deposit ( this . staker7 . address , staker7Vault4Amount ) , // vault 4 - staker 7 & 8
538+ this . vault4 . vault . connect ( this . staker8 ) . deposit ( this . staker8 . address , staker8Vault4Amount ) , // vault 4 - staker 7 & 8
526539 ] ) ;
527540
528541 const [ vault1ActiveStake , vault2ActiveStake , vault3ActiveStake , vault4ActiveStake ] = await Promise . all ( [
529- this . vault1 . activeStake ( ) ,
530- this . vault2 . activeStake ( ) ,
531- this . vault3 . activeStake ( ) ,
532- this . vault4 . activeStake ( ) ,
542+ this . vault1 . vault . activeStake ( ) ,
543+ this . vault2 . vault . activeStake ( ) ,
544+ this . vault3 . vault . activeStake ( ) ,
545+ this . vault4 . vault . activeStake ( ) ,
533546 ] ) ;
534547
535548 expect ( vault1ActiveStake ) . to . equal ( staker1Vault1Amount + staker2Vault1Amount ) ; // 30K
@@ -554,29 +567,29 @@ describe('Symbiotic Integration', function () {
554567 it ( 'network, operator and vault opt ins' , async function ( ) {
555568 await Promise . all ( [
556569 this . operatorNetworkOptIn . connect ( this . operator1 ) . optIn ( this . network . address ) ,
557- this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault1Addr ) ,
558- this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault2Addr ) ,
559- this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault3Addr ) ,
560- this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault4Addr ) ,
570+ this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault1 . vault . target ) ,
571+ this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault2 . vault . target ) ,
572+ this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault3 . vault . target ) ,
573+ this . operatorVaultOptIn . connect ( this . operator1 ) . optIn ( this . vault4 . vault . target ) ,
561574 ] ) ;
562575 console . log ( 'Operator 1 opted in vault 1, vault 2, vault 3 and vault 4' ) ;
563576 } ) ;
564577
565578 it ( 'subnetwork 1 - vault 1 and vault 2 allocation' , async function ( ) {
566579 // vault 1: setMaxNetworkLimit and setNetworkLimit (20K to subnetwork 1, 10K left for subnetwork 2)
567580 const vault1Subnetwork1Stake = parseEther ( '20000' ) ;
568- await this . delegator1 . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork1Id , vault1Subnetwork1Stake ) ;
569- await this . delegator1 . connect ( this . delegator1Admin ) . setNetworkLimit ( this . subnetwork1 , vault1Subnetwork1Stake ) ;
581+ await this . vault1 . delegator . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork1Id , vault1Subnetwork1Stake ) ;
582+ await this . vault1 . delegator . connect ( this . vault1 . admin ) . setNetworkLimit ( this . subnetwork1 , vault1Subnetwork1Stake ) ;
570583
571584 // vault 2: setMaxNetworkLimit and setNetworkLimit (20K to subnetwork 1)
572585 const vault2TotalStake = parseEther ( '20000' ) ;
573- await this . delegator2 . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork1Id , vault2TotalStake ) ;
574- await this . delegator2 . connect ( this . delegator2Admin ) . setNetworkLimit ( this . subnetwork1 , vault2TotalStake ) ;
586+ await this . vault2 . delegator . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork1Id , vault2TotalStake ) ;
587+ await this . vault2 . delegator . connect ( this . vault2 . admin ) . setNetworkLimit ( this . subnetwork1 , vault2TotalStake ) ;
575588
576589 // verify stakes for both vaults in subnetwork 1 (both use operator1)
577590 const [ vault1Stake , vault2Stake ] = await Promise . all ( [
578- this . delegator1 . stake ( this . subnetwork1 , this . operator1 . address ) ,
579- this . delegator2 . stake ( this . subnetwork1 , this . operator1 . address ) ,
591+ this . vault1 . delegator . stake ( this . subnetwork1 , this . operator1 . address ) ,
592+ this . vault2 . delegator . stake ( this . subnetwork1 , this . operator1 . address ) ,
580593 ] ) ;
581594
582595 expect ( vault1Stake ) . to . be . equal ( vault1Subnetwork1Stake ) ;
@@ -589,24 +602,24 @@ describe('Symbiotic Integration', function () {
589602 it ( 'subnetwork 2 - vault 1, vault 3 and vault 4 allocation' , async function ( ) {
590603 // vault 1: allocate additional 10K to subnetwork 2
591604 const vault1Subnetwork2Stake = parseEther ( '10000' ) ;
592- await this . delegator1 . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork2Id , vault1Subnetwork2Stake ) ;
593- await this . delegator1 . connect ( this . delegator1Admin ) . setNetworkLimit ( this . subnetwork2 , vault1Subnetwork2Stake ) ;
605+ await this . vault1 . delegator . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork2Id , vault1Subnetwork2Stake ) ;
606+ await this . vault1 . delegator . connect ( this . vault1 . admin ) . setNetworkLimit ( this . subnetwork2 , vault1Subnetwork2Stake ) ;
594607
595608 // vault 3: setMaxNetworkLimit and setNetworkLimit (20K to subnetwork 2)
596609 const vault3TotalStake = parseEther ( '20000' ) ;
597- await this . delegator3 . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork2Id , vault3TotalStake ) ;
598- await this . delegator3 . connect ( this . delegator3Admin ) . setNetworkLimit ( this . subnetwork2 , vault3TotalStake ) ;
610+ await this . vault3 . delegator . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork2Id , vault3TotalStake ) ;
611+ await this . vault3 . delegator . connect ( this . vault3 . admin ) . setNetworkLimit ( this . subnetwork2 , vault3TotalStake ) ;
599612
600613 // vault 4: setMaxNetworkLimit and setNetworkLimit (20K to subnetwork 2)
601614 const vault4TotalStake = parseEther ( '20000' ) ;
602- await this . delegator4 . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork2Id , vault4TotalStake ) ;
603- await this . delegator4 . connect ( this . delegator4Admin ) . setNetworkLimit ( this . subnetwork2 , vault4TotalStake ) ;
615+ await this . vault4 . delegator . connect ( this . network ) . setMaxNetworkLimit ( this . subnetwork2Id , vault4TotalStake ) ;
616+ await this . vault4 . delegator . connect ( this . vault4 . admin ) . setNetworkLimit ( this . subnetwork2 , vault4TotalStake ) ;
604617
605618 // verify stakes for all vaults in subnetwork 2
606619 const [ vault1StakeSubnetwork2 , vault3Stake , vault4Stake ] = await Promise . all ( [
607- this . delegator1 . stake ( this . subnetwork2 , this . operator1 . address ) ,
608- this . delegator3 . stake ( this . subnetwork2 , this . operator1 . address ) ,
609- this . delegator4 . stake ( this . subnetwork2 , this . operator1 . address ) ,
620+ this . vault1 . delegator . stake ( this . subnetwork2 , this . operator1 . address ) ,
621+ this . vault3 . delegator . stake ( this . subnetwork2 , this . operator1 . address ) ,
622+ this . vault4 . delegator . stake ( this . subnetwork2 , this . operator1 . address ) ,
610623 ] ) ;
611624
612625 expect ( vault1StakeSubnetwork2 ) . to . be . equal ( vault1Subnetwork2Stake ) ;
0 commit comments