[TIL] 2023-06-07 DAY52
GIT 주소 : https://github.com/dowoo303/SOLIDITY
오늘 배운것들
- ERC1155
1) 변수이름없는 인풋, 이름있는 아웃풋의 존재이유
2) 상속받을 시에 생성자를 받는 두가지 방법- Truffle & Ganache 설치
1) Truffle폴더 만들고 init까지만
각종 팁
- 한 컨트랙트에서 여러개의 코인을 발행하고 관리하고 싶다면 ERC1155를 사용하면 된다.
- 변수 이름을 부여하지 않은 인풋 값을 넣는 이유는 만들때는 사용하지 않지만 나중에 상속받은 함수에서 사용이 필요할 경우를 대비하는 것이다.
- 상속받을 때 생성자를 받는 두가지 방법
1) 상속받을 때 컨트랙트 명 바로 다음에 값을 부여하기
2) 상속받은 컨트랙트 안의 생성자 옆에서 부모 컨트랙트명 다음에 값 부여하기 -> 변수를 이용해서 부모 컨트랙트에 값을 부여하고 싶을 때 사용- 명령어 모음
mkdir: 폴더 만듦
cd: 폴더 이동
ls: 하위에 어떤 것들이 있는지 확인
회고
- remix에서 github로 push 눌렀는데 자꾸 http error 401 Unauthorized 뜨면서 실패뜸. -> 해결방법: 저번에 remix에서 github settings할때 토큰 기간이 만료된게 문제다. github들어가서 settings -> Developer settings -> Personal access tokens에서 만료된 토큰 삭제하고 다시 발급받아서 remix에 넣어주고 push하면 올리기 성공 !
순서
로컬에서 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);
}
}
스마트 컨트랙트를 쉽게 배포하고 실행시킬 수 있도록 해주는 스마트 컨트랙트 개발 프레임워크
- 설치법
- node.js를 통해서 트러플 설치
npm install -g truffle- 사용할 폴더 생성 및 이동
truffle init
테스트 목적으로 PC에 설치해서 사용할 수 있는 일종의 간이 블록체인
- 설치법
web 다운로드