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.
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 ?