솔리디티
- 스마트 컨트랙트를 하기 위한 언어.
- Ethereum Virtual Machine 타겟으로 만들어짐.
Ethereum Virtual Machine
- 이더리움 노드들이 공유하는 하나의 거대한 가상머신
- 정적 타입
- 여러 기능 중 상속, 라이브러리, 유저 정의 타입 등을 지원.
- 스마트 컨트랙트를 할 번 올리면 수정할 수 없기에 신뢰성 보장.
remix.ethereum.org
- 웹 기반 솔리디티 에디터
- remix는 웹 브라우저에서 사용 가능한 IDE
솔리디티 특징
- 반복문과 제어문 사용과 비슷한 튜링완전하다라는 특징을 가지고 있음.
- 특별한 변수를 가지고 있음.
- msg.sender : 메세지를 보낸 주소
- msg.value : 메세지를 보낸 값
스마트 컨트랙트 구조
// 1. 컨트랙트 선언
contract Sample {
// 2. 상태 변수 선언
uint256 data;
address owner;
// 3. 이벤트 정의
event logData(uint256 dataToLog);
// 4. 함수 변경자 정의
modifier onlyOwner() {
if(msg.sender != owner) revert();
_;
}
// 5. 생성자
function Sample(uint256 initData, address initOwner) {
data = initData;
onwer = initOwner;
}
// 6. 함수(메소드) 정의
function getData() returns (uint256 returned) {
return data;
}
function setData(uint256 newData) onlyOwner {
logData(newData);
data = newData;
}
}
- 해당 코드는 스마트 컨트랙트 뼈대로 사용 가능.
솔리디티 데이터 타입
- string > UTF-8로 인코딩되어 우리가 알아보기 쉽도록 설정.
- byte
맵핑
- 키와 value의 쌍
특징
- 동적 배열 > 블록체인 상에 db처럼 값을 계속 추가하여 사용할 수 있음. 인터페이스를 사용하여 추상계층 작성 가능.
- 정적 배열도 사용 가능.
Modifier 한정자
- 한정자는 함수 선언에 같이 선언하면 함수를 실행시키는 조건으로 자리할 수 있음.
- 다른 언어의 데코레이터랑 비슷한 역할.
데이터 위치
- storage : 상태변수, 로컬변수로 블록체인 내에 저장되고 메모리는 사용 후 휘발.
- memory : 로컬 변수
솔리디티 문법
- if, else, while, for, break, continue, return,삼항연산자 지원
가시성
- 누구나 접근할 수 있는지 정의.
- external : 다른 컨트랙트나 트랜잭션을 통해서만 호출 가능.f()는 안되고 this.f()로 function을 호출하면 동작.
- public : 모든 방법으로 접근 가능,
- internal : 내부적으로만 접근 가능. 접근을 위해 this를 사용할 수 없음.
- private : internal과 비슷하지만 상속된 컨트랙트에서는 접근할 수 없음.
가스
- EVM에서 무언가 실행될 때 가스 발생.
- 가스는 수수료.
- 가스 리밋 : 수수료의 한계치, 낮게 설정하면 수수료를 다 써버리게 됨. > 이런 경우 수수료 환불 X
- 가스 프라이스 : 가스당 가격
가스 프라이스 * 가스 사용량 = 수수료
'솔리디티 및 블록체인' 카테고리의 다른 글
솔리디티 06. function 2 (0) | 2024.05.08 |
---|---|
솔리디티 05. Function 1 - 정의 (0) | 2024.05.01 |
솔리디티 04. Ether/GWei/wei 그리고 Gas (0) | 2024.05.01 |
솔리디티 03. (0) | 2024.04.17 |
솔리디티 & 블록체인 01. (0) | 2024.04.03 |