소개
강의
전체 3수강평
- 누구나 할 수 있는 NFT 만들기
게시글
질문&답변
2023.06.11
강의 업데이트 문의
안녕하세요, 옛날부터 따로 생각은 하고 있었는데요,실현은 못 하고 있었네요 ㅠㅠ.. NFT 무료 강의도 리메이크 문의가 와서요, 조금더 실용적으로 다시 제작 하고 있습니다, 해당 본강의는 찍으면 이번에는 hardhat 이나, foundry로 강의를 제작하겠습니다.이렇게 질문 주셨는데, 혹시 따로 간단하게 만들어 보고 싶은 프로젝트있으시다면, 참고해서 그거 바탕으로 제작 해보겠습니다 :) 좋은 하루되세요!!
- 1
- 1
- 372
질문&답변
2023.02.24
fallback
안녕하세요 제원님, 네 fallback 안의 로직이 있다면,해당 로직이 살행될 때 가스비를 소비하게 됩니다:) 소비하는 비용은 트랜잭션을 보낸 사람이 지불합니다!!
- 1
- 1
- 307
질문&답변
2023.02.23
pure view
안녕하세요 제원님 :) function balance1(address _a) public view returns (uint256) { return _a.balance; } function fun1(uint256 _a) public pure returns (uint256) { if (_a == 3) { return 555; } return 111; }두함수를 보시면, balance1(address _a)와 fun1(uint256 _a) 이렇게 되어있죠,즉 변수 _a는 함수의 파라메터에 최초로 정의된 것 알 수가 있습니다.변수 _a가 파라메터로 정의됬다는 뜻은 함수 내부에서만 사용이 가능한 로컬변수 라고 생각할 수 있습니다. 즉 _a를 함수 밖으로 가져가서 사용하지 못 하겠죠 자 그러면, pure와 view는 무엇일까요 ? pure와 view는 데이터를 저장하지 않을 때 사용되는 모디파이어 입니다.두 함수에서 볼 수 있듯이, 함수 밖의 변수에 데이터를 따로 저장하지 않고 있죠? 자 그러면 pure와 view의 차이점은 무엇일까요?일단 balance1(address _a)의 view 부터 보겠습니다.view 는 함수의 밖에 있는 데이터 값을 읽어 올 때 사용합니다. _a 는 함수 내부에 정의된 로컬변수 인데, 어떻게 외부의 값을 읽어와서 view라고 표시한걸까요?_a는 주소형 타입 address 인것을 알 수 있습니다. 주소형 타입의 경우 멤버변수로 balance를 조회할 수 있습니다.(balance는 현재 사용중인 블록체인의 메인 코인의 잔액을 나타냅니다) 즉, _a는 로컬 변수지만, 주소형이기에, 멤버변수인 balance라는것을 조회하기에 view를 쓴것을 알 수 있습니다.이와 반대로, fun1(uint256 _a)의 pure는 uint인 정수형 타입이며, 밖에서 읽어 들여오는게 없죠 그렇기 때문에 pure를 사용한것을 알 수 있습니다. 정리하자면,pure와 view는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수에 적용한다. view는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수 밖의 변수의 값을 읽어 올 때, 함수에 적용한다.pure는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수 밖의 변수의 값을 읽어 오지않을 때 함수에. 적용한다. 감사합니다 :)
- 1
- 1
- 350
질문&답변
2023.02.20
SafeMath 함수
안녕하세요 제원님 :)이전 답변이 도움이 되었다니, 다행이네요 :) SafeMath는 문자그대로 이해하시면, 편하세요. 안전한 수학이죠. 솔리디티 버전 0.8미만에서는 overflow와 underflow를 방지하는 기능이 없었습니다. 예를 들어서, uint8의 범위는 0~255 입니다. 그러나, 솔리디티 버전 0.8미만 underflow와 overflow를 방지하는 기능이 없어서, 0에서 underflow가 일어나 255로 갈수도 있고, 255에서 overflow가 일어나서 0으로 갈 수 있는 문제가 있었습니다. 그래서, 이것을 방지하기 위해, safeMath라는 라이브러리를 사용하게되었습니다.그러나, 솔리디티 0.8 이상부터는 underflow와 overflow를 자동으로 방지하기에, 더이상 safeMath를 쓰시지 않으셔도 됩니다 :)
- 1
- 1
- 436
질문&답변
2023.02.20
솔리디티
안녕하세요 제원님 :)먼저, lec13_1은 whoIsMsgSender 라는 함수를 갖고 있습니다. whoIsMsgSender 는 msg.sender를 반환을 합니다.msg.sender는 트랜잭션을 보낸 주소 입니다, 즉 여기에서는, whoIsMsgSender 를 실행한 (트랜잭션을 보낸) 주소라고 생각하시면 됩니다. 자 그러면, lec13의 함수 callWhoIsMsgSender는 lec13_1의 함수 whoIsMsgSender 를 실행하고 (트랜잭션을 보내고) 있습니다. 즉 lec13_1의 함수 whoIsMsgSender의 입장에서 생각을 하면, lec13의 함수 callWhoIsMsgSender가 실행한것이기에, whoIsMsgSender의 msg.sender는 lec13주소가 됩니다. 자 그러면, lec13의 함수 callWhoIsMsgSender가 lec13_1의 함수 whoIsMsgSender 를 실행을 시키려면, 누군가 lec13의 함수 callWhoIsMsgSender를 실행해야겠죠? 예를 들어서, Alice가 lec13의 함수 callWhoIsMsgSender 를 실행시켰다고 가정했을때, lec13의 함수 callWhoIsMsgSender 의 msg.sender는 Alice의 주소가 되겠죠. 자 그러면, 정리해서 한번 볼까요? Alice ---트랜잭션 보냄---> lec13의 함수 callWhoIsMsgSender ---트랜잭션 보냄---> lec13_1의 함수 whoIsMsgSender 입니다.즉, lec13의 함수 callWhoIsMsgSender 입장에서는 Alice가 자신을 실행시켰으니, lec13의 함수 callWhoIsMsgSender 의 msg.sender는 Alice 의 주소가 되겠죠. 반면에, lec13_1의 함수 whoIsMsgSender 는 lec13의 함수 callWhoIsMsgSender 가 자신을 실행 시켰으니, lec13의 함수 callWhoIsMsgSender 의 msg.sender는 lec13의 주소가 되겠죠. 혹시 궁금한점 있으시면, 질문 남겨주세요 :))감사합니다 :)
- 1
- 1
- 346