-
Notifications
You must be signed in to change notification settings - Fork 0
/
DiamondContract.sol
46 lines (37 loc) · 1.49 KB
/
DiamondContract.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.24;
/******************************************************************************\
* Author: Coinmeca Team <dev@coinmeca.net>
* Lightweight version of EIP-2535 Diamonds
\******************************************************************************/
import {IDiamond} from "./interfaces/IDiamond.sol";
import {DiamondBase} from "./utils/DiamondBase.sol";
import {DiamondAuth} from "./utils/DiamondAuth.sol";
import {DiamondLoupe} from "./utils/DiamondLoupe.sol";
import {DiamondContractManager} from "./DiamondContractManager.sol";
abstract contract DiamondContract is DiamondAuth, DiamondLoupe {
using DiamondContractManager for bytes32;
using DiamondContractManager for DiamondContractManager.Data;
constructor(
string memory _key,
IDiamond.Cut[] memory _diamondCut,
IDiamond.Args memory _args
) payable DiamondBase(_key) DiamondAuth(true) DiamondLoupe(true) {
DiamondContractManager.initialOwner(_args.owner);
DiamondContractManager.diamondCut(
_diamondCut,
_args.init,
_args.initCalldata
);
_this.diamond().addr = payable(address(this));
}
function facet(bytes4 _funct) public virtual returns (address) {
return _this.diamond().funct[_funct].facet;
}
function facet(
bytes32 _contract,
bytes4 _funct
) public virtual returns (address) {
return _contract.diamond().funct[_funct].facet;
}
}