// NewFSBasedRawLedger constructs an instance of `FSBasedRawLedger` func NewFSBasedRawLedger(filesystemPath string) *FSBasedRawLedger { conf := fsblkstorage.NewConf(filesystemPath, fileSegmentSize) attrsToIndex := []blkstorage.IndexableAttr{ blkstorage.IndexableAttrBlockNum, } indexConfig := &blkstorage.IndexConfig{AttrsToIndex: attrsToIndex} blockStore := fsblkstorage.NewFsBlockStore(conf, indexConfig) return &FSBasedRawLedger{blockStore} }
// NewKVLedger constructs new `KVLedger` func NewKVLedger(conf *Conf) (*KVLedger, error) { logger.Debugf("Creating KVLedger using config: ", conf) attrsToIndex := []blkstorage.IndexableAttr{ blkstorage.IndexableAttrBlockHash, blkstorage.IndexableAttrBlockNum, blkstorage.IndexableAttrTxID, blkstorage.IndexableAttrBlockNumTranNum, } indexConfig := &blkstorage.IndexConfig{AttrsToIndex: attrsToIndex} blockStorageConf := fsblkstorage.NewConf(conf.blockStorageDir, conf.maxBlockfileSize) blockStore := fsblkstorage.NewFsBlockStore(blockStorageConf, indexConfig) //State and History database managers var txmgmt txmgr.TxMgr var historymgmt history.HistMgr if ledgerconfig.IsCouchDBEnabled() == true { //By default we can talk to CouchDB with empty id and pw (""), or you can add your own id and password to talk to a secured CouchDB logger.Debugf("===COUCHDB=== NewKVLedger() Using CouchDB instead of RocksDB...hardcoding and passing connection config for now") couchDBDef := ledgerconfig.GetCouchDBDefinition() //create new transaction manager based on couchDB txmgmt = couchdbtxmgmt.NewCouchDBTxMgr(&couchdbtxmgmt.Conf{DBPath: conf.txMgrDBPath}, couchDBDef.URL, //couchDB connection URL "system", //couchDB db name matches ledger name, TODO for now use system ledger, eventually allow passing in subledger name couchDBDef.Username, //enter couchDB id here couchDBDef.Password) //enter couchDB pw here } else { // Fall back to using goleveldb lockbased transaction manager db := stateleveldb.NewVersionedDBProvider(&stateleveldb.Conf{DBPath: conf.txMgrDBPath}).GetDBHandle("Default") txmgmt = lockbasedtxmgr.NewLockBasedTxMgr(db) } if ledgerconfig.IsHistoryDBEnabled() == true { logger.Debugf("===HISTORYDB=== NewKVLedger() Using CouchDB for transaction history database") couchDBDef := ledgerconfig.GetCouchDBDefinition() historymgmt = history.NewCouchDBHistMgr( couchDBDef.URL, //couchDB connection URL "system_history", //couchDB db name matches ledger name, TODO for now use system_history ledger, eventually allow passing in subledger name couchDBDef.Username, //enter couchDB id here couchDBDef.Password) //enter couchDB pw here } l := &KVLedger{blockStore, txmgmt, historymgmt} if err := recoverStateDB(l); err != nil { panic(fmt.Errorf(`Error during state DB recovery:%s`, err)) } return l, nil }