소개
강의
전체3수강평
- 좋은 강의 감사합니다!
박시온
2023.09.23
0
- 솔리디티 문법 강좌 찾고 있었는데 깔끔하게 잘 배운 것 같습니다
여기어때
2023.07.27
0
- 패지키 설치에 살짝 어려움을 겪을 뻔 했지만, 강의 자체는 이해가 쉽습니다.!
Yongjae Kim
2023.07.27
0
- 무료임에도 불구하고 너무 알찬 강의
카데
2023.05.16
0
게시글
질문&답변
2023.06.11
강의 업데이트 문의
안녕하세요, 옛날부터 따로 생각은 하고 있었는데요, 실현은 못 하고 있었네요 ㅠㅠ.. NFT 무료 강의도 리메이크 문의가 와서요, 조금더 실용적으로 다시 제작 하고 있습니다, 해당 본강의는 찍으면 이번에는 hardhat 이나, foundry로 강의를 제작하겠습니다. 이렇게 질문 주셨는데, 혹시 따로 간단하게 만들어 보고 싶은 프로젝트있으시다면, 참고해서 그거 바탕으로 제작 해보겠습니다 :) 좋은 하루되세요!!
- 1
- 1
- 361
질문&답변
2023.02.24
fallback
안녕하세요 제원님, 네 fallback 안의 로직이 있다면, 해당 로직이 살행될 때 가스비를 소비하게 됩니다:) 소비하는 비용은 트랜잭션을 보낸 사람이 지불합니다!!
- 1
- 1
- 298
질문&답변
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
- 347
질문&답변
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
- 427
질문&답변
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
- 338