You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'll start with as little code as possible as likely "It's me not solc"
struct Allocation {
uint48 stakeTime;
uint48 unlockTime;
uint32 spare;
uint128 stakeAmount;
}
mapping(address=> Allocation[]) public userMap;
Allocation[] storage allocations = userMap[_account];
Allocation storage a;
while (aid > i) {
a = allocations[aid];
if (a.unlockTime <=block.timestamp) {
++foundUnlocked;
totalAmount += a.stakeAmount;
// a = allocations[allocations.length - 1]; // Why does this does not work ????
allocations[aid] = allocations[allocations.length-1]; // this works
allocations.pop();
}
--aid;
}
I understand that array of struct if a reference type, but why can't I assign to a that it shows up in allocations[aid] (as it should point to the same storage slot) ?
If I assign individual variables within a struct it works, but that is of course not an efficient alternative.
a = allocations[i];
a.stakeAmount = totalAmount.toUint128();
a.stakeTime =uint48(block.timestamp);
a.unlockTime =uint48(block.timestamp);
What am I missing ?
The text was updated successfully, but these errors were encountered:
I'll start with as little code as possible as likely "It's me not solc"
I understand that array of struct if a reference type, but why can't I assign to
a
that it shows up inallocations[aid]
(as it should point to the same storage slot) ?If I assign individual variables within a struct it works, but that is of course not an efficient alternative.
What am I missing ?
The text was updated successfully, but these errors were encountered: