솔리디티
IT 위키
더 많은 작업
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0;
contract Counter {
uint256 public count; // 상태 변수. 블록체인에 저장된다
function increment() public { // 상태를 바꾸므로 가스가 든다
count += 1;
}
function get() public view returns (uint256) { // 읽기만 하므로 가스가 들지 않는다
return count;
}
}
- `pragma` 로 컴파일러 버전을 고정한다.
- `contract` 가 클래스에 해당한다. 상속을 지원한다.
- 상태 변수는 블록체인에 남고, 지역 변수는 실행 중에만 있다.
- `view`·`pure` 로 표시한 함수는 상태를 바꾸지 않아 호출에 가스가 들지 않는다.
- `uint256`, `int256` — 정수. 256비트가 EVM 의 기본 워드 크기다
- `address` — 계정 주소
- `mapping(키 => 값)` — 해시 테이블. 순회할 수 없다
- `struct`, `enum`, 배열
- 재진입(Reentrancy) — 외부 계약을 호출하는 동안 다시 호출당해 잔액이 여러 번 빠져나간다.
The DAO 해킹 사건의 원인이다. 상태를 먼저 바꾸고 나중에 송금하는 순서로 막는다
- 정수 오버플로 — 0.8.0 부터 기본으로 검사한다
- 접근 제어 누락 — 권한 검사 없이 중요한 함수를 공개하는 실수