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