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; }
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(); }
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 });
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"); }
/// <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(); }