Ch 2. Ethereum Basics

업데이트:

Ether Currency Units

  • 이더리움의 화폐 단위는 이더(ether)라고 불림
    • ETH or 기호 Ξ를 이용
  • 웨이(wei)라는 가장 작은 단위 까지 내려감
    • 1*10^18 wei = 1 ETH

Choosing an Ethereum Wallet

  • 지갑은 사용자의 키를 보유하고 사용자를 대신하여 transaction을 생성하고 broadcast함
  • 최상의 지갑은 변화에 잘 적응하는 지갑
  • 지갑을 변경하는 법
    • 이전 지갑에서 새 지갑으로 자금을 보냄
    • Import exported private key into the new one
  • 신뢰하는 기기에서 지갑 앱을 다운/사용 하는 것이 중요하다.
  • 지갑 종류
    • MetaMask
    • Jaxx
    • MyEtherWallet
    • Emerald Wallet

Control and Resposibility

  • 탈중앙화 시스템으로 작동함
    • 개인키를 분실하면 영원히 접근권한 회복 불가
  • 하나의 개인 키가 하나의 계정과 동일하다 생각

EOA and Contracts

  • Externally Owned Account (EOA): Private key를 지니는 계정
  • Contract Account: EOA에 없는 스마트 컨트랙트 코드가 있음
    • Private key가 없음
    • 스마트 컨트랙트 코드: Contract 계정 생성시 이더리움 블록체인에 기록, EVM에 의해 실행되는 sw 프로그램
  • Contract에는 address가 있음 -> Ether를 보내고 받을 수 있음.
    • Transaction의 목적지가 contract의 주소 -> Transaction과 transaction의 데이터를 입력으로 EVM에서 contract가 실행됨
  • EOA만이 transaction을 시작할 수 있다.
    • 하지만 contract는 복잡한 실행 경로를 구축하여 다른 컨트랙트를 호출해 react할 수 있음

A Simple Contract: A Test Ether Faucet

  • Solidity가 가장 널리 사용되는 스마트 컨트랙트 언어이다.

Faucet.sol: A Solidity contract implementing a faucet

// 우리의 첫 번째 컨트랙트는 Faucet이다.
contract Faucet {
    // 요청하는 사람에게 이더 주기
    function withdraw(uint withdraw_amount) public {
        // 출금 액수 제한
        require(withdraw_amount <= 100000000000000000);
        // 요청한 주소로 금액 보내기
        msg.sender.transfer(withdraw_amount);
    }
    // 입금 금액 수락
    function () public payable {}
}
  • 위의 코드는 매우 간단한 contract이면서, flawed contract이다.

  • contract Object 선언
      contract Faucet { ...
    
  • Faucet의 첫번째 함수: withdraw
      function withdraw(uint withdraw_amount) public {
          require(withdraw_amount <= 100000000000000000);
          msg.sender.transfer(withdraw_amount);
      }
    
    • withdraw_amount 만큼 출금에 대한 제한 설정
      • require: 함수는 조건에 부합하지 않을시 expection 처리
    • withdraw_amount만큼 출금
      • sender: transaction 발신자의 주소
      • contract를 trigger한 msg의 sender에게 transfer
  • fallback 또는 default 함수
      function () public payable {}
    
    • 컨트랙트를 실행한 트랜잭션이 컨트랙트에 선언된 함수 또는 어떠한 함수도 지정하지 않았거나 데이터를 포함하지 않은 경우에 호출

Compling the Faucet Contract

  • Solidity complier를 이용하여 solidity 코드를 EVM 바이트코드로 변환
  • EVM은 바이트코드를 블록체인 자체에서 실행

Reference

카테고리:

업데이트:

댓글남기기