해당 글은 본인이 이더리움을 이해하기 위해
글 가장 아래의 출처들을 종합하여 작성되었습니다
정보의 생략 및 오타가 있을 수 있습니다ㅏㅏㅏ
이더리움은 주소, 개인키, 디지털 서명 등을 통해 이더(ether)를 소유하고 통제한다
그리고 키와 주소는 지갑 또는 월렛 ( 지갑 )이라고 부르는 소프트웨어에 의해 생성되고 관리된다
지갑 주소( 이더리움 주소 )의 생성 과정
private Key -> public key -> address
1. private Key 는 HEX 값으로 구성된 64자리의 랜덤값으로 생성
2. 타원 곡선 암호화 알고리즘(ECDSA)으로 private Key로부터 공개키를 생성
3. 마지막으로 공개키를 해싱(Keccak-256) 하여 뒤에서 40자리만 가져온 것이 우리가 사용하는 지갑의 주소
+++ 지갑 주소(이더리움 주소 = EOA)는 공개되어 있으며 전 세계 누구와도 공유 할 수 있고,
** but 개인키는 절대 다른 사람과 공유해서는 안된다 **
주소 + 개인키는 그 어떤 데이터베이스에도 저장되지 않으며,
사용자만이 이 정보를 통제 할 수 있다
Keccak-256
: 단방향 해시 함수
개인키와 공개키
위의 이더리움 주소 설명에서와 같이,
- 개인키 ( private Key )
이더를 지출하는 트랜잭션을 디지털 서명하는 데 사용된다
개인키는 단순히 무작위로 추출된 숫자이다
좀 더 정확하게 말하면, 개인키는 0과 n - 1 사이의 임의의 수이다 - 공개키 ( public key )
이더를 수신하는 주소로 사용된다
공개키는 타원 곡선 곱셈 함수를 사용하여 개인키로부터 계산된다
이더리움 계정
이더리움에는 2가지 유형의 계정(주소)이 존재한다
- 외부 소유 계정(EOA)
지갑에서 개인키로 생성한 계정
외부적으로 관리됨
이더 잔액을 가짐
트랜잭션을 전송 할 수 있음
개인키로 관리
관련 코드를 가지고 있지 않음 - 컨트랙트(계약) 계정(CA)
컨트랙트에서 생성된 계정
이더 잔액을 가짐
관련 코드를 가짐
코드 실행은 다른 계약에 의해서 받은 메세지(호출) 혹은 트랜잭션을 통해서 작동이 시작
두 가지 계정 중 외부 소유 계정이 상위 계정이고,
새로 생성되는 트랜잭션은 모두 이 외부 소유 계정에서 시작하게 된다
외부 소유 계정에서 계약과 관련된 트랜잭션을 만들면 계약 계정에서 받아서 처리하게 되는 것이다
+++ 트랜잭션의 구성요소
to | 메시지 수신처 | to, signature, value 암호 화폐에서 표준처럼 사용되는 값 |
signature | 발신처 확인가능한 서명 | |
value | 발신처가 수신처로 보내는 이더의 양 | |
data | 선택적 데이터 필드(컨트랙트 메시지를 담을 수 있는 데이터 필드) *초기값은 없지만 EVM은 컨트랙트가 여기 접근할 때 사용할 수행코드 소유 |
|
gaslimit | start가스값 최대 계산 단계 수(트랜잭션 실행이 수행되도록 허용된) |
gaslimit, gasprice 코드 내 무한루프 및 계산 낭비 방지 용도 |
gasprice | 매 계산 단계마다 발신처가 지불하는 수수료 |
GAS라는 이더리움 수수료 체계의 특징 때문에,
비트코인처럼 금액 차이로 수수료를 계산하는 것이 아닌,
트랜잭션 안에서 수행되는 송금이나 계약 내용 안에 코드의 종류와 갯수로 수수료를 매긴다
이 수수료 지불 과정에서
송신자( 트랜잭션을 보내는 사람 )가 설정할 수 있는 2가지가 바로 gaslimit와 gasprice이다
그래서 저 2가지 데이터가 트랜잭션의 일부로 들어가게 되는 것
+++ 메시지
컨트랙트는 다른 컨트랙트에 “메시지”를 보낼 수 있는 능력을 가지고 있다
메시지는 외부로 저장되지 않는 가상적인 존재이며,
오직 이더리움 실행 환경안에서만 존재한다
( 메시지는 트랜잭션 간 함수 호출로 생각하면 된다ㅏㅏㅏㅏ )
출처 :
https://boxfoxs.tistory.com/400 [박스여우 - BoxFox]
https://steemit.com/kr/@anpigon/ethereum-1
https://steemit.com/kr/@feyee95/5lzztc
https://programmers.co.kr/learn/courses/7322/lessons/42388
https://steemit.com/kr/@yahweh87/eoa
'BlockChain > Ethereum' 카테고리의 다른 글
CA(계약 계정)는 Instance인가? [ 스마트 컨트랙트 ] (2) | 2021.06.01 |
---|---|
Ethereum(이더리움) 투표 dApp 개발 2 (0) | 2021.05.31 |
Ethereum(이더리움) 투표 dApp 개발 1 (0) | 2021.05.31 |
이더리움- dApp 개발환경 구축하기 [Windows] (0) | 2021.05.31 |
이더리움 기반 ERC-20 규격의 토큰 만들어보기 2 (2) | 2021.05.31 |