본문 바로가기

블록체인/이더리움

[Solidity] 솔리디티 문법 요약 정리

데이터 타입

bool

int/ uint ( uint8, uint16 ... uint256)

address

이더 단위(ether, wei, finney, szabo)

Fixed point numbers( 고정 소수점 선언은 가능하나 할당하지 못함)

bytes, string : 동적 크기 바이트 배열

 

연산

+ 더하기

- 빼기

* 곱하기

/ 나누기

% 나머지

** 지수

 

해시함수

keccak256 // stirng == string solidity에서 지원하지 않으므로 keccak256(string1) == keccak256(string2)로 비교

 

memory/ storage

메모리는 함수가 종료되면 메모리 해제

storage는 상태 변수로 쓰임

 

mapping

해시 맵과 같은 key- value 구조 데이터 집합 구조

mapping(address => uint) public balances;
balances[msg.sender] = _newBalance;

 

Struct 구조체

struct Person {
  string name;
  uint age;
}

Person a = Person("Dean", 24);

Array 배열

uint [] numbers;
numbers.push(1);
let arraysize = numbers.length;

enum 열거형

enum RPS { Rock. Paper, Scissors}
RPS move = RPS.Rock;

 

delete

데이터 값 삭제 (초기값으로 변경) 정수면 0, 배열이면 배열의 크기를 0으로 만든다. 매핑에는 사용하지 못함

uint x = data;
delete x; // sets x to 0, does not affect data
delete data; // sets data to 0, does not affect x which still holds a copy
uint[] storage y = dataArray;
delete dataArray; // this sets dataArray.length to zero, but as uint[] is a complex object, also
// y is affected which is an alias to the storage object
// On the other hand: "delete y" is not valid, as assignments to local variables
// referencing storage objects can only be made from existing storage objects.

 

require

require(bool) true 일 때만 다음 라인 실행 

 

접근 제어자

internal, external, public, private

internal 상속하는 컨트랙트 내에서 까지 접근 가능

external 컨트랙트 바깥에서만 접근할 수 있고 컨트랙트 내의 다른 함수에서는 접근 불가

 

함수 제어자

함수를 호출할 수 있는 접근 권한을 지정

payable 이더 결제를 가능하게 하는 함수 제어자 payable 선언 안 한 함수는 이더 전송 함수 호출 불가

onlyowner 같은 외부 라이브러리 또는 modifier로 구현해서 사용 가능

 

조건문 if //똑같음

 

반복문 for

for(uint i=1; i <=10; i++) {} // 같음

 

Pure/ View

pure : 컨트랙트 상태 변수에 값을 쓰지도 않고 읽어오지도 않음

view : 상태 변수 값을 가져오기만 함 

 

 

상속(부모의 internal, public 접근 가능, 다중 상속 가능)

contract A is B, C {}

 

Interface 인터페이스

선언은 컨트랙트 같지만 함수의 몸통을 구현하지 않음 

contract Animal {
  function say();
}

//버전 업데이트
interface Animal {
	function say();
}

 

Event 이벤트

이더 전송과 같은 일이 발생하면 트랜잭션에 로그를 같이 생성해 웹에서도 확인할 수 있다.

emit으로 로그 생성

event Transfer(address sender, uint amout);

function transer() { emit Transfer(msg.sender, 100); }

 

revert(명령문, 함수)

에러를 발생시키고 이전 상태로 되돌림

revert CustomError("hi");
revert();