1주차 공부

박세연·2021년 1월 1일
0

Mastering Ethereum

목록 보기
1/10
post-thumbnail

Chapter 1. 이더리움이란 무엇인가?

  • 실용적인 관점에서 이더리움은 스마트 컨트랙트를 실행하는 오픈 소스에 기반을 둔 전세계에 걸친 탈중앙화 인프라 스트럭처이다.
  • 이더리움 플랫폼을 사용해서 경제적 기능들을 내장한 강력하면서도 탈중앙화된 애플리케이션을 개발할 수 있다.

이더리움은 디지털 화폐 지급 네트워크가 목적이 아닌, 가상 머신을 운영하는 범용 프로그래밍이 가능한 블록체인으로 설계되었다.

이더리움은 하나의 분산 컴퓨터로서 작동하는 것이 목적이므로 일반 컴퓨터가 할 수 있는 다양한 프로그래밍을 하고싶어함.

  • 튜링 완전(Turing complete)이란?
    (정리하기!)
  • 튜링 완전(Turing complete) 언어란?
    우리가 알고있는 대부분의 프로그래밍 언어라고 생각하면 된다. (루프 형태 코드를 만들 수 있음)
    비트코인의 스크립트 언어는 조건부 흐름 제어 기능 이외에 루프나 복잡한 흐름 제어 능력이 없음 (튜링 불완전성)

이더리움의 구성요소

  1. 피어투피어 네트워크
  2. 합의 규칙
  3. 트랜잭션
  4. 상태머신
  5. 데이터 구조
  6. 합의 알고리즘
  7. 경제적 보안성
  8. 클라이언트

Chapter 2. 이더리움의 기초

  • 이더리움 화폐단위 : 이더(ether, ETH)
  • 1 ETH = 1,000,000,000,000,000,000 wei

이더리움 지갑

  • 지갑은 이더리움 계정을 관리할 수 있는 소프트웨어 애플리케이션
  • 사용자의 키를 보유하고, 트랜잭션을 생성하고 브로드캐스트할 수 있음

메타마스크

  • 메타마스크는 브라우저에서 실행되는 브라우저 확장 지갑 (웹 기반)
  • 사용하기 쉽고 테스트하기 편리

크롬 웹스토어 ➜ MetaMask 검색 ➜ 설치
설치한 후 확장프로그램을 실행하면

시작하기를 눌러서 새로 지갑을 생성할 수 있다.

지갑을 생성하고나면 계정의 정보를 볼 수 있다.

이더리움 네트워크도 설정할 수 있다.

  • 이더리움 메인넷: 주된 공개 이더리움 블록체인. 실제 가치 및 실제 결과
  • Ropsten 테스트넷: 이더리움 공개 테스트 블록체인 및 네트워크. 이 네트워크의 ETH는 가치 x

테스트 이더 받기

Ropsten 테스트넷 ➜ Buy ➜ 파우셋 테스트 이더 얻기 ➜ request 1 ether from faucet

아래 transaction ID로 트랜잭션을 탐색할 수 있다. 롭스텐 이더스캔
난 왜 안들어오지..ㅠㅠ

외부 소유 계정(EOA)및 컨트랙트

  • 외부소유계정 : 개인키가 있는 계정 (우리가 만든 계정)
  • 컨트랙트계정 : 스마트 컨트랙트 코드가 있는 계정 (개인키x)

외부소유계정은 트랜잭션을 시작할 수 있고, 컨트랙트는 트랜잭션을 시작할 수 없다.
컨트랙트는 다른 컨트랙트를 호출해서 컨트랙트에 반응할 수 있다.

컨트랙트 컴파일하기

contract Faucet {
  
  // 컨트랙트의 다른 함수에 의해 호출될 수 있는 public 함수
  function withdraw(uint withdraw_amount) public {
    require(withdraw_amount <= 1000000000000000000); // 0.1ETH
    //require문은 조건을 만족하면 함수를 계속 실행하고 조건을 만족하지 못하면 예외처리로 함수 실행을 중지시킨다.
    msg.sender.transfer(withdraw_amount);
    // msg.sender는 해당 컨트랙트 실행한 발신자의 주소를 의미
    // msg.sender.transfer는 인자로 받은 만큼의 값을 해당 컨트랙트를 실행한 발신자(sender)에게 보낸다(transfer).
  }
  
  function () public payable {}
  // payable은 이더를 받을 수 있는 특별한 함수 유형
  // 이더를 컨트랙트 주소로 보내는 트랜잭션을 처리한다.
  // 함수가 payable이 아닌데 이더를 보내려고 한다면 트랜잭션을 거부한다.(크립토좀비 내용)
}

위의 코드는 솔리디티언어를 이용한 하나의 컨트랙트 코드이다. 해당 컨트랙트를 실행하는 사람에게 이더를 보내는 코드이다.
이 솔리디티 코드를 솔리디티 컴파일러를 사용하여 블록체인 자체에서 실행할 수 있는 EVM 바이트코드로 변환해보자.
Remix IDE 🖜 솔리디티 컴파일러


이렇게 코드를 작성하고 컴파일하자.

블록체인에 컨트랙트 생성

DEPLOY & RUN TRANSACTIONS 탭에서 ENVIRONMENT를 Web3로 설정하면 메타마스크 확장프로그램이 실행되고 이전에 만든 계정과 연결을 하면 이렇게 ACCOUNT가 설정된다. 그리고 DEPLOY를 누르면 작성한 Faucet 컨트랙트를 배포하게된다.
(테스트 이더 잔액이 없어서 deploy가 안된다ㅠㅠ)

이렇게 컨트랙트를 배포하는데 필요한 가스가 나오고 승인을 하면 컨트랙트를 블록체인 상에 자체 주소를 갖는 컨트랙트로 배포할 수 있다. 컨트랙트 배포는 블록체인에 해당 컨트랙트의 바이트코드를 등록하는 트랜잭션에 의해 수행되는 것이라고 보면 된다. 이 컨트랙트의 주소에 누군가 트랜잭션을 보내면 컨트랙트가 EVM(이더리움 가상 머신)에서 실행되어 코드를 수행한다.

profile
안녕하세요

0개의 댓글