文件 1 的 1:IdentityProxy.sol
pragma solidity ^0.6.9;
interface IImplementationAuthority {
function getImplementation() external view returns(address);
}
contract IdentityProxy {
address public implementationAuthority;
constructor(address _implementationAuthority, address initialManagementKey) public {
implementationAuthority = _implementationAuthority;
address logic = IImplementationAuthority(implementationAuthority).getImplementation();
(bool success,) = logic.delegatecall(abi.encodeWithSignature("initialize(address)", initialManagementKey));
require(success, "Initialization failed.");
}
fallback() external payable {
address logic = IImplementationAuthority(implementationAuthority).getImplementation();
assembly {
calldatacopy(0x0, 0x0, calldatasize())
let success := delegatecall(sub(gas(), 10000), logic, 0x0, calldatasize(), 0, 0)
let retSz := returndatasize()
returndatacopy(0, 0, retSz)
switch success
case 0 {
revert(0, retSz)
}
default {
return(0, retSz)
}
}
}
}
{
"compilationTarget": {
"IdentityProxy.sol": "IdentityProxy"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}