TIL40

shnae·2023년 12월 14일
0
post-thumbnail
  const detectRef = useRef<HTMLDivElement>(null);
  const observer = useRef();
  const observe = () => {
    observer.current = new IntersectionObserver(() => {});
  };

onMouseMove={onMouseMoveImage}
onMouseLeave={onMouseLeaveImage}


SaleNFT.sol

NFT를 판매하기 위해 필요한 정보는?

  • 컨트랙트 주소
  • 지갑주소
  • NFT ID
  • 가격

MintNFT mintNFTContract = MintNFT(_mintNftAddress);

  • 주소값을 알고 있다고 해서 실행할 수 있는 것은 아니다
  • MintNft.sol 임포트 후, _mintNftAddress를 MintNft 타입으로 감싸서 사용/실행 가능한 형태로 변환해준다(MintNft 타입으로 변환)
    • MintNft 타입은 ERC721Enumerable을 상속받은 컨트랙트 타입임
      • 자식(MintNft) - 부모(ERC721Enumerable) - 조부모(ERC721)
        아래와 같이 타입을 변환할 수 있지만, MintNft 컨트랙트에서 만들어놓은 기능을 사용할 수 없다.
        ERC721 mintNFTContract = ERC721(_mintNftAddress);

setApprovalForAll 를 통해 NFT 주인이 판매 권한을 구매자에게 넘겨줘야한다. 판매 중인 상태로 설정해주는 함수는public 함수이기 때문에 몇 가지 조건이 필요하다.

  • 해당 함수를 호출한 주체가 _tokenId 주인이 맞는지 확인
  • 현재 판매 중인 제품인지 확인
  • 가격이 0원보다 더 큰지 확인
  • 판매 권한을 구매 주체에 넘겨줘야한다

payable 함수
이더리움을 주고 받을 때 사용하는 기능이고, 몇 가지 조건을 충족하도록 해야 한다.

  • 구매하는 사람이 NFT 주인이면 안된다
  • 가격이 0보다 커야한다 (판매 중인지 확인하는 방법)
  • 지불하는 값이 판매 중인 가격과 같거나 높은지 확인한다'

pop 함수

  • 판매 중인 배열에서 판매된 ID를 pop으로 삭제한다

mapping

  • 매핑해주는 타입. 배열과는 다르다.
    Mapping(인풋/키 타입 => 아웃풋/값 타입)
    mapping(uint => uint) public nftPrices;
    nftPrices[_tokenId] = _price;

  • public 키워드를 사용하면 바깥에서도 이 변수를 읽을 수 있다

0개의 댓글