OpenSea에서 거래에 활용되는 Proxy contract에 대해서 간단히 알아 봅니다.
Proxy Contract는 이미 Solidity 에서 아주 일반화 되어 있는 형태고, 다양하게 활용되고 있지만 이번에는 OpenSea의 거래 부분을 한정해서 알아 보려고 합니다.
참고로 지금 Opensea는 Seaport 라는 새로 개발된 Contract를 사용 중이지만, 지금 공부하는 부분은 예전에 사용되던 Wyvern 형태를 참고하였습니다.
- Opensea 에서 NFT를 판매하려고 올려두었고, 누군가 그 NFT를 구매하면, 구매하는 순간 NFT가 구매자에게 전송이 되어야 합니다.
- 일반적으로는 NFT 전송은 유저가 직접 전송을 해줘야 하는데, 항상 기다리고 있을 수 없으므로, NFT 전송에 대한 권한을 "유저 지갑의 Proxy Contract"을 생성하여 거기에 "위임"을 합니다.(Approve)
- "유저 지갑 Proxy contract"는 Opensea의 "Proxy Registry Contract"에서 Contract 생성함수(register proxy)를 통해 생성되게 되고, Proxy Registry 내부에 보관됩니다.
- 그리고 "Wyvern Protocol"은 Proxy Registry안에 있는 "모든 Proxy Contract의 특정코드 실행 권한"을 가집니다.(NFT Transfer 관련 함수)
- 실제로 거래 발생시 구매자의 코인은 판매자에게 전송이 되고, NFT는 Wyvern Protocol이 구매자에게 전송! 되는 개념이라고 보면 됩니다.