示例#1
0
        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();
        }
示例#3
0
 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;
        }
示例#6
0
        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);
        }
示例#8
0
        //public Dictionary<string, string> TokenGenesisBlocks { get; set; }

        public ServiceAccount(IActorRef blockChain, Wallet svcWallet)
        {
            _blockChain = blockChain;
            _svcWallet  = svcWallet;
            _config     = Neo.Settings.Default.LyraNode;
        }
示例#9
0
        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();
        }