일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Kubernetes
- RabbitMQ
- fluent python
- Container
- guru
- Algorithm
- 파이썬
- BlockChain
- 백준
- Fast API
- function
- rust
- 플랫폼
- 전문가를 위한 파이썬
- 코어 이더리움 프로그래밍
- Refactoring
- Thread
- Network
- dockerfile
- 알고리즘
- Ethereum
- 블록체인
- 러스트
- 동시성
- AWS
- 이더리움
- IMAGE
- docker
- Python
- BAEKJOON
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[2-3] 2) 데이터 계층 - 어카운트와 트랜잭션, 리시트 본문
728x90
2. 어카운트 생성
어카운트 생성
- 모든 어카운트는 개인 키와 공개키의 쌍으로 정의됨 → 비대칭키
- 비대칭키 생성 시 RSA, ECDSA, DSA 등의 알고리즘이 존재함
- 256비트 ECDSA(타원형 곡선 방식)을 사용
- secp256kl 라이브러리(C++)를 Go언어로 매핑하여 사용
- 암호 해시 알고리즘 Keccak256을 사용하여 32바이트의 고정값을 생성해내고, 이 중 20바이트를 절삭하여 어카운트 주솟값을 사용함
어카운트 상태
- 어카운트들이 모인 것 → 상태 : stateObject로 표현함
- 상태 변경을 하려면 stateObject 접근 후 변경 가능
- 변경된 어카운트는 CommitTrie()를 호출하여 변경된 Trie를 ethdb 패키지를 통해 LevelDB에 업데이트
type stateObject struct {
address common.Address // 어드레스
addrHash common.Hash // 어카운트 주소의 해시값
data account // 이더리움의 어카운트
db *StateDB // 상태를 저장할 DBMS 포인터
// 쓰기용 캐시, 상태값으로 필요한 데이터의 임시 저장 캐시
Trie Trie // Trie 저장소
code Code
}
3. 트랜잭션과 리시트
트랜잭션
- 다른 어카운트나 컨트랙트에 보낼 데이터 구조체 → 전자서명으로 암호화함
- Ether 전송 또는 스마트 컨트랙트의 특정 함수를 호출할때 트랜잭션이 사용됨
- 스마트 컨트랙트를 이더리움 노드에 배포할 때도 서명된 트랜잭션을 사용함
- 트랜잭션 발신자 → ECDSA 서명 알고리즘을 사용하여 개인키로 서명해야함
(정당 트랜잭션임을 입증하기 위해)
Core 패키지: 트랜잭션 생성 및 전자 서명
type Transaction struct {
data txdata
hash atomic.Value // 트랜잭션 해시값
Size atomic.Value
from atomic.Value // 발신자 주소
}
type txdata struct {
AccountNonce uint64
Price *big.Int
GasLimit *big.Int
Recipient *common.Address
Amount *big.Int
Payload []byte
}
- AccountNonce : 발신자에 의해 보내진 트랜잭션의 갯수
- Price : 발신자가 각 실행 단계에서 지급하는 비용인 가스 가격
- GasLimit : 트랜잭션 수행시 지급가능한 최대 범위
- Amount : 발신자가 수신자에게 전송할 이더의 양
- Payload : 메시지 호출 시 매개변수 Ex) 스마트 컨트랙트 수행시 필요한 IP 주소
- 트랜잭션이 스마트 컨트랙트 함수 호출의 경우, Payload에 입력 데이터 포함시킴
- 스마트 컨트랙트를 배포하는 경우, 초기화 코드 포함 가능
리시트
- 트랜잭션의 로그를 리시트에 저장
- 트랜잭션의 실행 과정에 대한 모든 기록
- 트랜잭션과 관련된 실행 환경과 검색을 위한 인덱싱 등 블록 내에 정상 등록된 모든 트랜잭션의 정보가 저장됨
type Receipt struct {
PostState []byte
Failed bool
CumulativeGasUsed *big.Int
Bloom Bloom
Logs []*log
TxHash common.Hash
ContractAddress common.Address
GasUsed *big.Int
}
- PostState : 트랜잭션 처리 후의 상태정보
- Failed : 트랜잭션 처리 후 실패여부
- CumulativeGasUsed : 해당 트랜잭션과 리시트를 포함하고 있는 블록에서 사용한 누적 가스 비용
- Bloom : Logs에 저장된 정보들을 빠르게 검색하는 데 사용하기 위한 블룸 필터
- Logs : 트랜잭션의 실행 과정에서 생성된 각종 로그들
- TxHash : 해당 트랜잭션의 주소
- ContractAddress : 스마트 컨트랙트에서 생성된 트랜잭션의 경우, 스마트 컨트랙트의 주소
- GasUsed : 해당 트랜잭션 실행에 사용된 가스 비용
728x90
'Blockchain' 카테고리의 다른 글
1년간 DApp을 개발하면서 겪은 방황기 (0) | 2022.05.15 |
---|---|
[2-3] 3) 데이터 계층 - 블록체인 (0) | 2021.06.23 |
[2-3] 1) 데이터 계층- 어카운트 (0) | 2021.06.23 |
[2-2] 이더리움 단일 상태 모델 (0) | 2021.06.22 |
[2-1] 이더리움 플랫폼 (0) | 2021.06.22 |
Comments