블록체인 이해하기 [#1]

Park Jaewoo·2022년 5월 29일
0
post-thumbnail

실행 계층



- Smart Contract

스마트 컨트랙트(Smart Contract) : 특정 계약을 스스로 수립, 검증, 이행 하기 위한 컴퓨터 프로토콜
스마트 컨트랙트 in ethereum :
evm계열 account의 상태를 변경 할 수 있는 프로그램 코드.
이더리움 P2P 네트워크 상에 배포되어 블록체인 내에 상태정보로 존재 및 evm에서 작동되어 상태변이를 유발.
새로운 스마트 컨트렉트 생성, 컨트렉트 함수 실행, 이더 전송 중 하나로 실행되며 이 실행은 user account에서 발생된
트랜젝션이나 다른 컨트랙트에 의해서만 실행된다.



- Transaction Cost

이더리움에서는 무한반복 같은 악의전인 코드를 막고 데이터 무결성을 지키기 위해 트랜잭션 실행시 비용을 지급해야한다.
이 비용은 "가스"라고 하며 서명비용과 트랜잭션 저장을 위한 스토리지 비용, 네트워크 대역폭 비용이 포함된다.

gasFee = gasLimit * gasPrice (Legacy)



- Contract Message

컨트랙트 간의 호출은 메시지라는 구조체를 사용하여 호출.
메시지는 Contract account에 의해서만 호출되며 함수 호출 시 다른 컨트랙트에게 전달된다.
메시지는 가상객체이기에 별도로 저장할 필요가 없으며 EVM내에서만 존재한다.

message : {
	to : address,
    from : address,
    nonce,
    amount,
    data,
    checkNonce
}



스마트 컨트랙트 작동 과정

  1. smart Contract -> compile -> Byte Code
  2. Byte Code -> ethereum Client -> Block Chain
  3. -> created smart contract Address & ABI

여기서 ABI는 컨트랙트의 바이트 코드에 접근하여 컨트랙트에 존재하는 함수들을 ABI를 통해 Decode(?)하여 사용할 수 있게 해주는 JSON파일이다.

const Contract = new web3.Contact(contractAddress, contract.Abi);
Contract.sampleFunction();



이더리움 가상머신

EVM:

이더리움 스마트 컨트랙트의 바이트 코드를 실행하는 32byte stack 기반의 실행환경
최대 1024byte.

실행과정

솔리티티 (or JS) -> Contract byte Code -> EVM -> OP Code

EVM은 OP코드의 프로그램 카운터를 0부터 하나씩 증가시키면서 반복적으로 연산을 수행한다. 이때 실행할때 마다 가스비를 소비하게 되는데, 가스부족, 잘못된 명령어, OverFlow 등의 예외상황의 경우 실행이 중단되고 상태변화 내용은 취소된다.

<Tip>
수행해야할 연산이 많은 경우 많은 가스비를 요구하게 되는데 단순전송과 스왑의 가스비는 아래와 같다.
swapTransaction.gas = 0.06ETH;
sendTransaction.gas = 0.002ETH;

EVM 주요 특징

  • 임시 저장소와 영구저장소를 구분하여 instance와 contract 유효값을 구분한다.
  • EVM에서 바이트 코드를 실행하기 위해서는 다음의 세가지 요소가 있어야 한다.
    1. LIFO컨테이너에 value를 push하거나 pop하기 위한 스택
    1. 무한대로 확장 가능한 바이트 배열을 담을 수 있는 메모리
    2. 계산이 끝나면 리셋되는 스택이나 메모리와는 다른 영속적으로 값을 저장하기위한 저장소
  • 32바이트 크기를 지원한다.
  • 메모리 크기가 가변적이고 스택의 크기에 제한이 없다.
  • 반복 호출 횟수를 1024로 제한하여 함수 반복 호출을 통한 공격으로 성능이 저하되거나 보안문제가 발생하는것을 망지한다.
profile
blockchain developer

0개의 댓글