간단한 나만의 SBT 만들기

GMB_Coinangel
GMB_Research
7 min readNov 18, 2022

--

오늘은 제가 이제 ‘블록체인 개발자’의 길을 걷기 시작해서 간단한 코딩과 함께 쉽게 만들 수 있는 나만의 SBT 만들기를 해볼까 합니다:) 솔리디티 언어를 모르는 사람이더라도 쉽게 할 수 있으니 한번씩들 해보셔서 좋은 경험 하셨으면 좋겠습니다.

STEP 1) Solidity 코드 작성

https://docs.openzeppelin.com/contracts/4.x/wizard 위 링크로 들어가 ERC-721의 기본적인 코드를 따오겠습니다.

Contracts Wizard 캡쳐화면
  1. Name & Symbol 설정
  2. Mintable(민팅이 가능하게 하는 기능), Auto Increment Ids(토큰ID의 값을 계속 자동으로 증가시켜주는 기능), URI Storage(각 토큰ID 마다 내용을 업데이트 해줄 수 있는 기능)을 선택
  3. Ownable을 체크해줌으로써 Ownbale.sol 이라는 Solidity 파일을 Import 하여 컨트랙트를 만든 사람만이 발행할 수 있도록 설정
  4. ‘open in remix’ 버튼을 눌러 remix 창을 엽니다. remix는 간단하게 우리의 컨트랙트를 Deploy 시킬 수 있는 툴이라고 생각하시면 됩니다:)
remix 캡쳐화면

그러면 이제 위와같은 창을 띄울 수 있습니다. 하지만, 아직 끝난게 아닙니다. SBT의 가장 중요한 기능이 뭐죠? 바로 “SOUL BOUND” 즉, 전송불가능한 기능을 넣어주어야 합니다.

    function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal override virtual {
require(from == address(0), "Err: token transfer is BLOCKED");
super._beforeTokenTransfer(from, to, tokenId);
}

위 함수내용을 작성해놨던 remix 파일에 23번줄 주석 바로 위인 22번줄에 입력하시고 위에 솔리디티 파일 import 부분의 4.8.0 부분을 모두 4.7.0으로 바꿔주세요! (4.8.0으로 하면 오류가 납니다)

STEP 2) 이미지 업로드

https://www.pinata.cloud/ 해당 사이트 가입 후 업로드 버튼을 눌러 SBT로 만들고 싶은 이미지를 올리시면 옆에 CID가 나옵니다. 이건 아래에서 사용할게요:)

STEP 3) json 파일 만들기

  1. https://code.visualstudio.com/ 이 링크에 들어가셔서 우선 파일 다운로드를 해주세요!

2. ‘새 파일’ 클릭 후 나오는 창에 원하는파일명.json 입력 후 엔터

{
"attributes" : [ {
"trait_type" : "NFT",
"value" : "Soulbound"
}, {
"trait_type" : "Asset",
"value" : "Non-transferable Badge"
}, {
"trait_type" : "Badge",
"value" : "Minting First Soulbound Token"
}, {
"trait_type" : "Type",
"value" : "Demo"
} ],
"description" : "My First SBT",
"image" : "https://gateway.pinata.cloud/ipfs/QmfYDJYkTmoRSnxZF42kPrFZe35jPCYW9m2uiemFaZ9YxU",
"name" : "GMB_Coinangel"
}

3. 비어있는 창에 위 코드를 복사 붙여넣기 해주시고 trait_type은 원하시는걸로 설정해주시면 됩니다. 여기서 Name은 NFT의 이름입니다. 위 Solidity 파일에서 썼던 Name은 ‘NFT 컬렉션’의 이름입니다.

4. image 코드 줄에 https://gateway.pinata.cloud/ipfs/ 뒤에는 STEP 2에서 만들어놨던 내가 올린 이미지의 CID를 입력해주셔야 합니다. 그리고 CTRL+S 로 저장하면 끝!

STEP 4) 민팅

  1. 사진과 같이 다시 https://app.pinata.cloud/ 로 들어가셔서 위에서 만들어뒀던 json파일을 업로드 합니다.

2. 다시 remix로 돌아가서 1번 버튼을 누른 후 2번을 눌러서 Compile 해주도록 합니다.

3. 이제 체인위에 Deploy를 해보도록 합시다. 1번 버튼을 눌러 들어간 후 2번 칸을 클릭하여 Injected Provider-Metamask를 선택해줍니다. (저는 이번에 가스비가 보다 저렴한 폴리곤 메인넷으로 진행했습니다.) 그 후, Deploy 버튼을 눌러주고 트랜잭션 확인을 해주면 여러분도 이제 SBT 발행할 수 있는 컨트랙트를 만든 장본인이 됩니다. 뿌듯(__)

4. Deployed Contracts를 눌러 safeMint 함수를 클릭해줍니다. 그 후, address에는 NFT를 받고싶은 주소(컨트랙트 만든주소랑 같아도 상관 X) , string 부분에는 https://gateway.pinata.cloud/ipfs/ 뒤에 아까 만든 json 파일의 CID를 넣어서 입력해주시면 됩니다. 그 후, transact 버튼을 클릭하면 드디어 민팅 끝!

STEP5) 확인하기

https://opensea.io/ 에 가셔서 Profile에서 확인해주시면 끝! 이제 전송불가능한 본인이 만든 자기만의 SBT가 완성 되었습니다:)

저는 이런식으로 인스타그램에도 업로드 해봤습니다:) 이게 WeB 3.0이지 ㅎㅅㅎ 본인이 만든 NFT 본인 SNS에 업로드하기!

제 글은 ankr docs의 글을 번역, 다듬기 한 정도밖에 되지 않습니다. 외국 유튜브나 글을 되게 많이 찾아봤는데 한국어로 된 글은 제대로 없는것 같아 이렇게 오늘 직접 처음부터 끝까지 SBT 만들어보는 글을 한국어로 써보았는데 저도 개발쪽 공부한지 한달도 안되어서 어렵게 느껴졌지만 이런 경험을 직접 해봄으로써 더욱 더 흥미를 느끼게 되는것 같습니다. 여러분들도 한번씩 해보세요:) 다음에도 재밌고 간단한 개발적인 내용이 있다면 올리도록 하겠습니다. 긴 글 읽어주셔서 감사합니다.

--

--