디지털로 작성된 계약서로, 어떤 경우에 구매가 성립되고 판매가 성립되는 등의 조건에 따라 계약이 자동으로 이루어지도록 만든 기술이다.
스마트 컨트랙트를 통해 거래중계자(혹은 중재자) 없이 자동으로 이루어지는 것이 이더리움 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);
}
}
** 스마트 컨트랙트는 한 파일에 여러가지를 작성할 수도 있지만, 기능별로 파일을 생성하는 것이 관리하기 용이하다.
와..! 뭔소리지?!