编译器
0.8.18+commit.87f61d96
文件 1 的 4:Ownable.sol
pragma solidity ^0.8.0;
contract Ownable {
bytes32 private constant MASTER_POSITION = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
constructor(address masterAddress) {
setMaster(masterAddress);
}
function requireMaster(address _address) internal view {
require(_address == getMaster(), "1c");
}
function getMaster() public view returns (address master) {
bytes32 position = MASTER_POSITION;
assembly {
master := sload(position)
}
}
function setMaster(address _newMaster) internal {
bytes32 position = MASTER_POSITION;
assembly {
sstore(position, _newMaster)
}
}
function transferMastership(address _newMaster) external {
requireMaster(msg.sender);
require(_newMaster != address(0), "1d");
setMaster(_newMaster);
}
}
文件 2 的 4:Proxy.sol
pragma solidity ^0.8.0;
import "./Ownable.sol";
import "./Upgradeable.sol";
import "./UpgradeableMaster.sol";
contract Proxy is Upgradeable, Ownable {
bytes32 private constant TARGET_POSITION = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
constructor(address target, bytes memory targetInitializationParameters) Ownable(msg.sender) {
setTarget(target);
(bool initializationSuccess, ) = getTarget().delegatecall(abi.encodeWithSignature("initialize(bytes)", targetInitializationParameters));
require(initializationSuccess, "uin11");
}
function initialize(bytes calldata) external pure {
revert("ini11");
}
function upgrade(bytes calldata) external pure {
revert("upg11");
}
function getTarget() public view returns (address target) {
bytes32 position = TARGET_POSITION;
assembly {
target := sload(position)
}
}
function setTarget(address _newTarget) internal {
bytes32 position = TARGET_POSITION;
assembly {
sstore(position, _newTarget)
}
}
function upgradeTarget(address newTarget, bytes calldata newTargetUpgradeParameters) external override {
requireMaster(msg.sender);
setTarget(newTarget);
(bool upgradeSuccess, ) = getTarget().delegatecall(abi.encodeWithSignature("upgrade(bytes)", newTargetUpgradeParameters));
require(upgradeSuccess, "ufu11");
}
function _fallback() internal {
address _target = getTarget();
assembly {
let ptr := mload(0x40)
calldatacopy(ptr, 0x0, calldatasize())
let result := delegatecall(gas(), _target, ptr, calldatasize(), 0x0, 0)
let size := returndatasize()
returndatacopy(ptr, 0x0, size)
switch result
case 0 {
revert(ptr, size)
}
default {
return(ptr, size)
}
}
}
fallback() external payable {
_fallback();
}
receive() external payable {
_fallback();
}
}
文件 3 的 4:Upgradeable.sol
pragma solidity ^0.8.0;
interface Upgradeable {
function upgradeTarget(address newTarget, bytes calldata newTargetInitializationParameters) external;
}
文件 4 的 4:UpgradeableMaster.sol
pragma solidity ^0.8.0;
interface UpgradeableMaster {
function getNoticePeriod() external returns (uint256);
function isReadyForUpgrade() external returns (bool);
}
{
"compilationTarget": {
"cache/solpp-generated-contracts/zksync/Proxy.sol": "Proxy"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"viaIR": true
}
[{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"targetInitializationParameters","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"getMaster","outputs":[{"internalType":"address","name":"master","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTarget","outputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_newMaster","type":"address"}],"name":"transferMastership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"upgrade","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newTarget","type":"address"},{"internalType":"bytes","name":"newTargetUpgradeParameters","type":"bytes"}],"name":"upgradeTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]