잠금 해제하셈 ㄱㄱ
pragma solidity ^0.8.0;
contract Privacy {
bool public locked = true;
uint256 public ID = block.timestamp;
uint8 private flattening = 10;
uint8 private denomination = 255;
uint16 private awkwardness = uint16(block.timestamp);
bytes32[3] private data;
constructor(bytes32[3] memory _data) {
data = _data;
}
function unlock(bytes16 _key) public {
require(_key == bytes16(data[2]));
locked = false;
}
/*
A bunch of super advanced solidity algorithms...
,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`
.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,
*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^ ,---/V\\
`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*. ~|__(o.o)
^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*'^`*.,*' UU UU
*/
}

스토리지에 저장되는 값들은 슬롯에 순서대로 저장이 되며, 스토리지의 각 슬롯에는 최대 32바이트 크기의 데이터가 저장될 수 있다

이런식으로 storage를 배치하게 되면 31바이트(엄밀히 따지면 255비트) + 31바이트 + 31바이트 + 30바이트해서 총 123바이트가 낭비됨으로 인해 불필요한 비용이 발생하게 된다. (일반적인 값 타입의 경우 빈 자리는 00으로 채워짐)

그래서 위와 같이 32바이트를 넘지 않는 선에서 야무지게 storage를 저장한다. → 따라서 data[2]에 접근해야하는 우리는 5번째 storage를 접근하면 된다
cast storage [문제 address] 5 --rpc-url [rpc-url]
cast storage 사용하여 5번째 storage 접근 ㄱㄱ