https://eips.ethereum.org/EIPS/eip-2535
ERC-2535: Diamonds, Multi-Facet Proxy
Create modular smart contract systems that can be extended after deployment.
eips.ethereum.org
EIP-2535에서 나온 개념.
기존의 proxy방식은 delegatecall을 이용해서 다른 컨트랙트의 기능을 가져와서 사용하는 것인데 그러한 것에 문제점이 있었음 그것을 storage 충돌이 발생할 수 있다는 것인데 diamond에서는 그러한 storage충돌을 방지하기 위해서 임의의 스토리지 포인트를 지정하여 그곳에 state를 저장하는 식으로 사용함 따라서 다양한 컨트랙트들을 delegatecall을 통해서 접근을 가능하게 만들었음.
Diamond 컨트랙트에는 constructor만 있고 함수가 따로 없는데 fallback함수와 receive 함수만 있음.
fallback함수는 Diamond컨트랙트에 없는 함수를 실행했을때 실행되는 함수임.
그 fallback함수 안에는 assembly로 delegatecall이 들어가 있음. 간단하게 요약하면 실질적인 함수가 구현되어 있는 부분을 facet이라고 하고 functino selector를 통해서 그 facet을 찾아서 delegatecall을 날림.
[참고]
https://github.com/mudgen/awesome-diamonds/blob/main/README.md
'개발 참고자료' 카테고리의 다른 글
foundry (0) | 2024.07.15 |
---|---|
User-defined Value Types (0) | 2024.07.15 |
[정리] solidity call, delegatecall (0) | 2024.04.30 |
[정리] Use Ownable2Step Instead (0) | 2023.12.11 |