2021-08-02 20:33:24 +02:00
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity ^0.7.0;
|
|
|
|
|
2021-10-12 17:50:25 +02:00
|
|
|
import { CrossChainGuard } from "./bridge/CrossChainGuard.sol";
|
2021-10-06 16:51:46 +02:00
|
|
|
import "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol";
|
2021-08-02 20:33:24 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev TransparentUpgradeableProxy where admin acts from a different chain.
|
|
|
|
*/
|
2021-10-12 17:50:25 +02:00
|
|
|
contract CrossChainUpgradeableProxy is TransparentUpgradeableProxy, CrossChainGuard {
|
2021-08-02 20:33:24 +02:00
|
|
|
/**
|
|
|
|
* @dev Initializes an upgradeable proxy backed by the implementation at `_logic`.
|
|
|
|
*/
|
|
|
|
constructor(
|
|
|
|
address _logic,
|
|
|
|
address _admin,
|
2021-08-05 09:29:49 +02:00
|
|
|
bytes memory _data,
|
2021-10-12 17:50:25 +02:00
|
|
|
address _ambBridge,
|
2021-10-04 12:06:58 +02:00
|
|
|
uint256 _adminChainId
|
2021-10-12 17:50:25 +02:00
|
|
|
) TransparentUpgradeableProxy(_logic, _admin, _data) CrossChainGuard(_ambBridge, _adminChainId, _admin) {}
|
2021-08-02 20:33:24 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Modifier used internally that will delegate the call to the implementation unless the sender is the cross chain admin.
|
|
|
|
*/
|
|
|
|
modifier ifAdmin() override {
|
2021-10-12 17:50:25 +02:00
|
|
|
if (isCalledByOwner()) {
|
2021-08-02 20:33:24 +02:00
|
|
|
_;
|
|
|
|
} else {
|
|
|
|
_fallback();
|
|
|
|
}
|
|
|
|
}
|
2021-10-12 17:50:25 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @dev Override to allow admin access the fallback function.
|
|
|
|
*/
|
|
|
|
function _beforeFallback() internal override {}
|
2021-08-02 20:33:24 +02:00
|
|
|
}
|