크립토 키티 소스 코드 분석 7번째 컨트랙트 KittyAuction

in kr •  6 years ago 

지난 번 6번째 컨트랙트 KittyBreeding에서는 어떻게 두 고양이가 교배를 시키고, 어떻게 새로운 새끼 고양이가 태어나는 지에 대한 내용이였다. 이제 진짜 "돈"을 쓰게되는 KittyAuction 컨트랙트를 보도록 하자. 다시 말하지만, 스팀잇보다 더 좋은 블로그?를 찾으면 옮길까 한다.

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

KittyBase <- KittyAccessControl

KittyAuction은 실제 고양이를 매매에 대한 내용이 포함되어 있다. 크립토 키티에서 이하와 같이 본인 소유의 고양이를 다른 교배를 위해서 내놓거나(빌려주거나) 아니면 아에 팔거나, 혹은 다른 사람한테 주거나 이렇게 3가지 액션을 할 수 있다.

옥션은 여기서 교배를 위해 다른 사람에게 빌려주거나, 파는 경우 각각에 대해서 각각 다른 컨트랙트를 사용하고 그 컨트랙트 주소를 이하처럼 CEO가 설정하게 된다.

function setSaleAuctionAddress(address _address) external onlyCEO 

function setSiringAuctionAddress(address _address) external onlyCEO 

이렇게 한 이유는 아마도 추후에 다른 로직을 넣거나, 버그 등이 발견되었을 경우에 업데이트를 쉽게하기 위함일 것으로 생각된다.

먼저 판매를 위한 옥션에 해당하는 setSaleAuctionAddress는 현재 https://etherscan.io/address/0xb1690c08e213a35ed9bab7b318de14420fb57d8c#code 로 설정되어 있다.
교배를 위해 고양이을 빌려주는 옥션에 해당하는 내용은 setSiringAuctionAddresshttps://etherscan.io/address/0xc7af99fe5513eb6710e6d5f44f9989da40f27f26#code로 설정되어 있다.

KittyAuction은 단순히 옥션의 core 부분의 인터페이스만 기술되어 있고 실질적으로는 옥션 종류에 따라 따로 컨트랙트가 있어서 KittyAuction 다음에는 실제 옥션의 내용을 이해하기 위해 필요한 각각의 컨트랙트 SaleClockAuctionSiringClockAuction을 보도록 한다.

KittyAuction 컨트랙트는 단순하다. (인터페이스만 다루기 때문에..) 다음 4개의 함수만 정의되어 있다.

function createSaleAuction(
    uint256 _kittyId,
    uint256 _startingPrice,
    uint256 _endingPrice,
    uint256 _duration
)

function createSiringAuction(
    uint256 _kittyId,
    uint256 _startingPrice,
    uint256 _endingPrice,
    uint256 _duration
)

function bidOnSiringAuction(
    uint256 _sireId,
    uint256 _matronId
)

function withdrawAuctionBalances() external onlyCLevel {
  1. createSaleAuction, createSiringAuction : 옥션 생성하는 함수. 적합한 주인인지, 임신중인지만 체크해서 옥션을 생성한다. (실제 내용은 다른 컨트랙트에 정의)
  1. bidOnSiringAuction : 실제 입찰(bid)하는 함수,엄마 고양이의 주인을 확인하고 옥션에 올려진 고양이와 교배가 가능한 지 체크하고 옥션 입찰 가격이 autoBirthFee를 합친 것 이상인지 확인하고 최종으로 이전 컨트랙트 KittyBreeding에 기술되어 있는 _breedWith로 교배시킨다.

  2. withdrawAuctionBalances : 두 개의 옥션 컨트랙트에 남아있는 수수료를 빼는 함수

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!
Sort Order:  

Congratulations @kimyd! You have received a personal award!

1 Year on Steemit
Click on the badge to view your Board of Honor.

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @kimyd! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!