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의 첫번째 함수: 
withdrawfunction 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
 
 
 - withdraw_amount 만큼 출금에 대한 제한 설정
        
 fallback또는default함수function () public payable {}- 컨트랙트를 실행한 트랜잭션이 컨트랙트에 선언된 함수 또는 어떠한 함수도 지정하지 않았거나 데이터를 포함하지 않은 경우에 호출
 
Compling the Faucet Contract
- Solidity complier를 이용하여 solidity 코드를 EVM 바이트코드로 변환
 - EVM은 바이트코드를 블록체인 자체에서 실행
 
      
    
댓글남기기