pragma solidity 0.5.0; contract Foo { uint256 public value; address public sender; address public owner; constructor() public { owner = msg.sender; } function setValue(uint256 newValue) public { value = newValue; sender = msg.sender; } } contract FooBroken { // dummy variables, but they mess up the storage order uint256 public dummy1; uint256 public dummy2; uint256 public value; address public sender; address public owner; constructor() public { owner = msg.sender; } function setValue(uint256 newValue) public { value = newValue; sender = msg.sender; } } contract Bar { uint256 public value; address public sender; address public fooAddress; address public fooBrokenAddress; function setFooAddress(address newFooAddress, address newFooBrokenAddress) public { fooAddress = newFooAddress; fooBrokenAddress = newFooBrokenAddress; } function delegateSetValueFoo(uint256 newValue) public { (bool success, bytes memory data) = fooAddress.delegatecall( abi.encodeWithSignature("setValue(uint256)", newValue) ); require(success); } function delegateSetValueFooBroken(uint256 newValue) public { (bool success, bytes memory data) = fooBrokenAddress.delegatecall( abi.encodeWithSignature("setValue(uint256)", newValue) ); require(success); } }
0.4.18