2022 01 21
2022-01-21
이더리움 DApp 개발 - 블록체인 이론
- Smart Contract
- 오프라인으로의 계약을 온라인으로 가져오기
- [Buyer]---[Code As Law]---[Seller]
- Ethereum
- Smart Contract를 쓸 수 있게 탈중앙화 플랫폼화
- "이더"라는 고유화폐가 존재
- Turing Compelete (코드가 실행 시 어떤 결과 나올지 예측가능 하단 것)
- Bitcoin VS Ethereum
- Bitcoin (UTXO)
- Ethereum (Account)
- 다음과 같은 정보를 상태로써 유지하고 있음
- Address: 0xabcd~
- Balance: 40ETH
- Code: c=a+b
- Ethereum Account
- Externally Owned Accounts (사람이 개인으로 가지고 있는 지갑)
- 단체/사람/기관이 소유
- 이더를 전송하거나 컨트랙을 실행하는 트랜잭션 생성 가능
- 주소와 이더 중요
- Contract Accounts (외부 이벤트가 있어야 실행)
- 스마트 컨트랙이 소유한 계정
- 트랜잭션/함수에 의해 코드 실행
- 트랜잭션이 발생하면 그에 반응해야 동작함
- 컨트랙을 통한 제어!
- 주소와 이더 중요

- EVM
- Solidity -> Solidity Compiler -> EVM Code
- Vyper -> Vyper Compiler -> EVM Code
- 각 노드가 블록 검증 과정에서 EVM 실행
- 컨트랙이 블록에서 EVM이 실행된다
- 실행되는 코드는 특정 언어가 아닌 EVM 바이트코드!
- GAS
- 만약 노드가 무한루프에 빠진다면, 모든 ETH가 마비가 되고 모든 ETH 가치가 0가 됨
- 이를 해결하고자 수수료 GAS로 해결
- EVM의 opcode 별로 실행에 필요한 GAS가 산정됨
- 트랜잭션 생성시 (start-gas * price-gas) 만큼 이더가 차감
- 트랜잭션 결과
- 성공: 실행후 남은 gas 모두 유저에게 반환
- 실패: 실행 전 상태로 돌아감. 다만 트랜잭션 생성에 소요된 GAS는 반환되지 않음
- Ethereum Network
- 결국 상태 머신이야! 상태를 저장해두는 것!

이더리움 DApp 개발 - 솔리디티 이해
- pragma solidity : 소스에 컴파일러 버전을 선언
- contract : class 와 비슷
- mapping : 딕셔너리와 비슷
- address : 이더리움 지갑 주소
- event : 컨트랙 실행 과정에서, 외부 리스너들에게 공개된 액션
- 외부에서 해당 값들을 추적할 수 있도록 (나중에 백트래킹 필요)
- JS가 해당 컨트랙에 대해 watch 하고 있고, 이벤트 발생시 띄워줄 수 있도록 함!
- constructor : 생성자 유일하게 배포시 한 번 실행
- require() : 요구사항 무조건 지켜야하는 것
- msg.sender.transfer(돈양) : 전송하는 코드
- constant : 상수화 시켜 변경 X