Esempio n. 1
0
        public NetworkManager(CancellationToken token, BlockchainManager bm)
        {
            var tokenSource = new CancellationTokenSource();

            _server           = new Server(tokenSource);
            BlockchainManager = bm;
            token.Register(Dispose);
        }
 public Flight(BlockchainManager blockchain_manager)
 //public Flight(Web3Geth web3geth, BlockchainSettings settings)
 {
     _blockchain_manager = blockchain_manager;
     _web3geth           = blockchain_manager.Web3Geth;
     _settings           = blockchain_manager.Settings;
     _logger             = blockchain_manager.Logger;
 }
Esempio n. 3
0
        public void Execute(CancellationToken token)
        {
            var txs     = BlockchainManager.GetPool();
            var time    = DateTime.UtcNow;
            var subsidy = BlockchainManager.GetSubsidy(BlockchainManager.Chain.Count);

            var txList = txs.Where(tx =>
            {
                try
                {
                    token.ThrowIfCancellationRequested();
                    BlockchainManager.VerifyTransaction(tx, time);
                    subsidy += tx.TransactionFee;
                    return(true);
                }
                catch
                {
                    return(false);
                }
            }).ToList();

            var cbOut = new Output()
            {
                Amount        = subsidy,
                PublicKeyHash = MinerKeyHash.Bytes
            };
            var tb = new TransactionBuilder(new List <Output>()
            {
                cbOut
            }, new List <Input>());
            var coinbaseTx = tb.ToTransaction(time);

            BlockchainManager.VerifyTransaction(coinbaseTx, time, subsidy);
            txList.Insert(0, coinbaseTx);

            var txIds = txList.Select(x => x.Id).ToList();

            var block = new Block()
            {
                PreviousBlockHash = BlockchainManager.Chain.Last().Id,
                Transactions      = txList,
                MerkleRootHash    = HashUtil.ComputeMerkleRootHash(txIds),
                Bits = Difficulty.DifficultyBits
            };

            if (!Mining(block, token))
            {
                return;
            }

            _logger.LogInformation($"Mined");
            _logger.LogInformation($"{JsonSerializer.PrettyPrint(JsonSerializer.Serialize(block))}");

            //Broadcast Block
        }
        public void InitializeBlockManager()
        {
            if (Blockchain != null)
            {
                return;
            }

            string guid       = @"qwertyuiop";
            string passmain   = @"qwertyuiop";
            string passsecond = @"qwertyuiop";

            Blockchain = new BlockchainManager(guid, passmain, passsecond);
        }
        public MainWindow(Boolean useTestnet)
        {
            InitializeComponent();

            ConnectionListBox.SelectionChanged +=
                new SelectionChangedEventHandler(HandleConnectionSelectionChanged);
            ConnectionMessagesOutListBox.SelectionChanged +=
                new SelectionChangedEventHandler(HandleMessagesOutSelectionChanged);
            ConnectionMessagesInListBox.SelectionChanged +=
                new SelectionChangedEventHandler(HandleMessagesInSelectionChanged);

            Blockchains = new BlockchainManager();
            Blockchains.NewBlockchain += new EventHandler <NewBlockchainEventArgs>(HandleNewBlockchain);
            Blockchains.NewBestBlock  += new EventHandler <NewBestBlockEventArgs>(HandleNewBestBlock);

            NetworkConfiguration networkConfig;

            if (useTestnet)
            {
                networkConfig = new NetworkConfiguration(
                    defaultPort: 9913,
                    magic: 0xC3CBFEFB,
                    dnsSeed: "tseed.primecoin.me",
                    minimumChainLength: 2,
                    maximumChainLength: 99,
                    minimumHeaderHash: new BigInteger(1) << 255,
                        minimumChainOrigin: new BigInteger(1) << 255,
                        maximumChainOrigin: new BigInteger(1) << 2000 - 1
                    );
            }
            else
            {
                networkConfig = new NetworkConfiguration(
                    defaultPort: 9911,
                    magic: 0xE7E5E7E4,
                    dnsSeed: "seed.primecoin.me",
                    minimumChainLength: 6,
                    maximumChainLength: 99,
                    minimumHeaderHash: new BigInteger(1) << 255,
                        minimumChainOrigin: new BigInteger(1) << 255,
                        maximumChainOrigin: new BigInteger(1) << 2000 - 1
                    );
            }
            Connections = new ConnectionManager(networkConfig);
            Connections.NewConnection += new EventHandler <NewConnectionEventArgs>(Blockchains.HandleNewConnection);
            Connections.NewConnection += new EventHandler <NewConnectionEventArgs>(HandleNewConnection);

            Connections.Start();
        }
Esempio n. 6
0
 Task MessageHandle(IPEndPoint endPoint, Message msg)
 {
     return(msg.Type switch
     {
         MessageType.HandShake => HandShakeHandle(endPoint, Deserialize <HandShake>(msg.Payload)),
         MessageType.Addr => AddrHandle(Deserialize <AddrPayload>(msg.Payload)),
         MessageType.Inventory => Task.CompletedTask,
         MessageType.NewTransaction => BlockchainManager.NewTransactionHandle(Deserialize <NewTransaction>(msg.Payload)),
         MessageType.NewBlock => BlockchainManager.NewBlockHandle(Deserialize <NewBlock>(msg.Payload), endPoint, Port),
         MessageType.FullChain => BlockchainManager.ReceiveFullChain(msg, endPoint),
         MessageType.RequestFullChain => BlockchainManager.SendFullChain(endPoint, Port),
         MessageType.Notice => Task.CompletedTask,
         MessageType.Ping => Task.CompletedTask,
         MessageType.SurfaceHandShake => Task.CompletedTask,
         _ => Task.CompletedTask
     });
Esempio n. 7
0
        public Web3GethService(IConfiguration configuration, ILogger <Web3GethService> logger)
        {
            _settings = configuration.GetSection("BlockchainSettings").Get <BlockchainSettings>();
            _logger   = logger;

            string sender_address = _settings.default_sender_address;
            string password       = _settings.default_sender_password;

            // you can instantiate Web3 with an Account(privateKey) which will send the transaction for you
            _web3geth = new Web3Geth(new ManagedAccount(sender_address, password), ClientFactory.GetClient(_settings.rpcapi_host));

            _blockchain_manager = new BlockchainManager(_web3geth, _settings, _logger);
            _flight             = new Flight(_blockchain_manager);
            _policy             = new Policy(_blockchain_manager);

            _logger.LogDebug("Initialized: Web3GethService");
        }
Esempio n. 8
0
        /// <summary>
        /// Main function
        /// </summary>
        public static void Main()
        {
            //generate block1
            var block1 = BlockchainManager.GenerateNextBlock("test1");

            Console.WriteLine($"Block {block1.Hash} generated with data \"{block1.Data}\"");

            //generate block2
            var block2 = BlockchainManager.GenerateNextBlock("test2");

            Console.WriteLine($"Block {block2.Hash} generated with data \"{block2.Data}\"");

            //dump and output all data
            var allBlocks = BlockchainManager.DumpBlockchain();

            Console.WriteLine();
            Console.WriteLine("Dump:");
            foreach (var b in allBlocks)
            {
                Console.WriteLine($"{b.Hash}: \"{b.Data}\"");
            }

            Console.ReadLine();
        }
        public void Mining()
        {
            var(privateKey, publicKey) = SignManager.GenerateKeys();
            var publickKeyHash = new HexString(HashUtil.RIPEMD_SHA256(publicKey));
            //Genesis Mining
            var genesis = BlockchainManager.CreateGenesis();
            var miner   = new Miner
            {
                MinerKeyHash = publickKeyHash
            };

            Console.WriteLine("Mining");
            miner.Mining(genesis, Context.CancellationToken);
            BlockchainManager.Chain.Add(genesis);


            for (var i = 0; i < 10; i++)
            {
                var gg = BlockchainManager.CreateCoinBaseTransaction(i + 1, publickKeyHash.Bytes, $"まかろに{i}");
                gg.TimeStamp = DateTime.UtcNow;
                var txs = new List <Transaction>()
                {
                    gg
                };
                var rootHash = HashUtil.ComputeMerkleRootHash(txs.Select(x => x.Id).ToList());

                var b = new Block()
                {
                    PreviousBlockHash = BlockchainManager.Chain.Last().Id,
                    Transactions      = txs,
                    MerkleRootHash    = rootHash,
                    Timestamp         = DateTime.UtcNow,
                    Bits = 1
                };
                miner.Mining(b, Context.CancellationToken);
                BlockchainManager.Chain.Add(b);
                Task.Delay(10).GetAwaiter().GetResult();
            }

            //Second Block Mining
            Console.WriteLine($"{genesis.Transactions.Count}");
            var tb  = new TransactionBuilder();
            var ttx = BlockchainManager.Chain.SelectMany(x => x.Transactions).First(x => x.Engraving == "まかろに0");

            var input = new Input()
            {
                TransactionId = ttx.Id,
                OutputIndex   = 0,
            };
            var output = new Output()
            {
                Amount        = 10,
                PublicKeyHash = publickKeyHash.Bytes
            };

            tb.Inputs.Add(input);
            tb.Outputs.Add(output);
            var tx = tb.ToSignedTransaction(privateKey, publicKey);

            BlockchainManager.TransactionPool.Add(tx);
            miner.Start();

            Console.WriteLine($"{BlockchainManager.VerifyBlockchain()} : OK");
            Console.ReadLine();
        }