스마트 컨트랙트
란 디지털로 작성된 계약서를 의미합니다.- 비트코인과 다르게 이더리움은 Transaction안에 코드를 넣어 계약을 코드로 구현하고 일정 조건이 충족되면 거래가 이행되게 하는 계약입니다.
이더리움 가상 머신
의 준말로 이더리움 네트워크 내 각 노드가 공유하는 하나의 거대한 컴퓨터로 ERC 20 토큰들이 생성되고, 모든 스마트 컨트렉트가 실행되는곳입니다.- EVM은 누구나 사용할 수 있지만 아무 제약이 없다면 네트워크 상에 과부하를 일으킬수도 있고, 누군가 악의로 스팸성 코드를 삽입하거나 할 수 있기때문에 EVM을 사용하려면
GAS
라는 비용을 지불합니다
- EVM 내 수행되는 모든 코드는 사전에 GAS를 지불학디 때문에 DDos 공격을 방어 할 수 있습니다.
- 각각의 스마트 컨트렉트는 서로 격리되어 서로의 상태를 변경할 수 없기에 안정성을 확보할 수 있습니다.
- 실행코드 기반의 GAS 책정합니다, 이더리움은 더 큰 가치가 아닌 더 큰 많은 코드 실행에 대한 GAS가 책정됩니다. 이는 금액을 비례하여 수수료가 책정되는것이 아닌 코드의 양에 따라 수수료가 책정되는것 입니다.
- 공격자 비용과 사용자 비용의 딜레마가 있습니다, 이는 사용자 입장에서는 수수료가 낮아야 하지만 공격자의 입장에서는 수수료를 높여야 하는 이중성이 있습니다.
- 컴퓨터 언어
솔리디티(solidity)
로 프로그램 작성 - 사람을 위한 언어- 솔리디티 언어로 만든 프로그램 코드를 이더리움
바이트코드
로 변환 - 기계를 위한 언어- 변환된 바이트 코드를
EVM에서 실행
ERC
는Ethereum Request for Comments
의 준말로 이더리움 표준을 의미 합니다.- 간단하게 이해하면
ERC-20
규격으로 만든 토큰은 대체 가능한 토큰이고ERC-721
규격으로 만든 토큰은 대체 불가능한 토큰이라고 보면 됩니다, 대체 불가능한 토큰(Non-Fungible Token)
은 추후에 자세히 알아보겠습니다.
가스비
란 단순하게 공격으로부터 네트워크를 보호하고 네트워크의 여러 계산을 수행해주는 노드들에게 주어지는 보상이라고 생각하면 됩니다, 채굴자들에게 보상을 제공하기 전에 채굴자들이 일의 우선 순위를 정하도록 이더리움이 하는 일을 수치화 해야합니다. 이것을 측정하는 것이 가스 단위(Gas Unit) 입니다.- 이더리움은 일정 시간동안 제한된 가스 가격만 처리할 수 있습니다, 따라서 채굴자들은 이더리움에 보내지는 수많은 요청들을 조절해야 합니다. 속도를 조절하지 않을경우 네트워크 과부하가 걸릴 수 있기에 채굴자들은 무엇을 먼저 수행해야 하는지 선택하기 위해 가스 가격(Gas Price)과 가스 한도(Gas Limit)에 의존합니다.
- 가스 가격 (Gas Price) : 채굴자에게 보상에 대한 금전적인 지불하기 위해
Gwei
라는 이더리움의 작은 값으로 단위를 나타냅니다. 이것을 가스 가격이라 부릅니다. 채굴자에게 가스 가격을 더 많이 지불하고 내 요청을 먼저 수행하게 할 수도 있습니다.- 가스 한도 (Gas Limit) : 가스 한도는 요청하는 작업량의 추측입니다, 일반적으로 많은 지갑앱이 한도를 정하고 대부분 21000 가스 한도로 정해놓습니다. 가스 한도는 작업 중단 시점을 보장함으로 무제한으로 이더리움을 사용하는 것은 방지합니다.
- 정리하면 가스는 이더리움에서 네트워크의 과부하를 막는 역할을 함과 동시에 이더리움이 계속해서 돌아갈 수 있도록 채굴자들에게 인센티브 역할도 합니다.
트랜잭션(Transaction)은
EOA
가 보낼 메시지를 가지고 있는 서명된 데이터 패키지입니다.
- to : 수신 지갑 주소
- from : 발신자 지갑 주소
- signature : 발신자를 확인할 서명
- value : 발신자가 수신자로 보내는 이더의 양
- data : 선택적(optional) 데이터 필드 -> 컨트랙트 메시지를 담을 수 있는 데이터 필드
- nonce : 발신자의 Transaction의 Count
- gaslimit (가스 한도) : 트랜잭션 실행이 수행되도록 허용된 최대 계산 단계수
- gasprice (가스 가격) : 매 계산단계마다 발신자가 지불하는 수수료
- 비트코인 지갑을 생성할 때처럼 임의의 값으로 개인키를 생성하고 개인키를 가지고 공개키를 생성하고 공개키를 가지고 생성한 지갑을
EOA(외부 소유 어카운트)
라고 하고 이는 개인 키에 의해 통제되는 계정 정보입니다.- 주역할은 이더 전송입니다.
- Nonce : Account에서 전송된 트랜잭션의 수
- Balance : 계정의 현재 이더(ether) 보유량으로 wei 단위로 표시
- storageRoot : Merkle Paticia Tree의 Root Hash
- codeHash : 빈 문자열의 Hash 정보
- 컨트랙트 계정으로 EOA와 다르게 개인키가 없고 스마트 컨트랙트를 블록체인에 배포할 때 생성되며 컨트랙트 코드에 의해 통제되는 계정 정보입니다.
- 스마트 컨트랙트 코드를 담고있으며
EOA
와 마찬가지로 이더를 보내고 받을 수 있으며 다른 컨트랙트 혹은EOA
의 호출을 통해 트랜잭션을 발생시킬 수 있습니다.- 주역할은 스마트 컨트랙트 실행입니다.
- Nonce : Account에서 생성된 Contract 수
- Balance : 계정의 현재 이더(ether) 보유량으로 wei 단위로 표시
- storageRoot : Merkle Paticia Tree의 Root Hash
- codeHash : Account에 포함된 이더리움 버츄얼 머신(EVM) code의 Hash
- nonce: Transaction의 전송 횟수
- value: 계정의 현재 이더(ether) 보유량
- contract code (CA only) : 실제로 실행될 계약의 내용이 적혀져 있는 솔리디티 코드 (값이 없을 수 있음)
- storage (CA only) : 계약코드 실행에 필요한 정보들을 저장하는 공간 (초기설정에는 비어있음)
Geth는 Go Ethereum의 약자로 Go 언어로 만들어진 Ethereum입니다.
sudo apt update
sudo apt install golang -y
sudo apt install -y libgmp3-dev tree make build-essential
git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make geth
make geth
가 안되면 Golang 삭제후 재설치sudo apt-get remove golang-go -y
sudo apt-get remove --auto-remove golang-go -y
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go
cd go-ethereum
make geth
cd build/bin
./geth version
./geth
EVM 은 따로 어떻게 설치해야하는 걸까요??