From 6a5ec80234ae053862a4cbc02a431b9b7b3e16fd Mon Sep 17 00:00:00 2001 From: Nick Barry Date: Sat, 15 Oct 2022 17:17:59 -0500 Subject: [PATCH] add draft precrime contracts --- .../precrime/ILayerZeroClientPrecrime.sol | 11 ++++++++++ .../ILayerZeroClientPrecrimeInternal.sol | 7 +++++++ .../precrime/LayerZeroClientPrecrime.sol | 19 ++++++++++++++++++ .../LayerZeroClientPrecrimeInternal.sol | 20 +++++++++++++++++++ .../LayerZeroClientPrecrimeStorage.sol | 19 ++++++++++++++++++ 5 files changed, 76 insertions(+) create mode 100644 contracts/precrime/ILayerZeroClientPrecrime.sol create mode 100644 contracts/precrime/ILayerZeroClientPrecrimeInternal.sol create mode 100644 contracts/precrime/LayerZeroClientPrecrime.sol create mode 100644 contracts/precrime/LayerZeroClientPrecrimeInternal.sol create mode 100644 contracts/precrime/LayerZeroClientPrecrimeStorage.sol diff --git a/contracts/precrime/ILayerZeroClientPrecrime.sol b/contracts/precrime/ILayerZeroClientPrecrime.sol new file mode 100644 index 0000000..a255c57 --- /dev/null +++ b/contracts/precrime/ILayerZeroClientPrecrime.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { ILayerZeroClientPrecrimeInternal } from './ILayerZeroClientPrecrimeInternal.sol'; + +interface ILayerZeroClientPrecrime is ILayerZeroClientPrecrimeInternal { + function precrime() external view returns (address); + + function setPrecrime(address precrime) external; +} diff --git a/contracts/precrime/ILayerZeroClientPrecrimeInternal.sol b/contracts/precrime/ILayerZeroClientPrecrimeInternal.sol new file mode 100644 index 0000000..fc34367 --- /dev/null +++ b/contracts/precrime/ILayerZeroClientPrecrimeInternal.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +interface ILayerZeroClientPrecrimeInternal { + event SetPrecrime(address precrime); +} diff --git a/contracts/precrime/LayerZeroClientPrecrime.sol b/contracts/precrime/LayerZeroClientPrecrime.sol new file mode 100644 index 0000000..a1809b5 --- /dev/null +++ b/contracts/precrime/LayerZeroClientPrecrime.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { ILayerZeroClientPrecrime } from './ILayerZeroClientPrecrime.sol'; +import { LayerZeroClientPrecrimeInternal } from './LayerZeroClientPrecrimeInternal.sol'; + +abstract contract LayerZeroClientPrecrime is + ILayerZeroClientPrecrime, + LayerZeroClientPrecrimeInternal +{ + function precrime() external view returns (address) { + return _precrime(); + } + + function setPrecrime(address precrime) external { + return _setPrecrime(precrime); + } +} diff --git a/contracts/precrime/LayerZeroClientPrecrimeInternal.sol b/contracts/precrime/LayerZeroClientPrecrimeInternal.sol new file mode 100644 index 0000000..45fa661 --- /dev/null +++ b/contracts/precrime/LayerZeroClientPrecrimeInternal.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { ILayerZeroClientPrecrimeInternal } from './ILayerZeroClientPrecrimeInternal.sol'; +import { LayerZeroClientPrecrimeStorage } from './LayerZeroClientPrecrimeStorage.sol'; + +abstract contract LayerZeroClientPrecrimeInternal is + ILayerZeroClientPrecrimeInternal +{ + function _precrime() internal view virtual returns (address) { + return LayerZeroClientPrecrimeStorage.layout().precrime; + } + + function _setPrecrime(address precrime) internal virtual { + // TODO: onlyOwner + LayerZeroClientPrecrimeStorage.layout().precrime = precrime; + emit SetPrecrime(precrime); + } +} diff --git a/contracts/precrime/LayerZeroClientPrecrimeStorage.sol b/contracts/precrime/LayerZeroClientPrecrimeStorage.sol new file mode 100644 index 0000000..0bb2dda --- /dev/null +++ b/contracts/precrime/LayerZeroClientPrecrimeStorage.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +library LayerZeroClientPrecrimeStorage { + struct Layout { + address precrime; + } + + bytes32 internal constant STORAGE_SLOT = + keccak256('solidstate.contracts.storage.LayerZeroClientPrecrime'); + + function layout() internal pure returns (Layout storage l) { + bytes32 slot = STORAGE_SLOT; + assembly { + l.slot := slot + } + } +}