Ejemplo n.º 1
0
        public void Initialize()
        {
            //byte[] hash = ServiceLocator.Current.GetInstance<IHashCalculationsRepository>().Create(Globals.DEFAULT_HASH).CalculateHash("ffff440000000000000000000000ff56614220131d2a562741432675d1cc32c9aad819f1eca40100ffff4500000000000000085c384c05bbf1b93754c5903014f9b9519f753f773b156ed7611dc5067bb82f00000000000000000100002c1130afeeab4855bc0224e5a7a4fd719d74407443b578789cc87f93a2ac350d093a5618c9e82dec81e38bb019e720295490b1d92f0870edc3b6516fe0bd99015f109903b082d45d58e4af08e637d17cac12b7f592367f4f2dc1378173f4d6f7".HexStringToByteArray());
            //byte[] pow = ServiceLocator.Current.GetInstance<IHashCalculationsRepository>().Create(Globals.POW_TYPE).CalculateHash(hash);
            //BigInteger big = new BigInteger("05BED0C6BFC7ACAD4202A26EDFC83843B7745AE5CB8FA038B6815C7D5EFFBBFF".HexStringToByteArray());
            //big = 0 - big;
            //uint nonce = 0;
            //big += nonce;
            //byte[] bigBytes = big.ToByteArray();
            Channel syncChannel          = new Channel("127.0.0.1", 5050, ChannelCredentials.Insecure);
            Channel transactionalChannel = new Channel("127.0.0.1", 5050, ChannelCredentials.Insecure);

            _syncManagerClient         = new SyncManager.SyncManagerClient(syncChannel);
            _transactionalChainManager = new TransactionalChainManager.TransactionalChainManagerClient(transactionalChannel);
        }
Ejemplo n.º 2
0
        public void Initialize(CancellationToken cancellationToken)
        {
            if (_isInitialized)
            {
                return;
            }

            lock (_sync)
            {
                if (_isInitialized)
                {
                    return;
                }

                _logger.Info("Initialization Started");

                try
                {
                    _communicationService.Init(new Network.Communication.SocketSettings(_communicationConfiguration.MaxConnections, _communicationConfiguration.ReceiveBufferSize, _communicationConfiguration.ListeningPort, System.Net.Sockets.AddressFamily.InterNetwork));

                    if (_dataAccessService.GetLastSyncBlock(out ulong syncBlockHeight, out byte[] syncBlockHash))
                    {
                        _lastSyncDescriptor = new Entities.SyncBlockDescriptor(syncBlockHeight, syncBlockHash);
                    }
                    else
                    {
                        _lastSyncDescriptor = new Entities.SyncBlockDescriptor(0, new byte[32]);
                    }

                    if (_dataAccessService.GetLastRegistryCombinedBlock(out ulong combinedBlockHeight, out byte[] combinedBlockContent))
                    {
                        _lastCombinedBlockDescriptor = new RegistryCombinedBlockDescriptor(combinedBlockHeight, combinedBlockContent, _defaultHashCalculation.CalculateHash(combinedBlockContent));
                    }
                    else
                    {
                        _lastCombinedBlockDescriptor = new RegistryCombinedBlockDescriptor(0, null, new byte[32]);
                    }

                    foreach (string nodeDescriptor in _synchronizerConfiguration.Nodes)
                    {
                        string[]    pair        = nodeDescriptor.Split(':');
                        byte[]      keyBytes    = pair[0].HexStringToByteArray();
                        IKey        nodeKey     = _identityKeyProvider.GetKey(keyBytes);
                        IPAddress   ipAddress   = IPAddress.Parse(pair[1]);
                        NodeAddress nodeAddress = new NodeAddress(nodeKey, ipAddress);
                        _nodesResolutionService.UpdateSingleNode(nodeAddress);
                    }

                    IKey syncNodeKey = _identityKeyProvider.GetKey(_synchronizerConfiguration.SyncNodeKey.HexStringToByteArray());
                    _registryNodeKey = _identityKeyProvider.GetKey(_synchronizerConfiguration.RegistryNodeKey.HexStringToByteArray());
                    _storageNodeKey  = _identityKeyProvider.GetKey(_synchronizerConfiguration.StorageNodeKey.HexStringToByteArray());

                    IPAddress syncNodeAddress    = _nodesResolutionService.ResolveNodeAddress(syncNodeKey);
                    IPAddress storageNodeAddress = _nodesResolutionService.ResolveNodeAddress(_storageNodeKey);

                    Channel syncLayerChannel    = new Channel(syncNodeAddress.ToString(), 5050, ChannelCredentials.Insecure);
                    Channel storageLayerChannel = new Channel(storageNodeAddress.ToString(), 5050, ChannelCredentials.Insecure);

                    _syncLayerSyncManagerClient    = new SyncManager.SyncManagerClient(syncLayerChannel);
                    _storageLayerSyncManagerClient = new TransactionalChainManager.TransactionalChainManagerClient(storageLayerChannel);


                    _cancellationToken = cancellationToken;
                    _isInitialized     = true;

                    _logger.Info($"Last Sync Block Height = {_lastSyncDescriptor.Height}; Last Registry Combined Block Height = {_lastCombinedBlockDescriptor.Height}");
                }
                catch (Exception ex)
                {
                    _logger.Error("Failure during initializtion", ex);
                }
                finally
                {
                    _logger.Info("Initialization completed");
                }
            }
        }
Ejemplo n.º 3
0
        public override void Start()
        {
            string  cmd     = null;
            Channel channel = new Channel("127.0.0.1", 5050, ChannelCredentials.Insecure);

            SyncManager.SyncManagerClient syncManagerClient = new SyncManager.SyncManagerClient(channel);
            TransactionalChainManager.TransactionalChainManagerClient transactionalChainManagerClient = new TransactionalChainManager.TransactionalChainManagerClient(channel);
            TransactionalBlockEssense transactionalBlockEssense = transactionalChainManagerClient.GetLastTransactionalBlock(
                new TransactionalBlockRequest {
                PublicKey = ByteString.CopyFrom(_key.Value.ToArray())
            });

            byte[] hashPrev      = transactionalBlockEssense.Hash.ToByteArray();
            ulong  blockHeight   = transactionalBlockEssense.Height + 1;
            ulong  uptodateFunds = transactionalBlockEssense.UpToDateFunds > 0 ? transactionalBlockEssense.UpToDateFunds : 100000;
            ulong  tagId         = 5005;

            byte[][] idCards = new byte[][]
            {
                GetComplementedAssetId(327483038),
                GetComplementedAssetId(327152054),
                GetComplementedAssetId(328051065),
            };

            string[] assetInfos = new string[]
            {
                "Kirill Gandyl",
                "Elena Zaychikov",
                "Etel Gandyl"
            };

            do
            {
                SyncBlockDescriptor lastSyncBlock = syncManagerClient.GetLastSyncBlock(new Empty());
                byte[] syncHash      = lastSyncBlock.Hash.ToByteArray();
                uint   nonce         = 1111;
                byte[] powHash       = GetPowHash(syncHash, nonce);
                byte[] targetAddress = new byte[32];

                IssueAssetsBlock issueAssetsBlock = new IssueAssetsBlock
                {
                    SyncBlockHeight = lastSyncBlock.Height,
                    BlockHeight     = blockHeight,
                    Nonce           = nonce,
                    PowHash         = powHash,
                    HashPrev        = hashPrev,
                    TagId           = tagId,
                    IssuanceInfo    = "Issue ID cards",
                    IssuedAssetIds  = idCards,
                    IssuedAssetInfo = assetInfos
                };

                ISerializer issueAssetsBlockSerializer = _signatureSupportSerializersFactory.Create(issueAssetsBlock);
                issueAssetsBlockSerializer.FillBodyAndRowBytes();

                RegistryRegisterBlock transactionRegisterBlock = new RegistryRegisterBlock
                {
                    SyncBlockHeight      = lastSyncBlock.Height,
                    BlockHeight          = blockHeight,
                    Nonce                = nonce,
                    PowHash              = powHash,
                    ReferencedPacketType = PacketType.Transactional,
                    ReferencedBlockType  = BlockTypes.Transaction_TransferFunds,
                    ReferencedBodyHash   = _hashCalculation.CalculateHash(issueAssetsBlock.RawData),
                    ReferencedTarget     = targetAddress
                };

                ISerializer transactionRegisterBlockSerializer = _signatureSupportSerializersFactory.Create(transactionRegisterBlock);

                _log.Info($"Sending message: {transactionRegisterBlockSerializer.GetBytes().ToHexString()}");

                _communicationService.PostMessage(_keyTarget, transactionRegisterBlockSerializer);
                _communicationService.PostMessage(_keyTarget, issueAssetsBlockSerializer);

                Console.WriteLine("Block sent. Press <Enter> for next or type 'exit' and press <Enter> for exit...");
                cmd = Console.ReadLine();

                blockHeight++;
                hashPrev = transactionRegisterBlock.ReferencedBodyHash;
            } while (!_cancellationToken.IsCancellationRequested && cmd != "exit");
        }
Ejemplo n.º 4
0
        public override void Start()
        {
            string  cmd     = null;
            Channel channel = new Channel("127.0.0.1", 5050, ChannelCredentials.Insecure);

            SyncManager.SyncManagerClient syncManagerClient = new SyncManager.SyncManagerClient(channel);
            TransactionalChainManager.TransactionalChainManagerClient transactionalChainManagerClient = new TransactionalChainManager.TransactionalChainManagerClient(channel);
            TransactionalBlockEssense transactionalBlockEssense = transactionalChainManagerClient.GetLastTransactionalBlock(
                new TransactionalBlockRequest {
                PublicKey = ByteString.CopyFrom(_key.Value.ToArray())
            });

            byte[] hashPrev      = transactionalBlockEssense.Hash.ToByteArray();
            ulong  blockHeight   = transactionalBlockEssense.Height + 1;
            ulong  uptodateFunds = transactionalBlockEssense.UpToDateFunds > 0 ? transactionalBlockEssense.UpToDateFunds : 100000;

            do
            {
                SyncBlockDescriptor lastSyncBlock = syncManagerClient.GetLastSyncBlock(new Empty());
                uptodateFunds -= 10;
                byte[] syncHash      = lastSyncBlock.Hash.ToByteArray();
                uint   nonce         = 1111;
                byte[] powHash       = GetPowHash(syncHash, nonce);
                byte[] targetAddress = GetRandomTargetAddress();

                TransferFundsBlock transferFundsBlock = new TransferFundsBlock
                {
                    SyncBlockHeight    = lastSyncBlock.Height,
                    BlockHeight        = blockHeight,
                    Nonce              = nonce,
                    PowHash            = powHash,
                    HashPrev           = hashPrev,
                    TargetOriginalHash = targetAddress,
                    UptodateFunds      = uptodateFunds
                };

                ISerializer transferFundsSerializer = _signatureSupportSerializersFactory.Create(transferFundsBlock);
                transferFundsSerializer.FillBodyAndRowBytes();

                RegistryRegisterBlock transactionRegisterBlock = new RegistryRegisterBlock
                {
                    SyncBlockHeight      = lastSyncBlock.Height,
                    BlockHeight          = blockHeight,
                    Nonce                = nonce,
                    PowHash              = powHash,
                    ReferencedPacketType = PacketType.Transactional,
                    ReferencedBlockType  = BlockTypes.Transaction_TransferFunds,
                    ReferencedBodyHash   = _hashCalculation.CalculateHash(transferFundsBlock.RawData),
                    ReferencedTarget     = targetAddress
                };

                ISerializer transactionRegisterBlockSerializer = _signatureSupportSerializersFactory.Create(transactionRegisterBlock);

                _log.Info($"Sending message: {transactionRegisterBlockSerializer.GetBytes().ToHexString()}");

                _communicationService.PostMessage(_keyTarget, transactionRegisterBlockSerializer);
                _communicationService.PostMessage(_keyTarget, transferFundsSerializer);

                Console.WriteLine("Block sent. Press <Enter> for next or type 'exit' and press <Enter> for exit...");
                cmd = Console.ReadLine();

                blockHeight++;
                hashPrev = transactionRegisterBlock.ReferencedBodyHash;
            } while (!_cancellationToken.IsCancellationRequested && cmd != "exit");
        }