본문 바로가기
전공공부/블록체인공학

스마트 컨트랙트(1)

by 으노으뇨 2021. 10. 19.
728x90
반응형
SMALL

스마트컨트랙트를 알기위해 비트코인과 이더리움에 대해 간략히 알아야한다.

우선, 비트코인 먼저 어떤 기능이있는지 간단하게 보자


1) 비트코인의 주요 기능

암호화폐의 기능을 가지고있다.

2) 비트코인 기반 플랫폼의 다른코인 = 알트코인

-비트코인을 기반으로 해서 다른 형태로 나타나는 코인을 알트코인이라고 한다.

코인은 코인인데 비트코인이 아닌 나머지를 알트코인이라고 함

이것을 컬러드코인, 옴니 라고 함

컬러드 코인이란? 

비트코인 플랫폼을 통해서 현물의 자산을 디지털 형태로 표현하는 자산발행 형태를 표현한다.

누구나 발행가능

드란 블록체인 플랫폼과 호환되지 않는다

사례 : EPOBC, Open Assets, 미즈호 은행 사례

미즈호 은행 사례
후지쯔가 제공하는 클라우드 환경에서 미즈호 은행은 거래내역을 기록
미즈호은행의 해외증권 거래 프로세스에 블록체인 기술이 도입됨
수일 걸렸던 거래완료 시간이 하루로 단축됨 (3~4일 거래가 하루로)
미즈호 은행은 증권거래 시 3일이 걸렸으나, 컬러드 코인 도입을 통해 거래완료일을 단축하게 되었다.
- 이외에도 컬러드코인을 지속적으로 업그레이드해서 개발중이다.

옴니

마스터 코인이라는 이름이로 시작하여 옴니로 변경

비트코인 플랫폼을 통하여 작동하는 소프트웨어

디지털 자산과 암호화폐를 만들어 거래하는 플랫폼

-메이드세이프(개인이 소유한 CPU, 메모리, 저장공간 등 컴퓨팅 자원을 암호화폐에 담아 거래)

메이드 쉐이프 코인
스토리지 부분을 블록체인화 함
사용자가 사용하지 않는 컴퓨터 저장공간 공유
소프트웨어를 통하여 공유된 저장공간을 합쳐 거대한 저장공간을 만들어 필요한 사용자에게 제공
메이드 쉐이프네트워크에 접속한 사용자는 잣니의 컴퓨터의 여분 컴퓨터자원을 다른 사용자들과 공유하고 보상으로 쉐이프 코인을 받는다.

3)비트코인의 기능상 제약

암포화폐 역할에 중점을 둔 모델

알트코인 역시 비트코인 모델 기반이므로 암호화폐기능을 크게 벗어나지 못함

다양한 목적을 수행할 수 있는 블록체인이 필요하다

이더리움 기술 기반 스마트 컨트랙트를 통해 다양한 목적 수행 가능

암호화폐 뿐만아니라 블록체인 기술이 다양하게 적용될 수 있는 기술에 대한 고민을 하여 

이더리움의 스마트컨트랙트를 이용하자 -> 자동계약이 가능해진다. (다양한 목적을 가지고 사용가능해진다.)

이더리움 개요

뒤에 설명을 자세히 쓰겠다. 지금은 간단하게 이런게 있구나하고 읽고 내려가자

1. 대표적인 특징으로는 스마트 컨트랙트를 통한 자동 계약 가능(조건이 만족한다면 자동계약이 된다. 이때 화폐는 이더리움이다.)

2. 기초 화폐로 이더사용

3. 가상머신을 사용한다. : 이더리움의 스마트 계약 코드는 작성 후 EVM에서 실행할 수 있는 상태로 배포된다.

(스마트계약에 관련된 코드를 작성을 하고, 컴파일을 할때 이 코드의 내용이 컴파일 되어서 가상 머신을 통해서 실행될수 있는 상태로 배포가 된다. 이때 바이트코드 형식으로 변환되어서 전달이 되고, 이걸 사람이 보면 확인 할 수가없다.

이 바이트코드에 대해 사람들이 잘알아볼 수 있는 코드의형태  : ABI형태로 가상머신에서 확일 할수 있도록된다.)

4. 이더리움 경우 , 각각의 거래에 상태트리를 통해(머클루트) 각 거래에 대한 해시값을 만들 수 있다. 

머클루트란 ?거래가있으면 암호화하고, 암호화된 내용하고 또 합쳐 암호화하고 계속 타고타고 올라가다가 더 이상 암호화할 필요가 없을 정도의 상태를 만드는 루트를 머클루트라고 한다.- 이때 암호화할때 KECCAK-256를 사용한다. 
SHA-256보다 보안성이 강한 알고리즘이라고 한다. 이 중에 선별해서 사용해서 머클트리의 거래내용에 대해 암호화가 진행된다.

5. 이더리움은 노드가 두개이다. : 일반 노드 + 채굴노드

6. 2개의 어카운트(계정)타입 사용 : 외부 어카운트 + 계약 어카운트

7. 탈중앙화된 다양한 애틀리케이션(DApp)개발 가능


노트다입

일반노드(블록체인 사본 보유)

채굴노드 : 블록생성을 위한노드


2개의 계정사용

외부어카운트 : 사용자가 소유한 어카운트(Externally Owned Account, EOA)

계약어카운트 : 스마트컨트랙트 어카운트(스마트 컨트랙트의 주소), 하나의 스마트컨트랙트에는 여러 개의 인스턴스가 존재 할 수 있음, 각 인스턴스도 고유 주소를 가짐


가상머신 사용

스마트계약을 처리하기 윈한 가상머신(EVM) - 우리가 자바배울때 가상머신인(JVM)과 비슷하다

튜닝기계 : 모든 형태의 알고리즘을 처리할 수 있음

스택구조 : 먼저 들어온 데이터를 먼저 처리함

저급언어 실행 : 기게어에 가까운 바이트 코드만 실행가능, 고급언어를 실행하기 위해서는 컴파일 과정을 거침

가스(Gas)필요 : 가상머신을 이용하여 gas를 통하여 댓가 지불(일종의 수수료)


이더리음의 거래

비트코인 : 송금할 때 거래 발생 (딱 화폐수준)

이더리움 : 암호화폐 + 다양한 거래의 계약에 대해 모든걸 칭하여 자동으로 실행되도록한다. , 

즉 함수호출할때도 거래, 송금할때, 조건을 맺을때도 거래라고 거래 메세지를 통한 거래를 발생


이더리음 비용처리

gas사용 : 거래처리를 위해서는 연산과 저장공간이 필요함 -> 비용이 발생함

이더리움 비용처리(gas에 대해 자세히 알아야한다.)

gas Unit

1. gas란? 이더리움이 하는 일을 수치화하여 측정하는 단위

2. 가격, 한도를 설정하고 사용한 가스와 사용한 가스를 곱하여 계산한다.

3. 이더리움을 사용할 때 채굴자에게 먼저 지급하고 채굴을 진행하도록 함

- 가스가격이 0이거나 가격을 낮게 책정하면, 채굴대상에서 밀려남 

4. 단위 : Gwei 

5. 이더리움은 일정 시간동안 제한된 가스가격만 처리 가능

6 .채굴자들은 이더리움에 보내는 트랜잭션을 조절해야서 네트워크 과부하 발생을 방지해야한다.

7. 채굴자들은 먼저 수행할 일을 선택하기 위해서 가스 가격과 가스 한도에 의존

8. 거래 처리를 위한 수수료 가 발생함

-실제 사용된 gas량 * 발신자가 설정한 gas비용

9. 가스 한도 : 요청하는 작업량을 추측할 수있다.

10. 보통 21000가스 한도로 지정함 - 보통설정

11. 한도를 너무 맞게 설정하면 작업이 완료되지 않고 거래가 실패함 (이더의 손실)

12. 너무 높게 지정하면 거래수행에 대한 비용이 많이 증가한다.

13. 가스 한도 전 작업이 완료되면 사용하지 않은 이더는 되돌려 받는다.

14. 가스 한도를 지정함으로써 무제한 이더 사용을 방지한다.


이더리움의 계정 암호화

이더리움이 비트코인보다 더 많은 기술이있다. 

이더리움에서 계정이 생성되어야 거래가 이루어진다. 계정은 계좌번호라고 생각하면 편하다

공개키 암호화 방법을 사용하여 공개키와 개인키 쌍을 만듦

공개키 암호화방법  암호화기법중 비대칭 암호화 방법이다
공개키  공개되는 주소이며, 개인의 계좌 번호 역할을 한다, 따라서 이더리움 트랜잭션 처리 시 수신자는 주소로 처리되며 주소는 공개키에 해당한다. - 공개키는 다른사람도 볼수있다. 비밀번호는 개인키라고 함
개인키  거래를 완성하기위헤 필요한것,(ex : 계좌비밀번호 같은 역할을 하는듯? 차이점은 무작위-랜덤하게 생성되고 PIN 같은 역할을한다.) 
개인키를 만드는방법  랜덤하게 선택되는 숫자
개인만 소유하여야 함
PIN과 같은 역할
블록체인에는 저장되지 않고 개인 지갑을 통하여 관리되어야 함
개인키의 소유와 제어는 이더리움계정에 대한 자금의 제어와 컨트랙트 접근을 관리한다.
개인이 소유하고 관리하며 개인키를 사용하여 디지털 서명을 만듦
개인키 분실 시 복구 불가하며 이더에 대한 소유권을 잃게 됨
디지털 서명 개인키를 통해 디지털서명을 만든다.
개인키를 통해서 생성된다.
블록체인에 저장된다.
이더 사용권한 및 컨트랙트 사용자 인증 권한을 가진다.
모든 메시지에 서명 가능

이더리움 계정 암호화

공개키 암호화 방법을 사용하여 공개키와 개인키 쌍을 만든다.

개인키 생성방법 : 1~2256사이의 숫자를 선택하여 개인키를 만든다.

난수 생성기를 통해서 256개의 임의의 비트 생성

임의의 256개 비트가 유효한 범위에 있는 경우 개인키로 인정 -> 그렇지 않으면 다시 개인키 작성을 시도한다.

개인키 작성을 위해여 Keccak256이나 SHA256알고리즘 사용

개인키 작성은 오프라인 작업이며, 타 노드와 소통할 필요가 없다.


이더리움 트랜잭션 처리

특정 이더리움 주소를 특정 이더리움 주소로 송금(이더 송금, 스마트 컨트랙트 생성)을 할 때

개인키로 생성된 디지털 서명을 반드시 함께 보내야 한다.


이더리움 지갑

거래내역에 대한 안전하 보관을 위하여 지갑 사용

이더리움 지갑은 2가지로 나뉜다. 

콜드 월렛 네트워크상에 노출되지 않는 지갑, 외장하드나 USB로 관리, 해킹 불가능 우리가 직접 들고다니는 지갑이라고 생각하면됨 

핫 월렛 인터넷이나 모바일에서 앱을 다운받아 무료로 사용받아 쓸 수 있다. 콜르월렛에 대비해서 보안성이 떨어진다. Metamask로 관리한다.

이더리움 지갑에는 계정생성내역, 이더 송금내역, 스마트 컨트랙트 배포, 스마트 컨트랙트 함수 호출, geth(게스) 등이있다.

메타마스크란? 
크롬브라우저에서 구동됨
크롬웹스토어를 통하여 다운로드 가능
이더리움을 제외한 다른 플랫폼의 거래내역은 저장 불가
chrome -> metamask홈페이지(https://metamask.io/) -> GET CHROME EXTENSION
 ->mETASK다운로드  -> chrome 브라우저 오른쪽 상단 metamask상징인 여우 모양이 나타난다.

메타마스크설치 및 지갑생성 과정 알아보기


이더리움의 단점

1. 서비스 거부(DoS) - 이더리움뿐만아니라 네트워크에서 서비스를 사용할때 발생하는 단점들이다.

2. 시빌공격(Sybli Attack) : 네트워크 공격자가 제어하는 일반 노드들로 네트워크를 구축하려고 하는 시도

3. 51%공격(51% Attack) : 공격자가 해시 파워의 51%를 점유하여 다른 채굴자보다 빠르게 블록을 생성 할 수 있도록 함


이더리움의 스마트 컨트랙트

스마트컨트랙트 1994년 닉자보에 의해 제안되었으며, 다양한 기능으로 활용가능하고, 개발자가 직접 계약조건과 계약 내용을 코드로 작성가능, 비트코인이 암호화폐의 기능만 하는 것과는 달리 스마트 컨트랙트를 통하여 다양한 스마트 계약 가능하다.
자동 계약 가능  블록체인 내부에 기록된 코드에 의해 특정조건이 만족할 경우 정해진 행동이 자동 실행되도록 하는 스크립트이다.
 말하자면 코드이다. 코드를 작성할때 조건을 설정하고 그에따른 결과, 반환값을 정할 수 있기에 특정 조건을 만족할때만 자동으로 실행할 수 있도록 스크랩트를 제작할 수 있다.
가상머신에서 실행 이더리움 가상머신(Ethereum Virtual Machine, EVM)에서 실행된다.
 Solidity언어로 작성가능 - C와 자바를 적절히 결합한 언어쯤되며, 이후 컴파일러를 통해 논리적 계약의 작동이 바이트 코드로 변환한다. 이때 논리적 계약을 바이트 코드로 변환할 때 ABI(Application Binary Interface)를 전달한다.
-컴파일러를 통해 바이트코드로 변환이 되어 가상머신에 도착하게됨 , 가상머신쪽에서 실행을 해야하는데 바이트코드는 사람이 알아보기에 쉽지않음, 그래서 JSON형태로 해서 사람이 알아볼 수 있도록 한다. 바로 그게 ABI이며, 자동으로 생성되어 전달된다
사람이 이해할 수 있는 언어로 인터페이스를 구성하기로 위함
거래를 위한 수수료 (송수신 말고 함수호출할때도...)스마트 컨트랙트 실행을 위한 수수료가 필요하다.
거래를 생성하는 사람이 이더로 Gas를 사서 거래에 첨부한다.
스마트컨트랙트 주내용 디지털로 작성된 계약서
조건에 따라 자동 수행 기능
계약의 조건대로 실행됨
무결성 보장 -> 조작 불가능
- 디지털로 작성된 자동계약서

스마트 컨트랙트 구현 순서

1, 스마트컨트랙트 작성(솔리디티 언어로 코드를 작성을 한다.)

2. 코드를 실행할 수 있도록 컴파일을 한다.
-컴파일 결과 EVM에 바이트 코드가 생성이된다. -  바이트코드는 사람이 모르니 ABI를 이용해 객체생성, 트랜잭션생성, 블록생성등을 하여 채굴이 완성되면 연결이 된다.

3. 소스코드 배포
-컴파일된 EVM코드를 하나씩 블록에 추가시켜 블록체인에 등록

소스컴파일 - EVM바이트코드 - 구체적 작업을 위한 ABI취득 - ABI로부터 컨트랙트(클래스랑 비슷한 개념) 객체 생성 - 트랜잭션(인스턴스와 비슷) 생성 - 블록에 추가 - 마이너에 의해 채굴 - 블록체인에 포함된다.

 

728x90
반응형
LIST

댓글