블록체인 자습서 Fabric1.0 소스 코드 분석 Ledger(장부)

블록체인 자습서 Fabric1.0소스 코드 분석Ledger(장부)1은 2018년 하반기에 블록체인 업계가 발전 초기의 경박함과 이성으로 돌아가고 있어 겉으로 보면 관련 인재 수요와 몸값이 하락하고 있는 것 같다.그러나 사실 초기 거품의 점퇴는 블록체인의 진정한 기술에 더 많은 관심을 갖게 했다.
Fabric 1.0 소스 코드 노트의 Ledger(장부)
1. Ledger 개요
Ledger, 즉 장부 데이터베이스입니다.Fabric 장부에는 네 가지 데이터베이스가 있는데 그것이 바로 idStore(ledgerID 데이터베이스),blkstorage(block 파일 저장),statedb(상태 데이터베이스),historydb(역사 데이터베이스)이다.그 중에서 idStore,historydb는 leveldb를 사용하고 statedb는 leveldb나couchDB를 선택할 수 있습니다.blkstorage에서 index 부분은 leveldb를 사용하고 실제 블록체인 데이터 저장은 파일을 사용합니다.
4
  • idStore, 기본 디렉토리/var/hyperledger/production/ledgersData/ledgerProvider, 더 자세한 내용, 참조: Fabric 1.0 소스 코드 노트의 Ledger #idStore(ledgerID 데이터베이스)
  • 4
  • blkstorage, 기본 디렉터리/var/hyperledger/production/ledgersData/chains, 더 자세한 내용, 참조: Fabric 1.0 소스 코드 노트의 Ledger #blkstorage(block 파일 저장소)
  • 4
  • statedb, 기본 디렉터리/var/hyperledger/production/ledgersData/stateLeveldb, 더 자세한 내용, 참조: Fabric 1.0 소스 코드 노트의 Ledger #statedb(상태 데이터베이스)
  • 4
  • historydb, 기본 디렉터리/var/hyperledger/production/ledgersData/historyLeveldb, 더 자세한 내용, 참조: Fabric 1.0 소스 코드 노트의 Ledger #historydb(역사 데이터베이스)
  • 2. Ledger 코드 디렉토리 구조
    Ledger 관련 코드는common/ledger,core/ledger,protos/ledger 디렉터리에 분포되어 있습니다.디렉토리 구조는 다음과 같습니다.
    4
  • common/ledger 디렉토리*ledgerinterface.go, 유니버설 인터페이스Ledger,ResultsIterator,QueryResult,PrunePolicy (일시적으로 빈 인터페이스) 를 정의합니다

  • * blkstorage 디렉토리, blkstorage 관련 인터페이스 및 구현* util/leveldbelper 디렉토리, LeveldB 데이터베이스 작업의 캡슐화.    
    4
  • core/ledger 디렉토리*ledgerinterface.go, 핵심 인터페이스인 PeerLedgerProvider, PeerLedger,ValidatedLedger(일시적으로 정의되지 않음), QueryExecutor, HistoryQueryExecutor와 TxSimulator를 정의했다

  • * kvledger 디렉터리, 현재PeerLedgerProvider,PeerLedger 등 인터페이스는 오직 하나의 실현: kvledger입니다.        * kv_ledger_provider.go, PeerLedgerProvider 인터페이스, 즉Provider 구조체와 그 방법, 그리고 idStore 구조체와 방법을 실현한다.        * kv_ledger.go, PeerLedger 인터페이스, 즉 kvLedger 구조체와 방법을 실현한다.* txmgmt 카탈로그, 거래 관리*statedb 디렉터리,statedb 관련 인터페이스 및 실현.*history/historydb 디렉터리,historydb 관련 인터페이스 및 실현.    * ledgermgmt/ledger_mgmt.go, Ledger 관리 관련 함수 구현.    * ledgerconfig/ledger_config.go, Ledger 구성 관련 함수 구현.* util 디렉토리, Ledger 도구 관련 함수    
    3. 핵심 인터페이스 정의
    PeerLedgerProvider 인터페이스 정의:PeerLedger 실례handle을 제공합니다.
    type PeerLedgerProvider interface {
        Create(genesisBlock *common.Block) (PeerLedger, error) //          Ledger
        Open(ledgerID string) (PeerLedger, error) //      Ledger
        Exists(ledgerID string) (bool, error) // ledgerID Ledger    
        List() ([]string, error) //     ledgerID
        Close() //   PeerLedgerProvider
    }
    //   core/ledger/ledger_interface.go

    PeerLedger 인터페이스 정의:PeerLedger와OrdererLedger의 다른 점은PeerLedger 로컬 유지보수 비트 마스크로 유효한 거래와 무효한 거래를 구분하는 데 사용됩니다.
    type PeerLedger interface {
        commonledger.Ledger //  common/ledger/Ledger  
        GetTransactionByID(txID string) (*peer.ProcessedTransaction, error) // txID    
        GetBlockByHash(blockHash []byte) (*common.Block, error) // blockHash  Block
        GetBlockByTxID(txID string) (*common.Block, error) // txID       Block
        GetTxValidationCodeByTxID(txID string) (peer.TxValidationCode, error) //             
        NewTxSimulator() (TxSimulator, error) //       ,         "TxSimulator"    
        NewQueryExecutor() (QueryExecutor, error) //       ,         'QueryExecutor'    
        NewHistoryQueryExecutor() (HistoryQueryExecutor, error) //           ,         'HistoryQueryExecutor'    
        Prune(policy commonledger.PrunePolicy) error //             
    }
    //   core/ledger/ledger_interface.go

    좋은 웹페이지 즐겨찾기