Closed wiasliaw closed 2 years ago
The SolidStateDiamond
contract is the "recommended" configuration for most users. In my opinion, the need for a "finished diamond" is very rare, so SolidStateDiamond
does not support that feature. However, it is still a valid diamond implementation - all functions inherited into the proxy are properly registered as "immutable functions".
A user who wishes to implement a "finished diamond" can do so manually by using DiamondBase
as the proxy, and DiamondWritable
as a facet.
I will consider adding another full implementation that can be a "finished diamond", but at the moment I still don't think it's necessary.
Diamond contract is a proxy of lookup table of addresses and function selectors. Some of the functions are specified in EIP, but they can be removed. However, current implementation inherit the
DiamondReadable
andDiamondWriteable
, which cause function shadowing and make them unable to be removed. Otherwise, calling these functions doesn't use delegate call (due to function shadowing).From eip2535 substack, there is a term called Finished Diamond.