[Solidity] Let's start Solidity

장성호·2022년 7월 5일
1

[Solidity]

목록 보기
1/2
post-thumbnail

몸으로 부딪히기

블록체인, 특히 이더리움이나 솔라나 같은 종류의 블록체인을 활용한다면 꼭 등장하는 것이 스마트 컨트랙트이다. 비트코인의 등장 이후, 이더리움이 엄청나게 성장하면서 소위 "대장 코인"으로 자리잡게 된 것도 스마트 컨트랙트라는 기능 덕분이다. 따라서 앞으로는 스마트 컨트랙트나 NFT 등 블록체인의 다양한 기능을 알아볼 예정이다.

근데 개념 소개만 하면 블록체인에 대해서 교양을 익히는 것에서 그친다. 개발자로서 블록체인을 이리저리 만져서 원하는 걸 만들어내는 게 목적이니까, 직접 만들어보면서 다양한 기능을 몸소 느껴보자.

Solidity와 Remix

이더리움 개발을 하기 위해서는 Solidity라는 언어를 사용해야 한다. 이를 지원하는 IDE는 다양하지만, 대표적인 Remix를 사용한다. Solidity에 대한 위키 설명을 보면, 계약 지향 프로그래밍 언어라고 한다. 객체 지향 프로그래밍 언어, 함수형 프로그래밍 언어는 들어봤어도, 계약 지향 프로그래밍 언어는 정말 처음 들어본다. 이더리움 이야기가 나오면 스마트 계약, 스마트 컨트랙트라는 단어가 항상 나오는데, 개발 시작부터 계약이 튀어나왔다.

Solidity는 정적타입의 프로그래밍 언어이다. 블록체인의 특징을 생각해보면 사실 당연하다. Solidity로 작성된 프로그램(스마트 컨트랙트)은 블록으로써 체인에 연결되고, 계속해서 실행될 것이다. 기억해야 할 것은 블록이 체인에 연결되는 순간 더이상 변경 불가능 하다. 그래서 동적타입이 아니라 정적타입으로 작성 해야하는 것이다.

Pragma line

// 코드 라인에 아쉽게도 Solidity style은 지원이 안 된다.

pragma solidity ^0.5.11;

contract MyContract {
    string public myString = "Hello, World!";
}

Python이나 Java와 같은 언어를 사용하다 보면, Python 2, Python 3과 같이 언어의 버전이 다른 경우가 있다. Solidity도 마찬가지로 계속해서 업그레이드 되기 때문에 언어의 버전이 다르다. 하지만 한 가지 차이점이 있다면, 이전 버전의 Solidity로 작성되고 이미 상용화된 프로그램은 Solidity의 버전을 업그레이드 할 수 없다. 앞서 살펴 봤듯이 프로그램이 체인에 연결되는 순간 변경이 불가능하기 때문이다. 이러한 점을 고려해 Solidity에서는 코드를 작성할 때 버전을 알 수 있도록 하기 위해서, 코드 제일 상단에 pragma line이라는 것을 적는 규칙이 존재한다.

SOLIDITY COMPILER

Pragma line을 통해 Solidity 버전을 설정했으면, Solidity compiler의 버전도 맞춰줘야 한다. 올바르게 설정 되었으면 Solidity compiler 탭이 초록색 체크 표시로 변경될 것이다.

DEPLOY & RUN TRANSACTIONS

Deploy & Run Transactions 탭에 가보면 아마 메타마스크를 연결하라고 창이 나타날 것이다. 연결한 뒤에는 Environment를 Injected Web3으로 변경한다. 네트워크는 메타마스크에서 설정한 네트워크로 변경되고, Ropsten network를 선택해놓았다.

첫 스마트 컨트랙트!

이제 Deploy를 누르면 Gas fee가 요청된 뒤, 첫 스마트 컨트랙트가 배포된다. 밑을 확인해보면 이러한 버튼이 있다.

myString을 눌러보면 console에 다음과 같은 문구가 출력된다.

드디어 Hello, World!를 불러냈다! 배포한 스마트 컨트랙트는 누구나 확인할 수 있고, myString이라는 변수도 마찬가지로 누구나 확인할 수 있다.

마치며

지금까지 일어난 일들을 정리해보자.

  1. Pragma line을 통해 Solidity 버전을 명시한다.
    • 스마트 컨트랙트는 배포 이후 수정이 불가능 하기 때문에, 작성된 Solidity의 버전을 알아야 한다.
    • 수정이 불가능한 이유는 스마트 컨트랙트도 하나의 블록으로써 체인에 연결되기 때문이다.
  2. Pragma line에 작성한 버전과 Solidity Compiler의 버전을 맞춰주고 컴파일한다.
  3. Deploy & Run Transactions에서 스마트 컨트랙트를 배포한다.
    • Gas fee가 요청되는 이유는 스마트 컨트랙트도 하나의 블록으로써 체인에 연결되기 때문이다.
    • 따라서 Gas fee를 지불할 지갑이 연결되어야 한다.

Reference

정적언어(타입)과 동적언어(타입), https://itmining.tistory.com/65

profile
일벌리기 좋아하는 사람

0개의 댓글