[TIL] Part2 - DAY52 Solidity - ERC1155, Truffle & Ganache 설치

박동우·2023년 6월 7일

블록체인 스쿨 3기

목록 보기
49/72

[TIL] 2023-06-07 DAY52


Solidity

GIT 주소 : https://github.com/dowoo303/SOLIDITY


오늘 배운것들

  1. ERC1155
    1) 변수이름없는 인풋, 이름있는 아웃풋의 존재이유
    2) 상속받을 시에 생성자를 받는 두가지 방법
  2. Truffle & Ganache 설치
    1) Truffle폴더 만들고 init까지만

각종 팁

  1. 한 컨트랙트에서 여러개의 코인을 발행하고 관리하고 싶다면 ERC1155를 사용하면 된다.
  2. 변수 이름을 부여하지 않은 인풋 값을 넣는 이유는 만들때는 사용하지 않지만 나중에 상속받은 함수에서 사용이 필요할 경우를 대비하는 것이다.
  3. 상속받을 때 생성자를 받는 두가지 방법
    1) 상속받을 때 컨트랙트 명 바로 다음에 값을 부여하기
    2) 상속받은 컨트랙트 안의 생성자 옆에서 부모 컨트랙트명 다음에 값 부여하기 -> 변수를 이용해서 부모 컨트랙트에 값을 부여하고 싶을 때 사용
  4. 명령어 모음
    mkdir: 폴더 만듦
    cd: 폴더 이동
    ls: 하위에 어떤 것들이 있는지 확인

회고

  1. remix에서 github로 push 눌렀는데 자꾸 http error 401 Unauthorized 뜨면서 실패뜸. -> 해결방법: 저번에 remix에서 github settings할때 토큰 기간이 만료된게 문제다. github들어가서 settings -> Developer settings -> Personal access tokens에서 만료된 토큰 삭제하고 다시 발급받아서 remix에 넣어주고 push하면 올리기 성공 !



💻 Solidity 코딩

✅ ECR1155

순서
로컬에서 NFT그림 만들기 -> ipfs(피나타 등) -> CID(주소)받아오기 -> Solidity -> 개발 -> opensea

ECR1155 오픈 재플린: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol

ERC1155로 민팅 및 생성자 실습

🟥 코드

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/utils/Strings.sol";


// 한 컨트랙트 안에서 여러개 토큰 관리해보기
contract RAINBOW is ERC1155 {
    // token ID 부여
    uint public constant Red = 1;
    uint public constant Yellow = 2;
    uint public constant Green = 3;
    uint public constant Blue = 4;
    uint public constant Purple = 5;
    string public baseUri;

    // https://gateway.pinata.cloud/ipfs/QmQy6FtvULG59vcddBaLVMC9PRyriZpseDQhJVB65PNtUN
    constructor(string memory _baseUri) ERC1155(_baseUri) {     // =constructor() ERC1155("https://gateway.pinata.cloud/ipfs/QmQy6FtvULG59vcddBaLVMC9PRyriZpseDQhJVB65PNtUN") 
        baseUri = _baseUri;
        // 263번째줄
        _mint(msg.sender, Red, 5, "");
        _mint(msg.sender, Yellow, 5, "");
        _mint(msg.sender, Green, 5, "");
        _mint(msg.sender, Blue, 5, "");
        _mint(msg.sender, Purple, 5, "");
    }

    // 토큰 ID에 맞는 json 경로 string 형태로 받아오기
    function uri(uint tokenId) override public view returns(string memory) {
        // 56번째 줄
        return string(abi.encodePacked(baseUri,"/", Strings.toString(tokenId), ".json"));
    }

    // 원하는 수량만큼 민팅 가능
    function mintToken(uint _id, uint _amount) public {
        _mint(msg.sender, _id, _amount, "");
    }

    // 내 지갑주소 복사
    function getBatchAddresses(uint a) public view returns(address[] memory) {
        address[] memory _list = new address[](a);
        for(uint i=0; i<a; i++) {
            _list[i] = msg.sender;
        }
        return _list;
    }

    
    function getBalanceOfBatch(uint[] memory _tokenIds) public view returns(uint[] memory) {
        // 78번째 줄
        return balanceOfBatch(getBatchAddresses(_tokenIds.length), _tokenIds);
    }
}



✅ Truffle & Ganache 설치

트러플

스마트 컨트랙트를 쉽게 배포하고 실행시킬 수 있도록 해주는 스마트 컨트랙트 개발 프레임워크

  • 설치법
  1. node.js를 통해서 트러플 설치
    npm install -g truffle
  2. 사용할 폴더 생성 및 이동
    truffle init

가나슈

테스트 목적으로 PC에 설치해서 사용할 수 있는 일종의 간이 블록체인

  • 설치법
    web 다운로드
profile
HELLO!

0개의 댓글