Pārlūkot izejas kodu

начал загрузку смартконтрактов из базы

Rimmon 4 gadi atpakaļ
vecāks
revīzija
9c358d3116
4 mainītis faili ar 82 papildinājumiem un 23 dzēšanām
  1. 33 21
      Models/Blockchain.cs
  2. 3 1
      Models/SmartContract.cs
  3. 29 0
      MySQLConnector.cs
  4. 17 1
      Pages/Blockchains.razor

+ 33 - 21
Models/Blockchain.cs

@@ -10,7 +10,8 @@ namespace HyperCube.Models
     public class Blockchain
     {
         public static bool newData = false;
-        public static List<Blockchain> loaded = new List<Blockchain>();
+        public static List<Blockchain> loaded = new();
+        public Dictionary<int, SmartContract> contracts = new();
         public int port;
         public string url;
         public string address;
@@ -35,6 +36,24 @@ namespace HyperCube.Models
             return "0x"+hex;
         }
 
+        public async Task<string> Initialize()
+        {
+            await ListAccounts();
+            if (!loaded.Contains(this))
+                loaded.Add(this);
+            Console.WriteLine("loaded blockchains " + loaded.Count);
+
+            LoadContracts();
+
+            return $"Blockchain connected: {url}";
+        }
+
+        public async Task LoadContracts()
+        {
+            MySQLConnector dbCon = MySQLConnector.Instance();
+            contracts = await dbCon.SQLSelectContracts();
+        }
+
         public async Task<string> GetSHA3(string code)
         {
             var hex = bin2hex(code);
@@ -47,7 +66,18 @@ namespace HyperCube.Models
             return answer;
         }
 
-        public async Task<string> RunContract(string contractAddress, string data)
+        public async void RunContractRead()
+        {
+            string answer = "no";
+            string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0x874c6a51e62680d4594cd2555ed8fa47b63ed253\", \"data\":\"0xa87d942c\"},\"latest\"],\"id\":1}";
+            //string req = "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0x0000000000000000000000000000000000000000000000000000000000000004\"}";
+            //Console.WriteLine($"req " + req);
+            await Post.PostRequestAsync(req);
+            //Console.WriteLine($"answer {answer} len {answer.Length}" );
+            address = answer;
+        }
+
+        public async Task<string> RunContractWrite(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}}";
@@ -75,14 +105,7 @@ namespace HyperCube.Models
             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)
         {
@@ -121,17 +144,6 @@ namespace HyperCube.Models
             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}";
-            //string req = "{\"jsonrpc\":\"2.0\",\"id\":1,\"result\":\"0x0000000000000000000000000000000000000000000000000000000000000004\"}";
-            //Console.WriteLine($"req " + req);
-            await Post.PostRequestAsync(req);
-            //Console.WriteLine($"answer {answer} len {answer.Length}" );
-            address = answer;            
-        }
-
         public string GetAddress()
         {
             //this.address = address;

+ 3 - 1
Models/SmartContract.cs

@@ -7,6 +7,8 @@ namespace HyperCube.Models
 {
     public class SmartContract
     {
-
+        public int id;
+        public string Code;
+        public string ByteCode;
     }
 }

+ 29 - 0
MySQLConnector.cs

@@ -58,6 +58,35 @@ namespace HyperCube
             return lastID;
         }
 
+        public async Task<Dictionary<int, Models.SmartContract>> SQLSelectContracts()
+        {
+            string sql = "select * from smart_contracts";
+            Dictionary<int, Models.SmartContract> contracts = new();
+
+            bool connected = IsConnect();
+            if (connected)
+            {
+                SQLcom = new(sql, Connection);
+                MySqlDataReader rdr = SQLcom.ExecuteReader();
+
+                while (rdr.Read())
+                {
+                    Models.SmartContract contract = new();
+                    contract.id = rdr.GetInt32(0);
+                    contract.Code = rdr.GetString(1);
+                    contract.ByteCode = rdr.GetString(2);
+                }
+
+                await Task.WhenAll();
+                rdr.Close();
+                return contracts;
+            }
+            else
+                Console.WriteLine("Not connected to DB.");
+
+            return null;
+        }
+
         public async Task<Dictionary<int, Models.ArticleModel>> SQLSelectArticles(string sql)
         {
             Dictionary<int, Models.ArticleModel> articleModels = new();

+ 17 - 1
Pages/Blockchains.razor

@@ -50,6 +50,22 @@
         <input id="bytecode" size="100" @bind="bytecode" name="bytecode" type="text" placeholder="Transaction address" @bind:event="oninput">
         <br />
     </p>*@
+    <p>
+        <select>
+            @if (Blockchain.newData)
+    {
+                @if (Blockchain.loaded.Count > 0)
+                {
+                @foreach (var c in Blockchain.loaded[0].contracts.Values)
+                    {
+                <option>
+                    Bytecode: @c.ByteCode
+                </option>
+                    }
+                }
+            }
+        </select>
+    </p>
     <p>@result</p>
 
     @code
@@ -82,7 +98,7 @@
                     {
                         result = "contractAddress: "+caddr;
                         contractAddress = caddr;
-                        var run = await Blockchain.loaded[0].RunContract(contractAddress, "0x11111111");
+                        var run = await Blockchain.loaded[0].RunContractWrite(contractAddress, "0x11111111");
                         result = "run: " + run;
                     }
                 }