Blockchain.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Newtonsoft.Json;
  7. namespace HyperCube.Models
  8. {
  9. public class Blockchain
  10. {
  11. public static bool newData = false;
  12. public static List<Blockchain> loaded = new List<Blockchain>();
  13. public int port;
  14. public string url;
  15. public string address;
  16. public string name;
  17. Blockchain()
  18. {
  19. }
  20. public Blockchain(string url, int port)
  21. {
  22. this.url = url;
  23. this.port = port;
  24. }
  25. public async Task<string> RunContract(string contractAddress, string data)
  26. {
  27. Console.WriteLine("RunContract contractAddress " + contractAddress);
  28. var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{{\"from\":\"{address}\",\"to\":\"{contractAddress}\",\"gas\":\"0x31b2e\", \"data\":\"{data}\"}}], \"id\":1}}";
  29. var answer = await Post.PostRequestAsync(req);
  30. dynamic jsonDe = JsonConvert.DeserializeObject(answer);
  31. Console.WriteLine("result " + answer);
  32. return contractAddress;
  33. }
  34. public async Task<string> GetReceipt(string transactionAddress)
  35. {
  36. Console.WriteLine("transactionAddress " + transactionAddress);
  37. var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionReceipt\",\"params\":[\"{transactionAddress}\"], \"id\":1}}";
  38. var answer = await Post.PostRequestAsync(req);
  39. dynamic jsonDe = JsonConvert.DeserializeObject(answer);
  40. var blockHash = jsonDe.result.blockHash;
  41. var blockNumber = jsonDe.result.blockNumber;
  42. var contractAddress = jsonDe.result.contractAddress;
  43. Console.WriteLine("result " + answer);
  44. return contractAddress;
  45. }
  46. public async Task<string> Initialize()
  47. {
  48. await ListAccounts();
  49. if (!loaded.Contains(this))
  50. loaded.Add(this);
  51. Console.WriteLine("loaded blockchains " + loaded.Count);
  52. return $"Blockchain connected: {url}";
  53. }
  54. public async void GetGas(string bytecode)
  55. {
  56. }
  57. public async Task<string> AddContract(string bytecode)
  58. {
  59. Console.WriteLine("bytecode " + bytecode);
  60. var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{{\"from\":\"{address}\",\"gas\":\"0x31b2e\", \"data\":\"{bytecode}\"}}], \"id\":1}}";
  61. var answer = await Post.PostRequestAsync(req);
  62. dynamic jsonDe = JsonConvert.DeserializeObject(answer);
  63. var res = jsonDe.result;
  64. Console.WriteLine("result AddContract transactionAddress: " + res);
  65. return res;
  66. }
  67. public async Task ListAccounts()
  68. {
  69. string answer = "no";
  70. //{ "jsonrpc":"2.0","method":"eth_getCode","params":["0x938cae6f6c21ed9d55196e96ef880f562e530553", "latest" ],"id":1}
  71. //string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":[\"0x874c6a51e62680d4594cd2555ed8fa47b63ed253\",\"latest\"],\"id\":1}";
  72. string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\", \"params\":[],\"id\":1}";
  73. answer = await Post.PostRequestAsync(req);
  74. //string json = Encoding.UTF8.GetString(bytedata, 1, bytedata.Length - 1);
  75. //try
  76. //{
  77. Console.WriteLine("Json string " + answer);
  78. dynamic jsonDe = JsonConvert.DeserializeObject(answer);
  79. address = jsonDe.result[0];
  80. Console.WriteLine("Json addr " + jsonDe.result[0]);
  81. var methodName = (string)jsonDe.name;
  82. newData = true;
  83. }
  84. public async void ExecuteContract()
  85. {
  86. string answer = "no";
  87. string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x874c6a51e62680d4594cd2555ed8fa47b63ed253\", \"data\":\"0xa87d942c\"},\"latest\"],\"id\":1}";
  88. //string req = "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0x0000000000000000000000000000000000000000000000000000000000000004\"}";
  89. //Console.WriteLine($"req " + req);
  90. await Post.PostRequestAsync(req);
  91. //Console.WriteLine($"answer {answer} len {answer.Length}" );
  92. address = answer;
  93. }
  94. public string GetAddress()
  95. {
  96. //this.address = address;
  97. return address;
  98. //post запрос
  99. }
  100. }
  101. }