콘텐츠로 이동

2022 01 21

2022-01-21

이더리움 DApp 개발 - 블록체인 이론

  • Smart Contract
    • 오프라인으로의 계약을 온라인으로 가져오기
    • [Buyer]---[Code As Law]---[Seller]
  • Ethereum
    • Smart Contract를 쓸 수 있게 탈중앙화 플랫폼화
    • "이더"라는 고유화폐가 존재
    • Turing Compelete (코드가 실행 시 어떤 결과 나올지 예측가능 하단 것)
  • Bitcoin VS Ethereum
    • Bitcoin (UTXO)
      • 얼마 만큼의 BTC => 누구에게 준다
    • 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 하고 있고, 이벤트 발생시 띄워줄 수 있도록 함!
      • DApp 훅으로의 역할
  • constructor : 생성자 유일하게 배포시 한 번 실행
  • require() : 요구사항 무조건 지켜야하는 것
  • msg.sender.transfer(돈양) : 전송하는 코드
  • constant : 상수화 시켜 변경 X