크립토좀비

주소 , 매핑


  • 주소 : 특정 계정을 가리키는 고유 식별자. 20byte 자료형. 계약 계정 주소 및 외부 소유 계정 주소를 담을 수 있다.

  • 매핑 : 키-값(key-value) 저장소. 제공된 키를 가지고 값을 얻어내는 데 유용하다. 데이터를 저장하고 검색하는 데 이용된다.

ex)
//userID로 유저 이름을 저장, 검색
mapping (uint => string) public userIdToName;

msg.sender


현재 함수를 호출한 사람 (혹은 스마트 컨트랙트)의 주소. 모든 함수에서 이용 가능한 전역 변수이다.

require


함수 실행 전에 참이어야 하는 특정 조건을 확인하는 데 사용한다. require를 활용하면 특정 조건이 참이 아닐 때 함수가 에러 메세지를 발생하고 실행을 멈추게 된다. 사용하지 않은 가스는 호출자에게 반환되며 상태는 원래대로 돌아간다.

ex)
function Hi(string _name) public returns (string){
    require(_name = "aa");
    return "Hi";

}

상속


부모 계약(parent contract)을 상속받은 자식 계약(child contract)은 부모 계약의 모든 변수, 함수, 이벤트 등을 자신의 것처럼 사용할 수 있다.

ex)
contract a {
}

contract b is a{ //b가 a를 상속한다.
}

import


어떤 파일을 다른 파일로 불러오고 싶을 때 사용.

ex)
import "./a.sol";

Storage , Memory


  • Storage : 블록체인 상에 영구히 저장되는 변수. 상태 변수는 초기 설정상 storage로 선언.
  • Memory : 임시적으로 저장되는 변수. 컨트랙트 함수에 대한 외부 호출들이 일어나는 사이에 지워진다. 함수 내에 선언된 변수는 memory로 자동 선언.

구조체와 배열을 처리할 때는 키워드를 선언해주어야 한다.

다른 컨트랙과의 상호작용


자신이 소유하지 않은 컨트랙트와 상호작용을 하기 위해서는 인터페이스를 정의하면 된다.
상호작용하는 함수가 public이나 external로 선언되어있어야 한다.

다수의 반환값 처리


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();
}

런타임 오류


  • 가스 부족 오류
  • 0으로 나누는 오류
  • 자료형 오버플로우 오류
  • 배열 인덱스 오류

오류 처리 구문


  • assert : require문과 비슷하지만 사용하지 않은 가스를 호출자에게 반환하지 않고, 공급된 가스를 모두 소모하며 상태는 원래대로 되돌린다. 함수의 현재 상태와 조건을 실행 전에 검증하는 데 사용한다.
  • revert : require문과 비슷하지만 어떠한 상태도 평가하지 않으며 어떠한 상태 혹은 구문에도 의존하지 않는다. 사용되지 않은 가스를 반환하며, 원래 상태로 되돌린다.
  • require : 위에서 설명.