크립토키티 소스 코드 분석(2) KittyAccessControl

in kr •  7 years ago  (edited)

이전 편에서 이하와 같이 구조에서 그냥 제일 처음 순서대로 보기로 했다.

KittyCore <- KittyMinting <- KittyAuction <- KittyBreeding <- KittyOwnership <- KittyBase, ERC721

KittyBase <- KittyAccessControl

KittyAcceessControl

주석을 보면 KittyAccessControl 컨트랙트는 권한 엑세스 용도로만 포함되어 있다. (게임하고 관련이 직접적으로는 없지만..보통 ownable 같은 느낌으로 쓰는 듯하다)
권한은 CEO, CFO, COO, CLevel 등 만이 실행할 수 있는 함수들을 정의하기 위해서 modifier를 정의해 놓았다.
그럼 누가 CEO이고 CFO이고 한번 찾아봤다.

CEO : https://etherscan.io/address/0xaf1e54b359b0897133f437fc961dd16f20c045e1

CFO : https://etherscan.io/address/0x2041bb7d8b49f0bde3aa1fa7fb506ac6c539394c

COO : https://etherscan.io/address/0xa21037849678af57f9865c6b9887f4e339f6377a

지금 글을 쓰는 시점에서 참고로 COO가 13.5 이더로 가장 많은 이더를 보유하고 있다. 그럼 COO가 대체 뭐길래? CEO랑 CFO는 많이 듣는데 COO은 좀 생소하다. Chief Operating Officer 최고운영책임자.
주석에 있는 내용에 따르면 CEO는 컨트랙트 자체를 정지시킬 수 있다. CFO는 크립토키티 코어 KittyCore와 Auction 컨트랙트에 있는 funds를 빼낼 수 있다. 마지막으로 COO는 프로모션 고양이를 새로 만들거나 gen0 고양이를 Auction에 release할 수 있다. (gen0이 아직 무슨 말인지..모르겠다..차후 보도록 하기로..알면 다시 업데이트 예정)

재미있는 건 크립토키티 컨트랙트를 CEO/COO/CFO(여기서는 CLevel로 총칭)가 멈출 수 있다.그리고 오직 CEO만이 정지한 것을 풀 수 있게 해놨다. 이유는 주석을 참고하면 CFO/COO의 지갑의 개인키가 유출되었을 경우 정지시켰을 것을 생각해서 라는 데 CEO는 절대 유출될 일이 없을 것을 가정하는 듯하다.
그리고 재미있는 것이
정지시키는 function은 external로 해놨고 푸는 것은 public으로 해놨다. 외부에서만 정지시키는 함수를 실행이 되도록 해놨다. 컨트랙트 내부에서도 실행이 가능하게 public으로 해놓은 것을 보면 ..일정 조건에서 아니면 다른 또 관리 컨트랙트를 만들어서 정지된 크립토키티 컨트랙트를 자동으로 풀 수 있게 만들어 놓지 않았을 까하는 추측이다..

edit : 실제로 코드를 보면 KittyAccessControl에서 정의한 unpause라는 함수가 Ownable, KittyCore(override해서)에서 불러와 호출하는 부분이 있다. 그래서 public으로 정의한 듯.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!