123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using System;
- using System.Text;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- using Newtonsoft.Json;
- namespace HyperCube.Models
- {
- public class Blockchain
- {
- public static bool newData = false;
- public static List<Blockchain> loaded = new List<Blockchain>();
- public int port;
- public string url;
- public string address;
- public string name;
- Blockchain()
- {
- }
- public Blockchain(string url, int port)
- {
- this.url = url;
- this.port = port;
- }
- public static string bin2hex(string code)
- {
-
- var bytes = Encoding.UTF8.GetBytes(code);
- var hex = BitConverter.ToString(bytes).Replace("-", "");
- Console.WriteLine("hex " + hex);
- return "0x"+hex;
- }
- public async Task<string> GetSHA3(string code)
- {
- var hex = bin2hex(code);
- var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"web3_sha3\",\"params\":[\"{hex}\"], \"id\":1}}";
- var answer = await Post.PostRequestAsync(req);
-
- Console.WriteLine("result " + answer);
- return answer;
- }
- public async Task<string> RunContract(string contractAddress, string data)
- {
- Console.WriteLine("RunContract contractAddress " + contractAddress);
- var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{{\"from\":\"{address}\",\"to\":\"{contractAddress}\",\"gas\":\"0x31b2e\", \"data\":\"{data}\"}}], \"id\":1}}";
- var answer = await Post.PostRequestAsync(req);
- dynamic jsonDe = JsonConvert.DeserializeObject(answer);
- Console.WriteLine("result " + answer);
- return contractAddress;
- }
- public async Task<string> GetReceipt(string transactionAddress)
- {
- Console.WriteLine("transactionAddress " + transactionAddress);
- var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionReceipt\",\"params\":[\"{transactionAddress}\"], \"id\":1}}";
- var answer = await Post.PostRequestAsync(req);
- dynamic jsonDe = JsonConvert.DeserializeObject(answer);
- var blockHash = jsonDe.result.blockHash;
- var blockNumber = jsonDe.result.blockNumber;
- var contractAddress = jsonDe.result.contractAddress;
- Console.WriteLine("result " + answer);
- return contractAddress;
- }
- public async Task<string> Initialize()
- {
- await ListAccounts();
- if (!loaded.Contains(this))
- loaded.Add(this);
- Console.WriteLine("loaded blockchains " + loaded.Count);
- return $"Blockchain connected: {url}";
- }
- public async void GetGas(string bytecode)
- {
- }
- public async Task<string> AddContract(string bytecode)
- {
- Console.WriteLine("bytecode " + bytecode);
- var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{{\"from\":\"{address}\",\"gas\":\"0x31b2e\", \"data\":\"{bytecode}\"}}], \"id\":1}}";
- var answer = await Post.PostRequestAsync(req);
- dynamic jsonDe = JsonConvert.DeserializeObject(answer);
- var res = jsonDe.result;
- Console.WriteLine("result AddContract transactionAddress: " + res);
- return res;
- }
- public async Task ListAccounts()
- {
- string answer = "no";
-
-
- string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\", \"params\":[],\"id\":1}";
- answer = await Post.PostRequestAsync(req);
-
-
-
- Console.WriteLine("Json string " + answer);
- dynamic jsonDe = JsonConvert.DeserializeObject(answer);
- address = jsonDe.result[0];
- Console.WriteLine("Json addr " + jsonDe.result[0]);
- var methodName = (string)jsonDe.name;
- newData = true;
- }
- public async void ExecuteContract()
- {
- string answer = "no";
- string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x874c6a51e62680d4594cd2555ed8fa47b63ed253\", \"data\":\"0xa87d942c\"},\"latest\"],\"id\":1}";
-
-
- await Post.PostRequestAsync(req);
-
- address = answer;
- }
- public string GetAddress()
- {
-
- return address;
-
- }
- }
- }
|