비트코인 트랜잭션 vs 스마트 계약 트랜잭션
비트코인은 암호 화폐의 전송만을 위해서 존재하지만,
Smart Contract-like는 암호 화폐 이외에 어떤 형태로도 이용 가능.
스마트 계약을 Smart하게 만드는 SCA(스마트 계약 어카운트) 내재 요소들
- 이름, 주소
- 암호화폐 잔액(암호화폐 송/수신 기능)
- 데이터와 함수
- 메시지 수신과 함수 호출 기능
- 함수 실행을 위한 연산 능력
스마트 계약 설계를 위한 준비물
- 플랫폼(Ethereum): https://ethereum.org/ko/
- 개발언어(Solidity): https://docs.soliditylang.org/en/latest/
- 개발도구(Remix IDE): https://remix-ide.readthedocs.io/en/latest/
- Free UML Tool: https://www.diagrams.net
※ 스마트 계약 설계 원칙
설계 원칙 Ⅰ.
코딩하기 전에 철저히 설계를 하고, 배포하기 전에 철저히 테스트를 거친다.
트랜잭션은 한번 내뱉은 말과 같다. 절대 주워 담을 수 없기 때문이다.
설계 원칙 Ⅱ.
사용 범위(사용자, 용도, 경우)를 정의한다.
여기서 사용자(User)란 입력값을 발생시키고, System으로부터 출력값을 돌려받는 주체이다.
설계 원칙 Ⅲ.
블록체인 기반 컴포넌트의 속성인 데이터, 접속자, 접속자 역할, 규칙, 트랜잭션 등을 정의한다.
접속자는 통상적으로 DApp을 의미한다.
트랜잭션은 복수(Plural)가 될 수 있다.
설계 원칙 Ⅳ.
계약명, 데이터, 규칙, 함수를 정의하는 계약 다이어그램을 작성한다.
일반적으로 C++, Java처럼 우리가 알던 클래스(Class) 구조에 규칙이 생겼다고 보면 된다.
허나, 규칙 자체가 필수 요소는 아니다.
Solidity 예제: Counter.sol
세계 인구, 재고량, 주식 보유량 등을 계산할 때 쓸 수 있는 가장 기본적인 형태의 Counter 계약.
pragma solidity ^0.8.11;
contract Counter {
uint value;
function init (uint x) public {
value = x;
}
function get() view public returns (uint) {
return value;
}
function increment (uint n) public {
value += n;
//return (optional)
}
function decrement (uint n) public {
value -= n;
}
}
1. 보통의 범용 언어들이 64비트인 데에 반해 솔리디티는 256비트라는 훨씬 큰 범위.
1-1. int와 int256은 같은 별칭.
2. 생성자(Constructor) 함수를 정의하지 않았을 시 기본 생성자가 대신 작동.
3. public은 권한수정자로써 블록체인 상의 어떠한 앱과 어카운트도 함수를 호출할 수 있다는 의미.
4. returns는 명시적으로 반환값에 대해 정의하겠다는 의미.
5. 함수를 호출한다는 건 분산 장부에 트랜잭션으로 기록한다는 것.
5-1. 하지만 view 함수는 읽기 전용(read-only), 즉 변수를 건들지 않기에 트랜잭션으로 기록되지 않음.
Solidity 예제: Accounts.sol
pragma solidity ^0.8.11;
contract Accounts {
address public whoDeposited;
uint public depositAmount;
uint public actBalance;
function deposit() public payable {
whoDeposited = msg.sender;
depositAmount = msg.value;
actBalance = address(this).balance;
}
}
1. payable은 금액 전송을 하겠다는 의미.
2. actBalance는 어카운트 잔액을 IDE 상에서 가시적으로 보기 위한 테스트 변수.
'Web 3.0 > Ethereum & Solidity' 카테고리의 다른 글
블록체인 및 이더리움 기초 개념 (0) | 2022.01.16 |
---|
Comment