[루디움 렉쳐] 솔리디티 베이직/솔리디티 오버뷰_Jihwan Park

Solidity 오버뷰

소개

Solidity는 이더리움 블록체인 위해서 스마트 컨트랙트를 작성하기 위해 사용되는 객체지향 프로그래밍 언어입니다.

 

Solidity 특징

Solidity는 다음과 같은 특성을 갖는다.

  • 스마트 컨트랙트 구현 : Solidity는 스마트 컨트랙트를 구현하기 위해 설계되었습니다.
  • 정적 타입 : Solidity는 정적 타입 언어로써 변수의 타입을 명시적으로 지정해야 합니다.
  • 객체 지향 : Solidity는 객체 지향 프로그래밍 패러다임을 지원합니다. 계약은 클래스와 유사한 개념이며, 계약 내에는 상태 변수와 함수가 포함됩니다.
  • 상속 지원 : Solidity는 계약 간 상속을 지원하여 코드의 재사용성을 높입니다.
  • 라이브러리 및 사용자 정의 데이터 타입 : 복잡한 데이터 구조를 정의하고 재사용 가능한 라이브러리를 만들 수 있다.

 

스마트 컨트랙트

스마트 컨트랙트는 Solidity 언어로 작성되어 이더리움 블록체인 상에서 실행되는 프로그램입니다. 스마트 컨트랙트는 블록체인 내부에 특정 주소에 존재하며 이 특정 주소에 존재하는 코드와 데이터의 집합체입니다.

이더리움에는 2가지의 계정이 있는데 EOA와 CA입니다. 스마트 컨트랙트는 CA라는 계정이며 잔액을 가지며 거래의 대상이 될 수 있습니다. EOA는 스마트 컨트랙트에 정의된 함수들을 실행하는 트랜잭션을 제출하여 스마트 컨트랙트와 상호작용 할 수 있습니다. 

요약하자면, 스마트 컨트랙트는 결국 2가지로 정의될 수 있습니다.

  1. 이더리움 블록체인에서 존재하며 호출되었을 때 실행되는 프로그램
  2. 이더리움의 계정

스마트 컨트랙트와 탈중앙성

스마트 컨트랙트가 탈중앙성에 있어서 어떻게 강력한 도구가 될 수 있는지 예시를 통해서 알아보자.

최근에 넥슨의 게임 중 메이플 스토리에서 확률성 아이템에 대한 확률 조작 논란이 휩싸인 적이 있었습니다. 넥슨 회사가 게임 아이템에 대한 소유권과 확률에 대한 정보를 넥슨 회사의 서버에서 관리를 했기에 발생이 되었습니다. 

만약, 게임 아이템에 대한 소유권과 확률 정보를 스마트 컨트랙트 형태로 이더리움 블록체인에 올라가게 된다면 중앙화가 아닌 탈중앙화가 되어 있어 게임회사 맘대로 확률 조작을 일어나지 못했을 것입니다. 

이처럼 스마트 컨트랙트는 이더리움에 있어서 탈중앙성을 제공하는 핵심적이 도구로 작동을 하고 이뿐만 아니라 금융, 게임, 컨슈머 앱등 다양한 분야에서 블록체인이 실제 서비스에 적용될 수 있게 하는 일등 공신입니다.

 

이더리움 가상 머신(EVM)

스마트 컨트랙트가 어떻게 이더리움 블록체인에서 작동하는지 이해하려면 EVM에 대한 이해가 필요합니다.

 

이더리움 가상머신은 스마트 컨트랙트를 실행시키기 위한 런타임 환경입니다. EVM은 스마트 컨트랙트의 바이트코드를 실행하고 이더리움의 네트워크 상태를 변화시킵니다. 이더리움 노드들은 EVM에서 스마트컨트랙트를 호출하여 스마트 컨트랙트를 실행시키고 이의 결과에 따라 이더리움 네트워크의 상태를 변화시키는 것입니다.

 

작동 원리

  • Solidity로 작성된 스마트 컨트랙트는 Solidity 컴파일러를 통해 Bytecode와 ABI로 변환됩니다.
  • EVM은 Bytecode로 변환된 스마트 컨트랙트의 조건이 만족되었을 경우 자동으로 실행시킵니다.
  • ABI는 스마트 컨트랙트와 상호작용을 하기 위한 표준 인터페이스입니다. 프론트엔드와 백엔드에서 ABI를 사용하여 스마트 컨트랙트와 상호작용하여 스마트 컨트랙트의 함수를 호출하거나 이벤트 수신 등을 수행할 수 있습니다.

Bytecode 예시

 

ABI 예시