public BlockChain(LyraSystem sys) { if (Singleton != null) { throw new Exception("Blockchain reinitialization"); } _sys = sys; _stateMachine = new StateMachine <BlockChainState, BlockChainTrigger>(BlockChainState.Initializing); _engageTriggerStartupSync = _stateMachine.SetTriggerParameters <long>(BlockChainTrigger.ConsensusNodesSynced); _engageTriggerConsolidateFailed = _stateMachine.SetTriggerParameters <string>(BlockChainTrigger.LocalNodeOutOfSync); CreateStateMachine(); var nodeConfig = Neo.Settings.Default.LyraNode; _store = new MongoAccountCollection(); //_store = new LiteAccountCollection(Utilities.LyraDataDir); _log = new SimpleLogger("BlockChain").Logger; _nodeConfig = nodeConfig; NetworkID = nodeConfig.Lyra.NetworkId; Singleton = this; }
public MongoAccountCollection() { _log = new SimpleLogger("Mongo").Logger; _config = Neo.Settings.Default.LyraNode; _DatabaseName = _config.Lyra.Database.DatabaseName; _BlocksCollectionName = _config.Lyra.NetworkId + "-" + "Primary" + "-blocks"; BsonClassMap.RegisterClassMap <TransactionBlock>(cm => { cm.AutoMap(); cm.MapMember(c => c.Balances).SetSerializer(new DictionaryInterfaceImplementerSerializer <Dictionary <string, decimal> >(DictionaryRepresentation.ArrayOfDocuments)); }); BsonClassMap.RegisterClassMap <SendTransferBlock>(); BsonClassMap.RegisterClassMap <ExchangingBlock>(); BsonClassMap.RegisterClassMap <ReceiveTransferBlock>(); BsonClassMap.RegisterClassMap <OpenWithReceiveTransferBlock>(); BsonClassMap.RegisterClassMap <LyraTokenGenesisBlock>(); BsonClassMap.RegisterClassMap <TokenGenesisBlock>(); BsonClassMap.RegisterClassMap <TradeBlock>(); BsonClassMap.RegisterClassMap <TradeOrderBlock>(); BsonClassMap.RegisterClassMap <ExecuteTradeOrderBlock>(); BsonClassMap.RegisterClassMap <CancelTradeOrderBlock>(); BsonClassMap.RegisterClassMap <OpenWithReceiveFeeBlock>(); BsonClassMap.RegisterClassMap <ReceiveFeeBlock>(); BsonClassMap.RegisterClassMap <ConsolidationBlock>(); BsonClassMap.RegisterClassMap <ServiceBlock>(); BsonClassMap.RegisterClassMap <AuthorizationSignature>(); BsonClassMap.RegisterClassMap <NullTransactionBlock>(); _blocks = GetDatabase().GetCollection <TransactionBlock>(_BlocksCollectionName); Cluster = GetDatabase().Client.Cluster.ToString(); async Task CreateIndexes() { await _blocks.Indexes.CreateOneAsync(new CreateIndexModel <TransactionBlock>(Builders <TransactionBlock> .IndexKeys.Ascending(x => x.UIndex))).ConfigureAwait(false); await _blocks.Indexes.CreateOneAsync(new CreateIndexModel <TransactionBlock>(Builders <TransactionBlock> .IndexKeys.Ascending(x => x.Index))).ConfigureAwait(false); await _blocks.Indexes.CreateOneAsync(new CreateIndexModel <TransactionBlock>(Builders <TransactionBlock> .IndexKeys.Ascending(x => x.AccountID))).ConfigureAwait(false); await _blocks.Indexes.CreateOneAsync(new CreateIndexModel <TransactionBlock>(Builders <TransactionBlock> .IndexKeys.Ascending(x => x.BlockType))).ConfigureAwait(false); await _blocks.Indexes.CreateOneAsync(new CreateIndexModel <TransactionBlock>(Builders <TransactionBlock> .IndexKeys.Ascending(x => x.Hash))).ConfigureAwait(false); await _blocks.Indexes.CreateOneAsync(new CreateIndexModel <TransactionBlock>(Builders <TransactionBlock> .IndexKeys.Ascending(x => x.PreviousHash))).ConfigureAwait(false); } CreateIndexes().Wait(); }
public DealEngine( IMongoCollection <ExchangeAccount> exchangeAccounts, IMongoCollection <ExchangeOrder> queue, IMongoCollection <ExchangeOrder> finished ) { _config = Neo.Settings.Default.LyraNode; _exchangeAccounts = exchangeAccounts; _queue = queue; _finished = finished; }
public BlockChain(DagSystem sys, IAccountCollectionAsync store) { _sys = sys; var nodeConfig = Neo.Settings.Default.LyraNode; _store = store; //new MongoAccountCollection(); //_store = new LiteAccountCollection(Utilities.LyraDataDir); _log = new SimpleLogger("BlockChain").Logger; _nodeConfig = nodeConfig; NetworkID = nodeConfig.Lyra.NetworkId; Receive <Startup>(_ => { }); Receive <Idle>(_ => { }); }
public BlockChain(LyraSystem sys) { if (Singleton != null) { throw new Exception("Blockchain reinitialization"); } _sys = sys; var nodeConfig = Neo.Settings.Default.LyraNode; _store = new MongoAccountCollection(); _log = new SimpleLogger("BlockChain").Logger; _nodeConfig = nodeConfig; NetworkID = nodeConfig.Lyra.NetworkId; Singleton = this; }
public MongoServiceAccountDatabase() //string ConnectionString, string DatabaseName, string AccountName, string NetworkId, string ShardId = "Primary") { _config = Neo.Settings.Default.LyraNode; _DatabaseName = _config.Lyra.Database.DatabaseName; //_NetworkId = NetworkId; //_ShardId = ShardId; //_AccountName = AccountName; var ShardId = "Primary"; _BlockCollectionName = _config.Lyra.NetworkId + "-" + ShardId + "-" + ServiceAccount.SERVICE_ACCOUNT_NAME + "-blocks"; _ParamsCollectionName = _config.Lyra.NetworkId + "-" + ShardId + "-" + ServiceAccount.SERVICE_ACCOUNT_NAME + "-params"; BsonClassMap.RegisterClassMap <ConsolidationBlock>(); BsonClassMap.RegisterClassMap <ServiceBlock>(); _blocks = GetDatabase().GetCollection <Block>(_BlockCollectionName); _params = GetDatabase().GetCollection <AccountParam>(_ParamsCollectionName); }
public MongoAccountCollection() { _config = Neo.Settings.Default.LyraNode; _DatabaseName = _config.Lyra.Database.DatabaseName; _BlocksCollectionName = _config.Lyra.NetworkId + "-" + "Primary" + "-blocks"; BsonClassMap.RegisterClassMap <TransactionBlock>(cm => { cm.AutoMap(); cm.MapMember(c => c.Balances).SetSerializer(new DictionaryInterfaceImplementerSerializer <Dictionary <string, decimal> >(DictionaryRepresentation.ArrayOfDocuments)); }); BsonClassMap.RegisterClassMap <SendTransferBlock>(); BsonClassMap.RegisterClassMap <ExchangingBlock>(); BsonClassMap.RegisterClassMap <ReceiveTransferBlock>(); BsonClassMap.RegisterClassMap <OpenWithReceiveTransferBlock>(); BsonClassMap.RegisterClassMap <LyraTokenGenesisBlock>(); BsonClassMap.RegisterClassMap <TokenGenesisBlock>(); BsonClassMap.RegisterClassMap <TradeBlock>(); BsonClassMap.RegisterClassMap <TradeOrderBlock>(); BsonClassMap.RegisterClassMap <ExecuteTradeOrderBlock>(); BsonClassMap.RegisterClassMap <CancelTradeOrderBlock>(); BsonClassMap.RegisterClassMap <OpenWithReceiveFeeBlock>(); BsonClassMap.RegisterClassMap <ReceiveFeeBlock>(); BsonClassMap.RegisterClassMap <ConsolidationBlock>(); BsonClassMap.RegisterClassMap <ServiceBlock>(); BsonClassMap.RegisterClassMap <AuthorizationSignature>(); _blocks = GetDatabase().GetCollection <TransactionBlock>(_BlocksCollectionName); Cluster = GetDatabase().Client.Cluster.ToString(); //_blocks.EnsureIndex(x => x.AccountID); //_blocks.EnsureIndex(x => x.Index); //_blocks.EnsureIndex(x => x.BlockType); //_blocks.EnsureIndex(x => x.Hash); //_blocks.EnsureIndex(x => x.PreviousHash); }
//public Dictionary<string, string> TokenGenesisBlocks { get; set; } public ServiceAccount(IActorRef blockChain, Wallet svcWallet) { _blockChain = blockChain; _svcWallet = svcWallet; _config = Neo.Settings.Default.LyraNode; }
public MongoAccountCollection() { _log = new SimpleLogger("Mongo").Logger; _config = Neo.Settings.Default.LyraNode; _DatabaseName = _config.Lyra.Database.DatabaseName; _blocksCollectionName = $"{_config.Lyra.NetworkId}_blocks"; _authorizersViewCollectionName = $"{_config.Lyra.NetworkId}_views"; BsonClassMap.RegisterClassMap <Block>(cm => { cm.AutoMap(); cm.SetIgnoreExtraElements(true); //cm.MapMember(c => c.Balances).SetSerializer(new DictionaryInterfaceImplementerSerializer<Dictionary<string, decimal>>(DictionaryRepresentation.ArrayOfDocuments)); }); BsonClassMap.RegisterClassMap <TransactionBlock>(cm => { cm.AutoMap(); cm.SetIgnoreExtraElements(true); cm.MapMember(c => c.Balances).SetSerializer(new DictionaryInterfaceImplementerSerializer <Dictionary <string, decimal> >(DictionaryRepresentation.ArrayOfDocuments)); }); BsonClassMap.RegisterClassMap <SendTransferBlock>(); BsonClassMap.RegisterClassMap <ExchangingBlock>(); BsonClassMap.RegisterClassMap <ReceiveTransferBlock>(); BsonClassMap.RegisterClassMap <OpenWithReceiveTransferBlock>(); BsonClassMap.RegisterClassMap <LyraTokenGenesisBlock>(); BsonClassMap.RegisterClassMap <TokenGenesisBlock>(); BsonClassMap.RegisterClassMap <TradeBlock>(); BsonClassMap.RegisterClassMap <TradeOrderBlock>(); BsonClassMap.RegisterClassMap <ExecuteTradeOrderBlock>(); BsonClassMap.RegisterClassMap <CancelTradeOrderBlock>(); BsonClassMap.RegisterClassMap <OpenWithReceiveFeeBlock>(); BsonClassMap.RegisterClassMap <ReceiveFeeBlock>(); BsonClassMap.RegisterClassMap <ConsolidationBlock>(); BsonClassMap.RegisterClassMap <ServiceBlock>(); BsonClassMap.RegisterClassMap <AuthorizationSignature>(); BsonClassMap.RegisterClassMap <NullTransactionBlock>(); _blocks = GetDatabase().GetCollection <Block>(_blocksCollectionName); Cluster = GetDatabase().Client.Cluster.ToString(); async Task CreateIndexes(string columnName, bool uniq) { try { var options = new CreateIndexOptions() { Unique = uniq }; var field = new StringFieldDefinition <Block>(columnName); var indexDefinition = new IndexKeysDefinitionBuilder <Block>().Ascending(field); var indexModel = new CreateIndexModel <Block>(indexDefinition, options); await _blocks.Indexes.CreateOneAsync(indexModel); } catch (Exception ex) { await _blocks.Indexes.DropOneAsync(columnName + "_1"); await CreateIndexes(columnName, uniq); } } async Task CreateNoneStringIndex(string colName, bool uniq) { try { var options = new CreateIndexOptions() { Unique = uniq }; IndexKeysDefinition <Block> keyCode = "{ " + colName + ": 1 }"; var codeIndexModel = new CreateIndexModel <Block>(keyCode, options); await _blocks.Indexes.CreateOneAsync(codeIndexModel); } catch (Exception ex) { await _blocks.Indexes.DropOneAsync(colName + "_1"); await CreateIndexes(colName, uniq); } } CreateIndexes("Hash", true).Wait(); CreateIndexes("Consolidated", false).Wait(); CreateIndexes("PreviousHash", false).Wait(); CreateIndexes("AccountID", false).Wait(); CreateNoneStringIndex("Height", false).Wait(); CreateNoneStringIndex("BlockType", false).Wait(); CreateIndexes("SourceHash", false).Wait(); CreateIndexes("DestinationAccountId", false).Wait(); CreateIndexes("Ticker", false).Wait(); }