[Blockchain] Mastering Ethereum Ch.2 요약

Melon Coder·2023년 2월 13일
0

Blockchain

목록 보기
2/5
post-thumbnail

Chapter 2. 이더리움 기초

이더리움의 화폐 단위는 이더(ether)이다.
이더리움은 시스템이고, 이더가 화폐이다.

이더리움 지갑 선택하기

이더리움 계정을 관리하는 데 도움이 되는 애플리케이션이라는 의미의 '지갑(wallet)'이다.
지갑은 사용자의 키(key)를 보유하고, 사용자를 대신하여 트랜잭션을 생성하고 브로드캐스트(broadcast)할 수 있다.

다음은 이 책에서 소개한 네 가지의 스타터 지갑이다.

  • 메타마스크(MetaMask): 브라우저 확장 지갑으로 웹 기반 지갑이다.
  • 잭스(Jaxx): 다양한 운영체제에서 실행되는 다중 플랫폼 및 다중 화페 지갑이다.
  • 마이이더월렛(MyEtherWallet, MEW): 모든 브라우저에서 실행되는 웹 기반 지갑이다.
  • 에메랄드 지갑(Emerald Wallet): 이더리움 클래식(Ethereum Classic) 블록체인과 함께 작동하도록 설계되었지만, 그 밖의 이더리움 기반 블록체인과도 잘 동작한다.

통제와 책임

이더리움의 한 가지 중요한 측면은 이더리움의 각 사용자가 자금 및 스마트 컨트랙트에 대한 접근을 제어하는 자체 개인키를 관리하고 제어할 수 있어야 한다는 것이다.
기본 원칙은 하나의 개인키가 하나의 '계정'과 동일한 것.

다음은 항상 통제에는 큰 책임이 따르는데 이 책임을 관리하는 데 도움이 되는 팁 중 몇 가지.

  • 보안을 즉흥적으로 처리하지 마라. (ex. 니모닉(mnemonic) 단어 시퀀스를 캡처해서 저장한다던가, 개인키를 플레인 형태(plain form, 평서문)으로 저장한다던가, ... 따라서 백업을 하고 싶으면 펜과 종이를 사용하여 백업하라)

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

메타마스크에서 생성한 계정의 유형을 외부 소유 계정(Externally Owned Account, EOA)이라고 한다.
외부 소유 계정은 개인키가 있는 계정인데, 이 말은 자금 또는 컨트랙트에 대한 접근을 컨트롤 한다는 뜻이다.
또 다른 유형의 계정은 컨트랙트 계정(contract account)이다. 컨트랙트 계정에는 개인키가 없는 대신 스마트 컨트랙트의 코드의 로직으로 컨트롤 한다.

간단한 컨트랙트: 테스트 이더 Faucet

예제 코드는 깃허브(https://github.com/Melonisjy/MasteringEthereum)에 올렸다.

코드에 대해 간단하게 정리하자면,
contract로 시작하는 부분은 다른 객체 지향 언어의 class 선언과 비슷하게 contract 객체를 선언하는 부분이다.
require예외 처리를 하는 solidity 내장 함수인데, require 다음에 소괄호 안의 코드가 true일 시 예외로 실패 처리를 한다.
msg 객체는 모든 컨트랙트에서 접근할 수 있는 입력으로 컨트랙트의 실행을 시작한 트랜잭션을 나타낸다.
sender 속성은 해당 트랜잭션의 발신자 주소이며, transfer 함수는 이더를 현재 컨트랙트에서 발신자의 주소로 전송하는 내장 함수이다.

function () public payable

책에는 이런 식으로 폴백 함수를 설명하였는데, 찾아보니 솔리디티 버전 0.6 이후로 바뀐 것 같다.
우선 구글링해본 결과로 설명을 하자면 0.6버전 이후의 fallback함수는 receive와 fallback 두 가지 형태로 나뉘었는데,
receive는 이더만 받을 때 작동을 하고, fallback은 호출된 함수가 없고 실행해서 이더를 보낼 때 작동을 한다고 나온다.
또 책에는 function으로 써있지만 function 대신 fallback을 쓰는 것 같고 public->external로 바꾸어야 할 것 같다. (오류를 해결하려 하다보니)

0개의 댓글