I am trying to test proxy pattern in Remix, which connected to my private chain with Web3 Provider. By the way, miner is working all the time. After invoking add function of Proxy contract, the state variable total of Proxy contract has not change. But with Javascript VM, it changed as expected.
Here is the code:
pragma solidity ^0.5.0;
contract Proxy {
address public implement;
// with Web3 Provider, it didn't change.
// but with Javascript VM, It changed as expected.
uint public total;
function changeImpl(address _impl) public returns(bool) {
implement = _impl;
return true;
}
// according to proxy pattern, this should be fallback function.
// i change it as named function just for convenience
function add(uint a, uint b) external {
address _impl = implement;
assembly {
let ptr := mload(0x40)
calldatacopy(ptr, 0, calldatasize)
let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0)
}
}
}
contract ImplContract {
address public implement;
uint public total;
function add(uint a, uint b) public returns(uint) {
total = a + b;
return total;
}
}
I am so confused why same code make different outcome. Any help would be appreciated.
I am trying to test proxy pattern in Remix, which connected to my private chain with Web3 Provider. By the way, miner is working all the time. After invoking add function of Proxy contract, the state variable total of Proxy contract has not change. But with Javascript VM, it changed as expected.
Here is the code:
I am so confused why same code make different outcome. Any help would be appreciated.