본문 바로가기

블록체인

Klaytn Network로 NFT를 만드는 코드

우선 사용한 코드는 https://github.com/sungyeon1/CreateKlaytnNFT/blob/main/KIP17.sol에서 가져왔고 Solidity에 대한 이해는 https://docs.soliditylang.org/en/v0.8.21/를 바탕으로 진행하였다.

 

큰 구조는 다음과 같다

 

pragma solidity ^0.5.0;
 
interface IKIP13 {}
contract IKIP17 is IKIP13 {}
contract IERC721Receiver {}
contract IKIP17Receiver {}

library SafeMath {}
library Address {}
library Counters {}

contract KIP13 is IKIP13 {}
contract KIP17 is KIP13, IKIP17 {}
contract IKIP17Enumerable is IKIP17 {}
contract KIP17Enumerable is KIP13, KIP17, IKIP17Enumerable {}
contract IKIP17Metadata is IKIP17 {}
contract KIP17Metadata is KIP13, KIP17, IKIP17Metadata {}
contract KIP17Full is KIP17, KIP17Enumerable, KIP17Metadata {}
contract Ownable {}
contract KIP17MetadataMintableOwnable is KIP13, KIP17, KIP17Metadata, Ownable {}
contract KIP17MintableOwnable is KIP17, Ownable {}
contract KIP17Burnable is KIP13, KIP17 {}

library Roles {}

contract PauserRole {}
contract Pausable is PauserRole {}
contract KIP17Pausable is KIP13, KIP17, Pausable {}
contract $$ is KIP17Full, KIP17MintableOwnable, KIP17MetadataMintableOwnable, KIP17Burnable, KIP17Pausable {}

크게 나누자면

1. pragma

2. interface

3. contract

4. library

로 나눌 수 있을 것 같다.

 

Pragma

solidity의 버전을 나타낸다.

특정  지원 버전을 명시할 수도 있고 지원 범위를 명시할 수도 있다

 

pragma solidity 0.x.x; // 0.x.x 버전 사용

contract HelloWorld{ 
    ...
}
pragma solidity ^0.x.x; // 0.x.x 이상의 버전을 사용

contract HelloWorld{ 
    ...
}
pragma solidity >=0.x.<0.y.// 0.x.x 이상 0.y.y 미만의 버전을 사용

contract HelloWorld{ 
    ...
}

 

Interface

You can interact with other contracts by declaring an Interface.

  • They cannot ingerit other contracts or interfaces.
  • All declared functions must be external.
  • They cannot declare a constructor.
  • They cannot declare state cariables.

라고 한다.

 

코드는 주석을 제외하면 다음과 같다.

interface IKIP13 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

이 부분에 대해서 chatGPT한테 설명을 부탁했다.

 

너무 길어서 짤라서 올렸는데 요약을 해보자면..

 

 - Interface를 선언한 코드이다

 - 보충 설명 없이 단순 함수 서명만을 포함한다

 - 다른 contract와 상호작용 할 때 사용되곤하며 standard/external contract와 상호작용 할 때 특히 더 중요하다

 

interface IKIP13 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

이 코드는 IKIP13이라는 interface를 선언하고 그 내부에 supportsInterface라는 함수를 선언한 코드이다.

 

이 때 supportsInterface는

 - interfaceId를 매개 변수로 가지는데 그의 type은 bytes4이다

 - contract의 외부에서만 호출할 수 있다

 - 수정은 안되고 오직 읽기만 가능하다

 - returns type이 boolean이다(true/false)

 

해석이야 그리 어려운 것이 아니 제일 중요한 것은 '어디에 쓰이는가'이다...

정확히는 파악하지 못했으나 이 interface와 상호작용하고 싶다면 IKIP13을 import해서 supportsInterface를 call해야한다는 것 정도... 나중에 어떻게 활용할지 알아봐야겠다.

 

----

거의 2달이나 지난 글인 것 같다...

일단 완료해둬야지!

'블록체인' 카테고리의 다른 글

번외) External Owned Accouts & Contract Accounts  (0) 2023.07.21
NFT 만들기 _ Ethereum (2)  (0) 2023.07.18
NFT 만들기 _ Ethereum (1)  (0) 2023.07.17
잃어버린 Polygon 찾기 -1-  (0) 2023.07.14