검수요청.png검수요청.png

"이더리움 클라이언트"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(문제점과 대안)
(특징)
 
(사용자 3명의 중간 판 31개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 +
[[파일:이더리움재단 로고.png|썸네일|300픽셀|'''이더리움'''(Ethereum)]]
 +
[[파일:이더리움재단 글자.png|썸네일|300픽셀|'''이더리움재단과 글자''']]
 
'''이더리움 클라이언트'''(Ethereum Clients)는 [[이더리움]] 블록체인 네트워크를 구성하는 개별 클라이언트 [[노드]](node)이다. 이더리움은 중앙 집중형 서버 프로그램이 따로 존재하지 않는다. 오로지 클라이언트 프로그램만 존재한다. 이더리움 클라이언트는 멀티 플랫폼 환경을 지원하기 위해 다양한 프로그래밍 언어로 개발되고 있다.
 
'''이더리움 클라이언트'''(Ethereum Clients)는 [[이더리움]] 블록체인 네트워크를 구성하는 개별 클라이언트 [[노드]](node)이다. 이더리움은 중앙 집중형 서버 프로그램이 따로 존재하지 않는다. 오로지 클라이언트 프로그램만 존재한다. 이더리움 클라이언트는 멀티 플랫폼 환경을 지원하기 위해 다양한 프로그래밍 언어로 개발되고 있다.
  
5번째 줄: 7번째 줄:
  
 
==특징==
 
==특징==
이더리움 클라이언트는 이더리움 블록체인에 참여하는 노드이다. 즉 [[블록]]이 생성되면 그 정보를 전파 받는 역할을 하는 것이다. 따라서, 싱크된 블록체인 데이터를 가지고 있어야 하며 이더리움 클라이언트는 블록체인 네트워크의 노드이면서, 일반 사용자의 접속을 허용하고 블락체인과 연결시켜주는 역할도 담당한다. 그래서 일반 사용자는 이더리움 클라이언트, 즉 노드에 접속하여 [[geth]]와 같은 명령어로 블록체인 정보를 얻거나, 스마트 컨트랙트를 사용할 수 있다. 이더리움 클라이언트는 블록체인 데이터를 모두 가지고 있다. 한 사용자가 생성한 스마트 컨트랙트는 이더리움 클라이언트를 통해서 블록에 포함되고, 결국 블록체인으로 연결된다.<ref>〈[https://steemit.com/coinkorea/@etainclub/smart-contract-6-dapp 이더리움 스마트 컨트랙트 동작방식 종결자!!! DApp 개발 가즈아]〉, 《스팀잇》, 2017년도 </ref>이더리움 클라이언트 프로그램은 리모트 프로시더 콜(Remote Procedure Call) (RPC) 명령어 인터페이스를 [[자바스크립트]](Javascript)의 제이에스오엔(JSON)형태로 지원한다. 이것을 제이에스오엔 알피시 에이피아이([[JSON-RPC API]])라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다.
+
이더리움 클라이언트는 이더리움 [[블록체인]]에 참여하는 [[노드]]이다. 즉 [[블록]]이 생성되면 그 정보를 전파 받는 역할을 하는 것이다. 따라서, 싱크된 블록체인 데이터를 가지고 있어야 하며 이더리움 클라이언트는 블록체인 네트워크의 노드이면서, 일반 사용자의 접속을 허용하고 블락체인과 연결시켜주는 역할도 담당한다. 그래서 일반 사용자는 이더리움 클라이언트, 즉 노드에 접속하여 [[게스]](geth)와 같은 명령어로 블록체인 정보를 얻거나, 스마트 컨트랙트를 사용할 수 있다. 이더리움 클라이언트는 블록체인 데이터를 모두 가지고 있다. 한 사용자가 생성한 스마트 컨트랙트는 이더리움 클라이언트를 통해서 블록에 포함되고, 결국 블록체인으로 연결된다.<ref>〈[https://steemit.com/coinkorea/@etainclub/smart-contract-6-dapp 이더리움 스마트 컨트랙트 동작방식 종결자!!! DApp 개발 가즈아]〉, 《스팀잇》, 2017년도 </ref>이더리움 클라이언트 프로그램은 리모트 프로시더 콜(Remote Procedure Call) (RPC) 명령어 인터페이스를 [[자바스크립트]](Javascript)의 제이슨(JSON)형태로 지원한다. 이것을 제이에스오엔 알피시 에이피아이([[JSON-RPC API]])라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다.
  
===Geth===
+
===게스(Geth)===
 
[[파일:이더리움 블록체인 네트워크.png|썸네일|400픽셀|'''이더리움 블록체인 네트워크'''(Ethereum Blockchain Network)]]
 
[[파일:이더리움 블록체인 네트워크.png|썸네일|400픽셀|'''이더리움 블록체인 네트워크'''(Ethereum Blockchain Network)]]
  
[[Geth]]는 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로서, [[고]](Go) 언어로 개발되었다. Geth를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. Geth는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 RPC를 통해 상호작용할 수 있는 API를 노출하여 서버 역할을 하기도 한다. 블록체인에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있다.
+
[[게스]](geth)는 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로서, [[고]](Go) 언어로 개발되었다. 게스(Geth)를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. 게스(Geth)는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 알피시(RPC)를 통해 상호작용할 수 있는 에이피아이([[API]])를 노출하여 서버 역할을 하기도 한다. 블록체인에 연결할 수 있는 [[자바스크립트 클라이언트]](geth console)도 있다.
 +
 
 
===패리티(Parity)===
 
===패리티(Parity)===
 
[[파일:다양한 클라이언트가 서로 연결된 Etherum 네트워크.png|썸네일|400픽셀|다양한 클라이언트가 서로 연결된 '''이더리움 블록체인 네트워크'''(Ethereum Blockchain Network)]]
 
[[파일:다양한 클라이언트가 서로 연결된 Etherum 네트워크.png|썸네일|400픽셀|다양한 클라이언트가 서로 연결된 '''이더리움 블록체인 네트워크'''(Ethereum Blockchain Network)]]
16번째 줄: 19번째 줄:
  
 
==활용==
 
==활용==
화폐기능이 주가되었던 비트코인에 비해서 프로그래밍 가능한 스마트 콘트렉트[[Smart contract]]기능이 추가되어 다양한 디웹(DApp) 개발이 가능하다. geth는 이더리움의 모든 기능을 사용할수 있는 클라이언트로 설치는 [[바이너리]]를 사용하여 설치하는 방법과 소스를 빌드하여 설치하는 방법이 있다. 먼저 이더리움 geth는 [[Go 언어]]로 작성이 되었기 때문에 [[Go lang]]을 설치한다. Go lnag 설치가 완료되었으면 다음과 같이 소스를 다운로드 받은후에 빌드를 한다. 빌드가 완료되면 하기 디렉토리에 geth 실행화일이 생성되니 [[profile]] 에 해당 패스를 추가해주는것이 좋다. 이제 [[private net]]을 통해 실행 해준다. 먼저 계좌정보가 저장될 디렉토를 하나 생성하고(.data) 계좌를 하나 생성하도록 하겠다. 데이타가 저장될 디렉토리 ./data를 지정하고, [[genegis]] 블록정보가 포함되어있는 CustonGenesis.json 화일을 지정하여 [[제네시스]](genesis) 블록을 생성하면 private network 실행을 위한 준비가 완료된다.
+
화폐기능이 주가되었던 [[비트코인]]에 비해서 프로그래밍 가능한 [[스마트 콘트렉트]](Smart contract)기능이 추가되어 다양한 [[디앱]] 개발이 가능하다. 게스(geth)는 이더리움의 모든 기능을 사용할수 있는 클라이언트로 설치는 [[바이너리]]를 사용하여 설치하는 방법과 소스를 빌드하여 설치하는 방법이 있다. 먼저 이더리움 게스(geth)는 [[Go 언어]]로 작성이 되었기 때문에 [[Go lang]]을 설치한다. Go lnag 설치가 완료되었으면 다음과 같이 소스를 다운로드 받은후에 빌드를 한다. 빌드가 완료되면 하기 디렉토리에 게스(geth) 실행화일이 생성되니 [[profile]] 에 해당 패스를 추가해주는것이 좋다. 이제 [[private net]]을 통해 실행 해준다. 먼저 계좌정보가 저장될 디렉토를 하나 생성하고(.data) 계좌를 하나 생성하도록 하겠다. 데이타가 저장될 디렉토리 ./data를 지정하고, [[genegis]] 블록정보가 포함되어있는 [[커스턴 제네시스]](CustonGenesis.json) 화일을 지정하여 [[제네시스 블록]]생성하면 private network 실행을 위한 준비가 완료된다.
 
 
 
 
> miner.start()
 
 
 
INFO [04-02|22:55:39] Updated mining threads                  threads=0
 
 
 
INFO [04-02|22:55:39] Transaction pool price threshold updated price=18000000000
 
 
 
null
 
 
 
> INFO [04-02|22:55:39] Starting mining operation
 
 
 
INFO [04-02|22:55:39] Commit new mining work                  number=69 txs=0 uncles=0 elapsed=132.014µs
 
 
 
> INFO [04-02|22:55:39] Successfully sealed new block            number=69 hash=61e6ef…61a88f
 
 
 
INFO [04-02|22:55:39] 🔨 mined potential block                  number=69 hash=61e6ef…61a88f
 
 
 
INFO [04-02|22:55:39] Commit new mining work                  number=70 txs=0 uncles=0 elapsed=120.199µs
 
 
 
INFO [04-02|22:55:40] Successfully sealed new block            number=70 hash=81a7e6…a68b62
 
 
 
INFO [04-02|22:55:40] 🔨 mined potential block                  number=70 hash=81a7e6…a68b62
 
 
 
INFO [04-02|22:55:40] Commit new mining work                  number=71 txs=0 uncles=0 elapsed=72.851µs
 
 
 
> miner.start()
 
 
 
INFO [04-02|22:55:39] Updated mining threads                  threads=0
 
 
 
INFO [04-02|22:55:39] Transaction pool price threshold updated price=18000000000
 
 
 
null
 
  
> INFO [04-02|22:55:39] Starting mining operation
+
이더리움 클라이언트 프로그램은 Remote Procedure Call ([[RPC]]) 명령어 인터페이스를 [[자바스크립트]](Javascript)의 제이슨([[JSON]])형태로 지원한다. 이것을 제이슨 알피시 에이피아이(JSON-RPC API)라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다.
  
INFO [04-02|22:55:39] Commit new mining work                  number=69 txs=0 uncles=0 elapsed=132.014µs
 
  
> INFO [04-02|22:55:39] Successfully sealed new block            number=69 hash=61e6ef…61a88f
+
$ curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'\
 
 
INFO [04-02|22:55:39] 🔨 mined potential block                  number=69 hash=61e6ef…61a88f
 
 
 
INFO [04-02|22:55:39] Commit new mining work                  number=70 txs=0 uncles=0 elapsed=120.199µs
 
 
 
INFO [04-02|22:55:40] Successfully sealed new block            number=70 hash=81a7e6…a68b62
 
 
 
INFO [04-02|22:55:40] 🔨 mined potential block                  number=70 hash=81a7e6…a68b62
 
 
 
INFO [04-02|22:55:40] Commit new mining work                  number=71 txs=0 uncles=0 elapsed=72.851µs
 
 
 
[[채굴]]이 진행 중일때 계좌의 잔액을 조회해보면 다음과같이 증가함을 볼수 있으며, 하기는 잔액단위를 디폴트 [[웨이]](wei)에서 [[이더]](ether)로 변경하여 출력하고 있다. 채굴을 중지하고자 할 때는 miner.stop()을 실행하면 된다.<ref >니르바나 작가-〈[https://ihpark92.tistory.com/29 이더리움 클라이언트 설치하기〉,《티스토리》, 2018년도</ref>
 
 
 
 
 
 
 
이더리움 클라이언트 프로그램은 Remote Procedure Call ([[RPC]]) 명령어 인터페이스를 [[Javascript]]의 [[JSON]]형태로 지원한다. 이것을 JSON-RPC API라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다.
 
 
 
 
 
$ curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' \
 
 
http://localhost:8545
 
http://localhost:8545
 
 
위 예는 JSON-RPC API를 이용하여 클라이언트 포로그램의 버전을 얻어오는 명령이다. 위 명령의 결과는 JSON 형태로 다음과 같이 얻어진다. 이 경우 클라이언트 프로그램은 go.1.8.3인 것을 알 수 있다.
 
 
  
 
{"jsonrpc":"2.0","id":1,
 
{"jsonrpc":"2.0","id":1,
86번째 줄: 32번째 줄:
  
  
또, 현재 gas의 가격을 얻는 명령은 아래와 같이 입력한다.
+
위 예는 제이슨 알피시 에이피아이(JSON-RPC API)를 이용하여 클라이언트 포로그램의 버전을 얻어오는 명령이다. 위 명령의 결과는 제이슨(JSON) 형태로 다음과 같이 얻어진다. 이 경우 클라이언트 프로그램은 go.1.8.3인 것을 알 수 있다.
 +
 
 +
또, 현재 [[가스]] 의 가격을 얻는 명령은 아래와 같이 입력한다.
  
  
 
$ curl -X POST -H "Content-Type: application/json" --data \
 
$ curl -X POST -H "Content-Type: application/json" --data \
  
'{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":4213}' \
+
'{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":4213}' \http://localhost:8545
  
http://localhost:8545
 
  
위 명령의 결과를 보면 gas 가격이 "0x430e23400"임을 알 수 있다. 이것은 gas 가격이 18 giga wei라는 것을 의미한다.
+
{"jsonrpc":"2.0","id":4213,"result":"0x430e23400"}
  
{"jsonrpc":"2.0","id":4213,"result":"0x430e23400"}<ref >마스터링 이더리움,〈[https://busy.org/@etainclub/7efgbo-3 [마스터링 이더리움]3장 이더리움 클라이언트〉,《비지배타》, 2019-06-26</ref>
+
위 명령의 결과를 보면 가스 가격이 "0x430e23400"임을 알 수 있다. 이것은 가스 가격이 18기가 [[웨이]](18 giga wei)라는 것을 의미한다.<ref >마스터링 이더리움,〈[https://busy.org/@etainclub/7efgbo-3 [마스터링 이더리움]3장 이더리움 클라이언트〉,《비지배타》, 2019-06-26</ref>
  
 
==문제점과 대안==
 
==문제점과 대안==
104번째 줄: 51번째 줄:
  
 
===대안의견===
 
===대안의견===
* 블록에 트랜잭션이 존재한다는 것은 네트워크가 블록과 모든 트랜잭션을 제 때 처리할 수 있었다는 신호이다. 네트워크의 각 노드는 블록과 트랜잭션이 처리하는 데 걸린 시간에 대한 "투표"를 받는다. 실제로 트랜잭션이 할당 시간을 초과했다고 생각하면 [[노드]]는 블록을 [[중계]](relay)할 필요가 없다. 보상 받기를 원하는 블록 제작자는 자신의 블록이 전파되고 다른 노드가 가질 벽 시계 추정치에서 "보수적인"것이되도록 할 것이다. 네트워크는 포함 된 트랜잭션의 수에 비례하여 블록 보상을 조정해야한다.
+
* 블록에 트랜잭션이 존재한다는 것은 네트워크가 블록과 모든 트랜잭션을 제 때 처리할 수 있었다는 신호이다. 네트워크의 각 노드는 블록과 트랜잭션이 처리하는 데 걸린 시간에 대한 "투표"를 받는다. 실제로 트랜잭션이 할당 시간을 초과했다고 생각하면 [[노드]]는 블록을 [[중계]](relay)할 필요가 없다. 보상 받기를 원하는 블록 제작자는 자신의 블록이 전파되고 다른 노드가 가질 벽시계 추정치에서 "보수적인" 것이 되도록 할 것이다. 네트워크는 포함 된 트랜잭션의 수에 비례하여 블록 보상을 조정해야 한다.
  
* 스크립트의 문제점 중 하나는 공격자가 [[무한 루프]]를 생성하는 데 드는 비용이 들지 않는다는 것이다. 최종 결론은 스크립트를 거부하는 경우에도 노드 유효성 검사는 [[리소스]]를 소비하게된다. 이 경우 유효성 검사기는 소비 한 리소스에 대해 대가를받지 않는다. 작업 증명을 사용하여 유효성 검사기가 스크립트 제작자가 최소한의 노력을 소비했음을 알 수 있다. 작업이 많을수록 유효성 검사기가 스크립트가 최대 한도까지 실행할 수있는 "벽시계"시간이 길어진다. 계산 비용이 많이 드는 트랜잭션을 전파하려는 사람은 비용이 적게 드는 트랜잭션을 생성하는 사람보다 더 어려운 작업 증명을 생성해야한다. 이 작업 증명과 TaPoS (지분 증명으로서의 거래)가 결합 됨으로써 우리는 전체 네트워크를 공동으로 보호하는 작업 증명으로서의 트랜잭션을 갖게되었다. 이 접근법은 증인이 "자신의 블록을 채워서" 돈을 받는 것을 막는 부수적인 효과가 있다. 왜냐하면 그들이 생성하는 각각의 거래에는 작업 증명이 필요하기 때문이다. 따라서 블록체인은 스크립트 실행의 어려움에 대한 객관적 프록시로서 작업 증명의 어려움을 토대로 트랜잭션에 대한 증인에게 보상할 수 있다.<ref>마 작가〈[https://steemit.com/kr/@maa/3qwkmu 이더리움 스마트컨트랙트의 한계와 스팀의 앞으로의 발전 가능성〉,《스팀잇》2017-05-19</ref>
+
* 스크립트의 문제점 중 하나는 공격자가 [[무한 루프]]를 생성하는 데 드는 비용이 들지 않는다는 것이다. 최종 결론은 스크립트를 거부하는 경우에도 노드 유효성 검사는 [[리소스]]를 소비하게된다. 이 경우 유효성 검사기는 소비 한 리소스에 대해 대가를받지 않는다. 작업 증명을 사용하여 유효성 검사기가 스크립트 제작자가 최소한의 노력을 소비했음을 알 수 있다. 작업이 많을수록 유효성 검사기가 스크립트가 최대 한도까지 실행할 수있는 "벽시계"시간이 길어진다. 계산 비용이 많이 드는 [[트랜잭션]]을 전파하려는 사람은 비용이 적게 드는 트랜잭션을 생성하는 사람보다 더 어려운 작업 증명을 생성해야한다. 이 [[작업 증명]]과 [[TaPoS]] (지분 증명으로서의 거래)가 결합 됨으로써 우리는 전체 네트워크를 공동으로 보호하는 작업 증명으로서의 트랜잭션을 갖게되었다. 이 접근법은 증인이 "자신의 블록을 채워서" 돈을 받는 것을 막는 부수적인 효과가 있다. 왜냐하면 그들이 생성하는 각각의 거래에는 작업 증명이 필요하기 때문이다. 따라서 블록체인은 스크립트 실행의 어려움에 대한 객관적 [[프록시]]로서 작업 증명의 어려움을 토대로 트랜잭션에 대한 증인에게 보상할 수 있다.<ref>마 작가〈[https://steemit.com/kr/@maa/3qwkmu 이더리움 스마트컨트랙트의 한계와 스팀의 앞으로의 발전 가능성〉,《스팀잇》2017-05-19</ref>
  
 
==전망==
 
==전망==
 
===확장성 개선===
 
===확장성 개선===
이더리움은 향후 대용량 데이터 처리를 위해 데이터 전송 속도를 높이고 비용은 낮추는 방향으로 나갈 것이다. 확장성 솔루션인 샤딩 기술, 캐스터, 레이든, 그리고 플라즈마, 플라즈마캐시와 같은 신기술 개발과 보안성 강화 등이 이더리움의 미래 도전 과제들이다.
+
이더리움은 향후 대용량 데이터 처리를 위해 데이터 전송 속도를 높이고 비용은 낮추는 방향으로 나갈 것이다. 확장성 솔루션인 [[샤딩]] 기술, [[캐스터]], [[레이든]], 그리고 [[플라즈마]], [[플라즈마캐시]]와 같은 신기술 개발과 보안성 강화 등이 이더리움의 미래 도전 과제들이다.
  
이더리움의 느린 처리 속도 문제를 해결하기 위해 이더리움은 플라즈마 프로젝트를 가동 중이다. 플라즈마 프로젝트는 이더리움 플랫폼에 담기는 데이터를 줄이는 방식으로, 전체 네트워크 속도를 높여 블록체인 내 개별 노드에 걸리는 부하를 줄이고 연결 수수료는 낮추는 것이 목표이다. 플라즈마(plasma)란 모든 거래내역을 메인체인에서 처리하는 블록체인과 달리, 메인체인(또는 루트체인)에 나뭇가지처럼 이어진 차일드체인에서 사전에 수집된 정보들을 처리한 후 결과만 루트체인에 전달함으로써 처리 속도를 향상시킨 알고리즘이다. 이와 함께 비탈릭 부테린은 플라즈마캐시 기술도 연구하고 있다. 플라즈마캐시(plasma cash)란 모든 사용자가 모든 거래내역을 복사하여 관리하던 기존의 블록체인이나 플라즈마 알고리즘과 달리, 개별 사용자가 관심을 가진 특정 코인이 포함된 블록만 추적함으로써 처리 속도를 향상시킨 알고리즘이다. 이더리움에 플라즈마와 플라즈마캐시 알고리즘을 성공적으로 적용할 경우, 기존 이더리움의 문제점이었던 느린 처리 속도를 해결할 수 있을 것이다.
+
이더리움의 느린 처리 속도 문제를 해결하기 위해 이더리움은 [[플라즈마]] 프로젝트를 가동 중이다. 플라즈마 프로젝트는 이더리움 플랫폼에 담기는 데이터를 줄이는 방식으로, 전체 네트워크 속도를 높여 블록체인 내 개별 노드에 걸리는 부하를 줄이고 연결 수수료는 낮추는 것이 목표이다. 플라즈마(plasma)란 모든 거래내역을 메인체인에서 처리하는 블록체인과 달리, 메인체인(또는 루트체인)에 나뭇가지처럼 이어진 차일드체인에서 사전에 수집된 정보들을 처리한 후 결과만 루트체인에 전달함으로써 처리 속도를 향상시킨 [[알고리즘]]이다. 이와 함께 [[비탈릭 부테린]]은 플라즈마캐시 기술도 연구하고 있다. 플라즈마캐시(plasma cash)란 모든 사용자가 모든 거래내역을 복사하여 관리하던 기존의 [[블록체인]]이나 플라즈마 알고리즘과 달리, 개별 사용자가 관심을 가진 특정 코인이 포함된 [[블록]]만 추적함으로써 처리 속도를 향상시킨 알고리즘이다. 이더리움에 플라즈마와 플라즈마캐시 알고리즘을 성공적으로 적용할 경우, 기존 이더리움의 문제점이었던 느린 처리 속도를 해결할 수 있을 것이다.
  
 
한편 처리 용량을 확장시키기 위해 이더리움은 샤딩(sharding) 기술에 주목하고 있다. 샤딩은 병렬처리를 통해 블록체인에 확장성을 부여하는 온체인(on-chain) 솔루션이다. 샤딩은 대용량의 데이터를 처리하기 위해 테이블을 영역별로 수평 분할하여 데이터를 분산 저장하고 처리하는 방식이다. 기존 블록체인 기술은 트랜잭션을 나눠서 처리하지 않고 모든 연산을 실행하는 직렬 처리 방식으로서 처리 속도가 느렸다. 샤딩은 이더리움 노드가 처리하는 데이터를 분할하여 속도를 끌어올리는 것이다. 샤딩을 통해 초당 처리 가능한 거래의 양을 극대화할 수 있다.
 
한편 처리 용량을 확장시키기 위해 이더리움은 샤딩(sharding) 기술에 주목하고 있다. 샤딩은 병렬처리를 통해 블록체인에 확장성을 부여하는 온체인(on-chain) 솔루션이다. 샤딩은 대용량의 데이터를 처리하기 위해 테이블을 영역별로 수평 분할하여 데이터를 분산 저장하고 처리하는 방식이다. 기존 블록체인 기술은 트랜잭션을 나눠서 처리하지 않고 모든 연산을 실행하는 직렬 처리 방식으로서 처리 속도가 느렸다. 샤딩은 이더리움 노드가 처리하는 데이터를 분할하여 속도를 끌어올리는 것이다. 샤딩을 통해 초당 처리 가능한 거래의 양을 극대화할 수 있다.
121번째 줄: 68번째 줄:
  
 
===콘스탄티노플 하드포크===
 
===콘스탄티노플 하드포크===
2019년 3월 1일 이더리움은 콘스탄티노플 하드포크(Constantinople Hardfork)를 성공했다. 콘스탄티노플은 이더리움의 세번째 개발 단계의 마지막 하드포크로서, 이더리움 네트워크 내에서 채굴 보상을 감소시켜 작업증명(PoW) 방식의 비중을 줄이고 지분증명(PoS) 방식으로 변경하는 것을 목적으로 한다. 이더리움 측은 2018년 10월 말 롭스텐 테스트넷(ropsten testnet)에서 발견된 버그들로 인하여 콘스탄티노플 하드포크를 1차 연기하였다. 이후 2019년 1월 16일경 이더리움 7,080,000번째 블록에서 콘스탄티노플 하드포크를 예정하였으나 이번에도 역시 기술적 문제로 인해 2차 연기되었다.[11] 2018년 말과 2019년 초 기준으로 이더리움 가격이 너무 많이 떨어져 있는 상황이라, 만약 이러한 하드포크 개발 이슈를 지연한다면 이더리움은 암호화폐 시장에서 영원히 도태될 수 있을 것이라는 위기감을 개발자들이 가지고 있었다. 그럼에도 불구하고, 이더리움 측은 블록체인 보안업체인 체인시큐리티(ChainSecurity)가 발견한 결함 문제를 선제적으로 해결하기 위해 1월 16일로 예정된 하드포크 일정을 연기했다. 마침내 2019년 3월 1일 이더리움 측은 약속한 콘스탄티노플 하드포크에 성공하였다.
+
2019년 3월 1일 이더리움은 [[콘스탄티노플 하드포크]](Constantinople Hardfork)를 성공했다. 콘스탄티노플은 이더리움의 세번째 개발 단계의 마지막 하드포크로서, 이더리움 네트워크 내에서 [[채굴]] 보상을 감소시켜 [[작업증명]](PoW) 방식의 비중을 줄이고 [[지분증명]](PoS) 방식으로 변경하는 것을 목적으로 한다. 이더리움 측은 2018년 10월 말 롭스텐 테스트넷(ropsten testnet)에서 발견된 버그들로 인하여 콘스탄티노플 하드포크를 1차 연기하였다. 이후 2019년 1월 16일경 이더리움 7,080,000번째 블록에서 콘스탄티노플 [[하드포크]]를 예정하였으나 이번에도 역시 기술적 문제로 인해 2차 연기되었다. 2018년 말과 2019년 초 기준으로 이더리움 가격이 너무 많이 떨어져 있는 상황이라, 만약 이러한 하드포크 개발 이슈를 지연한다면 이더리움은 암호화폐 시장에서 영원히 도태될 수 있을 것이라는 위기감을 개발자들이 가지고 있었다. 그럼에도 불구하고, 이더리움 측은 블록체인 보안업체인 [[체인시큐리티]](ChainSecurity)가 발견한 결함 문제를 선제적으로 해결하기 위해 1월 16일로 예정된 하드포크 일정을 연기했다. 마침내 2019년 3월 1일 이더리움 측은 약속한 콘스탄티노플 하드포크에 성공하였다.
  
 
{{각주}}
 
{{각주}}
130번째 줄: 77번째 줄:
  
 
== 같이 보기 ==
 
== 같이 보기 ==
* [[geth]]
+
* [[게스]]
 +
* [[패리티]]
 +
* [[이더리움]]
 +
* [[블록체인]]
 +
* [[스팀]]
 +
* [[가스]]
  
 
{{블록체인 기술|검토 필요}}
 
{{블록체인 기술|검토 필요}}

2019년 8월 7일 (수) 09:21 기준 최신판

이더리움(Ethereum)
이더리움재단과 글자

이더리움 클라이언트(Ethereum Clients)는 이더리움 블록체인 네트워크를 구성하는 개별 클라이언트 노드(node)이다. 이더리움은 중앙 집중형 서버 프로그램이 따로 존재하지 않는다. 오로지 클라이언트 프로그램만 존재한다. 이더리움 클라이언트는 멀티 플랫폼 환경을 지원하기 위해 다양한 프로그래밍 언어로 개발되고 있다.

개요[편집]

이더리움 사양을 구현하고 다른 이더리움 클라이언트와 P2P 네트워크를 통해 통신하는 소프트웨어 응용 프로그램으로 서로 다른 클라이언트가 다른 팀과 다른 프로그래밍 언어로 구현되는 동안 이들은 모두 동일한 프로토콜을 따른다. 따라서 모두 동일한 이더리움 네트워크를 운영하고 상호작용하는데 사용될 수 있다. 이더리움은 오픈 소스 프로젝트이며 모든 주요 고객을 위한 소스코드는 오픈 소스 라이센스에서 무료로 사용할 수 있다. 이더리움은 일반적으로 다른 블록체인보다 네트워크에서 실행되는 구현의 다양성이 더 크다.[1]

특징[편집]

이더리움 클라이언트는 이더리움 블록체인에 참여하는 노드이다. 즉 블록이 생성되면 그 정보를 전파 받는 역할을 하는 것이다. 따라서, 싱크된 블록체인 데이터를 가지고 있어야 하며 이더리움 클라이언트는 블록체인 네트워크의 노드이면서, 일반 사용자의 접속을 허용하고 블락체인과 연결시켜주는 역할도 담당한다. 그래서 일반 사용자는 이더리움 클라이언트, 즉 노드에 접속하여 게스(geth)와 같은 명령어로 블록체인 정보를 얻거나, 스마트 컨트랙트를 사용할 수 있다. 이더리움 클라이언트는 블록체인 데이터를 모두 가지고 있다. 한 사용자가 생성한 스마트 컨트랙트는 이더리움 클라이언트를 통해서 블록에 포함되고, 결국 블록체인으로 연결된다.[2]이더리움 클라이언트 프로그램은 리모트 프로시더 콜(Remote Procedure Call) (RPC) 명령어 인터페이스를 자바스크립트(Javascript)의 제이슨(JSON)형태로 지원한다. 이것을 제이에스오엔 알피시 에이피아이(JSON-RPC API)라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다.

게스(Geth)[편집]

이더리움 블록체인 네트워크(Ethereum Blockchain Network)

게스(geth)는 이더리움 재단(Ethereum Foundation)이 제공하는 공식 클라이언트 소프트웨어로서, (Go) 언어로 개발되었다. 게스(Geth)를 처음 시작하면 네트워크 내의 다른 이더리움 클라이언트(노드node라고도 불림)에 연결하는 작업을 먼저 시작하고 블록체인의 전체 사본을 내려받게 된다. 게스(Geth)는 블록체인의 복사본을 최신 상태로 유지하기 위해 끊임없이 다른 노드와 통신한다. 또한 블록을 채굴하고, 블록체인에 트랜잭션을 추가하고 블록의 트랜잭션을 검증하며 트랜잭션을 실행할 수도 있다. 그리고 알피시(RPC)를 통해 상호작용할 수 있는 에이피아이(API)를 노출하여 서버 역할을 하기도 한다. 블록체인에 연결할 수 있는 자바스크립트 클라이언트(geth console)도 있다.

패리티(Parity)[편집]

다양한 클라이언트가 서로 연결된 이더리움 블록체인 네트워크(Ethereum Blockchain Network)

패리티(Parity)는 이더리움 프로토콜의 또 다른 구현체이며, 러스트(Rust) 프로그래밍 언어로 개발되었다. 현재 Parity Inc. 라는 기업에서 운영하고 있으며 사실 이더리움 네트워크에 접속할 수 있는 클라이언트 소프트웨어를 개발하는 길은 누구에게나 열려 있다. C++, 파이썬 및 다른 언어로 작성된 클라이언트도 있다. 원한다면 이더리움 황서의 사양을 따라 자신의 클라이언트를 구현할 수 있다.[3]

활용[편집]

화폐기능이 주가되었던 비트코인에 비해서 프로그래밍 가능한 스마트 콘트렉트(Smart contract)기능이 추가되어 다양한 디앱 개발이 가능하다. 게스(geth)는 이더리움의 모든 기능을 사용할수 있는 클라이언트로 설치는 바이너리를 사용하여 설치하는 방법과 소스를 빌드하여 설치하는 방법이 있다. 먼저 이더리움 게스(geth)는 Go 언어로 작성이 되었기 때문에 Go lang을 설치한다. Go lnag 설치가 완료되었으면 다음과 같이 소스를 다운로드 받은후에 빌드를 한다. 빌드가 완료되면 하기 디렉토리에 게스(geth) 실행화일이 생성되니 profile 에 해당 패스를 추가해주는것이 좋다. 이제 private net을 통해 실행 해준다. 먼저 계좌정보가 저장될 디렉토를 하나 생성하고(.data) 계좌를 하나 생성하도록 하겠다. 데이타가 저장될 디렉토리 ./data를 지정하고, genegis 블록정보가 포함되어있는 커스턴 제네시스(CustonGenesis.json) 화일을 지정하여 제네시스 블록을 생성하면 private network 실행을 위한 준비가 완료된다.

이더리움 클라이언트 프로그램은 Remote Procedure Call (RPC) 명령어 인터페이스를 자바스크립트(Javascript)의 제이슨(JSON)형태로 지원한다. 이것을 제이슨 알피시 에이피아이(JSON-RPC API)라고 하는데, 이것을 이용해서 블록체인의 정보를 얻거나 거래를 생성하는 명령을 원격으로 할 수 있다.


$ curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}'\ http://localhost:8545

{"jsonrpc":"2.0","id":1,

"result":"Geth/v1.8.0-unstable-02aeb3d7/linux-amd64/go1.8.3"}


위 예는 제이슨 알피시 에이피아이(JSON-RPC API)를 이용하여 클라이언트 포로그램의 버전을 얻어오는 명령이다. 위 명령의 결과는 제이슨(JSON) 형태로 다음과 같이 얻어진다. 이 경우 클라이언트 프로그램은 go.1.8.3인 것을 알 수 있다.

또, 현재 가스 의 가격을 얻는 명령은 아래와 같이 입력한다.


$ curl -X POST -H "Content-Type: application/json" --data \

'{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":4213}' \http://localhost:8545


{"jsonrpc":"2.0","id":4213,"result":"0x430e23400"}

위 명령의 결과를 보면 가스 가격이 "0x430e23400"임을 알 수 있다. 이것은 가스 가격이 18기가 웨이(18 giga wei)라는 것을 의미한다.[4]

문제점과 대안[편집]

서비스 처리시간과 서비스 거부[편집]

2016 년 2 월의 성능 분석에 따르면 Parity 이더리움 클라이언트는 6 개월 분의 트랜잭션 (1 백만 블록)을 처리하는 데 한시간 이상 걸렸다. 모든 1백만 블록은 이더리움 네트워크에 대한 최근의 서비스 거부 공격 이전에 있었다. 이러한 사실에 비교해서 볼만한 자료가 있다. 이더리움보다 훨씬 더 높은 평균 처리 속도로 600만 스팀 블록을 처리하는 데에는 단 몇 분밖에 걸리지 않는다. 이는 처리 속도가 20 배이상 차이가 나는 것을 나타낸다. 단일 CPU 스레드가상 기계(virtual machine)를 처리 할 수있는 속도는 네트워크의 잠재적 트랜잭션 처리량에 직접 영향을 준다. 현재 이더리움 네트워크는 초당 20건이 약간 넘는 트랜잭션을 처리 할 수 있다. 반면, 스팀은 초당 1000 회의 트랜잭션을 유지할 수 있다. 이더리움에 대한 최근의 공격으로 네트워크가 완전히 포화되고 다른 사람에게 서비스를 제공하는 것이 거부 됬었다. 반면에 스팀은 수수료 없이 서비스를 방해받지 않고 공격에서 살아남았다.

대안의견[편집]

  • 블록에 트랜잭션이 존재한다는 것은 네트워크가 블록과 모든 트랜잭션을 제 때 처리할 수 있었다는 신호이다. 네트워크의 각 노드는 블록과 트랜잭션이 처리하는 데 걸린 시간에 대한 "투표"를 받는다. 실제로 트랜잭션이 할당 시간을 초과했다고 생각하면 노드는 블록을 중계(relay)할 필요가 없다. 보상 받기를 원하는 블록 제작자는 자신의 블록이 전파되고 다른 노드가 가질 벽시계 추정치에서 "보수적인" 것이 되도록 할 것이다. 네트워크는 포함 된 트랜잭션의 수에 비례하여 블록 보상을 조정해야 한다.
  • 스크립트의 문제점 중 하나는 공격자가 무한 루프를 생성하는 데 드는 비용이 들지 않는다는 것이다. 최종 결론은 스크립트를 거부하는 경우에도 노드 유효성 검사는 리소스를 소비하게된다. 이 경우 유효성 검사기는 소비 한 리소스에 대해 대가를받지 않는다. 작업 증명을 사용하여 유효성 검사기가 스크립트 제작자가 최소한의 노력을 소비했음을 알 수 있다. 작업이 많을수록 유효성 검사기가 스크립트가 최대 한도까지 실행할 수있는 "벽시계"시간이 길어진다. 계산 비용이 많이 드는 트랜잭션을 전파하려는 사람은 비용이 적게 드는 트랜잭션을 생성하는 사람보다 더 어려운 작업 증명을 생성해야한다. 이 작업 증명TaPoS (지분 증명으로서의 거래)가 결합 됨으로써 우리는 전체 네트워크를 공동으로 보호하는 작업 증명으로서의 트랜잭션을 갖게되었다. 이 접근법은 증인이 "자신의 블록을 채워서" 돈을 받는 것을 막는 부수적인 효과가 있다. 왜냐하면 그들이 생성하는 각각의 거래에는 작업 증명이 필요하기 때문이다. 따라서 블록체인은 스크립트 실행의 어려움에 대한 객관적 프록시로서 작업 증명의 어려움을 토대로 트랜잭션에 대한 증인에게 보상할 수 있다.[5]

전망[편집]

확장성 개선[편집]

이더리움은 향후 대용량 데이터 처리를 위해 데이터 전송 속도를 높이고 비용은 낮추는 방향으로 나갈 것이다. 확장성 솔루션인 샤딩 기술, 캐스터, 레이든, 그리고 플라즈마, 플라즈마캐시와 같은 신기술 개발과 보안성 강화 등이 이더리움의 미래 도전 과제들이다.

이더리움의 느린 처리 속도 문제를 해결하기 위해 이더리움은 플라즈마 프로젝트를 가동 중이다. 플라즈마 프로젝트는 이더리움 플랫폼에 담기는 데이터를 줄이는 방식으로, 전체 네트워크 속도를 높여 블록체인 내 개별 노드에 걸리는 부하를 줄이고 연결 수수료는 낮추는 것이 목표이다. 플라즈마(plasma)란 모든 거래내역을 메인체인에서 처리하는 블록체인과 달리, 메인체인(또는 루트체인)에 나뭇가지처럼 이어진 차일드체인에서 사전에 수집된 정보들을 처리한 후 결과만 루트체인에 전달함으로써 처리 속도를 향상시킨 알고리즘이다. 이와 함께 비탈릭 부테린은 플라즈마캐시 기술도 연구하고 있다. 플라즈마캐시(plasma cash)란 모든 사용자가 모든 거래내역을 복사하여 관리하던 기존의 블록체인이나 플라즈마 알고리즘과 달리, 개별 사용자가 관심을 가진 특정 코인이 포함된 블록만 추적함으로써 처리 속도를 향상시킨 알고리즘이다. 이더리움에 플라즈마와 플라즈마캐시 알고리즘을 성공적으로 적용할 경우, 기존 이더리움의 문제점이었던 느린 처리 속도를 해결할 수 있을 것이다.

한편 처리 용량을 확장시키기 위해 이더리움은 샤딩(sharding) 기술에 주목하고 있다. 샤딩은 병렬처리를 통해 블록체인에 확장성을 부여하는 온체인(on-chain) 솔루션이다. 샤딩은 대용량의 데이터를 처리하기 위해 테이블을 영역별로 수평 분할하여 데이터를 분산 저장하고 처리하는 방식이다. 기존 블록체인 기술은 트랜잭션을 나눠서 처리하지 않고 모든 연산을 실행하는 직렬 처리 방식으로서 처리 속도가 느렸다. 샤딩은 이더리움 노드가 처리하는 데이터를 분할하여 속도를 끌어올리는 것이다. 샤딩을 통해 초당 처리 가능한 거래의 양을 극대화할 수 있다.

이더리움은 보안성을 강화하겠다는 목표도 제시했다. 개별 노드에 어떤 공격이 들어오고 어떻게 효율적으로 대처할 수 있는지 관심을 가지고 노드별 보안을 강화한다는 것이다.

애플리케이션이 쓰일 수 있는 다양한 영역들을 고민하면서 이더리움을 기반으로 운영되는 애플리케이션이 어떻게 활용되느냐 하는 것도 이더리움 커뮤니티의 중요한 이슈이다.

콘스탄티노플 하드포크[편집]

2019년 3월 1일 이더리움은 콘스탄티노플 하드포크(Constantinople Hardfork)를 성공했다. 콘스탄티노플은 이더리움의 세번째 개발 단계의 마지막 하드포크로서, 이더리움 네트워크 내에서 채굴 보상을 감소시켜 작업증명(PoW) 방식의 비중을 줄이고 지분증명(PoS) 방식으로 변경하는 것을 목적으로 한다. 이더리움 측은 2018년 10월 말 롭스텐 테스트넷(ropsten testnet)에서 발견된 버그들로 인하여 콘스탄티노플 하드포크를 1차 연기하였다. 이후 2019년 1월 16일경 이더리움 7,080,000번째 블록에서 콘스탄티노플 하드포크를 예정하였으나 이번에도 역시 기술적 문제로 인해 2차 연기되었다. 2018년 말과 2019년 초 기준으로 이더리움 가격이 너무 많이 떨어져 있는 상황이라, 만약 이러한 하드포크 개발 이슈를 지연한다면 이더리움은 암호화폐 시장에서 영원히 도태될 수 있을 것이라는 위기감을 개발자들이 가지고 있었다. 그럼에도 불구하고, 이더리움 측은 블록체인 보안업체인 체인시큐리티(ChainSecurity)가 발견한 결함 문제를 선제적으로 해결하기 위해 1월 16일로 예정된 하드포크 일정을 연기했다. 마침내 2019년 3월 1일 이더리움 측은 약속한 콘스탄티노플 하드포크에 성공하였다.

각주[편집]

  1. 안성주지몬,〈[마스터링 이더리움Mastering Ethereum- Clients〉,《개발이야기》, 2018-09-26
  2. 이더리움 스마트 컨트랙트 동작방식 종결자!!! DApp 개발 가즈아〉, 《스팀잇》, 2017년도
  3. Geth/Parity클라이언트,〈[https://kr.zastrin.com/courses/kr-ethereum-primer/lessons/3-1 Geth/Parity 클라이언트〉,《자스트린》
  4. 마스터링 이더리움,〈[마스터링 이더리움3장 이더리움 클라이언트〉,《비지배타》, 2019-06-26
  5. 마 작가〈[https://steemit.com/kr/@maa/3qwkmu 이더리움 스마트컨트랙트의 한계와 스팀의 앞으로의 발전 가능성〉,《스팀잇》2017-05-19

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 이더리움 클라이언트 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.