[스마트 컨트랙트] 이더리움

Words
342
Reading
2 min
Listen
Play
9y

슬라이드1.PNG

안녕하세요 tmkor입니다. 스마트 컨트랙트란 무엇일까요? 그리고 어떠한 일을 할 수 있을까요? 어떻게 작성해야 될까요? 다양한 질문에 대한 기술적인 해답을 찾아가는 과정, [스마트 컨트랙트] 입니다.

오늘은 이더리움에 대한 간략한 소개를 해보려 합니다.

이더리움

슬라이드6.PNG

이더리움은 스마트 컨트랙트에 특화된 블록체인입니다. 백서의 제목을 보면 이더리움이 추구하는 방향성을 볼 수 있습니다. 바로 "차세대 스마트 컨트랙트와 탈중앙화 앱 플랫폼"입니다.

  • 차세대라는 용어를 쓴 이유는 그들이 비트코인을 '구세대' 스마트 컨트랙트로 바라보았기 때문입니다.
  • 애플리케이션 플랫폼을 제공하겠다는 것은 그들이 사용하는 스마트 컨트랙트 언어의 제약이 적기 때문에 다양한 애플리케이션 개발이 가능하기 떄문입니다.
  • 탈중앙화가 가능한 이유는 P2P 환경에서 구동되는 제3자의 개입이 필요없는 신뢰 플랫폼에서 구동되기 때문입니다.

이더리움과 비트코인의 가장 큰 차이를 설명한 구절은 '튜링 완전 프로그래밍 언어가 심어진 블록체인'입니다. 튜링 완전한 프로그래밍 언어는 컴퓨터로 해결 가능한 모든 문제를 해결할 수 있습니다. C언어? 튜링완전입니다. Java? 튜링 완전이죠.

즉, 이더리움의 경우 일반적인 프로그래밍 언어로 할 수 있는 무수히 많은 작업을 블록체인에서 처리할 수 있다는 뜻이 됩니다. (성능은 예외로 합시다.)

블록체인에서 튜링완전 스마트 컨트랙트 구동의 문제점

튜링 완전 프로그래밍 언어로 작성된 스마트 컨트랙트 계약 프로그램은 블록체인 위에서 구동됩니다. 채굴을 하는 노드에서 실행되는 것이지요. 그리고 모든 노드에서 실행됩니다.

만약에 조금이라도 잘못된 프로그램이 구동된다면? 모든 노드가 멈출 수 있습니다.

네트워크의 신뢰성을 무너뜨려 이더리움의 폭락을 유도하기 위해 아래와 같은 코드를 만들 수도 있겠지요.

contract 무한반복 {
    function 멈춰라_모든_노드() {
        while(true) { 
            계산량이_큰_함수();
        }
    }
}

이더리움의 해결 전략 (GAS)

슬라이드7.PNG

이더리움의 해결책은 간단합니다. 코드 실행 라인마다 금전 비용을 부과하는 것입니다. 컴퓨팅 수수료를 내는 것 입니다. 트랜잭션 수수료의 경우 부족하면 늦게 처리되지만, 컴퓨팅 수수료의 경우 부족하면 멈춥니다. 값을 쓰는 코드는 비싼 가격을, 읽는 코드는 저렴한 가격을 책정하는 등 연산마다 다른 비용을 부과합니다.

또 한가지 걱정되는 문제점은 '데이터의 무결성(integrity)을 보장할 수 있는가?' 입니다. 이더리움 블록체인은 P2P 환경이죠. 서로 다른 노드끼리 통신을 주고받으면서 데이터를 공유합니다. 그리고 노드들은 세계 이곳저곳 분포되어 있고, 서버의 사양도 서로 다르고, 네트워크의 품질도 서로 다릅니다. 데이터가 전파되는데에 시간이 얼마 걸릴지 예측하기 어렵습니다. 결론적으로 스마트 컨트랙트에 기록한 데이터 값에 차이가 날 수 있습니다.

해결은 생각보단 쉬운데, 함수 내용과 입력을 블록체인에 기록하면 됩니다. LOL에서 리플레이를 저장해서 다시 보면 항상 같은 결과가 나오죠? 그것과 비슷합니다.

개발자가 작성한 스마트 컨트랙트 코드는 바이트코드(기계어)로 변환이 되어 트랜잭션에 포함됩니다. 그리고 이를 블록체인에 기록하는 것이죠.

그렇다면 이더리움 스마트 컨트랙트 코드는 어떻게 작성하고, 어떻게 사용자들이 실행시킬 수 있을까요?

[스마트 컨트랙트] 이더리움 | Ecency