c# pow implementation work
This commit is contained in:
parent
499981ed52
commit
e9dbc9fa09
@ -21,7 +21,7 @@ namespace onionrpow_cli
|
|||||||
//stdout.Write(buffer, 0, bytes);
|
//stdout.Write(buffer, 0, bytes);
|
||||||
data.AddRange(buffer);
|
data.AddRange(buffer);
|
||||||
}
|
}
|
||||||
onionrpow.OnionrPow.compute(data.ToArray(), 3);
|
onionrpow.OnionrPow.compute(data.ToArray(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,55 +1,59 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using SHA3;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using SHA3;
|
||||||
|
|
||||||
namespace onionrpow
|
namespace onionrpow
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public class Meta{
|
||||||
|
public string ch { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Block{
|
||||||
|
public string meta { get; set; }
|
||||||
|
public string sig { get; set; }
|
||||||
|
public string signer { get; set; }
|
||||||
|
public int time;
|
||||||
|
|
||||||
|
private List<byte> data;
|
||||||
|
|
||||||
|
public void setData(List<byte> blockData){
|
||||||
|
this.data = blockData;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
public class OnionrPow
|
public class OnionrPow
|
||||||
{
|
{
|
||||||
public static void compute(byte[] data, int difficulty){
|
public static void compute(byte[] data, int difficulty){
|
||||||
using (var shaAlg = SHA3.Net.Sha3.Sha3256())
|
using (var shaAlg = SHA3.Net.Sha3.Sha3256())
|
||||||
{
|
{
|
||||||
// Replace beginning json with counter
|
string stringData = Encoding.UTF8.GetString(data);
|
||||||
|
bool found = false;
|
||||||
|
var justData = new List<byte>();
|
||||||
|
var metadataJson = new List<byte>();
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
var copy = new List<byte>();
|
foreach(char c in stringData){
|
||||||
|
if (found){
|
||||||
foreach(byte co in data){
|
justData.Add((byte) c);
|
||||||
if (counter < 1){
|
}
|
||||||
counter += 1;
|
else if (c == '\n'){
|
||||||
continue;
|
for (int i = 0; i < counter + 1; i++){
|
||||||
//copy.Add(Encoding.UTF8.GetBytes("{\"pow\": "))
|
metadataJson.Add(data[i]);
|
||||||
|
}
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//Console.WriteLine(c.ToString());
|
||||||
}
|
}
|
||||||
counter += 1;
|
counter += 1;
|
||||||
copy.Add(co);
|
|
||||||
}
|
}
|
||||||
int c = 0;
|
Block block = JsonConvert.DeserializeObject<Block>(Encoding.UTF8.GetString(metadataJson.ToArray()));
|
||||||
var copy2 = new List<byte>();
|
block.setData(justData);
|
||||||
while (true){
|
|
||||||
toploop:
|
|
||||||
c += 1;
|
|
||||||
var num = Encoding.UTF8.GetBytes("{\"pow\": " + c.ToString() + ",");
|
|
||||||
copy2.Clear();
|
|
||||||
copy2.AddRange(num);
|
|
||||||
copy2.AddRange(copy);
|
|
||||||
var hash = shaAlg.ComputeHash(copy2.ToArray());
|
|
||||||
|
|
||||||
int counter2 = 0;
|
|
||||||
foreach(byte one in hash){
|
|
||||||
if ((int) one != 0){
|
|
||||||
goto toploop;
|
|
||||||
}
|
|
||||||
counter2 += 1;
|
|
||||||
if (counter2 == difficulty){
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Console.WriteLine(Encoding.UTF8.GetString(copy2.ToArray()));
|
|
||||||
Console.WriteLine(BitConverter.ToString(hash));
|
|
||||||
Console.WriteLine(c);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//b'{"meta":"{\\"ch\\":\\"global\\",\\"type\\":\\"brd\\"}","sig":"pR4qmKGGCdnyNyZRlhGfF9GC7bONCsEnY04lTfiVuTHexPJypOqmxe9iyDQQqdR+PB2gwWuNqGMs5O8\\/S\\/hsCA==","signer":"UO74AP5LGQFI7EJTN6NAVINIPU2XO2KA7CAS6KSWGWAY5XIB5SUA====","time":1600542238,"pow":300182}\nxcvxcvvxcxcv'
|
//b'{"meta":"{\\"ch\\":\\"global\\",\\"type\\":\\"brd\\"}","sig":"pR4qmKGGCdnyNyZRlhGfF9GC7bONCsEnY04lTfiVuTHexPJypOqmxe9iyDQQqdR+PB2gwWuNqGMs5O8\\/S\\/hsCA==","signer":"UO74AP5LGQFI7EJTN6NAVINIPU2XO2KA7CAS6KSWGWAY5XIB5SUA====","time":1600542238,"pow":300182}\nxcvxcvvxcxcv'
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||||
<PackageReference Include="SHA3.Net" Version="1.2.3" />
|
<PackageReference Include="SHA3.Net" Version="1.2.3" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
1
pow-csharp/test.py
Normal file
1
pow-csharp/test.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
print('{"meta":"{\\"ch\\":\\"global\\",\\"type\\":\\"brd\\"}","sig":"pR4qmKGGCdnyNyZRlhGfF9GC7bONCsEnY04lTfiVuTHexPJypOqmxe9iyDQQqdR+PB2gwWuNqGMs5O8\\/S\\/hsCA==","signer":"UO74AP5LGQFI7EJTN6NAVINIPU2XO2KA7CAS6KSWGWAY5XIB5SUA====","time":1600542238,"pow":300182}\nxcvxcvvxcxcv')
|
Loading…
Reference in New Issue
Block a user