Victoree's Blog

[2-3] 2) 데이터 계층 - 어카운트와 트랜잭션, 리시트 본문

Blockchain

[2-3] 2) 데이터 계층 - 어카운트와 트랜잭션, 리시트

victoree 2021. 6. 23. 15:39
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
Comments