솔리디티란?
: 스마트 컨트랙을 개발하기 위한 언어
▶ 스마트 컨트랙의 경우 특정 조건이 충족됐을 때만 해당 스마트 컨트랙이 작동함.
Hello Solidity
▶ 솔리디티 실습을 위해 REMIX IDE를 활용해서 실습 진행할 예정
📌 코드 작성
- 라이센스를 무조건 맨 윗줄에 명시해주어야 함// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract lec1{ string public hi = "Hello Solidity"; }
- 이후에 컴파일 솔리디티 버전을 명시해줌 → 0.7 버전에서 0.9 미만까지 사용하겠다는 의미
- 'contract' 구문을 활용하여 컨트랙을 명시해줄 수 있음
- 'hi' 변수에 'Hello Solidity'라는 문구를 넣어준다
- 문장이 끝날 때마다 세미콜론을 붙여야 오류가 발생하지 않음
솔리디티 컴파일러 탭에서 컴파일 버튼을 눌러 컴파일을 해준다.
바로 아래 탭에서 Deploy를 누르면 컨트랙 이름인 'lec1'이라는 스마트 컨트랙이 배포된 것을 볼 수 있었다.
배포된 솔리디티에서 변수인 hi를 클릭하니 변수의 내용이 출력되는 것을 볼 수 있었다.
Data Type
(1) Boolean
: true와 false가 있고, 일반적으로 다른 연산자와도 함께 사용할 수 있다.
▶ 사용 방법 : (데이터 타입 정의) (접근 제한자) (변수명) = (Boolean type)
→ Ex) bool public b = false;
📌 활용 예제 코드
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 < 0.9.0; contract lec2{ // bolean : true/false bool public b = false; // ! || == != && bool public b1 = !false; //true bool public b2 = false || true; // true bool public b3 = false == true; //false bool public b4 = false != false; // false bool public b5 = false && true; // false }
(2) Byte
: 솔리디티는 byte1부터 byte32까지 저장할 수 있다.
▶ 사용 방법 : bytes(사용할 바이트의 숫자) (접근 제한자) (변수명) = (변수 값)
→ bytes4 public bt = 0x12345678;
→ bytes public bt2 = "STRING";
** String 즉, 문자열이 몇 바이트인지 모르는 경우 바이트 값을 작성해주지 않고 'bytes'만 사용하여 작성해줄 수 있다. 이렇게 사용할 경우 솔리디티에서 자동적으로 바이트화되어 저장할 수 있다.
(3) Address
: 주소를 나타내는 부분으로, 20바이트이다.
Ex) 은행 계좌를 개설할 때 각 사람마다 고유 계좌를 통해 돈을 주고받게 된다. 이와 같이 Address는 은행 계좌번호의 역할을 하는 것이다.
▶ 사람한테 보여주는 것 뿐만 아니라 스마트 컨트랙을 배포할 때도 address가 발생한다. 즉, 스마트 컨트랙 마다 배포될 때 address가 생성되는 것이다.
(4) Integer
: Integer 는 두가지 타입 즉, 기호있는 integer인 int와 기호없는 integer인 uint로 나뉠 수 있고 연산을 자유롭게 사용할 수 있다.
✅ int의 범위
- int8 : -2^7 ~ 2^7-1
- int16: -2^15~2^15-1
- int32: -2^31~2^31-1
- int64: -2^63~2^63-1
- int128 : -2^127~2^127-1
- int256 (=int): -2^255~2^255-1
✅ uint의 범위
- uint8 : 0~2^8-1
- uint16: -0~2^16-1
- uint32: -0~2^32-1
- uint64: -0~2^64-1
- uint128 : -0~2^128-1
- uint256 (=uint): 0~2^256-1
▶ 마이너스를 거의 사용하지 않기 때문에 uint를 사용하는 경우가 많다.
(5) Ether/GWei/wei & Gas
- 1 ether = 10^9 Gwei = 10^18 wei ▶ 즉, 1^18 wei는 1이더
- 0.00000000000000001 ehter = 1 wei
- 0.01 ether = 10^16 wei
✅ GWei
: 주로 가스를 소비했을 때, 사용되는 단위
→ 가스는 스마트컨트랙을 사용할 때 지불하는 비용
가스비용 책정 방식)
- 개발자가 스마트 컨트랙을 얼마나 길게 만들었는지에 따라 비용이 달라짐 → 길이가 짧을수록 소비되는 가스가 적어짐- 스마트 컨트랙 안에 무엇으로 정의되냐에 따라 가스 소비 비용이 달라짐 → string이나 modifer를 사용하는 경우 가스가 더 많이 들어감▶ 이더리움에서 제공하는 옐로우 페이퍼를 보면, 어떤 내장기능을 사용하냐에 따라 가스 소비량 계산 가능
✅ 실습 진행
각 단위에 대한 출력 결과를 확인해보기 위해 아래와 같이 코드를 작성하고 배포를 진행해보았다.
그 결과, 아래와 같이 각 단위에 대한 값을 볼 수 있었다.
그리고 출력할 때마다 가스가 소비되는 것을 확인할 수 있다.
▶ 이더리움 블록체인과 상호작용을 하려면 반드시 가스를 사용해야 하기 때문에 스마트 컨트랙을 쓰면 해당 정보들이 블록체인 네트워크와 연결되므로 가스 비용이 발생한다.
📌 가스를 만든 이유
이더리움에 의하면, 가스를 만든이유는 DDoS 공격에서 좀 더 자유로워 지기 위해서 만들었다고 한다. 예를 들어, 해커가 고의적으로 블록체인 네트워크를 다운 시킬려고, 스마트 컨트랙을 지속적으로 작동하게 반복 시켜 과부화를 준다고 가정 했을때, 해커는 작동을 반복시킬때마다 Gas 비용을 지불해야하죠. 이는 비용적인 측면에서 부담이 되는 부분이기 때문에 DDoS 등과 같은 공격을 예방할 수 있다.
→ 보안적인 측면에서 가스는 디도스와 같은 공격을 방지할 수 있음
출처 : 인프런 솔리디티 깨부수기(https://inf.run/qNVC)
'Study > Blockchain & Solidity' 카테고리의 다른 글
[Solidity 깨부수기] Instance - constructor (0) | 2024.05.22 |
---|---|
[Solidity 깨부수기] Instance 정의 (0) | 2024.05.15 |
[Solidity 깨부수기] Function (0) | 2024.04.29 |
Solidity (0) | 2024.04.08 |
Blockchain (0) | 2024.04.03 |