Browse Source

последнее

Rimmon 4 years ago
parent
commit
d59384496c
4 changed files with 76 additions and 37 deletions
  1. 1 6
      HyperCube.csproj
  2. 23 3
      Models/Blockchain.cs
  3. 48 26
      Pages/Blockchains.razor
  4. 4 2
      Post.cs

+ 1 - 6
HyperCube.csproj

@@ -14,12 +14,7 @@
     <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.4" />
     <PackageReference Include="MySql.EntityFrameworkCore" Version="5.0.0" />
     <PackageReference Include="MySql.Data" Version="8.0.23" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Reference Include="Newtonsoft.Json">
-      <HintPath>bin\Release\net5.0\Newtonsoft.Json.dll</HintPath>
-    </Reference>
+    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
   </ItemGroup>
 
 </Project>

+ 23 - 3
Models/Blockchain.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Text;
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
@@ -25,6 +26,15 @@ namespace HyperCube.Models
             ListAccounts();
             if (!loaded.Contains(this))
                 loaded.Add(this);
+            Console.WriteLine("loaded blockchains " + loaded.Count);
+        }
+
+        public async void AddContract(string bytecode)
+        {
+            var req = $"{{ \"jsonrpc\":\"2.0\",\"method\":\"eth_sendTransaction\",\"params\":[{{\"from\":\"0x4Ce13B6012ad8AB5Bf2E364679173D81C28Cd8d4\",\"gas\":\"0x31b2e\", \"data\":\"{bytecode}\"}}], \"id\":1}}";
+
+            var res = await Post.PostRequestAsync(req);
+            Console.WriteLine("result "+ res);
         }
 
         public async void ListAccounts()
@@ -33,8 +43,18 @@ namespace HyperCube.Models
             //{ "jsonrpc":"2.0","method":"eth_getCode","params":["0x938cae6f6c21ed9d55196e96ef880f562e530553", "latest" ],"id":1}
             //string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_getCode\",\"params\":[\"0x874c6a51e62680d4594cd2555ed8fa47b63ed253\",\"latest\"],\"id\":1}";
             string req = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\", \"params\":[],\"id\":1}";
-            await Post.PostRequestAsync(req, answer);
-            address = answer;
+
+            answer = await Post.PostRequestAsync(req);         
+
+
+            //string json = Encoding.UTF8.GetString(bytedata, 1, bytedata.Length - 1);
+            //try
+            //{
+            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;
         }
 
         public async void ExecuteContract()
@@ -43,7 +63,7 @@ namespace HyperCube.Models
             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, answer);
+            await Post.PostRequestAsync(req);
             //Console.WriteLine($"answer {answer} len {answer.Length}" );
             address = answer;            
         }

+ 48 - 26
Pages/Blockchains.razor

@@ -5,40 +5,62 @@
 
 <p>
     @namespace HyperCube.Models
+    
     @code
     {
-
-        //GetAddress()
-        @*public void OnGet()
-            {
-                @addrr;
-            }*@
+        string hidecontr = "hidden";        
     }
     @foreach (var bc in Blockchain.loaded)
     {
-        @bc.url;
+        <p><b>@bc.url:@bc.port</b>, address: @bc.address</p>
     }
-    @bcURL;
-</p>
-
+    </p>
 
 
-    <p>Ethereum net</p>    
-    <input name="bcurl" @bind="bcURL" type="text" placeholder="URL" @bind:event="oninput" >
-    <input name="bport" type="text" placeholder="port">
-    <button @onclick="GetBlockChain">New blockchain</button>
 
-@code
-{
-    private Random r = new Random();
-    private string bcURL = "no Url";
+    <h4>Ethereum dev network</h4>
+    <p>
+        Add blockchain connection:
+        <input name="bcurl" @bind="bcURL" type="text" placeholder="URL" @bind:event="oninput">
+        <input name="bport" type="text" placeholder="port">
+        <button @onclick="GetBlockChain">Connect</button>
+    </p>
+    <p style="visibility:@hidecontr">
+        Add smart contract:
+        <button @onclick="AddContract">Add</button>
+        <input size="100" @bind="bytecode" name="bytecode" type="text" placeholder="Smart contract bytecode" @bind:event="oninput">
+        <br />
+    </p>
+    <p @bind="error">No error</p>
 
-    private void GetBlockChain()
+    @code
     {
-        Blockchain bc = new HyperCube.Models.Blockchain("1", 2);
-        //bcURL = bc.GetAddress();
-        bc.ExecuteContract();
-        bcURL = bc.address;
-        //private Post post = new Post();
-    }
-}
+        private Random r = new Random();
+        private string bcURL = "no Url";
+        private string bytecode = "";
+        private string error = "";
+
+        private void AddContract()
+        {
+            if (Blockchain.loaded.Count > 0)
+            {
+
+            }
+            //private Post post = new Post();
+        }
+
+        private void GetBlockChain()
+        {
+            if (Blockchain.loaded.Count == 0)
+            {
+                Blockchain bc = new HyperCube.Models.Blockchain("127.0.0.1", 8545);
+                //bcURL = bc.GetAddress();
+                bc.ExecuteContract();
+                bcURL = bc.address;
+                hidecontr = "hidden";
+            }
+            else
+                hidecontr = "visible";
+            //private Post post = new Post();
+        }
+    }

+ 4 - 2
Post.cs

@@ -9,7 +9,7 @@ namespace HyperCube
 {
     public class Post
     {
-        public static async Task PostRequestAsync(string json, string answer)
+        public static async Task<string> PostRequestAsync(string json)
         {
             Console.WriteLine($"json req {json} len {json.Length}");
             var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:8545");
@@ -33,9 +33,11 @@ namespace HyperCube
 
                     var result = reader.ReadLine();
                     Console.WriteLine($"json result {result} len {result.Length}");
+                    response.Close();
+                    return result;
                 }
             }
-            response.Close();
+            
             //using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
             //{
             //    streamWriter.Write(json);