1. 이더리움 계정(Account)
□ 이더리움 계정은 20바이트의 주소와 상태변환(정보 직접 전달)을 갖고 있음.
□ 이더리움 계정 내 필드 4개 존재.
1) Nonce : 각 트랜잭션이 오직 한번만 처리되게 하는 카운터
2) Value : 계정의 현재 ether 잔고
3) Contract code : 계정의 컨트랙트 코드 (값 없을 수 있음)
4) Storage : 계정의 저장공간(초기설정엔 값없음)
□ 이더리움 계정은 2가지 종류가 있음.
1) 외부소유계정(EOA. External Owned Account)
- ‘지갑’. CA보다 상위계정.
- 새로 생성되는 트랜잭션은 모두 EOA에서 시작.
- 하지만 이 계정엔 코드 없으며, 이 계정에서 메시지 발신하려면 새 트랜잭션 생성 후 서명필요.
모든 컨트랙트에는 해당 컨트랙트가 참이라는 인증이 존재해야한다. 인증을 담당하는 것은 개인키를 통한 서명이며 이 서명을 수행하는 것이 EOA. |
2) 계약계정(CA. Contract Account)
- 스마트컨트랙트 역할 가능. ‘배포된 코드’와 ‘저장공간’이 추가로 존재.
- CA는 컨트랙트 실행 가능. 생성 불가. ( EOA가 만든 컨트랙트만 실행가능. 생성X )
- EOA가 보낸 메시지를 CA가 수신할 때마다 자신의 코드를 활성화.
- (기능수행) 이 활성화 코드따라 메시지 읽기, 내부저장공간 기록, 다른 메시지 발신. 컨트랙트들을 차례로 생성.
□ 스마트컨트랙트는 이더리움 실행환경 내에 살아있는 자율 에이전트.
○ 이더리움에서 컨트랙트는 수행 당하는 것, 컴파일 되는 것임.
○ 메시지, 트랜잭션이 도착하면 항상 특정코드 실행함.
○ 자신의 이더잔고와 영속적 변수들 추적키 위해 자신의 키/값 저장소를 직접 통제함.(=스마트)
□ 이더리움의 비대칭암호키 = 개인키와 공개키 => “address” 주소로 표현
○ 이더리움은 속도와 보안성 조절 위해 다양한 매개변수를 갖음.
○ 이더리움은 타원곡선암호(=ECC)인 *secp256k1 사용함.
*secp256k1 : 타원곡선암호기술의 종류( https://m.blog.naver.com/aepkoreanet/221178375642 )
비트코인에서 사용하는 타원곡선암호기술(ECC)
지난, “비트코인 시스템에서 사용하는 암호 기술“ 기사에서, 비트코인은 디지털 서명 암호기술로, 공개키...
blog.naver.com
○ 암호와 매개변수로 비대칭 암호키를 생성함.
○ 공개키를 이용해 주소를 만드는 것이지만, ‘키’를 ‘주소’로 표현.
*1) 공개 키의 keccak-256 해시 생성
*2) 앞12바이트 제거
*3) 16진수 문자열 인코딩. 최종 40개 문자의 바이트 스트링이 유저의 계정주소.
2. 트랜잭션(Transaction)
□ EOA(외부소유계정, 지갑)이 보낼 메시지를 포함한 서명된 데이터 패키지.
○ A→B계정으로 이더, 컨트랙트(함수호출, 새 컨트랙트 배포 등) 보낼 때 서명으로 사용
- 타원곡선암호 기반의 디지털서명 알고리즘인 ECDSA이용하여 서명함.
- 트랜잭션은 다음 값을 포함
to |
메시지 수신처 |
to, signature, value 암호화폐에서 표준처럼 사용되는 값 |
signature |
발신처 확인가능한 서명 |
|
value |
발신처가 수신처로 보내는 이더의 양 |
|
data |
선택적 데이터 필드(컨트랙트 메시지를 담을 수 있는 데이터 필드) *초기값은 없지만 EVM은 컨트랙트가 여기 접근할 때 사용할 수행코드 소유. |
|
gaslimit |
start가스값. 최대 계산 단계 수(트랜잭션 실행이 수행되도록 허용된) |
gaslimit, gasprice 코드 내 무한루프 및 계산 낭비 방지 용도. |
gasprice |
매 계산단계마다 발신처가 지불하는 수수료 |
· 이더리움의 디도스예방. 해킹시 실행되는 모든 리소스에 강제수수료 부과.
· 계산기본단위 ‘가스’, 계산단계별 소모비용은 연산마다, 데이터 용량마다 다름.
· 트랜잭션 데이터 내에 바이트랑 5가스 수수료 지불.
블록체인 위에 도메인등록서비스 기능하는 컨트랙트가 있는 경우, 이 컨트랙트로 보내지는 data는 등록하고자 하는 ‘도메인’과 ‘IP주소’ 두 개의 필드를 소유함. 컨트랙트는 메시지 데이터로부터 이 값들을 읽어 저장소 내 적당한 위치에 저장함. EVM은 데이터에 어떤 값이 존재하는 지 미리 알고 있음. |
3. 메시지(message)
□ 이더리움 실행환경(EVM)에서만 존재하는 가상 객체 (저장 불필요)
○ 컨트랙트는 다른 컨트랙트에게 메시지 전달가능함.
from |
메시지 발신처(암묵적) |
to |
메시지 수신처 |
value |
메시지와 함께 전달되는 이더 |
data |
선택적 데이터 필드 |
gaslimit |
start 가스값. 최대 계산 단계 수(트랜잭션 실행이 수행되도록 허용된) |
□ 메시지는 컨트랙트에 의해 생성됨. (트랜잭션은 EOA에 의해 생성됨)
□ 그러나, 메시지는 트랜잭션과 매우 유사함.
○ 수행과정
- 코드수행 중인 컨트랙트가
- 메시지 생성 및 실행 지시하는 수행코드(opcode)를 만나게 되면
- 메시지를 생성함. 그리고 해당코드를 실행하는 수신자계정(컨트랙트 계정)에 도달하게 됨.
- 따라서, 컨트랙트는 EOA가 하는 동일한 방식으로 다른 컨트랙트와 관계를 맺음.
□ GAS 관련
○ 트랜잭션이나 컨트랙트에 의해 할당된 가스 허용치는
○ 그 트랜잭션과 모든 하위 실행에 의해 소모된 총 가스에 적용됨.
* EOA인 A가 B에게 1,000가스와 함께 트랜잭션을 보내고 (1,000부여)
* B는 600가스를 소모 후 C에게 메시지를 보내고, C의 내부 실행에 300가스를 소모한 후 반환하면 (900사용)
* B는 가스가 모두 소모되기 전 100가스 더 사용가능.
#. 출처 사이트 :
https://steemit.com/kr/@yahweh87/36-5 : 스팀잇 이더리움백서 설명.
https://hamait.tistory.com/965?category= : 컨트랙트 비용.
https://hamait.tistory.com/966?category=276132: [이더리움 메모] 트랜잭션의 실전적 종류 구분.
'2019' Blockchain developer class' 카테고리의 다른 글
[기본] Express관련 (0) | 2019.10.21 |
---|---|
[기본] 바이트코드와 바이너리코드- (0) | 2019.08.06 |
[기본] 토큰과 ERC 20_OMG, NPXS, VEN 등 (0) | 2019.08.04 |
[이오스] 우분투 이오스 설치 및 윈도우 환경설정 (0) | 2019.07.29 |
[기본] 컨센서스(consensus)_PoW, PoS, DPoS (0) | 2019.07.25 |