이더리움 VM, 주소의 구성과 역할 이해

2021. 6. 3. 15:51BlockChain

[이더리움 VM]

Solidity로 작성된 코드를 컴파일하면 이더리움 ByteCodes로 이더리움 가상머신이 인식 가능한 형태로 변환이 되고
이 변환된 코드가 이더리움 가상머신에 실행되게 되는 구조입니다.

그럼 제 3자가 무한루프가 도는 코드나 매우 고도의 연산을 필요로 하는 비효율적인 코드를 많이 생성시킨다면 이더리움 가상머신에 매우
큰 부하가 걸릴 것 이기에 이를 예방하기 위해 이더리움 가상머신에 동작하는 모든 코드들은 프로그램 동작 단위의 일종인 task단위로
GAS라는 수수료를 지불해야합니다. 즉, 수행해야 하는 코드가 많을수록 많은 수수료가 요구됩니다.


이더리움 계정은 20바이트의 주소와 상태변환(정보 직접 전달)을 갖고 있음.

계정 내 필드 4개 존재
1) Nonce : 각 트랜잭션이 오직 한번만 처리되게 하는 카운터
2) Value : 계정의 현재 ether 잔고
3) Contract code : 계정의 컨트랙트 코드 (값 없을 수 있음)
4) Storage :  계정의 저장공간(초기설정엔 값 없음)

[이더리움 계정은 2가지 종류]

 1) 외부소유계정(EOA. External Owned Account)
  - ‘지갑’. CA보다 상위계정.
  - 새로 생성되는 트랜잭션은 모두 EOA에서 시작.
  - 하지만 이 계정엔 코드 없으며, 이 계정에서 메시지 발신하려면 새 트랜잭션 생성 후 서명필요

2) 계약계정(CA. Contract Account)
  - 스마트컨트랙트 역할 가능. ‘배포된 코드’와 ‘저장공간’이 추가로 존재.
  - CA는 컨트랙트 실행 가능. 생성 불가. ( EOA가 만든 컨트랙트만 실행가능. 생성X )
  - EOA가 보낸 메시지를 CA가 수신할 때마다 자신의 코드를 활성화.
  - (기능수행) 이 활성화 코드따라 메시지 읽기, 내부저장공간 기록, 다른 메시지 발신. 컨트랙트들을 차례로 생성.


[트랜잭션]

EOA(외부소유계정, 지갑)이 보낼 메시지를 포함한 서명된 데이터 패키지.
A→B계정으로 이더, 컨트랙트(함수호출, 새 컨트랙트 배포 등) 보낼 때 서명으로 사용
타원곡선암호 기반의 디지털서명 알고리즘인 ECDSA이용하여 서명함.

트랜잭션은 다음 값을 포함
to : 메시지 수신처
signature : 발신처 확인 가능한 서명
value : 발신처가 수신처로 보내는 이더의 양
data : 선택적 데이터 필드(컨트랙트 메세지를 담을 수 있는 데이터 필드, 초기값은 없지만 EVM 컨트랙트가 여기 접근할 때 사용할 수행코드 소유)
gaslimit : start 가스 값 최대 계산 단계 수
gasprice : 매 계산 단계마다 발신처가 지불하는 수수료

'BlockChain' 카테고리의 다른 글

[BlockChain] Klaytn Code Verify  (0) 2022.04.27
[BlockChain] 메타마스크 서명과 검증  (0) 2021.09.08
IPFS(InterPlanetary File System) Upload  (0) 2021.06.29
ERC721 - NFT 만들기  (2) 2021.06.24
나만의 토큰 만들기  (0) 2021.06.03