dukDukz
[블록체인] 이더리움 본문
우리가 했던것은 블록체인 개념 중에 암호 화폐를 만든 것을 실습한 것이다.
암호화폐 안에 있는 비트코인을 배운 것이다.
암호화폐 안에는 이더리움이 속해있다.
그러면 왜 굳이 이더리움을 배워야 할까??
# 비트코인 특징
1. 라이트 코인 빌드 중에 거래 혹은 변수나 내용을 저장하는 코딩을 해야 하는 경우
2. A -> B 10개를 보내는 것을 사용하기. RPC 사용해서 sendtoaddress
이 API 를 수정하라고 한다면?
=> A->B 에게 보내는데 B가 확인 버튼 눌러야만 보낼 수 있게.
rpc 자체를 이렇게 만들려면 못한다.
이런 것들을 이더리움에서는 쉽게!! 작성이 가능하다.
(Go, Python, Java... 등등 사용이 가능하지만 주로 Solidity로 조건을 만들어서 사용한다.)
우리 입맛대로 코드 변경이 가능하다고 생각하면 될 듯..
그래서 이더리움은 다양한 언어로 만들 수 있다.
왜 다른 언어로 구현이 가능한가?
솔리디티의 장점, '코드를 수정할 수 있다' 보다는 '거래를 구현할 수 있다'가 정확한 표현이 될 듯
코인만 보낼 수 있는게 아니라 데몬에서 다양한 데이터들을 보내고 받아올 수 있다.
그게 스마트 컨트랙트이다.
이 개념이 왜 생겨났는지,
암호화폐 라는 것은 금전적인 기능을 만들기 위함이다.
이거를 이용해서 거래할 때 신뢰성을 높일 수 있다.
# 에스크로(escrow)
주문-> 송금(대기) -> 물품 받고 확인 -> 업체에 대금 치뤄줌
이렇게 해도 신뢰성이 완전하지는 않다.
그러면 고객과 업체 모두 손해 볼 수 있음
그래서 이러한 규칙을 코드로 짜놓는다면 무조건 이렇게 흘러가는구나를 알고 나면 좀 더 신뢰가 높아지게 된다.
이게 바로 스마트 컨트랙트이다.
이 코드를 작성하고 코드를 볼 수 있는 곳이 바로 솔리디티
스마트 컨트랙틀르 작성하는 언어... 주로 솔리디티 언어로 사용함
내 돈이 어딘가에(블록체인) 갔다가 다시 업체에 가는건데.. 이런게 탈중앙화 된 시스템이다.
# Dapp 디앱
- 탈 중앙 시스템을 이용해서 어플을 만드는 것이 디앱이다.
항목 | 디앱(DApp) | 전통적인 앱 |
정보 저장 / 보안 | 분산된 개인 간 네트워크에 저장으로 해킹의 어려움 | 중앙화된 데이터베이스 저장 서버나 로컬 컴퓨터를 이용하므로 해킹의 위험성 높음 |
데이터 삭제 여부 | 데이터나 거래는 생성된 뒤 삭제가 불가능 | 데이터베이스에서 삭제 가능 |
정보 투명성 | 모두 공개되고 공공 거래 장부에 모두 기록 | 데이터베이스에 기록되어 접근 권한 필요 |
가동성 | 일부 블록이 다운되어도 다른 블록들이 동일한 정보를 보유하고 있기 때문에 영향을 받지 않음 | 앱을 동작시키는 서버나 컴퓨터가 다운되면 정지 |
사용자 비용 | 기능을 사용하기 위해서는 보통 토큰/코인이 필요 | 앱을 사용하는 것 자체는 일반적으로 무료 |
유저 친화성 | 지갑, 토큰, 거래 등 현재까지는 학습하는데 시간 필요 | 일반적으로 튜토리얼 없이 사용 가능할 정도로 편리 |
거래 속도 | 사용하는 블록체인마다 차이가 있지만 보통 느림 | 인터넷이나 하드웨어 속도에 따라 차이가 있지만 빠름 |
구동 방식 | 스마트 컨트랙트(Smart Contract)*를 사용하여 명령을 수행하고 정보를 가져오게 됨 |
서버와 앱에 포함된 프로그래밍에 따라 서버와 앱 사이 정보 전송 |
디앱의 주 목적은
신뢰, 투명성, 공정거래
그래서 이를 기반으로 여러 사업에서 사용가능하다.
부동산 계약서라든가...
돈을 주고 부동산을 확인하고 임대인에게 돈이 들어가는..
NTF 까지..
이더리움을 잘하려면 스마트 컨트랙트를 잘 작성하고 웹에서 잘 갖다 써야 한다.
다음주 일주일간 이더리움 계열 공부 쭉 할건데...
스마트 컨트랙트를 작성하는거에 초점을 두고 할 것이다,
그리고 토큰도 만들거임..
# 코인과 토큰의 차이점
- 자체적인 메인넷을 갖고 있는지의 차이가 있다.
그래서 우리가 만든것은 토큰이 아니라 코인.
이더리움은 토큰이다.
이제는 메인넷을 구축하지 않을 것이다 = 토큰
이더리움꺼를 빌려써야함...
이더리움안에 있는것을 갖고 발행해서 -> 단위가 쪼개진 토큰을 제작할 것이다.
스마트 컨트랙트란 무엇일까? 거래를 만든다는 것.
A 와 B 가 거래를 할 수 있어야 함...
그럴려면 이더리움이 필요함..!
테스트넷도 이더리움에서 자체적으로 배포하고 있기 때문에 연습이나 공부때는 테스트넷에서 이더리움을 받아서 쓸거다.
우리가 테스트넷에서 받았음. 빌려 쓰고 있는데
이더리움 테스트넷에서도 엄청나게 많은 노드들이 있어서 송금하는데 오래 걸릴 수 있다.
테스트가 불편하면 개발하기 힘들다.
그래서 테스트를 쉽게 만들어야 한다....
이러면 안된다!!!
그래서 가짜 이더리움 환경을 똑같이 구현해 놓은 라이브러리/프레임워크가 존재하는데 그걸 사용해보자.
가볍게 데몬을 설치 할 수 있도록 하는 녀석이 있다.
그게 바로 "가나슈" 이다.
# 라이브러리와 프레임워크
# 프레임워크
: 코드 모음집
web application 을 만들 때 쓰는.. spring 같은... 코드를 최소화 하는 것.
Dapp 을 만들때 필요한 프레임워크가 필요하다.
디앱을 쉽게 만들 수 있도록 하는 녀석이 있는데 그게 바로 "Truffle(트러플)" 이다.
이더리움 쓸 때는 사용할것들이 굉장히 많다.
# 트러플
디앱을 만들기 위해서 사용하는 프레임워크이다.
Next React... 를 사용했었는데
html 을 좀더 기술적으로 사용하기 위해서 next 나 react 개념을 사용한 것
트러플도 이런 역할이다..
하지만 html js 를 모르고 react 를 배우면 헬파티가 날것...
트러플도 마찬가지로 스마트 컨트랙트 작성해보고 해봐야함...
트러플만 쓰면 좀 부족해질것..
그래서 월요일까지는 스마트 컨트랙트 내용을 맛 만보고 트러플로 사용할것이다. 느낌만 알아야함.
# 솔리디티 언어
OOP 개념(객체 지향 프로그래밍)을 채용하고 있어서 js 개념과는 꽤 다르다.
객체지향언어라는 것은..
귀찮은 것이다.
1. 무언가를 할 때 선언이 우선이다.
TypeScript 도 마찬가지이다. js 에서 type이 추가 된것이다.
-> 선언하고 작성해!
2. 코드 블럭에서만 코드를 작성해야 한다.
# Java 출력문
public static void main (String[] args){
System.out.println("hello world!")
}
# js 출력문 or Phython
console.log('hello world')
# C++ 출력문
int main(void){
printf("hello world")
return 0;
}
이런식으로 객체지향언어는 코드가 메인 함수 안에서 실행이 된다.
메인함수가 있고 그 안에서 필요한 함수를 불러오는 것으로 실행이 된다.
그래서 객체 지향이라는 것은,
맨 처음에 실행되는 함수(그게 메인함수)가 존재한다는 뜻
솔리디티 언어는 OOP 개념을 사용하고 있으니 익숙해질것.
# 솔리디티를 해석하기 위해서는 어떻게 해야 할까??
해석기가 필요하다.
EVM을 사용하면 코드를 해석하고 결과를 보여준다.
remix IDE 를 사용하면 되는데
얘는 설치하는게 아니라 구름 IDE 처럼 온라인 IDE 툴이다.
솔리디티의 확장자는 .sol 이고
여기서 작성하고 간단하게 결과물을 볼 수 있다..
사용법도 알아야 하고 문법도 알아야 한다.
총정리
가나슈 | 메인넷 테스트넷 빌려쓰지 않고 로컬 피씨에서 가볍게 데몬구현 (블럭 정보를 로컬에 저장한다.) |
트러플 | Dapp을 만들기 위해서 쓰는 프레임 워크 |
EVN | 즉, 솔리디티언어를 해석해주는 녀석. node js 같은(js 를 해석해주는) 역할. 대표적으로는 java에 JVM 이라는게 있다. |
리믹스 | vscode 같은 편집기 툴이다. 근데 이게 온라인에 존재함. 자체적으로 EVM 실행시켜서 언어해석해줌 |
이더리움 | 이더리움을 만든다는 것은 토큰을 만든다는 것이고 메인넷을 빌려쓴다는 개념을 확실하게 알고 있어야 한다. |
스마트 컨트랙트 | 거래 내용을 코딩할 수 있는 작업. |
솔리디티 | 스마트 컨트랙트를 만드는 언어 |
솔리디티 언어는 OOP 개념인데 이것을 배울 수 있는 사이트는
크립토 좀비 - https://cryptozombies.io/ko/
10분 고민하고 안되면 next
'웹 개발 > 블록체인' 카테고리의 다른 글
[블록체인] 스마트 컨트렉트 간단 실습 + Web3 란? (2) | 2021.10.11 |
---|---|
[블록체인] 솔리디티 언어 연습 (좀비) (0) | 2021.10.11 |
[블록체인] 블록체인의 개념 (0) | 2021.10.11 |
[블록체인] 프로젝트 DB 스키마 (0) | 2021.09.28 |
[블록체인] 프로젝트를 위해 기본 틀 잡기 part 1 (0) | 2021.09.28 |