using System.Text.Json.Nodes;
using System.Collections.Generic;
using Nethereum.Hex.HexConvertors.Extensions;
public int NewAccountID { get; set; }
public string? PubKey { get; set; }
public bool IsETH { get; set; }
public int UserID { get; set; }
public int NodeID { get; set; }
public DateTime CreatedByUser { get; set; }
public static byte[] StringToByteArray(string hex)
return Enumerable.Range(0, hex.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(hex.Substring(x, 2), 16)).ToArray();
public static void Main()
Console.OutputEncoding = System.Text.Encoding.UTF8;
string jsonString = @"{""NewAccountID"":5,""PubKey"":""BCT4ALtlDp9SkeQaN9SsLm2rcnhC8IAAwFqHbOYiR2U2vRusCalc2WTyvYjfzcVEv6zWXV+4WDXqgcwSCjVrUNo="",""IsETH"":true,""UserID"":4,""NodeID"":1,""CreatedByUser"":""2022-07-19T02:31:42.4757528Z""}";
JsonNode dataNode = JsonNode.Parse(jsonString)!;
Data? dataObject = JsonConvert.DeserializeObject<Data>(jsonString);
Console.WriteLine($"Object: {jsonString}");
var address = "0xd864e8c9Eb1525a759503F03aCF03149d344E671";
var privateKey = "0xfaa4bff60e5aca00877a3511da0c56f4caa3047e1987df5879ce4ed3a8c373ea";
Console.WriteLine($"Address {address} with private key: {privateKey}");
var messageToSign = JsonConvert.SerializeObject(dataObject);
Console.WriteLine($"Message to be sign: {messageToSign})");
Console.WriteLine($"Test between serialization and static string: {String.Compare(jsonString, messageToSign)}");
var signer = new EthereumMessageSigner();
var signature = signer.EncodeUTF8AndSign(messageToSign, new EthECKey(privateKey));
Console.WriteLine($"Signature: {signature}");
var signatureBase64 = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(signature.Substring(2)));
Console.WriteLine($"Signature in base64: {signatureBase64}");
var addressRecovered = signer.EncodeUTF8AndEcRecover(messageToSign, signature);
Console.WriteLine($"Address recovered: {addressRecovered}");
var privKey4 = new Nethereum.Signer.EthECKey(StringToByteArray(privateKey.Substring(2)), true);
var sign = privKey4.Sign(Encoding.UTF8.GetBytes("teste e teste"));
var signByte = sign.ToDER();
Console.WriteLine($"The signByte data in base64: {Convert.ToBase64String(signByte)}");
var publicKeyNC = "0x0424f800bb650e9f5291e41a37d4ac2e6dab727842f08000c05a876ce622476536bd1bac09a95cd964f2bd88dfcdc544bfacd65d5fb85835ea81cc120a356b50da";
var newpubkey = new Nethereum.Signer.EthECKey(publicKeyNC.HexToByteArray(), false);
var signx = new Nethereum.Signer.EthECDSASignature(signByte);
var contbytes = Encoding.UTF8.GetBytes("teste e teste");
var test = newpubkey.Verify(contbytes, signx);
Console.WriteLine($"The result from Verify: {test}");
var ecdsaSignature = MessageSigner.ExtractEcdsaSignature(signature);
var ecdsaSignatureByte = ecdsaSignature.ToDER();
Console.WriteLine($"The signByte data in base64: {Convert.ToBase64String(ecdsaSignatureByte)}");
var ethereumMessageSigner = new EthereumMessageSigner();
var hashMessage100 = ethereumMessageSigner.HashPrefixedMessage(Encoding.UTF8.GetBytes(messageToSign));
var ecdaSignature100 = MessageSigner.ExtractEcdsaSignature(signature);
var publicAddress100 = EthECKey.RecoverFromSignature(ecdaSignature100, hashMessage100).GetPublicAddress();
var pubKey100 = EthECKey.RecoverFromSignature(ecdaSignature100, hashMessage100).GetPubKey();
Console.WriteLine($"Public Address: {publicAddress100}");
Console.WriteLine($"Public Key: {Convert.ToHexString(pubKey100)}");
var signx1 = new Nethereum.Signer.EthECDSASignature(ecdsaSignatureByte);
var contbytes1 = ethereumMessageSigner.HashPrefixedMessage(Encoding.UTF8.GetBytes(messageToSign));
Console.WriteLine($"Message to be sign using base64: {Convert.ToBase64String(Encoding.UTF8.GetBytes(messageToSign))}");
var test1 = newpubkey.Verify(contbytes1, signx1);
Console.WriteLine($"The result from Verify: {test1}");