블록체인 인 액션 #1

학미새🐥·2022년 6월 24일
0

pg 34~ (챕터2)

리믹스 ID 접속하기

  • 리믹스는 테스트 블록체인을 위해 account 주소와 identity를 제공해준다.
  • 블록체인에 기록된 모든 트랜잭션을 .json 파일로 제공해준다. (Transaction recorded: 탭을 통해)
  • 스마트 컨트랙트를 배포하였을 경우, 블록체인에 정의된 identity를 가진 누구나 해당 콘트랙트에 접근할 수 있다.
    (account가 있고, 동일한 블록체인에 접속하고 있다면)
  • 다른 분산 시스템과의 차이점 : 변조 불가능한 분산 장부를 사용한다. -> 모든 참여자가 동일한 장보 복사본을 가지고 있고 이를 통해 모든 트랜잭션이 추적 가능해지면서 서로가 누군지 모르는 노드들 간의 신뢰를 쌓을 수 있다.
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

contract Counter {
    uint value;
    function initialize (uint x) public {
        value = x;
    }
    function get() view public returns (uint) {
        return value;
    }
    function increment (uint n) public {
        value = value + n;
    }
    function decrement (uint n) public {
        value = value - n;
    }
}

컨트랙트가 스마트한 이유

  • 블록체인과 상호작용하는 모든 참여자 (user과 스마트 컨트랙트 동등하게 포함)는 고유하게 식별 가능한 주소를 가진다. (외부 소유 어카운트 EOA/스마트 컨트랙트 어카운트 SCA)
  • 스마트 컨트랙트에서 함수를 시작할 때 메시지에 내포되어있는 두가지 속성 : msg.sender, msg.value.
  • value를 전송할 때, 호출되는 스마트컨트랙트의 balance에 더해짐. 이렇게 value 전송 받으려면 함수에 payable 수정자 포함해서 선언해야함
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;

contract AccountsDemo {

    address public whoDeposited;
    uint public depositAmt;
    uint public accountBalance;

    function deposit() public payable {  //가치를 전송받을 수 있는 함수
        whoDeposited = msg.sender;  //함수호출한 EOA 
        depositAmt = msg.value;  //함수호출 시 지정한 value
        accountBalance = address(this).balance;  //컨트랙트에 저장된 밸런스 값 
    }
}

탈중앙화 항공사 시스템

  • ASK : 서로 코드를 공유하지 않는 항공사들이 좌석을 P2P로 거래할 수 있는 시장
  • use case 정의 후 컨트랙트 다이어그램을 설계해야 한다
  • 의장은 모든 peer가 돌아가면서 맡게 된다 (따라서 중앙화가 아님)

수정자 :
-스마트 컨트랙트의 특수 요소
-데이터와 함수에 대한 접근을 통제하기 위한 규칙
-검증과 확인을 위한 gatekeeper
-신뢰 확보를 위해 중요함!

스마트 컨트랙트 실습

소스코드 보러가기

  • 오렌지 함수 : 검증 규칙이 없는 함수
  • 빨강 함수 : payable 함수
  • 파랑 함수 : public 데이터를 읽을 수 있는 함수 (자동 생성)
  1. 의장 account 설정 & value 50Ether 설정 (예치금) -> Deploy
  2. 항공사A account 설정 & value 50Ether 설정 -> register 실행
  3. 항공사B account 설정 & value 50Ether 설정 -> register 실행
  4. 항공사A account 설정 -> 항공사 B account, 상세정보 해시값(ex-123) 인자 입력 -> request 실행
  5. 항공사B account 설정 -> 항공사 A account, 상세정보 해시값, 좌석 가용 상태(1) 인자 입력 -> response 실행
  6. 항공사A account 설정 & value 2Ether 설정 -> 항공사 B account 인자 입력 -> settlePayment 실행
  7. 의장 account 설정 -> 항공사 B account 인자 입력 -> unregister 실행
  8. 항공사 account 인자 입력 -> balanceDetails 실행 : 어카운트 밸런스 확인 가능

Best Practice

  • 블록체인 기능이 개발할 app에 반드시 필요한지 확인한다
    • 중개자가 없는 P2P 트랜잭션
    • 신뢰 범위를 넘어서는 서로 알지 못하는 peer 간의 작동
    • 보편적으로 타임스탬프를 가진 변조 불가능한 장부에서 확인, 검증, 저장이 필요한 경우
    • 규칙과 정책에 의해 가이드된 자율적인 오퍼레이션을 가진 경우
  • 스마트 컨트랙트가 개발할 애플리케이션에 반드시 필요한지 확인해야 한다.
  • 스마트 컨트랙트 코드는 간단하고 일관성 잇고 감사 가능하게 작성해야 한다.
  • 솔리디티는 자주 업데이트된다는 점 감안하기! (아직 성숙된 언어가 아니다. 고로 컨트랙트 코드와 컴파일러 버전 맞추는 것 주의!)
profile
뭐든 다해보려는 공대생입니다

0개의 댓글