[강의정리] 스마트 컨트랙트 작성하기

김재만·2022년 7월 25일
0

NFT프로젝트

목록 보기
2/3

스마트 컨트랙트

디지털로 작성된 계약서로, 어떤 경우에 구매가 성립되고 판매가 성립되는 등의 조건에 따라 계약이 자동으로 이루어지도록 만든 기술이다.

스마트 컨트랙트를 통해 거래중계자(혹은 중재자) 없이 자동으로 이루어지는 것이 이더리움 NFT의 핵심이다.

맵핑을 이용한 NFT 무작위성 속성값 생성

mapping(unit256 => unit256) public animalTypes;

    function mintAnimalToken() public {
        uint256 animalTokenId = totalSupply() +1;

//고유값 세 개를 활용하여, 새로운 속성값(animalType) 생성
// SPDX - License-Identifier: MINT

pragma solidity ^0.8.0;

import "MintAnimalToken.sol";

contract SaleAnimalToken {
    MintAnimalToken public mintAnimalTokenAddress;

    constructor (address _mintAnimalTokenAddress){
        mintAnimalTokenAddress = MintAnimalToken(_mintAnimalTokenAddress);
    }

    mapping(uint256 => uint256) public animalTokenPrices;

    uint256[] public onSaleAnimalTokenArray;

    function setForSaleAnimalToken(uint256 _animalTokenId, uint256 _price) public {
        address animalTokenOwner = mintAnimalTokenAddress.ownerOf(_animalTokenId);

        require(animalTokenOwner == msg.sender, "Caller is not animal token owner.");
        require(_price > 0, "Price is zero or lower.");
        require(animalTokenPrices[_animalTokenId] == 0, "This animal token is already on sale.");
        require(mintAnimalTokenAddress.isApprovedForAll(animalTokenOwner, address(this)), "Animal token owner did not approve token.");

        animalTokenPrices[_animalTokenId] = _price;

        onSaleAnimalTokenArray.push(_animalTokenId);
    }
}

** 스마트 컨트랙트는 한 파일에 여러가지를 작성할 수도 있지만, 기능별로 파일을 생성하는 것이 관리하기 용이하다.

마무리

와..! 뭔소리지?!

profile
듣는 것을 좋아하는 개발자입니다

0개의 댓글