-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
50 lines (39 loc) · 1.49 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.IO;
using System.Net.Http;
using BlockChain;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
namespace Miner
{
class Program
{
static void Main(string[] args)
{
while (true)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddUserSecrets("Miner")
.Build();
var nodeId = config["NodeId"];
var mineUrl = new Uri(args[0]);
var httpClient = new HttpClient();
var lastBlock = JsonConvert.DeserializeObject<Block>(httpClient
.GetAsync(mineUrl.AbsoluteUri + "api/mine").Result
.Content.ReadAsStringAsync().Result);
var random = new Random();
while (true)
{
var attempt = random.Next(int.MaxValue);
if (!Chain.ValidateProof(lastBlock, attempt)) continue;
var response = httpClient.PostAsync(mineUrl.AbsoluteUri + $"api/mine?proof={attempt}&nodeId={nodeId}", new StringContent(string.Empty)).Result;
if (!JsonConvert.DeserializeObject<bool>(response.Content.ReadAsStringAsync().Result)) continue;
Console.WriteLine("Success!");
break;
}
}
}
}
}