Skip to content

Commit 12d256a

Browse files
committed
test: clean up symbiotic-setup and slash tests
1 parent 02e3540 commit 12d256a

2 files changed

Lines changed: 271 additions & 259 deletions

File tree

test/fork/symbiotic/symbiotic-setup.js

Lines changed: 108 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -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

260234
describe('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

Comments
 (0)