Skip to content

Latest commit

 

History

History
47 lines (37 loc) · 1.18 KB

File metadata and controls

47 lines (37 loc) · 1.18 KB

// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.23;

contract EmployeeStorage { // SLOT 0: Te dwie zmienne zajmują tylko 5 z 32 bajtów tego slotu uint24 private salary; uint16 private shares;

// SLOT 1: Zajmuje cały slot (32 bajty)
uint256 public idNumber; 

// SLOT 2: String (krótkie napisy są przechowywane bezpośrednio tutaj)
string public name;

error TooManyShares(uint16 provided, uint16 limit);

constructor() {
    name = "Pat";
    idNumber = 112358132134;
    salary = 50000;
    shares = 1000;
}

function grantShares(uint16 _newShares) external {
    if (_newShares > 5000) {
        revert TooManyShares(_newShares, 5000);
    }
    shares += _newShares;
}

// Pozwala sprawdzić Slot 0, aby zobaczyć spakowane salary i shares
function checkForPacking(uint _slot) external view returns (uint result) {
    assembly {
        result := sload(_slot)
    }
}

function viewEmployeeData() external view returns (uint24 _salary, uint16 _shares) {
    return (salary, shares);
}

function debugResetShares() external {
    shares = 1000;
}

}

}# BL2.1