일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 페이스북유니버시티 #마케팅교육 #마케팅캠프
- #국제채권시장 #유로본드 #유로커런시 #유로달러 #외국채 #금융중개기관 #간접금융 #거래비용#다우존스공업평균지수 #나스닥종합지수 #FTSE100 #DAX #CAC40 #straittimes #항생지수 #거래비용 #유동성 #위
- vp #vc #did #신원인증 #블록체인
- 미쉬킨의화폐와금융 #미쉬킨 #화폐금융론 #화폐와금융 #경제학 #교양 #경제지식 #경제공부
- #경제상식 #화폐 #금융 #화폐금융론 #경제학 #경제기본 #경제지식 #경제근육 #투자지식 #경제공부 #경제학전공 #금융이란 #화폐란 #금융시장 #금융시장역할 #화폐역할 #화폐역기능 #금융역기능 #
- 자료구조 #알고리즘
- 블록체인 #layer2 #레이어2 #이더리움스케일링
- html #js #parsing
- Today
- Total
평행우주 : world 1
[블록체인이론] 이더리움 데이터 계층 : 어카운트 구조와 생성 본문
이더리움 플랫폼 데이터 계층 : 어카운트
이더리움 플랫폼에서 어카운트는 모든 트랜잭션의 실행 주체이자 기본 단위로서 모든 것은 어카운트에서 시작한다
이더리움은 두 가지 어카운트 타입을 갖는다
어카운트
외부소유 어카운트 EOA
일반적으로 말하는 이더리움 사용자 어카운트
사람이 직접 개인키로 관리
스마트 컨트랙트 실행 코드를 가지고 있지 않다
개인 키를 분실하면 해당 어카운트도 분실한 것과 마찬가지이다
EOA는 개인 키를 사용하여 전자 서명된 트랜잭션을 생성 및 실행함으로써
다른 EOA나 컨트랙트 어카운트에 메시지를 보낸다
보통, EOA 간의 메시지는 이더를 전송하는 것
또는 EOA가 컨트랙트 어카운트에 메시지를 보내 해당 코드를 실행시켜 다양한 결과를 만들 수 있다
컨트랙트 어카운트 CA
일반적으로 말하는 스마트 컨트랙트
컨트랙트 어카운트는 외부 소유 어카운트나 다른 컨트랙트 어카운트의 메시지를 받은 후
내부의 스마트 컨트랙트 코드를 실행한 후,
새로운 컨트랙트를 생성하거나 다른 메시지를 읽거나 보낸다
또한, 필요하면 내부 저장 공간에 데이터를 저장할 수도 있다
그러나 랜덤 넘버를 생성하거나 직접 운영체제를 조작하는 API를 호출하는 작업 등은 할 수 없다
오직 EOA나 다른 컨트랙트 보드에 의해서만 작동된다
즉 자기 자신이 직접 새로운 트랜잭션을 실행할 수는 없다
어카운트 구조
type Account struct {
Nonce uint64
Balance *big.Int
Root common.Hash
CodeHash []byte //머클 패트리시아 트리의 루트 해시
}
어카운트 정보는 4개의 필드로 구성되어 있다
넌스
해당 어카운트로부터 보내진 트랜잭션의 수를 의미
0으로 시작한다
트랜잭션을 오직 한 번만 실행되게 할 때 사용할 수 있는 카운터
만약 컨트랙트 어카운트이면 넌스는 어카운트에 의해 생성된 컨트랙트 수다
잔액
해당 어카운트의 이더 잔고
루트
해당 어카운트가 저장될 머클 패트리시아 트리의 루트 노드
참고로, 실제 어카운트의 저장소는 머클 패트리시아 트리에 저장된다
이 트리의 루트 노드를 암호 해시한 것이 바로 루트
암호 해시는 Keccak256 암호 해시를 사용한다
코드해시
해당 어카운트의 스마트 컨트랙트 바이트 코드의 해시
코드 해시값이 비어 있으면 해당 어카운트는 EOA이다
어카운트 생성
모든 이더리움 어카운트는 개인 키와 공개 키의 쌍으로 정의된다
개인 키와 공개 키를 비대칭 키라고 한다
이더리움은 비대칭 암호화 알고리즘으로 256비트 ECDSA를 사용한다
이더리움은 C언어로 작성된 비트코인의 ECDSA 라이브러리인 secp256k1을 GO언어로 래핑하여 사용한다
ECDSA 서명 암호화를 통해 얻은 256비트 공개 키를
다시 암호 해시 알고리즘 Keccak256을 사용하여 암호화하여 32바이트의 고정값을 생성하고
이 중 20바이트를 절삭하여 어카운트 주솟값으로 사용한다
ECDSA : 비대칭 암호 키의 생성 알고리즘
Keccak256 : 임의의 값을 암호화 한 후 고정 크기 값을 생성해 내는 암호 해시 함수
>> 어카운트 주소 = Keccak256(공개키(ECDSA(개인키)))
Account 패키지 : 어카운트 생성
일반적으로 말하는 이더리움 사용자 어카운트
사람이 직접 개인키로 관리
코드분석 👇🏻
2022.03.30 - [텃밭 1 : BlockChain/Go] - [Go] 이더리움 Account 패키지 : 어카운트 생성 코드 분석
어카운트 상태
어카운트들이 모인 것을 이더리움에서는 상태라고 하고
이를 stateObject 구조체로 표현한다
어카운트에 접근하여 상태를 변경하려면 stateObject를 통해 접근한 후 상태를 변경할 수 있다
변경된 어카운트는 CommitTrie() 함수를 호출하여
변경된 Trie를 ethdb 패키지를 통해 levelDB에 업데이트한다
//go-ethereum/core/state/state_object.go / 66
type stateObject struct {
address common.Address
addrHash common.Hash // hash of ethereum address of the account
data types.StateAccount
db *StateDB
// DB error.
// State objects are used by the consensus core and VM which are
// unable to deal with database-level errors. Any error that occurs
// during a database read is memoized here and will eventually be returned
// by StateDB.Commit.
dbErr error
// Write caches.
trie Trie // storage trie, which becomes non-nil on first access
code Code // contract bytecode, which gets set when code is loaded
originStorage Storage // Storage cache of original entries to dedup rewrites, reset for every transaction
pendingStorage Storage // Storage entries that need to be flushed to disk, at the end of an entire block
dirtyStorage Storage // Storage entries that have been modified in the current transaction execution
fakeStorage Storage // Fake storage which constructed by caller for debugging purpose.
// Cache flags.
// When an object is marked suicided it will be delete from the trie
// during the "update" phase of the state transition.
dirtyCode bool // true if the code was updated
suicided bool
deleted bool
}
'텃밭 1 : BlockChain > 이론' 카테고리의 다른 글
[블록체인이론] 이더리움 플랫폼 참조 모델 개괄 (0) | 2022.03.28 |
---|---|
[블록체인이론] 이더리움과 비트코인의 상태 전이 모델 (0) | 2022.03.28 |
[블록체인이론] 스마트컨트랙트의 생명주기 (0) | 2022.03.27 |
[블록체인이론] 오프라인 서명( 서명 및 전송 분리 ) (0) | 2022.03.27 |
[블록체인이론] 디지털 서명 (0) | 2022.03.27 |