pg 34~ (챕터2)
리믹스 ID 접속하기
- 리믹스는 테스트 블록체인을 위해 account 주소와 identity를 제공해준다.
- 블록체인에 기록된 모든 트랜잭션을 .json 파일로 제공해준다. (Transaction recorded: 탭을 통해)
- 스마트 컨트랙트를 배포하였을 경우, 블록체인에 정의된 identity를 가진 누구나 해당 콘트랙트에 접근할 수 있다.
(account가 있고, 동일한 블록체인에 접속하고 있다면)
- 다른 분산 시스템과의 차이점 : 변조 불가능한 분산 장부를 사용한다. -> 모든 참여자가 동일한 장보 복사본을 가지고 있고 이를 통해 모든 트랜잭션이 추적 가능해지면서 서로가 누군지 모르는 노드들 간의 신뢰를 쌓을 수 있다.
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
수정자 포함해서 선언해야함
pragma solidity ^0.8.1;
contract AccountsDemo {
address public whoDeposited;
uint public depositAmt;
uint public accountBalance;
function deposit() public payable {
whoDeposited = msg.sender;
depositAmt = msg.value;
accountBalance = address(this).balance;
}
}
탈중앙화 항공사 시스템
- ASK : 서로 코드를 공유하지 않는 항공사들이 좌석을 P2P로 거래할 수 있는 시장
- use case 정의 후 컨트랙트 다이어그램을 설계해야 한다
- 의장은 모든 peer가 돌아가면서 맡게 된다 (따라서 중앙화가 아님)
수정자 :
-스마트 컨트랙트의 특수 요소
-데이터와 함수에 대한 접근을 통제하기 위한 규칙
-검증과 확인을 위한 gatekeeper
-신뢰 확보를 위해 중요함!
스마트 컨트랙트 실습
소스코드 보러가기
- 오렌지 함수 : 검증 규칙이 없는 함수
- 빨강 함수 : payable 함수
- 파랑 함수 : public 데이터를 읽을 수 있는 함수 (자동 생성)
- 의장 account 설정 & value 50Ether 설정 (예치금) -> Deploy
- 항공사A account 설정 & value 50Ether 설정 -> register 실행
- 항공사B account 설정 & value 50Ether 설정 -> register 실행
- 항공사A account 설정 -> 항공사 B account, 상세정보 해시값(ex-123) 인자 입력 -> request 실행
- 항공사B account 설정 -> 항공사 A account, 상세정보 해시값, 좌석 가용 상태(1) 인자 입력 -> response 실행
- 항공사A account 설정 & value 2Ether 설정 -> 항공사 B account 인자 입력 -> settlePayment 실행
- 의장 account 설정 -> 항공사 B account 인자 입력 -> unregister 실행
- 항공사 account 인자 입력 -> balanceDetails 실행 : 어카운트 밸런스 확인 가능
Best Practice
- 블록체인 기능이 개발할 app에 반드시 필요한지 확인한다
- 중개자가 없는 P2P 트랜잭션
- 신뢰 범위를 넘어서는 서로 알지 못하는 peer 간의 작동
- 보편적으로 타임스탬프를 가진 변조 불가능한 장부에서 확인, 검증, 저장이 필요한 경우
- 규칙과 정책에 의해 가이드된 자율적인 오퍼레이션을 가진 경우
- 스마트 컨트랙트가 개발할 애플리케이션에 반드시 필요한지 확인해야 한다.
- 스마트 컨트랙트 코드는 간단하고 일관성 잇고 감사 가능하게 작성해야 한다.
- 솔리디티는 자주 업데이트된다는 점 감안하기! (아직 성숙된 언어가 아니다. 고로 컨트랙트 코드와 컴파일러 버전 맞추는 것 주의!)