[Blockchan A-Z] 이더리움 가상 머신(Ethereum Virtual Machine, EVM)과 가스(Gas)

bolee·2022년 12월 4일
0

Blockchan A-Z

목록 보기
30/33

MODULE 3 - SMART CONTRACT INTUITION
04. ETHEREUM VIRTUAL MACHINE & GAS

2가지 주요 보안 위협과 이더리움 가상 머신(Ethereum Virutal Machine, 이하 EVM), 가스(Gas)의 보안과의 연관성에 대해 살펴볼 것이다.

스마트 컨트랙트에서 보안상의 위협

위와 같이 이더리움처럼 스마트 컨트랙트가 존재하는 블록체인이 존재한다고 할 때 각 노드들은 블록체인과 네트워크 그리고 스마트 컨트랙트과 데이터와 트랜잭션까지 모두 가지고 있다.

시스템이 커지면서 점점 더 복잡해지고 있는데, 뭔가 잘못될 기회가 점점 더 많아지기 때문에 복잡한 시스템에서는 잠제적인 보안상의 위협이 있다.

그렇다면 가장 명백한 보안 위협들은 무엇일까?

바로 첫 번째로 스마트 컨트랙트으로 부터 발생되는 보안 위협이다.
스마트 컨트랙트는 모든 노드와 네트워크의 모든 머신에서 실행하는데, 만약 누군가 바이러스는 스마트 컨트랙트라고 작성하고 블록체인에 보내 모든 컴퓨터가 복사본을 갖게 된다면 모든 컴퓨터가 바이러스에 감염된다.

또한 두 번째 보안 위협은 루프(Loop)이다.
누군가 고의나 실수로 무한 루프나 큰 루프를 포함하면 모든 노드에서의 계산 속도가 느려지고 네트워크 속도도 느려져서 사람들도 싫어하게 되기 때문이다.

이것들은 매우 치명적인 문제들을 야기할 수 있다.
이러한 문제는 어떻게 해결할까?

이더리움 가상 머신(Ethereum Vitural Machine, EVM)

먼저, 스마트 컨트랙트를 가장한 바이러스을 해결하기 위해 이더리움은 이더리움 가상머신(Ethereum Virtual Machine, EVM)을 도입하였다.

각 노드들은 네트워크에 참가할 때 EVM이라고 하는 이더리움 가상 머신을 얻는데 이를 통해 스마트 컨트랙트는 각 노드들의 컴퓨터에 있지만 컴퓨터 안에 컴퓨터가 있는 것과 같다.

다시 말해, 스마트 컨트랙트는 컴퓨터 안에 EVM이라는 가상 머신에 있고, 스마트 계약이나 머신에서 실행되는 모든 프로그램이 가상 머신 외부에 무엇이 있는지 모른다고 할 수 있다.
그래서 가상 머신에서 일어나는 일은 그 안에서만 일어나는 것이다.

따라서 뭔가 잘못되더라도 가상 머신 안에서만 잘못돼서 컴퓨터에서 가상 머신을 삭제하기만 하면 되며, 절대로 하드 드라이브나 머신에 있는 어떤 것에도 전파되지 않는다.
즉, 가상 머신은 격리되어 있기 때문에 스마트 계약이 절대로 개인 파일이나 컴퓨터에 있는 다른 것에 접근할 수 없다는 것이다.

따라서 안전하다는 확신이 있으며, EVM을 통해 바이러스와 프라이버시 문제를 해결한 것이다.

가스(Gas)

이제 두 번째로 무한 루프와 큰 계산에 대한 문제이다.
이것은 해결하기 어려운 문제이지만 이더리움은 가스(Gas)라는 개념을 추가하여 독창적으로 해결하였다.

가스은 블록체인에서 실행되는 모든 계산에 관한 것인데, 바로 스마트 컨트랙트 개발자와 스마트 컨트랙트은 가스라는 돈을 지불해야 하는 것이다.
이는 자동차를 움직이려면 기름이 필요한 것과 같다.

즉, 솔리디티(solidity)에서 코딩한 코드는 낮은 수준의 컴퓨터 코드로 변환되고 이후에 가격이 적용된다.
이를 통해 루프(Loop)에 관련된 문제를 해결할 수 있었는데, 바로 프로그램이 계산 측면에서 너무 크거나 무한 루프를 가진 경우 빠르게 가스가 소진되어 작동을 멈추게 되는 것이다.

이러한 가스는 여러 의미를 가지게 되는데,
첫 번째로 악의적인 코드를 실행한 사람은 돈이 부족할 것이고 해당 코드를 작성하면 페널티를 받는다는 뜻이다.
두 번째로는 빨리 멈추기 때문에 네트워크에는 문제가 없다는 뜻이다.
마지막으로 적은 비용을 만들기 위해 사람들이 좋은 코드, 효율적인 코드를 작성하도록 해준다.

가스(Gas)와 이더(Ether)

가스는 효율적인 프로그램을 실행할 수 있다는 측면에서 긍정적이다.

하지만 이더리움에는 이더(Ether)라는 암호화폐가 이미 존재하는데 왜 가스라는 것이 추가적으로 필요한 것일까?
그냥 이더로 지불하면 되지 않을까?

코드의 실행 비용을 이더로 사용하지 않는 이유는 이더의 가격이 늘 극도로 변동하기 때문이다.
따라서 프로그램 실행에 얼마의 비용이 드는지 예측하기 어렵게 된다.

하지만 가스로 코드 실행 비용을 책정한다면 가스와 이더 사이의 전환율만 설정하여 비용 예측을 쉽게 만들 수 있다.
또한 이더의 가격 변동에 따라 가스와 이더 간의 전환율을 조정하여 최대한 비슷한 실행 비용을 발생 시키도록 만들 수 있다.
이러한 가스와 이더 간의 전환 비율은 커뮤니티의 합의로 결정되며 중앙 권한이 없는 분산 시스템이다.


참고 자료

0개의 댓글