Skip to content

Commit

Permalink
Fix node balance accounting on deposit with credit
Browse files Browse the repository at this point in the history
  • Loading branch information
kanewallmann committed Feb 11, 2025
1 parent 6bad025 commit 5fa1972
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
5 changes: 4 additions & 1 deletion contracts/contract/deposit/RocketDepositPool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,10 @@ contract RocketDepositPool is RocketBase, RocketDepositPoolInterface, RocketVaul
rocketVault.depositEther{value: msg.value}();
}
// Increase recorded node balance
addUint("deposit.pool.node.balance", _bondAmount);
// Note: The difference between `_bondAmount` and `msg.value` is the amount of credit being used on this deposit.
// That amount of credit is already accounted for in `deposit.pool.node.balance` and therefore we only
// need to add `msg.value` to the node balance.
addUint("deposit.pool.node.balance", msg.value);
}

/// @notice Recycle a deposit from a dissolved validator
Expand Down
17 changes: 13 additions & 4 deletions test/_helpers/megapool.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,17 +102,26 @@ export async function nodeDeposit(node, bondAmount = '4'.ether, useExpressTicket
const depositPoolCapacity = await rocketDepositPool.getBalance();
const amountRequired = '32'.ether - bondAmount;
const expectAssignment = assignmentsEnabled && depositPoolCapacity >= amountRequired;
let expectedNodeBalanceChange = bondAmount;

if (!usingCredit) {
const tx = await rocketNodeDeposit.connect(node).deposit(bondAmount, useExpressTicket, depositData.pubkey, depositData.signature, depositDataRoot, {value: bondAmount});
await tx.wait();
} else {
const creditBefore = await rocketNodeDeposit.getNodeUsableCreditAndBalance(node.address);
const creditBefore = await rocketNodeDeposit.getNodeDepositCredit(node.address);
const balanceBefore = await rocketNodeDeposit.getNodeEthBalance(node.address);

const tx = await rocketNodeDeposit.connect(node).depositWithCredit(bondAmount, useExpressTicket, depositData.pubkey, depositData.signature, depositDataRoot, {value: bondAmount - creditAmount});
await tx.wait();
const creditAfter = await rocketNodeDeposit.getNodeUsableCreditAndBalance(node.address);

const creditAfter = await rocketNodeDeposit.getNodeDepositCredit(node.address);
const balanceAfter = await rocketNodeDeposit.getNodeEthBalance(node.address);

const creditAndBalanceDelta = (creditAfter + balanceAfter) - (creditBefore + balanceBefore);
assertBN.equal(creditAndBalanceDelta, -creditAmount);

const creditDelta = creditAfter - creditBefore;
assertBN.equal(creditDelta, -creditAmount);
expectedNodeBalanceChange += creditDelta;
}

const data2 = await getData();
Expand Down Expand Up @@ -166,7 +175,7 @@ export async function nodeDeposit(node, bondAmount = '4'.ether, useExpressTicket
assertBN.equal(nodeCapitalDelta, 0n, "Incorrect node capital");
assertBN.equal(userCapitalDelta, 0n, "Incorrect user capital");
assertBN.equal(assignedValueDelta, 0n, "Incorrect assigned value");
assertBN.equal(nodeBalanceDelta, bondAmount, "Incorrect node balance value");
assertBN.equal(nodeBalanceDelta, expectedNodeBalanceChange, "Incorrect node balance value");
}

assertBN.equal(validatorInfo.lastRequestedValue, '32'.ether / milliToWei, "Incorrect validator lastRequestedValue");
Expand Down

0 comments on commit 5fa1972

Please sign in to comment.