일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Kotlin
- 딕셔너리 복사
- 안드로이드 스튜디오
- 이미지크기
- Java
- 코틀린
- 파이썬 문법
- 뷰크기
- cyclic imports
- View.GONE
- python #circular imports #
- 자바
- 버튼크기
- 0xC00000FD
- 1073741571
- setVisibility
- Today
- Total
개발여행
Ethereum Virtual Machine과 이더리움 블록체인 본문
이더리움은 비탈릭 부테린이 개발한 블록체인 플랫폼의 이름이자, 이 플랫폼의 화폐이름이다. 비트코인이 블록체인을 이용한 화폐의 기능만을 수행한다고 하면, 이더리움은 화폐뿐만 아니라 계약, SNS, 전자투표 등 다양한 확장성을 제공한다. 이러한 기능들은 일반적으로 컴퓨터나 스마트폰에서 설치하여 사용하는 프로그램(어플리케이션)과는 다르게 이더리움 체인에 분산 어플리케이션(Decentralized Application: dApp) 라는 형태로 탑재되어 사용하게 된다.
이더리움을 이용해 계약을 전송하는 방식을 스마트 컨트랙트(smart contract)라고 하는데 다음 블로그에서 이해하기 쉽게 설명하고 있다.
https://steemit.com/kr/@feyee95/5v8uyy
대략적인 이더리움 체인 작동방식
이더리움 네트워크의 노드에 접근하여 계약을 전송하기 위해 Etereum Virtual Machine이 필요하다.
사용자가 네트워크에 업로드 할 계약을 코딩하여 컴파일하고, 이를 EVM을 통해 블럭체인 네트워크에 배포한다. 이렇게 배포된 블럭을 채굴자가 채굴하면 해당 블럭이 확정적으로 블럭체인에 포함되게 된다. 정보를 네트워크에 업로드할 때 gas라는 네트워크 이용료를 설정할 수 있는데, 이 요금을 적당히 높게 설정할수록 채굴자들이 우선적으로 채굴을 시도하므로 더 빠르게 전송이 가능하다.
1. 솔리디티(Solidity)
이더리움 블록체인으로 전송할 정보는 솔리디티라는 언어를 사용하여 정의한다. 솔리디티는 정적 타입 언어로, EVM에서 작동하는 스마트 컨트랙트를 개발하기 위해 설계되었다. 자바 스크립트와 문법이 유사하여 JS에 익숙한 개발자는 금방 익힐 수 있을 것이다. solidity로 코딩한 내용은 evm에서 실행될 수 있도록 opcode로 불리는 기계어로 컴파일된다.
계약이 체인에 전송되기 직전까지는 일반적인 프로그램의 컴파일 과정과 별반차이가 없어보인다. opcode 또한 일반적으로 사용되는 기계어와 유사하다. opcode에 관한 자세한 내용은 다음 글을 참고하자.
https://medium.com/mycrypto/the-ethereum-virtual-machine-how-does-it-work-9abac2b7c9e
2. Ethereum Virtual Machine (EVM)
EVM을 통해 네트워크로 전송된 계약은 채굴자에 의해 채굴이 되면 계약내용(opcode)이 실행되면서 블록체인에 포함된다. 블럭체인에는 누구나 컨트랙트를 배포할 수 있는데, 이 말은 트래픽 공격으로 네트워크를 마비시킬 수도 있다는 말이 된다. 이를 막기 위해 컨트랙트를 배포하기 전에 자신이 지불할 의사가 있는 최대 gas 금액을 설정하고, 채굴자들이 가장 높은 비용의 컨트랙트를 우선적으로 채굴하게 된다. 트래픽에 소요되는 비용을 사용자와 채굴자간에 설정함으로써 무차별적으로 컨트랙트를 배포하여 네트워크를 마비시키는 행위를 방지할 수 있다.