지난 번 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 로 설정되어 있다.
교배를 위해 고양이을 빌려주는 옥션에 해당하는 내용은 setSiringAuctionAddress
는 https://etherscan.io/address/0xc7af99fe5513eb6710e6d5f44f9989da40f27f26#code로 설정되어 있다.
KittyAuction은 단순히 옥션의 core 부분의 인터페이스만 기술되어 있고 실질적으로는 옥션 종류에 따라 따로 컨트랙트가 있어서 KittyAuction 다음에는 실제 옥션의 내용을 이해하기 위해 필요한 각각의 컨트랙트 SaleClockAuction
과 SiringClockAuction
을 보도록 한다.
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 {
createSaleAuction
,createSiringAuction
: 옥션 생성하는 함수. 적합한 주인인지, 임신중인지만 체크해서 옥션을 생성한다. (실제 내용은 다른 컨트랙트에 정의)
bidOnSiringAuction
: 실제 입찰(bid)하는 함수,엄마 고양이의 주인을 확인하고 옥션에 올려진 고양이와 교배가 가능한 지 체크하고 옥션 입찰 가격이 autoBirthFee를 합친 것 이상인지 확인하고 최종으로 이전 컨트랙트KittyBreeding
에 기술되어 있는_breedWith
로 교배시킨다.withdrawAuctionBalances
: 두 개의 옥션 컨트랙트에 남아있는 수수료를 빼는 함수
Congratulations @kimyd! You have received a personal award!
1 Year on Steemit
Click on the badge to view your Board of Honor.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @kimyd! You received a personal award!
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!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit