Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 디자인 패턴
- 블록체인
- 팩토리패턴
- github
- 일시정지
- git add
- 트러블슈팅
- 멀티시그
- 코드스테이츠
- 토큰노믹스
- 업그레이더블 컨트랙트
- 부트캠프
- 회로차단
- 싱글톤패턴
- 투표
- 프록시패턴
- RBAC
- 솔리디티
- 옵저버패턴
- 재진입
- 스테이트머신패턴
- 인센티브 기반 커뮤니티
- github 에러
- solidity
- 배팅
- 팀 프로젝트
- git commit
- 코드리뷰
- 웹툰
Archives
- Today
- Total
보다 더 생생한 기록
[Solidity] 크립토좀비 Ch1,2 정리 본문
BEB가 끝났음에도 정확히 정립되지 않았거나, 까먹었던 내용들 위주로 정리하였습니다.
Ch1
함수 인자명
function eatHamburgers(string _name, uint _amount) {
}
함수 인자명을 " _ " 로 시작해서 전역변수와 구별해야 함.
private / public
function _addToArray(uint _number) private {
numbers.push(_number);
}
코드와 같이 private로 선언된 함수명은 " _ " 로 시작해야함.
- public 키워드를 사용하면 contract의 내부/외부 모두에서 해당 함수를 호출할 수 있다.
- private 키워드를 사용하면 해당 함수를 해당 contract 의 내부에서만 호출할 수 있다.
+a
uint는 uint256과 동일
Ch2
매핑 형식
// 금융 앱용으로, 유저의 계좌 잔액을 보유하는 uint를 저장한다:
mapping (address => uint) public accountBalance;
// 혹은 userID로 유저 이름을 저장/검색하는 데 매핑을 쓸 수도 있다
mapping (uint => string) userIdToName;
상속
contract Doge {
function catchphrase() public returns (string) {
return "So Wow CryptoDoge";
}
}
contract BabyDoge is Doge {
function anotherCatchphrase() public returns (string) {
return "Such Moon BabyDoge";
}
}
BabyDoge는 Doge를 상속하게 된다. 추후 BabyDoge 내에서 Doge 내의 퍼블릭 함수인 catchphrase()를 사용할 수 있다.
Storage vs Memory
Storage : 블록체인에 영구저장
Memory : 함수 호출이 종료되면 소멸
추가적인 함수 접근 제어자
상속파트를 보면, 상속을 받았을때 그 부모의 public 함수를 사용할 수 있다는 것을 알 수 있다. 하지만 private로 선언된 함수는 상속을 받았다 하더라도 사용을 못한다.
이때 private 대신 internal을 사용하면 된다.
internal은 함수가 정의된 컨트랙트를 상속하는 컨트랙트내에서도 접근이 가능하다는 점을 제외하면 private와 동일하다.
즉 하위 컨트랙트내에서 부모 컨트랙트의 함수를 사용하고 싶다면 internal로 변경하면 된다.
external은 보통 view와 함께 쓰인다.
이더스캔에서 read 탭에 가면 쉽게 볼 수 있다.
다른 컨트랙트와 상호작용하기
contract LuckyNumber {
mapping(address => uint) numbers;
function setNum(uint _num) public {
numbers[msg.sender] = _num;
}
function getNum(address _myAddress) public view returns (uint) {
return numbers[_myAddress];
}
}
위와 같은 컨트랙트가 배포되었다고 하고, 이제 내 컨트랙트를 작성하려한다. 이미 배포된 컨트랙트의 getNum을 사용하고 싶다면
contract MyContractName {
function getNum(address _myAddress) public view returns (uint);
}
위 코드와 같이 작성하면된다.
다수의 반환값 처리하기
function multipleReturns() internal returns(uint a, uint b, uint c) {
return (1, 2, 3);
}
function processMultipleReturns() external {
uint a;
uint b;
uint c;
// 다음과 같이 다수 값을 할당한다:
(a, b, c) = multipleReturns();
}
// 혹은 단 하나의 값에만 관심이 있을 경우:
function getLastReturnValue() external {
uint c;
// 다른 필드는 빈칸으로 놓기만 하면 된다:
(,,c) = multipleReturns();
}
맨 아래 코드는 (,,,,,,,,,,,,,,,,,,c) 와 같이 사용될 수도 있다. (쉼표 개수를 잘 확인하자)
'블록체인' 카테고리의 다른 글
[Solidity][코드리뷰] 스테이킹 시스템 코드 분석 (0) | 2023.01.30 |
---|---|
[Solidity][코드리뷰] Lazy Minting in OpenSea (오픈씨내에서의 레이지민팅) (0) | 2023.01.13 |
[Solidity] UniSwap v2 - 이론 정리 (0) | 2022.12.25 |
[Solidity] Lazy Minting 코드 분석 (0) | 2022.11.16 |
CORS / OPTIONS / preflight (0) | 2022.11.10 |