Skip to content

Commit 17d255b

Browse files
committed
[wip] Assignment side
1 parent 6860270 commit 17d255b

File tree

6 files changed

+46
-26
lines changed

6 files changed

+46
-26
lines changed

contracts/contract/dao/protocol/settings/RocketDAOProtocolSettingsMinipool.sol

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import "./RocketDAOProtocolSettings.sol";
88
import "../../../../interface/dao/protocol/settings/RocketDAOProtocolSettingsMinipoolInterface.sol";
99
import "../../../../interface/dao/node/settings/RocketDAONodeTrustedSettingsMinipoolInterface.sol";
1010
import "../../../../types/MinipoolDeposit.sol";
11+
import "../../../../contracts/contract/minipool/RocketMinipoolDelegate.sol";
1112

1213
// Network minipool settings
1314
contract RocketDAOProtocolSettingsMinipool is RocketDAOProtocolSettings, RocketDAOProtocolSettingsMinipoolInterface {
@@ -49,29 +50,25 @@ contract RocketDAOProtocolSettingsMinipool is RocketDAOProtocolSettings, RocketD
4950
}
5051

5152
// Required node deposit amounts
52-
function getDepositNodeAmount(MinipoolDeposit _depositType) override external pure returns (uint256) {
53-
if (_depositType == MinipoolDeposit.Full) { return getFullDepositNodeAmount(); }
54-
if (_depositType == MinipoolDeposit.Half) { return getHalfDepositNodeAmount(); }
55-
if (_depositType == MinipoolDeposit.Empty) { return getEmptyDepositNodeAmount(); }
56-
return 0;
57-
}
5853
function getFullDepositNodeAmount() override public pure returns (uint256) {
5954
return getLaunchBalance();
6055
}
6156
function getHalfDepositNodeAmount() override public pure returns (uint256) {
6257
return getLaunchBalance().div(2);
6358
}
64-
function getEmptyDepositNodeAmount() override public pure returns (uint256) {
65-
return 0 ether;
66-
}
6759

6860
// Required user deposit amounts
6961
function getDepositUserAmount(MinipoolDeposit _depositType) override external pure returns (uint256) {
62+
if (_depositType == MinipoolDeposit.Efficient) { return getEfficientDepositUserAmount(); }
7063
if (_depositType == MinipoolDeposit.Full) { return getFullDepositUserAmount(); }
7164
if (_depositType == MinipoolDeposit.Half) { return getHalfDepositUserAmount(); }
7265
if (_depositType == MinipoolDeposit.Empty) { return getEmptyDepositUserAmount(); }
7366
return 0;
7467
}
68+
function getEfficientDepositUserAmount() override public pure returns (uint256) {
69+
address delegateAddress = getContractAddress("rocketMinipoolDelegate");
70+
return getLaunchBalance().sub(delegateAddress.efficientprelaunchAmount);
71+
}
7572
function getFullDepositUserAmount() override public pure returns (uint256) {
7673
return getLaunchBalance().div(2);
7774
}

contracts/contract/deposit/RocketDepositPool.sol

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,24 @@ contract RocketDepositPool is RocketBase, RocketDepositPoolInterface, RocketVaul
213213
assignmentIndex++;
214214
}
215215

216+
// Prepare efficient deposit assignments - will always need 31 ETH
217+
count = rocketMinipoolQueue.getLength(MinipoolDeposit.Efficient);
218+
minipoolCapacity = rocketDAOProtocolSettingsMinipool.getDepositUserAmount(MinipoolDeposit.Efficient);
219+
for (i; i < i + count; ++i) { // NOTE - this is a weird line - we continue the indexing from the full deposit loop
220+
if (depositValueForAssignments < minipoolCapacity) {
221+
if (socializedAssignments == 0) { break; }
222+
else {socializedAssignments--;}
223+
}
224+
if (balance.sub(totalEther) < minipoolCapacity) { break; }
225+
// Dequeue the minipool
226+
address minipoolAddress = rocketMinipoolQueue.dequeueMinipoolByDeposit(MinipoolDeposit.Efficient);
227+
// Update running total
228+
totalEther = totalEther.add(minipoolCapacity);
229+
// Add assignment
230+
assignments[i].etherAssigned = minipoolCapacity;
231+
assignments[i].minipoolAddress = minipoolAddress;
232+
}
233+
216234
if (totalEther > 0) {
217235
// Withdraw ETH from vault
218236
_rocketVault.withdrawEther(totalEther);

contracts/contract/minipool/RocketMinipoolDelegate.sol

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,19 @@ contract RocketMinipoolDelegate is RocketMinipoolStorageLayout, RocketMinipoolIn
157157
require(userDepositAssignedTime == 0, "The user deposit has already been assigned");
158158
// Progress initialised minipool to prelaunch
159159
if (status == MinipoolStatus.Initialised) { setStatus(MinipoolStatus.Prelaunch); }
160-
// Update user deposit details
161-
userDepositBalance = msg.value;
162-
userDepositAssignedTime = block.timestamp;
163-
// Refinance full minipool
160+
164161
if (depositType == MinipoolDeposit.Full) {
165-
// Update node balances
162+
// Refinance full minipool
166163
nodeDepositBalance = nodeDepositBalance.sub(msg.value);
167164
nodeRefundBalance = nodeRefundBalance.add(msg.value);
168165
}
166+
167+
168+
nodeDepositAssigned = true; // indicate that the node deposit was returned for Efficient queue
169+
// Update user deposit details
170+
userDepositBalance = msg.value;
171+
userDepositAssignedTime = block.timestamp;
172+
169173
// Emit ether deposited event
170174
emit EtherDeposited(msg.sender, msg.value, block.timestamp);
171175
}

contracts/contract/minipool/RocketMinipoolQueue.sol

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ contract RocketMinipoolQueue is RocketBase, RocketMinipoolQueueInterface {
4747
// Get the length of a queue
4848
// Returns 0 for invalid queues
4949
function getLength(MinipoolDeposit _depositType) override external view returns (uint256) {
50+
if (_depositType == MinipoolDeposit.Efficient) { return getLength(queueKeyEfficient); }
5051
if (_depositType == MinipoolDeposit.Full) { return getLength(queueKeyFull); }
5152
if (_depositType == MinipoolDeposit.Half) { return getLength(queueKeyHalf); }
5253
if (_depositType == MinipoolDeposit.Empty) { return getLength(queueKeyEmpty); }
@@ -64,12 +65,15 @@ contract RocketMinipoolQueue is RocketBase, RocketMinipoolQueueInterface {
6465
getLength(queueKeyFull).mul(rocketDAOProtocolSettingsMinipool.getFullDepositUserAmount())
6566
).add(
6667
getLength(queueKeyHalf).mul(rocketDAOProtocolSettingsMinipool.getHalfDepositUserAmount())
68+
).add(
69+
getLength(queueKeyEfficient).mul(rocketDAOProtocolSettingsMinipool.getEfficientDepositUserAmount())
6770
);
6871
}
6972

7073
// Add a minipool to the end of the appropriate queue
7174
// Only accepts calls from the RocketMinipoolManager contract
7275
function enqueueMinipool(MinipoolDeposit _depositType, address _minipool) override external onlyLatestContract("rocketMinipoolQueue", address(this)) onlyLatestContract("rocketMinipoolManager", msg.sender) {
76+
if (_depositType == MinipoolDeposit.Efficient) { return enqueueMinipool(queueKeyEfficient, _minipool); }
7377
if (_depositType == MinipoolDeposit.Half) { return enqueueMinipool(queueKeyHalf, _minipool); }
7478
if (_depositType == MinipoolDeposit.Full) { return enqueueMinipool(queueKeyFull, _minipool); }
7579
if (_depositType == MinipoolDeposit.Empty) { return enqueueMinipool(queueKeyEmpty, _minipool); }
@@ -83,15 +87,10 @@ contract RocketMinipoolQueue is RocketBase, RocketMinipoolQueueInterface {
8387
emit MinipoolEnqueued(_minipool, _key, block.timestamp);
8488
}
8589

86-
// Remove the first available minipool from the highest priority queue and return its address
8790
// Only accepts calls from the RocketDepositPool contract
88-
function dequeueMinipool() override external onlyLatestContract("rocketMinipoolQueue", address(this)) onlyLatestContract("rocketDepositPool", msg.sender) returns (address minipoolAddress) {
89-
if (getLength(queueKeyHalf) > 0) { return dequeueMinipool(queueKeyHalf); }
90-
if (getLength(queueKeyFull) > 0) { return dequeueMinipool(queueKeyFull); }
91-
if (getLength(queueKeyEmpty) > 0) { return dequeueMinipool(queueKeyEmpty); }
92-
require(false, "No minipools are available");
9391
}
9492
function dequeueMinipoolByDeposit(MinipoolDeposit _depositType) override external onlyLatestContract("rocketMinipoolQueue", address(this)) onlyLatestContract("rocketDepositPool", msg.sender) returns (address minipoolAddress) {
93+
if (_depositType == MinipoolDeposit.Efficient) { return dequeueMinipool(queueKeyEfficient); }
9594
if (_depositType == MinipoolDeposit.Half) { return dequeueMinipool(queueKeyHalf); }
9695
if (_depositType == MinipoolDeposit.Full) { return dequeueMinipool(queueKeyFull); }
9796
if (_depositType == MinipoolDeposit.Empty) { return dequeueMinipool(queueKeyEmpty); }
@@ -113,6 +112,7 @@ contract RocketMinipoolQueue is RocketBase, RocketMinipoolQueueInterface {
113112
// queue. This is acceptable because removing minipools should be rare.
114113
function removeMinipool(MinipoolDeposit _depositType) override external onlyLatestContract("rocketMinipoolQueue", address(this)) onlyRegisteredMinipool(msg.sender) {
115114
// Remove minipool from queue
115+
if (_depositType == MinipoolDeposit.Efficient) { return removeMinipool(queueKeyEfficient, msg.sender); }
116116
if (_depositType == MinipoolDeposit.Half) { return removeMinipool(queueKeyHalf, msg.sender); }
117117
if (_depositType == MinipoolDeposit.Full) { return removeMinipool(queueKeyFull, msg.sender); }
118118
if (_depositType == MinipoolDeposit.Empty) { return removeMinipool(queueKeyEmpty, msg.sender); }

contracts/contract/node/RocketNodeDeposit.sol

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,13 @@ contract RocketNodeDeposit is RocketBase, RocketNodeDepositInterface {
7070
function getDepositType(uint256 _amount) public override view returns (MinipoolDeposit) {
7171
// Get contract
7272
RocketDAOProtocolSettingsMinipoolInterface rocketDAOProtocolSettingsMinipool = RocketDAOProtocolSettingsMinipoolInterface(getContractAddress("rocketDAOProtocolSettingsMinipool"));
73-
// Get deposit type by node deposit amount
74-
if (_amount == rocketDAOProtocolSettingsMinipool.getFullDepositNodeAmount()) { return MinipoolDeposit.Full; }
75-
else if (_amount == rocketDAOProtocolSettingsMinipool.getHalfDepositNodeAmount()) { return MinipoolDeposit.Half; }
76-
// Invalid deposit amount
77-
return MinipoolDeposit.None;
73+
// Ensure valid deposit amount
74+
if (_amount == rocketDAOProtocolSettingsMinipool.getHalfDepositNodeAmount()) {
75+
// invalid deposit amount
76+
return MinipoolDeposit.None;
77+
}
78+
// All deposits going forward have the same type and use the same queue
79+
return MinipoolDeposit.Efficient;
7880
}
7981

8082
function checkNodeFee(uint256 _minimumNodeFee) private view {

contracts/interface/dao/protocol/settings/RocketDAOProtocolSettingsMinipoolInterface.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import "../../../../types/MinipoolDeposit.sol";
66

77
interface RocketDAOProtocolSettingsMinipoolInterface {
88
function getLaunchBalance() external view returns (uint256);
9-
function getDepositNodeAmount(MinipoolDeposit _depositType) external view returns (uint256);
109
function getFullDepositNodeAmount() external view returns (uint256);
1110
function getHalfDepositNodeAmount() external view returns (uint256);
1211
function getEmptyDepositNodeAmount() external view returns (uint256);

0 commit comments

Comments
 (0)