이더리움이란?
이더리움은 퍼블릭 블록체인 기반의 분산 컴퓨팅 플랫폼 이다.
응용 프로그램을 작성하고 이 글로벌 컴퓨터에서 실행할 수 있으며, 이 플랫폼은 중단 시간, 검열, 사기 또는 제 3자의 간섭없이 항상 실행되도록 보장한다. 이것 외에도, 이더리움 블록체인을 통해 중앙 권한없이 두 당사자간에 돈을 이체할 수 있다.
이러한 모든 컴퓨터는 서로 연결되어 있으며 이더리움 블록체인에 코드를 배포하면 코드가 네트워크의 모든 노드로 복제 된다.
블록체인의 2가지 구성요소
-
데이터베이스 : 네트워크의 모든 트랜잭션은 블록체인에 저장된다. 응용 프로그램을 배포하는 행위도 트랜잭션으로 간주된다. 이러한 모든 트랜잭션은 모두에게 공개되어 누구나 볼 수 있고, 확인할 수 있다. 이 데이터는 절대 조작할 수 없다. 유효하지 않은 데이터가 기록되지 않도록 이더리움은 작업증명(Proof of Work)이라는 알고리즘을 사용하여 네트워크를 보호한다.
-
코드 : 블록체인의 데이터베이스 요소는 트랜잭션을 저장한다. 이더리움 세계에서는 솔리디티(Solidity) 라는 언어로 논리/응용 프로그램 코드(스마트 계약)를 작성한다. 따라서, 이더리움 블록체인은 트랜잭션을 저장할 뿐 아니라 스마트 계약 코드를 저장하고 실행한다.
중요한 이더리움 관련 개념들
스마트 컨트랙트 (Smart Contracts)
계약의 실행을 컴퓨터가 자동으로 수행하는 것으로 당사자 간의 합의를 강화할 수 있다는 점이 장점이다. 일단 계약이 블록체인에 배포되면 이를 중지하거나 수정할 수 없다.
주소 (Addresses)
이더리움 블록체인에서 사용자의 신분증에 해당하는 것이다. 각 주소에는 해당 개인키가 있는데, 개인키는 사용자가 알고 있는 일종의 암호로 간주할 수 있다. 블록체인과 상호작용하려면 이 주소 + 개인키 쌍이 필요하다.
- 주소의 핵심사항
- 이더리움 주소는 공개되어 있으며 전 세계 누구와도 공유 가능하다.
- 개인키는 절대 다른 사람과 공유해서는 안된다.
- 주소 + 개인키는 그 어떤 데이터베이스에도 저장되지 않음, 사용자만이 이 정보를 통제 할 수 있다.
계정 (Account)
이더리움 주소와 개인키(사용자가 알고 있는 일종의 암호)의 조합을 계정(Account)이라고 한다. 이 계정은 이더 잔고를 보유하고 트랜잭션을 전송할 수 있다.
-
외부 소유 계정(EOA) : 공개 주소 + 개인키 조합 외부 소유 계정, 또는 외부 계정을 사용하면 다른 계정과 이더를 송수신하고, 스마트 컨트랙트에 트랜잭션을 보낼 수 있다.
-
컨트랙트 계정 : 상응하는 개인키 없음 스마트 컨트랙트를 블록체인에 배포할 때 생성되며 컨트랙트 계정 대신 컨트랙트(contract)로만 표시되기도 한다.
- 다른 계정과 이더를 송수신 할 수 있다. (EOA와 동일)
- 관련된 코드를 담고, EOA나 다른 컨트랙트의 호출을 받아 트랜잭션을 발생시킨다.
지갑(Wallets)
이더리움 계정을 저장하고 관리하는 데 사용되는 소프트웨어 플러그인 또는 라이브러리이다. 지갑을 통해 여러 계정을 관리, 트랜잭션에 서명, 잔고를 추적하는 등의 기능을 사용할 수 있다.
-
비결정적 지갑 : 임의의 개인키/공개키 쌍을 사용하는 지갑 개인키/공개키 쌍을 많이 생성할 수 있지만 각 키 쌍 간에는 상관 관계 없음
-
결정론적 지갑 : 모든 키가 시드(seed)라는 단일 시작 지점에서 파생 이 시드는 사용자가 다른 정보를 요구하지 않고, 지갑을 쉽게 백업하고 복원할 수 있게 해준다. 경우에 따라서 개인키를 모른 채 공개키를 생성할 수 있게 해준다.
가스 (Gas)
트랜잭션에 얼마나 많은 ‘단위 연산’이 포함되는지에 따라 트랜잭션을 위해 지불하는 이더의 양이 달라진다. 이러한 연산의 단위를 가스(Gas)라고 한다. ex) 단순한 2개의 숫자를 더하는 작업이라면 3개의 단위 연산, 곱셈이라면 5개의 단위 연산에 해당함
가스 가격 (Gas Price) : 실제로 채굴자에게 지불해야하는 이더의 양을 결정하는 요소 트랜잭션 생성자가 원하는 가스 가격을 설정할 수 있다. 설정한 가스 가격이 높을수록 트랜잭션이 더 빨리 처리된다. 가격이 낮게 책정해도 결국 트랜잭션이 블록에 포함되기는 하겠지만, 그 대기시간이 상당히 길어질 수 있다.
가스 한도 (Gas Limit) : 트랜잭션을 실행하기 위해 사용할 가스의 최대 금액을 나타내는 가스 한도를 지정할 수 있다.
가스 한도 (Gas Limit) != 블록 가스 한도 (Block Gas Limit) 블록 가스 한도는 이더리움의 각 블록에 적용되는 최대 캡, 현재 이더리움의 블록은 가스 총액이 800만 이내의 범위에서만 트랜잭션을 포함할 수 있다.
이더리움 가상 머신 (Ethereum Virtual Machine, EVM) : 트랜잭션의 동기화, 유효성 검사 및 실행
스마트 컨트랙트 코드는 대개 솔리디티(Solidity)와 같은 언어로 작성된다. 이는 이더리움 블록체인에 배포되는 EVM 바이트코드로 컴파일 된다. 이더리움의 런타임 환경은 바이트코드만을 이해하고 실행할 수 있는데, 이러한 설계의 이점은 개발자가 다른 프로그래밍 언어를 사용하여 스마트 컨트랙트(Smart Contract)를 구현할 수 있는 옵션을 제공한다는 것이다. geth, parity 등으로 이더리움 클라이언트를 설치하고 실행하면 EVM이 시작된다.