Skip to content

yjgaia/etherfairy

Repository files navigation

Ether Fairy Smart Contracts

Ether Fairy의 스마트 계약 소스 코드입니다.

개발자 분들의 검증과 코드 보완을 위해 Ether Fairy의 스마트 계약을 모두 공개합니다. 의문점이나 버그가 발견되면 Issues에 남겨주시면 대단히 감사하겠습니다.

각 스마트 계약 코드에 대한 설명은 아래와 같습니다.

ERC-721 표준 인터페이스

  • ERC165.sol
  • ERC721.sol
  • ERC721Metadata.sol
  • ERC721Enumerable.sol
  • ERC721TokenReceiver.sol

대체불가 토큰(Non-Fungible Token) 구현을 위해 ERC 표준으로 지정된 ERC-721 인터페이스입니다. 이를 통해 유저간 거래 및 거래소를 통해 요정을 거래할 수 있도록 합니다.

SafeMath.sol

비단 이더리움 스마트 계약 뿐 아니라 일반적인 프로그램 작성시에도 숫자 계산에 있어 표현 범위를 넘어가 Overflow가 발생하면 의도하지 않는 값이 들어가가게 되는 버그 발생의 여지가 있습니다. 이를 방지하기 위해 모든 숫자 계산에서 Overflow를 방지하기 위한 라이브러리입니다. uint256 타입의 4칙연산을 지원합니다.

StringUtil.sol

문자열 처리 관련 유틸리티 기능이 저장되어있는 계약입니다.

EtherFairyBase.sol

요정 정보를 이루는 구조체 등 Ether Fairy의 기본적인 내용이 들어있는 계약입니다.

EtherFairyCompany.sol

회사가 사용하는 기능들이 포함된 계약입니다. 처음 계약 생성자가 회사로 등록되며, 회사는 스마트 계약의 소유권을 다른 사람에게 양도할 수 있습니다. 회사는 또한 만일의 경우 스마트 계약의 작동을 중단하거나, 다시 동작시킬 수 있습니다.

FairyOwnership.sol

ERC-721을 상속하여 구현한, 요정 소유권에 관한 기능들이 포함된 계약입니다.

FairyPayToUpgrade.sol

이더를 지불하고 요정을 임의로 업그레이드하는 기능들이 포함된 계약입니다.

FairyMaster.sol

요정 소유주의 모든 기능이 포함된 계약입니다. FairyOwnership.solFairyPayToUpgrade.sol를 상속하고 추가로 요정을 탄생시키는 기능이 포함되어 있습니다.

FairyInfo.sol

요정의 정보를 제공하는 기능들이 포함된 계약입니다.

EtherFairy.sol

위 계약들을 모두 엮고 Ether Fairy 서비스를 위해 여러가지 기능을 추가한 통합 스마트 계약입니다.

기능 목록

  • 테스트 여부 name() 토큰의 이름 반환
  • 테스트 여부 symbol() 토큰의 심볼 반환
  • 테스트 여부 tokenURI(uint256 fairyId) 요정 정보의 메타데이터를 가져오는 경로를 반환합니다.
  • 테스트 여부 transferOwnership(address newCompany) 소유권을 이전합니다.
  • 테스트 여부 pauseService() 서비스의 작동을 중지합니다.
  • 테스트 여부 resumeService() 서비스를 재개합니다.
  • 테스트 여부 changeFairyOriginPrice(uint256 newFairyOriginPrice) 요정 원본의 가격을 변경합니다.
  • 테스트 여부 changeCustomLevelUpPrice(uint256 newCustomLevelUpPrice) 임의 레벨업 가격을 변경합니다.
  • 테스트 여부 changeIncreasePointPricePerPoint(uint256 newIncreasePointPricePerPoint) 임의로 포인트를 증가시키는데 드는 포인트당 가격을 변경합니다.
  • 테스트 여부 changeTokenMetadataBaseURI(string newTokenMetadataBaseURI) tokenMetadataBaseURI을 변경합니다.
  • 테스트 여부 changeOfficialMarket(address newOfficialMarket) 공식 마켓 계약을 변경합니다.
  • 테스트 여부 blockMaster(address masterToBlock) 특정 소유주를 차단합니다.
  • 테스트 여부 blockFairy(uint256 fairyIdToBlock) 특정 요정을 차단합니다.
  • 테스트 여부 unblockMaster(address masterToBlock) 소유주 차단을 해제합니다.
  • 테스트 여부 unblockFairy(uint256 fairyIdToBlock) 요정 차단을 해제합니다.
  • 테스트 여부 balanceOf(address master) 요정의 개수를 가져옵니다.
  • 테스트 여부 ownerOf(uint256 fairyId) 요정의 소유주 지갑 주소를 가져옵니다.
  • 테스트 여부 safeTransferFrom(address from, address to, uint256 fairyId, bytes data) 요정을 받는 대상이 스마트 계약인 경우, onERC721Received 함수를 실행합니다.
  • 테스트 여부 safeTransferFrom(address from, address to, uint256 fairyId) 요정을 받는 대상이 스마트 계약인 경우, onERC721Received 함수를 실행합니다.
  • 테스트 여부 transferFrom(address from, address to, uint256 fairyId) 요정을 이전합니다.
  • 테스트 여부 approve(address approved, uint256 fairyId) 특정 지갑에 거래 권한을 부여합니다.
  • 테스트 여부 setApprovalForAll(address operator, bool isApproved) 오퍼레이터에게 거래 권한을 부여하거나 뺏습니다.
  • 테스트 여부 getApproved(uint256 fairyId) 요정 거래 권한이 승인된 지갑 주소를 가져옵니다.
  • 테스트 여부 isApprovedForAll(address master, address operator) 오퍼레이터가 거래 권한을 가지고 있는지 확인합니다.
  • 테스트 여부 levelUpFairy(uint256 fairyId) 돈을 지불하고 레벨업 합니다.
  • 테스트 여부 increaseHPPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 HP 증가 포인트를 올립니다.
  • 테스트 여부 increaseAttackPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 공격 증가 포인트를 올립니다.
  • 테스트 여부 increaseDefensePointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 방어 증가 포인트를 올립니다.
  • 테스트 여부 increaseAgilityPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 민첩 증가 포인트를 올립니다.
  • 테스트 여부 increaseDexterityPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 재치 증가 포인트를 올립니다.
  • 테스트 여부 increaseFirePointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 불 속성 증가 포인트를 올립니다.
  • 테스트 여부 increaseWaterPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 물 속성 증가 포인트를 올립니다.
  • 테스트 여부 increaseWindPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 바람 속성 증가 포인트를 올립니다.
  • 테스트 여부 increaseEarthPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 대지 속성 증가 포인트를 올립니다.
  • 테스트 여부 increaseLightPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 빛 속성 증가 포인트를 올립니다.
  • 테스트 여부 increaseDarkPointPerLevel(uint256 fairyId) 돈을 지불하고 레벨 당 어둠 속성 증가 포인트를 올립니다.
  • 테스트 여부 birthFairy(string fairyOriginId, address designer, string name, uint256 firePointPerLevel, uint256 waterPointPerLevel, uint256 windPointPerLevel, uint256 earthPointPerLevel, uint256 lightPointPerLevel, uint256 darkPointPerLevel) 요정을 탄생시킵니다.
  • 테스트 여부 changeFairyName(uint256 fairyId, string newName) 요정의 이름을 변경합니다.
  • 테스트 여부 getMasterIdsByFairyCount() 요정을 많이 가진 순서대로 소유주의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyCount() 요정의 개수를 반환합니다.
  • 테스트 여부 getFairyCountByOriginId(string fairyOriginId) 원본 ID에 해당하는 요정의 개수를 반환합니다.
  • 테스트 여부 getFairyIdsByOriginId(string fairyOriginId) 원본 ID에 해당하는 요정의 ID 목록을 반환합니다.
  • 테스트 여부 getMasterCount() 소유주 계정의 개수를 반환합니다.
  • 테스트 여부 getFairyBasicInfo(uint256 fairyId) 요정의 기본 정보를 반환합니다.
  • 테스트 여부 getFairyBasicPointsPerLevel(uint256 fairyId) 요정의 기본 속성에 대한 레벨 당 증가 포인트들을 반환합니다.
  • 테스트 여부 getFairyElementPointsPerLevel(uint256 fairyId) 요정의 원소 속성에 대한 레벨 당 증가 포인트들을 반환합니다.
  • 테스트 여부 getFairyIdsByBirthTime() 최근에 태어난 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByAppendedLevel() 소유주에 의해 추가된 레벨이 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByHPPointPerLevel() 레벨 당 HP 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByAttackPointPerLevel() 레벨 당 공격 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByDefensePointPerLevel() 레벨 당 방어 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByAgilityPointPerLevel() 레벨 당 민첩 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByDexterityPointPerLevel() 레벨 당 재치 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByFirePointPerLevel() 레벨 당 불 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByWaterPointPerLevel() 레벨 당 물 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByWindPointPerLevel() 레벨 당 바람 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByEarthPointPerLevel() 레벨 당 대지 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByLightPointPerLevel() 레벨 당 빛 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 getFairyIdsByDarkPointPerLevel() 레벨 당 어둠 속성 증가 포인트가 높은 순서대로 요정의 ID 목록을 가져옵니다.
  • 테스트 여부 supportsInterface(bytes4 interfaceID) 주어진 인터페이스가 구현되어 있는지 확인합니다.
  • 테스트 여부 각종 이벤트들

FiaryMarketBase.sol

요정 거래 마켓의 기본적인 내용이 들어있는 계약입니다.

FiaryMarket.sol

요정 거래 마켓 계약입니다. 요정을 마켓에 올리거나 구매할 수 있습니다.

기능 목록

  • 테스트 여부 transferOwnership(address newCompany) 소유권을 이전합니다.
  • 테스트 여부 pauseMarket() 마켓의 작동을 중지합니다.
  • 테스트 여부 resumeMarket() 마켓을 재개합니다.
  • 테스트 여부 startSale(uint256 fairyId, uint256 price) 요정 판매를 시작합니다.
  • 테스트 여부 checkFairyForSale(uint256 fairyId) 요정이 판매되고 있는지 확인합니다.
  • 테스트 여부 findSaleIdByFairyId(uint256 fairyId) 요정 ID로부터 판매 정보 ID를 가져옵니다.
  • 테스트 여부 cancelSale(uint256 fairyId) 요정 판매를 취소합니다.
  • 테스트 여부 buy(uint256 fairyId) 요정을 구매합니다.
  • 테스트 여부 각종 이벤트들

라이센스

MIT

작성자

Young Jae Sim

About

Ether Fairy의 스마트 계약 소스 코드

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published