본문 바로가기

카테고리 없음

61강_230919_Blockchain(이더리움?, 테스트코드 과제)

728x90

이더리움

  • 스마트 컨트랙트 및 Dapp 개발을 할 수 있다.
  • 블록 생성 시간이 15초 ~ 20초까지 소요된다. 스마트 컨트랙트 실행이 가능한 환경이다.
  • 초기에는 공급량 제한이 없었지만, 업그레이드 되면서 공급량이 감소되도록 조정되었다.

비트코인은?

  • 디지털 화폐로서 전자 지불 수단으로 사용된다.
  • 블록 생성 시간이 10분 정도 소요된다.
  • 총 공급량은 약 21백만개 정도이다.

이더리움의 특징

  • 이더리움의 특징은 스마트 컨트랙트를 구현할 수 있다.
  • 비트코인은 단순히 트랜잭션은 A계정에서 B계정으로 코인을 전송(누군가 누구에게 전송)했었다.
    • 이더리움의 경우에는 스마트 컨트랙트를 구현해서 A계정에서 B계정을 통해 C의 상품을 구매할 수 있는 내용을 작성할 수 있다.
    • B가 A에게 상품의 금액을 전달받고 C에게 알려주면 C는 A에게 상품을 전달하고 A는 C의 상품을 받으면 스마트 컨트랙트가 동작해서 B의 계정에 C의 계정으로 돈을 송금한다.
  • 비트코인은 단순히 자산을 전송하는 것이라면, 이더리움은 조건을 작성할 수 있는 계약의 거래 형태를 스마트 컨트랙트라고 부른다.
  • 스마트 컨트랙트를 활용하면 돈을 전송하고 받는 거래가 아닌 조건에 맞는 코드를 동작시켜 기능을 추가할 수 있다.
  • 스마트 컨트랙트 코드는 EVM 이더리움 가상 머신 내부에 저장된다.

EVM

  • 가상 머신은 하나의 물리적인 컴퓨터 안에서 다른 운영체제나 프로그램을 실행할 수 있게 해준다.
  • 이더리움 가상머신은 이더리움 블록체인 네트워크에서 스마트 컨트랙트 코드를 작성하고 실행하는데 모든 OS 환경에서 똑같은 코드의 동작이 실행되어야 하고 동일한 결과를 출력해야 한다.
  • 이더리움 네트워크는 스마트 컨트랙트 코드를 컴파일하고 EVM을 통해 실행시킨다.
  • EVM은 컴파일된 byte 코드를 실행한다. 바이트 코드로 컴파일 할 수 있는 코드라면 언어에 상관없이 EVM을 통해 같은 결과물을 얻을 수 있다.

EVM 순서

1. 스마트 컨트랙트 코드 작성

2. 바이트 코드 컴파일

3. EVM에서 컴파일한 코드를 실행

  • 이더리움이 스마트 컨트랙트를 실행할 수 있는 핵심 요소가 EVM(이더리움 가상머신)가상의 컴퓨터가 노드에 존재하기 때문에 이더리움이 정의한 규칙에 맞게 스마트 컨트랙트 코드를 실행하고 결과를 상태에 업데이트 하는 작업을 수행한다.
  • EVM은 블록체인 분산 네트워크에 참여하고 있는 모든 노드들 같은 상태의 합의를 이룰 수 있도록 내용이 같은 코드를 실행할 때 각자 실행하는 환경이 달라서 다른 결과물을 얻으면 네트워크는 하나의 상태에 대한 합의를 이룰 수 없다.
  • 이더리움 네트워크의 모든 노드는 같은 코드를 실행해서 같은 결과를 얻기위해 EVM을 통해서 실행시킨다. 그래서 모든 노드들은 트랜잭션과 스마트 컨트랙트를 각자의 EVM에서 실행시키고 블록체인의 전체 상태를 다른 노드들과 동일하게 유지시킬 수 있다.

Account

  • 이더리움 네트워크에 EOA와 CA라는 두 개념이 있고 각각의 역할을 살펴보고자 한다.

EOA : 외부 소유 계정

  1. 개인 키가 있고 지갑 계정으로 코드의 저장이 없다.
  2. 자금 또는 스마트 컨트랙트의 접근을 제어한다.
  3. EOA에서 트랜잭션을 생성
    • EOA에서 다른 EOA나 CA로 트랜잭션을 보낼 수 있고, 개인키를 사용해서 트랜잭션을 생성 및 서명한다.
    • EOA에서 발생하는 트랜잭션은 EOA -> EOA 로 전송하면 돈을 전송하는 것이고, EOA -> CA 로 트랜잭션을 생성하면 CA의 코드를 동작시킨다.(스마트 컨트랙트를 동작시킨다.) EOA가 전송한 트랜잭션으로 시작된다.
      • CA -> X CA 에서 시작할 수는 없다. ( EOA -> CA -> CA는 가능하지만 추후에 설명)

CA : 계약의 주소

  1. 스마트 컨트랙트 로직으로 스마트 컨트랙트 코드를 해시 내용으로 저장한다.
  2. 개인 키가 없고 스스로 트랜잭션을 발생시킬 수 없다.
  3. 외부 트랜잭션의 응답으로 트랜잭션을 실행할 수 있다.
    • CA는 EOA와 다르게 개인키가 없고 스스로 트랜잭션을 생성할 수 없다.
    • CA -> EOA 로는 할 수 없다 ❌
    • EOA -> CA ⭕️
    • CA는 다른 CA나 EOA에서 받은 트랜잭션의 응답으로 트랜잭션을 실행할 수 있다.
    • EOA -> EOA : 금액 전송
    • EOA -> CA : 스마트 계약 코드를 실행. 트랜잭션 처리 -> EVM을 통해 스마트 컨트랙트 코드를 실행한다.

EOA (외부 소유 계정)

  • 트랜잭션 객체의 구성은
    • from : 보내는 계정
    • to : 받는 계정
    • nonce : 보내는 계정이 발생시킨 트랜잭션 횟수
      • EOA 계정이 생성되면 0이다. 트랜잭션을 발생시킬 때마다 증가한다.
      • 예) 트랜잭션 1 : 논스 1
      • 예) 트랜잭션 2 : 논스 2
      • 예) 트랜잭션 2 : 논스 2
        • 중복이 되지 않고 순차적으로 트랜잭션을 처리하기 위해서 어떤 트랜잭션을 우선적으로 처리할지 결정하기 위해 nonce를 사용한다.
      • 우선 순위 결정을 할 때 nonce와 가스비를 함께 사용해서 우선순위를 결정한다.
      • 논스는 이중 지불 문제를 방지하기 위해 사용한다.
    • value : 보내는 금액
    • gasLimit: 해당 트랜잭션의 사용할 수 있는 최대치
    • gasprice: 보내는 사람이 지불하는 가스당의 가격 수수료
    • data: 스마트 계약의 주소와 함수를 호출하는 내용에 필요한 매개변수
728x90