Ether Fairy의 스마트 계약 소스 코드입니다.
개발자 분들의 검증과 코드 보완을 위해 Ether Fairy의 스마트 계약을 모두 공개합니다. 의문점이나 버그가 발견되면 Issues에 남겨주시면 대단히 감사하겠습니다.
각 스마트 계약 코드에 대한 설명은 아래와 같습니다.
ERC165.sol
ERC721.sol
ERC721Metadata.sol
ERC721Enumerable.sol
ERC721TokenReceiver.sol
대체불가 토큰(Non-Fungible Token) 구현을 위해 ERC 표준으로 지정된 ERC-721 인터페이스입니다. 이를 통해 유저간 거래 및 거래소를 통해 요정을 거래할 수 있도록 합니다.
비단 이더리움 스마트 계약 뿐 아니라 일반적인 프로그램 작성시에도 숫자 계산에 있어 표현 범위를 넘어가 Overflow가 발생하면 의도하지 않는 값이 들어가가게 되는 버그 발생의 여지가 있습니다. 이를 방지하기 위해 모든 숫자 계산에서 Overflow를 방지하기 위한 라이브러리입니다. uint256
타입의 4칙연산을 지원합니다.
문자열 처리 관련 유틸리티 기능이 저장되어있는 계약입니다.
요정 정보를 이루는 구조체 등 Ether Fairy의 기본적인 내용이 들어있는 계약입니다.
회사가 사용하는 기능들이 포함된 계약입니다. 처음 계약 생성자가 회사로 등록되며, 회사는 스마트 계약의 소유권을 다른 사람에게 양도할 수 있습니다. 회사는 또한 만일의 경우 스마트 계약의 작동을 중단하거나, 다시 동작시킬 수 있습니다.
ERC-721을 상속하여 구현한, 요정 소유권에 관한 기능들이 포함된 계약입니다.
이더를 지불하고 요정을 임의로 업그레이드하는 기능들이 포함된 계약입니다.
요정 소유주의 모든 기능이 포함된 계약입니다. FairyOwnership.sol
과 FairyPayToUpgrade.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)
주어진 인터페이스가 구현되어 있는지 확인합니다.각종 이벤트들
요정 거래 마켓의 기본적인 내용이 들어있는 계약입니다.
요정 거래 마켓 계약입니다. 요정을 마켓에 올리거나 구매할 수 있습니다.
transferOwnership(address newCompany)
소유권을 이전합니다.pauseMarket()
마켓의 작동을 중지합니다.resumeMarket()
마켓을 재개합니다.startSale(uint256 fairyId, uint256 price)
요정 판매를 시작합니다.checkFairyForSale(uint256 fairyId)
요정이 판매되고 있는지 확인합니다.findSaleIdByFairyId(uint256 fairyId)
요정 ID로부터 판매 정보 ID를 가져옵니다.cancelSale(uint256 fairyId)
요정 판매를 취소합니다.buy(uint256 fairyId)
요정을 구매합니다.각종 이벤트들