Diamond
0xb300000b72deaeb607a12d5f54773d1c19c7028d
Verification
Verified
v0.8.23+commit.f704f362
Type
Contract
180 bytes
ABI entries
16
0 read · 0 write
License
none
Contract information
- Address
- 0xb300000b72deaeb607a12d5f54773d1c19c7028d
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.23+commit.f704f362
- Optimization
- Enabled
- Creator
- 0x13b0D85CcB…081AE9beF2
- Creation tx
- 0xf7bb218b20…aa16b3a712
Token
Not a token
This contract does not expose ERC-20 metadata.
Read contract (0)
No read functions
The ABI is unavailable or exposes no view functions.
Events (2)
DiamondCutOwnershipTransferred
ABI
[
{
"inputs": [
{
"internalType": "address",
"name": "_contractOwner",
"type": "address"
},
{
"internalType": "address",
"name": "_diamondCutFacet",
"type": "address"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"inputs": [],
"name": "CalldataEmptyButInitNotZero",
"type": "error"
},
{
"inputs": [],
"name": "FacetAddressIsNotZero",
"type": "error"
},
{
"inputs": [],
"name": "FacetAddressIsZero",
"type": "error"
},
{
"inputs": [],
"name": "FacetContainsNoCode",
"type": "error"
},
{
"inputs": [],
"name": "FunctionAlreadyExists",
"type": "error"
},
{
"inputs": [],
"name": "FunctionDoesNotExist",
"type": "error"
},
{
"inputs": [],
"name": "FunctionIsImmutable",
"type": "error"
},
{
"inputs": [],
"name": "IncorrectFacetCutAction",
"type": "error"
},
{
"inputs": [],
"name": "InitReverted",
"type": "error"
},
{
"inputs": [],
"name": "InitZeroButCalldataNotEmpty",
"type": "error"
},
{
"inputs": [],
"name": "NoSelectorsInFace",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "facetAddress",
"type": "address"
},
{
"internalType": "enum IDiamondCut.FacetCutAction",
"name": "action",
"type": "uint8"
},
{
"internalType": "bytes4[]",
"name": "functionSelectors",
"type": "bytes4[]"
}
],
"indexed": false,
"internalType": "struct IDiamondCut.FacetCut[]",
"name": "_diamondCut",
"type": "tuple[]"
},
{
"indexed": false,
"internalType": "address",
"name": "_init",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "_calldata",
"type": "bytes"
}
],
"name": "DiamondCut",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"stateMutability": "payable",
"type": "fallback"
},
{
"stateMutability": "payable",
"type": "receive"
}
]Source code
// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
import {LibDiamond} from "./Libraries/LibDiamond.sol";
import {IDiamondCut} from "./Interfaces/IDiamondCut.sol";
import {LibUtil} from "./Libraries/LibUtil.sol";
contract Diamond {
constructor(address _contractOwner, address _diamondCutFacet) payable {
LibDiamond.setContractOwner(_contractOwner);
// Add the diamondCut external function from the diamondCutFacet
IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
bytes4[] memory functionSelectors = new bytes4[](1);
functionSelectors[0] = IDiamondCut.diamondCut.selector;
cut[0] = IDiamondCut.FacetCut({
facetAddress: _diamondCutFacet,
action: IDiamondCut.FacetCutAction.Add,
functionSelectors: functionSelectors
});
LibDiamond.diamondCut(cut, address(0), "");
}
// Find facet for function that is called and execute the
// function if a facet is found and return any value.
// solhint-disable-next-line no-complex-fallback
fallback() external payable {
LibDiamond.DiamondStorage storage ds;
bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
// get diamond storage
// solhint-disable-next-line no-inline-assembly
assembly {
ds.slot := position
}
// get facet from function selector
address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
if (facet == address(0)) {
revert LibDiamond.FunctionDoesNotExist();
}
// Execute external function from facet using delegatecall and return any value.
// solhint-disable-next-line no-inline-assembly
assembly {
// copy function selector and any arguments
calldatacopy(0, 0, calldatasize())
// execute function call using the facet
let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
// get any return value
returndatacopy(0, 0, returndatasize())
// return any return value or error back to the caller
switch result
case 0 { revert(0, returndatasize()) }
default { return(0, returndatasize()) }
}
}
// Able to receive ether
// solhint-disable-next-line no-empty-blocks
receive() external payable {}
}
Chain explorer1963msChain node95ms