코드코코

[솔리디티] [이더리움] 디앱의 핵심 기능 및 관련 주요개념 본문

블록체인/솔리디티

[솔리디티] [이더리움] 디앱의 핵심 기능 및 관련 주요개념

코드코코 2022. 2. 10. 22:55

디앱의 핵심 기능 : 스마트 컨트랙트

- 스마트 컨트랙트 :비즈니스 규치과 상태정보를 포함하는 소프트웨어 기능

- 솔리디티와 같은 고급언어로 작성됨

- EVM 바이트 코드로 컴파일 된 후, 이더리움 네트워크에 배포되며, 이 때 생성되는 특정 계정에 저장됨.

 

주요개념

  1. 계정
  2. 이더와 가스
  3. 트랜잭션 메시지
  4. EVM

 

1. 계정

- 키 값 저장소와 이더 잔액 형태로 데이터를 저장.

1.외부 소유 계정(Externally Owned Account) 또는 외부 계정(external account)

공개키를 사용해 공개적으로 식별가능하며, 개인키를 알고 있을 때만 작동가능

트랜잭션이 시작됨

2.컨트랙트 계정

스마트 컨트랙트가 실제로 실행되는 계정.

 

2. 이더와 가스

이더

- 이더리움 블록체인을 기반으로 한 암호화폐

- 주 목적 : 플랫폼을 통해 거래되는 서비스 및 상품에 금전적 가치를 부여.

- 이더의 최소단위 : Wei

- 거래 수수료를 지불할 때 사용(거래수수료는 가스 단위 계산되며 정산은 이더로)

단위 Wei 가치 Wei
Wei 1 Wei 1
KWei(Babbage) 1e3 Wei 1,000
MWei(Lovelace) 1e6 Wei 1,000,000
GWei(Shannon) 1e9 Wei 1,000,000,000
Microether(Szabo) 1e12 Wei 1,000,000,000,000
Milliether(Finney) 1e15 Wei 1,000,000,000,000,000
Ether 1e18 Wei 1,000,000,000,000,000,000

- 수명주기 4단계 : 발행, 전송, 보관, 교환

 

이더발행

- 채굴프로세스 통해 발행

 

이더전송

- 이더가 발행되면 채굴자의 외부 계정(사용자 계정)에 할당

- 이더리움 지갑이나 프로그래밍을 통해 이더를 다른 외부계정이나 스마트 컨트랙트 계정으로 전송가능.

 

이더교환

- 암호화폐거래소등

 

이더보관

- 가장 편리한 방법을 데스크톱 또는 온라인지갑

- 가장 안전한 방법은 콜드 월릿이나 종이로 보관하는 방법

 

가스

- 이더리움 플랫폼에 부과되는 트랜잭션 수수료를 측정하는 단위

- 트랜잭션이 처리되는 동안 사용되는 사용되는 EVM 명령어에 따라 가스의 양이 측정됨.

- 악의적인 사용자의 서비스 거부(DoS) 공격을 막을 수 있음.

- 트랜잭션 수수료(이더) = 사용된 가스양 X 가스 단위당 가격(이더)

 

- 트랜잭션을 처리하면 실행되는 코드의 연산비용에 따라 EVM은 소비되는 가스양을 계산

- 트랜잭션을 보내는 사람은 가스양과 트랜잭션이 소비할 수 있는 한도를 설정

 : 채굴자는 높은 수수료(가스양)를 지불한 트랜잭션을 먼저처리, 트랜잭션이 의도치 않게 실행되어 과도한 비용이 청구되는 것을 방지

 

- 트랜잭션이 종료되는 2가지 경우

1. 트랜잭션이 성공적으로 완료된 경우

: 남은 가스는 보내는 사람에게 환불됨.

2. 트랜잭션이 완료되기 전에 가스를 모두 소모한 경우

: EVM은 가스 부족에러를 발생시키고 트랜잭션은 롤백됨.

3. 트랜잭션 메세지 : 콜과 트랜잭션

:일반적으로 상수 함수를 호출

- 블록체인 상태를 변경하지 않는 읽기 전용 작업만 수행

- 가스를 소비하지 않아 비용이들지 않음

- 동기적으로 처리

- 반환값을 즉시 돌려줌.

- 이더를 다른 컨트랙트 계정으로 옮길 수 없음.

 

트랜잭션

: 트랜잭션은 채굴과정에서 직렬화되고 블록체인에 저장되는 메시지를 통해 전송됨.

- 블록체인 상태를 변경하는 쓰기 작업 가능

- 가스를 소모하고 이더로 비용을 지불해야 함

- 비동기적으로 처리, 채굴과정에서 실행되며 새로운 블록에 포함된 뒤 네트워크에 전파.

- 트랜잭션 ID 를 반환하고 다른 값은 반환하지 않음.

- 이더를 컨트랙트 계정으로 전송가능 . (이더 전송은 트랜잭션의 일부가 됨.)

 

트랜잭션 필드

- Sender address : 송신자 주소

- Recipient address : 수신자 주소

- value : 전송할 이더 수량 (Wei 단위로 표시). 메시지가 이더 전송에 사용되는 경우 (선택사항)

- Data : 입력값 메시지가 함수호출에 사용되는 경우 (선택사항)

- StartGa : 메시지를 실행하기 위해 소모되는 최대 가스양. 최대 가스양을 초과하는 경우 EVM은 예외처리를

발생시키고 메시지 상태를 롤백

- Digital signature : 거래 송신자 신원증명

- GasPrice : 트랜잭션을 처리하기 위해 필요한 가스 비용 (이더 단위로 표시)

 

4. EVM(이더리움 가상머신)

스택 기반의 추상 컴퓨팅 머신으로, 컴퓨터가 이더리움앱을 실행가능하게 하며 두개의 메모리 영역으로 구성.

 

- 휘발성 메모리 또는 메모리

: 메모리는 단어-주소 바이트 배열

: 메시지를 호출할때마다 컨트랙트에 할당 됨.

: 읽기 작업은 256비트 단어에 접근, 쓰기 작업은 8비트 또는 256비트 크기로 수행.

 

-스토리지

: 스토리지는 키와 값의 크기가 모두 256비트인 키-값 저장소.

: 스토리지는 각 계정에 할당되며 블록체인에 저장됨.

: 컨트랙트 계정은 자기자신의 스토리지에만 접근 가능.

 

EVM이 컨트랙트를 생성하고 호출하는 주요 옵코드(연산부호)

- CREATE : 새로운 컨트랙트 인스턴스를 생성

- CALL : 컨트랙트는 자기 자신이나 다른 컨트랙트를 호출할 때 사용

- DELEGATECALL : 호출계약서 외부 계약으로 메시지를 보내지만, 호출자의 컨트랙트에서 관련코드를 실행 가능.

여러 계약에서 엑세스 할 수 있는 공유코드 라이브러리를 만드는 데 특히 유용.